@@ -26,4 +26,5 @@ phpunit.phar | |||
# local phpunit config | |||
/phpunit.xml | |||
/vendor/**/.git | |||
/vendor/* | |||
*/.git |
@@ -0,0 +1,195 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.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 backend\controllers; | |||
use Yii; | |||
use common\models\User; | |||
use yii\web\NotFoundHttpException; | |||
use yii\filters\VerbFilter; | |||
use yii\filters\AccessControl; | |||
use common\helpers\Upload; | |||
use common\models\Producer; | |||
use yii\data\ActiveDataProvider; | |||
use common\models\Invoice; | |||
/** | |||
* UserController implements the CRUD actions for User model. | |||
*/ | |||
class TaxRateAdminController extends BackendController | |||
{ | |||
public function behaviors() | |||
{ | |||
return [ | |||
'verbs' => [ | |||
'class' => VerbFilter::className(), | |||
'actions' => [ | |||
'delete' => ['post'], | |||
], | |||
], | |||
'access' => [ | |||
'class' => AccessControl::className(), | |||
'rules' => [ | |||
[ | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return User::getCurrentStatus() == USER::STATUS_ADMIN; | |||
} | |||
] | |||
], | |||
], | |||
]; | |||
} | |||
/** | |||
* Liste les producteurs. | |||
* | |||
* @return mixed | |||
*/ | |||
public function actionIndex() | |||
{ | |||
$dataProviderProducer = new ActiveDataProvider([ | |||
'query' => Producer::find() | |||
->with('userProducer', 'user') | |||
->orderBy('date_creation DESC'), | |||
'pagination' => [ | |||
'pageSize' => 1000, | |||
], | |||
]); | |||
return $this->render('index', [ | |||
'dataProviderProducer' => $dataProviderProducer, | |||
]); | |||
} | |||
/** | |||
* Crée un producteur. | |||
* | |||
* @return mixed | |||
*/ | |||
public function actionCreate() | |||
{ | |||
$model = new Producer(); | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
Yii::$app->getSession()->setFlash('success', 'Producteur créé.'); | |||
return $this->redirect(['index']); | |||
} else { | |||
return $this->render('create', [ | |||
'model' => $model, | |||
]); | |||
} | |||
} | |||
/** | |||
* Génère la facture mensuelle d'un producteur. | |||
* | |||
* @param integer $idProducer | |||
*/ | |||
public function actionBill($idProducer) | |||
{ | |||
$producer = Producer::findOne($idProducer); | |||
if ($producer) { | |||
$period = date('Y-m', strtotime('-1 month')); | |||
$last_invoice = Invoice::getLastInvoice() ; | |||
if (!$last_invoice) { | |||
$reference = 'BAP000001'; | |||
} else { | |||
$reference = str_replace('BAP', '', $last_invoice->reference); | |||
$reference ++; | |||
$reference = 'BAP' . $reference; | |||
} | |||
$invoice = new Invoice; | |||
$invoice->id_producer = $idProducer; | |||
$invoice->date = date('Y-m-d H:i:s'); | |||
$invoice->reference = $reference; | |||
$invoice->turnover = $producer->getTurnover($period); | |||
$invoice->amount_ht = $producer->getFreePrice() ; | |||
$invoice->wording = 'Facture ' . date('m/Y', strtotime('-1 month')); | |||
$invoice->text = 'Utilisation de la plateforme <strong>distrib</strong> pour le mois : ' . date('m/Y', strtotime('-1 month')) . '<br />' | |||
. 'Chiffre d\'affaire réalisé sur la plateforme : <strong>' . number_format($facture->ca, 2) . ' €</strong> commissionné à <strong>1%</strong>.'; | |||
$invoice->paid = 0; | |||
$invoice->period = $period; | |||
$invoice->save(); | |||
} | |||
$this->redirect(['producer-admin/index']); | |||
} | |||
/** | |||
* Liste les factures des producteurs. | |||
* | |||
* @return mxied | |||
*/ | |||
public function actionBilling() | |||
{ | |||
$dataProviderInvoice = new ActiveDataProvider([ | |||
'query' => Invoice::find() | |||
->with('producer') | |||
->orderBy('reference DESC'), | |||
'pagination' => [ | |||
'pageSize' => 1000, | |||
], | |||
]); | |||
return $this->render('billing', [ | |||
'dataProviderInvoice' => $dataProviderInvoice, | |||
]); | |||
} | |||
/** | |||
* Recherche un établissement. | |||
* | |||
* @param integer $id | |||
* @return Etablissement | |||
* @throws NotFoundHttpException | |||
*/ | |||
protected function findModel($id) { | |||
if (($model = Producer::findOne($id)) !== null) { | |||
return $model; | |||
} else { | |||
throw new NotFoundHttpException('The requested page does not exist.'); | |||
} | |||
} | |||
} |
@@ -0,0 +1,89 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.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\grid\GridView; | |||
use common\models\User ; | |||
use common\models\Etablissement ; | |||
$this->title = 'Facturation'; | |||
$this->params['breadcrumbs'][] = 'Administration' ; | |||
$this->params['breadcrumbs'][] = $this->title; | |||
?> | |||
<h1>Facturation</h1> | |||
<?= GridView::widget([ | |||
'dataProvider' => $datas_factures, | |||
'columns' => [ | |||
[ | |||
'attribute' => 'reference', | |||
'label' => 'Référence', | |||
], | |||
[ | |||
'attribute' => 'id_producer', | |||
'label' => 'Producteur', | |||
'value' => function($model) { | |||
return Html::encode($model->producer->name) ; | |||
} | |||
], | |||
'libelle', | |||
[ | |||
'attribute' => 'amount_ht', | |||
'label' => 'Montant', | |||
'value' => function($model) { | |||
return number_format($model->amount_ht,2).' €' ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'paid', | |||
'label' => 'Payé', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->paid) | |||
{ | |||
return '<span class="label label-success">Oui</span>' ; | |||
} | |||
else { | |||
return '<span class="label label-danger">Non</span>' ; | |||
} | |||
} | |||
] | |||
], | |||
]); ?> |
@@ -0,0 +1,61 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.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; | |||
use yii\helpers\ArrayHelper ; | |||
use common\models\Producer ; | |||
$this->setTitle('Ajouter producteur') ; | |||
$this->addBreadcrumb(['label' => 'Producteurs', 'url' => ['index']]) ; | |||
$this->addBreadcrumb('Ajouter') ; | |||
?> | |||
<div class="producer-create"> | |||
<?php $form = ActiveForm::begin(); ?> | |||
<?= $form->field($model, 'name') ?> | |||
<?= $form->field($model, 'type')->textInput(['placeholder' => 'Boulangerie, brasserie, ferme ...']); ?> | |||
<?= $form->field($model, 'postcode') ?> | |||
<?= $form->field($model, 'city') ?> | |||
<?= $form->field($model, 'code')->label('Code d\'accès') ?> | |||
<div class="form-group"> | |||
<?= Html::submitButton('Ajouter', ['class' => 'btn btn-success']) ?> | |||
</div> | |||
<?php ActiveForm::end(); ?> | |||
</div> |
@@ -0,0 +1,169 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.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\grid\GridView; | |||
use common\models\User ; | |||
use common\models\Producer ; | |||
use common\models\Distribution ; | |||
$this->setTitle('Producteurs') ; | |||
$this->addBreadcrumb($this->getTitle()) ; | |||
$this->addButton(['label' => 'Nouveau producteur <span class="glyphicon glyphicon-plus"></span>', 'url' => 'producer-admin/create', 'class' => 'btn btn-primary']) ; | |||
?> | |||
<?= GridView::widget([ | |||
'dataProvider' => $dataProviderProducer, | |||
'columns' => [ | |||
'name', | |||
[ | |||
'attribute' => 'date_creation', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
return date('d/m/Y', strtotime($model->date_creation)) ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'Lieu', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
return Html::encode($model->city.' ('.$model->postcode.')') ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'Utilisateurs', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if(!$model->userProducer || !count($model->userProducer)) | |||
{ | |||
return 'Aucun utilisateur' ; | |||
} | |||
else { | |||
$users = count($model->userProducer).' client' ; | |||
if(count($model->userProducer) > 1) { | |||
$users .= 's' ; | |||
} | |||
return $users ; | |||
} | |||
} | |||
], | |||
[ | |||
'attribute' => 'Contact', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if(!isset($model->user) || (isset($model->user) && count($model->user) == 0)) | |||
{ | |||
return 'Aucun contact' ; | |||
} | |||
else { | |||
foreach($model->user as $u) | |||
{ | |||
if($u->status == User::STATUS_PRODUCER) | |||
{ | |||
return Html::encode($u->lastname.' '.$u->name) | |||
.'<br />'.Html::encode($u->email) | |||
.'<br />'.Html::encode($u->phone) ; | |||
} | |||
} | |||
} | |||
} | |||
], | |||
[ | |||
'attribute' => 'active', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
$html = '' ; | |||
if($model->active) { | |||
$html .= '<span class="label label-success">En ligne</span>' ; | |||
} | |||
else { | |||
$html .= '<span class="label label-danger">Hors-ligne</span>' ; | |||
} | |||
if(strlen($model->code)) | |||
{ | |||
$html .= ' <span class="glyphicon glyphicon-lock" data-toggle="tooltip" data-placement="bottom" data-original-title="'.Html::encode($model->code).'"></span>' ; | |||
} | |||
return $html ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'Prix libre', | |||
'label' => 'Prix libre', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if(is_null($model->free_price)) { | |||
return '' ; | |||
} | |||
else { | |||
return $model->getFreePrice() ; | |||
} | |||
} | |||
], | |||
[ | |||
'label' => 'Dons (mois précédent)', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
$productGift = Product::getProductGift() ; | |||
$res = Yii::$app->db->createCommand("SELECT SUM(product_order.price * product_order.quantity) AS total | |||
FROM `order`, product_order, distribution | |||
WHERE distribution.id_producer = :id_producer | |||
AND `order`.id_distribution = distribution.id | |||
AND `order`.id = product_order.id_order | |||
AND distribution.date >= :date_start | |||
AND distribution.date <= :date_end | |||
AND product_order.id_product = :id_product_gift | |||
") | |||
->bindValue(':id_producer', $model->id) | |||
->bindValue(':date_start', date('Y-m-01', strtotime("-1 month"))) | |||
->bindValue(':date_end', date('Y-m-31', strtotime("-1 month"))) | |||
->bindValue(':id_product_gift', $productGift->id) | |||
->queryOne(); | |||
return Price::format($res['total']) ; | |||
} | |||
], | |||
], | |||
]); ?> |
@@ -2,6 +2,7 @@ | |||
namespace common\models; | |||
use common\components\ActiveRecordCommon; | |||
use Yii; | |||
/** | |||
@@ -18,7 +19,7 @@ use Yii; | |||
* @property string $city | |||
* @property string $postcode | |||
*/ | |||
class DeliveryNote extends \yii\db\ActiveRecord | |||
class DeliveryNote extends ActiveRecordCommon | |||
{ | |||
/** | |||
* @inheritdoc |
@@ -2,6 +2,7 @@ | |||
namespace common\models; | |||
use common\components\ActiveRecordCommon; | |||
use Yii; | |||
/** | |||
@@ -17,7 +18,7 @@ use Yii; | |||
* @property string $city | |||
* @property string $postcode | |||
*/ | |||
class Invoice extends \yii\db\ActiveRecord | |||
class Invoice extends ActiveRecordCommon | |||
{ | |||
/** | |||
* @inheritdoc |
@@ -2,6 +2,7 @@ | |||
namespace common\models; | |||
use common\components\ActiveRecordCommon; | |||
use Yii; | |||
/** | |||
@@ -12,7 +13,7 @@ use Yii; | |||
* @property integer $id_order_status | |||
* @property string $date | |||
*/ | |||
class OrderOrderStatus extends \yii\db\ActiveRecord | |||
class OrderOrderStatus extends ActiveRecordCommon | |||
{ | |||
/** | |||
* @inheritdoc |
@@ -2,6 +2,7 @@ | |||
namespace common\models; | |||
use common\components\ActiveRecordCommon; | |||
use Yii; | |||
/** | |||
@@ -10,7 +11,7 @@ use Yii; | |||
* @property integer $id | |||
* @property string $name | |||
*/ | |||
class OrderStatus extends \yii\db\ActiveRecord | |||
class OrderStatus extends ActiveRecordCommon | |||
{ | |||
/** | |||
* @inheritdoc |
@@ -17,7 +17,7 @@ use Yii; | |||
* @property string $city | |||
* @property string $postcode | |||
*/ | |||
class Quotation extends \yii\db\ActiveRecord | |||
class Quotation extends ActiveRecordCommon | |||
{ | |||
/** | |||
* @inheritdoc |
@@ -2,6 +2,7 @@ | |||
namespace common\models; | |||
use common\components\ActiveRecordCommon; | |||
use Yii; | |||
/** | |||
@@ -11,7 +12,7 @@ use Yii; | |||
* @property string $name | |||
* @property double $pourcent | |||
*/ | |||
class TaxRate extends \yii\db\ActiveRecord | |||
class TaxRate extends ActiveRecordCommon | |||
{ | |||
/** | |||
* @inheritdoc |