Compare commits
No commits in common. "e94928ae7feee5c29595175afe96866b5c91cced" and "7e8f70a7c239bee64582229314cd94805a9e3649" have entirely different histories.
e94928ae7f
...
7e8f70a7c2
78
api.http
78
api.http
@ -93,46 +93,6 @@ 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 http://localhost:9001/api/vendor/product
|
|
||||||
Authorization: {{auth-token}}
|
|
||||||
|
|
||||||
### get product for id
|
|
||||||
GET http://localhost:9001/api/vendor/product/7
|
|
||||||
Authorization: {{auth-token}}
|
|
||||||
|
|
||||||
### get row
|
|
||||||
GET http://localhost:9001/api/vendor/product/7
|
|
||||||
Authorization: Bearer {{auth-token}}
|
|
||||||
|
|
||||||
### create product
|
|
||||||
POST http://localhost:9001/api/vendor/product
|
|
||||||
Content-Type: application/json
|
|
||||||
Authorization: {{auth-token}}
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "Shirt",
|
|
||||||
"description": "Black Shirt",
|
|
||||||
"hsnCode": "BSM1XL"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
### update field
|
|
||||||
PATCH http://localhost:9001/api/vendor/product/11
|
|
||||||
Content-Type: application/json
|
|
||||||
Authorization: {{auth-token}}
|
|
||||||
|
|
||||||
|
|
||||||
### upate a row
|
|
||||||
PUT http://localhost:9001/api/vendor/product/11
|
|
||||||
Content-Type: application/json
|
|
||||||
Authorization: {{auth-token}}
|
|
||||||
|
|
||||||
|
|
||||||
### delete a row
|
|
||||||
DELETE http://localhost:9001/api/vendor/product/2
|
|
||||||
Authorization: {{auth-token}}
|
|
||||||
|
|
||||||
### create vendor
|
### create vendor
|
||||||
POST http://localhost:9001/api/vendor/
|
POST http://localhost:9001/api/vendor/
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
@ -359,24 +319,38 @@ Authorization: {{auth-token}}
|
|||||||
"quoteFilters": {}
|
"quoteFilters": {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
### CREATE PRODUCT
|
||||||
### GET ALL PRODUCTS
|
POST http://localhost:9001/api/vendor/product/create
|
||||||
POST http://localhost:9001/api/vendor/product/getAll
|
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
Authorization: {{auth-token}}
|
Authorization: {{auth-token}}
|
||||||
|
|
||||||
{
|
{
|
||||||
"common" : {},
|
"name" : "aa",
|
||||||
"quoteFilters": {}
|
"description": "aa",
|
||||||
|
"hsnCode" : "aa",
|
||||||
|
"uom": "NOS"
|
||||||
}
|
}
|
||||||
|
|
||||||
### GET NEXT PO SEQ NUMBER
|
### GET ALL PRODUCTS
|
||||||
GET http://localhost:9001/api/vendor/po/next
|
GET http://localhost:9001/api/vendor/product/getAll
|
||||||
Content-Type: application/json
|
|
||||||
Authorization: {{auth-token}}
|
Authorization: {{auth-token}}
|
||||||
|
|
||||||
|
### GET PRODUCT BY KEY
|
||||||
### GET NEXT QUOTE SEW NUMBER
|
GET http://localhost:9001/api/vendor/product/of/6
|
||||||
GET http://localhost:9001/api/vendor/quote/next
|
|
||||||
Content-Type: application/json
|
|
||||||
Authorization: {{auth-token}}
|
Authorization: {{auth-token}}
|
||||||
|
|
||||||
|
### GET PRODUCT BY HSNCODE
|
||||||
|
DELETE http://localhost:9001/api/vendor/product/3
|
||||||
|
Authorization: {{auth-token}}
|
||||||
|
|
||||||
|
### PRODUCT EXCEl
|
||||||
|
GET http://localhost:9001/api/vendor/product/to/excel
|
||||||
|
Authorization: {{auth-token}}
|
||||||
|
|
||||||
|
### EXCEL VALIDATE
|
||||||
|
GET http://localhost:9001/api/vendor/product/valid/excel
|
||||||
|
Authorization: {{auth-token}}
|
||||||
|
|
||||||
|
### EXCEL TO DB (IMPORT)
|
||||||
|
POST http://localhost:9001/api/vendor/product/excelToDb
|
||||||
|
Authorization: {{auth-token}}
|
||||||
@ -6,6 +6,8 @@ import com.restapi.config.AppConfig.Companion.appConfig
|
|||||||
import com.restapi.config.Auth.validateAuthToken
|
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.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
|
||||||
@ -17,19 +19,20 @@ import io.javalin.Javalin
|
|||||||
import io.javalin.apibuilder.ApiBuilder.*
|
import io.javalin.apibuilder.ApiBuilder.*
|
||||||
import io.javalin.http.ContentType
|
import io.javalin.http.ContentType
|
||||||
import io.javalin.http.Context
|
import io.javalin.http.Context
|
||||||
|
import io.javalin.http.HandlerType
|
||||||
import io.javalin.http.UnauthorizedResponse
|
import io.javalin.http.UnauthorizedResponse
|
||||||
import io.javalin.http.util.NaiveRateLimit
|
import io.javalin.http.util.NaiveRateLimit
|
||||||
import io.javalin.http.util.RateLimitUtil
|
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.*
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import kotlin.jvm.optionals.getOrDefault
|
import kotlin.jvm.optionals.getOrDefault
|
||||||
|
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
val logger = LoggerFactory.getLogger("api")
|
val logger = LoggerFactory.getLogger("api")
|
||||||
val adminRole = Role.Standard(Action.ADMIN)
|
val adminRole = Role.Standard(Action.ADMIN)
|
||||||
@ -77,6 +80,8 @@ fun main(args: Array<String>) {
|
|||||||
TimeUnit.MINUTES
|
TimeUnit.MINUTES
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(ctx.method() == HandlerType.OPTIONS) return@before
|
||||||
|
|
||||||
val authToken = ctx.getAuthHeader() ?: throw UnauthorizedResponse()
|
val authToken = ctx.getAuthHeader() ?: throw UnauthorizedResponse()
|
||||||
|
|
||||||
|
|
||||||
@ -118,35 +123,36 @@ fun main(args: Array<String>) {
|
|||||||
post("/getAll", VendorCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_VENDOR_VIEW", "ROLE_VENDOR_CREATE"))))
|
post("/getAll", VendorCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_VENDOR_VIEW", "ROLE_VENDOR_CREATE"))))
|
||||||
get("quotes/{id}", VendorCtrl::getQuotes, Roles(Role.Explicit(listOf("ROLE_ADMIN", "ROLE_QUOTE_VIEW", "ROLE_QUOTE_CREATE", "ROLE_VENDOR_VIEW"))))
|
get("quotes/{id}", VendorCtrl::getQuotes, Roles(Role.Explicit(listOf("ROLE_ADMIN", "ROLE_QUOTE_VIEW", "ROLE_QUOTE_CREATE", "ROLE_VENDOR_VIEW"))))
|
||||||
get("pos/{id}", VendorCtrl::getPos, Roles(Role.Explicit(listOf("ROLE_ADMIN", "ROLE_PO_VIEW", "ROLE_PO_CREATE`"))))
|
get("pos/{id}", VendorCtrl::getPos, Roles(Role.Explicit(listOf("ROLE_ADMIN", "ROLE_PO_VIEW", "ROLE_PO_CREATE`"))))
|
||||||
put("/rate/{id}/{rating}", VendorCtrl::rate, Roles(Role.Explicit(listOf("ROLE_VENDOR_CREATE", "ROLE_ADMIN"))))
|
put("/rate/{id}/{rating}", VendorCtrl::rate, Roles(Role.Explicit(listOf("ROLE_VENDOR_CREATE"))))
|
||||||
}
|
}
|
||||||
path("/po"){
|
path("/po"){
|
||||||
get("/next", PurchaseOrderCtrl::getNextNum, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_ADMIN"))))
|
|
||||||
post("", PurchaseOrderCtrl::create, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_ADMIN"))))
|
post("", PurchaseOrderCtrl::create, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_ADMIN"))))
|
||||||
post("/batch", PurchaseOrderCtrl::createBatch, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_ADMIN"))))
|
post("/batch", PurchaseOrderCtrl::createBatch, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_VENDOR_CREATE", "ROLE_ADMIN"))))
|
||||||
post("/getAll", PurchaseOrderCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_PO_VIEW", "ROLE_VENDOR_CREATE", "ROLE_ADMIN"))))
|
post("/getAll", PurchaseOrderCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_PO_CREATE", "ROLE_VENDOR_CREATE", "ROLE_ADMIN"))))
|
||||||
get("/{id}", PurchaseOrderCtrl::get, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_PO_VIEW", "ROLE_QUOTE_CREATE"))))
|
get("/{id}", PurchaseOrderCtrl::get, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_PO_VIEW", "ROLE_QUOTE_CREATE"))))
|
||||||
put("/approve/{id}", PurchaseOrderCtrl::approve, Roles(Role.Explicit(listOf("ROLE_ADMIN"))))
|
put("/approve/{id}", PurchaseOrderCtrl::approve, Roles(Role.Explicit(listOf("ROLE_ADMIN", "ROLE_APPROVE"))))
|
||||||
put("/reject/{id}", PurchaseOrderCtrl::reject, Roles(Role.Explicit(listOf("ROLE_ADMIN"))))
|
put("/reject/{id}", PurchaseOrderCtrl::reject, Roles(Role.Explicit(listOf("ROLE_ADMIN", "ROLE_APPROVE"))))
|
||||||
get("/refQuote/{id}", PurchaseOrderCtrl::quoteReference, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_ADMIN"))))
|
get("/refQuote/{id}", PurchaseOrderCtrl::quoteReference, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_PO_VIEW"))))
|
||||||
}
|
}
|
||||||
path("/quote"){
|
path("/quote"){
|
||||||
get("/next", QuotationCtrl::getNextNum, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN"))))
|
|
||||||
post("", QuotationCtrl::create, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN"))))
|
post("", QuotationCtrl::create, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN"))))
|
||||||
post("/batch", QuotationCtrl::createBatch, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN"))))
|
post("/batch", QuotationCtrl::createBatch, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN", "ROLE_VENDOR_CREATE"))))
|
||||||
post("/getAll", QuotationCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN", "ROLE_QUOTE_VIEW"))))
|
post("/getAll", QuotationCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN", "ROLE_VENDOR_CREATE"))))
|
||||||
get("/{id}", QuotationCtrl::get, Roles(Role.Explicit(listOf("ROLE_QUOTE_VIEW", "ROLE_ADMIN", "ROLE_QUOTE_CREATE"))))
|
get("/{id}", QuotationCtrl::get, Roles(Role.Explicit(listOf("ROLE_QUOTE_VIEW", "ROLE_ADMIN", "ROLE_PO_CREATE", "ROLE_QUOTE_CREATE"))))
|
||||||
|
get("/po/{id}", QuotationCtrl::generatePO, Roles(Role.Explicit(listOf("ROLE_ADMIN", "ROLE_PO_CRETE"))))
|
||||||
|
get("/rfq/{rfqNum}", QuotationCtrl::reqForQuote, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_QUOTE_VIEW"))))
|
||||||
delete("/{id}", QuotationCtrl::delete, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN"))))
|
delete("/{id}", QuotationCtrl::delete, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN"))))
|
||||||
}
|
}
|
||||||
path("/product"){
|
path("/product") {
|
||||||
post("", ProductCtrl::create, Roles(Role.Explicit(listOf("ROLE_PRODUCT_CREATE", "ROLE_ADMIN"))))
|
post("/create", ProductCtrl::create, Roles(Role.Explicit(listOf("ROLE_PRODUCT_CREATE", "ROLE_ADMIN"))))
|
||||||
//get("/{hsnCode}", ProductCtrl::get, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
|
get("/getAll", ProductCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
|
||||||
put("/{id}", ProductCtrl::update, Roles(Role.Explicit(listOf("ROLE_PRODUCT_CREATE", "ROLE_ADMIN"))))
|
get("/of/{key}", ProductCtrl::get, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
|
||||||
//patch("/{id}", ProductCtrl::patch, Roles(Role.Explicit(listOf("ROLE_PRODUCT_UPDATE", "ROLE_ADMIN"))))
|
put("/{id}", ProductCtrl::update, Roles(Role.Explicit(listOf("ROLE_PRODUCT_UPDATE", "ROLE_ADMIN"))))
|
||||||
delete("/{id}", ProductCtrl::delete, Roles(Role.Explicit(listOf("ROLE_PRODUCT_CREATE", "ROLE_ADMIN"))))
|
patch("/{id}", ProductCtrl::patch, Roles(Role.Explicit(listOf("ROLE_PRODUCT_UPDATE", "ROLE_ADMIN"))))
|
||||||
get("", ProductCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
|
delete("/{id}", ProductCtrl::delete, Roles(Role.Explicit(listOf("ROLE_PRODUCT_DELETE", "ROLE_ADMIN"))))
|
||||||
get("/{id}", ProductCtrl::get, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
|
get("/to/excel", ProductCtrl::prodExcel)
|
||||||
post("/getAll", ProductCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
|
get("/valid/excel") { ctx -> ctx.json(ExcelRead()) }
|
||||||
|
post("/excelToDb") {ctx -> ctx.json(excelToDb())}
|
||||||
}
|
}
|
||||||
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"))))
|
||||||
@ -157,9 +163,9 @@ fun main(args: Array<String>) {
|
|||||||
delete("/{id}", Document::delete, Roles(Role.Explicit(listOf("ROLE_DOC_CREATE"))))
|
delete("/{id}", Document::delete, Roles(Role.Explicit(listOf("ROLE_DOC_CREATE"))))
|
||||||
}
|
}
|
||||||
path("/reqForQuote"){
|
path("/reqForQuote"){
|
||||||
post("", RequestForQuote::create, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_PO_CREATE", "ROLE_RFQ_CREATE", "ROLE_ADMIN"))))
|
post("", RequestForQuote::create, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE"))))
|
||||||
get("/{id}", RequestForQuote::get, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE", "ROLE_RFQ_VIEW", "ROLE_QUOTE_VIEW", "ROLE_PO_VIEW", "ROLE_ADMIN"))))
|
get("/{id}", RequestForQuote::get, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE", "ROLE_RFQ_VIEW"))))
|
||||||
put("/{id}", RequestForQuote::update, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_PO_CREATE", "ROLE_RFQ_CREATE", "ROLE_ADMIN"))))
|
put("/{id}", RequestForQuote::update, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE"))))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
post("/script/database/{name}", Entities::executeStoredProcedure, Roles(adminRole, Role.DbOps))
|
post("/script/database/{name}", Entities::executeStoredProcedure, Roles(adminRole, Role.DbOps))
|
||||||
|
|||||||
@ -17,7 +17,11 @@ import com.restapi.integ.Scripting
|
|||||||
import io.ebean.CallableSql
|
import io.ebean.CallableSql
|
||||||
import io.ebean.RawSqlBuilder
|
import io.ebean.RawSqlBuilder
|
||||||
import io.javalin.http.*
|
import io.javalin.http.*
|
||||||
|
import org.apache.poi.ss.usermodel.WorkbookFactory
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
|
import java.io.File
|
||||||
|
import java.io.FileInputStream
|
||||||
|
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
|
||||||
@ -374,19 +378,8 @@ object Entities {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
data class Filters(val common :CommonFilters, val custom :CustomFilters)
|
data class Filters(val common :CommonFilters, val custom :CustomFilters)
|
||||||
data class SequenceNumber(val number:String)
|
|
||||||
data class BatchPos(val pos :List<PurchaseOrder>)
|
data class BatchPos(val pos :List<PurchaseOrder>)
|
||||||
object PurchaseOrderCtrl {
|
object PurchaseOrderCtrl {
|
||||||
|
|
||||||
fun getNextNum(ctx: Context){
|
|
||||||
val prefix = "PO/"
|
|
||||||
val cnt = database.find(PurchaseOrder::class.java)
|
|
||||||
.findCount()
|
|
||||||
.toString()
|
|
||||||
.padStart(6, '0')
|
|
||||||
val seq = SequenceNumber(prefix + cnt)
|
|
||||||
ctx.json(seq).status(HttpStatus.OK)
|
|
||||||
}
|
|
||||||
fun get(ctx :Context){
|
fun get(ctx :Context){
|
||||||
val id = ctx.pathParam("id")
|
val id = ctx.pathParam("id")
|
||||||
val po = database.find(PurchaseOrder::class.java, id) ?: throw NotFoundResponse("po not found for $id")
|
val po = database.find(PurchaseOrder::class.java, id) ?: throw NotFoundResponse("po not found for $id")
|
||||||
@ -447,25 +440,19 @@ object PurchaseOrderCtrl {
|
|||||||
|
|
||||||
data class ProductSearch(
|
data class ProductSearch(
|
||||||
var isSort: String? = null
|
var isSort: String? = null
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
object ProductCtrl {
|
object ProductCtrl {
|
||||||
fun get(ctx :Context){
|
fun get(ctx :Context){
|
||||||
val id = ctx.pathParam("id")
|
val key = ctx.pathParam("key")
|
||||||
val product = database.find(Product::class.java)
|
val product = database.find(Product::class.java, key) ?: throw NotFoundResponse("Product not found for $key")
|
||||||
.where()
|
|
||||||
.eq("sys_pk", id.toLong())
|
ctx.json(product)
|
||||||
.findOne()
|
|
||||||
?: throw NotFoundResponse("Product not found for $id")
|
|
||||||
println("Product found")
|
|
||||||
println(product)
|
|
||||||
ctx.json(product).status(HttpStatus.OK)
|
|
||||||
}
|
}
|
||||||
fun getAll(ctx: Context){
|
fun getAll(ctx: Context){
|
||||||
val productList = Session.database.find(Product::class.java)
|
val productList = database.find(Product::class.java)
|
||||||
.findList()
|
.findList()
|
||||||
.sortedBy { it.hsnCode }
|
//.removeAt(4)
|
||||||
|
|
||||||
ctx.json(productList)
|
ctx.json(productList)
|
||||||
}
|
}
|
||||||
@ -477,7 +464,7 @@ object ProductCtrl {
|
|||||||
|
|
||||||
fun delete(ctx: Context) {
|
fun delete(ctx: Context) {
|
||||||
val id = ctx.pathParam("id")
|
val id = ctx.pathParam("id")
|
||||||
val product = database.delete(Product::class.java, id)
|
val product = database.deletePermanent(Product::class.java,id)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun patch(ctx: Context) {
|
fun patch(ctx: Context) {
|
||||||
@ -485,21 +472,44 @@ object ProductCtrl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun update(ctx: Context) {
|
fun update(ctx: Context) {
|
||||||
val id = ctx.pathParam("id")
|
//have to implement
|
||||||
|
|
||||||
}
|
}
|
||||||
|
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\"")
|
||||||
|
}
|
||||||
|
|
||||||
|
data class ProductList(
|
||||||
|
val name: String,
|
||||||
|
val description: String,
|
||||||
|
val hsnCode: String,
|
||||||
|
val uom: String?,
|
||||||
|
)
|
||||||
|
|
||||||
|
fun excelToDb(it: Context){
|
||||||
|
val inputStream = FileInputStream("C:\\Users\\vinay\\IdeaProjects\\readymixerp_modules_api_git\\Untitled 1.xlsx")
|
||||||
|
val workbook = WorkbookFactory.create(inputStream)
|
||||||
|
val workSheet = workbook.getSheetAt(0)
|
||||||
|
|
||||||
|
val dataList = mutableListOf<ProductList>()
|
||||||
|
|
||||||
|
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 data = ProductList(cell1Value, cell2Value, cell3Value, cell4Value)
|
||||||
|
dataList.add(data)
|
||||||
|
|
||||||
|
}
|
||||||
|
database.saveAll(dataList)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object QuotationCtrl {
|
object QuotationCtrl {
|
||||||
fun getNextNum(ctx: Context){
|
|
||||||
val prefix = "QUOTE/"
|
|
||||||
val cnt = database.find(Quotation::class.java)
|
|
||||||
.findCount()
|
|
||||||
.toString()
|
|
||||||
.padStart(6, '0')
|
|
||||||
val seq = SequenceNumber(prefix + cnt)
|
|
||||||
ctx.json(seq).status(HttpStatus.OK)
|
|
||||||
}
|
|
||||||
fun get(ctx :Context){
|
fun get(ctx :Context){
|
||||||
val id = ctx.pathParam("id")
|
val id = ctx.pathParam("id")
|
||||||
val quote = database.find(Quotation::class.java, id) ?: throw NotFoundResponse("quote not found for $id")
|
val quote = database.find(Quotation::class.java, id) ?: throw NotFoundResponse("quote not found for $id")
|
||||||
@ -515,8 +525,27 @@ object QuotationCtrl {
|
|||||||
|
|
||||||
fun create(ctx :Context){
|
fun create(ctx :Context){
|
||||||
val quote = ctx.bodyAsClass<Quotation>()
|
val quote = ctx.bodyAsClass<Quotation>()
|
||||||
database.save(quote)
|
//we have to check if the quotation created date is below the expiry of rfq
|
||||||
ctx.json(quote).status(HttpStatus.CREATED)
|
val rfq = database.find(com.restapi.domain.ReqForQuote::class.java)
|
||||||
|
.where()
|
||||||
|
.eq("reqForQuoteNum", quote.reqForQuoteNum)
|
||||||
|
.findOne()
|
||||||
|
if(rfq != null){
|
||||||
|
//compare dates
|
||||||
|
if(quote.quoteDate!! <= rfq.openTill) {
|
||||||
|
//valid
|
||||||
|
database.save(quote)
|
||||||
|
ctx.status(HttpStatus.CREATED)
|
||||||
|
ctx.json(quote)
|
||||||
|
}else {
|
||||||
|
ctx.status(HttpStatus.BAD_REQUEST)
|
||||||
|
ctx.result("request for quote closed")
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
throw NotFoundResponse("request for quote not found for this quotation")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
fun createBatch(ctx :Context){
|
fun createBatch(ctx :Context){
|
||||||
val quotes = ctx.bodyAsClass<List<Quotation>>()
|
val quotes = ctx.bodyAsClass<List<Quotation>>()
|
||||||
@ -684,4 +713,4 @@ object RequestForQuote {
|
|||||||
//shuld we compare the new body fields with preexisting ones and prepare a sql query to update those fields??
|
//shuld we compare the new body fields with preexisting ones and prepare a sql query to update those fields??
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -167,7 +167,7 @@ fun ExportQuotations(quotes :List<Quotation>) {
|
|||||||
row.createCell(i++).setCellValue(quote.reqForQuoteNum)
|
row.createCell(i++).setCellValue(quote.reqForQuoteNum)
|
||||||
row.createCell(i++).setCellValue(quote.totalAmount)
|
row.createCell(i++).setCellValue(quote.totalAmount)
|
||||||
|
|
||||||
row.createCell(i++).setCellValue(quote.tnc?.joinToString(";"))
|
row.createCell(i++).setCellValue(quote.tnc.joinToString(";"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,12 +66,9 @@ data class VendorFilters (
|
|||||||
) :CustomFilters
|
) :CustomFilters
|
||||||
fun<T> applyVendorHelper(q :io.ebean.ExpressionList<T>, vids :List<Long>?) {
|
fun<T> applyVendorHelper(q :io.ebean.ExpressionList<T>, vids :List<Long>?) {
|
||||||
if (vids.isNullOrEmpty()) return
|
if (vids.isNullOrEmpty()) return
|
||||||
// q.apply {
|
q.apply {
|
||||||
// q.`in`("vendor", vids)
|
q.`in`("vendor", vids)
|
||||||
// }
|
}
|
||||||
// println(vids)
|
|
||||||
// println(vids[0])
|
|
||||||
q.eq("vendor_sys_pk", vids[0])
|
|
||||||
}
|
}
|
||||||
fun<T> applySortHelper(q :io.ebean.ExpressionList<T>, sortBy :String, asc :Boolean) {
|
fun<T> applySortHelper(q :io.ebean.ExpressionList<T>, sortBy :String, asc :Boolean) {
|
||||||
if(sortBy == IGNORE) return;
|
if(sortBy == IGNORE) return;
|
||||||
@ -96,7 +93,6 @@ fun searchQuotes(commonFilters: CommonFilters, quoteFilters: QuoteFilters) : Lis
|
|||||||
.ge("totalAmount", quoteFilters.totalAmountExceeds)
|
.ge("totalAmount", quoteFilters.totalAmountExceeds)
|
||||||
.le("totalAmount", quoteFilters.totalAmountLessThan)
|
.le("totalAmount", quoteFilters.totalAmountLessThan)
|
||||||
.ilike("quoteNum", "%" + quoteFilters.quoteNumLike + "%")
|
.ilike("quoteNum", "%" + quoteFilters.quoteNumLike + "%")
|
||||||
applyFromToHelper(q, commonFilters.fromDate, commonFilters.toDate, "quoteDate")
|
|
||||||
applyVendorHelper(q, commonFilters.vendor)
|
applyVendorHelper(q, commonFilters.vendor)
|
||||||
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
|
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
|
||||||
return q.findList()
|
return q.findList()
|
||||||
@ -136,7 +132,6 @@ fun searchPos(commonFilters: CommonFilters, poFilters: POFilters?) : List<Purcha
|
|||||||
.le("validTill", poFilters.validBefore)
|
.le("validTill", poFilters.validBefore)
|
||||||
.ilike("poNum", "%" + poFilters.poNumLike + "%")
|
.ilike("poNum", "%" + poFilters.poNumLike + "%")
|
||||||
.ilike("referenceQuotation", "%" + poFilters.refQuotation + "%")
|
.ilike("referenceQuotation", "%" + poFilters.refQuotation + "%")
|
||||||
applyFromToHelper(q, commonFilters.fromDate, commonFilters.toDate, "poDate")
|
|
||||||
applyVendorHelper(q, commonFilters.vendor)
|
applyVendorHelper(q, commonFilters.vendor)
|
||||||
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
|
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
|
||||||
return q.findList()
|
return q.findList()
|
||||||
|
|||||||
@ -269,7 +269,7 @@ open class PurchaseOrder :BaseTenantModel() {
|
|||||||
@DbArray
|
@DbArray
|
||||||
var tnc: List<String>? = arrayListOf()
|
var tnc: List<String>? = arrayListOf()
|
||||||
@DbArray
|
@DbArray
|
||||||
var documents: List<String>? = arrayListOf()
|
var documents: MutableList<Long>? = arrayListOf()
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class UOM {
|
enum class UOM {
|
||||||
@ -296,14 +296,13 @@ open class Quotation :BaseTenantModel() {
|
|||||||
|
|
||||||
var reqForQuoteNum: String? = ""
|
var reqForQuoteNum: String? = ""
|
||||||
var quoteNum: String = ""
|
var quoteNum: String = ""
|
||||||
var vendorQuoteNum: String? = ""
|
|
||||||
var quoteDate: LocalDate? = null
|
var quoteDate: LocalDate? = null
|
||||||
var validTill: LocalDate? = null
|
var validTill: LocalDate? = null
|
||||||
@DbArray
|
@DbArray
|
||||||
var tnc: List<String>? = arrayListOf()
|
var tnc: List<String> = arrayListOf()
|
||||||
|
|
||||||
@DbArray
|
@DbArray
|
||||||
var documents: List<String>? = arrayListOf()
|
var documents: MutableList<Long> = arrayListOf()
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class DocType{
|
enum class DocType{
|
||||||
|
|||||||
@ -1,8 +0,0 @@
|
|||||||
-- apply alter tables
|
|
||||||
alter table purchase_order alter column tnc drop not null;
|
|
||||||
alter table purchase_order alter column documents type varchar[] using documents::varchar[];
|
|
||||||
alter table purchase_order alter column documents drop not null;
|
|
||||||
alter table quotation alter column tnc drop not null;
|
|
||||||
alter table quotation alter column documents type varchar[] using documents::varchar[];
|
|
||||||
alter table quotation alter column documents drop not null;
|
|
||||||
alter table quotation add column if not exists vendor_quote_num varchar(255);
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<migration xmlns="http://ebean-orm.github.io/xml/ns/dbmigration">
|
|
||||||
<changeSet type="apply">
|
|
||||||
<alterColumn columnName="tnc" tableName="purchase_order" currentType="varchar[]" notnull="false" currentNotnull="true"/>
|
|
||||||
<alterColumn columnName="documents" tableName="purchase_order" type="varchar[]" currentType="bigint[]" notnull="false" currentNotnull="true"/>
|
|
||||||
<alterColumn columnName="tnc" tableName="quotation" currentType="varchar[]" notnull="false" currentNotnull="true"/>
|
|
||||||
<alterColumn columnName="documents" tableName="quotation" type="varchar[]" currentType="bigint[]" notnull="false" currentNotnull="true"/>
|
|
||||||
<addColumn tableName="quotation">
|
|
||||||
<column name="vendor_quote_num" type="varchar"/>
|
|
||||||
</addColumn>
|
|
||||||
</changeSet>
|
|
||||||
</migration>
|
|
||||||
Loading…
x
Reference in New Issue
Block a user