@@ -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', [ |
@@ -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 ; | |||
@@ -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> |
@@ -1,2 +1,4 @@ | |||
main-local.php | |||
params-local.php | |||
payplug/*.key |
@@ -59,11 +59,6 @@ return [ | |||
'httpOnly' => true, | |||
], | |||
], | |||
'request' => [ | |||
'parsers' => [ | |||
'application/json' => 'yii\web\JsonParser', | |||
] | |||
], | |||
'cache' => [ | |||
'class' => 'yii\caching\FileCache', | |||
], |
@@ -0,0 +1,2 @@ | |||
Order deny, allow | |||
Deny from all |
@@ -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 '' ; | |||
} | |||
} | |||
@@ -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": "*", |
@@ -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", |
@@ -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') ; | |||
} | |||
} |
@@ -77,6 +77,11 @@ return [ | |||
'class' => 'producer\components\ProducerView', | |||
], | |||
'urlManager' => $common_config_main['components']['urlManagerProducer'], | |||
'request' => [ | |||
'parsers' => [ | |||
'application/json' => 'yii\web\JsonParser', | |||
] | |||
], | |||
], | |||
'params' => $params, | |||
]; |
@@ -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' ; | |||
} | |||
} | |||
} |
@@ -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 | |||
]) ; | |||
} | |||
} | |||
?> |
@@ -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', | |||
]; | |||
} | |||
} |
@@ -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> |
@@ -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, |
@@ -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', |
@@ -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) | |||
@@ -0,0 +1,13 @@ | |||
.credit-add { | |||
.form { | |||
max-width: 250px ; | |||
margin: 0px auto ; | |||
text-align: center ; | |||
label { | |||
margin-bottom: 15px ; | |||
color: gray ; | |||
} | |||
} | |||
} |
@@ -42,4 +42,5 @@ termes. | |||
@import "order/_form.scss"; | |||
@import "order/_history.scss"; | |||
@import "order/_order.scss"; | |||
@import "credit/_add.scss"; | |||
@import "_responsive.scss"; |
@@ -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'), |
@@ -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'), |
@@ -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" | |||
} | |||
] |