Files
myprojplanet_vite/src/components/CProductCard/CProductCard.vue
2023-12-28 21:00:10 +01:00

421 lines
14 KiB
Vue
Executable File

<template>
<div class="row items-start q-gutter-md">
<q-spinner v-if="!endload" color="primary" size="3em" :thickness="2" />
<q-card
:class="getmycardcl()"
v-if="!!myproduct && endload && !!myproduct.productInfo"
bordered
>
<q-img
:src="`` + myproduct.productInfo.img"
:alt="myproduct.productInfo.name"
:class="getclimgproduct()"
></q-img>
<q-list>
<q-item>
<q-btn
v-if="!complete"
fab
color="primary"
icon="fas fa-info"
class="absolute semi-transparent"
style="top: 0; right: 12px; transform: translateY(-50%)"
:to="`/product/` + myproduct._id + '/' + cosa"
/>
<div class="row items-center centeritems">
<div class="text-h7 boldhigh">
{{ myproduct.productInfo.name }}
</div>
<div class="product_code">
&nbsp; {{ t('ecomm.codice') }}: {{ myproduct.productInfo.code }}
</div>
</div>
</q-item>
<q-item v-if="complete && myproduct.productInfo.description">
<div class="row items-center">
<div class="text-title text-grey-9">
<span
class="text-grey-7"
v-html="myproduct.productInfo.description"
></span>
</div>
</div>
</q-item>
<q-item>
<q-item-section avatar>
<q-icon color="moneygreen" name="fas fa-euro-sign" />
</q-item-section>
<q-item-section>
<q-item-label>
{{ t('products.price') }}
</q-item-label>
<q-item-label>
<span class="prod_price" v-if="!!myproduct.price">{{
myproduct.price ? myproduct.price.toFixed(2) : 0
}}</span>
<span v-if="!!myproduct.after_price">{{
myproduct.after_price
}}</span>
</q-item-label>
<q-item-label
v-if="myproduct.scontisticas && myproduct.scontisticas.length > 0"
>
<div
class="prod_sconti"
v-for="(sconti, index) of myproduct.scontisticas"
:key="index"
>
{{ sconti.description }}
</div>
</q-item-label>
</q-item-section>
<q-item-section avatar v-if="myproduct.productInfo.weight">
<q-icon
name="fas fa-balance-scale"
style="padding-right: 16px !important"
/>
</q-item-section>
<q-item-section v-if="myproduct.productInfo.weight">
<q-item-label>
{{ t('products.weight') }}
</q-item-label>
<q-item-label>
<span
class="text-black q-ml-xs text-h8"
v-if="myproduct.productInfo.unit"
>
{{ myproduct.productInfo.weight }}
{{
tools.getUnitsMeasure(myproduct.productInfo.unit, true)
}}</span
>
</q-item-label>
</q-item-section>
</q-item>
<q-item v-if="myproduct.gasordines && myproduct.gasordines.length >= 1">
<q-item-section avatar>
<q-icon color="blue" name="fas fa-shipping-fast" />
</q-item-section>
<q-item-section>
<q-item-label>
{{ t('products.gasordine') }}
</q-item-label>
<q-item-label
v-if="
tools.isArray(myproduct.gasordines) &&
myproduct.gasordines.length > 1 &&
(!myorder.idGasordine ||
myorder.quantity + myorder.quantitypreordered === 0)
"
>
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
outlined
v-model="gasordineSelected"
:options="getGasordines()"
:label="t('products.select_gasordine') + `:`"
emit-value
map-options
>
</q-select>
</q-item-label>
<q-item-label v-else>
<span class="text-title text-center">{{
getSingleGasordine(myproduct.gasordines[0])
}}</span>
</q-item-label>
</q-item-section>
</q-item>
<q-item v-if="myproduct.gasordines && myproduct.gasordines.length >= 1">
<q-item-section avatar>
<q-icon color="blue" name="fas fa-hourglass-half" />
</q-item-section>
<q-item-section>
<q-item-label>
{{ t('gas.dataora_chiusura_ordini') }}
</q-item-label>
<q-item-label class="countdown_scadenza">
{{ timerLabelScadenza }}
</q-item-label>
</q-item-section>
</q-item>
</q-list>
<div v-if="true">
<div v-if="complete && myproduct.producer && myproduct.producer.city">
<div class="text-grey text-title row items-center q-mt-sm">
<q-icon name="map" class="q-mr-xs" />
{{ t('products.origine') }}:
<span class="text-blue q-ml-xs text-h8">
{{ myproduct.producer.city }} ({{
myproduct.producer.region
}})</span
>
</div>
</div>
<div
v-if="complete && myproduct.producer && myproduct.producer.name"
class="text-grey text-title row items-center"
>
<q-icon name="place" class="q-mr-xs" />
{{ t('products.producer') }}:
<span class="text-black q-ml-xs text-h8">
{{ myproduct.producer.name }}</span
>
</div>
</div>
<!--<q-rating v-model="myproduct.stars" :max="5" size="32px" readonly/>-->
<div>
<q-list>
<q-item
v-if="
cosa === shared_consts.PROD.BOTTEGA ||
(cosa === shared_consts.PROD.GAS && products.getQtyAvailable(myproduct) > 0)
"
:clickable="tools.isManager()"
@click="tools.isManager() && (myproduct.QuantitaOrdinateInAttesa && myproduct.QuantitaOrdinateInAttesa > 0) ? visuListDisponibili() : null"
>
<q-item-section avatar>
<q-icon color="green" name="fas fa-store" />
</q-item-section>
<q-item-section>
<q-item-label>
{{ t('ecomm.available') }}
</q-item-label>
<q-item-label>
<span class="prod_disp">
{{ products.getQtyAvailable(myproduct) }}
</span>
<div class="prod_qtywarn">
<div
v-if="
tools.isManager() && !!myproduct.QuantitaOrdinateInAttesa
"
>
{{
t('ecomm.qta_in_attesa', {
qty: myproduct.QuantitaOrdinateInAttesa,
})
}}
</div>
</div>
</q-item-label>
<q-item-label> </q-item-label>
</q-item-section>
</q-item>
<q-item
v-if="products.getQtyBookableAvailable(myproduct) > 0 || myproduct.bookableQty > 0"
:clickable="tools.isManager()"
@click="tools.isManager() && (myproduct.QuantitaPrenotateInAttesa && myproduct.QuantitaPrenotateInAttesa > 0) ? visuListBookable() : null"
>
<q-item-section avatar>
<q-icon color="blue" name="fas fa-edit" />
</q-item-section>
<q-item-section>
<q-item-label>
{{ t('ecomm.preorders') }}
</q-item-label>
<q-item-label>
<span class="prod_preorder">
{{ products.getQtyBookableAvailable(myproduct) }}
</span>
<div class="prod_qtywarn">
<div
v-if="
tools.isManager() && !!myproduct.QuantitaPrenotateInAttesa
"
>
{{
t('ecomm.qta_prenotate_in_attesa', {
qty: myproduct.QuantitaPrenotateInAttesa,
})
}}
</div>
</div>
</q-item-label>
</q-item-section>
</q-item>
</q-list>
<div v-if="complete || getnumstore() > 1">
<div
class="text-blue text-title row items-center q-mr-md centeritems"
>
<q-icon size="sm" name="fas fa-shipping-fast" class="q-mr-sm" />
{{ t('products.ritiro_presso') }}:
</div>
<div
class="text-green-6 text-title row items-center q-my-sm centeritems"
>
<div v-if="getnumstore() > 1">
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
outlined
v-model="storeSelected"
:options="getStorehouses()"
:label="t('products.magazzino') + `:`"
emit-value
map-options
>
</q-select>
</div>
<div v-else>
<span class="text-title text-center">{{
getSingleStorehouse()
}}</span>
</div>
</div>
</div>
<div class="row q-mb-sm no-wrap items-center centeritems">
<q-btn
icon="fas fa-cart-arrow-down"
:color="products.enableSubQty(myorder) ? 'negative' : 'grey'"
:disable="checkifCartDisable() || !products.enableSubQty(myorder)"
rounded
size="md"
:label="t('products.subcart', { qta: products.qtaNextSub(myorder, myproduct) })"
@click="addtoCart(false)"
>
</q-btn>
<q-field
outlined
dense
class="q-mx-xs"
>
<template v-slot:control>
<div class="no-outline label-qta text-center" tabindex="0">
{{ myorder.quantity + myorder.quantitypreordered }}
</div>
</template>
</q-field>
<q-btn
icon-right="fas fa-cart-plus"
color="positive"
:disable="checkifCartDisable() || !products.enableAddQty(myorder, myproduct)"
rounded
size="md"
:label="t('products.addcart', { qta: products.qtaNextAdd(myorder, myproduct) })"
@click="addtoCart(true)"
>
</q-btn>
</div>
<q-card-actions vertical align="center">
<q-btn
v-if="myorder.quantity + myorder.quantitypreordered > 0"
rounded
icon="fas fa-shopping-cart"
color="primary"
:label="t('ecomm.btn_cassa')"
class="q-mb-sm"
to="/checkout"
></q-btn>
<!--
<q-btn :icon="iconWhishlist(myproduct)" flat color="primary" rounded label="Lista Desideri">
</q-btn>
-->
</q-card-actions>
</div>
</q-card>
<q-dialog v-model="openlistorders">
<q-card class="dialog_card">
<q-toolbar class="bg-primary text-white">
<q-toolbar-title>
{{ t('ecomm.listaord') }} - {{ myproduct.productInfo.name }}
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar>
<q-card-section class="q-pa-xs inset-shadow">
<q-markup-table
wrap-cells
bordered
separator="horizontal"
class="listaev__table"
>
<thead>
<th>Data</th>
<th>Persona</th>
<th>Stato</th>
<th>Quantita</th>
<th>Note</th>
</thead>
<tbody>
<tr
v-for="(ordcart, index) of listord"
:key="index"
class="listaev listaev__table"
>
<td class="text-center">
<div>
{{ func_tools.getDateTimeShortStr(ordcart.created_at) }}
</div>
</td>
<td class="text-center">
<strong
>{{ ordcart.user.name }} {{ ordcart.user.surname }}</strong
>
</td>
<td class="text-center">
<strong>{{
shared_consts.getStatusStr(ordcart.status)
}}</strong>
</td>
<td class="text-center">
<div v-for="(singleord, index) in ordcart.items" :key="index">
<span
v-if="
singleord.order.idProduct === myproduct._id &&
singleord.order.quantity > 0
"
>
{{ singleord.order.quantity }}</span
>
<span
v-if="
singleord.order.idProduct === myproduct._id &&
singleord.order.quantitypreordered > 0
"
>
{{ singleord.order.quantitypreordered }}</span
>
</div>
</td>
<td class="text-center">
{{ ordcart.note }}
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td class="text-center">
Totali:
<span class="totali">{{ sumval }}</span>
</td>
<td>&nbsp;</td>
</tr>
</tbody>
</q-markup-table>
</q-card-section>
</q-card>
</q-dialog>
</div>
</template>
<script lang="ts" src="./CProductCard.ts">
</script>
<style lang="scss" scoped>
@import './CProductCard.scss';
</style>