Browse Source

Merge branch 'feature/paiement_en_ligne' into dev

refactoring
Guillaume Bourgeois 5 years ago
parent
commit
cb28b67cf2
23 changed files with 629 additions and 117 deletions
  1. +6
    -1
      backend/controllers/ProducerController.php
  2. +1
    -1
      backend/models/CreditForm.php
  3. +112
    -80
      backend/views/producer/update.php
  4. +2
    -0
      common/config/.gitignore
  5. +0
    -5
      common/config/main.php
  6. +2
    -0
      common/config/payplug/.htaccess
  7. +47
    -2
      common/models/Producer.php
  8. +2
    -1
      composer.json
  9. +48
    -2
      composer.lock
  10. +16
    -0
      console/migrations/m190118_084149_add_field_online_payment.php
  11. +5
    -0
      producer/config/main.php
  12. +178
    -0
      producer/controllers/CreditController.php
  13. +0
    -22
      producer/controllers/SiteController.php
  14. +70
    -0
      producer/models/CreditForm.php
  15. +57
    -0
      producer/views/credit/add.php
  16. +4
    -0
      producer/views/credit/history.php
  17. +3
    -3
      producer/views/layouts/main.php
  18. +12
    -0
      producer/web/css/screen.css
  19. +13
    -0
      producer/web/sass/credit/_add.scss
  20. +1
    -0
      producer/web/sass/screen.scss
  21. +1
    -0
      vendor/composer/autoload_namespaces.php
  22. +1
    -0
      vendor/composer/autoload_psr4.php
  23. +48
    -0
      vendor/composer/installed.json

+ 6
- 1
backend/controllers/ProducerController.php View File

@@ -91,6 +91,8 @@ class ProducerController extends BackendController
{
$request = Yii::$app->request;
$model = $this->findModel(Producer::getId());
$model->secret_key_payplug = $model->getSecretKeyPayplug() ;
$logoFilenameOld = $model->logo;
$photoFilenameOld = $model->photo;

@@ -109,7 +111,10 @@ class ProducerController extends BackendController
$model->photo = '';
$model->save();
}

