Version 1.0.1 with RIS Circuit Money Exchange !

This commit is contained in:
Paolo Arena
2022-09-14 17:37:29 +02:00
parent 845e244470
commit 3d2e12df70
7 changed files with 143 additions and 71 deletions

View File

@@ -108,17 +108,13 @@ AccountSchema.statics.getAccountsByUsername = async function(idapp, username) {
};
AccountSchema.statics.addtoSaldo = async function(id, amount) {
const Account = this;
AccountSchema.methods.addtoSaldo = async function(amount) {
const account = this;
if (!id)
return false;
const myaccount = await Account.findById(id);
if (myaccount) {
myaccount.saldo = myaccount.saldo + amount;
myaccount.date_updated = new Date();
return await myaccount.save();
if (account) {
account.saldo = account.saldo + amount;
account.date_updated = new Date();
return await account.save();
}
return null;
@@ -158,11 +154,11 @@ AccountSchema.statics.getAccountByUsernameAndCircuitId = async function(idapp, u
if (circuitId)
mycircuit = await Circuit.getCircuitById(circuitId);
else
mycircuit = await Circuit.findOne({name: circuitName}).lean();
mycircuit = await Circuit.findOne({name: circuitName});
if (mycircuit) {
let myaccount = await Account.findOne(myquery).lean();
let myaccount = await Account.findOne(myquery);
if (!myaccount && createifnotexist) {
myaccount = new Account({

View File

@@ -65,7 +65,6 @@ const CircuitSchema = new Schema({
symbol: {
type: String,
maxlength: 7,
unique: true,
},
color: {
type: String,
@@ -211,6 +210,8 @@ CircuitSchema.statics.getWhatToShow = function(idapp, username) {
subname: 1,
longdescr: 1,
regulation: 1,
totCircolante: 1,
totTransato: 1,
systemUserId: 1,
createdBy: 1,
date_created: 1,
@@ -248,6 +249,8 @@ CircuitSchema.statics.getWhatToShow_Unknown = function(idapp, username) {
systemUserId: 1,
founderUserId: 1,
nome_valuta: 1,
totCircolante: 1,
totTransato: 1,
fido_scoperto_default: 1,
qta_max_default: 1,
symbol: 1,
@@ -363,7 +366,7 @@ CircuitSchema.statics.getCircuitByName = async function(idapp, name) {
};
try {
return await Circuit.findOne(myfind).lean();
return await Circuit.findOne(myfind);
} catch (e) {
return null;
@@ -378,7 +381,7 @@ CircuitSchema.statics.getCircuitById = async function(circuitId) {
};
try {
return await Circuit.findOne(myfind).lean();
return await Circuit.findOne(myfind);
} catch (e) {
return null;
@@ -440,12 +443,24 @@ CircuitSchema.statics.getUserCircuits = async function(idapp, username) {
};
CircuitSchema.statics.getCircolanteSingolaTransaz = function(accountorigTable, accountdestTable) {
let circolante = 0;
if (accountdestTable.saldo > 0)
circolante += accountdestTable.saldo;
if (accountorigTable.saldo > 0)
circolante += accountorigTable.saldo;
return circolante;
};
CircuitSchema.statics.sendCoins = async function(onlycheck, idapp, usernameOrig, extrarec) {
const {Movement} = require('../models/movement');
const {Account} = require('../models/account');
let ris = {
result: false,
cansend: true,
errormsg: '',
rec: null,
@@ -453,47 +468,61 @@ CircuitSchema.statics.sendCoins = async function(onlycheck, idapp, usernameOrig,
};
try {
let reccircuit = null;
let circuittable = null;
if (extrarec.circuitname)
reccircuit = await Circuit.getCircuitByName(idapp, extrarec.circuitname);
circuittable = await Circuit.getCircuitByName(idapp, extrarec.circuitname);
if (extrarec.circuitId)
reccircuit = await Circuit.getCircuitById(idapp, extrarec.circuitId);
circuittable = await Circuit.getCircuitById(idapp, extrarec.circuitId);
if (reccircuit) {
const myqty = extrarec.qty;
if (circuittable) {
const myqty = Math.abs(extrarec.qty);
const accountdest = await Account.getAccountByUsernameAndCircuitId(idapp, extrarec.dest, { circuitId: reccircuit._id }, true);
const accountorig = await Account.getAccountByUsernameAndCircuitId(idapp, usernameOrig, { circuitId: reccircuit._id }, true);
const accountdestTable = await Account.getAccountByUsernameAndCircuitId(idapp, extrarec.dest, { circuitId: circuittable._id }, true);
const accountorigTable = await Account.getAccountByUsernameAndCircuitId(idapp, usernameOrig, { circuitId: circuittable._id }, true);
const circolantePrec = this.getCircolanteSingolaTransaz(accountorigTable, accountdestTable);
// Check if Sender has enough money
if (accountorig.saldo - myqty < -accountorig.fidoConcesso) {
if (accountorigTable.saldo - myqty < -accountorigTable.fidoConcesso) {
ris.cansend = false;
ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_FIDO');
}
if (accountdest.saldo + myqty > accountorig.qta_maxConcessa) {
if (accountdestTable.saldo + myqty > accountorigTable.qta_maxConcessa) {
ris.cansend = false;
ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_QTAMAX');
}
if (!onlycheck) {
// Add a Transaction !
ris.rec = await Movement.addMov(idapp, accountorig, accountdest, myqty, extrarec.causal);
ris.rec = await Movement.addMov(idapp, accountorigTable, accountdestTable, myqty, extrarec.causal);
ris.useraccounts = await Account.getUserAccounts(idapp, usernameOrig);
if (ris.cansend && ris.rec) {
const circolanteAtt = this.getCircolanteSingolaTransaz(accountorigTable, accountdestTable);
// Somma di tutte le transazioni
circuittable.totTransato += myqty;
circuittable.totCircolante = circuittable.totCircolante + (circolanteAtt - circolantePrec);
await circuittable.save();
ris.result = true;
console.log('Inviate Monete da', usernameOrig, extrarec.dest, myqty, extrarec.causal);
ris.useraccounts = await Account.getUserAccounts(idapp, usernameOrig);
if (ris.cansend) {
console.log('Invia Monete da', usernameOrig, extrarec.dest, extrarec.qty, extrarec.causal);
} else {
console.log('NON Inviate Monete da', usernameOrig, extrarec.dest, extrarec.qty, extrarec.causal);
console.log('NON Inviate Monete da', usernameOrig, extrarec.dest, myqty, extrarec.causal);
}
}
return ris;
}
} catch (e) {
console.error('Err sendCoins', e);
return false;
ris.result = false;
return ris;
}
};

View File

@@ -84,7 +84,7 @@ MovementSchema.statics.executeQueryTable = function(idapp, params) {
return tools.executeQueryTable(this, 0, params);
};
MovementSchema.statics.addMov = async function(idapp, accountFromId, accountToId, amount, causal) {
MovementSchema.statics.addMov = async function(idapp, accountFromIdTable, accountToIdTable, amount, causal) {
try {
let mymov = Movement(
@@ -92,8 +92,8 @@ MovementSchema.statics.addMov = async function(idapp, accountFromId, accountToId
_id: new ObjectID().toString(),
idapp,
transactionDate: new Date(),
accountFromId: accountFromId._id,
accountToId: accountToId._id,
accountFromId: accountFromIdTable._id,
accountToId: accountToIdTable._id,
amount,
causal,
residual: 0,
@@ -104,9 +104,9 @@ MovementSchema.statics.addMov = async function(idapp, accountFromId, accountToId
const rismov = await mymov.save();
if (rismov) {
// Update saldo dell'Account
Account.addtoSaldo(accountToId, amount);
await accountToIdTable.addtoSaldo(amount);
Account.addtoSaldo(accountFromId, -amount);
await accountFromIdTable.addtoSaldo(-amount);
return rismov;
}

View File

@@ -2084,6 +2084,9 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna
const {SendNotif} = require('../models/sendnotif');
let ris = null;
let outres = {
result: false,
};
let update = {};
try {
if (cmd === shared_consts.CIRCUITCMD.SET) {
@@ -2116,7 +2119,7 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna
if (ris) {
// Invia una notifica alla persona e agli Admin
tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, value, true, username_action, extrarec);
ris = await Circuit.getInfoCircuitByName(idapp, circuitname);
outres.result = await Circuit.getInfoCircuitByName(idapp, circuitname);
}
} else if (cmd === shared_consts.CIRCUITCMD.REQ) {
// Aggiungo la richiesta di Gruppo a me
@@ -2147,21 +2150,19 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna
}
} else {
if (foundIfAlreadyAskCircuit) {
ris = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo il Gruppo da me
outres.result = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo il Gruppo da me
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
}
}
ris = await Circuit.getInfoCircuitByName(idapp, circuitname);
} else if (cmd === shared_consts.CIRCUITCMD.REMOVE_FROM_MYLIST) {
// Remove if is also an Admin
await Circuit.removeAdminOfMyCircuit(idapp, usernameOrig, circuitname);
ris = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
outres.result = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
console.log('ris', ris);
// Invia una notifica alla persona
@@ -2176,51 +2177,50 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
}
ris = await Circuit.deleteCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
outres.result = await Circuit.deleteCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
} else if (cmd === shared_consts.CIRCUITCMD.CANCEL_REQ) {
ris = await Circuit.removeReqCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
outres.result = await Circuit.removeReqCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
} else if (cmd === shared_consts.CIRCUITCMD.REFUSE_REQ) {
ris = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
outres.result = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
ris = await Circuit.removeReqCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
outres.result = await Circuit.removeReqCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
ris = await Circuit.refuseReqCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
outres.result = await Circuit.refuseReqCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
} else if (cmd === shared_consts.CIRCUITCMD.ADDADMIN) {
ris = await Circuit.addToAdminOfCircuit(idapp, usernameOrig, circuitname); // Rimuovo la richiesta di entrare nel gruppo
outres.result = await Circuit.addToAdminOfCircuit(idapp, usernameOrig, circuitname); // Rimuovo la richiesta di entrare nel gruppo
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
} else if (cmd === shared_consts.CIRCUITCMD.REMOVEADMIN) {
ris = await Circuit.removeAdminOfCircuit(idapp, usernameOrig, circuitname); // Rimuovo la richiesta di entrare nel gruppo
outres.result = await Circuit.removeAdminOfCircuit(idapp, usernameOrig, circuitname); // Rimuovo la richiesta di entrare nel gruppo
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
} else if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REQ) {
let ris2 = await Circuit.sendCoins(true, idapp, usernameOrig, extrarec);
if (ris2.cansend) {
// Invia una notifica di moneta alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
} else {
ris2.cansend = false;
}
outres = await Circuit.sendCoins(true, idapp, usernameOrig, extrarec);
ris = ris2;
if (outres.cansend) {
// Invia una notifica di moneta alla persona
outres.result = await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
} else {
outres.cansend = false;
}
} else if ((cmd === shared_consts.CIRCUITCMD.SENDCOINS_ACCEPT) || (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REFUSE)) {
// Before to accept, I see if it's already set !
let ris2 = {
outres = {
cansend: false,
errormsg: '',
};
@@ -2234,26 +2234,41 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna
}
if (!await SendNotif.checkIfCoinsAlreadySent(extrarec.notifId)) {
if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_ACCEPT) {
ris2 = await Circuit.sendCoins(false, idapp, usernameOrig, extrarec);
outres = await Circuit.sendCoins(false, idapp, usernameOrig, extrarec);
} else {
ris2.cansend = true;
outres.cansend = true;
}
if (ris2.cansend) {
if (outres.cansend) {
// Invia una notifica di moneta alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
}
ris2.recnotif = await SendNotif.getRecNotif(extrarec.notifId);
outres.recnotif = await SendNotif.getRecNotif(extrarec.notifId);
ris2.user = await User.getExtraInfoByUsername(idapp, username_action);
} else {
ris2.cansend = false;
outres.cansend = false;
ris2.errormsg = i18n.__('CIRCUIT_COINS_ALREADY_PROCESSED', risStatus);
outres.errormsg = i18n.__('CIRCUIT_COINS_ALREADY_PROCESSED', risStatus);
}
ris = ris2;
ris = true;
}
if (ris && username_action) {
//++Todo: Ottimizzare ! Non occorre inviare tutti questi dati !!! Solo per il Circuito ?!
const user = await User.getExtraInfoByUsername(idapp, username_action);
if (user) {
outres.user = user;
}
outres.listcircuits = await Circuit.findAllIdApp(idapp);
}
if (circuitname)
outres.circuit = await Circuit.getInfoCircuitByName(idapp, circuitname);
return outres;
} catch (e) {
console.error('Error setCircuitCmd: ', e);
}
@@ -3756,6 +3771,12 @@ UserSchema.statics.getExtraInfoByUsername = async function(idapp, username) {
UserSchema.statics.addExtraInfo = async function(idapp, recUser) {
try {
if (recUser._doc.profile.notifs.length <= 0) {
recUser._doc.profile.notifs = shared_consts.DEFAULT_NOTIFS_USER;
await recUser.save();
}
const listSentMyRequestFriends = await User.find({
idapp,
'profile.req_friends': {