add payments, invoice
This commit is contained in:
@@ -57,6 +57,7 @@ sealed class QueryParam {
|
||||
return when (this) {
|
||||
is Complex -> getValueComplex()
|
||||
is Simple -> simple
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -894,7 +895,6 @@ object OutgoingInventoryCtrl {
|
||||
}
|
||||
|
||||
fun getNextNum(ctx: Context) {
|
||||
println("inside next num")
|
||||
val prefix = "MDN/"
|
||||
val cnt = database.find(OutgoingInventory::class.java)
|
||||
.findCount()
|
||||
@@ -904,3 +904,103 @@ object OutgoingInventoryCtrl {
|
||||
ctx.json(seq).status(HttpStatus.OK)
|
||||
}
|
||||
}
|
||||
object PaymentCtrl {
|
||||
fun create(ctx :Context){
|
||||
val pmt = ctx.bodyAsClass(Payment::class.java)
|
||||
database.save(pmt)
|
||||
//update the status of invoices pertaining to payment.vendor
|
||||
|
||||
val invcs = searchInvoices(CommonFilters(sortBy = "date", sortAsc = true), InvoiceFilters(status = InvoiceStatus.PAID_NONE))
|
||||
val tot: Double = pmt.amount
|
||||
for(inv in invcs){
|
||||
val deduct = Math.min(pmt.amount, inv.totalAmount)
|
||||
inv.totalAmount -= deduct
|
||||
pmt.amount -= deduct
|
||||
database.update(inv)
|
||||
if(pmt.amount <= 0.0) break
|
||||
}
|
||||
if (pmt.amount > 0.0){
|
||||
//balance left for this vendor
|
||||
val v = pmt.vendor?.sysPk?.let { database.find(Vendor::class.java, it) }
|
||||
v?.apply {
|
||||
outstanding = outstanding?.minus(tot)
|
||||
database.update(v)
|
||||
}
|
||||
}
|
||||
ctx.json(pmt).status(HttpStatus.CREATED)
|
||||
}
|
||||
fun get(ctx : Context){
|
||||
val id = ctx.pathParam("id")
|
||||
val pmt = database.find(Payment::class.java, id)
|
||||
?: throw NotFoundResponse("No payment found for this id")
|
||||
ctx.json(pmt).status(HttpStatus.OK)
|
||||
}
|
||||
data class PMTF(val common : CommonFilters, val paymentFilters: PaymentFilters)
|
||||
fun getAll(ctx : Context){
|
||||
val filters = ctx.bodyAsClass<PMTF>()
|
||||
val payments = searchPayments(filters.common, filters.paymentFilters)
|
||||
println(payments)
|
||||
val excel = ctx.queryParam("excel")
|
||||
if (excel !== null) {
|
||||
// exportPayments(payments)
|
||||
val inputStream = FileInputStream("./excel/Payments.xls")
|
||||
ctx.result(inputStream).status(HttpStatus.OK)
|
||||
} else {
|
||||
ctx.json(payments).status(HttpStatus.OK)
|
||||
}
|
||||
}
|
||||
fun update(ctx : Context){
|
||||
val id = ctx.pathParam("id").toLong()
|
||||
val pmt =
|
||||
database.find(Payment::class.java, id) ?: throw NotFoundResponse("payment not found for $id")
|
||||
val updatedPayment = ctx.bodyAsClass<Payment>()
|
||||
pmt.patchValues(updatedPayment)
|
||||
pmt.update()
|
||||
ctx.json(pmt).status(HttpStatus.OK)
|
||||
}
|
||||
}
|
||||
object InvoiceCtrl {
|
||||
fun create(ctx : Context){
|
||||
val invoice = ctx.bodyAsClass<Invoice>()
|
||||
database.save(invoice)
|
||||
ctx.json(invoice).status(HttpStatus.CREATED)
|
||||
}
|
||||
fun get(ctx : Context){
|
||||
val id = ctx.pathParam("id").toLong()
|
||||
val invoice = database.find(Invoice::class.java, id)
|
||||
?: throw NotFoundResponse("No invoice found with id $id")
|
||||
ctx.json(invoice).status(HttpStatus.OK)
|
||||
}
|
||||
data class INVF(val common: CommonFilters, val invoiceFilters: InvoiceFilters)
|
||||
fun getAll(ctx : Context){
|
||||
val filters = ctx.bodyAsClass<INVF>()
|
||||
val invoices = searchInvoices(filters.common, filters.invoiceFilters)
|
||||
val excel = ctx.queryParam("excel")
|
||||
if (excel !== null) {
|
||||
// exportPayments(payments)
|
||||
val inputStream = FileInputStream("./excel/Invoices.xls")
|
||||
ctx.result(inputStream).status(HttpStatus.OK)
|
||||
} else {
|
||||
ctx.json(invoices).status(HttpStatus.OK)
|
||||
}
|
||||
|
||||
}
|
||||
fun update(ctx : Context){
|
||||
val id = ctx.pathParam("id").toLong()
|
||||
val invoice =
|
||||
database.find(Invoice::class.java, id) ?: throw NotFoundResponse("invoice not found for $id")
|
||||
val updatedPayment = ctx.bodyAsClass<Invoice>()
|
||||
invoice.patchValues(updatedPayment)
|
||||
invoice.update()
|
||||
ctx.json(invoice).status(HttpStatus.OK)
|
||||
}
|
||||
fun getNextNum(ctx : Context){
|
||||
val prefix = "INV/"
|
||||
val cnt = database.find(Invoice::class.java)
|
||||
.findCount()
|
||||
.toString()
|
||||
.padStart(6, '0')
|
||||
val seq = SequenceNumber(prefix + cnt)
|
||||
ctx.json(seq).status(HttpStatus.OK)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user