$model->saveSecretKeyPayplug() ;
Yii::$app->getSession()->setFlash('success', 'Paramètres mis à jour.');
return $this->redirect(['update', 'id' => $model->id, 'edit_ok' => true]);
} else {
return $this->render('update', [

+ 1
- 1
backend/models/CreditForm.php View File

@@ -42,7 +42,7 @@ use Yii;
use yii\base\Model;
use common\models\CreditHistory ;
use common\models\User ;
use common\models\Prtoducer ;
use common\models\Producer ;
use common\models\UserProducer ;
use common\helpers\Mail ;


+ 112
- 80
backend/views/producer/update.php View File

@@ -49,89 +49,121 @@ $this->addBreadcrumb($this->getTitle()) ;
<div class="user-form">
<?php $form = ActiveForm::begin(); ?>
<div class="">
<?= $form->field($model, 'active')
->dropDownList([
0 => 'Non',
1 => 'Oui'
], [])
->label('Activer le producteur')
->hint('Activez cette option pour rendre votre établissement visible à vos clients.') ; ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'type') ?>
<?= $form->field($model, 'description')
->textarea(['rows' => 6])
->hint('Affiché sur la page d\'accueil') ?>
<?= $form->field($model, 'postcode') ?>
<?= $form->field($model, 'city') ?>
<?= $form->field($model, 'code')->hint("Saisissez ce champs si vous souhaitez protéger l'accès à votre boutique par un code, sinon laissez-le vide.<br />"
. "Ce code est à communiquer à vos client pour qu'ils puissent ajouter votre établissement à leur tableau de bord.<br />"
. "<a href=\"".Yii::$app->urlManager->createUrl(['communicate/index'])."\">Cliquez ici</a> pour télécharger un mode d'emploi comprenant ce code à distribuer à vos clients.") ?>

<?= $form->field($model, 'order_delay')
->dropDownList([
1 => '1 jour',
2 => '2 jours',
3 => '3 jours',
4 => '4 jours',
5 => '5 jours',
6 => '6 jours',
7 => '7 jours',
], [])
->hint('Si <strong>1 jour</strong> est sélectionné, le client pourra commander jusqu\'à la veille de la production.<br />'
. 'Si <strong>2 jours</strong> est sélectionné, le client pourra commander jusqu\'à l\'avant-veille de la production, etc.') ; ?>
<?= $form->field($model, 'order_deadline')
->dropDownList([
24 => 'Minuit',
23 => '23h',
22 => '22h',
21 => '21h',
20 => '20h',
19 => '19h',
18 => '18h',
17 => '17h',
16 => '16h',
15 => '15h',
14 => '14h',
13 => '13h',
12 => '12h',
11 => '11h',
10 => '10h',
9 => '9h',
8 => '8h',
], [])
->hint('Heure limite jusqu\'à laquelle les clients peuvent commander pour satisfaire le délai de commande.<br />'
. 'Par exemple, si <strong>2 jours</strong> est sélectionné dans le délai de commande, le client devra commander l\'avant-veille de la production avant l\'heure précisée ici.') ; ?>
<?= $form->field($model, 'credit')
->dropDownList([
0 => 'Non',
1 => 'Oui',
], [])
->label('Activer le système de Crédit')
->hint('Le système de Crédit permet à vos clients d\'avoir un compte prépayé sur le site <em>La boîte à pain</em>.<br />'
. 'Ils créditent leur compte en vous donnant la somme de leur choix et c\'est ensuite à vous de '.Html::a('mettre à jour', ['user/index']).' leur Crédit en ligne.<br />'
. 'Ceci fait, les clients paient leur commande directement via leur Crédit.') ; ?>
<?= $form->field($model, 'credit_limit_reminder',[
'template' => '{label}<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>{hint}',
])
->hint("Une relance est envoyé au client dès que ce seuil est dépassé.") ; ?>
<?= $form->field($model, 'photo')->fileInput() ?>
<?php
if (strlen($model->photo)) {
$base_url = Yii::$app->urlManagerProducer->baseUrl ;
echo '<img src="'.$base_url.'/uploads/' . $model->photo . '" width="400px" /><br />';
echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label><br /><br />';
}
?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Général</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'active')
->dropDownList([
0 => 'Non',
1 => 'Oui'
], [])
->label('En ligne')
->hint('Activez cette option pour rendre votre établissement visible à vos clients.') ; ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'type') ?>
<?= $form->field($model, 'description')
->textarea(['rows' => 6])
->hint('Affiché sur la page d\'accueil') ?>
<?= $form->field($model, 'postcode') ?>
<?= $form->field($model, 'city') ?>

