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
@@ -89,9 +89,18 @@ class EtablissementController extends BackendController | |||
$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', [ | |||
'datas_factures' => $datas_factures, | |||
'etablissement' => $etablissement | |||
'etablissement' => $etablissement, | |||
'alert_prix_libre' => (isset($alert_prix_libre)) ? true : false | |||
]); | |||
} | |||
@@ -99,39 +99,19 @@ $this->params['breadcrumbs'][] = $this->title; | |||
} | |||
], | |||
[ | |||
'attribute' => 'Facture', | |||
'label' => 'Facture mois dernier', | |||
'attribute' => 'Prix libre', | |||
'label' => 'Prix libre', | |||
'format' => 'raw', | |||
'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', | |||
'label' => 'Mois en cours', | |||
'label' => 'CA mois en cours', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
@@ -4,6 +4,7 @@ use yii\helpers\Html; | |||
use yii\grid\GridView; | |||
use common\models\User ; | |||
use common\models\Etablissement ; | |||
use yii\bootstrap\ActiveForm; | |||
$this->title = 'Facturation'; | |||
$this->params['breadcrumbs'][] = 'Administration' ; | |||
@@ -13,21 +14,44 @@ $this->params['breadcrumbs'][] = $this->title; | |||
<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> | |||
<?php ActiveForm::end(); ?> | |||
<div class="clr"></div> | |||
</div> | |||
@@ -174,6 +174,7 @@ AppAsset::register($this); | |||
<?= Html::a('Hors-ligne',['etablissement/update']); ?> | |||
</span> | |||
<?php endif; ?> | |||
<div class="clr"></div> | |||
<?php $etat_paiement_etablissement = Yii::$app->user->identity->etatPaiementEtablissement(); ?> |
@@ -164,7 +164,17 @@ $this->title = 'Tableau de bord'; | |||
</h3> | |||
</div> | |||
<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> | |||
<div class="montant"><span><?= number_format($etablissement->getCA(date('Y-m')), 2); ?> €</span></div> | |||
</div> | |||
@@ -174,7 +184,7 @@ $this->title = 'Tableau de bord'; | |||
<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> | |||
<div class="clr"></div> | |||
<div class="clr"></div>--> | |||
</div> | |||
</div> | |||
</div> |
@@ -1131,16 +1131,14 @@ a:hover, a:focus, a:active { | |||
/* facturation */ | |||
/* line 1145, ../sass/screen.scss */ | |||
#estimation-facture { | |||
text-align: center; | |||
margin-bottom: 30px; | |||
padding-bottom: 20px; | |||
padding: 20px; | |||
background-color: #F9F9F9; | |||
} | |||
/* line 1151, ../sass/screen.scss */ | |||
/* line 1149, ../sass/screen.scss */ | |||
#estimation-facture h2 { | |||
font-family: "myriadpro-it"; | |||
} | |||
/* line 1155, ../sass/screen.scss */ | |||
/* line 1153, ../sass/screen.scss */ | |||
#estimation-facture .montant span { | |||
font-size: 25px; | |||
color: white; | |||
@@ -1152,3 +1150,21 @@ a:hover, a:focus, a:active { | |||
padding-top: 7px; | |||
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; | |||
} |
@@ -1143,11 +1143,9 @@ a { | |||
/* facturation */ | |||
#estimation-facture { | |||
text-align: center ; | |||
margin-bottom: 30px ; | |||
padding-bottom: 20px ; | |||
padding: 20px ; | |||
background-color: #F9F9F9 ; | |||
h2 { | |||
font-family: 'myriadpro-it' ; | |||
} | |||
@@ -1162,4 +1160,22 @@ a { | |||
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 ; | |||
} | |||
} |
@@ -57,6 +57,10 @@ class Etablissement extends \yii\db\ActiveRecord | |||
[['description'], 'string'], | |||
[['solde_negatif', 'credit_pain','actif'], 'boolean'], | |||
[['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'], | |||
]; | |||
} | |||
@@ -242,4 +246,12 @@ class Etablissement extends \yii\db\ActiveRecord | |||
return false ; | |||
} | |||
public function getPrixLibre() | |||
{ | |||
if(!is_null($this->prix_libre)) | |||
{ | |||
return number_format($this->prix_libre, 2, ',', false).' €' ; | |||
} | |||
} | |||
} |
@@ -305,6 +305,7 @@ class User extends ActiveRecord implements IdentityInterface | |||
'password_old' => 'Ancien mot de passe', | |||
'password_new' => 'Nouveau mot de passe', | |||
'password_new_confirm' => 'Confirmation du nouveau mot de passe', | |||
'prix_libre' => 'Prix libre', | |||
]; | |||
} | |||
@@ -0,0 +1,17 @@ | |||
<?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') ; | |||
} | |||
} |
@@ -0,0 +1,19 @@ | |||
<?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') ; | |||
} | |||
} |
@@ -63,10 +63,10 @@ | |||
<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 | |||
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 | |||
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) à |
@@ -7,34 +7,10 @@ | |||
<h4 class="modal-title" id="myModalLabel">Tarifs</h4> | |||
</div> | |||
<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 class="modal-footer"> | |||
<button type="button" class="btn btn-default" data-dismiss="modal">Fermer</button> |
@@ -66,7 +66,7 @@ $this->title = 'Plateforme de réservation de pain'; | |||
</ul> | |||
<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> |
@@ -42,7 +42,7 @@ $this->params['breadcrumbs'][] = $this->title; | |||
<?= $form->field($model, 'siret') ?> | |||
<?= $form->field($model, 'code_postal') ?> | |||
<?= $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 id="champs-client"> | |||
<?= $form->field($model, 'id_etablissement')->dropDownList($data_etablissements_dispos, ['prompt' => '--','encode' => false,'options' => $options_etablissements_dispos]) ?> |