Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

161 lines
5.2KB

  1. <?php
  2. /**
  3. * Copyright distrib (2018)
  4. *
  5. * contact@opendistrib.net
  6. *
  7. * Ce logiciel est un programme informatique servant à aider les producteurs
  8. * à distribuer leur production en circuits courts.
  9. *
  10. * Ce logiciel est régi par la licence CeCILL soumise au droit français et
  11. * respectant les principes de diffusion des logiciels libres. Vous pouvez
  12. * utiliser, modifier et/ou redistribuer ce programme sous les conditions
  13. * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
  14. * sur le site "http://www.cecill.info".
  15. *
  16. * En contrepartie de l'accessibilité au code source et des droits de copie,
  17. * de modification et de redistribution accordés par cette licence, il n'est
  18. * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
  19. * seule une responsabilité restreinte pèse sur l'auteur du programme, le
  20. * titulaire des droits patrimoniaux et les concédants successifs.
  21. *
  22. * A cet égard l'attention de l'utilisateur est attirée sur les risques
  23. * associés au chargement, à l'utilisation, à la modification et/ou au
  24. * développement et à la reproduction du logiciel par l'utilisateur étant
  25. * donné sa spécificité de logiciel libre, qui peut le rendre complexe à
  26. * manipuler et qui le réserve donc à des développeurs et des professionnels
  27. * avertis possédant des connaissances informatiques approfondies. Les
  28. * utilisateurs sont donc invités à charger et tester l'adéquation du
  29. * logiciel à leurs besoins dans des conditions permettant d'assurer la
  30. * sécurité de leurs systèmes et ou de leurs données et, plus généralement,
  31. * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
  32. *
  33. * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
  34. * pris connaissance de la licence CeCILL, et que vous en avez accepté les
  35. * termes.
  36. */
  37. namespace common\models;
  38. use common\helpers\GlobalParam;
  39. use common\helpers\Price;
  40. use Yii;
  41. use common\components\ActiveRecordCommon;
  42. /**
  43. * This is the model class for table "product_order".
  44. *
  45. * @property integer $id
  46. * @property integer $id_order
  47. * @property integer $id_product
  48. * @property double $quantity
  49. * @property string $unit
  50. */
  51. class ProductOrder extends ActiveRecordCommon
  52. {
  53. /**
  54. * @inheritdoc
  55. */
  56. public static function tableName()
  57. {
  58. return 'product_order';
  59. }
  60. /*
  61. * Relations
  62. */
  63. public function getProduct()
  64. {
  65. return $this->hasOne(Product::className(), ['id' => 'id_product']);
  66. }
  67. public function getTaxRate()
  68. {
  69. return $this->hasOne(TaxRate::className(), ['id' => 'id_tax_rate']);
  70. }
  71. /**
  72. * @inheritdoc
  73. */
  74. public function rules()
  75. {
  76. return [
  77. [['id_order', 'id_product', 'quantity'], 'required'],
  78. [['id_order', 'id_product', 'id_tax_rate'], 'integer'],
  79. [['unit'], 'string', 'max' => 255],
  80. [['quantity'], 'number', 'min' => 0],
  81. [['price', 'invoice_price'], 'double'],
  82. [['description'], 'safe']
  83. ];
  84. }
  85. /**
  86. * @inheritdoc
  87. */
  88. public function attributeLabels()
  89. {
  90. return [
  91. 'id' => 'ID',
  92. 'id_order' => 'Commande',
  93. 'id_product' => 'Product',
  94. 'quantity' => 'Quantité',
  95. 'unit' => 'Unité',
  96. 'id_tax_rate' => 'Taxe',
  97. 'description' => 'Description',
  98. 'price' => 'Prix',
  99. 'invoice_price' => 'Prix facturé',
  100. ];
  101. }
  102. /**
  103. * Retourne les options de base nécessaires à la fonction de recherche.
  104. *
  105. * @return array
  106. */
  107. public static function defaultOptionsSearch()
  108. {
  109. return [
  110. 'with' => ['taxRate'],
  111. 'join_with' => [],
  112. 'orderby' => '',
  113. 'attribute_id_producer' => ''
  114. ];
  115. }
  116. public function afterFind() {
  117. if ($this->taxRate == null) {
  118. $this->populateRelation('taxRate', GlobalParam::getCurrentProducer()->taxRate);
  119. }
  120. parent::afterFind();
  121. }
  122. public function getPrice()
  123. {
  124. return $this->price ;
  125. }
  126. public function getInvoicePrice() {
  127. return $this->invoice_price ;
  128. }
  129. /**
  130. * Retourne le prix du produit avec taxe
  131. */
  132. public function getPriceWithTax()
  133. {
  134. return Price::getPriceWithTax($this->price, $this->taxRate->value);
  135. }
  136. public function getPriceByTypeTotal($typeTotal = Order::AMOUNT_TOTAL)
  137. {
  138. if($typeTotal == Order::INVOICE_AMOUNT_TOTAL && $this->invoice_price) {
  139. return $this->invoice_price;
  140. }
  141. return $this->price;
  142. }
  143. }