<?= $form->field($model, 'code')->hint("Saisissez ce champs si vous souhaitez protéger l'accès à votre boutique par un code, sinon laissez-le vide.<br />"
. "Ce code est à communiquer à vos client pour qu'ils puissent ajouter votre établissement à leur tableau de bord.<br />"
. "<a href=\"".Yii::$app->urlManager->createUrl(['communicate/index'])."\">Cliquez ici</a> pour télécharger un mode d'emploi comprenant ce code à distribuer à vos clients.") ?>
<?= $form->field($model, 'photo')->fileInput() ?>
<?php
if (strlen($model->photo)) {
$base_url = Yii::$app->urlManagerProducer->baseUrl ;
echo '<img src="'.$base_url.'/uploads/' . $model->photo . '" width="400px" /><br />';
echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label><br /><br />';
}
?>
</div>
</div>
<?= $form->field($model, 'order_infos')
->textarea(['rows' => 6])
->hint('Affichées au client lors de sa commande')?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Prise de commande</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'order_delay')
->dropDownList([
1 => '1 jour',
2 => '2 jours',
3 => '3 jours',
4 => '4 jours',
5 => '5 jours',
6 => '6 jours',
7 => '7 jours',
], [])
->hint('Si <strong>1 jour</strong> est sélectionné, le client pourra commander jusqu\'à la veille de la production.<br />'
. 'Si <strong>2 jours</strong> est sélectionné, le client pourra commander jusqu\'à l\'avant-veille de la production, etc.') ; ?>
<?= $form->field($model, 'order_deadline')
->dropDownList([
24 => 'Minuit',
23 => '23h',
22 => '22h',
21 => '21h',
20 => '20h',
19 => '19h',
18 => '18h',
17 => '17h',
16 => '16h',
15 => '15h',
14 => '14h',
13 => '13h',
12 => '12h',
11 => '11h',
10 => '10h',
9 => '9h',
8 => '8h',
], [])
->hint('Heure limite jusqu\'à laquelle les clients peuvent commander pour satisfaire le délai de commande.<br />'
. 'Par exemple, si <strong>2 jours</strong> est sélectionné dans le délai de commande, le client devra commander l\'avant-veille de la production avant l\'heure précisée ici.') ; ?>
<?= $form->field($model, 'order_infos')
->textarea(['rows' => 6])
->hint('Affichées au client lors de sa commande')?>
</div>
</div>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Crédit / paiement en ligne</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'credit')
->dropDownList([
0 => 'Non',
1 => 'Oui',
], [])
->label('Activer le système de Crédit')
->hint('Le système de Crédit permet à vos clients d\'avoir un compte prépayé sur le site <em>La boîte à pain</em>.<br />'
. 'Ils créditent leur compte en vous donnant la somme de leur choix et c\'est ensuite à vous de '.Html::a('mettre à jour', ['user/index']).' leur Crédit en ligne.<br />'
. 'Ceci fait, les clients paient leur commande directement via leur Crédit.') ; ?>

<?= $form->field($model, 'credit_limit_reminder',[
'template' => '{label}<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>{hint}',
])
->hint("Une relance est envoyé au client dès que ce seuil est dépassé.") ; ?>

<?= $form->field($model, 'online_payment')
->dropDownList([
0 => 'Non',
1 => 'Oui',
], [])
->label('Activer le paiement en ligne')
->hint('Le paiement en ligne permet à vos utilisateurs de recharger leur Crédit'
. ' via leur carte bancaire.') ; ?>
<?= $form->field($model, 'secret_key_payplug') ?>
</div>
</div>
<div class="form-group">
<?= Html::submitButton('Mettre à jour', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>

+ 2
- 0
common/config/.gitignore View File

@@ -1,2 +1,4 @@
main-local.php
params-local.php

payplug/*.key

+ 0
- 5
common/config/main.php View File

@@ -59,11 +59,6 @@ return [
'httpOnly' => true,
],
],
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
'cache' => [
'class' => 'yii\caching\FileCache',
],

+ 2
- 0
common/config/payplug/.htaccess View File

@@ -0,0 +1,2 @@
Order deny, allow
Deny from all

+ 47
- 2
common/models/Producer.php View File

@@ -55,9 +55,12 @@ use yii\helpers\Html;
* @property string $postcode
* @property string $city
* @property float credit_limit_reminder
* @property boolean online_payment
*/
class Producer extends ActiveRecordCommon
{
var $secret_key_payplug ;
/**
* @inheritdoc
*/
@@ -83,8 +86,8 @@ class Producer extends ActiveRecordCommon
$this->addError($attribute, 'Ce code est déjà utilisé par un autre producteur.');
}
}],
[['description', 'order_infos','slug'], 'string'],
[['negative_balance', 'credit', 'active'], 'boolean'],
[['description', 'order_infos','slug','secret_key_payplug'], 'string'],
[['negative_balance', 'credit', 'active','online_payment'], 'boolean'],
[['name', 'siret', 'logo', 'photo', 'postcode', 'city', 'code','type'], 'string', 'max' => 255],
[['free_price', 'credit_limit_reminder'], 'double'],
['free_price', 'compare', 'compareValue' => 0, 'operator' => '>=', 'type' => 'number', 'message' => 'Prix libre doit être supérieur ou égal à 0'],
@@ -116,6 +119,8 @@ class Producer extends ActiveRecordCommon
'slug' => 'Slug',
'type' => 'Type de producteur',
'credit_limit_reminder' => 'Seuil de crédit limite avant relance',
'online_payment' => 'Activer le paiement en ligne',
'secret_key_payplug' => 'Clé secrète Payplug'
];
}

