['label' => 'Administration', 'options' => ['class' => 'header'], 'visible' => User::isCurrentAdmin()], | ['label' => 'Administration', 'options' => ['class' => 'header'], 'visible' => User::isCurrentAdmin()], | ||||
['label' => 'Producteurs','icon' => 'th-list','url' => ['/producer-admin/index'], 'visible' => User::isCurrentAdmin()], | ['label' => 'Producteurs','icon' => 'th-list','url' => ['/producer-admin/index'], 'visible' => User::isCurrentAdmin()], | ||||
['label' => 'Taxes','icon' => 'eur','url' => ['/tax-rate-admin/index'], 'visible' => User::isCurrentAdmin()], | ['label' => 'Taxes','icon' => 'eur','url' => ['/tax-rate-admin/index'], 'visible' => User::isCurrentAdmin()], | ||||
['label' => 'Statuts commande','icon' => 'tags','url' => ['/order-status-admin/index'], 'visible' => User::isCurrentAdmin()], | |||||
['label' => 'Communiquer','icon' => 'bullhorn','url' => ['/communicate-admin/index'], 'visible' => User::isCurrentAdmin()], | ['label' => 'Communiquer','icon' => 'bullhorn','url' => ['/communicate-admin/index'], 'visible' => User::isCurrentAdmin()], | ||||
['label' => 'Outils', 'options' => ['class' => 'header'], 'visible' => User::isCurrentAdmin()], | ['label' => 'Outils', 'options' => ['class' => 'header'], 'visible' => User::isCurrentAdmin()], |
<?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>' ; | |||||
} | |||||
} | |||||
] | |||||
], | |||||
]); ?> |
'adminEmail' => 'contact@opendistrib.net', | 'adminEmail' => 'contact@opendistrib.net', | ||||
'supportEmail' => 'contact@opendistrib.net', | 'supportEmail' => 'contact@opendistrib.net', | ||||
'user.passwordResetTokenExpire' => 3600, | 'user.passwordResetTokenExpire' => 3600, | ||||
'producer' => false | |||||
'producer' => false, | |||||
'orderStatus' => [ | |||||
'new-order' => [ | |||||
'name' => 'Nouvelle commande', | |||||
'color' => '#14c40e', | |||||
'nextStatusAllow' => ['waiting-paiement-on-delivery', 'waiting-paiement-by-credit', 'canceled'], | |||||
'slug' => 'new-order' | |||||
], | |||||
'waiting-paiement-on-delivery' => [ | |||||
'name' => 'En attente de paiement à la livraison', | |||||
'color' => '#e19a4d', | |||||
'nextStatusAllow' => ['delivered', 'canceled'], | |||||
'slug' => 'waiting-paiement-on-delivery' | |||||
], | |||||
'waiting-paiement-by-credit' => [ | |||||
'name' => 'En attente de paiement par crédit', | |||||
'color' => '#e19a4d', | |||||
'nextStatusAllow' => ['paid-by-credit', 'canceled'], | |||||
'slug' => 'waiting-paiement-by-credit' | |||||
], | |||||
'paid-by-credit' => [ | |||||
'name' => 'Payé par crédit', | |||||
'color' => '#3180d5', | |||||
'nextStatusAllow' => ['waiting-delivery'], | |||||
'slug' => 'paid-by-credit' | |||||
], | |||||
'waiting-delevery'=>[ | |||||
'name' => 'En attente de livraison', | |||||
'color' => '#d5bb31', | |||||
'nextStatusAllow' => ['delivered', 'refunded'], | |||||
'slug' => 'new-order' | |||||
], | |||||
'delivered' => [ | |||||
'name' => 'Livré', | |||||
'color' => '#36d531', | |||||
'nextStatusAllow' => [], | |||||
'slug' => 'new-order' | |||||
], | |||||
'refunded' => [ | |||||
'name' => 'Remboursé', | |||||
'color' => '#d01d14', | |||||
'nextStatusAllow' => ['canceled'], | |||||
'slug' => 'refunded' | |||||
], | |||||
'cancel' => [ | |||||
'name' => 'Commande annulée', | |||||
'color' => '#d01d14', | |||||
'nextStatusAllow' => [], | |||||
'slug' => 'cancel' | |||||
] | |||||
] | |||||
]; | ]; |
namespace common\models; | namespace common\models; | ||||
use common\helpers\Debug; | |||||
use common\helpers\GlobalParam; | |||||
use common\helpers\Price; | |||||
use Yii; | use Yii; | ||||
use yii\helpers\Html; | use yii\helpers\Html; | ||||
use common\models\Producer; | use common\models\Producer; | ||||
use common\components\ActiveRecordCommon; | use common\components\ActiveRecordCommon; | ||||
use yii\web\NotFoundHttpException; | |||||
/** | /** | ||||
* This is the model class for table "order". | * This is the model class for table "order". | ||||
public function rules() | public function rules() | ||||
{ | { | ||||
return [ | return [ | ||||
[['id_user', 'date'], 'required', 'message' => ''], | |||||
[['id_user', 'date', 'id_point_sale', 'id_distribution', 'status'], 'required', 'message' => ''], | |||||
[['id_user', 'id_point_sale', 'id_distribution', 'id_subscription', 'id_invoice', 'id_quotation', 'id_delivery_note'], 'integer'], | [['id_user', 'id_point_sale', 'id_distribution', 'id_subscription', 'id_invoice', 'id_quotation', 'id_delivery_note'], 'integer'], | ||||
[['auto_payment', 'tiller_synchronization'], 'boolean'], | [['auto_payment', 'tiller_synchronization'], 'boolean'], | ||||
[['date', 'date_update', 'comment', 'comment_point_sale', 'mean_payment'], 'safe'] | [['date', 'date_update', 'comment', 'comment_point_sale', 'mean_payment'], 'safe'] | ||||
'id_point_sale' => 'Point de vente', | 'id_point_sale' => 'Point de vente', | ||||
'id_distribution' => 'Date de distribution', | 'id_distribution' => 'Date de distribution', | ||||
'id_subscription' => 'Abonnement', | 'id_subscription' => 'Abonnement', | ||||
'status' => 'Statut', | |||||
'id_invoice' => 'Facture', | 'id_invoice' => 'Facture', | ||||
'id_quotation' => 'Devis', | 'id_quotation' => 'Devis', | ||||
'id_delivery_note' => 'Bon de livraison' | 'id_delivery_note' => 'Bon de livraison' | ||||
->with('productSubscription'); | ->with('productSubscription'); | ||||
} | } | ||||
public function getOrderOrderStatus() | |||||
{ | |||||
return $this->hasMany(OrderOrderStatus::className(), ['id_order' => 'id'])->with('orderStatus'); | |||||
} | |||||
public function getInvoice() | public function getInvoice() | ||||
{ | { | ||||
return $this->hasOne(Invoice::className(), ['id' => 'id_invoice']); | return $this->hasOne(Invoice::className(), ['id' => 'id_invoice']); | ||||
*/ | */ | ||||
public function initAmount() | public function initAmount() | ||||
{ | { | ||||
$this->amount = 0 ; | |||||
$this->weight = 0 ; | |||||
$this->amount = 0; | |||||
$this->weight = 0; | |||||
if (isset($this->productOrder)) { | if (isset($this->productOrder)) { | ||||
foreach ($this->productOrder as $productOrder) { | foreach ($this->productOrder as $productOrder) { | ||||
$this->amount += $productOrder->price * $productOrder->quantity; | |||||
$this->amount += Price::getPriceWithTax($productOrder->price, $productOrder->taxRate->value) * $productOrder->quantity; | |||||
if ($productOrder->unit == 'piece') { | if ($productOrder->unit == 'piece') { | ||||
if (isset($productOrder->product)) { | if (isset($productOrder->product)) { | ||||
$this->weight += ($productOrder->quantity * $productOrder->product->weight) / 1000; | $this->weight += ($productOrder->quantity * $productOrder->product->weight) / 1000; | ||||
} | } | ||||
} | } | ||||
/** | |||||
* Changement de statut d'une commande | |||||
* | |||||
* @param $newStatus | |||||
*/ | |||||
public function changeOrderStatus($newStatus, $origin) | |||||
{ | |||||
$orderStatusArray = GlobalParam::get('orderStatus'); | |||||
switch ($newStatus) { | |||||
case 'new-order' : | |||||
$this->addOrderStatusHistory($newStatus, $origin); | |||||
$this->status = $newStatus; | |||||
$this->save(); | |||||
break; | |||||
case 'waiting-paiement-on-delivery': | |||||
if(in_array($newStatus, $orderStatusArray[$this->status]['nextStatusAllow'])){ | |||||
$this->addOrderStatusHistory($newStatus, $origin); | |||||
$this->status = $newStatus; | |||||
$this->save(); | |||||
} | |||||
break; | |||||
case 'waiting-paiement-by-credit': | |||||
if(in_array($newStatus, $orderStatusArray[$this->status]['nextStatusAllow'])){ | |||||
$this->addOrderStatusHistory($newStatus, $origin); | |||||
$this->status = $newStatus; | |||||
$this->save(); | |||||
} | |||||
break; | |||||
case 'paid-by-credit': | |||||
if(in_array($newStatus, $orderStatusArray[$this->status]['nextStatusAllow'])){ | |||||
$this->addOrderStatusHistory($newStatus, $origin); | |||||
$this->status = $newStatus; | |||||
$this->save(); | |||||
} | |||||
break; | |||||
case 'waiting-delevery' : | |||||
if(in_array($newStatus, $orderStatusArray[$this->status]['nextStatusAllow'])){ | |||||
$this->addOrderStatusHistory($newStatus, $origin); | |||||
$this->status = $newStatus; | |||||
$this->save(); | |||||
} | |||||
break; | |||||
case 'delivered': | |||||
if(in_array($newStatus, $orderStatusArray[$this->status]['nextStatusAllow'])){ | |||||
$this->addOrderStatusHistory($newStatus, $origin); | |||||
$this->status = $newStatus; | |||||
$this->save(); | |||||
} | |||||
break; | |||||
case 'refunded': | |||||
if(in_array($newStatus, $orderStatusArray[$this->status]['nextStatusAllow'])){ | |||||
$this->addOrderStatusHistory($newStatus, $origin); | |||||
$this->status = $newStatus; | |||||
$this->save(); | |||||
} | |||||
break; | |||||
case 'cancel': | |||||
if(in_array($newStatus, $orderStatusArray[$this->status]['nextStatusAllow'])){ | |||||
$this->addOrderStatusHistory($newStatus, $origin); | |||||
$this->status = $newStatus; | |||||
$this->save(); | |||||
} | |||||
break; | |||||
default: | |||||
throw new NotFoundHttpException('Statut de commande inconnu.'); | |||||
break; | |||||
} | |||||
} | |||||
public function addOrderStatusHistory($newStatus,$origin) | |||||
{ | |||||
$orderStatusHistory = new OrderStatusHistory(); | |||||
$orderStatusHistory->id_user = User::getCurrentId(); | |||||
$orderStatusHistory->id_order = $this->id; | |||||
$orderStatusHistory->status = $newStatus; | |||||
$orderStatusHistory->origin = $origin; | |||||
$orderStatusHistory->date = date('Y-m-d H:i:s'); | |||||
$orderStatusHistory->save(); | |||||
} | |||||
/** | /** | ||||
* Retourne le montant de la commande (total, payé, restant, ou en surplus). | * Retourne le montant de la commande (total, payé, restant, ou en surplus). | ||||
* | * |
<?php | |||||
namespace common\models; | |||||
use common\components\ActiveRecordCommon; | |||||
use Yii; | |||||
/** | |||||
* This is the model class for table "order_status". | |||||
* | |||||
* @property integer $id | |||||
* @property string $name | |||||
*/ | |||||
class OrderStatus extends ActiveRecordCommon | |||||
{ | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public static function tableName() | |||||
{ | |||||
return 'order_status'; | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function rules() | |||||
{ | |||||
return [ | |||||
[['name'], 'string', 'max' => 255], | |||||
]; | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function attributeLabels() | |||||
{ | |||||
return [ | |||||
'id' => 'ID', | |||||
'name' => 'Nom', | |||||
]; | |||||
} | |||||
/** | |||||
* Retourne les options de base nécessaires à la fonction de recherche. | |||||
* | |||||
* @return array | |||||
*/ | |||||
public static function defaultOptionsSearch() { | |||||
return [ | |||||
'with' => [], | |||||
'join_with' => ['user', 'order'], | |||||
'orderby' => 'id ASC', | |||||
'attribute_id_producer' => '' | |||||
] ; | |||||
} | |||||
} |
<?php | |||||
namespace common\models; | |||||
use common\components\ActiveRecordCommon; | |||||
use Yii; | |||||
/** | |||||
* This is the model class for table "order_order_status". | |||||
* | |||||
* @property integer $id | |||||
* @property integer $id_order | |||||
* @property integer $id_order_status | |||||
* @property string $date | |||||
*/ | |||||
class OrderStatusHistory extends ActiveRecordCommon | |||||
{ | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public static function tableName() | |||||
{ | |||||
return 'order_status_history'; | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function rules() | |||||
{ | |||||
return [ | |||||
[['id_order', 'status', 'id_user', 'date', 'origin'], 'required'], | |||||
[['id_order', 'id_user',], 'integer'], | |||||
[['date'], 'safe'], | |||||
]; | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function attributeLabels() | |||||
{ | |||||
return [ | |||||
'id' => 'ID', | |||||
'id_order' => 'Commande', | |||||
'id_user' => 'Utilisateur', | |||||
'status' => 'Statut', | |||||
'origin' => 'Origine', | |||||
'date' => 'Date', | |||||
]; | |||||
} | |||||
/* | |||||
* Relations | |||||
*/ | |||||
public function getOrder() | |||||
{ | |||||
return $this->hasOne(User::className(), ['id' => 'id_order']); | |||||
} | |||||
public function getUser() | |||||
{ | |||||
return $this->hasOne(User::className(), ['id' => 'id_user']); | |||||
} | |||||
/** | |||||
* Retourne les options de base nécessaires à la fonction de recherche. | |||||
* | |||||
* @return array | |||||
*/ | |||||
public static function defaultOptionsSearch() | |||||
{ | |||||
return [ | |||||
'with' => [], | |||||
'join_with' => ['order', 'orderStatus'], | |||||
'orderby' => 'date ASC', | |||||
'attribute_id_producer' => '' | |||||
]; | |||||
} | |||||
} |
<?php | <?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. | |||||
*/ | |||||
/** | |||||
* 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 common\models; | namespace common\models; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use common\components\ActiveRecordCommon ; | |||||
use common\components\ActiveRecordCommon; | |||||
/** | /** | ||||
* This is the model class for table "product_order". | * This is the model class for table "product_order". | ||||
class ProductOrder extends ActiveRecordCommon | class ProductOrder extends ActiveRecordCommon | ||||
{ | { | ||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public static function tableName() | |||||
{ | |||||
return 'product_order'; | |||||
} | |||||
/* | |||||
* Relations | |||||
*/ | |||||
public function getProduct() | |||||
{ | |||||
return $this->hasOne(Product::className(), ['id' => 'id_product']); | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function rules() | |||||
{ | |||||
return [ | |||||
[['id_order', 'id_product', 'quantity'], 'required'], | |||||
[['id_order', 'id_product', 'id_tax_rate'], 'integer'], | |||||
[['unit'], 'string', 'max' => 255], | |||||
[['quantity'], 'number', 'min' => 0], | |||||
[['description'], 'safe'] | |||||
]; | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public static function tableName() | |||||
{ | |||||
return 'product_order'; | |||||
} | |||||
/* | |||||
* Relations | |||||
*/ | |||||
public function getProduct() | |||||
{ | |||||
return $this->hasOne(Product::className(), ['id' => 'id_product']); | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function rules() | |||||
{ | |||||
return [ | |||||
[['id_order', 'id_product', 'quantity'], 'required'], | |||||
[['id_order', 'id_product', 'id_tax_rate'], 'integer'], | |||||
[['unit'], 'string', 'max' => 255], | |||||
[['quantity'], 'number', 'min' => 0], | |||||
[['description'], 'safe'] | |||||
]; | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function attributeLabels() | |||||
{ | |||||
return [ | |||||
'id' => 'ID', | |||||
'id_order' => 'Commande', | |||||
'id_product' => 'Product', | |||||
'quantity' => 'Quantité', | |||||
'unit' => 'Unité', | |||||
'id_tax_rate' => 'Taxe', | |||||
'description' => 'Description' | |||||
]; | |||||
} | |||||
/** | |||||
* Retourne les options de base nécessaires à la fonction de recherche. | |||||
* | |||||
* @return array | |||||
*/ | |||||
public static function defaultOptionsSearch() | |||||
{ | |||||
return [ | |||||
'with' => ['taxRate'], | |||||
'join_with' => [], | |||||
'orderby' => '', | |||||
'attribute_id_producer' => '' | |||||
]; | |||||
} | |||||
public function afterFind() { | |||||
if ($this->taxRate == null) { | |||||
$this->populateRelation('taxRate', GlobalParam::getCurrentProducer()->taxRate); | |||||
} | |||||
parent::afterFind(); | |||||
} | |||||
public function getTaxRate() | |||||
{ | |||||
return $this->hasOne(TaxRate::className(), ['id' => 'id_tax_rate']); | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function attributeLabels() | |||||
{ | |||||
return [ | |||||
'id' => 'ID', | |||||
'id_order' => 'Commande', | |||||
'id_product' => 'Product', | |||||
'quantity' => 'Quantité', | |||||
'unit' => 'Unité', | |||||
'id_tax_rate' => 'Taxe', | |||||
'description' => 'Description' | |||||
]; | |||||
} | |||||
/** | |||||
* Retourne les options de base nécessaires à la fonction de recherche. | |||||
* | |||||
* @return array | |||||
*/ | |||||
public static function defaultOptionsSearch() { | |||||
return [ | |||||
'with' => [], | |||||
'join_with' => [], | |||||
'orderby' => '', | |||||
'attribute_id_producer' => '' | |||||
] ; | |||||
} | |||||
} | } |
class m200106_143017_module_devis_bl_factures_modification_champs_id_status_order extends Migration | class m200106_143017_module_devis_bl_factures_modification_champs_id_status_order extends Migration | ||||
{ | { | ||||
public function safeUp() | |||||
{ | |||||
$this->dropColumn('order', 'id_status') ; | |||||
} | |||||
public function safeUp() | |||||
{ | |||||
$this->dropColumn('order', 'id_status'); | |||||
} | |||||
public function safeDown() | |||||
{ | |||||
$this->addColumn('order', 'id_status', Schema::TYPE_INTEGER) ; | |||||
} | |||||
public function safeDown() | |||||
{ | |||||
$this->addColumn('order', 'id_status', Schema::TYPE_INTEGER); | |||||
} | |||||
} | } |
public function safeUp() | public function safeUp() | ||||
{ | { | ||||
$this->dropColumn('delivery_note', 'id_point_sale_distribution'); | $this->dropColumn('delivery_note', 'id_point_sale_distribution'); | ||||
$this->addColumn('delivery_note', 'id_point_sale', Schema::TYPE_INTEGER) ; | |||||
$this->addColumn('delivery_note', 'id_distribution', Schema::TYPE_INTEGER) ; | |||||
$this->addColumn('delivery_note', 'id_point_sale', Schema::TYPE_INTEGER); | |||||
$this->addColumn('delivery_note', 'id_distribution', Schema::TYPE_INTEGER); | |||||
} | } | ||||
public function safeDown() | public function safeDown() | ||||
{ | { | ||||
$this->addColumn('delivery_note', 'id_point_sale_distribution', Schema::TYPE_INTEGER); | $this->addColumn('delivery_note', 'id_point_sale_distribution', Schema::TYPE_INTEGER); | ||||
$this->dropColumn('delivery_note', 'id_point_sale') ; | |||||
$this->dropColumn('delivery_note', 'id_distribution') ; | |||||
$this->dropColumn('delivery_note', 'id_point_sale'); | |||||
$this->dropColumn('delivery_note', 'id_distribution'); | |||||
} | } | ||||
} | } |
class m200107_101930_module_devis_bl_facture_suppression_champs_delivery_note extends Migration | class m200107_101930_module_devis_bl_facture_suppression_champs_delivery_note extends Migration | ||||
{ | { | ||||
public function safeUp() | |||||
{ | |||||
$this->dropColumn('delivery_note', 'id_point_sale') ; | |||||
$this->dropColumn('delivery_note', 'id_distribution') ; | |||||
} | |||||
public function safeUp() | |||||
{ | |||||
$this->dropColumn('delivery_note', 'id_point_sale'); | |||||
$this->dropColumn('delivery_note', 'id_distribution'); | |||||
} | |||||
public function safeDown() | |||||
{ | |||||
$this->addColumn('delivery_note', 'id_point_sale', Schema::TYPE_INTEGER) ; | |||||
$this->addColumn('delivery_note', 'id_distribution', Schema::TYPE_INTEGER) ; | |||||
} | |||||
public function safeDown() | |||||
{ | |||||
$this->addColumn('delivery_note', 'id_point_sale', Schema::TYPE_INTEGER); | |||||
$this->addColumn('delivery_note', 'id_distribution', Schema::TYPE_INTEGER); | |||||
} | |||||
} | } |
class m200107_140622_module_bl_devis_factures_modification_champ_taxrate extends Migration | class m200107_140622_module_bl_devis_factures_modification_champ_taxrate extends Migration | ||||
{ | { | ||||
public function safeUp() | |||||
{ | |||||
$this->renameColumn('tax_rate', 'pourcent', 'value'); | |||||
public function safeUp() | |||||
{ | |||||
$this->renameColumn('tax_rate', 'pourcent', 'value'); | |||||
} | |||||
} | |||||
public function safeDown() | |||||
{ | |||||
$this->renameColumn('tax_rate', 'value', 'pourcent'); | |||||
public function safeDown() | |||||
{ | |||||
$this->renameColumn('tax_rate', 'value', 'pourcent'); | |||||
} | |||||
} | |||||
} | } |
class m200108_091551_module_bl_devis_factures_suppression_champs_documents extends Migration | 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 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) ; | |||||
} | |||||
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); | |||||
} | |||||
} | } |
class m200108_101042_module_bl_devis_factures_modification_champs_documents extends Migration | 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 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); | |||||
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) ; | |||||
} | |||||
$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); | |||||
} | |||||
} | } |
class m200108_145508_module_bl_devis_factures_suppression_price_unit_step_product_subscription extends Migration | class m200108_145508_module_bl_devis_factures_suppression_price_unit_step_product_subscription extends Migration | ||||
{ | { | ||||
public function safeUp() | |||||
{ | |||||
$this->dropColumn('product_subscription', 'unit') ; | |||||
$this->dropColumn('product_subscription', 'step') ; | |||||
$this->dropColumn('product_subscription', 'price') ; | |||||
} | |||||
public function safeDown() | |||||
{ | |||||
echo "m200108_145508_module_bl_devis_factures_suppression_price_unit_step_product_subscription cannot be reverted.\n"; | |||||
return false; | |||||
} | |||||
/* | |||||
// Use up()/down() to run migration code without a transaction. | |||||
public function up() | |||||
{ | |||||
} | |||||
public function down() | |||||
{ | |||||
echo "m200108_145508_module_bl_devis_factures_suppression_price_unit_step_product_subscription cannot be reverted.\n"; | |||||
return false; | |||||
} | |||||
*/ | |||||
public function safeUp() | |||||
{ | |||||
$this->dropColumn('product_subscription', 'unit'); | |||||
$this->dropColumn('product_subscription', 'step'); | |||||
$this->dropColumn('product_subscription', 'price'); | |||||
} | |||||
public function safeDown() | |||||
{ | |||||
echo "m200108_145508_module_bl_devis_factures_suppression_price_unit_step_product_subscription cannot be reverted.\n"; | |||||
return false; | |||||
} | |||||
/* | |||||
// Use up()/down() to run migration code without a transaction. | |||||
public function up() | |||||
{ | |||||
} | |||||
public function down() | |||||
{ | |||||
echo "m200108_145508_module_bl_devis_factures_suppression_price_unit_step_product_subscription cannot be reverted.\n"; | |||||
return false; | |||||
} | |||||
*/ | |||||
} | } |
<?php | |||||
use yii\db\Migration; | |||||
use yii\db\Schema; | |||||
class m200108_195657_module_bl_devis_factures_order_status_history extends Migration | |||||
{ | |||||
public function safeUp() | |||||
{ | |||||
$this->delete('order_status'); | |||||
$this->renameTable('order_order_status', 'order_status_history'); | |||||
$this->addColumn('order_status_history', 'id_user', Schema::TYPE_INTEGER); | |||||
$this->addColumn('order', 'status', Schema::TYPE_STRING); | |||||
$this->renameColumn('order_status_history', 'id_order_status', 'status'); | |||||
$this->alterColumn('order_status_history', 'status', Schema::TYPE_STRING); | |||||
} | |||||
public function safeDown() | |||||
{ | |||||
echo "m200108_195657_module_bl_devis_factures_order_status_history cannot be reverted.\n"; | |||||
return 'false'; | |||||
} | |||||
/* | |||||
// Use up()/down() to run migration code without a transaction. | |||||
public function up() | |||||
{ | |||||
} | |||||
public function down() | |||||
{ | |||||
echo "m200108_195657_module_bl_devis_factures_order_status_history cannot be reverted.\n"; | |||||
return false; | |||||
} | |||||
*/ | |||||
} |
<?php | |||||
use yii\db\Migration; | |||||
use yii\db\Schema; | |||||
class m200109_152833_module_bl_devis_factures_order_status_history_add_origin extends Migration | |||||
{ | |||||
public function safeUp() | |||||
{ | |||||
$this->addColumn('order_status_history', 'origin', Schema::TYPE_STRING); | |||||
} | |||||
public function safeDown() | |||||
{ | |||||
$this->dropColumn('order_status_history', 'origin'); | |||||
} | |||||
} |
$order = new Order; | $order = new Order; | ||||
$order->load(Yii::$app->request->post()); | $order->load(Yii::$app->request->post()); | ||||
$order->id_user = User::getCurrentId(); | $order->id_user = User::getCurrentId(); | ||||
$order->status = 'tmp-order'; | |||||
$order->date = date('Y-m-d H:i:s'); | $order->date = date('Y-m-d H:i:s'); | ||||
$order->origin = Order::ORIGIN_USER; | $order->origin = Order::ORIGIN_USER; | ||||
} | } | ||||
// sauvegarde de la commande | // sauvegarde de la commande | ||||
$order->save(); | $order->save(); | ||||
$order->changeOrderStatus('new-order', 'user'); | |||||
// ajout de l'utilisateur à l'établissement | // ajout de l'utilisateur à l'établissement | ||||
Producer::addUser(User::getCurrentId(), $distribution->id_producer); | Producer::addUser(User::getCurrentId(), $distribution->id_producer); | ||||
$productOrder->id_product = $product->id; | $productOrder->id_product = $product->id; | ||||
$productOrder->price = $product->price; | $productOrder->price = $product->price; | ||||
$productOrder->id_tax_rate = $product->id_tax_rate; | |||||
$unit = (!is_null($order) && isset($unitsArray[$product->id])) ? $unitsArray[$product->id] : $product->unit; | $unit = (!is_null($order) && isset($unitsArray[$product->id])) ? $unitsArray[$product->id] : $product->unit; | ||||
$coefficient = Product::$unitsArray[$unit]['coefficient']; | $coefficient = Product::$unitsArray[$unit]['coefficient']; | ||||
$creditFunctioning == Producer::CREDIT_FUNCTIONING_MANDATORY || | $creditFunctioning == Producer::CREDIT_FUNCTIONING_MANDATORY || | ||||
($creditFunctioning == Producer::CREDIT_FUNCTIONING_USER && $userProducer->credit_active) | ($creditFunctioning == Producer::CREDIT_FUNCTIONING_USER && $userProducer->credit_active) | ||||
)) { | )) { | ||||
$order->changeOrderStatus('waiting-paiement-by-credit', 'user'); | |||||
// à payer | // à payer | ||||
if ($order->getPaymentStatus() == Order::PAYMENT_UNPAID) { | if ($order->getPaymentStatus() == Order::PAYMENT_UNPAID) { | ||||
User::getCurrentId(), | User::getCurrentId(), | ||||
User::getCurrentId() | User::getCurrentId() | ||||
); | ); | ||||
$order->changeOrderStatus('paid-by-credit', 'user'); | |||||
}else{ | |||||
$order->changeOrderStatus('waiting-paiement-on-delivery', 'user'); | |||||
} | } | ||||
} // surplus à rembourser | } // surplus à rembourser | ||||
elseif ($order->getPaymentStatus() == Order::PAYMENT_SURPLUS) { | elseif ($order->getPaymentStatus() == Order::PAYMENT_SURPLUS) { | ||||
User::getCurrentId() | User::getCurrentId() | ||||
); | ); | ||||
} | } | ||||
}else{ | |||||
$order->changeOrderStatus('waiting-paiement-on-delivery', 'user'); | |||||
} | } | ||||
} | } | ||||
if ($order && User::getCurrentId() == $order->id_user) { | if ($order && User::getCurrentId() == $order->id_user) { | ||||
$order->delete(); | $order->delete(); | ||||
$order->changeOrderStatus('canceled', 'user'); | |||||
Yii::$app->session->setFlash('success', 'Votre commande a bien été annulée.'); | Yii::$app->session->setFlash('success', 'Votre commande a bien été annulée.'); | ||||
} | } | ||||