1453 lines
38 KiB
JavaScript
Executable File
1453 lines
38 KiB
JavaScript
Executable File
const mongoose = require('mongoose');
|
||
const _ = require('lodash');
|
||
|
||
const tools = require('../tools/general');
|
||
|
||
const { ListaIngresso } = require('./listaingresso');
|
||
const { NavePersistente } = require('./navepersistente');
|
||
const { Settings } = require('./settings');
|
||
const { User } = require('./user');
|
||
|
||
const { ObjectID } = require('mongodb');
|
||
|
||
const printf = require('util').format;
|
||
|
||
const shared_consts = require('../tools/shared_nodejs');
|
||
|
||
mongoose.Promise = global.Promise;
|
||
|
||
mongoose.level = "F";
|
||
// Resolving error Unknown modifier: $pushAll
|
||
mongoose.plugin(schema => {
|
||
schema.options.usePushEach = true
|
||
});
|
||
|
||
mongoose.set('debug', process.env.DEBUG);
|
||
|
||
|
||
const NaveSchema = new mongoose.Schema({
|
||
idapp: {
|
||
type: String,
|
||
required: true,
|
||
},
|
||
riga: {
|
||
type: Number,
|
||
},
|
||
col: {
|
||
type: Number,
|
||
},
|
||
ind_order: {
|
||
type: Number,
|
||
},
|
||
parent_id: {
|
||
type: mongoose.Schema.Types.ObjectId,
|
||
},
|
||
sent_msg_howto_make_gift: {
|
||
type: Boolean,
|
||
default: false,
|
||
},
|
||
made_gift: {
|
||
type: Boolean,
|
||
default: false,
|
||
},
|
||
date_made_gift: {
|
||
type: Date,
|
||
},
|
||
received_gift: {
|
||
type: Boolean,
|
||
default: false,
|
||
},
|
||
date_received_gift: {
|
||
type: Date,
|
||
},
|
||
created: {
|
||
type: Date,
|
||
},
|
||
num_tess: { // numero di tessitura
|
||
type: Number,
|
||
default: 1
|
||
},
|
||
note: {
|
||
type: String
|
||
},
|
||
});
|
||
|
||
NaveSchema.statics.getTotInLista = async function (idapp) {
|
||
const Nave = this;
|
||
|
||
const myfind = { idapp };
|
||
|
||
return await Nave.count(myfind);
|
||
};
|
||
|
||
NaveSchema.statics.findByIndOrder = function (idapp, ind_order) {
|
||
const Nave = this;
|
||
|
||
|
||
try {
|
||
return Nave.findOne({
|
||
'idapp': idapp,
|
||
'ind_order': ind_order,
|
||
});
|
||
} catch (e) {
|
||
|
||
}
|
||
};
|
||
|
||
NaveSchema.statics.checkIfNaveExist = async function (idapp, username) {
|
||
const Nave = this;
|
||
|
||
try {
|
||
|
||
const arrlista = await ListaIngresso.find({
|
||
idapp,
|
||
username,
|
||
// added: true,
|
||
deleted: false,
|
||
});
|
||
|
||
for (const rec of arrlista) {
|
||
const mynave = await Nave.find({ idapp, ind_order: rec.ind_order });
|
||
if (!!mynave)
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
|
||
} catch (e) {
|
||
|
||
}
|
||
};
|
||
|
||
NaveSchema.statics.findByIndOrderAndNumTess = function (idapp, ind_order, num_tess) {
|
||
const Nave = this;
|
||
|
||
try {
|
||
return Nave.findOne({
|
||
idapp,
|
||
ind_order,
|
||
num_tess,
|
||
});
|
||
} catch (e) {
|
||
|
||
}
|
||
};
|
||
|
||
NaveSchema.statics.findById = function (idapp, id) {
|
||
const Nave = this;
|
||
|
||
const { User } = require('./user');
|
||
|
||
const myquery = getQueryProj({ idapp, '_id': id });
|
||
|
||
return Nave.aggregate(myquery)
|
||
.then(async (rec) => {
|
||
try {
|
||
if (!!rec) {
|
||
if (rec.length > 0) {
|
||
const ris = await User.findByIndOrder(idapp, rec[0].ind_order);
|
||
if (!!ris) {
|
||
if (!!ris._doc)
|
||
rec[0] = { ...rec[0], ...ris._doc };
|
||
else
|
||
rec[0] = { ...rec[0], ...ris };
|
||
return rec[0];
|
||
}
|
||
return rec[0];
|
||
} else {
|
||
return null;
|
||
}
|
||
} else {
|
||
return null;
|
||
}
|
||
} catch (e) {
|
||
console.error(e.message);
|
||
}
|
||
});
|
||
|
||
};
|
||
|
||
|
||
NaveSchema.statics.getFieldsForSearch = function () {
|
||
return [{ field: 'ind_order', type: tools.FieldType.number },
|
||
{ field: 'riga', type: tools.FieldType.number },
|
||
{ field: 'col', type: tools.FieldType.number },
|
||
{ field: '_id', type: tools.FieldType.exact }]
|
||
};
|
||
|
||
NaveSchema.statics.executeQueryTable = function (idapp, params) {
|
||
params.fieldsearch = this.getFieldsForSearch();
|
||
return tools.executeQueryTable(this, idapp, params);
|
||
};
|
||
|
||
NaveSchema.statics.findAllIdApp = function (idapp) {
|
||
const Nave = this;
|
||
|
||
const myfind = { idapp };
|
||
|
||
return Nave.find(myfind, (err, arrrec) => {
|
||
return arrrec
|
||
});
|
||
};
|
||
|
||
NaveSchema.statics.findByRigaCol = function (idapp, riga, col, nullifnotexist) {
|
||
const Nave = this;
|
||
|
||
myrigacol = {
|
||
idapp,
|
||
riga,
|
||
col,
|
||
nullifnotexist
|
||
};
|
||
|
||
return Nave.findGeneric(myrigacol);
|
||
|
||
};
|
||
|
||
NaveSchema.statics.findDonatoreByNave = function (idapp, nave) {
|
||
try {
|
||
|
||
const arrrigacol = nave.split(".");
|
||
if (arrrigacol.length <= 0)
|
||
return;
|
||
|
||
let riganave = parseInt(arrrigacol[0]);
|
||
let colnave = parseInt(arrrigacol[1]);
|
||
|
||
let rigadonatore = riganave + 3;
|
||
if (rigadonatore < 1)
|
||
rigadonatore = 1;
|
||
|
||
coldonatoreIni = calcval(riganave, colnave, 8) + (1);
|
||
coldonatoreFine = calcval(riganave, colnave, 8) + (8);
|
||
|
||
const miaquery = {
|
||
idapp,
|
||
riga: rigadonatore,
|
||
$and: [{ col: { $gte: { coldonatoreIni } } }, { col: { $lte: { coldonatoreFine } } }]
|
||
};
|
||
|
||
return Nave.findOne(miaquery);
|
||
} catch (e) {
|
||
console.error(e.message);
|
||
}
|
||
};
|
||
|
||
function getIndColonneByNave(navemediatore) {
|
||
let riga = navemediatore.riga;
|
||
let col = navemediatore.col;
|
||
|
||
let col_ini = calcval(riga, col, 8) + 1;
|
||
let col_fine = col_ini + 7;
|
||
|
||
return { riga: riga + 3, col_ini, col_fine }
|
||
}
|
||
|
||
NaveSchema.statics.getusersByNave = function (idapp, navemediatore) {
|
||
|
||
if ((!navemediatore.riga) || (!navemediatore.col))
|
||
return [];
|
||
|
||
const obj = getIndColonneByNave(navemediatore);
|
||
|
||
const miacol_ini = obj.col_ini;
|
||
const miacol_fine = obj.col_fine;
|
||
|
||
const miaquery = {
|
||
idapp,
|
||
riga: obj.riga,
|
||
$and: [
|
||
{ col: { $gte: miacol_ini } },
|
||
{ col: { $lte: miacol_fine } }
|
||
],
|
||
};
|
||
|
||
return Nave.find(miaquery);
|
||
|
||
};
|
||
|
||
|
||
NaveSchema.statics.findRecByRigaColParent = async function (idapp, riga, col, numparentUp) {
|
||
const Nave = this;
|
||
|
||
const { User } = require('./user');
|
||
|
||
const myrigacol = {
|
||
idapp,
|
||
riga,
|
||
col
|
||
};
|
||
|
||
if (numparentUp === 0) {
|
||
return await Nave.findGeneric(myrigacol);
|
||
}
|
||
|
||
let parentup = 0;
|
||
let myrec = null;
|
||
let lastrec = null;
|
||
|
||
while (parentup < numparentUp) {
|
||
|
||
myrec = await Nave.findGeneric(myrigacol);
|
||
if (!!myrec) {
|
||
if (myrec.parent_id === "0") {
|
||
break;
|
||
}
|
||
|
||
recfind = await Nave.findById(idapp, myrec.parent_id);
|
||
if (!!recfind) {
|
||
lastrec = recfind;
|
||
myrigacol.riga = lastrec.riga;
|
||
myrigacol.col = lastrec.col;
|
||
} else {
|
||
lastrec = await Nave.findGeneric({ idapp, riga: 0, col: 0 });
|
||
break;
|
||
}
|
||
}
|
||
parentup++;
|
||
}
|
||
|
||
if (!lastrec) {
|
||
return await Nave.findGeneric({ idapp, riga: 0, col: 0 });
|
||
}
|
||
|
||
return lastrec;
|
||
|
||
};
|
||
|
||
|
||
NaveSchema.statics.findGeneric = function (myrigacol) {
|
||
|
||
const { ListaIngresso } = require('./listaingresso');
|
||
|
||
const myquery = getQueryProj({ idapp: myrigacol.idapp, riga: myrigacol.riga, col: myrigacol.col });
|
||
|
||
return Nave.aggregate(myquery)
|
||
.then(async (rec) => {
|
||
if (!rec || rec.length === 0) {
|
||
if (myrigacol.nullifnotexist)
|
||
return null;
|
||
|
||
const ris = await ListaIngresso.findByIndOrder(myrigacol.idapp, 0);
|
||
const arr = [];
|
||
arr.push(ris);
|
||
return arr;
|
||
}
|
||
else {
|
||
return rec;
|
||
}
|
||
}
|
||
).then(async (rec) => {
|
||
|
||
const { User } = require('./user');
|
||
|
||
if (!!rec) {
|
||
if (rec.length > 0) {
|
||
// console.log('rec', rec);
|
||
// console.table('myrigacol', myrigacol);
|
||
if (!!rec[0]) {
|
||
const newrec = await User.getSmallRecByIndOrder(myrigacol.idapp, rec[0].ind_order);
|
||
if (!!newrec) {
|
||
let myarr = {};
|
||
if (rec[0]._doc === undefined)
|
||
myarr = { ...newrec, ...rec[0] };
|
||
else
|
||
myarr = { ...newrec, ...rec[0]._doc };
|
||
return myarr;
|
||
} else {
|
||
let myarr = rec[0];
|
||
if (!!newrec) {
|
||
if (rec[0]._doc === undefined)
|
||
myarr = { ...newrec, ...rec[0] };
|
||
else
|
||
myarr = { ...newrec, ...rec[0]._doc };
|
||
}
|
||
return myarr;
|
||
}
|
||
} else {
|
||
const ris = await ListaIngresso.findByIndOrder(myrigacol.idapp, 0);
|
||
if (!!ris)
|
||
return ris[0]
|
||
}
|
||
}
|
||
}
|
||
return null;
|
||
}).catch((e) => {
|
||
console.error(e.message);
|
||
});
|
||
|
||
}
|
||
;
|
||
|
||
|
||
NaveSchema.statics.findSognatoriByFuoco = async function (idapp, riga, col, offset) {
|
||
const Nave = this;
|
||
|
||
// const myrigacol = getRigaColSognatoreByFuoco(idapp, riga, col);
|
||
|
||
// return Nave.findGeneric(myrigacol);
|
||
|
||
return [await Nave.findRecByRigaColParent(idapp, riga, col, 6 - offset),
|
||
await Nave.findRecByRigaColParent(idapp, riga, col, 5 - offset),
|
||
await Nave.findRecByRigaColParent(idapp, riga, col, 4 - offset)
|
||
]
|
||
|
||
};
|
||
|
||
|
||
NaveSchema.statics.findMediatoreByFuoco = async function (idapp, riga, col, offset) {
|
||
const Nave = this;
|
||
|
||
// const myrigacol = getRigaColMediatoreByFuoco(idapp, riga, col);
|
||
// return Nave.findGeneric(myrigacol);
|
||
return await Nave.findRecByRigaColParent(idapp, riga, col, 3 - offset);
|
||
|
||
};
|
||
|
||
function getQueryProj(myfilter) {
|
||
|
||
myobjField = {
|
||
_id: 1,
|
||
idapp: 1,
|
||
lang: 1,
|
||
ind_order: 1,
|
||
name: 1,
|
||
surname: 1,
|
||
username: 1,
|
||
invitante_username: 1,
|
||
deleted: 1,
|
||
sospeso: 1,
|
||
'profile.paymenttypes': 1,
|
||
'profile.teleg_id': 1,
|
||
'profile.email_paypal': 1,
|
||
'profile.cell': 1,
|
||
made_gift: 1,
|
||
sent_msg_howto_make_gift: 1,
|
||
date_made_gift: 1,
|
||
note: 1,
|
||
received_gift: 1,
|
||
date_received_gift: 1,
|
||
num_tess: 1,
|
||
parent_id: 1,
|
||
riga: 1,
|
||
col: 1,
|
||
created: 1,
|
||
// date_start: 1,
|
||
// date_gift_chat_open: 1,
|
||
// link_chat: 1,
|
||
// provvisoria: 1,
|
||
// note_bot: 1,
|
||
// note_interne: 1,
|
||
// tutor: 1,
|
||
// tutor_namesurname: 1,
|
||
};
|
||
|
||
const query = [
|
||
{ $match: myfilter },
|
||
{
|
||
$lookup: {
|
||
from: "listaingressos",
|
||
localField: "ind_order",
|
||
foreignField: "ind_order", // field in the user collection
|
||
as: "mylista"
|
||
}
|
||
},
|
||
{
|
||
$replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$mylista", 0] }, "$$ROOT"] } }
|
||
},
|
||
{
|
||
$lookup: {
|
||
from: "users",
|
||
as: "user",
|
||
let: { username: '$username' },
|
||
pipeline: [
|
||
{
|
||
$match: {
|
||
$expr: {
|
||
$and: [
|
||
{ $eq: ['$username', '$$username'] },
|
||
{ $eq: ['$idapp', myfilter.idapp] },
|
||
]
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
},
|
||
{
|
||
$replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } }
|
||
// $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] },] } }
|
||
},
|
||
{ $match: { $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }] } },
|
||
{ $project: myobjField }
|
||
];
|
||
|
||
return query;
|
||
}
|
||
|
||
|
||
NaveSchema.statics.setRiga = function (idapp, riga) {
|
||
return Settings.setKeyNum(idapp, 'riga', riga);
|
||
};
|
||
|
||
NaveSchema.statics.getRiga = function (idapp) {
|
||
return Settings.getKeyNum(idapp, 'riga', 1);
|
||
};
|
||
|
||
NaveSchema.statics.setCol = function (idapp, col) {
|
||
return Settings.setKeyNum(idapp, 'col', col);
|
||
};
|
||
|
||
NaveSchema.statics.getCol = function (idapp) {
|
||
return Settings.getKeyNum(idapp, 'col', 1);
|
||
};
|
||
|
||
function getmaxcol(riga) {
|
||
|
||
return Math.pow(2, riga - 1);
|
||
}
|
||
|
||
function getPrimoFuocoByIndCol(col) {
|
||
// let ris = Math.ceil(col - (col % 8)) + 1;
|
||
let ris = ((Math.ceil(col / 8) - 1) * 8) + 1;
|
||
if (ris <= 0)
|
||
ris = 1;
|
||
return ris
|
||
}
|
||
|
||
async function getusertextbyrec(myrec, symbol, lettera, riga, col, ind) {
|
||
let visu_test = false;
|
||
if (!!myrec)
|
||
visu_test = await Settings.getValDbSettings(myrec.idapp, 'VISU_TEST');
|
||
|
||
if (!visu_test) {
|
||
if (myrec)
|
||
return lettera + ind + ' - ' + symbol + ' ' + myrec.name + ' ' + tools.getFirst2Car(myrec.surname) + ' (' + myrec.username + ')';
|
||
else
|
||
return lettera + ind + ' - ' + symbol;
|
||
|
||
} else {
|
||
if (myrec)
|
||
return lettera + ind + ' - ' + symbol + '[' + riga + ',' + col + ']' + ' ' + myrec.name + ' ' + myrec.surname + '';
|
||
else
|
||
return lettera + ind + ' - ' + symbol;
|
||
}
|
||
}
|
||
|
||
function checkifNullThenEmpty(rec, riga, col) {
|
||
if (rec === null) {
|
||
return {
|
||
name: '',
|
||
surname: '',
|
||
username: '',
|
||
riga,
|
||
col,
|
||
}
|
||
} else {
|
||
return rec;
|
||
}
|
||
}
|
||
|
||
NaveSchema.statics.getPlaccaGenerica = async function (idapp, riga, col, offset, solorecord) {
|
||
const Nave = this;
|
||
|
||
try {
|
||
let recsognatori = await Nave.findSognatoriByFuoco(idapp, riga, col, offset);
|
||
let recmediatore = await Nave.findMediatoreByFuoco(idapp, riga, col, offset);
|
||
let navepersistente = await NavePersistente.findByRigaColByDonatore(idapp, riga, col, offset);
|
||
|
||
if (!solorecord) {
|
||
mystr = tools.ACAPO;
|
||
|
||
mystr += 'GIFTING CHAT (' + riga + '.' + col + ') ' + tools.ACAPO + tools.ACAPO;
|
||
|
||
if (offset === tools.Placca.SONOFUOCO) {
|
||
mystr += tools.Placca.SOGNATORE + tools.Placca.STR_SOGNATORE + ': ' + await getusertextbyrec(recsognatori[0], '', '', riga, col, '') + tools.ACAPO + tools.ACAPO;
|
||
mystr += tools.Placca.MEDIATORE + tools.Placca.STR_MEDIATORE + ': ' + await getusertextbyrec(recmediatore, '', '', riga, col, '') + tools.ACAPO + tools.ACAPO;
|
||
}
|
||
|
||
if (offset === tools.Placca.SONOACQUA) {
|
||
mystr += tools.Placca.SOGNATORE + tools.Placca.STR_SOGNATORE + ': ' + await getusertextbyrec(recmediatore, '', '', riga, col, '') + tools.ACAPO + tools.ACAPO;
|
||
}
|
||
|
||
let symb = {
|
||
car: 'D',
|
||
icona: '🔥'
|
||
};
|
||
|
||
if (offset === tools.Placca.SONOFUOCO) {
|
||
mystr += tools.Placca.STR_DONATORI + ':' + tools.ACAPO;
|
||
} else if (offset === tools.Placca.SONOACQUA) {
|
||
mystr += tools.Placca.STR_MEDIATORI + ':' + tools.ACAPO;
|
||
symb = {
|
||
car: 'A',
|
||
icona: '💦'
|
||
};
|
||
}
|
||
}
|
||
|
||
// mystr += '🔥🌏💦💨🔥🌏💦💨' + tools.ACAPO;
|
||
|
||
let arrdonatori = [];
|
||
// let numcol = Math.pow(2, indriga - 1);
|
||
let primofuoco = getPrimoFuocoByIndCol(col * Math.pow(2, offset));
|
||
|
||
let ind = 1;
|
||
for (let indcol = primofuoco; indcol < primofuoco + 8; indcol++) {
|
||
let indr = riga + offset;
|
||
let indc = indcol + (offset * indr);
|
||
|
||
indr = riga + offset;
|
||
// indc = calcval(riga, col, 8) + (indcol - primofuoco + 1);
|
||
if (offset === 0)
|
||
indc = indcol;
|
||
else
|
||
indc = indcol;
|
||
// miacol = calcval(riga, col, 8) + (indfuoco);
|
||
|
||
|
||
let recfuoco = await Nave.findByRigaCol(idapp, indr, indc, true);
|
||
recfuoco = checkifNullThenEmpty(recfuoco, indr, indc);
|
||
arrdonatori.push({ index: ind, ...recfuoco });
|
||
|
||
if (!solorecord) {
|
||
mystr += await getusertextbyrec(recfuoco, symb.icona, symb.car, indr, indc, ind) + tools.ACAPO;
|
||
}
|
||
ind++;
|
||
}
|
||
|
||
if (solorecord) {
|
||
res = {
|
||
recsognatori,
|
||
recmediatore,
|
||
navepersistente,
|
||
arrdonatori
|
||
};
|
||
|
||
return res;
|
||
} else {
|
||
return mystr;
|
||
}
|
||
|
||
} catch (e) {
|
||
console.error(e.message);
|
||
}
|
||
|
||
};
|
||
|
||
NaveSchema.statics.getPlaccaPerDonatore = async function (idapp, riga, col, solorecord, rec) {
|
||
const Nave = this;
|
||
|
||
if (solorecord) {
|
||
|
||
rec.donatore = await Nave.getPlaccaGenerica(idapp, riga, col, tools.Placca.SONOFUOCO, solorecord);
|
||
newcol = Math.ceil(col / (Math.pow(2, 3)));
|
||
rec.donatore.arrterra = await Nave.getArrTerra(idapp, riga - 3, newcol);
|
||
rec.donatore.arraria = await Nave.getArrAria(idapp, riga - 3, newcol);
|
||
|
||
return rec;
|
||
} else {
|
||
return await Nave.getPlaccaGenerica(idapp, riga, col, tools.Placca.SONOFUOCO, solorecord);
|
||
}
|
||
|
||
|
||
};
|
||
|
||
NaveSchema.statics.getPlaccaPerMediatore = async function (idapp, riga, col, solorecord, rec) {
|
||
const Nave = this;
|
||
rec.mediatore = await Nave.getPlaccaGenerica(idapp, riga, col, tools.Placca.SONOACQUA, solorecord);
|
||
rec.mediatore.navepersistente = await NavePersistente.findByRigaColByDonatore(idapp, riga, col, -tools.Placca.SONOACQUA);
|
||
|
||
rec.mediatore.arrterra = await Nave.getArrTerra(idapp, riga, col);
|
||
rec.mediatore.arraria = await Nave.getArrAria(idapp, riga, col);
|
||
|
||
return rec;
|
||
};
|
||
|
||
NaveSchema.statics.getArrTerra = async function (idapp, riga, col) {
|
||
const Nave = this;
|
||
|
||
let arrterra = [];
|
||
for (let indterra = 1; indterra <= 2; indterra++) {
|
||
miacol = calcval(riga, col, 2) + (indterra);
|
||
miariga = riga + 1;
|
||
let rec = await Nave.findByRigaCol(idapp, miariga, miacol, true);
|
||
rec = checkifNullThenEmpty(rec, miariga, miacol);
|
||
arrterra.push(rec);
|
||
}
|
||
|
||
return arrterra;
|
||
};
|
||
|
||
NaveSchema.statics.getArrAria = async function (idapp, riga, col) {
|
||
const Nave = this;
|
||
|
||
let arraria = [];
|
||
for (let indaria = 1; indaria <= 4; indaria++) {
|
||
miacol = calcval(riga, col, 4) + (indaria);
|
||
miariga = riga + 2;
|
||
let rec = await Nave.findByRigaCol(idapp, miariga, miacol, true);
|
||
rec = checkifNullThenEmpty(rec, miariga, miacol);
|
||
arraria.push(rec);
|
||
}
|
||
|
||
return arraria;
|
||
|
||
};
|
||
|
||
function calcval(riga, col, quanti) {
|
||
return (quanti * (col - 1));
|
||
}
|
||
|
||
NaveSchema.statics.getNavePos = async function (idapp, riga, col, solorecord, ind_order) {
|
||
const Nave = this;
|
||
|
||
if (riga <= 0)
|
||
riga = 1;
|
||
if (col <= 0)
|
||
col = 1;
|
||
|
||
let lang = 'it';
|
||
|
||
if (!!ind_order) {
|
||
const { User } = require('./user');
|
||
lang = await User.getLangByIndOrder(idapp, ind_order);
|
||
}
|
||
|
||
try {
|
||
let recsognatori = [await Nave.findRecByRigaColParent(idapp, riga, col, 3),
|
||
await Nave.findRecByRigaColParent(idapp, riga, col, 2),
|
||
await Nave.findRecByRigaColParent(idapp, riga, col, 1)];
|
||
|
||
let recmediatore = await Nave.findByRigaCol(idapp, riga, col, true);
|
||
let recnavepersistente = await NavePersistente.findByRigaCol(idapp, riga, col, 0);
|
||
|
||
|
||
mystr = '7️⃣° 🌈 <strong>' + tools.get__('SOGNATORE', lang) + ': ';
|
||
mystr += '' + await getusertextbyrec(recsognatori[0], '', '', riga, col, '') + '</strong>' + tools.ACAPO;
|
||
for (let indsogn = 1; indsogn < recsognatori.length; indsogn++) {
|
||
if (indsogn === 1)
|
||
mystr += '6️⃣°';
|
||
else
|
||
mystr += '5️⃣°';
|
||
|
||
mystr += ' ' + tools.get__('INTERMEDIO', lang) + ': ';
|
||
|
||
mystr += await getusertextbyrec(recsognatori[indsogn], '', '', riga, col, '') + tools.ACAPO;
|
||
}
|
||
|
||
mystr += tools.ACAPO + '4️⃣° 🌀 ' + tools.get__('MEDIATORE', lang) + ':' + await getusertextbyrec(recmediatore, '', '', riga, col, '') + tools.ACAPO + tools.ACAPO;
|
||
|
||
mystr += '3️⃣° ' + tools.get__('INTERMEDIO', lang) +':' + tools.ACAPO;
|
||
for (let indterra = 1; indterra <= 2; indterra++) {
|
||
miacol = calcval(riga, col, 2) + (indterra);
|
||
miariga = riga + 1;
|
||
let recterra = await Nave.findByRigaCol(idapp, miariga, miacol, true);
|
||
mystr += await getusertextbyrec(recterra, '', 'B', miariga, miacol, indterra) + tools.ACAPO;
|
||
}
|
||
|
||
mystr += tools.ACAPO;
|
||
|
||
mystr += '2️⃣° ' + tools.get__('INTERMEDIO', lang) + ':' + tools.ACAPO;
|
||
for (let indaria = 1; indaria <= 4; indaria++) {
|
||
miacol = calcval(riga, col, 4) + (indaria);
|
||
miariga = riga + 2;
|
||
let recaria = await Nave.findByRigaCol(idapp, miariga, miacol, true);
|
||
mystr += await getusertextbyrec(recaria, '', 'C', miariga, miacol, indaria) + tools.ACAPO;
|
||
}
|
||
|
||
mystr += tools.ACAPO;
|
||
|
||
let primofuoco = null;
|
||
|
||
mystr += '1️⃣° 🎁 ' + tools.get__('DONATORI', lang) + ':' + tools.ACAPO;
|
||
let donitotali = 0;
|
||
let donifatti = 0;
|
||
|
||
for (let indfuoco = 1; indfuoco <= 8; indfuoco++) {
|
||
miacol = calcval(riga, col, 8) + (indfuoco);
|
||
miariga = riga + 3;
|
||
// miariga = riga + 2;
|
||
let recfuoco = await Nave.findByRigaCol(idapp, miariga, miacol, true);
|
||
if (indfuoco === 1)
|
||
primofuoco = recfuoco;
|
||
|
||
if (!!recfuoco) {
|
||
let symbol = '';
|
||
if (recfuoco.made_gift) {
|
||
symbol = '🎁';
|
||
donifatti++;
|
||
}
|
||
if (!!recfuoco && recmediatore) {
|
||
if (recfuoco.ind_order === recmediatore.ind_order && recfuoco.num_tess === 2) {
|
||
mystr += await getusertextbyrec(recfuoco, '', tools.get__('RITESSITURA', lang), miariga, miacol, '') + tools.ACAPO;
|
||
} else {
|
||
mystr += await getusertextbyrec(recfuoco, symbol, 'D', miariga, miacol, indfuoco) + tools.ACAPO;
|
||
donitotali++;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (donitotali > 0 && donifatti >= donitotali) {
|
||
mystr += tools.ACAPO + '💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫' + tools.ACAPO +
|
||
'✨✨✨ ' + tools.get__('NAVE COMPLETATA', lang) + ' ' + ' (' + tools.get__('Doni Effettuati', lang) + ') ! ✨✨✨' + tools.ACAPO +
|
||
'💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫' + tools.ACAPO;
|
||
}
|
||
|
||
let data = "";
|
||
let mystrtemp = '';
|
||
if (primofuoco) {
|
||
|
||
// tools.gettranslate('PLACCA_TUTOR', lang)
|
||
|
||
if (!!recnavepersistente.tutor_namesurname)
|
||
data += '👤 ' + tools.get__('Tutor che affianchèra il Mediatore', lang) + ': "' + recnavepersistente.tutor_namesurname + '"' + tools.ACAPO;
|
||
|
||
data += '💬 ' + printf(tools.get__('APERTURA_CHIUSURA_GIFT_CHAT', lang), tools.getstrDateLong(recnavepersistente.date_gift_chat_open, lang), tools.getstrDateLong(recnavepersistente.date_start, lang)) + tools.ACAPO;
|
||
|
||
|
||
// data += '💬 ' + tools.get__('Giorno di Apertura GIFT CHAT', lang) + ': ' + tools.getstrDateLong(recnavepersistente.date_gift_chat_open, lang) + tools.ACAPO;
|
||
|
||
// data += '🎁 ' + tools.get__('Giorno in cui Inviare il DONO', lang) + ' : ' + tools.getstrDateLong(recnavepersistente.date_start, lang) + tools.ACAPO;
|
||
if (!!recnavepersistente.note_bot)
|
||
data += tools.get__('Note', lang) + ": " + recnavepersistente.note_bot + tools.ACAPO;
|
||
|
||
if (recnavepersistente.provvisoria)
|
||
mystrtemp = '' + tools.get__('TEMPORANEA', lang) + ' ';
|
||
} else
|
||
data = "";
|
||
|
||
|
||
mystr = tools.ACAPO + '⛵️ ' + tools.get__('NAVE', lang) + ' ' + '[' + riga + '.' + col + '] ' + mystrtemp + tools.ACAPO + data + tools.ACAPO + mystr;
|
||
|
||
return mystr;
|
||
} catch (e) {
|
||
console.error(e.message);
|
||
return '';
|
||
}
|
||
|
||
};
|
||
|
||
NaveSchema.statics.getArrPosizioniByIndOrder = async function (idapp, ind_order) {
|
||
const Nave = this;
|
||
|
||
|
||
arrposizioni = await Nave.find({ idapp, ind_order }).sort({ riga: 1, col: 1 });
|
||
|
||
return arrposizioni;
|
||
};
|
||
|
||
NaveSchema.statics.getArrPosizioniByUsername = async function (idapp, username) {
|
||
const Nave = this;
|
||
|
||
const { ListaIngresso } = require('./listaingresso');
|
||
|
||
try {
|
||
const arrrec_indorder = await ListaIngresso.findByAllRecByUsername(idapp, username).distinct("ind_order");
|
||
|
||
let arrposizioni = [];
|
||
|
||
for (const ind_order of arrrec_indorder) {
|
||
const arr = await Nave.find({ 'idapp': idapp, ind_order }).sort({ riga: 1, col: 1 });
|
||
if (!!arr)
|
||
arrposizioni = [...arrposizioni, ...arr];
|
||
}
|
||
|
||
return arrposizioni;
|
||
} catch (e) {
|
||
console.error(e.message);
|
||
}
|
||
|
||
};
|
||
|
||
NaveSchema.statics.getArrProfiliByIndOrder = async function (idapp, ind_order) {
|
||
const Nave = this;
|
||
|
||
arrposizioni = await Nave.find({ 'idapp': idapp, ind_order }).sort({ riga: 1, col: 1 });
|
||
|
||
arrprofili = [];
|
||
|
||
// Ind_Order
|
||
// Ind_order_base
|
||
|
||
|
||
return arrprofili;
|
||
};
|
||
|
||
NaveSchema.statics.getPrimaNaveByRiga = async function (idapp, riga) {
|
||
const Nave = this;
|
||
|
||
nave = await Nave.findOne({ 'idapp': idapp, riga: (riga + 3), col: 1 });
|
||
|
||
return nave;
|
||
};
|
||
|
||
NaveSchema.statics.showListaOrd = async function (idapp) {
|
||
const Nave = this;
|
||
|
||
const myquery = getQueryProj({ idapp });
|
||
|
||
arrrec = await Nave.aggregate(myquery).sort({ riga: 1, col: 1 });
|
||
|
||
let mystr = '';
|
||
let conta = 1;
|
||
for (const rec of arrrec) {
|
||
let recnavepersistente = await NavePersistente.findByRigaColByDonatore(idapp, rec.riga, rec.col, 0);
|
||
if (!!recnavepersistente) {
|
||
mystr += '[' + conta + '] [' + rec.riga + '.' + rec.col + '] ' + rec.ind_order + ' ' + rec.name + ' ' + rec.surname + ' (' + tools.getstrDateShort(recnavepersistente.date_gift_chat_open) + ')';
|
||
mystr += ' num_tess = ' + rec.num_tess;
|
||
mystr += '\n';
|
||
}
|
||
conta++;
|
||
}
|
||
|
||
|
||
return mystr;
|
||
};
|
||
|
||
NaveSchema.statics.getLastRigaCol = async function (idapp) {
|
||
return Nave.findOne({ idapp }).sort({ _id: -1 });
|
||
};
|
||
|
||
async function addRecordNaveByParams(params, siRitesse) {
|
||
const { ListaIngresso } = require('./listaingresso');
|
||
|
||
let paramspers = { ...params };
|
||
|
||
let mypos = {
|
||
idapp: params.idapp,
|
||
riga: params.riga,
|
||
col: params.col,
|
||
numup: 3
|
||
};
|
||
tools.getRigaColByPosUp(mypos);
|
||
|
||
paramspers.riga1don = params.riga;
|
||
paramspers.col1don = params.col;
|
||
paramspers.riga = mypos.riga;
|
||
paramspers.col = mypos.col;
|
||
|
||
await NavePersistente.addRecordNavePersistenteByParams(paramspers);
|
||
|
||
if (!siRitesse) {
|
||
// Check if Exist:
|
||
const giapresente = await Nave.findOne({
|
||
idapp: params.idapp,
|
||
ind_order: params.ind_order,
|
||
num_tess: params.num_tess
|
||
});
|
||
if (!!giapresente) {
|
||
let fields_to_update = { added: true };
|
||
await ListaIngresso.findOneAndUpdate({ _id: params.id.toString() }, { $set: fields_to_update }, { new: false });
|
||
|
||
return false;
|
||
}
|
||
}
|
||
|
||
|
||
let myNave = new Nave({
|
||
idapp: params.idapp,
|
||
ind_order: params.ind_order,
|
||
riga: params.riga,
|
||
col: params.col,
|
||
num_tess: params.num_tess,
|
||
});
|
||
myNave.created = new Date();
|
||
|
||
// console.log('[' + params.riga + ',' + params.col + ']');
|
||
// console.log('parent = [' + params.rigaparent + ',' + params.colparent + ']');
|
||
|
||
const recfindparent = await Nave.findByRigaCol(idapp, params.rigaparent, params.colparent, false);
|
||
|
||
// console.log('recfindparent = [' + recfindparent + ']');
|
||
// console.table(recfindparent);
|
||
if (!!recfindparent) {
|
||
myNave.parent_id = recfindparent._id;
|
||
} else {
|
||
myNave.parent_id = "0";
|
||
}
|
||
|
||
console.log('addRecordNaveByParams (' + myNave.parent_id + ')');
|
||
|
||
return await myNave.save()
|
||
.then(async (result) => {
|
||
|
||
if (!!result) {
|
||
|
||
let fields_to_update = { added: true };
|
||
await ListaIngresso.findOneAndUpdate({ _id: params.id.toString() }, { $set: fields_to_update }, { new: false });
|
||
|
||
params.conta++;
|
||
|
||
// Check if the Ship has Completed
|
||
if (idapp === tools.AYNI) {
|
||
if ((params.col % 8) === 0) {
|
||
// Completed 8 people
|
||
if (!params.primavolta) {
|
||
// await Fuochi8Completati(idapp, params);
|
||
}
|
||
}
|
||
}
|
||
|
||
// Next
|
||
if (params.col === params.maxcol) {
|
||
params.riga++;
|
||
params.rigaparent = params.riga - 1;
|
||
params.col = 1;
|
||
params.maxcol = getmaxcol(params.riga);
|
||
} else {
|
||
params.col++;
|
||
}
|
||
|
||
if (params.riga === 2)
|
||
params.colparent = 1;
|
||
else
|
||
params.colparent = Math.ceil(params.col / 2);
|
||
|
||
await Nave.setRiga(idapp, params.riga);
|
||
await Nave.setCol(idapp, params.col);
|
||
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
|
||
}).catch((e) => {
|
||
console.error(e.message);
|
||
});
|
||
}
|
||
|
||
NaveSchema.statics.checkifDeveRitessersi = async function (recuser) {
|
||
const Nave = this;
|
||
|
||
let deveritessersi = true;
|
||
|
||
arrrec = await Nave.find({ idapp: recuser.idapp, ind_order: recuser.ind_order, num_tess: recuser.num_tess });
|
||
|
||
if (!!arrrec) {
|
||
if ((arrrec.length % 2) === 0) {
|
||
// deveritessersi = await User.deveRitessersi(recuser.idapp, recuser.ind_order)
|
||
deveritessersi = false;
|
||
}
|
||
}
|
||
|
||
return { deveritessersi, num_tess: arrrec.length };
|
||
|
||
};
|
||
|
||
|
||
NaveSchema.statics.addUserFromListaIngresso_IntoNave = async function (init, idapp, params, addednowreal) {
|
||
const Nave = this;
|
||
|
||
const { User } = require('./user');
|
||
|
||
if (init) {
|
||
params.idapp = idapp;
|
||
params.conta = 0;
|
||
}
|
||
|
||
params.primavolta = (params.riga === 1) && (params.col === 1);
|
||
params.riga = await Nave.getRiga(idapp);
|
||
params.col = await Nave.getCol(idapp);
|
||
params.maxcol = getmaxcol(params.riga);
|
||
params.colparent = Math.ceil(params.col / 2);
|
||
params.rigaparent = params.riga - 1;
|
||
|
||
if (params.rigaparent === 0)
|
||
params.colparent = 0;
|
||
|
||
myriga = params.riga;
|
||
mycol = params.col;
|
||
|
||
const inserito = await addRecordNaveByParams(params, false);
|
||
if (inserito) {
|
||
if (idapp === tools.AYNI) {
|
||
if (((params.col) % 8) === 0) {
|
||
let recmediatore = await Nave.findMediatoreByFuoco(idapp, myriga, mycol, 0);
|
||
if (!!recmediatore) {
|
||
const ris = await Nave.checkifDeveRitessersi(recmediatore);
|
||
if (ris.deveritessersi) {
|
||
console.log('Si deve ritessere: [riga=', params.riga, 'col', params.col, ']');
|
||
if (ris.deveritessersi) {
|
||
params.ind_order = recmediatore.ind_order;
|
||
params.id = recmediatore._id;
|
||
params.num_tess = recmediatore.num_tess + 1;
|
||
|
||
await addRecordNaveByParams(params, true);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if ((params.riga === 4 + 3) && (params.col === (8 * 2) + 3)) {
|
||
// Si ritesse il Fondo AYNI nella Nave 3.3
|
||
const userFondo = await User.findByIndex(idapp, 0);
|
||
params.ind_order = userFondo.ind_order;
|
||
params.id = userFondo._id;
|
||
params.num_tess = userFondo.num_tess;
|
||
|
||
await addRecordNaveByParams(params, true);
|
||
}
|
||
}
|
||
}
|
||
|
||
// Se ho completato 8 persone, allora
|
||
if (addednowreal) {
|
||
|
||
}
|
||
|
||
};
|
||
|
||
NaveSchema.statics.generaNave = async function (idapp, mydata) {
|
||
const Nave = this;
|
||
|
||
const { User } = require('./user');
|
||
const { ListaIngresso } = require('./listaingresso');
|
||
|
||
let params = {
|
||
idapp,
|
||
riga: await Nave.getRiga(idapp),
|
||
col: await Nave.getCol(idapp),
|
||
date_start: mydata.date_start,
|
||
date_gift_chat_open: tools.AddDate(mydata.date_start, -7),
|
||
numpersone: mydata.numpersone,
|
||
};
|
||
|
||
//++Todo: date_gift_chat_open e date_start : Ricalcolarle in Automatico...
|
||
|
||
params.primavolta = (params.riga === 1) && (params.col === 1);
|
||
// params.primavolta = false;
|
||
|
||
const recfindFondo = await Nave.findByRigaCol(params.idapp, 0, 0, true);
|
||
if (!recfindFondo) {
|
||
let myNave = new Nave({ idapp, ind_order: 0, riga: 0, col: 0 });
|
||
myNave.created = new Date();
|
||
myNave.parent_id = ObjectID("5e592aecbfd0b75f3021d9c9");
|
||
await myNave.save();
|
||
|
||
await NavePersistente.addRecordNavePersistenteByParams({ idapp, riga: 0, col: 0, riga1don: 0, col1don: 0 });
|
||
|
||
const userFondo = await User.findByIndex(idapp, 0);
|
||
if (!userFondo || userFondo === undefined) {
|
||
await telegrambot.sendMsgTelegramToTheAdmin(idapp, 'Devi creare l\'utente FONDO , con ind_order = 0 ! ');
|
||
}
|
||
}
|
||
|
||
const arrlistaingresso = await ListaIngresso.getProssimiInLista(idapp, true);
|
||
|
||
let index = 0;
|
||
for (const reclista of arrlistaingresso) {
|
||
|
||
params.ind_order = reclista.ind_order;
|
||
params.id = reclista._id;
|
||
params.num_tess = reclista.num_tess;
|
||
|
||
await Nave.addUserFromListaIngresso_IntoNave(index === 0, idapp, params, false);
|
||
index++;
|
||
|
||
if (index >= params.numpersone)
|
||
break;
|
||
}
|
||
|
||
return params.conta;
|
||
|
||
};
|
||
|
||
async function addUserToNave(idapp, rec) {
|
||
|
||
let params = {};
|
||
|
||
params.id = rec._id;
|
||
params.num_tess = rec.num_tess;
|
||
|
||
return await Nave.addUserFromListaIngresso_IntoNave(true, idapp, params, true);
|
||
|
||
}
|
||
|
||
NaveSchema.statics.checkIfDevoAggiungereInNave = async function (idapp) {
|
||
|
||
const { ListaIngresso } = require('./listaingresso');
|
||
|
||
// Ottieni la lista Ordinata in base al numero d'invitati
|
||
arrlista = await ListaIngresso.getProssimiInLista(idapp, true);
|
||
|
||
for (const rec of arrlista) {
|
||
await addUserToNave(idapp, rec);
|
||
}
|
||
|
||
};
|
||
|
||
NaveSchema.statics.pulisciNonPresenzeInNave = async function (idapp) {
|
||
const Nave = this;
|
||
|
||
let numrec = 0;
|
||
|
||
const { ListaIngresso } = require('./listaingresso');
|
||
|
||
const myquery = getQueryProj({
|
||
idapp,
|
||
ind_order: { $gt: 0 },
|
||
added: true,
|
||
deleted: false,
|
||
});
|
||
|
||
arrrec = await ListaIngresso.aggregate(myquery)
|
||
.then(async (arrlista) => {
|
||
for (const rec of arrlista) {
|
||
const trovato = await Nave.findByIndOrderAndNumTess(idapp, rec.ind_order, rec.num_tess);
|
||
if (!trovato) {
|
||
let fields_to_update = { added: false };
|
||
await ListaIngresso.findOneAndUpdate({ _id: rec._id }, { $set: fields_to_update }, { new: false });
|
||
numrec++;
|
||
}
|
||
}
|
||
|
||
});
|
||
|
||
return numrec;
|
||
|
||
};
|
||
|
||
NaveSchema.statics.visuNaviUtentiEliminati = async function (idapp) {
|
||
const Nave = this;
|
||
|
||
let numrec = 0;
|
||
|
||
const myquery = getQueryProj({ idapp });
|
||
|
||
arrrec = await Nave.aggregate(myquery).sort({ riga: 1, col: 1 });
|
||
|
||
let mystr = 'ELIMINATI: \n';
|
||
let conta = 0;
|
||
for (const rec of arrrec) {
|
||
if (!rec.username) {
|
||
let navepersistente = await NavePersistente.findByRigaColByDonatore(idapp, rec.riga, rec.col, 0);
|
||
if (!!navepersistente) {
|
||
mystr += '[' + conta + '] [NAVI ' + navepersistente.riga + '.' + navepersistente.col + '] [' + rec.riga + '.' + rec.col + '] ' + rec.ind_order;
|
||
mystr += ' num_tess = ' + rec.num_tess;
|
||
mystr += '\n';
|
||
conta++;
|
||
}
|
||
}
|
||
}
|
||
|
||
return { mystr, num: conta };
|
||
};
|
||
|
||
|
||
NaveSchema.statics.getNaveByUser = async function (idapp, username, lang, fuoco) {
|
||
const Nave = this;
|
||
|
||
let mystr = '';
|
||
let rec = {};
|
||
try {
|
||
const arrposiz = await Nave.getArrPosizioniByUsername(idapp, username);
|
||
if (!!arrposiz) {
|
||
for (const pos of arrposiz) {
|
||
let mypos = {
|
||
riga: pos.riga,
|
||
col: pos.col,
|
||
numup: 3,
|
||
};
|
||
tools.getRigaColByPosUp(mypos);
|
||
|
||
let persistente = await NavePersistente.findByRigaColByDonatore(idapp, pos.riga, pos.col, 0);
|
||
if (!!persistente) {
|
||
if (persistente.provvisoria) {
|
||
mystr += tools.ACAPO + tools.get__('NAVE', lang) + ' ' + '[' + mypos.riga + '.' + mypos.col + '] - ' + tools.get__('TEMPORANEA', lang) + tools.ACAPO + tools.ACAPO;
|
||
} else {
|
||
mystr += await Nave.getNavePos(idapp, mypos.riga, mypos.col, false, pos.ind_order);
|
||
}
|
||
}
|
||
// mystr += await Nave.getPlaccaPerDonatore(idapp, pos.riga, pos.col, false, rec);
|
||
// mystr += await Nave.getPlaccaPerMediatore(idapp, pos.riga, pos.col, false, rec);
|
||
}
|
||
}
|
||
} catch (e) {
|
||
console.error(e.message);
|
||
}
|
||
|
||
return mystr;
|
||
};
|
||
|
||
NaveSchema.statics.getNaveByRigaCol = async function (idapp, rigapos, colpos) {
|
||
const Nave = this;
|
||
|
||
rec = {};
|
||
rec = await Nave.getPlaccaPerMediatore(idapp, rigapos, colpos, true, rec);
|
||
|
||
if (rigapos < 4) {
|
||
rigapos = 4;
|
||
colpos = 1;
|
||
}
|
||
rec = await Nave.getPlaccaPerDonatore(idapp, rigapos, colpos, true, rec);
|
||
|
||
return rec;
|
||
};
|
||
|
||
NaveSchema.statics.getDonatoridelSognatore = async function (idapp, riganave, colnave) {
|
||
const Nave = this;
|
||
|
||
coldonatoreIni = ((colnave - 1) * 64) + (1);
|
||
coldonatoreFine = coldonatoreIni + (63);
|
||
|
||
const myquery = getQueryProj({
|
||
idapp,
|
||
riga: riganave + 6,
|
||
col: { $gte: coldonatoreIni, $lte: coldonatoreFine }
|
||
});
|
||
|
||
const arrnaviout = [];
|
||
|
||
const arrnavi = await Nave.aggregate(myquery);
|
||
|
||
for (const nave of arrnavi) {
|
||
// Se è il mediatore, allora non includerlo nei Donatori!
|
||
mypos = {
|
||
riga: nave.riga,
|
||
col: nave.col,
|
||
numup: 3,
|
||
};
|
||
|
||
tools.getRigaColByPosUp(mypos);
|
||
|
||
const navemediatore = await Nave.findByRigaCol(idapp, mypos.riga, mypos.col, true);
|
||
if (!!navemediatore) {
|
||
if (navemediatore.ind_order !== nave.ind_order) {
|
||
arrnaviout.push(nave);
|
||
}
|
||
} else {
|
||
arrnaviout.push(nave);
|
||
}
|
||
}
|
||
|
||
return arrnaviout;
|
||
|
||
};
|
||
|
||
NaveSchema.statics.ricalcolaNave = async function (idapp, nave, riga1don, col1don, ricalcola, index) {
|
||
const Nave = this;
|
||
|
||
try {
|
||
if (nave === null) {
|
||
nave = await NavePersistente.findByRigaColByDonatore(idapp, riga1don, col1don, 0);
|
||
}
|
||
nave.rec = await Nave.getNaveByRigaCol(idapp, nave.riga1don, nave.col1don);
|
||
|
||
if (nave.provvisoria || (ricalcola && (nave.DoniConfermati === nave.DoniTotali) && (nave.DoniTotali >= 7) && nave.DoniMancanti === 0 && nave.DoniAttesaDiConferma === 0)) {
|
||
// gia fatto
|
||
|
||
} else {
|
||
nave.index = index;
|
||
|
||
nave.DoniTotali = 0;
|
||
nave.DoniAttesaDiConferma = 0;
|
||
nave.DoniMancanti = 0;
|
||
nave.DoniConfermati = 0;
|
||
|
||
const { User } = require('./user');
|
||
|
||
if (!!nave.tutor)
|
||
nave.tutor_namesurname = await User.getNameSurnameByUsername(idapp, nave.tutor);
|
||
|
||
if (!!nave.rec) {
|
||
if (!!nave.rec.donatore) {
|
||
nave.DoniTotali = nave.rec.donatore.arrdonatori.filter((rec) => (!(rec.ind_order === nave.rec.donatore.recmediatore.ind_order && (rec.num_tess % 2) === 0))).reduce((sum, item) => sum + 1, 0);
|
||
nave.DoniAttesaDiConferma = nave.rec.donatore.arrdonatori.filter((rec) => (!!rec.date_made_gift && !rec.made_gift && !(rec.ind_order === nave.rec.donatore.recmediatore.ind_order && (rec.num_tess % 2) === 0))).reduce((sum, item) => sum + 1, 0);
|
||
nave.DoniMancanti = nave.rec.donatore.arrdonatori.filter((rec) => (!rec.made_gift && !(rec.ind_order === nave.rec.donatore.recmediatore.ind_order && (rec.num_tess % 2) === 0))).reduce((sum, item) => sum + 1, 0);
|
||
nave.DoniConfermati = nave.rec.donatore.arrdonatori.filter((rec) => rec.made_gift && !(rec.ind_order === nave.rec.donatore.recmediatore.ind_order && (rec.num_tess % 2) === 0)).reduce((sum, item) => sum + 1, 0);
|
||
}
|
||
}
|
||
|
||
const fieldsvalue = {
|
||
DoniAttesaDiConferma: nave.DoniAttesaDiConferma,
|
||
DoniTotali: nave.DoniTotali,
|
||
DoniMancanti: nave.DoniMancanti,
|
||
DoniConfermati: nave.DoniConfermati,
|
||
tutor_namesurname: nave.tutor_namesurname,
|
||
};
|
||
|
||
const risu = await NavePersistente.findOneAndUpdate({ _id: nave._id }, { $set: fieldsvalue }, { new: false });
|
||
|
||
nave._doc.rec = nave.rec;
|
||
}
|
||
} catch (e) {
|
||
console.error(e.message);
|
||
}
|
||
|
||
return nave;
|
||
|
||
};
|
||
|
||
NaveSchema.statics.getNextNumTess = async function (idapp, ind_order) {
|
||
const Nave = this;
|
||
|
||
const rec = await Nave.findOne({ idapp, ind_order }, { num_tess: 1 }).sort({ num_tess: -1 });
|
||
if (!!rec) {
|
||
|
||
if (rec.num_tess % 2 === 0) {
|
||
rec.num_tess++;
|
||
} else {
|
||
rec.num_tess += 2;
|
||
}
|
||
|
||
return rec.num_tess
|
||
} else {
|
||
return 1;
|
||
}
|
||
|
||
};
|
||
|
||
NaveSchema.statics.getnumNaviByUsername = async function (idapp, username) {
|
||
const Nave = this;
|
||
|
||
try {
|
||
|
||
const { ListaIngresso } = require('./listaingresso');
|
||
|
||
// Get array di ind_order
|
||
const arrind_order = await ListaIngresso.find({ idapp, username }).distinct('ind_order');
|
||
|
||
const arrrec = await Nave.find({ idapp, ind_order: arrind_order, num_tess: { $mod: [2, 1] } }, {
|
||
riga: 1,
|
||
col: 1,
|
||
ind_order: 1
|
||
});
|
||
|
||
if (!!arrrec)
|
||
return arrrec.length;
|
||
else
|
||
return 0;
|
||
|
||
} catch (e) {
|
||
console.error(e.message);
|
||
}
|
||
};
|
||
|
||
NaveSchema.statics.getSognatoreByRigaColMediatore = async function (idapp, navemediatore) {
|
||
|
||
const ris = this.getRigaColSognatoreByMediatore(idapp, navemediatore.riga, navemediatore.col, 3);
|
||
|
||
const myquery = getQueryProj({
|
||
idapp,
|
||
riga: ris.riga,
|
||
col: ris.col,
|
||
});
|
||
|
||
arrrec = await Nave.aggregate(myquery);
|
||
|
||
if (!!arrrec) {
|
||
if (arrrec.length > 0)
|
||
return arrrec[0];
|
||
}
|
||
|
||
return null;
|
||
};
|
||
|
||
|
||
const Nave = mongoose.model('Nave', NaveSchema);
|
||
|
||
module.exports = { Nave };
|
||
|
||
|