@@ -400,6 +405,46 @@ class Producer extends ActiveRecordCommon
return $earliestDateOrder ;
}
/**
* Retourne le chemin vers le fichier contenant la clé secrète d'API de Payplug
*
* @return string
*/
public function getFilenameSecretKeyPayplug()
{
return '../../common/config/payplug/'.$this->id.'.key' ;
}
/**
* Enregistre la clé secrète d'API de Payplug dans un fichier
*/
public function saveSecretKeyPayplug()
{
if($this->online_payment) {
$handle = fopen($this->getFilenameSecretKeyPayplug(),"w");
fwrite($handle,$this->secret_key_payplug);
fclose($handle);
}
}
/**
* Retourne la clé secrète d'API de Payplug.
*
* @return string
*/
public function getSecretKeyPayplug()
{
$handle = fopen($this->getFilenameSecretKeyPayplug(), "r") ;
$filesize = filesize($this->getFilenameSecretKeyPayplug()) ;
if($handle && $filesize) {
$secretKey = fread($handle, $filesize);
fclose($handle);
return $secretKey ;
}
return '' ;
}

}

+ 2
- 1
composer.json View File

@@ -23,7 +23,8 @@
"kartik-v/yii2-mpdf": "dev-master",
"c006/yii2-paypal-ipn": "dev-master",
"yurkinx/yii2-image": "dev-master",
"dmstr/yii2-adminlte-asset": "^2.1"
"dmstr/yii2-adminlte-asset": "^2.1",
"payplug/payplug-php": "^2.5"
},
"require-dev": {
"yiisoft/yii2-codeception": "*",

+ 48
- 2
composer.lock View File

@@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "2e9a6a86294d914308fbf7224eb6353e",
"content-hash": "05a859eb0741bf9a3b81242b85b777c6",
"hash": "5eae43b75a894cf9e05c0139af939cec",
"content-hash": "24a00e67ce5bfd36a1a768c7a615e6a3",
"packages": [
{
"name": "2amigos/yii2-chartjs-widget",
@@ -939,6 +939,52 @@
],
"time": "2016-12-12 10:42:18"
},
{
"name": "payplug/payplug-php",
"version": "2.5.1",
"source": {
"type": "git",
"url": "https://github.com/payplug/payplug-php.git",
"reference": "b382d15065284adb1e054b33e7e8ad5490a891fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/payplug/payplug-php/zipball/b382d15065284adb1e054b33e7e8ad5490a891fb",
"reference": "b382d15065284adb1e054b33e7e8ad5490a891fb",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-openssl": "*",
"php": ">=5.3.0"
},
"require-dev": {
"phpdocumentor/phpdocumentor": "2.*",
"phpunit/phpunit": "4.6.*"
},
"type": "library",
"autoload": {
"psr-0": {
"Payplug\\": "lib/"
},
"psr-4": {
"Payplug\\": "lib/Payplug"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PayPlug",
"email": "support@payplug.com"
}
],
"description": "A simple PHP library for PayPlug public API.",
"homepage": "https://www.payplug.com",
"time": "2015-05-06 00:00:00"
},
{
"name": "rmrevin/yii2-fontawesome",
"version": "2.17.1",

+ 16
- 0
console/migrations/m190118_084149_add_field_online_payment.php View File

@@ -0,0 +1,16 @@
<?php

use yii\db\Migration;
use yii\db\Schema;

class m190118_084149_add_field_online_payment extends Migration {

public function up() {
$this->addColumn('producer', 'online_payment', Schema::TYPE_BOOLEAN) ;
}

public function down() {
$this->dropColumn('producer', 'online_payment') ;
}
}

+ 5
- 0
producer/config/main.php View File

@@ -77,6 +77,11 @@ return [
'class' => 'producer\components\ProducerView',
],
'urlManager' => $common_config_main['components']['urlManagerProducer'],
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
],
'params' => $params,
];

