KataoInvoice.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <?php
  2. /**
  3. * Subclass for representing a row from the 'katao_invoice' table.
  4. *
  5. * @package lib.model
  6. */
  7. class KataoInvoice extends BaseKataoInvoice {
  8. const STATUS_GENERATED = 1;
  9. const STATUS_DELIVERED = 2;
  10. const STATUS_VALIDATED = 3;
  11. const STATUS_SENT = 4;
  12. public function __toString() {
  13. return $this->getNumber();
  14. }
  15. public function getNumber() {
  16. return sprintf('FA%04d', $this->getId());
  17. }
  18. /**
  19. * KataoInvoice::countProducts()
  20. *
  21. * @return integer
  22. */
  23. public function countProducts() {
  24. return $this->countKataoCartProducts();
  25. }
  26. /**
  27. * KataoInvoice::sumProducts()
  28. *
  29. * @return float
  30. */
  31. public function sumProducts() {
  32. $return = 0;
  33. $criteria = new Criteria();
  34. $criteria->addSelectColumn(KataoInvoiceProductPeer::KATAO_INVOICE_ID);
  35. $criteria->addAsColumn('sum_products', sprintf('SUM(ROUND(%s * (1 + %s) * (1 + %s), 2) * %s)', KataoInvoiceProductPeer::PRODUCT_PRICE_EURO, KataoInvoiceProductPeer::PRODUCT_MARGIN, KataoInvoiceProductPeer::PRODUCT_TVA_RATE, KataoInvoiceProductPeer::QUANTITY_DELIVERED));
  36. $criteria->add(KataoInvoiceProductPeer::KATAO_INVOICE_ID, $this->getId());
  37. $criteria->addGroupByColumn(KataoInvoiceProductPeer::KATAO_INVOICE_ID);
  38. $rs = KataoInvoiceProductPeer::doSelectRS($criteria);
  39. if ($rs->next()) {
  40. $return = $rs->getFloat(2);
  41. }
  42. return $return;
  43. }
  44. public function sumProductsStr() {
  45. return Utils::formatCurrencyEuro($this->sumProducts());
  46. }
  47. public function getStatusStr() {
  48. return KataoInvoicePeer::getStatusStr($this->getStatus());
  49. }
  50. public function getCreatedAtStr() {
  51. return CatalyzDate::formatShort($this->getCreatedAt(null));
  52. }
  53. public function getMemberName() {
  54. return $this->getKataoMember()->getFullName();
  55. }
  56. public function getMemberLink() {
  57. $result = '';
  58. if (null != $katao_member = $this->getKataoMember()) {
  59. $result = link_to($katao_member->getFullName(), '@katao_member_show?id=' . $katao_member->getId());
  60. }
  61. return $result;
  62. }
  63. public function getNodeLink($with_link = false) {
  64. if ($with_link) {
  65. return link_to($this->getKataoNode()->getCity(), '@katao_node_show?id=' . $this->getKataoNodeId());
  66. }
  67. return $this->getKataoNode()->getCity();
  68. }
  69. public function getPeriodLink($with_link = false) {
  70. if ($with_link) {
  71. return link_to($this->getKataoPeriod()->getName(), '@katao_node_show?id=' . $this->getKataoPeriodId());
  72. }
  73. return $this->getKataoPeriod()->getName();
  74. }
  75. public function generatePDF() {
  76. $katao_member = $this->getKataoMember();
  77. $tva_rates = array('0.055' => '2', '0.2' => '1');
  78. $tva_rates_map = array(2 => 0.055, 1 => 0.2);
  79. $pdf = new PDF_Invoice('P', 'mm', 'A4');
  80. $page = $pdf->addPageHeaderInvoice(1, $this, $katao_member);
  81. $y = 109;
  82. $total_by_tva_rate = array(1 => 0, 2 => 0);
  83. $criteria = new Criteria();
  84. $criteria->addAscendingOrderByColumn(KataoInvoiceProductPeer::PRODUCT_NAME);
  85. foreach ($this->getKataoInvoiceProductsJoinKataoProduct($criteria) as/*(KataoInvoiceProduct)*/ $katao_invoice_product) {
  86. if ($y > 244) {
  87. $page = $pdf->addPageHeaderInvoice($page, $this, $katao_member);
  88. $y = 109;
  89. }
  90. $tva_rate = !empty($tva_rates[(string)$katao_invoice_product->getProductTvaRate()])?$tva_rates[(string)$katao_invoice_product->getProductTvaRate()]:0;
  91. $amount = $katao_invoice_product->getQuantityDelivered() * $katao_invoice_product->getProductPriceWithTaxes();
  92. if ($tva_rate) {
  93. $total_by_tva_rate[$tva_rate] += $amount;
  94. }
  95. $designation = utf8_decode($katao_invoice_product->getProductName());
  96. $designation .= "\n" . 'Dont ' . $katao_invoice_product->getSolAmount() . ' ' . wpConfig::getAdditionalCurrencyName();
  97. $line = array("REFERENCE" => $katao_invoice_product->getProductReference(),
  98. "DESIGNATION" => $designation,
  99. "QUANTITE" => $katao_invoice_product->getQuantityDelivered(),
  100. "P.U. TTC" => $katao_invoice_product->getProductPriceWithTaxes(),
  101. "MONTANT TTC" => $amount,
  102. "TVA" => $tva_rate);
  103. $size = $pdf->addLine($y, $line);
  104. $y += $size + 2;
  105. }
  106. $pdf->addCadreTVAs();
  107. $tot_prods = array();
  108. foreach ($total_by_tva_rate as $tva_rate => $amount) {
  109. $tot_prods[] = array ("px_unit" => round($amount / (1 + $tva_rates_map[$tva_rate]), 2), "qte" => 1, "tva" => $tva_rate);
  110. }
  111. $tab_tva = array("1" => 20,
  112. "2" => 5.5);
  113. $params = array("RemiseGlobale" => 1,
  114. "remise_tva" => 0, // {la remise s'applique sur ce code TVA}
  115. "remise" => 0, // {montant de la remise}
  116. "remise_percent" => 0, // {pourcentage de remise sur ce montant de TVA}
  117. "FraisPort" => 0,
  118. "portTTC" => 0, // montant des frais de ports TTC
  119. // par defaut la TVA = 20 %
  120. "portHT" => 0, // montant des frais de ports HT
  121. "portTVA" => 20, // valeur de la TVA a appliquer sur le montant HT
  122. "AccompteExige" => 1,
  123. "accompte" => 0, // montant de l'acompte (TTC)
  124. "accompte_percent" => 100, // pourcentage d'acompte (TTC)
  125. "Remarque" => "");
  126. $pdf->addTVAs($params, $tab_tva, $tot_prods);
  127. $pdf->addCadreEurosFrancs();
  128. return $pdf->Output('', 'S');
  129. }
  130. public function getOtherProducts() {
  131. $products = array();
  132. $criteria = new Criteria();
  133. $criteria->addSelectColumn(KataoInvoiceProductPeer::KATAO_PRODUCT_ID);
  134. $criteria->add(KataoInvoiceProductPeer::KATAO_INVOICE_ID, $this->getId());
  135. $rs = KataoProductPeer::doSelectRS($criteria);
  136. while ($rs->next()) {
  137. $products[$rs->getInt(1)] = true;
  138. }
  139. $return = array();
  140. $criteria = new Criteria();
  141. $criteria->addSelectColumn(KataoProductPeer::ID);
  142. $criteria->addSelectColumn(KataoProductPeer::NAME);
  143. $criteria->addJoin(KataoProductPeer::ID, KataoOrderProductPeer::KATAO_PRODUCT_ID);
  144. $criteria->addJoin(KataoOrderProductPeer::KATAO_ORDER_ID, KataoOrderPeer::ID);
  145. $criteria->add(KataoOrderPeer::KATAO_PERIOD_ID, $this->getKataoPeriodId());
  146. $criteria->add(KataoOrderPeer::KATAO_NODE_ID, $this->getKataoNodeId());
  147. if (0 < count($products)) {
  148. $criteria->add(KataoProductPeer::ID, array_keys($products), Criteria::NOT_IN);
  149. }
  150. $criteria->addAscendingOrderByColumn(KataoProductPeer::NAME);
  151. $rs = KataoProductPeer::doSelectRS($criteria);
  152. while ($rs->next()) {
  153. $return[$rs->getInt(1)] = $rs->getString(2);
  154. }
  155. return $return;
  156. }
  157. public function getKataoInvoiceProductsOrderByProduct() {
  158. $criteria = new Criteria();
  159. $criteria->addAscendingOrderByColumn(KataoInvoiceProductPeer::PRODUCT_NAME);
  160. return $this->getKataoInvoiceProducts($criteria);
  161. }
  162. }