v0.4
- adding fetch for realTime unitValue - fixed minor bugs
This commit is contained in:
parent
11d12bf948
commit
21a0db6a9c
200
floBank.html
200
floBank.html
@ -8853,7 +8853,52 @@ Bitcoin.Util = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.requests = requests;
|
this.requests = requests;
|
||||||
}
|
},
|
||||||
|
|
||||||
|
refreshNetUnitValues() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
|
||||||
|
if(typeof this.unitValues !== "object")
|
||||||
|
this.unitValues = {};
|
||||||
|
|
||||||
|
//fetch API call function
|
||||||
|
const fetchValue = function(type){
|
||||||
|
return new Promise((res, rej) => {
|
||||||
|
let c = floGlobals.collaterals[c]
|
||||||
|
fetch(c.url).then(response => {
|
||||||
|
if(response.ok){
|
||||||
|
response.json().then(data => {
|
||||||
|
let value;
|
||||||
|
if(!c.path)
|
||||||
|
value = data;
|
||||||
|
else if(Array.isArray(c.path)){
|
||||||
|
value = data;
|
||||||
|
for(p of path)
|
||||||
|
value = value[p];
|
||||||
|
} else
|
||||||
|
value = data[path];
|
||||||
|
if(c.multiplier)
|
||||||
|
value *= c.multiplier;
|
||||||
|
this.unitValues[type] = value;
|
||||||
|
resolve({[type]: value})
|
||||||
|
});
|
||||||
|
} else
|
||||||
|
throw Error("Response Not Valid")
|
||||||
|
}).catch(error => {
|
||||||
|
this.unitValues[type] = NaN;
|
||||||
|
resolve({[type]: error})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
let promises = [];
|
||||||
|
for(let c in floGlobals.collaterals)
|
||||||
|
promises.push(fetchValue(c))
|
||||||
|
Promise.all(promises)
|
||||||
|
.then(results => resolve(Object.assign({}, ...results)))
|
||||||
|
.catch(error => reject(error))
|
||||||
|
})
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
refreshAppData() {
|
refreshAppData() {
|
||||||
@ -8907,14 +8952,6 @@ Bitcoin.Util = {
|
|||||||
return Object.keys(floGlobals.collaterals)
|
return Object.keys(floGlobals.collaterals)
|
||||||
},
|
},
|
||||||
|
|
||||||
getCollateralNetUnitValue(type) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
//fetch API calls
|
|
||||||
//resolve the net unit value
|
|
||||||
//reject if any error
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
viewRequests(processID = null) {
|
viewRequests(processID = null) {
|
||||||
if (!processID)
|
if (!processID)
|
||||||
return this.util.requests;
|
return this.util.requests;
|
||||||
@ -9262,6 +9299,74 @@ Bitcoin.Util = {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
checkCollateralEligibility(floID, collateralIndex, loanAmount) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let col;
|
||||||
|
try {
|
||||||
|
col = floGlobals.appObjects["collaterals"][floID][collateralIndex];
|
||||||
|
} catch (error) {
|
||||||
|
return reject("Account doesnot own any collateral")
|
||||||
|
}
|
||||||
|
if (!col)
|
||||||
|
return reject("Collateral Not Found!")
|
||||||
|
else if (col.status !== "ACTIVE")
|
||||||
|
return reject(`Collateral is not Active! (current status: ${col.status})`)
|
||||||
|
else if (col.loanRefs && col.loanRefs.length) {
|
||||||
|
let loans = col.loanRefs.map(i => floGlobals.appObjects.bank["loans"][floID][
|
||||||
|
i
|
||||||
|
])
|
||||||
|
let totalLoanAmt = 0
|
||||||
|
loans.forEach(l => totalLoanAmt += l.amount)
|
||||||
|
let netVal = this.util.unitValues[col.type];
|
||||||
|
let loanThreshold = floGlobals.policy["loanRatio"] * col.units * netVal;
|
||||||
|
if (totalLoanAmt >= loanThreshold)
|
||||||
|
return reject("Collateral threshold already exceeded")
|
||||||
|
let tmpAmt = loanAmount + totalLoanAmt;
|
||||||
|
if (tmpAmt >= loanThreshold)
|
||||||
|
return reject("Collateral doesnot have enough NET value")
|
||||||
|
resolve("Collateral eligible for loan")
|
||||||
|
} else
|
||||||
|
resolve("Collateral eligible for loan")
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
isCollateralOverflow(floID, index) {
|
||||||
|
if (!col.loanRefs.length)
|
||||||
|
return false
|
||||||
|
let col = floGlobals.appObjects["collaterals"][floID][index];
|
||||||
|
let loanThreshold = floGlobals.policy["loanRatio"] * col.units * this.util.unitValues[col.type];
|
||||||
|
let loans = col.loanRefs.map(i => floGlobals.appObjects.bank["loans"][floID][i])
|
||||||
|
let totalLoanAmt = 0;
|
||||||
|
loans.forEach(l => totalLoanAmt += l.amount)
|
||||||
|
if (totalLoanAmt >= loanThreshold)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
viewCollateralOverflows(floIDs = null) {
|
||||||
|
if (!floIDs)
|
||||||
|
floIDs = Object.keys(floGlobals.appObjects["collaterals"])
|
||||||
|
else if (floCrypto.validateAddr(floIDs))
|
||||||
|
floIDs = [floIDs]
|
||||||
|
else if (!Array.isArray(floIDs))
|
||||||
|
throw Error("Invalid parameters: Parameters must be floID or array of floIDs");
|
||||||
|
let overflows = {}
|
||||||
|
floIDs.forEach(f => {
|
||||||
|
if (f in floGlobals.appObjects["collaterals"]) {
|
||||||
|
overflows[f] = []
|
||||||
|
for (let i in floGlobals.appObjects["collaterals"][f]) {
|
||||||
|
if (this.isCollateralOverflow(f, i))
|
||||||
|
overflows[f].push(floGlobals.appObjects["collaterals"][f][i])
|
||||||
|
}
|
||||||
|
if (!overflows[f].length)
|
||||||
|
delete overflows[f]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return overflows;
|
||||||
|
},
|
||||||
|
|
||||||
//Banker only functions (subAdmins only)
|
//Banker only functions (subAdmins only)
|
||||||
banker: {
|
banker: {
|
||||||
|
|
||||||
@ -9307,38 +9412,7 @@ Bitcoin.Util = {
|
|||||||
floGlobals.appObjects.bank["deposits"][floID][index].status = "CLOSED";
|
floGlobals.appObjects.bank["deposits"][floID][index].status = "CLOSED";
|
||||||
return floCloudAPI.updateObjectData("bank")
|
return floCloudAPI.updateObjectData("bank")
|
||||||
},
|
},
|
||||||
|
|
||||||
checkCollateralEligibility(floID, collateralIndex, loanAmount) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let collateral;
|
|
||||||
try {
|
|
||||||
collateral = floGlobals.appObjects["collaterals"][floID][collateralIndex];
|
|
||||||
} catch (error) {
|
|
||||||
return reject("Account doesnot own any collateral")
|
|
||||||
}
|
|
||||||
if (!collateral)
|
|
||||||
return reject("Collateral Not Found!")
|
|
||||||
else if (collateral.status !== "ACTIVE")
|
|
||||||
return reject(`Collateral is not Active! (current status: ${collateral.status})`)
|
|
||||||
else if (collateral.loanRefs && collateral.loanRefs.length) {
|
|
||||||
let loans = collateral.loanRefs.map(i => floGlobals.appObjects.bank["loans"][floID][
|
|
||||||
i
|
|
||||||
])
|
|
||||||
let totalLoanAmt = 0
|
|
||||||
loans.forEach(l => totalLoanAmt += l.amount)
|
|
||||||
let netVal = this.collateralNetUnitValues[collateral.type];
|
|
||||||
let loanThreshold = floGlobals.policy["loanRatio"] * collateral.units * netVal;
|
|
||||||
if (totalLoanAmt >= loanThreshold)
|
|
||||||
return reject("Collateral threshold already exceeded")
|
|
||||||
let tmpAmt = loanAmount + totalLoanAmt;
|
|
||||||
if (tmpAmt >= loanThreshold)
|
|
||||||
return reject("Collateral doesnot have enough NET value")
|
|
||||||
resolve("Collateral eligible for loan")
|
|
||||||
} else
|
|
||||||
resolve("Collateral eligible for loan")
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
openNewLoan(floID, amount, period, interest, collateralIndex, paymentRefID) {
|
openNewLoan(floID, amount, period, interest, collateralIndex, paymentRefID) {
|
||||||
let loanDetails = {
|
let loanDetails = {
|
||||||
amount: amount,
|
amount: amount,
|
||||||
@ -9402,49 +9476,7 @@ Bitcoin.Util = {
|
|||||||
floGlobals.appObjects.bank["collaterals"][floID][index].closing.timestamp = Date.now();
|
floGlobals.appObjects.bank["collaterals"][floID][index].closing.timestamp = Date.now();
|
||||||
floGlobals.appObjects.bank["collaterals"][floID][index].status = "CLOSED";
|
floGlobals.appObjects.bank["collaterals"][floID][index].status = "CLOSED";
|
||||||
return floCloudAPI.updateObjectData("bank")
|
return floCloudAPI.updateObjectData("bank")
|
||||||
},
|
}
|
||||||
|
|
||||||
isCollateralOverflow(floID, index, netUnitValues) {
|
|
||||||
if (!collateral.loanRefs.length)
|
|
||||||
return false
|
|
||||||
let collateral = floGlobals.appObjects["collaterals"][floID][index];
|
|
||||||
let loanThreshold = floGlobals.policy["loanRatio"] * collateral.units * netUnitValues[collateral
|
|
||||||
.type];
|
|
||||||
let loans = collateral.loanRefs.map(i => floGlobals.appObjects.bank["loans"][floID][i])
|
|
||||||
let totalLoanAmt = 0
|
|
||||||
loans.forEach(l => totalLoanAmt += l.amount)
|
|
||||||
if (totalLoanAmt >= loanThreshold)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
|
|
||||||
viewCollateralOverflows(floIDs = null) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
if (!floIDs)
|
|
||||||
floIDs = Object.keys(floGlobals.appObjects["collaterals"])
|
|
||||||
else if (floCrypto.validateAddr(floIDs))
|
|
||||||
floIDs = [floIDs]
|
|
||||||
else if (!Array.isArray(floIDs))
|
|
||||||
return reject(
|
|
||||||
"Invalid parameters: Parameters must be valid floID or array of floIDs")
|
|
||||||
let overflows = {}
|
|
||||||
floIDs.forEach(floID => {
|
|
||||||
if (floID in floGlobals.appObjects["collaterals"]) {
|
|
||||||
overflows[floID] = []
|
|
||||||
for (let i in floGlobals.appObjects["collaterals"][floID].length) {
|
|
||||||
if (this.isCollateralOverflow(floID, i, netUnitValues))
|
|
||||||
overflows[floID].push(floGlobals.appObjects["collaterals"][
|
|
||||||
floID
|
|
||||||
][i])
|
|
||||||
}
|
|
||||||
if (!overflows[floID].length)
|
|
||||||
delete overflows[floID]
|
|
||||||
}
|
|
||||||
})
|
|
||||||
resolve(overflows)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user