+ 178
- 0
producer/controllers/CreditController.php View File

@@ -0,0 +1,178 @@
<?php

/**
Copyright La boîte à pain (2018)

contact@laboiteapain.net

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
respectant les principes de diffusion des logiciels libres. Vous pouvez
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
sur le site "http://www.cecill.info".

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
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
titulaire des droits patrimoniaux et les concédants successifs.

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
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
avertis possédant des connaissances informatiques approfondies. Les
utilisateurs sont donc invités à charger et tester l'adéquation du
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é.

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
termes.
*/

namespace producer\controllers;

use common\models\CreditHistory ;
use producer\models\CreditForm ;
use common\models\User ;

class CreditController extends ProducerBaseController
{
/**
* @inheritdoc
*/
public function behaviors()
{
return [];
}
public function actions()
{
return [
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
];
}
/**
* Affiche l'historique du crédit client.
*
*/
public function actionHistory($returnPayment = '')
{
$searchModel = new CreditHistorySearch() ;
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$userProducer = UserProducer::searchOne([
'id_producer' => $this->getProducer()->id,
'id_user' => User::getCurrentId()
]) ;
if(strlen($returnPayment)) {
if($returnPayment == 'success') {
Yii::$app->getSession()->setFlash('success', "Paiement accepté : votre compte vient d'être crédité.");
}
if($returnPayment == 'cancel') {
Yii::$app->getSession()->setFlash('error', 'Paiement annulé');
}
}
return $this->render('history',[
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'creditUser' => $userProducer->credit
]) ;
}
public function actionAdd()
{
$producer = $this->getProducer() ;
if($producer->online_payment) {
\Payplug\Payplug::setSecretKey($producer->getSecretKeyPayplug());
$creditForm = new CreditForm ;

if ($creditForm->load(Yii::$app->request->post()) && $creditForm->validate()) {
$user = User::getCurrent() ;

$payment = \Payplug\Payment::create(array(
'amount' => (float) $creditForm->amount * 100,
'currency' => 'EUR',
'save_card' => false,
'customer' => array(
'email' => $user->email,
'first_name' => $user->name,
'last_name' => $user->lastname
),
'hosted_payment' => array(
'return_url' => Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/history', 'slug_producer' => $producer->slug, 'returnPayment' => 'success']),
'cancel_url' => Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/history', 'slug_producer' => $producer->slug, 'returnPayment' => 'cancel']),
),
'notification_url' => Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/payment-notifications', 'idUser' => $user->id, 'slug_producer' => $producer->slug]),
'metadata' => array(
'id_user' => $user->id
)
));

if($payment) {
$this->redirect($payment->hosted_payment->payment_url) ;
}
}

return $this->render('add', [
'creditForm' => $creditForm
]) ;
}
else {
throw new \yii\base\UserException('Cette option est désactivée chez ce producteur.');
}
}
/**
* Interface de notification suite aux actions effectuées sur Payplug.
*
* @param integer $idUser
*/
public function actionPaymentNotifications($idUser)
{
$producer = $this->getProducer() ;
\Payplug\Payplug::setSecretKey($producer->getSecretKeyPayplug());

$input = file_get_contents('php://input');
try {
$resource = \Payplug\Notification::treat($input);

if ($resource instanceof \Payplug\Resource\Payment
&& $resource->is_paid
) {
$creditHistory = new CreditHistory;
$creditHistory->id_user = $idUser;
$creditHistory->id_user_action = $idUser;
$creditHistory->id_producer = $producer->id ;
$creditHistory->type = CreditHistory::TYPE_CREDIT ;
$creditHistory->comment = '' ;
$creditHistory->amount = $resource->amount ;
$creditHistory->mean_payment = CreditHistory::MEAN_PAYMENT_CREDIT_CARD ;
$creditHistory->save();
} else if ($resource instanceof \Payplug\Resource\Refund) {
echo 'refund' ;
}
}
catch (\Payplug\Exception\PayplugException $exception) {
echo 'error' ;
}
}
}

