Browse Source

Prix libre

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.
prodstable
keun 7 years ago
parent
commit
f1438f7964
16 changed files with 167 additions and 86 deletions
  1. +10
    -1
      backend/controllers/EtablissementController.php
  2. +7
    -27
      backend/views/etablissement-admin/index.php
  3. +37
    -13
      backend/views/etablissement/facturation.php
  4. +1
    -0
      backend/views/layouts/main.php
  5. +12
    -2
      backend/views/site/index.php
  6. BIN
      backend/web/.sass-cache/c8fef7d48da4dc7f024edc2b0fada9d8d6de5dac/screen.scssc
  7. +21
    -5
      backend/web/css/screen.css
  8. +20
    -4
      backend/web/sass/screen.scss
  9. +12
    -0
      common/models/Etablissement.php
  10. +1
    -0
      common/models/User.php
  11. +17
    -0
      console/migrations/m170517_073105_add_champs_prix_libre_user.php
  12. +19
    -0
      console/migrations/m170517_084318_correction_champs_prix_libre.php
  13. +4
    -4
      frontend/views/site/_cgv_content.php
  14. +4
    -28
      frontend/views/site/_tarifs_boulanger.php
  15. +1
    -1
      frontend/views/site/index.php
  16. +1
    -1
      frontend/views/site/signup.php

+ 10
- 1
backend/controllers/EtablissementController.php View File



$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
]); ]);
} }

+ 7
- 27
backend/views/etablissement-admin/index.php View File

} }
], ],
[ [
'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) {

+ 37
- 13
backend/views/etablissement/facturation.php View File

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 />
&RightArrow; S'il est inférieur à 500€, rien n'est facturé. <br />
&RightArrow; 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>



+ 1
- 0
backend/views/layouts/main.php View File

<?= 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(); ?>

+ 12
- 2
backend/views/site/index.php View File

</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>

BIN
backend/web/.sass-cache/c8fef7d48da4dc7f024edc2b0fada9d8d6de5dac/screen.scssc View File


+ 21
- 5
backend/web/css/screen.css View File

/* 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;
}

+ 20
- 4
backend/web/sass/screen.scss View File

/* 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 ;
}
} }

+ 12
- 0
common/models/Etablissement.php View File

[['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).' €' ;
}
}
} }

+ 1
- 0
common/models/User.php View File

'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',
]; ];
} }

+ 17
- 0
console/migrations/m170517_073105_add_champs_prix_libre_user.php View File

<?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') ;
}
}

+ 19
- 0
console/migrations/m170517_084318_correction_champs_prix_libre.php View File

<?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') ;
}

}

+ 4
- 4
frontend/views/site/_cgv_content.php View File



<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) à

+ 4
- 28
frontend/views/site/_tarifs_boulanger.php View File

<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>&lt; 500 €</td>
<td>
<strong>Gratuit</strong>
<div class="exemple">Cette tranche vous permet de tester le site sans frais.</div>
</td>
</tr>
<tr>
<td>&gt;= 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>

+ 1
- 1
frontend/views/site/index.php View File

</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>

+ 1
- 1
frontend/views/site/signup.php View File

<?= $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]) ?>

Loading…
Cancel
Save