Ajouter le champs "prix_libre" dans la table "etablissement". Page facturation : retirer toutes les infos relatives à la commission. Mettre en place un formulaire pour que le producteur puisse saisir un prix. Tableau de bord : mettre le prix libre saisi par le client dans le bloc facturation. Si aucun prix libre n'est saisi, inciter le producteur à le faire via un lien dans le bloc facturation. Mise à jour des CGS + maj de la page d'accueil et du formulaire d'inscription.master
$etablissement = Etablissement::findOne(Yii::$app->user->identity->id_etablissement) ; | $etablissement = Etablissement::findOne(Yii::$app->user->identity->id_etablissement) ; | ||||
if ($etablissement->load(Yii::$app->request->post())) | |||||
{ | |||||
$etablissement->save() ; | |||||
if(!is_null($etablissement->prix_libre)) | |||||
$alert_prix_libre = true ; | |||||
} | |||||
return $this->render('facturation', [ | return $this->render('facturation', [ | ||||
'datas_factures' => $datas_factures, | 'datas_factures' => $datas_factures, | ||||
'etablissement' => $etablissement | |||||
'etablissement' => $etablissement, | |||||
'alert_prix_libre' => (isset($alert_prix_libre)) ? true : false | |||||
]); | ]); | ||||
} | } | ||||
} | } | ||||
], | ], | ||||
[ | [ | ||||
'attribute' => 'Facture', | |||||
'label' => 'Facture mois dernier', | |||||
'attribute' => 'Prix libre', | |||||
'label' => 'Prix libre', | |||||
'format' => 'raw', | 'format' => 'raw', | ||||
'value' => function($model) { | 'value' => function($model) { | ||||
$periode = date('Y-m', strtotime('-1 month')) ; | |||||
$ca = $model->getCA($periode) ; | |||||
$html = '' ; | |||||
$html .= 'CA : '.number_format($ca,2).' €<br />' ; | |||||
$montant_facturer = $model->getMontantFacturer($periode, $ca) ; | |||||
$facture = $model->getFacture($periode) ; | |||||
if($facture) | |||||
{ | |||||
$html .= '<span class="label label-success">Facturé</span> <strong>'.number_format($facture->montant_ht,2).' €</strong>' ; | |||||
} | |||||
else { | |||||
if($montant_facturer == 0) { | |||||
$html .= '<span class="label label-default">Gratuit</span>' ; | |||||
} | |||||
else { | |||||
$html .= Html::a('Facturer <strong>'.$model->getMontantFacturer($periode, $ca, true).'</strong>', ['etablissement-admin/facturer','id_etablissement' => $model->id], ['class' => 'btn btn-default']) ; | |||||
} | |||||
} | |||||
return $html ; | |||||
if(is_null($model->prix_libre)) | |||||
return '' ; | |||||
else | |||||
return $model->getPrixLibre() ; | |||||
} | } | ||||
], | ], | ||||
[ | [ | ||||
'attribute' => 'Cours', | 'attribute' => 'Cours', | ||||
'label' => 'Mois en cours', | |||||
'label' => 'CA mois en cours', | |||||
'format' => 'raw', | 'format' => 'raw', | ||||
'value' => function($model) { | 'value' => function($model) { | ||||
use yii\grid\GridView; | use yii\grid\GridView; | ||||
use common\models\User ; | use common\models\User ; | ||||
use common\models\Etablissement ; | use common\models\Etablissement ; | ||||
use yii\bootstrap\ActiveForm; | |||||
$this->title = 'Facturation'; | $this->title = 'Facturation'; | ||||
$this->params['breadcrumbs'][] = 'Administration' ; | $this->params['breadcrumbs'][] = 'Administration' ; | ||||
<h1>Facturation</h1> | <h1>Facturation</h1> | ||||
<p class="alert alert-warning">Suivez ici l'évolution de votre facture tout au long du mois.<br /> | |||||
Les factures sont générées au début de chaque mois en fonction du chiffre d'affaire du mois précédent. <br /> | |||||
→ S'il est inférieur à 500€, rien n'est facturé. <br /> | |||||
→ S'il est supérieur à 500€, une commission de 2% du chiffre d'affaire est facturée.</p> | |||||
<div id="estimation-facture"> | |||||
<div class="col-md-6"> | |||||
<h2>Chiffre d'affaire<br />du mois en cours</h2> | |||||
<div class="montant"><span><?= number_format($etablissement->getCA(date('Y-m')), 2); ?> €</span></div> | |||||
</div> | |||||
<p class=""> | |||||
Vous seuls savez ce que vous apporte cet outil et dans quelle mesure vous souhaitez le soutenir.<br /> | |||||
C'est pourquoi le modèle économique est basé sur un prix libre facturé mensuellement.<br /> | |||||
</p> | |||||
<div class="col-md-6"> | |||||
<?php $montant = $etablissement->getMontantFacturer(date('Y-m'), 0); ?> | |||||
<h2>Participation<br /><em>La boîte à pain</em> (2%)</h2> | |||||
<div class="montant"><span><?php if($montant): echo number_format($montant,2).' €' ; else: echo 'Gratuit' ; endif; ?></span></div> | |||||
<div id="estimation-facture" class=""> | |||||
<?php if($alert_prix_libre): ?> | |||||
<div class="alert alert-success"> | |||||
Le prix libre a bien été mis à jour. | |||||
<?php if($etablissement->prix_libre != 0): ?> | |||||
Vos prochaines factures mensuelles auront un montant de <strong><?= number_format(Html::encode($etablissement->prix_libre),2).' € TTC' ; ?></strong>. | |||||
<?php endif; ?> | |||||
</div> | |||||
<?php endif; ?> | |||||
<?php $form = ActiveForm::begin([ | |||||
'layout' => 'horizontal', | |||||
'fieldConfig' => [ | |||||
'template' => "{label}\n{beginWrapper}\n{input}\n{hint}\n{error}\n{endWrapper}", | |||||
'horizontalCssClasses' => [ | |||||
'label' => 'col-sm-2', | |||||
], | |||||
], | |||||
]); ?> | |||||
<?= $form->field($etablissement, 'prix_libre')->textInput()->label('Prix libre<br /><span>€ TTC / mois</span>') ?> | |||||
<div class="form-group field-user-prix_libre"> | |||||
<label class="control-label col-sm-2" for=""></label> | |||||
<div class="col-sm-6"> | |||||
<?= Html::submitButton('Valider', ['class' => 'btn btn-primary']) ?> | |||||
</div> | |||||
</div> | </div> | ||||
<?php ActiveForm::end(); ?> | |||||
<div class="clr"></div> | <div class="clr"></div> | ||||
</div> | </div> | ||||
<?= Html::a('Hors-ligne',['etablissement/update']); ?> | <?= Html::a('Hors-ligne',['etablissement/update']); ?> | ||||
</span> | </span> | ||||
<?php endif; ?> | <?php endif; ?> | ||||
<div class="clr"></div> | <div class="clr"></div> | ||||
<?php $etat_paiement_etablissement = Yii::$app->user->identity->etatPaiementEtablissement(); ?> | <?php $etat_paiement_etablissement = Yii::$app->user->identity->etatPaiementEtablissement(); ?> |
</h3> | </h3> | ||||
</div> | </div> | ||||
<div class="panel-body"> | <div class="panel-body"> | ||||
<div class="col-md-6 mois-en-cours"> | |||||
<div class="col-md-12"> | |||||
<?php if(is_null($etablissement->prix_libre)): ?> | |||||
<h2>Prix libre non défini</h2> | |||||
<p>Le modèle économique de <em>La boîte à pain</em> est basé sur un système de prix libre. <?= Html::a('En savoir plus',['etablissement/facturation']); ?></p> | |||||
<?php else: ?> | |||||
<h2><?= $etablissement->getPrixLibre() ?> / mois <?= Html::a('Modifier',['etablissement/facturation'],['class' => 'btn btn-xs btn-primary']) ?></h2> | |||||
<?php endif; ?> | |||||
</div> | |||||
<!--<div class="col-md-6 mois-en-cours"> | |||||
<h2>Chiffre d'affaire<br />du mois en cours</h2> | <h2>Chiffre d'affaire<br />du mois en cours</h2> | ||||
<div class="montant"><span><?= number_format($etablissement->getCA(date('Y-m')), 2); ?> €</span></div> | <div class="montant"><span><?= number_format($etablissement->getCA(date('Y-m')), 2); ?> €</span></div> | ||||
</div> | </div> | ||||
<h2>Participation<br /><em>La boîte à pain</em> (2%)</h2> | <h2>Participation<br /><em>La boîte à pain</em> (2%)</h2> | ||||
<div class="montant"><span><?php if($montant): echo number_format($montant,2).' €' ; else: echo 'Gratuit' ; endif; ?></span></div> | <div class="montant"><span><?php if($montant): echo number_format($montant,2).' €' ; else: echo 'Gratuit' ; endif; ?></span></div> | ||||
</div> | </div> | ||||
<div class="clr"></div> | |||||
<div class="clr"></div>--> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> |
/* facturation */ | /* facturation */ | ||||
/* line 1145, ../sass/screen.scss */ | /* line 1145, ../sass/screen.scss */ | ||||
#estimation-facture { | #estimation-facture { | ||||
text-align: center; | |||||
margin-bottom: 30px; | |||||
padding-bottom: 20px; | |||||
padding: 20px; | |||||
background-color: #F9F9F9; | background-color: #F9F9F9; | ||||
} | } | ||||
/* line 1151, ../sass/screen.scss */ | |||||
/* line 1149, ../sass/screen.scss */ | |||||
#estimation-facture h2 { | #estimation-facture h2 { | ||||
font-family: "myriadpro-it"; | font-family: "myriadpro-it"; | ||||
} | } | ||||
/* line 1155, ../sass/screen.scss */ | |||||
/* line 1153, ../sass/screen.scss */ | |||||
#estimation-facture .montant span { | #estimation-facture .montant span { | ||||
font-size: 25px; | font-size: 25px; | ||||
color: white; | color: white; | ||||
padding-top: 7px; | padding-top: 7px; | ||||
font-family: "myriadpro-regular"; | font-family: "myriadpro-regular"; | ||||
} | } | ||||
/* line 1164, ../sass/screen.scss */ | |||||
#estimation-facture label { | |||||
text-transform: uppercase; | |||||
font-family: "myriadpro-light"; | |||||
font-size: 20px; | |||||
} | |||||
/* line 1169, ../sass/screen.scss */ | |||||
#estimation-facture label span { | |||||
font-size: 16px; | |||||
} | |||||
/* line 1174, ../sass/screen.scss */ | |||||
#estimation-facture #etablissement-prix_libre { | |||||
width: 100px; | |||||
height: 60px; | |||||
font-size: 30px; | |||||
padding: 10px; | |||||
text-align: center; | |||||
} |
/* facturation */ | /* facturation */ | ||||
#estimation-facture { | #estimation-facture { | ||||
text-align: center ; | |||||
margin-bottom: 30px ; | |||||
padding-bottom: 20px ; | |||||
padding: 20px ; | |||||
background-color: #F9F9F9 ; | background-color: #F9F9F9 ; | ||||
h2 { | h2 { | ||||
font-family: 'myriadpro-it' ; | font-family: 'myriadpro-it' ; | ||||
} | } | ||||
font-family: 'myriadpro-regular' ; | font-family: 'myriadpro-regular' ; | ||||
} | } | ||||
} | } | ||||
label { | |||||
text-transform: uppercase ; | |||||
font-family: "myriadpro-light" ; | |||||
font-size: 20px ; | |||||
span { | |||||
font-size: 16px ; | |||||
} | |||||
} | |||||
#etablissement-prix_libre { | |||||
width: 100px ; | |||||
height: 60px ; | |||||
font-size: 30px ; | |||||
padding: 10px ; | |||||
text-align: center ; | |||||
} | |||||
} | } |
[['description'], 'string'], | [['description'], 'string'], | ||||
[['solde_negatif', 'credit_pain','actif'], 'boolean'], | [['solde_negatif', 'credit_pain','actif'], 'boolean'], | ||||
[['nom', 'siret', 'logo', 'photo', 'code_postal', 'ville','code'], 'string', 'max' => 255], | [['nom', 'siret', 'logo', 'photo', 'code_postal', 'ville','code'], 'string', 'max' => 255], | ||||
['prix_libre','double'], | |||||
['prix_libre','required'], | |||||
['prix_libre', 'compare', 'compareValue' => 0, 'operator' => '>=', 'type' => 'number','message' => 'Prix libre doit être supérieur ou égal à 0'], | |||||
]; | ]; | ||||
} | } | ||||
return false ; | return false ; | ||||
} | } | ||||
public function getPrixLibre() | |||||
{ | |||||
if(!is_null($this->prix_libre)) | |||||
{ | |||||
return number_format($this->prix_libre, 2, ',', false).' €' ; | |||||
} | |||||
} | |||||
} | } |
'password_old' => 'Ancien mot de passe', | 'password_old' => 'Ancien mot de passe', | ||||
'password_new' => 'Nouveau mot de passe', | 'password_new' => 'Nouveau mot de passe', | ||||
'password_new_confirm' => 'Confirmation du nouveau mot de passe', | 'password_new_confirm' => 'Confirmation du nouveau mot de passe', | ||||
'prix_libre' => 'Prix libre', | |||||
]; | ]; | ||||
} | } | ||||
<?php | |||||
use yii\db\Migration; | |||||
use yii\db\Schema; | |||||
class m170517_073105_add_champs_prix_libre_user extends Migration | |||||
{ | |||||
public function up() | |||||
{ | |||||
$this->addColumn('user', 'prix_libre', Schema::TYPE_FLOAT.' DEFAULT NULL') ; | |||||
} | |||||
public function down() | |||||
{ | |||||
$this->dropColumn('user', 'prix_libre') ; | |||||
} | |||||
} |
<?php | |||||
use yii\db\Migration; | |||||
use yii\db\Schema; | |||||
class m170517_084318_correction_champs_prix_libre extends Migration | |||||
{ | |||||
public function up() | |||||
{ | |||||
$this->dropColumn('user', 'prix_libre') ; | |||||
$this->addColumn('etablissement', 'prix_libre', Schema::TYPE_FLOAT.' DEFAULT NULL') ; | |||||
} | |||||
public function down() | |||||
{ | |||||
$this->dropColumn('etablissement', 'prix_libre') ; | |||||
} | |||||
} |
<h2>8. Redevances d'utilisation du Site</h2> | <h2>8. Redevances d'utilisation du Site</h2> | ||||
<p>La création d’un compte et l’utilisation de la partie du Site réservée aux Boulangers | <p>La création d’un compte et l’utilisation de la partie du Site réservée aux Boulangers | ||||
implique le paiement mensuel par les Boulangers d’un montant équivalent à deux (2) % | |||||
du chiffre d’affaires mensuel réalisé à partir des commandes enregistrées sur le Site. | |||||
La Société émettra à l’issue de chaque mois une facture au Boulanger, payable | |||||
par virement bancaire, paypal ou par chèque dans les trente (30) jours à compter | |||||
implique le paiement mensuel par les Boulangers d'un montant défini par eux-même dans | |||||
la section Facturation. Si ce montant est supérieur à 0€, la Société émettra à l’issue | |||||
de chaque mois une facture au Boulanger, payable | |||||
par virement bancaire ou par chèque dans les trente (30) jours à compter | |||||
de la date d’émission de la facture. Tout défaut ou retard de paiement emportera | de la date d’émission de la facture. Tout défaut ou retard de paiement emportera | ||||
immédiatement application de pénalités de retard à un taux qui est de trois fois | immédiatement application de pénalités de retard à un taux qui est de trois fois | ||||
le taux d’intérêt légal appliqué par la Banque Centrale Européenne (B.C.E) à | le taux d’intérêt légal appliqué par la Banque Centrale Européenne (B.C.E) à |
<h4 class="modal-title" id="myModalLabel">Tarifs</h4> | <h4 class="modal-title" id="myModalLabel">Tarifs</h4> | ||||
</div> | </div> | ||||
<div class="modal-body"> | <div class="modal-body"> | ||||
<div class="alert alert-warning"><em>La boîte à pain</em> fonctionne grâce à un système de <strong>facturation mensuelle</strong> basée | |||||
sur le chiffre d'affaire réalisé à partir des commandes enregistrées sur la plateforme. Fonctionner ainsi permet de faire contribuer chaque | |||||
boulangerie à la hauteur de son utilisation de la plateforme.</div> | |||||
<table class="table table-bordered"> | |||||
<thead> | |||||
<tr> | |||||
<th>Chiffre d'affaire</th> | |||||
<th>Prix</th> | |||||
</tr> | |||||
</thead> | |||||
<tbody> | |||||
<tr> | |||||
<td>< 500 €</td> | |||||
<td> | |||||
<strong>Gratuit</strong> | |||||
<div class="exemple">Cette tranche vous permet de tester le site sans frais.</div> | |||||
</td> | |||||
</tr> | |||||
<tr> | |||||
<td>>= 500 €</td> | |||||
<td> | |||||
<strong>2 %</strong> du chiffre d'affaire TTC<br /> | |||||
<div class="exemple">Exemple : si pour un mois donné, vous avez comptabilisé <em>2500 € TTC</em> de chiffre d'affaire réalisé sur la plateforme, | |||||
vous recevrez une facture d'un montant de <em>50 € TTC</em> pour ce mois.</div> | |||||
</td> | |||||
</tr> | |||||
</tbody> | |||||
</table> | |||||
<div class="alert alert-warning"><em>La boîte à pain</em> fonctionne grâce à un système de <strong>prix libre</strong>. | |||||
Chaque producteur définit lui-même le prix mensuel de son abonnement à la plateforme, selon son intérêt et le soutien qu'il | |||||
veut apporter.<br /><br /> | |||||
Ce montant est modifiable à tout moment dans la section <em>Facturation</em> de l'interface d'administration.</div> | |||||
</div> | </div> | ||||
<div class="modal-footer"> | <div class="modal-footer"> | ||||
<button type="button" class="btn btn-default" data-dismiss="modal">Fermer</button> | <button type="button" class="btn btn-default" data-dismiss="modal">Fermer</button> |
</ul> | </ul> | ||||
<div class="prix"> | <div class="prix"> | ||||
<span><a data-toggle="modal" data-target="#modal-tarifs" href="javascript:void(0);">Voir les tarifs</a></span> | |||||
<span><a data-toggle="modal" data-target="#modal-tarifs" href="javascript:void(0);">Prix libre</a></span> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> |
<?= $form->field($model, 'siret') ?> | <?= $form->field($model, 'siret') ?> | ||||
<?= $form->field($model, 'code_postal') ?> | <?= $form->field($model, 'code_postal') ?> | ||||
<?= $form->field($model, 'ville') ?> | <?= $form->field($model, 'ville') ?> | ||||
<?= $form->field($model, 'cgv')->checkbox()->label('J\'accepte les <a class="btn btn-xs btn-default" data-toggle="modal" data-target="#modal-cgv" href="javascript:void(0);">conditions générales de service</a> et les <a class="btn btn-xs btn-default" data-toggle="modal" data-target="#modal-tarifs" href="javascript:void(0);">conditions tarifaires</a>.') ?> | |||||
<?= $form->field($model, 'cgv')->checkbox()->label('J\'accepte les <a class="btn btn-xs btn-default" data-toggle="modal" data-target="#modal-cgv" href="javascript:void(0);">conditions générales de service</a> et les <a class="btn btn-xs btn-default" data-toggle="modal" data-target="#modal-tarifs" href="javascript:void(0);">conditions tarifaires</a> (prix libre).') ?> | |||||
</div> | </div> | ||||
<div id="champs-client"> | <div id="champs-client"> | ||||
<?= $form->field($model, 'id_etablissement')->dropDownList($data_etablissements_dispos, ['prompt' => '--','encode' => false,'options' => $options_etablissements_dispos]) ?> | <?= $form->field($model, 'id_etablissement')->dropDownList($data_etablissements_dispos, ['prompt' => '--','encode' => false,'options' => $options_etablissements_dispos]) ?> |