+ 0
- 22
producer/controllers/SiteController.php View File

@@ -180,28 +180,6 @@ class SiteController extends ProducerBaseController
$this->redirect(['site/index']) ;
}
/**
* Affiche l'historique du crédit client.
*
*/
public function actionCreditHistory()
{
$searchModel = new CreditHistorySearch() ;
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$userProducer = UserProducer::searchOne([
'id_producer' => $this->getProducer()->id,
'id_user' => User::getCurrentId()
]) ;
return $this->render('credit_history',[
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'creditUser' => $userProducer->credit
]) ;
}
}

?>

+ 70
- 0
producer/models/CreditForm.php View File

@@ -0,0 +1,70 @@
<?php

/**
Copyright La boîte à pain (2018)

contact@laboiteapain.net

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
respectant les principes de diffusion des logiciels libres. Vous pouvez
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
sur le site "http://www.cecill.info".

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
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
titulaire des droits patrimoniaux et les concédants successifs.

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
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
avertis possédant des connaissances informatiques approfondies. Les
utilisateurs sont donc invités à charger et tester l'adéquation du
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é.

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
termes.
*/

namespace producer\models;

use Yii;
use yii\base\Model;

class CreditForm extends Model
{

public $amount ;

/**
* @inheritdoc
*/
public function rules()
{
return [
[['amount'], 'required'],
[['amount'], 'double'],
];
}

/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'amount' => 'Montant',
];
}

}

+ 57
- 0
producer/views/credit/add.php View File

@@ -0,0 +1,57 @@
<?php

/**
Copyright La boîte à pain (2018)

contact@laboiteapain.net

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
respectant les principes de diffusion des logiciels libres. Vous pouvez
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
sur le site "http://www.cecill.info".

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
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
titulaire des droits patrimoniaux et les concédants successifs.

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
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
avertis possédant des connaissances informatiques approfondies. Les
utilisateurs sont donc invités à charger et tester l'adéquation du
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é.

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
termes.
*/

use yii\helpers\Html;
use yii\widgets\ActiveForm;

$this->setTitle('Créditer mon compte');
$this->setPageTitle('Crédit mon compte');

?>

<div class="form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($creditForm, 'amount',[
'template' => '{label}<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>',
])->label('Quel montant souhaitez-vous créditer ?'); ?>

