Compare commits

..

2 Commits

Author SHA1 Message Date
4e069e0300 fixes 2024-02-08 13:01:03 +05:30
b5c28dd288 add fixes 2024-01-24 17:40:20 +05:30
8 changed files with 104 additions and 49 deletions

View File

@ -141,7 +141,6 @@ Authorization: {{auth-token}}
{
"name": "arsalan",
"msme": "1234",
"hsnCode": "1234",
"gstNumber": "GST123",
"address": "Bangalore",
"rating": 2,
@ -360,3 +359,24 @@ Authorization: {{auth-token}}
"quoteFilters": {}
}
### GET ALL PRODUCTS
POST http://localhost:9001/api/vendor/product/getAll
Content-Type: application/json
Authorization: {{auth-token}}
{
"common" : {},
"quoteFilters": {}
}
### GET NEXT PO SEQ NUMBER
GET http://localhost:9001/api/vendor/po/next
Content-Type: application/json
Authorization: {{auth-token}}
### GET NEXT QUOTE SEW NUMBER
GET http://localhost:9001/api/vendor/quote/next
Content-Type: application/json
Authorization: {{auth-token}}

View File

@ -118,33 +118,35 @@ fun main(args: Array<String>) {
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("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"))))
put("/rate/{id}/{rating}", VendorCtrl::rate, Roles(Role.Explicit(listOf("ROLE_VENDOR_CREATE", "ROLE_ADMIN"))))
}
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("/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_CREATE", "ROLE_VENDOR_CREATE", "ROLE_ADMIN"))))
post("/batch", PurchaseOrderCtrl::createBatch, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_ADMIN"))))
post("/getAll", PurchaseOrderCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_PO_VIEW", "ROLE_VENDOR_CREATE", "ROLE_ADMIN"))))
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", "ROLE_APPROVE"))))
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_PO_VIEW"))))
put("/approve/{id}", PurchaseOrderCtrl::approve, Roles(Role.Explicit(listOf("ROLE_ADMIN"))))
put("/reject/{id}", PurchaseOrderCtrl::reject, Roles(Role.Explicit(listOf("ROLE_ADMIN"))))
get("/refQuote/{id}", PurchaseOrderCtrl::quoteReference, Roles(Role.Explicit(listOf("ROLE_PO_CREATE", "ROLE_ADMIN"))))
}
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("/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_VENDOR_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"))))
post("/batch", QuotationCtrl::createBatch, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN"))))
post("/getAll", QuotationCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN", "ROLE_QUOTE_VIEW"))))
get("/{id}", QuotationCtrl::get, Roles(Role.Explicit(listOf("ROLE_QUOTE_VIEW", "ROLE_ADMIN", "ROLE_QUOTE_CREATE"))))
delete("/{id}", QuotationCtrl::delete, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN"))))
}
path("/product"){
post("", ProductCtrl::create, Roles(Role.Explicit(listOf("ROLE_PRODUCT_CREATE", "ROLE_ADMIN"))))
//get("/{hsnCode}", ProductCtrl::get, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
put("/{id}", ProductCtrl::update, Roles(Role.Explicit(listOf("ROLE_PRODUCT_UPDATE", "ROLE_ADMIN"))))
put("/{id}", ProductCtrl::update, Roles(Role.Explicit(listOf("ROLE_PRODUCT_CREATE", "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_CREATE", "ROLE_ADMIN"))))
get("", ProductCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
get("/{id}", ProductCtrl::get, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
post("/getAll", ProductCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN"))))
}
path("/doc"){
post("", Document::create, Roles(Role.Explicit(listOf("ROLE_DOC_CREATE", "ROLE_ADMIN"))))
@ -155,9 +157,9 @@ fun main(args: Array<String>) {
delete("/{id}", Document::delete, Roles(Role.Explicit(listOf("ROLE_DOC_CREATE"))))
}
path("/reqForQuote"){
post("", RequestForQuote::create, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE"))))
get("/{id}", RequestForQuote::get, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE", "ROLE_RFQ_VIEW"))))
put("/{id}", RequestForQuote::update, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE"))))
post("", RequestForQuote::create, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_PO_CREATE", "ROLE_RFQ_CREATE", "ROLE_ADMIN"))))
get("/{id}", RequestForQuote::get, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE", "ROLE_RFQ_VIEW", "ROLE_QUOTE_VIEW", "ROLE_PO_VIEW", "ROLE_ADMIN"))))
put("/{id}", RequestForQuote::update, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_PO_CREATE", "ROLE_RFQ_CREATE", "ROLE_ADMIN"))))
}
}
post("/script/database/{name}", Entities::executeStoredProcedure, Roles(adminRole, Role.DbOps))

View File

@ -374,8 +374,19 @@ object Entities {
}
}
data class Filters(val common :CommonFilters, val custom :CustomFilters)
data class SequenceNumber(val number:String)
data class BatchPos(val pos :List<PurchaseOrder>)
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){
val id = ctx.pathParam("id")
val po = database.find(PurchaseOrder::class.java, id) ?: throw NotFoundResponse("po not found for $id")
@ -441,10 +452,15 @@ data class ProductSearch(
object ProductCtrl {
fun get(ctx :Context){
val hsnCode = ctx.pathParam("hsnCode")
val product = database.find(Product::class.java, hsnCode) ?: throw NotFoundResponse("Product not found for $hsnCode")
ctx.json(product)
val id = ctx.pathParam("id")
val product = database.find(Product::class.java)
.where()
.eq("sys_pk", id.toLong())
.findOne()
?: throw NotFoundResponse("Product not found for $id")
println("Product found")
println(product)
ctx.json(product).status(HttpStatus.OK)
}
fun getAll(ctx: Context){
val productList = Session.database.find(Product::class.java)
@ -456,6 +472,7 @@ object ProductCtrl {
fun create(ctx :Context){
val product = ctx.bodyAsClass<Product>()
database.save(product)
ctx.json(product).status(HttpStatus.CREATED)
}
fun delete(ctx: Context) {
@ -474,6 +491,15 @@ object ProductCtrl {
}
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){
val id = ctx.pathParam("id")
val quote = database.find(Quotation::class.java, id) ?: throw NotFoundResponse("quote not found for $id")
@ -489,27 +515,8 @@ object QuotationCtrl {
fun create(ctx :Context){
val quote = ctx.bodyAsClass<Quotation>()
//we have to check if the quotation created date is below the expiry of rfq
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")
}
ctx.json(quote).status(HttpStatus.CREATED)
}
fun createBatch(ctx :Context){
val quotes = ctx.bodyAsClass<List<Quotation>>()

View File

@ -169,7 +169,7 @@ fun ExportQuotations(quotes :List<Quotation>) {
row.createCell(i++).setCellValue(quote.reqForQuoteNum)
row.createCell(i++).setCellValue(quote.totalAmount)
row.createCell(i++).setCellValue(quote.tnc.joinToString(";"))
row.createCell(i++).setCellValue(quote.tnc?.joinToString(";"))
}
}
}

View File

@ -62,9 +62,12 @@ data class VendorFilters (
) :CustomFilters
fun<T> applyVendorHelper(q :io.ebean.ExpressionList<T>, vids :List<Long>?) {
if (vids.isNullOrEmpty()) return
q.apply {
q.`in`("vendor", vids)
}
// q.apply {
// 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) {
if(sortBy == IGNORE) return;
@ -89,6 +92,7 @@ fun searchQuotes(commonFilters: CommonFilters, quoteFilters: QuoteFilters) : Lis
.ge("totalAmount", quoteFilters.totalAmountExceeds)
.le("totalAmount", quoteFilters.totalAmountLessThan)
.ilike("quoteNum", "%" + quoteFilters.quoteNumLike + "%")
applyFromToHelper(q, commonFilters.fromDate, commonFilters.toDate, "quoteDate")
applyVendorHelper(q, commonFilters.vendor)
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
return q.findList()
@ -128,6 +132,7 @@ fun searchPos(commonFilters: CommonFilters, poFilters: POFilters?) : List<Purcha
.le("validTill", poFilters.validBefore)
.ilike("poNum", "%" + poFilters.poNumLike + "%")
.ilike("referenceQuotation", "%" + poFilters.refQuotation + "%")
applyFromToHelper(q, commonFilters.fromDate, commonFilters.toDate, "poDate")
applyVendorHelper(q, commonFilters.vendor)
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
return q.findList()

View File

@ -268,7 +268,7 @@ open class PurchaseOrder :BaseTenantModel() {
@DbArray
var tnc: List<String>? = arrayListOf()
@DbArray
var documents: MutableList<Long>? = arrayListOf()
var documents: List<String>? = arrayListOf()
}
enum class UOM {
@ -294,13 +294,14 @@ open class Quotation :BaseTenantModel() {
var reqForQuoteNum: String? = ""
var quoteNum: String = ""
var vendorQuoteNum: String? = ""
var quoteDate: LocalDate? = null
var validTill: LocalDate? = null
@DbArray
var tnc: List<String> = arrayListOf()
var tnc: List<String>? = arrayListOf()
@DbArray
var documents: MutableList<Long> = arrayListOf()
var documents: List<String>? = arrayListOf()
}
enum class DocType{

View File

@ -0,0 +1,8 @@
-- 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);

View File

@ -0,0 +1,12 @@
<?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>