@@ -0,0 +1,62 @@ | |||
<?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\assets; | |||
use yii\web\AssetBundle; | |||
use yii ; | |||
/** | |||
* @author Qiang Xue <qiang.xue@gmail.com> | |||
* @since 2.0 | |||
*/ | |||
class VuejsDocumentFormAsset extends \common\components\MyAssetBundle | |||
{ | |||
public $basePath = '@webroot'; | |||
public $baseUrl = '@web'; | |||
public $css = []; | |||
public $js = []; | |||
public $depends = [ | |||
'common\assets\CommonAsset' | |||
]; | |||
public function __construct() | |||
{ | |||
parent::__construct() ; | |||
$this->addAsset('js','js/vuejs/document-form.js') ; | |||
} | |||
} |
@@ -1,45 +1,228 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
/** | |||
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. | |||
*/ | |||
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 common\models\User ; | |||
class DocumentController extends BackendController | |||
{ | |||
public function behaviors() | |||
{ | |||
return [ | |||
'verbs' => [ | |||
'class' => VerbFilter::className(), | |||
'actions' => [ | |||
], | |||
], | |||
'access' => [ | |||
'class' => AccessControl::className(), | |||
'rules' => [ | |||
[ | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return User::hasAccessBackend(); | |||
} | |||
] | |||
], | |||
], | |||
]; | |||
} | |||
public function actionCreate() | |||
{ | |||
$class = $this->getClass(); | |||
$model = new $class(); | |||
if ($model->load(Yii::$app->request->post())) { | |||
$model->id_producer = Producer::getId() ; | |||
$model->reference = $model->generateReference() ; | |||
if($model->save()) { | |||
Yii::$app->getSession()->setFlash('success', $this->getFlashMessage('create', $model)); | |||
return $this->redirect(['index']); | |||
} | |||
else { | |||
Yii::$app->getSession()->setFlash('error', 'Un problème est survenu lors de la création du document.'); | |||
} | |||
} | |||
return $this->render('/document/create', [ | |||
'title' => $this->getTitle('Ajouter'), | |||
'documentType' => $this->getDocumentType(), | |||
'model' => $model, | |||
]); | |||
} | |||
/** | |||
* Modifie un modèle Produit existant. | |||
* Si la modification réussit, le navigateur est redirigé vers la page 'index'. | |||
* | |||
* @param integer $id | |||
* @return mixed | |||
*/ | |||
public function actionUpdate($id) | |||
{ | |||
$request = Yii::$app->request; | |||
$model = $this->findModel($id) ; | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
Yii::$app->getSession()->setFlash('success', $this->getFlashMessage('update', $model)); | |||
return $this->redirect(['index']); | |||
} else { | |||
return $this->render('update', [ | |||
'title' => $this->getTitle('Modifier'), | |||
'documentType' => $this->getDocumentType(), | |||
'model' => $model, | |||
]); | |||
} | |||
} | |||
public function actionAddressUser($idUser) | |||
{ | |||
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | |||
if($idUser > 0) { | |||
$user = User::findOne($idUser); | |||
if($user) { | |||
$address = $user['lastname'].' '.$user['name']."\n" ; | |||
$address .= $user['address'] ; | |||
return [ | |||
'return' => 'success', | |||
'address' => $address | |||
] ; | |||
} | |||
} | |||
return ['return' => 'error'] ; | |||
} | |||
protected function getClass() | |||
{ | |||
$class = get_class($this); | |||
$class = str_replace('Controller', '', $class) ; | |||
$class = str_replace('backend\controllers\\', '', $class) ; | |||
return $class ; | |||
} | |||
protected function getDocumentType() | |||
{ | |||
$class = $this->getClass(); | |||
if($class == 'Invoice') { | |||
$documentType = 'Facture' ; | |||
} | |||
elseif($class == 'DeliveryNote') { | |||
$documentType = 'Bon de livraison' ; | |||
} | |||
elseif($class == 'Quotation') { | |||
$documentType = 'Devis' ; | |||
} | |||
if(isset($documentType)) { | |||
return $documentType ; | |||
} | |||
return '' ; | |||
} | |||
} | |||
public function getFlashMessage($type = 'create', $model) | |||
{ | |||
$class = $this->getClass(); | |||
$message = $this->getDocumentType() ; | |||
$message .= ' <strong>'.Html::encode($model->name).'</strong> ' ; | |||
if($type == 'create') { | |||
$message .= 'ajouté' ; | |||
} | |||
elseif($type == 'update') { | |||
$message .= 'modifié' ; | |||
} | |||
if($class == 'Invoice') { | |||
$message .= 'e' ; | |||
} | |||
return $message ; | |||
} | |||
protected function getTitle($prepend) | |||
{ | |||
$class = $this->getClass(); | |||
switch ($class) { | |||
case 'Invoice' : | |||
$title = $prepend . ' une facture'; | |||
break; | |||
case 'DeliveryNote' : | |||
$title = $prepend . ' un bon de livraison'; | |||
break; | |||
case 'Quotation' : | |||
$title = $prepend . ' un devis'; | |||
break; | |||
} | |||
return $title; | |||
} | |||
/** | |||
* Recherche un Document en fonction de son ID. | |||
* | |||
* @param integer $id | |||
* @return Produit | |||
* @throws NotFoundHttpException si le modèle n'est pas trouvé | |||
*/ | |||
protected function findModel($id) | |||
{ | |||
$class = $this->getClass() ; | |||
if (($model = $class::findOne($id)) !== null) { | |||
return $model; | |||
} else { | |||
throw new NotFoundHttpException('The requested page does not exist.'); | |||
} | |||
} | |||
} |
@@ -43,29 +43,6 @@ use Yii; | |||
class InvoiceController extends DocumentController | |||
{ | |||
public function behaviors() | |||
{ | |||
return [ | |||
'verbs' => [ | |||
'class' => VerbFilter::className(), | |||
'actions' => [ | |||
], | |||
], | |||
'access' => [ | |||
'class' => AccessControl::className(), | |||
'rules' => [ | |||
[ | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return User::hasAccessBackend(); | |||
} | |||
] | |||
], | |||
], | |||
]; | |||
} | |||
/** | |||
* Liste les modèles Invoice. | |||
* |
@@ -0,0 +1,80 @@ | |||
<?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 common\models\Product; | |||
use yii\helpers\ArrayHelper; | |||
use common\models\TaxRate; | |||
use common\models\Producer; | |||
\backend\assets\VuejsDocumentFormAsset::register($this); | |||
?> | |||
<div class="document-form" id="app-document-form"> | |||
<div class="col-md-12"> | |||
<div class="panel panel-default"> | |||
<div class="panel-heading"> | |||
Informations | |||
</div> | |||
<div class="panel-body"> | |||
<?php $form = ActiveForm::begin(); ?> | |||
<?= $form->field($model, 'name')->label('Nom du document') ?> | |||
<?php $usersArray = User::findBy()->all() ; ?> | |||
<?= $form->field($model, 'id_user', [ | |||
'template' => '{label} <a href="'.Yii::$app->urlManager->createUrl(['user/create']).'" class="btn btn-xs btn-default">Nouvel utilisateur <span class="glyphicon glyphicon-plus"></span></a><div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>{hint}', | |||
]) | |||
->dropDownList( | |||
ArrayHelper::map($usersArray, 'user_id', function($model) { return $model['lastname'].' '.$model['name']; }), | |||
[ | |||
'@change' => 'changeUser', | |||
'prompt' => '--', | |||
'v-model' => 'idUser', | |||
] | |||
); ?> | |||
<?= $form->field($model, 'address')->textarea(['rows' => 3, 'v-model' => 'address']) ?> | |||
<div class="form-group"> | |||
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => 'btn btn-primary']) ?> | |||
</div> | |||
<?php ActiveForm::end(); ?> | |||
</div> | |||
</div> | |||
</div> | |||
</div> |
@@ -0,0 +1,52 @@ | |||
<?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; | |||
$this->setTitle($title) ; | |||
$this->addBreadcrumb(['label' => $documentType.'s', 'url' => ['index']]) ; | |||
$this->addBreadcrumb('Ajouter') ; | |||
?> | |||
<div class="document-create"> | |||
<?= $this->render('_form', [ | |||
'model' => $model, | |||
'documentType' => $documentType | |||
]) ?> | |||
</div> |
@@ -0,0 +1,54 @@ | |||
<?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; | |||
$this->setTitle($title) ; | |||
$this->addBreadcrumb(['label' => $documentType.'s', 'url' => ['index']]) ; | |||
$this->addBreadcrumb(['label' => $model->name, 'url' => ['update', 'id' => $model->id]]) ; | |||
$this->addBreadcrumb('Modifier') ; | |||
?> | |||
<div class="product-update"> | |||
<?= $this->render('_form', [ | |||
'model' => $model, | |||
'documentType' => $documentType | |||
]) ?> | |||
</div> |
@@ -45,7 +45,7 @@ use common\models\Producer; | |||
$this->setTitle('Factures'); | |||
$this->addBreadcrumb($this->getTitle()); | |||
//$this->addButton(['label' => 'Nouvelle facture <span class="glyphicon glyphicon-plus"></span>', 'url' => 'invoice/create', 'class' => 'btn btn-primary']); | |||
$this->addButton(['label' => 'Nouvelle facture <span class="glyphicon glyphicon-plus"></span>', 'url' => 'invoice/create', 'class' => 'btn btn-primary']); | |||
?> | |||
@@ -56,6 +56,13 @@ $this->addBreadcrumb($this->getTitle()); | |||
'columns' => [ | |||
'reference', | |||
'name', | |||
[ | |||
'attribute' => 'id_user', | |||
'header' => 'Utilisateur', | |||
'value' => function($model) { | |||
return $model->user->lastname.' '.$model->user->name ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'date', | |||
'header' => 'Date', |
@@ -0,0 +1,63 @@ | |||
/** | |||
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. | |||
*/ | |||
var app = new Vue({ | |||
el: '#app-document-form', | |||
data: { | |||
idUser: '', | |||
address : '' | |||
}, | |||
methods: { | |||
changeUser: function(event) { | |||
var app = this ; | |||
axios.get(UrlManager.getBaseUrlAbsolute()+"document/address-user",{params: { | |||
idUser: app.idUser | |||
}}) | |||
.then(function(response) { | |||
console.log(response.data) ; | |||
if(response.data.return == 'success') { | |||
app.address = response.data.address ; | |||
} | |||
else { | |||
app.address = '' ; | |||
} | |||
}) ; | |||
} | |||
} | |||
}); | |||
@@ -66,37 +66,6 @@ class DeliveryNote extends Document | |||
return 'delivery_note'; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['date'], 'safe'], | |||
[['comment', 'address'], 'string'], | |||
[['id_user'], 'integer'], | |||
[['name', 'reference', 'city', 'postcode'], 'string', 'max' => 255], | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'name' => 'Nom', | |||
'reference' => 'Référence', | |||
'date' => 'Date', | |||
'comment' => 'Commentaire', | |||
'id_user' => 'Utilisateur', | |||
'address' => 'Adresse', | |||
'city' => 'Ville', | |||
'postcode' => 'Code postale', | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
@@ -115,9 +84,9 @@ class DeliveryNote extends Document | |||
{ | |||
return [ | |||
'with' => [], | |||
'join_with' => ['user AS user_delivery_note', 'orders'], | |||
'join_with' => ['user AS user_delivery_note', 'orders', 'producer'], | |||
'orderby' => 'date ASC', | |||
'attribute_id_producer' => '' | |||
'attribute_id_producer' => 'delivery_note.id_producer' | |||
]; | |||
} | |||
@@ -48,7 +48,7 @@ class DeliveryNoteSearch extends DeliveryNote | |||
[[], 'safe'], | |||
[['comment', 'address'], 'string'], | |||
[['id_user'], 'integer'], | |||
[['name', 'reference', 'city', 'postcode'], 'string', 'max' => 255], | |||
[['name', 'reference'], 'string', 'max' => 255], | |||
]; | |||
} | |||
@@ -40,6 +40,38 @@ namespace common\models; | |||
class Document extends ActiveRecordCommon | |||
{ | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['name', 'id_user'], 'required'], | |||
[['date'], 'safe'], | |||
[['comment', 'address'], 'string'], | |||
[['id_user','id_producer'], 'integer'], | |||
[['name', 'reference'], 'string', 'max' => 255], | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'name' => 'Nom', | |||
'reference' => 'Référence', | |||
'date' => 'Date', | |||
'comment' => 'Commentaire', | |||
'id_user' => 'Utilisateur', | |||
'address' => 'Adresse', | |||
'id_producer' => 'Producteur' | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
@@ -49,6 +81,11 @@ class Document extends ActiveRecordCommon | |||
return $this->hasOne(User::className(), ['id' => 'id_user']); | |||
} | |||
public function getProducer() | |||
{ | |||
return $this->hasOne(Producer::className(), ['id' => 'id_producer']); | |||
} | |||
public function relationOrders($fieldIdDocument) | |||
{ | |||
$defaultOptionsSearch = Order::defaultOptionsSearch(); | |||
@@ -99,4 +136,39 @@ class Document extends ActiveRecordCommon | |||
return '' ; | |||
} | |||
} | |||
public function getClass() | |||
{ | |||
return str_replace('common\models\\','',get_class($this)) ; | |||
} | |||
public function generateReference() | |||
{ | |||
$class = $this->getClass() ; | |||
$classLower = strtolower($class) ; | |||
$prefix = Producer::getConfig('document_'.$classLower.'_prefix') ; | |||
$oneDocumentExist = $class::searchOne([],['orderby'=> 'reference DESC']) ; | |||
if($oneDocumentExist) { | |||
$reference = $oneDocumentExist->reference ; | |||
$pattern = '#([A-Z]+)?([0-9]+)#'; | |||
preg_match($pattern, $reference, $matches, PREG_OFFSET_CAPTURE); | |||
$sizeNumReference = strlen($matches[2][0]) ; | |||
$numReference = ((int) $matches[2][0]) + 1 ; | |||
$numReference = str_pad($numReference, $sizeNumReference, '0', STR_PAD_LEFT); | |||
return $prefix.$numReference ; | |||
} | |||
else { | |||
$firstReference = Producer::getConfig('document_'.$classLower.'_first_reference') ; | |||
if(strlen($firstReference) > 0) { | |||
return $firstReference ; | |||
} | |||
else { | |||
return $prefix.'00001' ; | |||
} | |||
} | |||
} | |||
} |
@@ -65,37 +65,6 @@ class Invoice extends Document | |||
return 'invoice'; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['date'], 'safe'], | |||
[['comment', 'address'], 'string'], | |||
[['id_user'], 'integer'], | |||
[['name', 'reference', 'city', 'postcode'], 'string', 'max' => 255], | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'name' => 'Nom', | |||
'reference' => 'Référence', | |||
'date' => 'Date', | |||
'comment' => 'Commentaire', | |||
'id_user' => 'Utilisateur', | |||
'address' => 'Adresse', | |||
'city' => 'Ville', | |||
'postcode' => 'Code postale', | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
@@ -114,9 +83,9 @@ class Invoice extends Document | |||
{ | |||
return [ | |||
'with' => [], | |||
'join_with' => ['user AS user_invoice', 'orders'], | |||
'join_with' => ['user AS user_invoice', 'orders', 'producer'], | |||
'orderby' => 'date ASC', | |||
'attribute_id_producer' => '' | |||
'attribute_id_producer' => 'invoice.id_producer' | |||
]; | |||
} | |||
@@ -49,7 +49,7 @@ class InvoiceSearch extends Invoice | |||
[[], 'safe'], | |||
[['comment', 'address'], 'string'], | |||
[['id_user'], 'integer'], | |||
[['name', 'reference', 'city', 'postcode'], 'string', 'max' => 255], | |||
[['name', 'reference'], 'string', 'max' => 255], | |||
]; | |||
} | |||
@@ -60,7 +60,7 @@ class InvoiceSearch extends Invoice | |||
$query = Invoice::find() | |||
->with($optionsSearch['with']) | |||
->joinWith($optionsSearch['join_with'], true) | |||
->where(['distribution.id_producer' => Producer::getId()]) | |||
->where(['invoice.id_producer' => Producer::getId()]) | |||
->orderBy('invoice.reference DESC') | |||
; | |||
@@ -443,7 +443,7 @@ class Producer extends ActiveRecordCommon | |||
public static function getCurrent() | |||
{ | |||
if(self::getId()) { | |||
return self::searchOne() ; | |||
return self::searchOne() ; | |||
} | |||
return false ; |
@@ -64,37 +64,6 @@ class Quotation extends Document | |||
return 'quotation'; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['date'], 'safe'], | |||
[['comment', 'address'], 'string'], | |||
[['id_user'], 'integer'], | |||
[['name', 'reference', 'city', 'postcode'], 'string', 'max' => 255], | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'name' => 'Nom', | |||
'reference' => 'Référence', | |||
'date' => 'Date', | |||
'comment' => 'Commentaire', | |||
'id_user' => 'Utilisateur', | |||
'address' => 'Adresse', | |||
'city' => 'Ville', | |||
'postcode' => 'Code postale', | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
@@ -113,9 +82,9 @@ class Quotation extends Document | |||
{ | |||
return [ | |||
'with' => [], | |||
'join_with' => ['user AS user_quotation', 'orders'], | |||
'join_with' => ['user AS user_quotation', 'orders', 'producer'], | |||
'orderby' => 'date ASC', | |||
'attribute_id_producer' => '' | |||
'attribute_id_producer' => 'quotation.id_producer' | |||
]; | |||
} | |||
@@ -49,7 +49,7 @@ class QuotationSearch extends Quotation | |||
[[], 'safe'], | |||
[['comment', 'address'], 'string'], | |||
[['id_user'], 'integer'], | |||
[['name', 'reference', 'city', 'postcode'], 'string', 'max' => 255], | |||
[['name', 'reference'], 'string', 'max' => 255], | |||
]; | |||
} | |||
@@ -301,7 +301,7 @@ class User extends ActiveRecordCommon implements IdentityInterface | |||
} | |||
$query = (new Query()) | |||
->select(['user.id AS user_id', 'user.name', 'user.lastname', 'user.phone', 'user.email', 'user.created_at','user.date_last_connection', 'user_producer.*']) | |||
->select(['user.id AS user_id', 'user.name', 'user.lastname', 'user.phone', 'user.email', 'user.created_at','user.date_last_connection', 'user_producer.*', 'user.address']) | |||
->from('user'); | |||
$active = (isset($params['inactive']) && $params['inactive']) ? 0 : 1 ; |
@@ -16,19 +16,5 @@ class m200107_140622_module_bl_devis_factures_modification_champ_taxrate extends | |||
$this->renameColumn('tax_rate', 'value', 'pourcent'); | |||
} | |||
/* | |||
// Use up()/down() to run migration code without a transaction. | |||
public function up() | |||
{ | |||
} | |||
public function down() | |||
{ | |||
echo "m200107_140622_module_bl_devis_factures_modification_champ_taxrate cannot be reverted.\n"; | |||
return false; | |||
} | |||
*/ | |||
} |
@@ -0,0 +1,27 @@ | |||
<?php | |||
use yii\db\Migration; | |||
use yii\db\Schema; | |||
class m200108_091551_module_bl_devis_factures_suppression_champs_documents extends Migration | |||
{ | |||
public function safeUp() | |||
{ | |||
$this->dropColumn('invoice', 'city') ; | |||
$this->dropColumn('invoice', 'postcode') ; | |||
$this->dropColumn('quotation', 'city') ; | |||
$this->dropColumn('quotation', 'postcode') ; | |||
$this->dropColumn('delivery_note', 'city') ; | |||
$this->dropColumn('delivery_note', 'postcode') ; | |||
} | |||
public function safeDown() | |||
{ | |||
$this->addColumn('invoice', 'city', Schema::TYPE_STRING) ; | |||
$this->addColumn('invoice', 'postcode', Schema::TYPE_STRING) ; | |||
$this->addColumn('quotation', 'city', Schema::TYPE_STRING) ; | |||
$this->addColumn('quotation', 'postcode', Schema::TYPE_STRING) ; | |||
$this->addColumn('delivery_note', 'city', Schema::TYPE_STRING) ; | |||
$this->addColumn('delivery_note', 'postcode', Schema::TYPE_STRING) ; | |||
} | |||
} |
@@ -0,0 +1,30 @@ | |||
<?php | |||
use yii\db\Migration; | |||
use yii\db\Schema; | |||
class m200108_101042_module_bl_devis_factures_modification_champs_documents extends Migration | |||
{ | |||
public function safeUp() | |||
{ | |||
$this->addColumn('invoice', 'id_producer', Schema::TYPE_INTEGER) ; | |||
$this->addColumn('quotation', 'id_producer', Schema::TYPE_INTEGER) ; | |||
$this->addColumn('delivery_note', 'id_producer', Schema::TYPE_INTEGER) ; | |||
$this->alterColumn('invoice', 'date', Schema::TYPE_DATETIME.' DEFAULT CURRENT_TIMESTAMP') ; | |||
$this->alterColumn('delivery_note', 'date', Schema::TYPE_DATETIME.' DEFAULT CURRENT_TIMESTAMP') ; | |||
$this->alterColumn('quotation', 'date', Schema::TYPE_DATETIME.' DEFAULT CURRENT_TIMESTAMP') ; | |||
} | |||
public function safeDown() | |||
{ | |||
$this->dropColumn('invoice', 'id_producer') ; | |||
$this->dropColumn('delivery_note', 'id_producer') ; | |||
$this->dropColumn('quotation', 'id_producer') ; | |||
$this->alterColumn('invoice', 'date', Schema::TYPE_DATETIME) ; | |||
$this->alterColumn('delivery_note', 'date', Schema::TYPE_DATETIME) ; | |||
$this->alterColumn('quotation', 'date', Schema::TYPE_DATETIME) ; | |||
} | |||
} |