<div class="form-group">
<?= Html::submitButton( '<span class="glyphicon glyphicon-lock"></span> Payer sur Payplug', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>

producer/views/site/credit_history.php → producer/views/credit/history.php View File

@@ -43,6 +43,10 @@ $this->setPageTitle('Crédit');

?>

<?php if($this->context->getProducer()->online_payment): ?>
<?= Html::a('<span class="glyphicon glyphicon-credit-card"></span> Créditer mon compte', ['credit/add'], ['class' => 'btn btn-primary']); ?><br /><br />
<?php endif; ?>

<?= GridView::widget([
// 'filterModel' => $searchModel,
'dataProvider' => $dataProvider,

+ 3
- 3
producer/views/layouts/main.php View File

@@ -116,7 +116,7 @@ $producer = $this->context->getProducer() ;
?>
<div id="credit">
<span class="info"><a href="<?= Yii::$app->urlManagerFrontend->createAbsoluteUrl('site/credit'); ?>"><span class="text">Crédit </span><span class="glyphicon glyphicon-info-sign"></span></a></span>
<a href="<?= Yii::$app->urlManagerProducer->createUrl(['site/credit-history']); ?>"><span id="the-credit"><?= number_format($userProducer->credit, 2); ?> €</span></a>
<a href="<?= Yii::$app->urlManagerProducer->createUrl(['credit/history']); ?>"><span id="the-credit"><?= number_format($userProducer->credit, 2); ?> €</span></a>
</div>
<?php endif; ?>
<?php endif; ?>
@@ -173,9 +173,9 @@ $producer = $this->context->getProducer() ;
],
[
'label' => '<span class="glyphicon glyphicon-euro"></span> Crédit',
'url' => Yii::$app->urlManager->createUrl(['site/credit-history']),
'url' => Yii::$app->urlManager->createUrl(['credit/history']),
'visible' => !Yii::$app->user->isGuest && Producer::getConfig('credit'),
'active' => $this->getControllerAction() == 'site/credit-history',
'active' => $this->getControllerAction() == 'credit/history',
],
[
'label' => '<span class="glyphicon glyphicon-envelope"></span> Contact',

+ 12
- 0
producer/web/css/screen.css View File

@@ -1442,6 +1442,18 @@ termes.
color: gray;
}

/* line 3, ../sass/credit/_add.scss */
.credit-add .form {
max-width: 250px;
margin: 0px auto;
text-align: center;
}
/* line 8, ../sass/credit/_add.scss */
.credit-add .form label {
margin-bottom: 15px;
color: gray;
}

/**
Copyright La boîte à pain (2018)


+ 13
- 0
producer/web/sass/credit/_add.scss View File

@@ -0,0 +1,13 @@

.credit-add {
.form {
max-width: 250px ;
margin: 0px auto ;
text-align: center ;
label {
margin-bottom: 15px ;
color: gray ;
}
}
}

+ 1
- 0
producer/web/sass/screen.scss View File

@@ -42,4 +42,5 @@ termes.
@import "order/_form.scss";
@import "order/_history.scss";
@import "order/_order.scss";
@import "credit/_add.scss";
@import "_responsive.scss";

+ 1
- 0
vendor/composer/autoload_namespaces.php View File

@@ -9,6 +9,7 @@ return array(
'yii\\image\\' => array($vendorDir . '/yurkinx/yii2-image'),
'cebe\\gravatar\\' => array($vendorDir . '/cebe/yii2-gravatar'),
'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'),
'Payplug\\' => array($vendorDir . '/payplug/payplug-php/lib'),
'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
'Diff' => array($vendorDir . '/phpspec/php-diff/lib'),
'Behat\\Gherkin' => array($vendorDir . '/behat/gherkin/src'),

+ 1
- 0
vendor/composer/autoload_psr4.php View File

@@ -35,6 +35,7 @@ return array(
'Symfony\\Component\\BrowserKit\\' => array($vendorDir . '/symfony/browser-kit'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
'Payplug\\' => array($vendorDir . '/payplug/payplug-php/lib/Payplug'),
'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),

+ 48
- 0
vendor/composer/installed.json View File

@@ -4352,5 +4352,53 @@
"theme",
"yii2"
]
},
{
"name": "payplug/payplug-php",
"version": "2.5.1",
"version_normalized": "2.5.1.0",
"source": {
"type": "git",
"url": "https://github.com/payplug/payplug-php.git",
"reference": "b382d15065284adb1e054b33e7e8ad5490a891fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/payplug/payplug-php/zipball/b382d15065284adb1e054b33e7e8ad5490a891fb",
"reference": "b382d15065284adb1e054b33e7e8ad5490a891fb",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-openssl": "*",
"php": ">=5.3.0"
},
"require-dev": {
"phpdocumentor/phpdocumentor": "2.*",
"phpunit/phpunit": "4.6.*"
},
"time": "2015-05-06 00:00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-0": {
"Payplug\\": "lib/"
},
"psr-4": {
"Payplug\\": "lib/Payplug"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PayPlug",
"email": "support@payplug.com"
}
],
"description": "A simple PHP library for PayPlug public API.",
"homepage": "https://www.payplug.com"
}
]

Loading…
Cancel
Save