- catalogo
- corretto logica del RefreshToken che non richiedeva il nuovo token, quindi scadeva tutte le volte, richiedendo sempre l'accesso !
@@ -1,18 +1,17 @@
|
||||
APP_VERSION="1.1.14"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="18"
|
||||
APP_ID="13"
|
||||
DIRECTORY_LOCAL="newfreeplanet"
|
||||
DIRECTORY_SERVER="freeplanet_serverside"
|
||||
SERVERDIR_WEBSITE=""
|
||||
SERVERPW_WEBSITE=""
|
||||
APP_URL="https://localhost"
|
||||
URL_FACEBOOK="https://www.facebook.com/freeplanetapp"
|
||||
PROVA_PAOLO="PROVA ENV FUNZIONA!"
|
||||
LANG_DEFAULT="it"
|
||||
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
||||
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
|
||||
MONGODB_HOST="https://localhost:3000"
|
||||
LOGO_REG='gruppomacro-logo-full.png'
|
||||
LOGO_REG='riso-logo-full.png'
|
||||
TEST_NAME="Paolo"
|
||||
TEST_SURNAME="Arena"
|
||||
TEST_EMAIL=""
|
||||
@@ -25,5 +24,5 @@ DEBUG="1"
|
||||
TELEGRAM_SUPPORT=""
|
||||
PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
|
||||
TEST_CELL=""
|
||||
VUE_APP_ISTEST=1
|
||||
VUE_APP_INLOCALE=1
|
||||
VUE_APP_ISTEST="1"
|
||||
VUE_APP_INLOCALE="1"
|
||||
|
||||
@@ -90,7 +90,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
active: site.confpages && site.confpages.enableEvents,
|
||||
order: 20,
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
@@ -112,7 +112,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
active: site.confpages && site.confpages.showProfile,
|
||||
order: 120,
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
@@ -123,7 +123,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
active: site.confpages && site.confpages.showProfile,
|
||||
order: 120,
|
||||
path: '/editprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
@@ -134,7 +134,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
active: site.confpages && site.confpages.showiscrittiMenu,
|
||||
order: 130,
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
@@ -229,16 +229,6 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 150,
|
||||
path: '/fundraising',
|
||||
materialIcon: 'fas fa-hand-holding-heart',
|
||||
name: 'pages.fundraising',
|
||||
component: () => import('@src/root/fundraising/fundraising.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 80,
|
||||
|
||||
2
now.txt
@@ -1 +1 @@
|
||||
TERMINA DI LAVORARE SU piuchebuono.app: (Sovrascrivo !)
|
||||
TERMINA DI LAVORARE SU gruppomacro.app: (Sovrascrivo !)
|
||||
|
||||
10
package.json
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "gruppomacro",
|
||||
"name": "riso",
|
||||
"version": "1.1.14",
|
||||
"description": "GruppoMacro",
|
||||
"productName": "Gruppo Macro",
|
||||
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
|
||||
"productName": "Riso",
|
||||
"author": "Paolo Arena",
|
||||
"private": true,
|
||||
"keywords": [],
|
||||
@@ -54,12 +54,9 @@
|
||||
"graphql": "^16.9.0",
|
||||
"graphql-tag": "^2.12.6",
|
||||
"gsap": "^3.12.5",
|
||||
"html2canvas": "^1.4.1",
|
||||
"html2pdf.js": "^0.10.2",
|
||||
"jquery": "^3.7.1",
|
||||
"js-cookie": "^3.0.5",
|
||||
"jsbarcode": "^3.11.6",
|
||||
"jspdf": "^2.5.2",
|
||||
"leaflet": "^1.9.4",
|
||||
"leaflet-routing-machine": "^3.2.12",
|
||||
"leaflet.markercluster": "^1.5.3",
|
||||
@@ -130,6 +127,7 @@
|
||||
"jest": "^29.7.0",
|
||||
"json-loader": "^0.5.7",
|
||||
"node-sass": "^9.0.0",
|
||||
"nodemon": "^3.1.7",
|
||||
"npm-check-updates": "^17.1.3",
|
||||
"optimize-css-assets-webpack-plugin": "^6.0.1",
|
||||
"parcel": "^2.12.0",
|
||||
|
||||
|
Before Width: | Height: | Size: 14 KiB |
BIN
public/images/ferrara.jpg
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/images/freeplanet-logo-full.odg
Executable file
1186
public/images/freeplanet-logo-full.svg
Executable file
|
After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 30 KiB |
BIN
public/images/riso-android-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/images/riso-android-icon-192x192.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/images/riso-android-icon-36x36.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
public/images/riso-android-icon-384x384.png
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
public/images/riso-android-icon-48x48.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
public/images/riso-android-icon-512x512.png
Normal file
|
After Width: | Height: | Size: 185 KiB |
BIN
public/images/riso-android-icon-72x72.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/images/riso-android-icon-96x96.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/images/riso-apple-icon-114x114.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/images/riso-apple-icon-120x120.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/images/riso-apple-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/images/riso-apple-icon-152x152.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
public/images/riso-apple-icon-180x180.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/images/riso-apple-icon-57x57.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
public/images/riso-apple-icon-60x60.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
public/images/riso-apple-icon-72x72.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/images/riso-apple-icon-76x76.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/images/riso-apple-icon.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/images/riso-logo-full.png
Normal file
|
After Width: | Height: | Size: 634 KiB |
BIN
public/images/riso_home.png
Normal file
|
After Width: | Height: | Size: 279 KiB |
BIN
public/images/riso_home_dark.png
Normal file
|
After Width: | Height: | Size: 258 KiB |
BIN
public/images/riso_services.png
Normal file
|
After Width: | Height: | Size: 124 KiB |
@@ -17,6 +17,8 @@ const webpack = require('webpack')
|
||||
const helpers = require('./helpers')
|
||||
const envparser = require('./config/envparser')
|
||||
|
||||
const package = require('./package.json');
|
||||
|
||||
// const ESLintPlugin = require('eslint-webpack-plugin')
|
||||
|
||||
module.exports = configure((ctx) => ({
|
||||
@@ -87,6 +89,7 @@ module.exports = configure((ctx) => ({
|
||||
// Full list of options: https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build
|
||||
build: {
|
||||
env: envparser(),
|
||||
versionCode: package.version,
|
||||
vueRouterMode: 'history',
|
||||
vueCompiler: true,
|
||||
gzip: false, // gzip true
|
||||
@@ -149,9 +152,9 @@ module.exports = configure((ctx) => ({
|
||||
},
|
||||
devServer: {
|
||||
https: false,
|
||||
port: 8089,
|
||||
port: 8084,
|
||||
open: false, // opens browser window automatically
|
||||
hot: true, // Disable hot module replacement
|
||||
hot: false, // Disable hot module replacement
|
||||
headers: {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Access-Control-Allow-Headers': '*',
|
||||
@@ -248,6 +251,8 @@ module.exports = configure((ctx) => ({
|
||||
'Cookies',
|
||||
'Loading',
|
||||
'AppVisibility',
|
||||
'LocalStorage',
|
||||
'SessionStorage',
|
||||
],
|
||||
get plugins_1() {
|
||||
return this._plugins;
|
||||
@@ -308,9 +313,9 @@ module.exports = configure((ctx) => ({
|
||||
},
|
||||
|
||||
manifest: {
|
||||
name: 'Gruppo Macro',
|
||||
short_name: 'GruppoMacro',
|
||||
description: '',
|
||||
name: 'Riso',
|
||||
short_name: 'Riso',
|
||||
description: 'Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.',
|
||||
display: 'standalone',
|
||||
orientation: 'portrait',
|
||||
background_color: '#fff',
|
||||
@@ -320,24 +325,54 @@ module.exports = configure((ctx) => ({
|
||||
start_url: "/?homescreen=1",
|
||||
icons: [
|
||||
{
|
||||
src: 'images/gm-android-icon-512x512.png',
|
||||
src: 'images/riso-android-icon-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/gm-android-icon-192x192.png',
|
||||
src: 'images/riso-android-icon-384x384.png',
|
||||
sizes: '384x384',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-android-icon-192x192.png',
|
||||
sizes: '192x192',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/gm-apple-touch-icon.png',
|
||||
src: 'images/riso-android-icon-144x144.png',
|
||||
sizes: '144x144',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-android-icon-96x96.png',
|
||||
sizes: '96x96',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-apple-icon-120x120.png',
|
||||
sizes: '120x120',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-apple-icon-144x144.png',
|
||||
sizes: '144x144',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-apple-icon-152x152.png',
|
||||
sizes: '152x152',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-apple-icon-180x180.png',
|
||||
sizes: '180x180',
|
||||
type: 'image/png',
|
||||
},
|
||||
],
|
||||
related_applications: [{
|
||||
"platform": "webapp",
|
||||
"url": "https://www.gruppomacro.app/manifest.json"
|
||||
"url": "https://www.riso.app/manifest.json"
|
||||
}]
|
||||
},
|
||||
},
|
||||
@@ -372,7 +407,7 @@ module.exports = configure((ctx) => ({
|
||||
builder: {
|
||||
// https://www.electron.build/configuration/configuration
|
||||
|
||||
appId: 'GruppoMacro',
|
||||
appId: 'Riso',
|
||||
},
|
||||
|
||||
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
|
||||
|
||||
@@ -1603,6 +1603,8 @@ export const shared_consts = {
|
||||
CIRCUIT_PARAMS: {
|
||||
SCOPERTO_MIN_GRP: 200,
|
||||
SCOPERTO_MAX_GRP: 400,
|
||||
SCOPERTO_MIN_CONTO_COMUNITARIO: 500,
|
||||
SCOPERTO_MAX_CONTO_COMUNITARIO: 1000,
|
||||
},
|
||||
|
||||
FontsInstalled: [
|
||||
@@ -2017,11 +2019,18 @@ export const shared_consts = {
|
||||
fido_scoperto_default: 1,
|
||||
deperimento: 1,
|
||||
showAlways: 1,
|
||||
ignoreLimits: 1,
|
||||
askManagerToEnter: 1,
|
||||
sendEmailAfterAskingToEnter: 1,
|
||||
circuitoIndipendente: 1,
|
||||
creditodiPartenza: 1,
|
||||
status: 1,
|
||||
transactionsEnabled: 1,
|
||||
qta_max_default: 1,
|
||||
fido_scoperto_default_grp: 1,
|
||||
qta_max_default_grp: 1,
|
||||
fido_scoperto_default_contocom: 1,
|
||||
qta_max_default_contocom: 1,
|
||||
valuta_per_euro: 1,
|
||||
symbol: 1,
|
||||
idCity: 1,
|
||||
@@ -2236,25 +2245,32 @@ export const shared_consts = {
|
||||
PRODUCT: 1000,
|
||||
},
|
||||
|
||||
ORDINAMENTO_CATALOGHI: [
|
||||
{
|
||||
label: '[Default]',
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
label: 'Data di Uscita',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: 'Bestseller',
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
label: 'Alfabetico',
|
||||
value: 0,
|
||||
},
|
||||
ORDINAMENTO_CATALOGHI_PUBBLICO: [
|
||||
{ label: '[Nessuno]', value: '' },
|
||||
{ label: 'Alfabetico', value: 'name' },
|
||||
{ label: 'Data di Pubblicazione', value: 'date_pub_ts' },
|
||||
],
|
||||
|
||||
ORDINAMENTO_CATALOGHI: [
|
||||
{ label: '[Nessuno]', value: '' },
|
||||
{ label: 'Alfabetico', value: 'name' },
|
||||
{ label: 'Data di Pubblicazione', value: 'date_pub_ts' },
|
||||
{ label: 'Totale Venduti', value: 'totVen' },
|
||||
{ label: 'Totale Fatturati', value: 'totFat' },
|
||||
{ label: 'Venduti Ultimi 3 Mesi', value: 'vLast3M' },
|
||||
{ label: 'Venduti Ultimi 6 Mesi', value: 'vLast6M' },
|
||||
{ label: 'Venduti Ultimo Anno', value: 'vLastY' },
|
||||
{ label: 'Venduti Ultimi 2 Anni', value: 'vLast2Y' },
|
||||
{ label: 'Fatturati Ultimi 3 Mesi', value: 'fatLast3M' },
|
||||
{ label: 'Data Ultimo Ordine', value: 'dataUltimoOrdine' },
|
||||
],
|
||||
|
||||
ORDINAMENTO_DIREZIONE: [
|
||||
{ label: 'Ascendente', value: 1 },
|
||||
{ label: 'Discendente', value: -1 },
|
||||
],
|
||||
|
||||
|
||||
VERSIONI_PRODOTTO: [
|
||||
{
|
||||
label: '[Nessuno]',
|
||||
|
||||
@@ -64,6 +64,7 @@ export default defineComponent({
|
||||
|
||||
// Funzione per disegnare il codice a barre
|
||||
const drawBarcode = () => {
|
||||
if (value.value) {
|
||||
JsBarcode("#C" + value.value, value.value, {
|
||||
format: format.value,
|
||||
width: widthlines.value,
|
||||
@@ -75,9 +76,10 @@ export default defineComponent({
|
||||
textMargin: 0,
|
||||
marginTop: 0,
|
||||
fontSize: fontsize.value,
|
||||
textPosition:"bottom",
|
||||
textPosition: "bottom",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Chiamato quando il componente è montato
|
||||
onMounted(() => {
|
||||
|
||||
@@ -711,6 +711,30 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row bg-blue-4">
|
||||
<div class="etichetta">Fatturati:</div>
|
||||
<CMyValueDb
|
||||
:editOn="modifOn"
|
||||
table="productinfos"
|
||||
:id="myproduct.productInfo._id"
|
||||
:rec="myproduct.productInfo"
|
||||
mykey="totFat"
|
||||
debounce="1000"
|
||||
:save="updateproductmodif()"
|
||||
:type="costanti.FieldType.number"
|
||||
>
|
||||
</CMyValueDb>
|
||||
<div class="etichetta">Fatturati Ultimi 3 Mese:</div>
|
||||
<CMyValueDb
|
||||
:editOn="modifOn"
|
||||
table="productinfos"
|
||||
:id="myproduct.productInfo._id"
|
||||
:rec="myproduct.productInfo"
|
||||
mykey="fatLast3M"
|
||||
debounce="1000"
|
||||
:save="updateproductmodif()"
|
||||
:type="costanti.FieldType.number"
|
||||
>
|
||||
</CMyValueDb>
|
||||
<div class="etichetta">Venduti:</div>
|
||||
<CMyValueDb
|
||||
:editOn="modifOn"
|
||||
@@ -723,7 +747,7 @@
|
||||
:type="costanti.FieldType.number"
|
||||
>
|
||||
</CMyValueDb>
|
||||
<div class="etichetta">Venduti Ultimo Mese:</div>
|
||||
<div class="etichetta">Venduti Ultimi 3 Mesi:</div>
|
||||
<CMyValueDb
|
||||
:editOn="modifOn"
|
||||
table="productinfos"
|
||||
|
||||
@@ -46,6 +46,11 @@ export default defineComponent({
|
||||
required: false,
|
||||
default: false,
|
||||
},
|
||||
labelBtnAddExtra: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
selector: {
|
||||
type: Object,
|
||||
required: false,
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
labelBtnAddRow="NONE"
|
||||
:prop_SortFieldsAvailable="mySortFieldsAvailable"
|
||||
:labelBtnAddExtra_OFF="noButtAdd ? `` : (ind >= 0) ? `Aggiungi ` + costanti.MAINCARDS[ind].strsingolo : ''"
|
||||
labelBtnAddExtra=""
|
||||
:labelBtnAddExtra="labelBtnAddExtra"
|
||||
:extraparams="tools.extraparams(table, {myrecfiltertoggle})"
|
||||
:prop_showMap="showMap"
|
||||
@clickButtBar="clickButtBar"
|
||||
|
||||
@@ -21,7 +21,13 @@
|
||||
<q-spinner v-if="loadSaldo" color="primary" size="3em" :thickness="2" />
|
||||
</div>
|
||||
<q-btn
|
||||
v-if="myaccount && !loadSaldo && (grp ? tools.iAmAdminGroup(grp.groupname) : tools.iAmAdminCircuit(circuit.name))"
|
||||
v-if="
|
||||
myaccount &&
|
||||
!loadSaldo &&
|
||||
(grp
|
||||
? tools.iAmAdminGroup(grp.groupname)
|
||||
: tools.iAmAdminCircuit(circuit.name))
|
||||
"
|
||||
outline
|
||||
rounded
|
||||
dense
|
||||
@@ -61,6 +67,7 @@
|
||||
<div :class="$q.screen.lt.sm ? '' : 'row'">
|
||||
<div class="sezioni">
|
||||
<CCurrencyV2
|
||||
v-if="!circuit.ignoreLimits"
|
||||
:symbol="tools.getSymbolByCircuit(circuit)"
|
||||
:color="tools.getColorByCircuit(circuit)"
|
||||
color_border="red"
|
||||
@@ -77,6 +84,7 @@
|
||||
</div>
|
||||
<div class="sezioni">
|
||||
<CCurrencyV2
|
||||
v-if="!circuit.ignoreLimits"
|
||||
:symbol="tools.getSymbolByCircuit(circuit)"
|
||||
:color="tools.getColorByCircuit(circuit)"
|
||||
color_border="green"
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
:class="
|
||||
`q-ma-sm ` + ($q.dark.isActive ? `text-white` : `text-black`)
|
||||
"
|
||||
>{{ circuit.numMembers }}</span>
|
||||
>{{ circuit.numMembers }}</span
|
||||
>
|
||||
<q-icon name="fas fa-users" size="xs" color="blue"></q-icon>
|
||||
</div>
|
||||
<div v-if="circuit.link_group" :class="` `">
|
||||
|
||||
<q-btn
|
||||
icon="fab fa-telegram"
|
||||
size="xs"
|
||||
@@ -107,15 +107,19 @@
|
||||
caption
|
||||
lines="1"
|
||||
>
|
||||
<q-icon v-if="!circuit.transactionsEnabled" name="fas fa-lock"></q-icon>
|
||||
<q-icon
|
||||
v-if="!circuit.transactionsEnabled"
|
||||
name="fas fa-lock"
|
||||
></q-icon>
|
||||
<span class="text-red text-weight-bold">
|
||||
{{
|
||||
$t('circuit.transaction_suspended')
|
||||
}}
|
||||
{{ $t('circuit.transaction_suspended') }}
|
||||
</span>
|
||||
</q-item-label>
|
||||
|
||||
<q-item-label @click="naviga(tools.getPathByTableAndRec(table, circuit))" lines="1">
|
||||
<q-item-label
|
||||
@click="naviga(tools.getPathByTableAndRec(table, circuit))"
|
||||
lines="1"
|
||||
>
|
||||
<CSaldo
|
||||
v-if="tools.isUserOk() && username === myusername() && account"
|
||||
:account="account"
|
||||
@@ -141,7 +145,9 @@
|
||||
inline-actions
|
||||
class="bg-blue text-white"
|
||||
>
|
||||
<span v-html="$t('circuit.entra_italia_solo_dopo_aver_fido')"></span>
|
||||
<span
|
||||
v-html="$t('circuit.entra_italia_solo_dopo_aver_fido')"
|
||||
></span>
|
||||
</q-banner>
|
||||
<q-banner v-else inline-actions class="bg-blue text-white">
|
||||
<span v-html="$t('circuit.non_entrato')"></span>
|
||||
@@ -153,10 +159,14 @@
|
||||
!userStore.IsRefusedCircuitByName(circuit.name)
|
||||
"
|
||||
color="positive"
|
||||
:label="$t('circuit.apri')"
|
||||
:label="
|
||||
circuit.askManagerToEnter
|
||||
? $t('circuit.ask')
|
||||
: $t('circuit.apri')
|
||||
"
|
||||
@click="
|
||||
requestToEnterCircuit = true;
|
||||
groupnameSel = null;
|
||||
groupnameSel = null;
|
||||
"
|
||||
/>
|
||||
</template>
|
||||
@@ -165,7 +175,10 @@ groupnameSel = null;
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
|
||||
<q-item-section side v-if="visu === costanti.USER_CIRCUITS && tools.isUserOk()">
|
||||
<q-item-section
|
||||
side
|
||||
v-if="visu === costanti.USER_CIRCUITS && tools.isUserOk()"
|
||||
>
|
||||
<q-item-label>
|
||||
<q-btn
|
||||
rounded
|
||||
@@ -197,7 +210,11 @@ groupnameSel = null;
|
||||
)
|
||||
"
|
||||
>
|
||||
<q-item-section>{{ $t('circuit.ask') }}</q-item-section>
|
||||
<q-item-section>{{
|
||||
circuit.askManagerToEnter
|
||||
? $t('circuit.ask')
|
||||
: $t('circuit.enter')
|
||||
}}</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
<q-list
|
||||
@@ -222,9 +239,7 @@ groupnameSel = null;
|
||||
"
|
||||
>
|
||||
<q-item-section>
|
||||
{{
|
||||
$t('shared.refuse_ask')
|
||||
}}
|
||||
{{ $t('shared.refuse_ask') }}
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
<q-item
|
||||
@@ -241,14 +256,15 @@ groupnameSel = null;
|
||||
"
|
||||
>
|
||||
<q-item-section>
|
||||
{{
|
||||
$t('shared.cancel_ask')
|
||||
}}
|
||||
{{ $t('shared.cancel_ask') }}
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
<q-list
|
||||
v-else-if="userStore.IsMyCircuitByName(circuit.name) && (saldo === 0 || !saldo)"
|
||||
v-else-if="
|
||||
userStore.IsMyCircuitByName(circuit.name) &&
|
||||
(saldo === 0 || !saldo)
|
||||
"
|
||||
style="min-width: 200px"
|
||||
>
|
||||
<q-item
|
||||
@@ -288,7 +304,10 @@ groupnameSel = null;
|
||||
</q-btn>
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
<q-item-section side v-if="visu === costanti.REQ_CIRCUIT && tools.isUserOk()">
|
||||
<q-item-section
|
||||
side
|
||||
v-if="visu === costanti.REQ_CIRCUIT && tools.isUserOk()"
|
||||
>
|
||||
<q-item-label>
|
||||
<q-btn rounded icon="fas fa-ellipsis-h">
|
||||
<q-menu>
|
||||
@@ -309,9 +328,7 @@ groupnameSel = null;
|
||||
"
|
||||
>
|
||||
<q-item-section>
|
||||
{{
|
||||
$t('circuit.reject_ask')
|
||||
}}
|
||||
{{ $t('circuit.reject_ask') }}
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
@@ -319,7 +336,10 @@ groupnameSel = null;
|
||||
</q-btn>
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
<q-item-section side v-if="visu === costanti.ASK_SENT_CIRCUIT && tools.isUserOk()">
|
||||
<q-item-section
|
||||
side
|
||||
v-if="visu === costanti.ASK_SENT_CIRCUIT && tools.isUserOk()"
|
||||
>
|
||||
<q-item-label>
|
||||
<q-btn rounded icon="fas fa-ellipsis-h">
|
||||
<q-menu>
|
||||
@@ -340,9 +360,7 @@ groupnameSel = null;
|
||||
"
|
||||
>
|
||||
<q-item-section>
|
||||
{{
|
||||
$t('shared.refuse_ask')
|
||||
}}
|
||||
{{ $t('shared.refuse_ask') }}
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
<q-item
|
||||
@@ -361,9 +379,7 @@ groupnameSel = null;
|
||||
"
|
||||
>
|
||||
<q-item-section>
|
||||
{{
|
||||
$t('shared.cancel_ask')
|
||||
}}
|
||||
{{ $t('shared.cancel_ask') }}
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
@@ -373,7 +389,10 @@ groupnameSel = null;
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
|
||||
<div class="centermydiv text-center" v-if="visu === costanti.ENTER_TO_THE_CIRCUIT">
|
||||
<div
|
||||
class="centermydiv text-center"
|
||||
v-if="visu === costanti.ENTER_TO_THE_CIRCUIT"
|
||||
>
|
||||
<q-btn
|
||||
v-if="
|
||||
!userStore.IsMyCircuitByName(circuit.name) &&
|
||||
@@ -382,23 +401,37 @@ groupnameSel = null;
|
||||
"
|
||||
icon="fas fa-user-plus"
|
||||
color="primary"
|
||||
:label="$t('circuit.ask')"
|
||||
:label="
|
||||
circuit.askManagerToEnter ? $t('circuit.ask') : $t('circuit.enter')
|
||||
"
|
||||
rounded
|
||||
@click="
|
||||
requestToEnterCircuit = true;
|
||||
groupnameSel = null;
|
||||
groupnameSel = null;
|
||||
"
|
||||
/>
|
||||
<q-btn v-if="userStore.IsMyCircuitByName(circuit.name)" rounded icon="fas fa-ellipsis-h">
|
||||
<q-btn
|
||||
v-if="userStore.IsMyCircuitByName(circuit.name)"
|
||||
rounded
|
||||
icon="fas fa-ellipsis-h"
|
||||
>
|
||||
<q-menu>
|
||||
<q-list v-if="true" style="min-width: 150px">
|
||||
<q-item
|
||||
clickable
|
||||
v-close-popup
|
||||
v-if="true"
|
||||
@click="(saldo !== 0) ?
|
||||
tools.showNegativeNotif($q, t('circuit.per_uscire_dal_circuito_occorre_essere_a_zero'), 30000) :
|
||||
tools.removeFromMyCircuits(
|
||||
@click="
|
||||
(saldo < 0)
|
||||
? tools.showNegativeNotif(
|
||||
$q,
|
||||
t(
|
||||
'circuit.per_uscire_dal_circuito_occorre_essere_a_zero',
|
||||
{ symbol: circuit.symbol }
|
||||
),
|
||||
30000
|
||||
)
|
||||
: tools.removeFromMyCircuits(
|
||||
$q,
|
||||
userStore.my.username,
|
||||
circuit.name,
|
||||
@@ -413,9 +446,7 @@ groupnameSel = null;
|
||||
<q-icon color="negative" name="fas fa-user-minus" />
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
{{
|
||||
$t('circuit.exit_circuit')
|
||||
}}
|
||||
{{ $t('circuit.exit_circuit') }}
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
|
||||
@@ -474,13 +505,19 @@ groupnameSel = null;
|
||||
</q-toolbar-title>
|
||||
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
|
||||
</q-toolbar>
|
||||
<q-card-section class="inset-shadow">
|
||||
<q-card-section v-if="circuit.symbol === 'RIS'" class="inset-shadow">
|
||||
<div v-html="t('circuit.disclaimer')"></div>
|
||||
</q-card-section>
|
||||
<q-card-section class="inset-shadow">
|
||||
<div style="font-weight: bold; font-size: 1.25rem">Regolamento:</div>
|
||||
<q-btn label="vedi Regolamento" @click="showrules = !showrules"></q-btn>
|
||||
<div v-if="showrules" v-html="getRegulation(circuit.regulation)"></div>
|
||||
<q-btn
|
||||
label="vedi Regolamento"
|
||||
@click="showrules = !showrules"
|
||||
></q-btn>
|
||||
<div
|
||||
v-if="showrules"
|
||||
v-html="getRegulation(circuit.regulation)"
|
||||
></div>
|
||||
</q-card-section>
|
||||
<q-card-actions align="center">
|
||||
<q-btn
|
||||
@@ -490,16 +527,21 @@ groupnameSel = null;
|
||||
:label="$t('circuit.acceptregulation')"
|
||||
@click="
|
||||
requestToEnterCircuit = false;
|
||||
tools.setRequestCircuit(
|
||||
tools.setRequestCircuit(
|
||||
$q,
|
||||
userStore.my.username,
|
||||
circuit.name,
|
||||
true,
|
||||
groupnameSel ? groupnameSel.groupname : ''
|
||||
);
|
||||
);
|
||||
"
|
||||
/>
|
||||
<q-btn outline :label="$t('dialog.cancel')" icon="close" v-close-popup></q-btn>
|
||||
<q-btn
|
||||
outline
|
||||
:label="$t('dialog.cancel')"
|
||||
icon="close"
|
||||
v-close-popup
|
||||
></q-btn>
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
@@ -513,5 +555,5 @@ tools.setRequestCircuit(
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "./CMyCircuit.scss";
|
||||
@import './CMyCircuit.scss';
|
||||
</style>
|
||||
|
||||
@@ -36,34 +36,6 @@
|
||||
</div>
|
||||
</CTitleBanner>
|
||||
|
||||
<CTitleBanner
|
||||
:class="`q-pa-xs `"
|
||||
:title="t('circuit.tuoi_ultimi_movimenti', { num: numtransaz })"
|
||||
bgcolor="white"
|
||||
bgcolor2="lightblue"
|
||||
:clcolor="`text-indigo`"
|
||||
:canopen="true"
|
||||
:small="true"
|
||||
:open="false"
|
||||
>
|
||||
<CMovements @loaded="movcaricati" :username="username" :showbuttolastmov="false">
|
||||
<div class="row justify-center"><q-btn
|
||||
rounded
|
||||
dense
|
||||
class="text-center"
|
||||
color="primary"
|
||||
:label="t('circuit.show_next_mov')"
|
||||
@click="addlastmov()"
|
||||
/>
|
||||
</div>
|
||||
</CMovements>
|
||||
|
||||
<q-inner-loading id="spinner" :showing="loadingvalues">
|
||||
<q-spinner-tail size="3em" color="primary" />
|
||||
</q-inner-loading>
|
||||
|
||||
<br />
|
||||
</CTitleBanner>
|
||||
<div class="row justify-center">
|
||||
<q-btn
|
||||
rounded
|
||||
@@ -100,11 +72,45 @@
|
||||
</CMyCircuit>
|
||||
</span>
|
||||
</div>
|
||||
</CTitleBanner>
|
||||
</div>
|
||||
<div v-if="visu === costanti.FIND_CIRCUIT">
|
||||
<div>
|
||||
<slot></slot>
|
||||
</div>
|
||||
</CTitleBanner>
|
||||
|
||||
<CTitleBanner
|
||||
:class="`q-pa-xs `"
|
||||
:title="t('circuit.tuoi_ultimi_movimenti', { num: numtransaz })"
|
||||
bgcolor="white"
|
||||
bgcolor2="lightblue"
|
||||
:clcolor="`text-indigo`"
|
||||
:canopen="true"
|
||||
:small="true"
|
||||
:open="false"
|
||||
>
|
||||
<CMovements
|
||||
@loaded="movcaricati"
|
||||
:username="username"
|
||||
:showbuttolastmov="false"
|
||||
>
|
||||
<div class="row justify-center">
|
||||
<q-btn
|
||||
rounded
|
||||
dense
|
||||
class="text-center"
|
||||
color="primary"
|
||||
:label="t('circuit.show_next_mov')"
|
||||
@click="addlastmov()"
|
||||
/>
|
||||
</div>
|
||||
</CMovements>
|
||||
|
||||
<q-inner-loading id="spinner" :showing="loadingvalues">
|
||||
<q-spinner-tail size="3em" color="primary" />
|
||||
</q-inner-loading>
|
||||
|
||||
<br />
|
||||
</CTitleBanner>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<q-list class="width-container">
|
||||
|
||||
@@ -493,8 +493,10 @@ export default defineComponent({
|
||||
productTypes: [],
|
||||
excludeproductTypes: [],
|
||||
editore: [],
|
||||
argomenti: [],
|
||||
author: '',
|
||||
sort: costanti.SORT_PUBDATE,
|
||||
sort_field: '',
|
||||
sort_dir: 0,
|
||||
arrProdottiSpeciali: [],
|
||||
}
|
||||
|
||||
@@ -783,10 +785,22 @@ export default defineComponent({
|
||||
|
||||
if (arrschede) {
|
||||
arrschede.forEach((recscheda: ISchedaSingola) => {
|
||||
arr.push({ label: recscheda.scheda!.name, value: recscheda.scheda!._id })
|
||||
let pagename = ''
|
||||
if (recscheda.scheda) {
|
||||
if (recscheda.idPageOrig) {
|
||||
const page = globalStore.getPageById(recscheda.idPageOrig)
|
||||
pagename = page ? page.title! : ''
|
||||
}
|
||||
if (pagename)
|
||||
pagename = '[Pag: ' + pagename + '] '
|
||||
|
||||
const mylabel = pagename + (recscheda.scheda ? recscheda.scheda!.name : '')
|
||||
arr.push({ label: mylabel, value: recscheda.scheda!._id })
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
return arr
|
||||
}
|
||||
|
||||
|
||||
@@ -1390,7 +1390,7 @@
|
||||
v-if="enableEdit && myel.catalogo"
|
||||
rounded
|
||||
outlined
|
||||
v-model="myel.catalogo.sort"
|
||||
v-model="myel.catalogo.sort_field"
|
||||
:options="shared_consts.ORDINAMENTO_CATALOGHI"
|
||||
@update:model-value="modifElem"
|
||||
label="Ordinamento"
|
||||
@@ -1399,6 +1399,20 @@
|
||||
map-options
|
||||
>
|
||||
</q-select>
|
||||
<q-select
|
||||
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
|
||||
v-if="enableEdit && myel.catalogo"
|
||||
rounded
|
||||
outlined
|
||||
v-model="myel.catalogo.sort_dir"
|
||||
:options="shared_consts.ORDINAMENTO_DIREZIONE"
|
||||
@update:model-value="modifElem"
|
||||
label="Direzione"
|
||||
style="width: 200px"
|
||||
emit-value
|
||||
map-options
|
||||
>
|
||||
</q-select>
|
||||
|
||||
<q-select
|
||||
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
|
||||
@@ -1411,7 +1425,7 @@
|
||||
:options="shared_consts.VERSIONI_PRODOTTO"
|
||||
@update:model-value="modifElem"
|
||||
multiple
|
||||
label="Includi"
|
||||
label="Includi Stato Prodotto"
|
||||
style="width: 300px"
|
||||
emit-value
|
||||
map-options
|
||||
@@ -1431,7 +1445,7 @@
|
||||
:options="shared_consts.VERSIONI_PRODOTTO"
|
||||
@update:model-value="modifElem"
|
||||
multiple
|
||||
label="Escludi"
|
||||
label="Escludi Stato Prodotto"
|
||||
style="width: 300px"
|
||||
emit-value
|
||||
map-options
|
||||
@@ -1442,7 +1456,7 @@
|
||||
v-if="enableEdit"
|
||||
rounded
|
||||
outlined
|
||||
v-model="myel.catalogo.Editore"
|
||||
v-model="myel.catalogo.editore"
|
||||
:options="Products.publishers"
|
||||
@update:model-value="modifElem"
|
||||
multiple
|
||||
@@ -1454,6 +1468,39 @@
|
||||
option-label="name"
|
||||
>
|
||||
</q-select>
|
||||
<q-select
|
||||
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
|
||||
v-if="enableEdit"
|
||||
rounded
|
||||
outlined
|
||||
v-model="myel.catalogo.Argomenti"
|
||||
:options="Products.catprods"
|
||||
@update:model-value="modifElem"
|
||||
multiple
|
||||
label="Argomenti"
|
||||
style="width: 300px"
|
||||
emit-value
|
||||
map-options
|
||||
option-value="_id"
|
||||
option-label="name"
|
||||
>
|
||||
</q-select>
|
||||
<q-select
|
||||
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
|
||||
v-if="enableEdit"
|
||||
rounded
|
||||
outlined
|
||||
v-model="myel.catalogo.idCollana"
|
||||
:options="Products.collane"
|
||||
@update:model-value="modifElem"
|
||||
label="Collana"
|
||||
style="width: 300px"
|
||||
emit-value
|
||||
map-options
|
||||
option-value="idCollana"
|
||||
option-label="descrizione"
|
||||
>
|
||||
</q-select>
|
||||
</div>
|
||||
</q-expansion-item>
|
||||
<q-expansion-item
|
||||
@@ -1579,6 +1626,7 @@
|
||||
@update:model-value="modifElem"
|
||||
v-model="recscheda.scheda.name"
|
||||
filled
|
||||
debounce="1000"
|
||||
v-on:keyup.enter="saveElem"
|
||||
>
|
||||
</q-input>
|
||||
@@ -1655,7 +1703,7 @@
|
||||
v-if="enableEdit && myel.catalogo"
|
||||
rounded
|
||||
outlined
|
||||
v-model="recscheda.scheda.sort"
|
||||
v-model="recscheda.scheda.sort_field"
|
||||
:options="shared_consts.ORDINAMENTO_CATALOGHI"
|
||||
@update:model-value="modifElem"
|
||||
label="Ordinamento"
|
||||
@@ -1664,6 +1712,22 @@
|
||||
map-options
|
||||
>
|
||||
</q-select>
|
||||
<q-select
|
||||
:behavior="
|
||||
$q.platform.is.ios === true ? 'dialog' : 'menu'
|
||||
"
|
||||
v-if="enableEdit && myel.catalogo"
|
||||
rounded
|
||||
outlined
|
||||
v-model="myel.catalogo.sort_dir"
|
||||
:options="shared_consts.ORDINAMENTO_DIREZIONE"
|
||||
@update:model-value="modifElem"
|
||||
label="Direzione"
|
||||
style="width: 200px"
|
||||
emit-value
|
||||
map-options
|
||||
>
|
||||
</q-select>
|
||||
<q-select
|
||||
:behavior="
|
||||
$q.platform.is.ios === true ? 'dialog' : 'menu'
|
||||
@@ -1713,7 +1777,7 @@
|
||||
v-if="enableEdit"
|
||||
rounded
|
||||
outlined
|
||||
v-model="recscheda.scheda.Editore"
|
||||
v-model="recscheda.scheda.editore"
|
||||
:options="Products.publishers"
|
||||
@update:model-value="modifElem"
|
||||
multiple
|
||||
@@ -2033,6 +2097,7 @@
|
||||
@saveFieldElem="saveFieldElem"
|
||||
@update:model-value="modifElem"
|
||||
label="Testo"
|
||||
debounce="1000"
|
||||
>
|
||||
</CMyText>
|
||||
</div>
|
||||
@@ -2061,6 +2126,7 @@
|
||||
@saveFieldElem="saveFieldElem"
|
||||
@update:model-value="modifElem"
|
||||
label="Testo"
|
||||
debounce="1000"
|
||||
>
|
||||
</CMyText>
|
||||
</div>
|
||||
|
||||
@@ -225,7 +225,7 @@ export default defineComponent({
|
||||
function clickOnElem() {
|
||||
if (props.editOn) {
|
||||
enableEdit.value = true
|
||||
console.log('selElemClick', props.myelem)
|
||||
// console.log('selElemClick', props.myelem)
|
||||
emit('selElemClick', props.myelem)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,6 +111,7 @@
|
||||
<div :class="$q.screen.lt.sm ? '' : 'row'">
|
||||
<div class="sezioni">
|
||||
<CCurrencyV2
|
||||
v-if="!circuit.ignoreLimits"
|
||||
:symbol="tools.getSymbolByCircuit(circuit)"
|
||||
:color="tools.getColorByCircuit(circuit)"
|
||||
color_border="red"
|
||||
@@ -127,6 +128,7 @@
|
||||
</div>
|
||||
<div class="sezioni">
|
||||
<CCurrencyV2
|
||||
v-if="!circuit.ignoreLimits"
|
||||
:symbol="tools.getSymbolByCircuit(circuit)"
|
||||
:color="tools.getColorByCircuit(circuit)"
|
||||
color_border="green"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const msg_website_it = {
|
||||
ws: {
|
||||
sitename: 'Gruppo Macro',
|
||||
siteshortname: 'Gruppo Macro',
|
||||
description: '',
|
||||
keywords: '',
|
||||
sitename: 'Riso',
|
||||
siteshortname: 'RISO',
|
||||
description: 'Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.',
|
||||
keywords: 'riso, piattaforma di scambio, rete italiana scambio orizzontale, riso app, riso piattaforma, scambio e baratto, momenta RIS',
|
||||
},
|
||||
hours: {
|
||||
descr: 'Descrizione',
|
||||
@@ -16,35 +16,23 @@ const msg_website_it = {
|
||||
pages: {
|
||||
home: 'Home',
|
||||
profile: 'Profilo',
|
||||
install_site: 'Installa Sito',
|
||||
profile2: 'ProfiloU',
|
||||
mypage2: 'mypage2',
|
||||
myservice2: 'myservice2',
|
||||
myhosps2: 'myhosps2',
|
||||
mygood2: 'mygood2',
|
||||
catalogo: 'Catalogo',
|
||||
fundraising: 'Sostieni il Progetto',
|
||||
notifs: 'Configura le Notifiche',
|
||||
unsubscribe: 'Disiscriviti',
|
||||
unsubscribe_user: 'Disiscriviti User',
|
||||
test: 'Test',
|
||||
projects: 'Progetti',
|
||||
report: 'Report Ore',
|
||||
producer: 'Produttore',
|
||||
orderinfo: 'Ordini Effettuati',
|
||||
products: 'Prodotti',
|
||||
cash: 'Cassa',
|
||||
productInfos: 'Info Prodotti',
|
||||
listinoprodotti: 'Listino Prodotti',
|
||||
productslist: 'Lista Prodotti',
|
||||
collabora: 'Collabora',
|
||||
categories: 'Categorie',
|
||||
storehouses: 'Magazzino',
|
||||
providers: 'Fornitori',
|
||||
catprods: 'Categorie',
|
||||
subcatprods: 'Sotto-Categorie',
|
||||
gasordine: 'Gas Ordine',
|
||||
scontisticas: 'Scontistica',
|
||||
departments: 'Uffici',
|
||||
orders: 'Ordini Ricevuti',
|
||||
orders2: 'Ordini Ricevuti',
|
||||
@@ -133,11 +121,15 @@ const msg_website_it = {
|
||||
only_residenti: 'Solo Residenti',
|
||||
only_consiglio: 'Solo Consiglieri',
|
||||
color: 'Colore',
|
||||
gasordini: 'Gas Ordini',
|
||||
gestoreordini: 'Gestore Ordini',
|
||||
mainMenu: 'Menu Principale',
|
||||
subtitle: 'Sottotitolo',
|
||||
lang: 'Lingua',
|
||||
keywords: 'Parole Chiave',
|
||||
desctiption: 'Descrizione',
|
||||
heightimg: 'Altezza Immagine',
|
||||
},
|
||||
msg: {
|
||||
myAppName: 'Più che Buono',
|
||||
myAppName: 'Riso',
|
||||
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito',
|
||||
underconstruction: 'App in costruzione...',
|
||||
myDescriz: '',
|
||||
|
||||
@@ -67,6 +67,39 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 12,
|
||||
path: '/goods',
|
||||
materialIcon: 'fas fa-tshirt',
|
||||
name: 'mypages.goods',
|
||||
component: () => import('@/root/goods/goods.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 15,
|
||||
path: '/services',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.services',
|
||||
component: () => import('@/root/services/services.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 15,
|
||||
path: '/activities',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.activities',
|
||||
component: () => import('@/root/activities/activities.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 15,
|
||||
@@ -78,6 +111,17 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 15,
|
||||
path: '/hosps',
|
||||
materialIcon: 'fas fa-bed',
|
||||
name: 'mypages.hosp',
|
||||
component: () => import('@/root/hosp/hosp.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: site.confpages && site.confpages.enableCircuits,
|
||||
order: 16,
|
||||
@@ -90,7 +134,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: site.confpages && site.confpages.enableEvents,
|
||||
active: true,
|
||||
order: 20,
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
@@ -112,7 +156,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: site.confpages && site.confpages.showProfile,
|
||||
active: true,
|
||||
order: 120,
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
@@ -123,7 +167,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: site.confpages && site.confpages.showProfile,
|
||||
active: true,
|
||||
order: 120,
|
||||
path: '/editprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
@@ -134,7 +178,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: site.confpages && site.confpages.showiscrittiMenu,
|
||||
active: true,
|
||||
order: 130,
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
@@ -229,6 +273,16 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 150,
|
||||
path: '/sostieniilprogetto',
|
||||
materialIcon: 'fas fa-hand-holding-heart',
|
||||
name: 'pages.fundraising',
|
||||
component: () => import('@src/root/fundraising/fundraising.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 80,
|
||||
|
||||
@@ -421,7 +421,8 @@ export type StateConnection = 'online' | 'offline'
|
||||
|
||||
export interface IFilterCatalogo {
|
||||
author: string
|
||||
sort: number
|
||||
sort_field: string
|
||||
sort_dir: number
|
||||
publisher: string
|
||||
type: string
|
||||
ageGroup: string
|
||||
@@ -797,8 +798,11 @@ export interface IMyScheda {
|
||||
productTypes?: number[]
|
||||
excludeproductTypes?: number[]
|
||||
editore?: string[]
|
||||
argomenti?: string[]
|
||||
collana?: string
|
||||
author?: string
|
||||
sort?: number
|
||||
sort_field?: string
|
||||
sort_dir?: number
|
||||
arrProdottiSpeciali?: string[]
|
||||
|
||||
}
|
||||
@@ -810,6 +814,7 @@ export interface ISchedaSingola {
|
||||
numPagineMax?: number,
|
||||
|
||||
// In Memoria
|
||||
idPageOrig?: string
|
||||
arrProdToShow?: IProduct[][][]
|
||||
}
|
||||
|
||||
@@ -819,8 +824,11 @@ export interface ICatalogo {
|
||||
excludeproductTypes?: number[]
|
||||
formato?: string[]
|
||||
Categoria?: string[]
|
||||
Editore?: string[]
|
||||
sort?: number
|
||||
editore?: string[]
|
||||
argomenti?: string[]
|
||||
collana?: string
|
||||
sort_field?: string
|
||||
sort_dir?: number
|
||||
pdf?: boolean
|
||||
pdf_filename?: string
|
||||
printable?: boolean
|
||||
@@ -834,7 +842,7 @@ export interface ICatalogo {
|
||||
dimensioni_def?: IElementiPagina
|
||||
|
||||
arrSchede?: ISchedaSingola[]
|
||||
aggiorna: number
|
||||
aggiorna?: number
|
||||
}
|
||||
|
||||
|
||||
@@ -984,6 +992,7 @@ export interface IColGridTable {
|
||||
extrafield?: string
|
||||
tipoconto?: number
|
||||
path?: string
|
||||
onlyforAdmin?: boolean
|
||||
}
|
||||
|
||||
export interface ITableRec {
|
||||
@@ -1340,10 +1349,16 @@ export interface ICircuit {
|
||||
qta_max_default?: number
|
||||
fido_scoperto_default_grp?: number
|
||||
qta_max_default_grp?: number
|
||||
fido_scoperto_default_contocom?: number
|
||||
qta_max_default_contocom?: number
|
||||
data_costituz?: Date
|
||||
deperimento: boolean
|
||||
showAlways: boolean
|
||||
ignoreLimits: boolean
|
||||
askManagerToEnter?: boolean
|
||||
sendEmailAfterAskingToEnter?: boolean
|
||||
circuitoIndipendente?: boolean
|
||||
creditodiPartenza?: number
|
||||
transactionsEnabled: boolean
|
||||
status: number
|
||||
freq_deper?: string
|
||||
|
||||
@@ -34,6 +34,8 @@ export interface IProductInfo {
|
||||
checkout_link?: string
|
||||
idAuthors?: string[]
|
||||
authors?: string[]
|
||||
idCollana?: string
|
||||
collana?: string
|
||||
collezione?: string
|
||||
idPublisher?: string
|
||||
publisher?: IPublisher
|
||||
@@ -45,7 +47,9 @@ export interface IProductInfo {
|
||||
short_descr: string
|
||||
|
||||
totVen?: number,
|
||||
totFat?: number,
|
||||
vLast3M?: number,
|
||||
fatLast3M?: number,
|
||||
vLast6M?: number,
|
||||
vLastY?: number,
|
||||
vLast2Y?: number,
|
||||
@@ -173,6 +177,7 @@ export interface IProductsState {
|
||||
cart: ICart
|
||||
orders: IOrderCart[]
|
||||
catprods: ICatProd[]
|
||||
collane?: ICollana[]
|
||||
catprods_gas: ICatProd[]
|
||||
subcatprods: ISubCatProd[]
|
||||
productInfos: IProductInfo[]
|
||||
@@ -209,11 +214,19 @@ export interface ICategory {
|
||||
export interface ICatProd {
|
||||
_id?: any
|
||||
name: string,
|
||||
descr_estesa?: string,
|
||||
img?: string,
|
||||
icon?: string,
|
||||
color?: string,
|
||||
}
|
||||
|
||||
export interface ICollana {
|
||||
_id?: any
|
||||
idCollana: number,
|
||||
descrizione: string,
|
||||
descrizione_estesa?: string,
|
||||
}
|
||||
|
||||
export interface ICatAI {
|
||||
_id?: any
|
||||
name: string,
|
||||
|
||||
0
src/rootgen/admin/collane/collane.scss
Executable file
34
src/rootgen/admin/collane/collane.ts
Executable file
@@ -0,0 +1,34 @@
|
||||
|
||||
import { colTableCollane } from '@src/store/Modules/fieldsTable'
|
||||
|
||||
import { CImgText } from '../../../components/CImgText/index'
|
||||
|
||||
import { defineComponent } from 'vue'
|
||||
import { CCard } from '@/components/CCard'
|
||||
import { CMyPage } from '@/components/CMyPage'
|
||||
import { CTitleBanner } from '@/components/CTitleBanner'
|
||||
import { CGridTableRec } from '@/components/CGridTableRec'
|
||||
|
||||
import MixinMetaTags from '../../../mixins/mixin-metatags'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'Collane',
|
||||
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
|
||||
setup() {
|
||||
const pagination = {
|
||||
sortBy: 'name',
|
||||
descending: false,
|
||||
page: 2,
|
||||
rowsPerPage: 5
|
||||
// rowsNumber: xx if getting data from a server
|
||||
}
|
||||
|
||||
const { setmeta } = MixinMetaTags()
|
||||
|
||||
return {
|
||||
colTableCollane,
|
||||
setmeta,
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
31
src/rootgen/admin/collane/collane.vue
Executable file
@@ -0,0 +1,31 @@
|
||||
<template>
|
||||
<CMyPage title="Collane" imgbackground="images/produttori.jpg" sizes="max-height: 120px">
|
||||
<span>{{
|
||||
setmeta({
|
||||
title: 'Collane',
|
||||
description: '',
|
||||
keywords: '',
|
||||
})
|
||||
}}
|
||||
</span>
|
||||
|
||||
<div class="q-ma-sm q-gutter-sm q-pa-xs">
|
||||
<CTitleBanner title="Collane"></CTitleBanner>
|
||||
<CGridTableRec
|
||||
prop_mytable="collanas"
|
||||
prop_mytitle="Collane"
|
||||
:prop_mycolumns="colTableCollane"
|
||||
prop_colkey="name"
|
||||
nodataLabel="Nessuna Collana"
|
||||
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
|
||||
|
||||
</CGridTableRec>
|
||||
</div>
|
||||
</CMyPage>
|
||||
</template>
|
||||
<script lang="ts" src="./collane.ts">
|
||||
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import 'collane.scss';
|
||||
</style>
|
||||
@@ -48,6 +48,15 @@ export default defineComponent({
|
||||
arrPages.value.push(rec)
|
||||
}
|
||||
|
||||
// Aggiungi anche le pagine cancellate, in cui gli elementi non hanno più una pagina collegata
|
||||
|
||||
for (const elem of globalStore.myelems) {
|
||||
const pagetofind = arrPages.value.find((page: any) => page.value === elem.idPage)
|
||||
if (!pagetofind) {
|
||||
// non c'è in lista:
|
||||
arrPages.value.push({label: 'pag non trovata: ' + elem.idPage, value: elem.idPage})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// filtercustom.value = [{ userId: userStore.my._id }]
|
||||
|
||||
@@ -130,55 +130,12 @@ export const Api = {
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
async SendReqBase(url: string, method: string, mydata: any, setAuthToken = false, evitaloop = false, myformdata?: any, responsedata?: any): Promise<Types.AxiosSuccess | Types.AxiosError> {
|
||||
const mydataout = {
|
||||
...mydata,
|
||||
keyappid: process.env.PAO_APP_ID,
|
||||
idapp: process.env.APP_ID,
|
||||
}
|
||||
async checkTokenScaduto(status: number, evitaloop: boolean, resolve: any, reject: any, url: string, method: string, mydata: any, setAuthToken = false) {
|
||||
|
||||
const userStore = useUserStore()
|
||||
const globalStore = useGlobalStore()
|
||||
const $router = useRouter()
|
||||
|
||||
userStore.setServerCode(tools.EMPTY)
|
||||
userStore.setResStatus(0)
|
||||
|
||||
return new Promise((resolve, reject) => sendRequest(url, method, mydataout, myformdata, responsedata)
|
||||
.then((res) => {
|
||||
setTimeout(() => {
|
||||
if (method === 'get') {
|
||||
globalStore.connData.downloading_server = 0
|
||||
} else {
|
||||
globalStore.connData.uploading_server = 0
|
||||
globalStore.connData.downloading_server = 0
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
if (res.status) {
|
||||
userStore.setResStatus(res.status)
|
||||
if (res.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION)
|
||||
userStore.setAuth('', '')
|
||||
return reject({ code: toolsext.ERR_AUTHENTICATION })
|
||||
}
|
||||
}
|
||||
if (tools.isDebug())
|
||||
console.log(' ----> ', res)
|
||||
return resolve(res)
|
||||
})
|
||||
.catch(async (error) => {
|
||||
setTimeout(() => {
|
||||
if (method === 'get') {
|
||||
globalStore.connData.downloading_server = -1
|
||||
} else {
|
||||
globalStore.connData.uploading_server = -1
|
||||
globalStore.connData.downloading_server = -1
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
if (error.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
||||
if (status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
||||
try {
|
||||
console.log('Token Scaduto.')
|
||||
const newAccessToken = await this.refreshToken();
|
||||
@@ -199,6 +156,68 @@ export const Api = {
|
||||
return reject({ code: toolsext.ERR_AUTHENTICATION })
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
async SendReqBase(url: string, method: string, mydata: any, setAuthToken = false, evitaloop = false, myformdata?: any, responsedata?: any): Promise<Types.AxiosSuccess | Types.AxiosError> {
|
||||
const mydataout = {
|
||||
...mydata,
|
||||
keyappid: process.env.PAO_APP_ID,
|
||||
idapp: process.env.APP_ID,
|
||||
}
|
||||
|
||||
const userStore = useUserStore()
|
||||
const globalStore = useGlobalStore()
|
||||
const $router = useRouter()
|
||||
|
||||
userStore.setServerCode(tools.EMPTY)
|
||||
userStore.setResStatus(0)
|
||||
|
||||
return new Promise((resolve, reject) => sendRequest(url, method, mydataout, myformdata, responsedata)
|
||||
.then(async (res) => {
|
||||
setTimeout( () => {
|
||||
if (method === 'get') {
|
||||
globalStore.connData.downloading_server = 0
|
||||
} else {
|
||||
globalStore.connData.uploading_server = 0
|
||||
globalStore.connData.downloading_server = 0
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
if (res.status) {
|
||||
userStore.setResStatus(res.status)
|
||||
if (res.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION)
|
||||
userStore.setAuth('', '')
|
||||
return reject({ code: toolsext.ERR_AUTHENTICATION })
|
||||
}
|
||||
}
|
||||
|
||||
const ret = await this.checkTokenScaduto(res.status, evitaloop, resolve, reject, url, method, mydataout, setAuthToken)
|
||||
if (ret) {
|
||||
return ret
|
||||
}
|
||||
|
||||
if (tools.isDebug())
|
||||
console.log(' ----> ', res)
|
||||
return resolve(res)
|
||||
})
|
||||
.catch(async (error) => {
|
||||
setTimeout(() => {
|
||||
if (method === 'get') {
|
||||
globalStore.connData.downloading_server = -1
|
||||
} else {
|
||||
globalStore.connData.uploading_server = -1
|
||||
globalStore.connData.downloading_server = -1
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
const ret = await this.checkTokenScaduto(error.status, evitaloop, resolve, reject, url, method, mydataout, setAuthToken)
|
||||
if (ret) {
|
||||
return ret
|
||||
}
|
||||
|
||||
console.log('ERROR', error)
|
||||
@@ -206,6 +225,7 @@ export const Api = {
|
||||
}))
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Creates a Promise that resolves after a specified number of milliseconds.
|
||||
* Useful for creating delayed operations or pause in async functions.
|
||||
@@ -229,7 +249,7 @@ export const Api = {
|
||||
* // Usage with Promise chaining
|
||||
* delay(1000).then(() => console.log('1 second passed'));
|
||||
*/
|
||||
async delay (ms: number): Promise<void> {
|
||||
async delay(ms: number): Promise<void> {
|
||||
// Input validation
|
||||
if (ms < 0) {
|
||||
throw new Error('Delay time cannot be negative');
|
||||
@@ -253,7 +273,13 @@ export const Api = {
|
||||
const response = await this.SendReqBase(url, method, mydata, setAuthToken, evitaloop, myformdata, responsedata);
|
||||
return response;
|
||||
} catch (error: any) {
|
||||
if (retryCount > 0) {
|
||||
let riprova = true
|
||||
try {
|
||||
riprova = (error.status !== 403);
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
if (retryCount > 0 && riprova) {
|
||||
// (!error.hasOwnProperty('data') || (error.hasOwnProperty('data') && !error.data.error.hasOwnProperty('code')) && (!error.hasOwnProperty('msgerr')))
|
||||
console.log(`❌❌❌ Retrying request. Attempts remaining: ${retryCount}`);
|
||||
await this.delay(retryDelay);
|
||||
|
||||
@@ -29,7 +29,7 @@ export const costanti = {
|
||||
'excludeproductTypes',
|
||||
'misure',
|
||||
'Categoria',
|
||||
'Editore',
|
||||
'editore',
|
||||
'pdf',
|
||||
'Printable',
|
||||
'numschede_perCol',
|
||||
@@ -500,8 +500,4 @@ export const costanti = {
|
||||
TESTO_BORDATO: 5,
|
||||
},
|
||||
|
||||
SORT_DEFAULT: 0,
|
||||
SORT_PUBDATE: 1,
|
||||
SORT_BESTSELLER: 2,
|
||||
|
||||
}
|
||||
|
||||
@@ -103,6 +103,7 @@ function AddCol(params: IColGridTable) {
|
||||
filter_field: (params.filter_field === undefined) ? '' : params.filter_field,
|
||||
isadvanced_field: (params.isadvanced_field === undefined) ? false : params.isadvanced_field,
|
||||
path: (params.path === undefined) ? '' : params.path,
|
||||
onlyforAdmin: (params.onlyforAdmin === undefined) ? false : params.onlyforAdmin,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,10 +189,13 @@ export const colmyScheda = [
|
||||
|
||||
AddCol({ name: 'productTypes', label_trans: 'productTypes', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'excludeproductTypes', label_trans: 'excludeproductTypes', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'Editore', label_trans: 'Editore' }),
|
||||
AddCol({ name: 'author', label_trans: 'author' }),
|
||||
AddCol({ name: 'sort', label_trans: 'catalogo.sort', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'arrProdottiSpeciali', label_trans: 'Editore' }),
|
||||
AddCol({ name: 'editore', label_trans: 'editore' }),
|
||||
AddCol({ name: 'author', label_trans: 'scheda.author' }),
|
||||
AddCol({ name: 'argomenti', label_trans: 'scheda.argomenti' }),
|
||||
AddCol({ name: 'idCollana', label_trans: 'scheda.idCollana' }),
|
||||
AddCol({ name: 'sort_field', label_trans: 'catalogo.sort_field', fieldtype: costanti.FieldType.string }),
|
||||
AddCol({ name: 'sort_dir', label_trans: 'catalogo.sort_dir', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'arrProdottiSpeciali', label_trans: 'editore' }),
|
||||
]
|
||||
|
||||
export const colmyelCatalogo = [
|
||||
@@ -199,7 +203,9 @@ export const colmyelCatalogo = [
|
||||
AddCol({ name: 'excludeproductTypes', label_trans: 'excludeproductTypes', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'pdf', label_trans: 'pdf' }),
|
||||
AddCol({ name: 'pdf_filename', label_trans: 'pdf_filename' }),
|
||||
AddCol({ name: 'Editore', label_trans: 'Editore' }),
|
||||
AddCol({ name: 'editore', label_trans: 'editore' }),
|
||||
AddCol({ name: 'argomenti', label_trans: 'scheda.argomenti' }),
|
||||
AddCol({ name: 'idCollana', label_trans: 'scheda.idCollana' }),
|
||||
AddCol({ name: 'width', label_trans: 'width', fieldtype: costanti.FieldType.string }),
|
||||
AddCol({ name: 'height', label_trans: 'height', fieldtype: costanti.FieldType.string }),
|
||||
AddCol({ name: 'optcatalogo.', label_trans: 'catalogo.optcatalogo.', fieldtype: costanti.FieldType.number }),
|
||||
@@ -280,6 +286,7 @@ export const colmsg_templates = [
|
||||
]
|
||||
|
||||
export const colmypage = [
|
||||
AddCol({ name: '_id', label_trans: 'index', fieldtype: costanti.FieldType.string }),
|
||||
AddCol({ name: 'path', label_trans: 'pages.path' }),
|
||||
AddCol({ name: 'icon', label_trans: 'pages.icon' }),
|
||||
AddCol({ name: 'order', label_trans: 'pages.order', fieldtype: costanti.FieldType.number }),
|
||||
@@ -497,12 +504,20 @@ export const colTablecategories = [
|
||||
|
||||
export const colTableCatProd = [
|
||||
AddCol({ name: 'name', label_trans: 'categories.name' }),
|
||||
AddCol({ name: 'descr_estesa', label_trans: 'categories.descr_estesa' }),
|
||||
AddCol({ name: 'img', label_trans: 'categories.img' }),
|
||||
AddCol({ name: 'icon', label_trans: 'categories.icon' }),
|
||||
AddCol({ name: 'color', label_trans: 'categories.color' }),
|
||||
AddCol(DeleteRec),
|
||||
AddCol(DuplicateRec),
|
||||
]
|
||||
export const colTableCollane = [
|
||||
AddCol({ name: 'idCollana', label_trans: 'collane.idCollana', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'descrizione', label_trans: 'collane.descrizione' }),
|
||||
AddCol({ name: 'descrizione_estesa', label_trans: 'collane.descrizione_estesa' }),
|
||||
AddCol(DeleteRec),
|
||||
AddCol(DuplicateRec),
|
||||
]
|
||||
|
||||
export const colTableCatAI = [
|
||||
AddCol({ name: 'name', label_trans: 'categories.name' }),
|
||||
@@ -2317,6 +2332,12 @@ export const colTableProductInfos = [
|
||||
fieldtype: costanti.FieldType.multiselect,
|
||||
jointable: 'catprods',
|
||||
}),
|
||||
AddCol({
|
||||
name: 'idCollana',
|
||||
label_trans: 'products.category',
|
||||
fieldtype: costanti.FieldType.select,
|
||||
jointable: 'collanas',
|
||||
}),
|
||||
AddCol({ name: 'color', label_trans: 'products.color' }),
|
||||
AddCol({ name: 'size', label_trans: 'products.size' }),
|
||||
AddCol({ name: 'weight', label_trans: 'products.weight', fieldtype: costanti.FieldType.number }),
|
||||
@@ -3600,11 +3621,17 @@ export const colTableCircuitComplete = [
|
||||
AddCol({ name: 'qta_max_default', label_trans: 'circuit.qta_max_default', fieldtype: costanti.FieldType.currency }),
|
||||
AddCol({ name: 'fido_scoperto_default_grp', label_trans: 'circuit.fido_scoperto_default_grp', fieldtype: costanti.FieldType.currency }),
|
||||
AddCol({ name: 'qta_max_default_grp', label_trans: 'circuit.qta_max_default_grp', fieldtype: costanti.FieldType.currency }),
|
||||
AddCol({ name: 'fido_scoperto_default_contocom', label_trans: 'circuit.fido_scoperto_default_contocom', fieldtype: costanti.FieldType.currency }),
|
||||
AddCol({ name: 'qta_max_default_contocom', label_trans: 'circuit.qta_max_default_contocom', fieldtype: costanti.FieldType.currency }),
|
||||
AddCol({ name: 'data_costituz', label_trans: 'circuit.data_costituz', fieldtype: costanti.FieldType.date }),
|
||||
AddCol({ name: 'deperimento', label_trans: 'circuit.deperimento', fieldtype: costanti.FieldType.boolean }),
|
||||
AddCol({ name: 'showAlways', label_trans: 'circuit.showAlways', fieldtype: costanti.FieldType.boolean }),
|
||||
AddCol({ name: 'ignoreLimits', label_trans: 'circuit.ignoreLimits', fieldtype: costanti.FieldType.boolean }),
|
||||
AddCol({ name: 'transactionsEnabled', label_trans: 'circuit.transactionsEnabled', fieldtype: costanti.FieldType.boolean }),
|
||||
AddCol({ name: 'showAlways', label_trans: 'circuit.showAlways', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'ignoreLimits', label_trans: 'circuit.ignoreLimits', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'transactionsEnabled', label_trans: 'circuit.transactionsEnabled', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'askManagerToEnter', label_trans: 'circuit.askManagerToEnter', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'sendEmailAfterAskingToEnter', label_trans: 'circuit.sendEmailAfterAskingToEnter', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'circuitoIndipendente', label_trans: 'circuit.circuitoIndipendente', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'creditodiPartenza', label_trans: 'circuit.creditodiPartenza', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'freq_deper', label_trans: 'circuit.freq_deper' }),
|
||||
AddCol({ name: 'minuto_deper', label_trans: 'circuit.minuto_deper', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({ name: 'ora_deper', label_trans: 'circuit.ora_deper', fieldtype: costanti.FieldType.number }),
|
||||
@@ -3641,6 +3668,9 @@ export const colTableCircuitComplete = [
|
||||
sortable: true,
|
||||
showWhen: 0
|
||||
}),
|
||||
AddCol({ name: 'circuitoIndipendente', label_trans: 'circuit.circuitoIndipendente', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'askManagerToEnter', label_trans: 'circuit.askManagerToEnter', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'sendEmailAfterAskingToEnter', label_trans: 'circuit.sendEmailAfterAskingToEnter', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol(ModifRec),
|
||||
AddCol(DeleteRec),
|
||||
AddCol(DuplicateRec),
|
||||
@@ -3693,10 +3723,12 @@ export const colTableCircuit = [
|
||||
fieldtype: costanti.FieldType.multiselect,
|
||||
jointable: 'visibilGroup',
|
||||
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
|
||||
onlyforAdmin: true,
|
||||
}),
|
||||
AddCol({
|
||||
name: 'systemUserId', label_trans: 'circuit.systemUserId', fieldtype: costanti.FieldType.select, jointable: 'users',
|
||||
showWhen: costanti.showWhen.InEdit + costanti.showWhen.InView,
|
||||
onlyforAdmin: true
|
||||
}),
|
||||
AddCol({
|
||||
name: 'createdBy', label_trans: 'circuit.founder', fieldtype: costanti.FieldType.select, jointable: 'users',
|
||||
@@ -3730,6 +3762,8 @@ export const colTableCircuit = [
|
||||
}),
|
||||
AddCol({ name: 'fido_scoperto_default_grp', label_trans: 'circuit.fido_scoperto_default_grp', fieldtype: costanti.FieldType.currency }),
|
||||
AddCol({ name: 'qta_max_default_grp', label_trans: 'circuit.qta_max_default_grp', fieldtype: costanti.FieldType.currency }),
|
||||
AddCol({ name: 'fido_scoperto_default_contocom', label_trans: 'circuit.fido_scoperto_default_contocom', fieldtype: costanti.FieldType.currency }),
|
||||
AddCol({ name: 'qta_max_default_contocom', label_trans: 'circuit.qta_max_default_contocom', fieldtype: costanti.FieldType.currency }),
|
||||
AddCol({ name: 'valuta_per_euro', label_trans: 'circuit.valuta_per_euro', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({
|
||||
name: 'totCircolante', label_trans: 'circuit.totCircolante',
|
||||
@@ -3743,14 +3777,19 @@ export const colTableCircuit = [
|
||||
}),
|
||||
AddCol({ name: 'regulation', label_trans: 'circuit.regulation', fieldtype: costanti.FieldType.html, required: false }),
|
||||
AddCol({ name: 'deperimento', label_trans: 'circuit.deperimento', fieldtype: costanti.FieldType.boolean, disable: true }),
|
||||
AddCol({ name: 'showAlways', label_trans: 'circuit.showAlways', fieldtype: costanti.FieldType.boolean }),
|
||||
AddCol({ name: 'ignoreLimits', label_trans: 'circuit.ignoreLimits', fieldtype: costanti.FieldType.boolean }),
|
||||
AddCol({ name: 'transactionsEnabled', label_trans: 'circuit.transactionsEnabled', fieldtype: costanti.FieldType.boolean }),
|
||||
AddCol({ name: 'showAlways', label_trans: 'circuit.showAlways', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'ignoreLimits', label_trans: 'circuit.ignoreLimits', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'transactionsEnabled', label_trans: 'circuit.transactionsEnabled', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'askManagerToEnter', label_trans: 'circuit.askManagerToEnter', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'sendEmailAfterAskingToEnter', label_trans: 'circuit.sendEmailAfterAskingToEnter', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'circuitoIndipendente', label_trans: 'circuit.circuitoIndipendente', fieldtype: costanti.FieldType.boolean, onlyforAdmin: true }),
|
||||
AddCol({ name: 'creditodiPartenza', label_trans: 'circuit.creditodiPartenza', fieldtype: costanti.FieldType.number }),
|
||||
AddCol({
|
||||
name: 'status', label_trans: 'circuit.status',
|
||||
fieldtype: costanti.FieldType.select,
|
||||
jointable: 'statuscircuit',
|
||||
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
|
||||
onlyforAdmin: true
|
||||
}
|
||||
),
|
||||
AddCol({ name: 'data_costituz', label_trans: 'circuit.data_costituz', fieldtype: costanti.FieldType.date }),
|
||||
@@ -4110,6 +4149,13 @@ export const fieldsTable = {
|
||||
colkey: '_id',
|
||||
collabel: 'name',
|
||||
},
|
||||
{
|
||||
value: 'collanas',
|
||||
label: 'Collane',
|
||||
columns: colTableCollane,
|
||||
colkey: 'idCollana',
|
||||
collabel: 'descrizione',
|
||||
},
|
||||
{
|
||||
value: 'catais',
|
||||
label: 'Categorie AI',
|
||||
|
||||
@@ -6616,6 +6616,10 @@ export const tools = {
|
||||
check = check && tools.isBitActive(col.showWhen, costanti.showWhen.InPage)
|
||||
}
|
||||
|
||||
if (col.onlyforAdmin) {
|
||||
check = check && tools.isAdmin()
|
||||
}
|
||||
|
||||
return check
|
||||
|
||||
|
||||
@@ -6648,14 +6652,23 @@ export const tools = {
|
||||
setRequestCircuit($q: any, username: string, circuitname: string, value: boolean, groupname?: string) {
|
||||
|
||||
const userStore = useUserStore()
|
||||
const circuitStore = useCircuitStore()
|
||||
|
||||
userStore.setCircuitCmd($q, t, username, circuitname, shared_consts.CIRCUITCMD.REQ, value, { groupname })
|
||||
.then((res: any) => {
|
||||
if (res) {
|
||||
if (value) {
|
||||
|
||||
const mycircuit = circuitStore.getCircuitByName(circuitname)
|
||||
|
||||
let msg = t('circuit.already_entered', { circuitname })
|
||||
if (mycircuit?.askManagerToEnter) {
|
||||
msg = t('circuit.askedto', { circuitname })
|
||||
}
|
||||
|
||||
// ADD to req
|
||||
userStore.my.profile.asked_circuits.push(res.circuit)
|
||||
tools.showPositiveNotif($q, t('circuit.askedto', { circuitname }))
|
||||
tools.showPositiveNotif($q, msg)
|
||||
} else {
|
||||
// REMOVE to req
|
||||
userStore.my.profile.asked_circuits = userStore.my.profile.asked_circuits.filter((rec: ICircuit) => rec.name !== circuitname)
|
||||
@@ -6744,7 +6757,7 @@ export const tools = {
|
||||
userStore.my.profile.asked_circuits = userStore.my.profile.asked_circuits.filter((rec: ICircuit) => rec.name !== circuitname)
|
||||
}
|
||||
this.updateMyData(res)
|
||||
tools.showPositiveNotif($q, t('circuit.cancel_req'))
|
||||
tools.showPositiveNotif($q, t('circuit.cancel_req', { circuitname }))
|
||||
}
|
||||
})
|
||||
})
|
||||
@@ -7384,6 +7397,8 @@ export const tools = {
|
||||
qta_max_default: 200,
|
||||
fido_scoperto_default_grp: shared_consts.CIRCUIT_PARAMS.SCOPERTO_MIN_GRP,
|
||||
qta_max_default_grp: shared_consts.CIRCUIT_PARAMS.SCOPERTO_MAX_GRP,
|
||||
fido_scoperto_default_contocom: shared_consts.CIRCUIT_PARAMS.SCOPERTO_MIN_CONTO_COMUNITARIO,
|
||||
qta_max_default_contocom: shared_consts.CIRCUIT_PARAMS.SCOPERTO_MAX_CONTO_COMUNITARIO,
|
||||
valuta_per_euro: 1,
|
||||
totTransato: 0,
|
||||
totCircolante: 0,
|
||||
|
||||
@@ -13,7 +13,6 @@ import { useGlobalStore } from './globalStore'
|
||||
import { ref } from 'vue'
|
||||
|
||||
import translate from '@src/globalroutines/util'
|
||||
import products from '@src/rootgen/admin/products/products'
|
||||
|
||||
function getRecordOrdersCartEmpty(): IOrderCart {
|
||||
return {
|
||||
@@ -149,6 +148,27 @@ export const useProducts = defineStore('Products', {
|
||||
return arrcat
|
||||
},
|
||||
|
||||
getCatProdsStrByCatProds: (state: IProductsState) => (catProds: ICatProd[]): string => {
|
||||
let mystr = ''
|
||||
for (const catprod of catProds) {
|
||||
const myarrcat = state.catprods.find((rec: ICatProd) => rec._id === catprod)
|
||||
if (myarrcat) {
|
||||
if (mystr)
|
||||
mystr = ' - '
|
||||
mystr += myarrcat.name
|
||||
}
|
||||
}
|
||||
return mystr
|
||||
},
|
||||
|
||||
getCatProdDescrStrByIdCatProd: (state: IProductsState) => (idCatProd: string): string => {
|
||||
const myfirstcat = state.catprods.find((rec: ICatProd) => rec._id === idCatProd)
|
||||
|
||||
if (myfirstcat) {
|
||||
return myfirstcat.descr_estesa!
|
||||
}
|
||||
return ''
|
||||
},
|
||||
|
||||
getSubCatProdsByGas: (state: IProductsState) => (idGasOrdine: string, idCatProd: string): ISubCatProd[] => {
|
||||
let arrcat = state.subcatprods
|
||||
@@ -1267,6 +1287,14 @@ export const useProducts = defineStore('Products', {
|
||||
return authorString
|
||||
},
|
||||
|
||||
getkeyValStr(chiave: string, valore: any) {
|
||||
try {
|
||||
return ` ${chiave} = ${valore} `
|
||||
} catch (e) {
|
||||
return ` ${chiave}`
|
||||
}
|
||||
},
|
||||
|
||||
replaceKeyWordsByProduct(optcatalogo: ICatalogo, myproduct: IProduct, testo: IText) {
|
||||
if (!myproduct || !testo.contenuto) {
|
||||
return testo.contenuto;
|
||||
@@ -1279,14 +1307,24 @@ export const useProducts = defineStore('Products', {
|
||||
const description = myproduct.productInfo.short_descr || '';
|
||||
const long_descr = myproduct.productInfo.description || '';
|
||||
const date_pub = tools.getstrDateShort(myproduct.productInfo.date_pub) || '';
|
||||
const fatLast3M = myproduct.productInfo.fatLast3M! || 0;
|
||||
const vLast3M = myproduct.productInfo.vLast3M! || 0;
|
||||
const vLast6M = myproduct.productInfo.vLast6M! || 0;
|
||||
const ranking_globale = myproduct.productInfo.rank3M! || 0;
|
||||
const ranking = myproduct.indiceRanking! || 0;
|
||||
const venduti = myproduct.productInfo.totVen! || 0;
|
||||
const fatturati = myproduct.productInfo.totFat! || 0;
|
||||
|
||||
const linkvenduti = '<a href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-ordini-by-idarticolo/' + myproduct.productInfo.sku + '" target="_blank">'+venduti+'</a>'
|
||||
const debugstr = " Rank=" + ranking + "<br> Rank3M=" + (myproduct.productInfo.rank3M! || '') + '<br> Venduti=' + linkvenduti + '<br>vLast3M= ' + vLast3M + '<br>vLast6M= ' + vLast6M + ' <br> Data Pubb=' + date_pub
|
||||
const linkvenduti = '<a href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-ordini-by-idarticolo/' + myproduct.productInfo.sku + '" target="_blank">' + venduti + '</a>'
|
||||
const linkfatturati = '<a href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-fatturati-by-idarticolo/' + myproduct.productInfo.sku + '" target="_blank">' + fatturati + '</a>'
|
||||
const debugstr = this.getkeyValStr('Pubblicato il', date_pub) +
|
||||
this.getkeyValStr('Rank', ranking) +
|
||||
this.getkeyValStr('Rank3M', myproduct.productInfo.rank3M) +
|
||||
this.getkeyValStr('Venduti', linkvenduti) +
|
||||
this.getkeyValStr('vLast3M', vLast3M) +
|
||||
this.getkeyValStr('vLast6M', vLast6M) +
|
||||
this.getkeyValStr('Fatturati', linkfatturati) +
|
||||
this.getkeyValStr('fatLast3M', fatLast3M)
|
||||
|
||||
const truncatedDescription = description.length > maxDescriptionLength
|
||||
? description.substring(0, description.lastIndexOf(' ', maxDescriptionLength)) + '...'
|
||||
@@ -1322,6 +1360,9 @@ export const useProducts = defineStore('Products', {
|
||||
|
||||
const prezzo = tools.arrotonda2Dec(myproduct.arrvariazioni![0].price) || ''
|
||||
const prezzo_scontato = tools.arrotonda2Dec(myproduct.arrvariazioni![0].sale_price) || ''
|
||||
const categoria = this.getCatProdsStrByCatProds(myproduct.productInfo.catprods!)
|
||||
const sottocategoria = myproduct.productInfo.subcatprods && myproduct.productInfo.subcatprods.length > 0 ? myproduct.productInfo.subcatprods[0].name! : ''
|
||||
const descr_categoria = myproduct.productInfo.catprods ? this.getCatProdDescrStrByIdCatProd(myproduct.productInfo.catprods![0]) : ''
|
||||
const misure = myproduct.arrvariazioni![0].misure || ''
|
||||
const formato = myproduct.arrvariazioni![0].formato || ''
|
||||
const pagine = myproduct.arrvariazioni![0].pagine || ''
|
||||
@@ -1337,7 +1378,10 @@ export const useProducts = defineStore('Products', {
|
||||
'{descrizione_estesa_fdv}': truncatedlongDescription || '',
|
||||
'{descrizione_estesa}': descrizione_completa_macro || '',
|
||||
'{debug}': (debugstr) || '',
|
||||
'{pagine}': (pagine ) || '',
|
||||
'{categoria}': (categoria) || '',
|
||||
'{sottocategoria}': (sottocategoria) || '',
|
||||
'{descr_categoria}': (descr_categoria) || '',
|
||||
'{pagine}': (pagine) || '',
|
||||
'{misure}': misure || '',
|
||||
'{date_pub}': date_pub || '',
|
||||
'{ranking_globale}': ranking_globale || '',
|
||||
|
||||
@@ -321,7 +321,7 @@ export const useUserStore = defineStore('UserStore', {
|
||||
GroupsListWhereIAmAdminInTheCircuit(circuitname: string): any {
|
||||
try {
|
||||
const arr: any = this.my.profile.manage_mygroups.filter((group: IMyGroup) => (group.mycircuits!.findIndex((circ: IMyCircuit) => circ.circuitname === circuitname) >= 0))
|
||||
console.log('arr', arr)
|
||||
// console.log('arr', arr)
|
||||
return arr
|
||||
} catch (e) {
|
||||
return []
|
||||
|
||||
@@ -1019,7 +1019,9 @@ export const useGlobalStore = defineStore('GlobalStore', {
|
||||
|
||||
await globalroutines('readall', 'config', null)
|
||||
|
||||
if (tools.isLogged()) {
|
||||
this.editOn = tools.getCookie('edn', '0') === '1'
|
||||
}
|
||||
|
||||
return isok
|
||||
},
|
||||
@@ -1727,6 +1729,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
|
||||
this.providers = (res.data.providers) ? [...res.data.providers] : []
|
||||
|
||||
Products.catprods = (res.data.catprods) ? [...res.data.catprods] : []
|
||||
Products.collane = (res.data.collane) ? [...res.data.collane] : []
|
||||
Products.subcatprods = (res.data.subcatprods) ? [...res.data.subcatprods] : []
|
||||
Products.catprods_gas = (res.data.catprods_gas) ? [...res.data.catprods_gas] : []
|
||||
Products.authors = (res.data.authors) ? [...res.data.authors] : []
|
||||
@@ -2303,7 +2306,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
|
||||
excludeproductTypes: [],
|
||||
formato: [],
|
||||
Categoria: [],
|
||||
Editore: [],
|
||||
editore: [],
|
||||
pdf: false,
|
||||
dimensioni_def: {
|
||||
pagina: tools.resetRecIDimensioni(null)
|
||||
|
||||
@@ -66,7 +66,6 @@ export default defineComponent({
|
||||
|
||||
const filter = ref(<IFilterCatalogo>{
|
||||
author: '',
|
||||
sort: 1,
|
||||
publisher: '',
|
||||
type: '',
|
||||
ageGroup: ''
|
||||
@@ -158,7 +157,14 @@ export default defineComponent({
|
||||
}
|
||||
})
|
||||
|
||||
watch(() => filter.value.sort, (newval, oldval) => {
|
||||
watch(() => filter.value.sort_field, (newval, oldval) => {
|
||||
|
||||
calcArrProducts()
|
||||
if (tools.scrollTop() > 300) {
|
||||
tools.scrollToTopValue(300)
|
||||
}
|
||||
})
|
||||
watch(() => filter.value.sort_dir, (newval, oldval) => {
|
||||
|
||||
calcArrProducts()
|
||||
if (tools.scrollTop() > 300) {
|
||||
@@ -203,7 +209,9 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
function calcArrProducts() {
|
||||
console.log('calcArrProducts')
|
||||
// console.log('calcArrProducts')
|
||||
|
||||
let arrargomstr: any = []
|
||||
|
||||
// eventuali titoli specifici estratti dall'array di Prodotti Selezionati
|
||||
//const searchtext = getSearchText()
|
||||
@@ -219,12 +227,19 @@ export default defineComponent({
|
||||
let boolfiltroVuotoProductTypes = (filtroProductTypes.length === 0 || (filtroProductTypes.length === 1 && (filtroProductTypes[0] === 0)))
|
||||
let boolfiltroVuotoExcludeProductTypes = filtroExcludeProductTypes.length === 0
|
||||
|
||||
let filtroPublishers = optcatalogo.value.Editore || []
|
||||
let filtroPublishers = optcatalogo.value.editore || []
|
||||
let boolfiltroVuotoEditore = (filtroPublishers.length === 0)
|
||||
|
||||
//console.log('filtroVersione', filtroProductTypes)
|
||||
|
||||
let catstr = cat.value || ''
|
||||
let catstr = ''
|
||||
|
||||
if (optcatalogo.value.argomenti) {
|
||||
// ha la priorità questo scelto sul catalogo
|
||||
arrargomstr = optcatalogo.value.argomenti
|
||||
} else {
|
||||
catstr = cat.value || ''
|
||||
}
|
||||
|
||||
let gasselstr = ''
|
||||
if (cosa.value === shared_consts.PROD.GAS) {
|
||||
@@ -240,6 +255,12 @@ export default defineComponent({
|
||||
if (product && product.productInfo) {
|
||||
let lowerName = (product.productInfo.name || '').toLowerCase();
|
||||
let hasCategoria = !catstr || (catstr && (product.productInfo.idCatProds || []).includes(catstr));
|
||||
let hasArgomentiCat = true
|
||||
if (arrargomstr && arrargomstr.length > 0) {
|
||||
hasArgomentiCat = (product.productInfo.idCatProds || []).some(idCat => arrargomstr.includes(idCat))
|
||||
hasCategoria = true
|
||||
}
|
||||
|
||||
let hasAuthor = !filtroAuthor || (filtroAuthor && (product.productInfo.idAuthors || []).includes(filtroAuthor));
|
||||
|
||||
let hasProductTypes = true
|
||||
@@ -253,7 +274,7 @@ export default defineComponent({
|
||||
hasProductTypes = !optcatalogo.value.productTypes || (optcatalogo.value.productTypes && (product.productInfo.productTypes || []).some((item: any) => optcatalogo.value.productTypes!.includes(item)))
|
||||
}
|
||||
if (optcatalogo.value && !boolfiltroVuotoEditore) {
|
||||
hasPublished = !optcatalogo.value.Editore || (optcatalogo.value.Editore && optcatalogo.value.Editore.includes(product.productInfo.idPublisher!))
|
||||
hasPublished = !optcatalogo.value.editore || (optcatalogo.value.editore && optcatalogo.value.editore.includes(product.productInfo.idPublisher!))
|
||||
}
|
||||
|
||||
if (optcatalogo.value && !boolfiltroVuotoExcludeProductTypes) {
|
||||
@@ -273,7 +294,7 @@ export default defineComponent({
|
||||
// Check if all words in lowerSearchText are present in lowerName
|
||||
let allWordsPresent = lowerSearchText.split(/\s+/).every(word => new RegExp(`\\b${word}\\b`, 'i').test(lowerName));
|
||||
|
||||
return (codeMatch.test(product.productInfo.code || '') || allWordsPresent) && hasCategoria && hasAuthor && productgassel && hasProductTypes && hasPublished && !hasExcludeProductTypes;
|
||||
return (codeMatch.test(product.productInfo.code || '') || allWordsPresent) && hasCategoria && hasArgomentiCat && hasAuthor && productgassel && hasProductTypes && hasPublished && !hasExcludeProductTypes;
|
||||
} else {
|
||||
console.error('product or product.productInfo is null');
|
||||
return false;
|
||||
@@ -281,7 +302,7 @@ export default defineComponent({
|
||||
});
|
||||
}
|
||||
|
||||
arrprod = getProductsSorted(arrprod, filter.value.sort);
|
||||
arrprod = getProductsSorted(arrprod, filter.value.sort_field, filter.value.sort_dir);
|
||||
|
||||
arrProducts.value = arrprod
|
||||
|
||||
@@ -346,6 +367,8 @@ export default defineComponent({
|
||||
|
||||
const searchtext = scheda.arrProdottiSpeciali
|
||||
|
||||
let arrargomstr: any = []
|
||||
|
||||
let arrprod = productStore.getProducts(cosa.value) || [];
|
||||
let filtroAuthor = filter.value.author || '';
|
||||
|
||||
@@ -359,7 +382,14 @@ export default defineComponent({
|
||||
|
||||
//console.log('filtroVersione', filtroProductTypes)
|
||||
|
||||
let catstr = cat.value || ''
|
||||
let catstr = ''
|
||||
|
||||
if (optcatalogo.value.argomenti) {
|
||||
// ha la priorità questo scelto sul catalogo
|
||||
arrargomstr = optcatalogo.value.argomenti
|
||||
} else {
|
||||
catstr = cat.value || ''
|
||||
}
|
||||
|
||||
let gasselstr = ''
|
||||
if (cosa.value === shared_consts.PROD.GAS) {
|
||||
@@ -376,6 +406,12 @@ export default defineComponent({
|
||||
let lowerCode = (product.productInfo.code || '').toLowerCase();
|
||||
|
||||
let hasCategoria = !catstr || (catstr && (product.productInfo.idCatProds || []).includes(catstr));
|
||||
let hasArgomentiCat = true
|
||||
if (arrargomstr && arrargomstr.length > 0) {
|
||||
hasArgomentiCat = (product.productInfo.idCatProds || []).some(idCat => arrargomstr.includes(idCat))
|
||||
hasCategoria = true
|
||||
}
|
||||
|
||||
let hasAuthor = !filtroAuthor || (filtroAuthor && (product.productInfo.idAuthors || []).includes(filtroAuthor));
|
||||
|
||||
// Check if ANY search term matches the product name or code
|
||||
@@ -408,47 +444,49 @@ export default defineComponent({
|
||||
hasExcludeProductTypes = !scheda.excludeproductTypes || (scheda.excludeproductTypes && (product.productInfo.productTypes || []).every((item: any) => scheda.excludeproductTypes!.includes(item)))
|
||||
}
|
||||
|
||||
return searchMatch && hasCategoria && hasAuthor && hasProductTypes && hasPublished && !hasExcludeProductTypes;
|
||||
return searchMatch && hasCategoria && hasArgomentiCat && hasAuthor && hasProductTypes && hasPublished && !hasExcludeProductTypes;
|
||||
} else {
|
||||
console.error('product or product.productInfo is null');
|
||||
return false;
|
||||
}
|
||||
})
|
||||
|
||||
arrprod = getProductsSorted(arrprod, scheda?.sort!);
|
||||
arrprod = getProductsSorted(arrprod, scheda?.sort_field!, scheda?.sort_dir!);
|
||||
|
||||
return arrprod
|
||||
|
||||
}
|
||||
|
||||
function getProductsSorted(arrprod: IProduct[], sort: number) {
|
||||
// console.log('getProductsSorted', sort)
|
||||
if (sort === costanti.SORT_PUBDATE) {
|
||||
function getProductsSorted(arrprod: IProduct[], sort_field: string, sort_dir: number): IProduct[] {
|
||||
if (sort_field) {
|
||||
// Crea una copia dell'array per non modificare l'originale
|
||||
const sortedArr = [...arrprod].sort((a: IProduct, b: IProduct) => {
|
||||
const valA = a.productInfo?.[sort_field];
|
||||
const valB = b.productInfo?.[sort_field];
|
||||
|
||||
arrprod = arrprod.sort((a: IProduct, b: IProduct) => {
|
||||
return b.productInfo.date_pub_ts - a.productInfo.date_pub_ts
|
||||
})
|
||||
} else if (sort === costanti.SORT_BESTSELLER) {
|
||||
if (valA === undefined || valB === undefined) {
|
||||
return 0; // Gestisce il caso in cui il campo non esiste
|
||||
}
|
||||
|
||||
arrprod = arrprod.sort((a: IProduct, b: IProduct) => {
|
||||
return b.productInfo.vLast6M! - a.productInfo.vLast6M!
|
||||
})
|
||||
if (typeof valA === 'number' && typeof valB === 'number') {
|
||||
return sort_dir === 1 ? valA - valB : valB - valA;
|
||||
} else {
|
||||
// Per stringhe o altri tipi
|
||||
const compA = valA.toString().toLowerCase();
|
||||
const compB = valB.toString().toLowerCase();
|
||||
return sort_dir === 1
|
||||
? compA.localeCompare(compB)
|
||||
: compB.localeCompare(compA);
|
||||
}
|
||||
});
|
||||
|
||||
arrprod = arrprod.map((product, index) => {
|
||||
return {
|
||||
return sortedArr.map((product, index) => ({
|
||||
...product,
|
||||
indiceRanking: index + 1
|
||||
};
|
||||
})
|
||||
|
||||
console.log('arr', arrprod)
|
||||
|
||||
} else if (sort === costanti.SORT_DEFAULT) {
|
||||
|
||||
}));
|
||||
}
|
||||
|
||||
return arrprod
|
||||
|
||||
return arrprod;
|
||||
}
|
||||
|
||||
function addNextProductToTheView(arrproductfiltrati: IProduct[], indprod: number) {
|
||||
@@ -518,8 +556,8 @@ export default defineComponent({
|
||||
arrProdFiltrati = getProductsFilteredByScheda(recscheda.scheda)
|
||||
indprod = 0
|
||||
} else {
|
||||
if (recscheda.scheda?.sort! > 0) {
|
||||
arrProdFiltrati = getProductsSorted(arrGeneraleProdotti, recscheda.scheda.sort!);
|
||||
if (recscheda.scheda?.sort_field!) {
|
||||
arrProdFiltrati = getProductsSorted(arrGeneraleProdotti, recscheda.scheda.sort_field!, recscheda.scheda.sort_dir!);
|
||||
indprod = 0
|
||||
} else {
|
||||
indprod = indprodGenerale
|
||||
@@ -577,7 +615,7 @@ export default defineComponent({
|
||||
}
|
||||
}
|
||||
|
||||
console.log('Fine...')
|
||||
// console.log('Fine...')
|
||||
}
|
||||
|
||||
function getNextProd() {
|
||||
@@ -610,7 +648,7 @@ export default defineComponent({
|
||||
}*/
|
||||
|
||||
async function mounted() {
|
||||
console.log('mounted Catalogo')
|
||||
// console.log('mounted Catalogo')
|
||||
loadpage.value = false
|
||||
await productStore.loadProducts()
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
<!--<q-select
|
||||
v-model="filter.publisher"
|
||||
:options="publishers"
|
||||
label="Editore"
|
||||
label="editore"
|
||||
placeholder="Tutti"
|
||||
dense
|
||||
/>
|
||||
@@ -159,9 +159,9 @@
|
||||
|
||||
<div class="row justify-center q-mx-auto">
|
||||
<q-select
|
||||
v-model="filter.sort"
|
||||
v-model="filter.sort_field"
|
||||
dense
|
||||
:options="shared_consts.ORDINAMENTO_CATALOGHI"
|
||||
:options="shared_consts.ORDINAMENTO_CATALOGHI_PUBBLICO"
|
||||
label="Ordinamento"
|
||||
placeholder=""
|
||||
emit-value
|
||||
@@ -169,6 +169,17 @@
|
||||
filled
|
||||
rounded
|
||||
></q-select>
|
||||
<q-select
|
||||
v-model="filter.sort_dir"
|
||||
dense
|
||||
:options="shared_consts.ORDINAMENTO_DIREZIONE"
|
||||
label="Direzione"
|
||||
placeholder=""
|
||||
emit-value
|
||||
map-options
|
||||
filled
|
||||
rounded
|
||||
></q-select>
|
||||
</div>
|
||||
|
||||
<div class="text-center q-py-sm prod_trov">
|
||||
@@ -479,17 +490,22 @@
|
||||
|
||||
2. Eseguire "IMPORTA DESCRIZIONI E LINK DA SITO GRUPPOMACRO (XML)" - importa_descrizioni_e_link.xml
|
||||
|
||||
3. Visualizza <a
|
||||
3. Visualizza
|
||||
<a
|
||||
href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-articles-fatturati"
|
||||
target="_blank"
|
||||
>Ranking</a> -
|
||||
<a
|
||||
href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-articles-sales"
|
||||
target="_blank"
|
||||
>Ranking</a
|
||||
> e controlla se tutto ok
|
||||
>(Ranking Ordini)</a>
|
||||
e controlla se tutto ok
|
||||
|
||||
4. Esporta il file del Ranking ed importarlo con "IMPORTA RANKING DA JSON"
|
||||
<a
|
||||
href="http://vps-88271abb.vps.ovh.net/apimacro/public/export-articles-sales-json"
|
||||
target="_blank"
|
||||
>Esporta Ranking</a
|
||||
>(Esporta Ranking Venduti e Fatturati)</a
|
||||
>
|
||||
|
||||
5. Scarica Catalogo (<a
|
||||
@@ -516,12 +532,6 @@
|
||||
>Struttura Campi GM</a
|
||||
>
|
||||
|
||||
<a
|
||||
href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-articles-sales"
|
||||
target="_blank"
|
||||
>Visualizza Descrizioni</a
|
||||
>
|
||||
|
||||
<a
|
||||
href="https://www.fioredellavita.it/wp-admin/admin.php?page=webappick-manage-feeds"
|
||||
target="_blank"
|
||||
|
||||
@@ -115,6 +115,13 @@ export default defineComponent({
|
||||
}
|
||||
})
|
||||
|
||||
function getParamCircuitsToView() {
|
||||
return {
|
||||
'circuit.name': 1,
|
||||
'circuit._id': 1,
|
||||
}
|
||||
}
|
||||
|
||||
function loadAccount() {
|
||||
// console.log('loadAccount')
|
||||
account.value = circuit.value ? userStore.getAccountByCircuitId(circuit.value._id) : null
|
||||
@@ -148,6 +155,10 @@ export default defineComponent({
|
||||
notifStore.setAsRead(idnotif.value)
|
||||
users_in_circuit.value = data.users_in_circuit
|
||||
circuit.value = data.circuit
|
||||
|
||||
if (circuit.value!.circuitoIndipendente) {
|
||||
showrules.value = true
|
||||
}
|
||||
} else {
|
||||
circuit.value = null
|
||||
users_in_circuit.value = []
|
||||
@@ -204,7 +215,9 @@ export default defineComponent({
|
||||
name: 1,
|
||||
surname: 1,
|
||||
date_reg: 1,
|
||||
profile: 1, idapp: 1, 'circuit.name': 1, 'circuit._id': 1
|
||||
profile: 1,
|
||||
idapp: 1,
|
||||
...getParamCircuitsToView(),
|
||||
}
|
||||
|
||||
},
|
||||
@@ -279,7 +292,7 @@ export default defineComponent({
|
||||
verified_by_aportador: 1,
|
||||
admins: 1,
|
||||
idapp: 1,
|
||||
'circuit.name': 1, 'circuit._id': 1
|
||||
...getParamCircuitsToView(),
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -43,17 +43,19 @@
|
||||
</q-toolbar-title>
|
||||
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
|
||||
</q-toolbar>
|
||||
<q-card-section class="inset-shadow">
|
||||
<q-card-section v-if="circuit.symbol === 'RIS'" class="inset-shadow">
|
||||
<div v-html="t('circuit.disclaimer')"></div>
|
||||
</q-card-section>
|
||||
<q-card-section class="inset-shadow">
|
||||
<div style="font-weight: bold; font-size: 1.25rem">
|
||||
Regolamento:
|
||||
{{ t('circuit.regulation') }} {{ circuit.name }}
|
||||
</div>
|
||||
<q-btn
|
||||
v-if="!showrules"
|
||||
label="vedi Regolamento"
|
||||
@click="showrules = !showrules"
|
||||
></q-btn>
|
||||
<br />
|
||||
<div
|
||||
v-if="showrules && circuit"
|
||||
v-html="getRegulation(circuit.regulation)"
|
||||
@@ -72,7 +74,7 @@
|
||||
userStore.my.username,
|
||||
circuit.name,
|
||||
true,
|
||||
groupnameSel ? groupnameSel.groupname : ''
|
||||
groupnameSel ? groupnameSel.groupname : '',
|
||||
);
|
||||
"
|
||||
/>
|
||||
@@ -113,11 +115,12 @@
|
||||
v-close-popup
|
||||
v-if="true"
|
||||
@click="
|
||||
saldo !== 0
|
||||
saldo < 0
|
||||
? tools.showNegativeNotif(
|
||||
$q,
|
||||
t(
|
||||
'circuit.per_uscire_dal_circuito_occorre_essere_a_zero'
|
||||
'circuit.per_uscire_dal_circuito_occorre_essere_a_zero',
|
||||
{ symbol: circuit.symbol }
|
||||
),
|
||||
30000
|
||||
)
|
||||
@@ -179,7 +182,7 @@
|
||||
to="/circuits"
|
||||
round
|
||||
icon="fas fa-arrow-circle-left"
|
||||
style="position: absolute;"
|
||||
style="position: absolute"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
@@ -215,7 +218,7 @@
|
||||
rounded
|
||||
dense
|
||||
color="green"
|
||||
style="height: 40px;"
|
||||
style="height: 40px"
|
||||
icon="fas fa-redo"
|
||||
class="q-mx-sm"
|
||||
@click="aggiornaSaldo()"
|
||||
@@ -336,7 +339,7 @@
|
||||
v-if="userStore.IsMyCircuitByName(circuit.name)"
|
||||
:label="t('circuit.movements_made')"
|
||||
@click="showMov = !showMov"
|
||||
icon="img: images/1ris_rosso_100.png"
|
||||
:icon="tools.getSymbolByCircuit(circuit) === 'RIS' ? 'img: images/1ris_rosso_100.png' : undefined"
|
||||
rounded
|
||||
color="primary"
|
||||
></q-btn>
|
||||
@@ -394,6 +397,7 @@
|
||||
v-if="
|
||||
userStore.my.profile &&
|
||||
userStore.my.profile.calc &&
|
||||
!circuit.circuitoIndipendente &&
|
||||
userStore.my.profile.calc.numGoodsAndServices <= 0 &&
|
||||
globalStore.site.confpages.showRIS &&
|
||||
userStore.IsMyCircuitByName(circuit.name)
|
||||
@@ -414,6 +418,7 @@
|
||||
<q-banner
|
||||
v-else-if="
|
||||
globalStore.site.confpages.showRIS &&
|
||||
!circuit.circuitoIndipendente &&
|
||||
userStore.my.profile.calc &&
|
||||
userStore.my.profile.calc.numGoodsAndServices <= 0
|
||||
"
|
||||
@@ -442,14 +447,22 @@
|
||||
!userStore.IsMyCircuitByName(circuit.name) &&
|
||||
!userStore.IsAskedCircuitByName(circuit.name) &&
|
||||
!userStore.IsRefusedCircuitByName(circuit.name) &&
|
||||
(!circuitStore.isCircuitNational(circuit.name) ||
|
||||
(circuit.circuitoIndipendente ||
|
||||
!circuitStore.isCircuitNational(circuit.name) ||
|
||||
(circuitStore.isCircuitNational(circuit.name) &&
|
||||
circuitStore.SonoDentroAdAlmeno1CircuitoConFido()))
|
||||
"
|
||||
:disable="circuitStore.IsNationalAndNotEnterInLocal(circuit.name)"
|
||||
:disable="
|
||||
!circuit.circuitoIndipendente &&
|
||||
circuitStore.IsNationalAndNotEnterInLocal(circuit.name)
|
||||
"
|
||||
icon="fas fa-user-plus"
|
||||
color="primary"
|
||||
:label="$t('circuit.ask')"
|
||||
:label="
|
||||
circuit.askManagerToEnter
|
||||
? $t('circuit.ask')
|
||||
: $t('circuit.enter')
|
||||
"
|
||||
@click="
|
||||
requestToEnterCircuit = true;
|
||||
groupnameSel = null;
|
||||
@@ -740,7 +753,7 @@
|
||||
<q-separator />
|
||||
|
||||
<q-card-section>
|
||||
<div class="text-h8 q-mb-sm">
|
||||
<div v-if="tools.getSymbolByCircuit(circuit) === 'RIS'" class="text-h8 q-mb-sm">
|
||||
<div v-html="$t('circuit.aggiuntive')"></div>
|
||||
</div>
|
||||
<q-card-section>
|
||||
@@ -838,6 +851,7 @@
|
||||
<div :class="$q.screen.lt.sm ? '' : 'row'">
|
||||
<div class="sezioni">
|
||||
<CCurrencyValue
|
||||
v-if="!circuit.ignoreLimits"
|
||||
:symbol="tools.getSymbolByCircuit(circuit)"
|
||||
:color="tools.getColorByCircuit(circuit)"
|
||||
color_border="red"
|
||||
@@ -849,6 +863,7 @@
|
||||
</div>
|
||||
<div class="sezioni">
|
||||
<CCurrencyValue
|
||||
v-if="!circuit.ignoreLimits"
|
||||
:symbol="tools.getSymbolByCircuit(circuit)"
|
||||
:color="tools.getColorByCircuit(circuit)"
|
||||
color_border="green"
|
||||
@@ -857,6 +872,16 @@
|
||||
:label="t('circuit.qta_max_default')"
|
||||
:tips="t('circuit.qta_max_default_tips')"
|
||||
></CCurrencyValue>
|
||||
<CCurrencyValue
|
||||
v-if="circuit.creditodiPartenza > 0"
|
||||
:symbol="tools.getSymbolByCircuit(circuit)"
|
||||
:color="tools.getColorByCircuit(circuit)"
|
||||
color_border="blue"
|
||||
v-model="circuit.creditodiPartenza"
|
||||
icon="fas fa-battery-quarter"
|
||||
:label="t('circuit.creditodiPartenza')"
|
||||
:tips="t('circuit.creditodiPartenza_tips')"
|
||||
></CCurrencyValue>
|
||||
</div>
|
||||
<!--<div v-if="circuit.qta_max_default_grp" class="sezioni">
|
||||
<CCurrencyValue
|
||||
@@ -884,7 +909,7 @@
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
<div class="sezioni">
|
||||
<div v-if="circuit.totTransato" class="sezioni">
|
||||
<q-icon name="fas fa-stats" class="iconcirc"></q-icon>
|
||||
{{ t('circuit.stats') }}:
|
||||
<br />
|
||||
@@ -949,13 +974,14 @@
|
||||
|
||||
<q-card v-if="circuit.name">
|
||||
<q-card-section>
|
||||
<div class="text-h8">{{ t('circuit.regulation') }}:</div>
|
||||
<div class="text-h8">{{ t('circuit.regulation') }} {{ circuit.name }}: </div>
|
||||
</q-card-section>
|
||||
<q-separator />
|
||||
|
||||
<q-card-section>
|
||||
<div class="centermydiv">
|
||||
<q-btn
|
||||
v-if="!showrules"
|
||||
label="vedi Regolamento"
|
||||
@click="showrules = !showrules"
|
||||
></q-btn>
|
||||
|
||||
@@ -25,6 +25,8 @@ export default defineComponent({
|
||||
|
||||
const filter = ref(costanti.MY_CIRCUITS)
|
||||
|
||||
const ind = ref(0)
|
||||
|
||||
const isfinishLoading = computed(() => globalStore.finishLoading)
|
||||
|
||||
function mounted() {
|
||||
@@ -32,6 +34,9 @@ export default defineComponent({
|
||||
if (userStore.my.profile.mycircuits.length <= 0) {
|
||||
filter.value = costanti.FIND_CIRCUIT
|
||||
}
|
||||
|
||||
ind.value = tools.getIndMainCardsByTable(shared_consts.TABLES_CIRCUITS)
|
||||
|
||||
// const filt_loaded = tools.getCookie(tools.COOK_SEARCH + tools.CIRCUIT_SEARCH, costanti.FIND_CIRCUIT, true)
|
||||
// console.log('filt_loaded', filt_loaded)
|
||||
// filter.value = filt_loaded ? filt_loaded : costanti.FIND_CIRCUIT
|
||||
@@ -51,6 +56,7 @@ export default defineComponent({
|
||||
toolsext,
|
||||
isfinishLoading,
|
||||
tools,
|
||||
ind,
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -5,11 +5,12 @@
|
||||
|
||||
<CMyCircuits v-model="filter" :finder="true" :showfinder="true" :showBarSelection="true">
|
||||
<CFinder
|
||||
:ind="tools.getIndMainCardsByTable(shared_consts.TABLES_CIRCUITS)"
|
||||
:ind="ind"
|
||||
:table="shared_consts.TABLES_CIRCUITS"
|
||||
:noButtAdd="!tools.isManager()"
|
||||
:showFilterPersonal="true"
|
||||
:showBarSelection="false"
|
||||
:labelBtnAddExtra="(ind >= 0 && tools.isManager()) ? `Aggiungi ` + costanti.MAINCARDS[ind].strsingolo : ''"
|
||||
/>
|
||||
</CMyCircuits>
|
||||
</div>
|
||||
|
||||