Переглянути джерело

Formulaire de création d'un document #166 #159

refactoring
Guillaume Bourgeois 4 роки тому
джерело
коміт
6d9afbf99a
20 змінених файлів з 680 додано та 180 видалено
  1. +62
    -0
      backend/assets/VuejsDocumentFormAsset.php
  2. +219
    -36
      backend/controllers/DocumentController.php
  3. +0
    -23
      backend/controllers/InvoiceController.php
  4. +80
    -0
      backend/views/document/_form.php
  5. +52
    -0
      backend/views/document/create.php
  6. +54
    -0
      backend/views/document/update.php
  7. +8
    -1
      backend/views/invoice/index.php
  8. +63
    -0
      backend/web/js/vuejs/document-form.js
  9. +2
    -33
      common/models/DeliveryNote.php
  10. +1
    -1
      common/models/DeliveryNoteSearch.php
  11. +72
    -0
      common/models/Document.php
  12. +2
    -33
      common/models/Invoice.php
  13. +2
    -2
      common/models/InvoiceSearch.php
  14. +1
    -1
      common/models/Producer.php
  15. +2
    -33
      common/models/Quotation.php
  16. +1
    -1
      common/models/QuotationSearch.php
  17. +1
    -1
      common/models/User.php
  18. +1
    -15
      console/migrations/m200107_140622_module_bl_devis_factures_modification_champ_taxrate.php
  19. +27
    -0
      console/migrations/m200108_091551_module_bl_devis_factures_suppression_champs_documents.php
  20. +30
    -0
      console/migrations/m200108_101042_module_bl_devis_factures_modification_champs_documents.php

+ 62
- 0
backend/assets/VuejsDocumentFormAsset.php Переглянути файл

@@ -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') ;
}
}

+ 219
- 36
backend/controllers/DocumentController.php Переглянути файл

@@ -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.');
}
}

}

+ 0
- 23
backend/controllers/InvoiceController.php Переглянути файл

@@ -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.
*

+ 80
- 0
backend/views/document/_form.php Переглянути файл

@@ -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>

+ 52
- 0
backend/views/document/create.php Переглянути файл

@@ -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>

+ 54
- 0
backend/views/document/update.php Переглянути файл

@@ -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>

+ 8
- 1
backend/views/invoice/index.php Переглянути файл

@@ -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',

+ 63
- 0
backend/web/js/vuejs/document-form.js Переглянути файл

@@ -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 = '' ;
}
}) ;
}
}
});



+ 2
- 33
common/models/DeliveryNote.php Переглянути файл

@@ -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'
];
}


+ 1
- 1
common/models/DeliveryNoteSearch.php Переглянути файл

@@ -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],
];
}

+ 72
- 0
common/models/Document.php Переглянути файл

@@ -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' ;
}
}
}
}

+ 2
- 33
common/models/Invoice.php Переглянути файл

@@ -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'
];
}


+ 2
- 2
common/models/InvoiceSearch.php Переглянути файл

@@ -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')
;

+ 1
- 1
common/models/Producer.php Переглянути файл

@@ -443,7 +443,7 @@ class Producer extends ActiveRecordCommon
public static function getCurrent()
{
if(self::getId()) {
return self::searchOne() ;
return self::searchOne() ;
}
return false ;

+ 2
- 33
common/models/Quotation.php Переглянути файл

@@ -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'
];
}


+ 1
- 1
common/models/QuotationSearch.php Переглянути файл

@@ -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],
];
}

+ 1
- 1
common/models/User.php Переглянути файл

@@ -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 ;

+ 1
- 15
console/migrations/m200107_140622_module_bl_devis_factures_modification_champ_taxrate.php Переглянути файл

@@ -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;
}
*/
}

+ 27
- 0
console/migrations/m200108_091551_module_bl_devis_factures_suppression_champs_documents.php Переглянути файл

@@ -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) ;
}
}

+ 30
- 0
console/migrations/m200108_101042_module_bl_devis_factures_modification_champs_documents.php Переглянути файл

@@ -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) ;
}

}

Завантаження…
Відмінити
Зберегти