{ | { | ||||
$request = Yii::$app->request; | $request = Yii::$app->request; | ||||
$model = $this->findModel(Producer::getId()); | $model = $this->findModel(Producer::getId()); | ||||
$model->secret_key_payplug = $model->getSecretKeyPayplug() ; | |||||
$logoFilenameOld = $model->logo; | $logoFilenameOld = $model->logo; | ||||
$photoFilenameOld = $model->photo; | $photoFilenameOld = $model->photo; | ||||
$model->photo = ''; | $model->photo = ''; | ||||
$model->save(); | $model->save(); | ||||
} | } | ||||
$model->saveSecretKeyPayplug() ; | |||||
Yii::$app->getSession()->setFlash('success', 'Paramètres mis à jour.'); | |||||
return $this->redirect(['update', 'id' => $model->id, 'edit_ok' => true]); | return $this->redirect(['update', 'id' => $model->id, 'edit_ok' => true]); | ||||
} else { | } else { | ||||
return $this->render('update', [ | return $this->render('update', [ |
use yii\base\Model; | use yii\base\Model; | ||||
use common\models\CreditHistory ; | use common\models\CreditHistory ; | ||||
use common\models\User ; | use common\models\User ; | ||||
use common\models\Prtoducer ; | |||||
use common\models\Producer ; | |||||
use common\models\UserProducer ; | use common\models\UserProducer ; | ||||
use common\helpers\Mail ; | use common\helpers\Mail ; | ||||
<div class="user-form"> | <div class="user-form"> | ||||
<?php $form = ActiveForm::begin(); ?> | <?php $form = ActiveForm::begin(); ?> | ||||
<div class=""> | <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"> | <div class="form-group"> | ||||
<?= Html::submitButton('Mettre à jour', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> | <?= Html::submitButton('Mettre à jour', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> | ||||
</div> | </div> |
main-local.php | main-local.php | ||||
params-local.php | params-local.php | ||||
payplug/*.key |
'httpOnly' => true, | 'httpOnly' => true, | ||||
], | ], | ||||
], | ], | ||||
'request' => [ | |||||
'parsers' => [ | |||||
'application/json' => 'yii\web\JsonParser', | |||||
] | |||||
], | |||||
'cache' => [ | 'cache' => [ | ||||
'class' => 'yii\caching\FileCache', | 'class' => 'yii\caching\FileCache', | ||||
], | ], |
Order deny, allow | |||||
Deny from all |
* @property string $postcode | * @property string $postcode | ||||
* @property string $city | * @property string $city | ||||
* @property float credit_limit_reminder | * @property float credit_limit_reminder | ||||
* @property boolean online_payment | |||||
*/ | */ | ||||
class Producer extends ActiveRecordCommon | class Producer extends ActiveRecordCommon | ||||
{ | { | ||||
var $secret_key_payplug ; | |||||
/** | /** | ||||
* @inheritdoc | * @inheritdoc | ||||
*/ | */ | ||||
$this->addError($attribute, 'Ce code est déjà utilisé par un autre producteur.'); | $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], | [['name', 'siret', 'logo', 'photo', 'postcode', 'city', 'code','type'], 'string', 'max' => 255], | ||||
[['free_price', 'credit_limit_reminder'], 'double'], | [['free_price', 'credit_limit_reminder'], 'double'], | ||||
['free_price', 'compare', 'compareValue' => 0, 'operator' => '>=', 'type' => 'number', 'message' => 'Prix libre doit être supérieur ou égal à 0'], | ['free_price', 'compare', 'compareValue' => 0, 'operator' => '>=', 'type' => 'number', 'message' => 'Prix libre doit être supérieur ou égal à 0'], | ||||
'slug' => 'Slug', | 'slug' => 'Slug', | ||||
'type' => 'Type de producteur', | 'type' => 'Type de producteur', | ||||
'credit_limit_reminder' => 'Seuil de crédit limite avant relance', | 'credit_limit_reminder' => 'Seuil de crédit limite avant relance', | ||||
'online_payment' => 'Activer le paiement en ligne', | |||||
'secret_key_payplug' => 'Clé secrète Payplug' | |||||
]; | ]; | ||||
} | } | ||||
return $earliestDateOrder ; | 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 '' ; | |||||
} | |||||
} | } | ||||
"kartik-v/yii2-mpdf": "dev-master", | "kartik-v/yii2-mpdf": "dev-master", | ||||
"c006/yii2-paypal-ipn": "dev-master", | "c006/yii2-paypal-ipn": "dev-master", | ||||
"yurkinx/yii2-image": "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": { | "require-dev": { | ||||
"yiisoft/yii2-codeception": "*", | "yiisoft/yii2-codeception": "*", |
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", | ||||
"This file is @generated automatically" | "This file is @generated automatically" | ||||
], | ], | ||||
"hash": "2e9a6a86294d914308fbf7224eb6353e", | |||||
"content-hash": "05a859eb0741bf9a3b81242b85b777c6", | |||||
"hash": "5eae43b75a894cf9e05c0139af939cec", | |||||
"content-hash": "24a00e67ce5bfd36a1a768c7a615e6a3", | |||||
"packages": [ | "packages": [ | ||||
{ | { | ||||
"name": "2amigos/yii2-chartjs-widget", | "name": "2amigos/yii2-chartjs-widget", | ||||
], | ], | ||||
"time": "2016-12-12 10:42:18" | "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", | "name": "rmrevin/yii2-fontawesome", | ||||
"version": "2.17.1", | "version": "2.17.1", |
<?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') ; | |||||
} | |||||
} |
'class' => 'producer\components\ProducerView', | 'class' => 'producer\components\ProducerView', | ||||
], | ], | ||||
'urlManager' => $common_config_main['components']['urlManagerProducer'], | 'urlManager' => $common_config_main['components']['urlManagerProducer'], | ||||
'request' => [ | |||||
'parsers' => [ | |||||
'application/json' => 'yii\web\JsonParser', | |||||
] | |||||
], | |||||
], | ], | ||||
'params' => $params, | 'params' => $params, | ||||
]; | ]; |
<?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' ; | |||||
} | |||||
} | |||||
} |
$this->redirect(['site/index']) ; | $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 | |||||
]) ; | |||||
} | |||||
} | } | ||||
?> | ?> |
<?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', | |||||
]; | |||||
} | |||||
} |
<?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> |
?> | ?> | ||||
<?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([ | <?= GridView::widget([ | ||||
// 'filterModel' => $searchModel, | // 'filterModel' => $searchModel, | ||||
'dataProvider' => $dataProvider, | 'dataProvider' => $dataProvider, |
?> | ?> | ||||
<div id="credit"> | <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> | <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> | </div> | ||||
<?php endif; ?> | <?php endif; ?> | ||||
<?php endif; ?> | <?php endif; ?> | ||||
], | ], | ||||
[ | [ | ||||
'label' => '<span class="glyphicon glyphicon-euro"></span> Crédit', | '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'), | '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', | 'label' => '<span class="glyphicon glyphicon-envelope"></span> Contact', |
color: gray; | 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) | Copyright La boîte à pain (2018) | ||||
.credit-add { | |||||
.form { | |||||
max-width: 250px ; | |||||
margin: 0px auto ; | |||||
text-align: center ; | |||||
label { | |||||
margin-bottom: 15px ; | |||||
color: gray ; | |||||
} | |||||
} | |||||
} |
@import "order/_form.scss"; | @import "order/_form.scss"; | ||||
@import "order/_history.scss"; | @import "order/_history.scss"; | ||||
@import "order/_order.scss"; | @import "order/_order.scss"; | ||||
@import "credit/_add.scss"; | |||||
@import "_responsive.scss"; | @import "_responsive.scss"; |
'yii\\image\\' => array($vendorDir . '/yurkinx/yii2-image'), | 'yii\\image\\' => array($vendorDir . '/yurkinx/yii2-image'), | ||||
'cebe\\gravatar\\' => array($vendorDir . '/cebe/yii2-gravatar'), | 'cebe\\gravatar\\' => array($vendorDir . '/cebe/yii2-gravatar'), | ||||
'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'), | 'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'), | ||||
'Payplug\\' => array($vendorDir . '/payplug/payplug-php/lib'), | |||||
'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'), | 'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'), | ||||
'Diff' => array($vendorDir . '/phpspec/php-diff/lib'), | 'Diff' => array($vendorDir . '/phpspec/php-diff/lib'), | ||||
'Behat\\Gherkin' => array($vendorDir . '/behat/gherkin/src'), | 'Behat\\Gherkin' => array($vendorDir . '/behat/gherkin/src'), |
'Symfony\\Component\\BrowserKit\\' => array($vendorDir . '/symfony/browser-kit'), | 'Symfony\\Component\\BrowserKit\\' => array($vendorDir . '/symfony/browser-kit'), | ||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), | 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), | ||||
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), | '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\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), | ||||
'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), | 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), | ||||
'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), | 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), |
"theme", | "theme", | ||||
"yii2" | "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" | |||||
} | } | ||||
] | ] |