|
|
|
|
|
|
|
|
<?php |
|
|
<?php |
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
Copyright distrib (2018) |
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
Copyright distrib (2018) |
|
|
|
|
|
|
|
|
contact@opendistrib.net |
|
|
contact@opendistrib.net |
|
|
|
|
|
|
|
|
Ce logiciel est un programme informatique servant à aider les producteurs |
|
|
|
|
|
à distribuer leur production en circuits courts. |
|
|
|
|
|
|
|
|
Ce logiciel est un programme informatique servant à aider les producteurs |
|
|
|
|
|
à distribuer leur production en circuits courts. |
|
|
|
|
|
|
|
|
Ce logiciel est régi par la licence CeCILL soumise au droit français et |
|
|
Ce logiciel est régi par la licence CeCILL soumise au droit français et |
|
|
respectant les principes de diffusion des logiciels libres. Vous pouvez |
|
|
respectant les principes de diffusion des logiciels libres. Vous pouvez |
|
|
utiliser, modifier et/ou redistribuer ce programme sous les conditions |
|
|
utiliser, modifier et/ou redistribuer ce programme sous les conditions |
|
|
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA |
|
|
|
|
|
|
|
|
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA |
|
|
sur le site "http://www.cecill.info". |
|
|
sur le site "http://www.cecill.info". |
|
|
|
|
|
|
|
|
En contrepartie de l'accessibilité au code source et des droits de copie, |
|
|
En contrepartie de l'accessibilité au code source et des droits de copie, |
|
|
de modification et de redistribution accordés par cette licence, il n'est |
|
|
de modification et de redistribution accordés par cette licence, il n'est |
|
|
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, |
|
|
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, |
|
|
seule une responsabilité restreinte pèse sur l'auteur du programme, le |
|
|
seule une responsabilité restreinte pèse sur l'auteur du programme, le |
|
|
titulaire des de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA |
|
|
|
|
|
|
|
|
titulaire des de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA |
|
|
droits patrimoniaux et les concédants successifs. |
|
|
droits patrimoniaux et les concédants successifs. |
|
|
|
|
|
|
|
|
A cet égard l'attention de l'utilisateur est attirée sur les risques |
|
|
A cet égard l'attention de l'utilisateur est attirée sur les risques |
|
|
associés au chargement, à l'utilisation, à la modification et/ou au |
|
|
associés au chargement, à l'utilisation, à la modification et/ou au |
|
|
développement et à la reproduction du logiciel par l'utilisateur étant |
|
|
|
|
|
donné sa spécificité de logiciel libre, qui peut le rendre complexe à |
|
|
|
|
|
|
|
|
développement et à la reproduction du logiciel par l'utilisateur étant |
|
|
|
|
|
donné sa spécificité de logiciel libre, qui peut le rendre complexe à |
|
|
manipuler et qui le réserve donc à des développeurs et des professionnels |
|
|
manipuler et qui le réserve donc à des développeurs et des professionnels |
|
|
avertis possédant des connaissances informatiques approfondies. Les |
|
|
avertis possédant des connaissances informatiques approfondies. Les |
|
|
utilisateurs sont donc invités à charger et tester l'adéquation du |
|
|
utilisateurs sont donc invités à charger et tester l'adéquation du |
|
|
logiciel à leurs besoins dans des conditions permettant d'assurer la |
|
|
logiciel à leurs besoins dans des conditions permettant d'assurer la |
|
|
sécurité de leurs systèmes et ou de leurs données et, plus généralement, |
|
|
|
|
|
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. |
|
|
|
|
|
|
|
|
sécurité de leurs systèmes et ou de leurs données et, plus généralement, |
|
|
|
|
|
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. |
|
|
|
|
|
|
|
|
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez |
|
|
|
|
|
|
|
|
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez |
|
|
pris connaissance de la licence CeCILL, et que vous en avez accepté les |
|
|
pris connaissance de la licence CeCILL, et que vous en avez accepté les |
|
|
termes. |
|
|
termes. |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
|
|
|
?> |
|
|
?> |
|
|
<div id="app-distribution-index" class="app-vuejs"> |
|
|
<div id="app-distribution-index" class="app-vuejs"> |
|
|
<?php if(strlen($date)): ?> |
|
|
<?php if(strlen($date)): ?> |
|
|
<span id="distribution-date"><?= $date; ?></span> |
|
|
|
|
|
|
|
|
<span id="distribution-date"><?= $date; ?></span> |
|
|
<?php endif; ?> |
|
|
<?php endif; ?> |
|
|
<div id="loading" v-if="showLoading"> |
|
|
<div id="loading" v-if="showLoading"> |
|
|
<img src="<?= Yii::$app->urlManagerBackend->getBaseUrl(); ?>/img/loader.gif" alt="Chargement ..." /> |
|
|
<img src="<?= Yii::$app->urlManagerBackend->getBaseUrl(); ?>/img/loader.gif" alt="Chargement ..." /> |
|
|
|
|
|
|
|
|
:theme-styles="calendar.themeStyles" |
|
|
:theme-styles="calendar.themeStyles" |
|
|
:attributes="calendar.attrs" |
|
|
:attributes="calendar.attrs" |
|
|
@dayclick='dayClicked'> |
|
|
@dayclick='dayClicked'> |
|
|
></v-date-picker> |
|
|
|
|
|
|
|
|
></v-date-picker> |
|
|
</div> |
|
|
</div> |
|
|
<div class="clr"></div> |
|
|
<div class="clr"></div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- produits --> |
|
|
<!-- produits --> |
|
|
<div class="col-md-6"> |
|
|
<div class="col-md-6"> |
|
|
<div class="info-box col-md-4"> |
|
|
<div class="info-box col-md-4"> |
|
|
|
|
|
|
|
|
<button class="btn btn-default" v-else data-active-product="0" :data-id-product="product.id" @click="productActiveClick"><span class="glyphicon glyphicon-remove"></span></button> |
|
|
<button class="btn btn-default" v-else data-active-product="0" :data-id-product="product.id" @click="productActiveClick"><span class="glyphicon glyphicon-remove"></span></button> |
|
|
</td> |
|
|
</td> |
|
|
<td>{{ product.name }}</td> |
|
|
<td>{{ product.name }}</td> |
|
|
<td class="quantity-ordered">{{ product.quantity_ordered ? product.quantity_ordered + ' '+ ((product.unit == 'piece') ? ' p.' : ' '+(product.unit == 'g' || product.unit == 'kg') ? 'kg' : 'litre(s)') : '∅' }}</td> |
|
|
|
|
|
|
|
|
<td class="quantity-ordered">{{ product.quantity_ordered ? product.quantity_ordered + ' '+ ((product.unit == 'piece') ? ' p.' : ' '+(product.unit == 'g' || product.unit == 'kg') ? 'kg' : 'litre(s)') : '∅' }}</td> |
|
|
<td class="quantity-max"> |
|
|
<td class="quantity-max"> |
|
|
<div class="input-group"> |
|
|
<div class="input-group"> |
|
|
<input type="text" class="form-control quantity-max" placeholder="∞" :data-id-product="product.id" v-model="product.productDistribution[0].quantity_max" @keyup="productQuantityMaxChange" /> |
|
|
<input type="text" class="form-control quantity-max" placeholder="∞" :data-id-product="product.id" v-model="product.productDistribution[0].quantity_max" @keyup="productQuantityMaxChange" /> |
|
|
<span class="input-group-addon">{{ (product.unit == 'piece') ? 'p.' : ' '+((product.unit == 'g' || product.unit == 'kg') ? 'kg' : 'litre(s)') }}</span> |
|
|
<span class="input-group-addon">{{ (product.unit == 'piece') ? 'p.' : ' '+((product.unit == 'g' || product.unit == 'kg') ? 'kg' : 'litre(s)') }}</span> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</td> |
|
|
</td> |
|
|
</tr> |
|
|
</tr> |
|
|
</tbody> |
|
|
</tbody> |
|
|
|
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</modal> |
|
|
</modal> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="col-md-6"> |
|
|
<div class="col-md-6"> |
|
|
<div class="info-box col-md-4"> |
|
|
<div class="info-box col-md-4"> |
|
|
<span class="info-box-icon bg-yellow"><i class="fa fa-map-marker"></i></span> |
|
|
<span class="info-box-icon bg-yellow"><i class="fa fa-map-marker"></i></span> |
|
|
|
|
|
|
|
|
</table> |
|
|
</table> |
|
|
</div> |
|
|
</div> |
|
|
</modal> |
|
|
</modal> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="col-md-6"> |
|
|
<div class="col-md-6"> |
|
|
<div id="summary-ca-weight" class="info-box col-md-4"> |
|
|
<div id="summary-ca-weight" class="info-box col-md-4"> |
|
|
<span class="info-box-icon bg-yellow"><i class="fa fa-euro"></i></span> |
|
|
<span class="info-box-icon bg-yellow"><i class="fa fa-euro"></i></span> |
|
|
|
|
|
|
|
|
<div class="panel-heading"> |
|
|
<div class="panel-heading"> |
|
|
<h3 class="panel-title">Commandes <label class="label label-success" v-if="orders.length">{{ orders.length }}</label><label class="label label-danger" v-else>0</label></h3> |
|
|
<h3 class="panel-title">Commandes <label class="label label-success" v-if="orders.length">{{ orders.length }}</label><label class="label label-danger" v-else>0</label></h3> |
|
|
<div class="buttons"> |
|
|
<div class="buttons"> |
|
|
<button id="btn-add-order" @click="showModalFormOrderCreate = true" class="btn btn-primary btn-xs"><span class="glyphicon glyphicon-plus"></span> Ajouter une commande</button> |
|
|
|
|
|
<button id="btn-add-subscriptions" @click="addSubscriptions" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-plus"></span> Importer les abonnements</button> |
|
|
|
|
|
<template v-if="producer.tiller == true"> |
|
|
|
|
|
<button v-if="tillerIsSynchro" id="btn-tiller" class="btn btn-xs btn-success" disabled><span class="glyphicon glyphicon-refresh"></span> Synchronisé avec Tiller</button> |
|
|
|
|
|
<button v-else id="btn-tiller" class="btn btn-xs btn-default" @click="synchroTiller"><span class="glyphicon glyphicon-refresh"></span> Synchroniser avec Tiller</button> |
|
|
|
|
|
</template> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="panel-body"> |
|
|
<div class="panel-body"> |
|
|
<order-form |
|
|
|
|
|
|
|
|
<order-form |
|
|
v-if="showModalFormOrderCreate" |
|
|
v-if="showModalFormOrderCreate" |
|
|
:date="date" |
|
|
:date="date" |
|
|
:order="orderCreate" |
|
|
:order="orderCreate" |
|
|
:points-sale="pointsSale" |
|
|
:points-sale="pointsSale" |
|
|
:means-payment="meansPayment" |
|
|
:means-payment="meansPayment" |
|
|
:users="users" |
|
|
|
|
|
|
|
|
:users="users" |
|
|
:products="products" |
|
|
:products="products" |
|
|
:producer="producer" |
|
|
:producer="producer" |
|
|
@close="showModalFormOrderCreate = false" |
|
|
@close="showModalFormOrderCreate = false" |
|
|
@ordercreatedupdated="orderCreatedUpdated" |
|
|
@ordercreatedupdated="orderCreatedUpdated" |
|
|
></order-form> |
|
|
></order-form> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div id="wrapper-nav-points-sale"> |
|
|
<div id="wrapper-nav-points-sale"> |
|
|
<ul id="nav-points-sale"> |
|
|
|
|
|
<li data-id-point-sale="0" data-id-point-sale="0" v-if="countActivePointsSale > 1" @click="pointSaleClick"> |
|
|
|
|
|
<a class="btn btn-default btn-primary" v-if="idActivePointSale == 0">Tous <span class="label label-default">{{ orders.length }}</span> <span class="glyphicon glyphicon-triangle-bottom"></span></a> |
|
|
|
|
|
<a class="btn btn-default" v-else>Tous <span class="label label-default">{{ orders.length }}</span><span class="glyphicon glyphicon-triangle-bottom"></span></a> |
|
|
|
|
|
</li> |
|
|
|
|
|
<li v-for="pointSale in pointsSale" :data-id-point-sale="pointSale.id" v-if="pointSale.pointSaleDistribution[0].delivery == 1" @click="pointSaleClick"> |
|
|
|
|
|
<a class="btn btn-default btn-primary" v-if="idActivePointSale == pointSale.id">{{ pointSale.name }} <span class="label label-default">{{ countOrdersByPointSale[pointSale.id] }}</span><span class="glyphicon glyphicon-triangle-bottom"></span></a> |
|
|
|
|
|
<a class="btn btn-default" v-else>{{ pointSale.name }} <span class="label label-default">{{ countOrdersByPointSale[pointSale.id] }}</span><span class="glyphicon glyphicon-triangle-bottom"></span></a> |
|
|
|
|
|
</li> |
|
|
|
|
|
</ul> |
|
|
|
|
|
|
|
|
<ul id="nav-points-sale"> |
|
|
|
|
|
<li data-id-point-sale="0" data-id-point-sale="0" v-if="countActivePointsSale > 1" @click="pointSaleClick"> |
|
|
|
|
|
<a class="btn btn-default btn-primary" v-if="idActivePointSale == 0">Tous <span class="label label-default">{{ orders.length }}</span> <span class="glyphicon glyphicon-triangle-bottom"></span></a> |
|
|
|
|
|
<a class="btn btn-default" v-else>Tous <span class="label label-default">{{ orders.length }}</span><span class="glyphicon glyphicon-triangle-bottom"></span></a> |
|
|
|
|
|
</li> |
|
|
|
|
|
<li v-for="pointSale in pointsSale" :data-id-point-sale="pointSale.id" v-if="pointSale.pointSaleDistribution[0].delivery == 1" @click="pointSaleClick"> |
|
|
|
|
|
<a class="btn btn-default btn-primary" v-if="idActivePointSale == pointSale.id">{{ pointSale.name }} <span class="label label-default">{{ countOrdersByPointSale[pointSale.id] }}</span><span class="glyphicon glyphicon-triangle-bottom"></span></a> |
|
|
|
|
|
<a class="btn btn-default" v-else>{{ pointSale.name }} <span class="label label-default">{{ countOrdersByPointSale[pointSale.id] }}</span><span class="glyphicon glyphicon-triangle-bottom"></span></a> |
|
|
|
|
|
</li> |
|
|
|
|
|
</ul> |
|
|
<div class="clr"></div> |
|
|
<div class="clr"></div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div id="buttons-top-orders"> |
|
|
|
|
|
<div class="right"> |
|
|
|
|
|
<a v-if="typeof deliveryNotes[idActivePointSale] != 'undefined'" :href="UrlManager.getBaseUrl()+'delivery-note/update?id='+deliveryNotes[idActivePointSale].id" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-file"></span> Bon de livraison</a> |
|
|
|
|
|
<button id="btn-add-subscriptions" @click="addSubscriptions" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-plus"></span> Importer les abonnements</button> |
|
|
|
|
|
<template v-if="producer.tiller == true"> |
|
|
|
|
|
<button v-if="tillerIsSynchro" id="btn-tiller" class="btn btn-success btn-xs" disabled><span class="glyphicon glyphicon-refresh"></span> Synchronisé avec Tiller</button> |
|
|
|
|
|
<button v-else id="btn-tiller" class="btn btn-xs btn-default" @click="synchroTiller"><span class="glyphicon glyphicon-refresh"></span> Synchroniser avec Tiller</button> |
|
|
|
|
|
</template> |
|
|
|
|
|
<button id="btn-add-order" @click="showModalFormOrderCreate = true" class="btn btn-xs btn-primary"><span class="glyphicon glyphicon-plus"></span> Ajouter une commande</button> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="left"> |
|
|
|
|
|
<div v-if="idActivePointSale > 0 && oneOrderSelected()" class="btn-group"> |
|
|
|
|
|
<button type="button" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|
|
|
|
|
Action groupée <span class="caret"></span> |
|
|
|
|
|
</button> |
|
|
|
|
|
<ul class="dropdown-menu"> |
|
|
|
|
|
<li><a @click="generateDeliveryNote" href="javascript:void(0);">Générer un bon de livraison</a></li> |
|
|
|
|
|
</ul> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="clr"></div> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
<table class="table table-condensed table-bordered table-hover" v-if="countOrdersByPointSale[idActivePointSale] > 0 || (idActivePointSale == 0 && orders.length > 0)"> |
|
|
<table class="table table-condensed table-bordered table-hover" v-if="countOrdersByPointSale[idActivePointSale] > 0 || (idActivePointSale == 0 && orders.length > 0)"> |
|
|
|
|
|
<thead> |
|
|
|
|
|
<tr> |
|
|
|
|
|
<th v-if="idActivePointSale > 0"> |
|
|
|
|
|
<input type="checkbox" v-model="checkboxSelectAllOrders" @change="selectAllOrders" /> |
|
|
|
|
|
</th> |
|
|
|
|
|
<th>Origine</th> |
|
|
|
|
|
<th>État</th> |
|
|
|
|
|
<th>Utilisateur</th> |
|
|
|
|
|
<th v-if="idActivePointSale == 0">Point de vente</th> |
|
|
|
|
|
<th>Montant</th> |
|
|
|
|
|
<th>Paiement</th> |
|
|
|
|
|
<th></th> |
|
|
|
|
|
<th v-if="producer.tiller">Tiller</th> |
|
|
|
|
|
<th></th> |
|
|
|
|
|
<th></th> |
|
|
|
|
|
</tr> |
|
|
|
|
|
</thead> |
|
|
<tbody> |
|
|
<tbody> |
|
|
<template v-for="(order, key, index) in orders" v-if="idActivePointSale == 0 || idActivePointSale == order.id_point_sale"> |
|
|
<template v-for="(order, key, index) in orders" v-if="idActivePointSale == 0 || idActivePointSale == order.id_point_sale"> |
|
|
<tr> |
|
|
<tr> |
|
|
|
|
|
<td v-if="idActivePointSale > 0"> |
|
|
|
|
|
<input type="checkbox" v-model="order.selected" /> |
|
|
|
|
|
</td> |
|
|
<td> |
|
|
<td> |
|
|
<label class="label label-success" v-if="order.origin == 'user'">client</label> |
|
|
<label class="label label-success" v-if="order.origin == 'user'">client</label> |
|
|
<label class="label label-default" v-else-if="order.origin == 'auto'">auto</label> |
|
|
<label class="label label-default" v-else-if="order.origin == 'auto'">auto</label> |
|
|
|
|
|
|
|
|
</td> |
|
|
</td> |
|
|
<td>{{ order.amount.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }}</td> |
|
|
<td>{{ order.amount.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }}</td> |
|
|
<td class="column-state-payment"> |
|
|
<td class="column-state-payment"> |
|
|
<div class="input-group"> |
|
|
|
|
|
|
|
|
<div class="input-group"> |
|
|
<span class="label label-success input-group-addon" v-if="order.amount_paid == order.amount">payé</span> |
|
|
<span class="label label-success input-group-addon" v-if="order.amount_paid == order.amount">payé</span> |
|
|
<span class="label label-default input-group-addon" v-else-if="order.amount_paid == 0">non réglé</span> |
|
|
<span class="label label-default input-group-addon" v-else-if="order.amount_paid == 0">non réglé</span> |
|
|
<span class="label label-default input-group-addon" v-else-if="order.amount_paid > order.amount">surplus</span> |
|
|
<span class="label label-default input-group-addon" v-else-if="order.amount_paid > order.amount">surplus</span> |
|
|
<span class="label label-warning input-group-addon" v-else-if="order.amount_paid < order.amount">reste à payer</span> |
|
|
<span class="label label-warning input-group-addon" v-else-if="order.amount_paid < order.amount">reste à payer</span> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="glyphicon glyphicon-time" title="Paiement automatique" v-if="order.auto_payment && producer.credit && (order.amount_paid == 0 || order.amount_paid < order.amount)"></span> |
|
|
<span class="glyphicon glyphicon-time" title="Paiement automatique" v-if="order.auto_payment && producer.credit && (order.amount_paid == 0 || order.amount_paid < order.amount)"></span> |
|
|
</div> |
|
|
</div> |
|
|
</td> |
|
|
</td> |
|
|
|
|
|
|
|
|
<button class="btn btn-xs btn-default" v-else-if="order.amount_paid > order.amount" @click="orderPaymentClick" :data-id-order="order.id" data-type="refund" :data-amount="order.amount_surplus"> |
|
|
<button class="btn btn-xs btn-default" v-else-if="order.amount_paid > order.amount" @click="orderPaymentClick" :data-id-order="order.id" data-type="refund" :data-amount="order.amount_surplus"> |
|
|
<span class="glyphicon glyphicon-euro"></span> Rembourser |
|
|
<span class="glyphicon glyphicon-euro"></span> Rembourser |
|
|
</button> |
|
|
</button> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|
|
<button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|
|
<span class="caret"></span> |
|
|
<span class="caret"></span> |
|
|
<span class="sr-only">Toggle Dropdown</span> |
|
|
<span class="sr-only">Toggle Dropdown</span> |
|
|
|
|
|
|
|
|
</td> |
|
|
</td> |
|
|
<td class="column-actions"> |
|
|
<td class="column-actions"> |
|
|
<span v-if="order.oneProductUnactivated" class="glyphicon glyphicon-warning-sign" title="Contient un produit non activé"></span> |
|
|
<span v-if="order.oneProductUnactivated" class="glyphicon glyphicon-warning-sign" title="Contient un produit non activé"></span> |
|
|
<button class="btn btn-default" :data-id-order="order.id" @click="orderViewClick"><span :class="'glyphicon ' + ((showViewProduct && idOrderView == order.id) ? 'glyphicon-eye-close' : 'glyphicon-eye-open')"></span></button> |
|
|
|
|
|
<button class="btn btn-default" :data-id-order="order.id" @click="updateOrderClick"><span class="glyphicon glyphicon-pencil"></span></button> |
|
|
|
|
|
<button class="btn btn-default" :data-id-order="order.id" @click="deleteOrderClick"><span class="glyphicon glyphicon-trash"></span></button> |
|
|
|
|
|
<a class="btn btn-default" :href="baseUrl+'/subscription/update?id='+order.id_subscription" v-if="order.id_subscription > 0"><span class="glyphicon glyphicon-repeat"></span></a> |
|
|
|
|
|
<a class="btn btn-default add-subscription" :href="baseUrl+'/subscription/create?idOrder='+order.id" v-else><span class="glyphicon glyphicon-plus"></span><span class="glyphicon glyphicon-repeat"></span></a> |
|
|
|
|
|
|
|
|
|
|
|
<order-form |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|
|
|
|
|
Action <span class="caret"></span> |
|
|
|
|
|
</button> |
|
|
|
|
|
<ul class="dropdown-menu"> |
|
|
|
|
|
<li><a href="javascript:void(0);" class="" :data-id-order="order.id" @click="orderViewClick"><span :class="'glyphicon ' + ((showViewProduct && idOrderView == order.id) ? 'glyphicon-eye-close' : 'glyphicon-eye-open')"></span> Voir</a></li> |
|
|
|
|
|
<li><a href="javascript:void(0);" class="" :data-id-order="order.id" @click="updateOrderClick"><span class="glyphicon glyphicon-pencil"></span> Modifier</a></li> |
|
|
|
|
|
<li><a href="javascript:void(0);" class="" :data-id-order="order.id" @click="deleteOrderClick"><span class="glyphicon glyphicon-trash"></span> Supprimer</a></li> |
|
|
|
|
|
<li v-if="order.id_subscription > 0"><a class="" :href="baseUrl+'/subscription/update?id='+order.id_subscription"><span class="glyphicon glyphicon-repeat"></span> Modifier l'abonnement associé</a></li> |
|
|
|
|
|
<li v-else><a class="add-subscription" :href="baseUrl+'/subscription/create?idOrder='+order.id"><span class="glyphicon glyphicon-plus"></span><span class="glyphicon glyphicon-repeat"></span>Créer un abonnement sur cette base</a></li> |
|
|
|
|
|
</ul> |
|
|
|
|
|
|
|
|
|
|
|
<order-form |
|
|
v-if="showModalFormOrderUpdate && idOrderUpdate == order.id" |
|
|
v-if="showModalFormOrderUpdate && idOrderUpdate == order.id" |
|
|
:date="date" |
|
|
:date="date" |
|
|
:id-point-sale="idActivePointSale" |
|
|
:id-point-sale="idActivePointSale" |
|
|
:points-sale="pointsSale" |
|
|
:points-sale="pointsSale" |
|
|
:means-payment="meansPayment" |
|
|
:means-payment="meansPayment" |
|
|
:users="users" |
|
|
|
|
|
|
|
|
:users="users" |
|
|
:products="products" |
|
|
:products="products" |
|
|
:order="ordersUpdate[key]" |
|
|
:order="ordersUpdate[key]" |
|
|
:producer="producer" |
|
|
:producer="producer" |
|
|
@close="showModalFormOrderUpdate = false" |
|
|
@close="showModalFormOrderUpdate = false" |
|
|
@ordercreatedupdated="orderCreatedUpdated" |
|
|
@ordercreatedupdated="orderCreatedUpdated" |
|
|
></order-form> |
|
|
></order-form> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<modal v-if="showModalPayment && idOrderPayment == order.id" class="modal-payment" @close="showModalPayment = false"> |
|
|
<modal v-if="showModalPayment && idOrderPayment == order.id" class="modal-payment" @close="showModalPayment = false"> |
|
|
<h3 slot="header"> |
|
|
<h3 slot="header"> |
|
|
Commande du <strong>{{ dateFormat }}</strong> > |
|
|
Commande du <strong>{{ dateFormat }}</strong> > |
|
|
|
|
|
|
|
|
<span class="label label-success" v-if="order.amount_paid == order.amount">payé</span> |
|
|
<span class="label label-success" v-if="order.amount_paid == order.amount">payé</span> |
|
|
<span class="label label-default" v-else-if="order.amount_paid == 0">non réglé</span> |
|
|
<span class="label label-default" v-else-if="order.amount_paid == 0">non réglé</span> |
|
|
<span class="label label-default" v-else-if="order.amount_paid > order.amount">surplus</span> |
|
|
<span class="label label-default" v-else-if="order.amount_paid > order.amount">surplus</span> |
|
|
<span class="label label-warning" v-else-if="order.amount_paid < order.amount">reste à payer</span> |
|
|
|
|
|
|
|
|
<span class="label label-warning" v-else-if="order.amount_paid < order.amount">reste à payer</span> |
|
|
</span> |
|
|
</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="info-box"> |
|
|
<div class="info-box"> |
|
|
<span :class="'info-box-icon ' +((order.user.credit > 0) ? 'bg-green' : 'bg-red')"><i class="fa fa-user"></i></span> |
|
|
<span :class="'info-box-icon ' +((order.user.credit > 0) ? 'bg-green' : 'bg-red')"><i class="fa fa-user"></i></span> |
|
|
<div class="info-box-content"> |
|
|
<div class="info-box-content"> |
|
|
|
|
|
|
|
|
<span class="info-box-number">{{ order.user.credit.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }}</span> |
|
|
<span class="info-box-number">{{ order.user.credit.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }}</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<button v-if="order.amount_paid == order.amount" |
|
|
|
|
|
class="btn btn-default" |
|
|
|
|
|
:data-amount="order.amount" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<button v-if="order.amount_paid == order.amount" |
|
|
|
|
|
class="btn btn-default" |
|
|
|
|
|
:data-amount="order.amount" |
|
|
data-type="refund" |
|
|
data-type="refund" |
|
|
@click="orderPaymentClick" > |
|
|
@click="orderPaymentClick" > |
|
|
<span class="glyphicon glyphicon-chevron-right"></span> |
|
|
|
|
|
|
|
|
<span class="glyphicon glyphicon-chevron-right"></span> |
|
|
Rembourser {{ order.amount.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }} |
|
|
Rembourser {{ order.amount.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }} |
|
|
</button> |
|
|
</button> |
|
|
|
|
|
|
|
|
<button v-else-if="order.amount_paid == 0" |
|
|
|
|
|
class="btn btn-default" |
|
|
|
|
|
:data-amount="order.amount" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<button v-else-if="order.amount_paid == 0" |
|
|
|
|
|
class="btn btn-default" |
|
|
|
|
|
:data-amount="order.amount" |
|
|
data-type="payment" |
|
|
data-type="payment" |
|
|
@click="orderPaymentClick"> |
|
|
@click="orderPaymentClick"> |
|
|
<span class="glyphicon glyphicon-chevron-right"></span> |
|
|
|
|
|
|
|
|
<span class="glyphicon glyphicon-chevron-right"></span> |
|
|
Payer {{ order.amount.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }} |
|
|
Payer {{ order.amount.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }} |
|
|
</button> |
|
|
</button> |
|
|
|
|
|
|
|
|
<button v-else-if="order.amount_paid > order.amount" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<button v-else-if="order.amount_paid > order.amount" |
|
|
class="btn btn-default" |
|
|
class="btn btn-default" |
|
|
:data-amount="order.amount_surplus" |
|
|
|
|
|
|
|
|
:data-amount="order.amount_surplus" |
|
|
data-type="refund" |
|
|
data-type="refund" |
|
|
@click="orderPaymentClick"> |
|
|
@click="orderPaymentClick"> |
|
|
<span class="glyphicon glyphicon-chevron-right"></span> |
|
|
|
|
|
|
|
|
<span class="glyphicon glyphicon-chevron-right"></span> |
|
|
Rembourser {{ order.amount_surplus.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }} |
|
|
Rembourser {{ order.amount_surplus.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }} |
|
|
</button> |
|
|
</button> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<button v-else-if="order.amount_paid < order.amount" |
|
|
<button v-else-if="order.amount_paid < order.amount" |
|
|
class="btn btn-default" |
|
|
|
|
|
:data-amount="order.amount_remaining" |
|
|
|
|
|
|
|
|
class="btn btn-default" |
|
|
|
|
|
:data-amount="order.amount_remaining" |
|
|
data-type="payment" |
|
|
data-type="payment" |
|
|
@click="orderPaymentClick"> |
|
|
@click="orderPaymentClick"> |
|
|
<span class="glyphicon glyphicon-chevron-right"></span> |
|
|
|
|
|
|
|
|
<span class="glyphicon glyphicon-chevron-right"></span> |
|
|
Payer le restant {{ order.amount_remaining.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }} |
|
|
Payer le restant {{ order.amount_remaining.toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+' €' }} |
|
|
</button> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="col-md-8"> |
|
|
<div class="col-md-8"> |
|
|
<h4>Historique paiement</h4> |
|
|
<h4>Historique paiement</h4> |
|
|
<table class="table table-condensed table-bordered table-hover"> |
|
|
<table class="table table-condensed table-bordered table-hover"> |
|
|
|
|
|
|
|
|
</tbody> |
|
|
</tbody> |
|
|
</table> |
|
|
</table> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</modal> |
|
|
</modal> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</td> |
|
|
|
|
|
<td> |
|
|
|
|
|
<a v-if="order.id_delivery_note" class="btn btn-default btn-xs" :href="UrlManager.getBaseUrl()+'delivery-note/update?id='+order.id_delivery_note"> |
|
|
|
|
|
<span class="glyphicon glyphicon-file"></span> BL |
|
|
|
|
|
</a> |
|
|
</td> |
|
|
</td> |
|
|
</tr> |
|
|
</tr> |
|
|
<tr class="view" v-if="showViewProduct && idOrderView == order.id"> |
|
|
<tr class="view" v-if="showViewProduct && idOrderView == order.id"> |
|
|
|
|
|
|
|
|
<strong><span class="glyphicon glyphicon-menu-right"></span> Produits</strong> |
|
|
<strong><span class="glyphicon glyphicon-menu-right"></span> Produits</strong> |
|
|
<ul> |
|
|
<ul> |
|
|
<li v-for="product in products" v-if="order.productOrder[product.id].quantity > 0"> |
|
|
<li v-for="product in products" v-if="order.productOrder[product.id].quantity > 0"> |
|
|
{{ product.name }} : {{ order.productOrder[product.id].quantity }} {{ order.productOrder[product.id].unit == 'piece' ? ' pièce(s)' : ' '+order.productOrder[product.id].unit }} <span v-if="product.productDistribution[0].active == 0" class="glyphicon glyphicon-warning-sign" title="Ce produit n'est pas activé"></span> |
|
|
|
|
|
|
|
|
{{ product.name }} : {{ order.productOrder[product.id].quantity }} {{ order.productOrder[product.id].unit == 'piece' ? ' pièce(s)' : ' '+order.productOrder[product.id].unit }} <span v-if="product.productDistribution[0].active == 0" class="glyphicon glyphicon-warning-sign" title="Ce produit n'est pas activé"></span> |
|
|
</li> |
|
|
</li> |
|
|
</ul> |
|
|
</ul> |
|
|
<div v-if="order.comment && order.comment.length > 0" class="comment"> |
|
|
<div v-if="order.comment && order.comment.length > 0" class="comment"> |
|
|
|
|
|
|
|
|
</td> |
|
|
</td> |
|
|
</tr> |
|
|
</tr> |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
<tr v-if="idActivePointSale > 0"> |
|
|
|
|
|
<td colspan="4"><strong>Total (TTC)</strong></td> |
|
|
|
|
|
<td><strong>{{ totalActivePointSale() }}</strong></td> |
|
|
|
|
|
<td colspan="3"></td> |
|
|
|
|
|
</tr> |
|
|
</tbody> |
|
|
</tbody> |
|
|
</table> |
|
|
</table> |
|
|
<div class="alert alert-warning" v-else> |
|
|
<div class="alert alert-warning" v-else> |
|
|
|
|
|
|
|
|
<button class="btn btn-default btn-plus" type="button" @click="productQuantityClick(product.id, order.productOrder[product.id].unit == 'piece' ? 1 : parseFloat(product.step))"><span class="glyphicon glyphicon-plus"></span></button> |
|
|
<button class="btn btn-default btn-plus" type="button" @click="productQuantityClick(product.id, order.productOrder[product.id].unit == 'piece' ? 1 : parseFloat(product.step))"><span class="glyphicon glyphicon-plus"></span></button> |
|
|
</span> |
|
|
</span> |
|
|
</div> |
|
|
</div> |
|
|
</td> |
|
|
|
|
|
|
|
|
</td> |
|
|
<td class="quantity-remaining infinite" v-if="product.quantity_remaining === null || order.productOrder[product.id].unit != product.unit">∞</td> |
|
|
<td class="quantity-remaining infinite" v-if="product.quantity_remaining === null || order.productOrder[product.id].unit != product.unit">∞</td> |
|
|
<td class="quantity-remaining negative" v-else-if="product.quantity_remaining <= 0">{{ product.quantity_remaining }} {{ order.productOrder[product.id].unit == 'piece' ? ' p.' : ' '+(order.productOrder[product.id].unit == 'g' || order.productOrder[product.id].unit == 'kg') ? 'kg' : 'litre(s)' }}</td> |
|
|
<td class="quantity-remaining negative" v-else-if="product.quantity_remaining <= 0">{{ product.quantity_remaining }} {{ order.productOrder[product.id].unit == 'piece' ? ' p.' : ' '+(order.productOrder[product.id].unit == 'g' || order.productOrder[product.id].unit == 'kg') ? 'kg' : 'litre(s)' }}</td> |
|
|
<td class="quantity-remaining has-quantity" v-else>{{ product.quantity_remaining }} {{ order.productOrder[product.id].unit == 'piece' ? ' p.' : ' '+(order.productOrder[product.id].unit == 'g' || order.productOrder[product.id].unit == 'kg') ? 'kg' : 'litre(s)' }}</td> |
|
|
<td class="quantity-remaining has-quantity" v-else>{{ product.quantity_remaining }} {{ order.productOrder[product.id].unit == 'piece' ? ' p.' : ' '+(order.productOrder[product.id].unit == 'g' || order.productOrder[product.id].unit == 'kg') ? 'kg' : 'litre(s)' }}</td> |
|
|
|
|
|
|
|
|
<div class="actions-form"> |
|
|
<div class="actions-form"> |
|
|
<button class="modal-default-button btn btn-primary" @click="submitFormCreate" v-if="!order.id && order.id_user > 0" data-process-credit="1">Créer et payer</button> |
|
|
<button class="modal-default-button btn btn-primary" @click="submitFormCreate" v-if="!order.id && order.id_user > 0" data-process-credit="1">Créer et payer</button> |
|
|
<button class="modal-default-button btn btn-primary" @click="submitFormUpdate" v-if="order.id && order.id_user > 0" data-process-credit="1">Modifier et payer</button> |
|
|
<button class="modal-default-button btn btn-primary" @click="submitFormUpdate" v-if="order.id && order.id_user > 0" data-process-credit="1">Modifier et payer</button> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<button class="modal-default-button btn btn-primary" @click="submitFormUpdate" v-if="order.id">Modifier</button> |
|
|
<button class="modal-default-button btn btn-primary" @click="submitFormUpdate" v-if="order.id">Modifier</button> |
|
|
<button class="modal-default-button btn btn-primary" @click="submitFormCreate" v-else>Créer</button> |
|
|
<button class="modal-default-button btn btn-primary" @click="submitFormCreate" v-else>Créer</button> |
|
|
|
|
|
|