KataoSupplierInvoice.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. /**
  3. * Subclass for representing a row from the 'katao_supplier_invoice' table.
  4. *
  5. * @package lib.model
  6. */
  7. class KataoSupplierInvoice extends BaseKataoSupplierInvoice {
  8. const STATUS_RECEIVED = 1;
  9. const STATUS_PAID = 2;
  10. const PAYMENT_MODE_BANK_TRANSFER = 1;
  11. const PAYMENT_MODE_CREDIT_CARD = 2;
  12. const PAYMENT_MODE_CHECK = 3;
  13. public function getStatusStr() {
  14. return KataoSupplierInvoicePeer::getStatusStr($this->getStatus());
  15. }
  16. public function getPaymentModeStr() {
  17. return KataoSupplierInvoicePeer::getPaymentModeStr($this->getPaymentMode());
  18. }
  19. public function getInvoiceDateStr() {
  20. return CatalyzDate::formatShort($this->getInvoiceDate(null));
  21. }
  22. public function getOrdersStr() {
  23. $return = array();
  24. foreach ($this->getKataoSupplierInvoiceOrdersJoinKataoOrder() as/*(KataoSupplierInvoiceOrder)*/ $katao_supplier_invoice_order) {
  25. $return[] = $katao_supplier_invoice_order->getKataoOrder()->getNumber();
  26. }
  27. return implode(', ', $return);
  28. }
  29. public function getUsedSolByProduct() {
  30. $return = array();
  31. $criteria = new Criteria();
  32. $criteria->addSelectColumn(KataoInvoiceProductPeer::KATAO_PRODUCT_ID);
  33. $criteria->addSelectColumn(KataoInvoiceProductPeer::SOL_AMOUNT);
  34. $criteria->addJoin(KataoInvoicePeer::ID, KataoInvoiceProductPeer::KATAO_INVOICE_ID);
  35. $criteria->add(KataoInvoicePeer::KATAO_PERIOD_ID, $this->getKataoPeriodId());
  36. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_SENT);
  37. $rs = KataoInvoiceProductPeer::doSelectRS($criteria);
  38. while ($rs->next()) {
  39. $return[$rs->getInt(1)] = $rs->getInt(2);
  40. }
  41. return $return;
  42. }
  43. public function getUsedSolTotal() {
  44. $return = 0;
  45. $criteria = new Criteria();
  46. $criteria->addAsColumn('sum_products', sprintf('SUM(%s)', KataoInvoiceProductPeer::SOL_AMOUNT));
  47. $criteria->addJoin(KataoInvoicePeer::ID, KataoInvoiceProductPeer::KATAO_INVOICE_ID);
  48. $criteria->add(KataoInvoicePeer::KATAO_PERIOD_ID, $this->getKataoPeriodId());
  49. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_SENT);
  50. $criteria->addGroupByColumn(KataoInvoicePeer::ID);
  51. $rs = KataoInvoiceProductPeer::doSelectRS($criteria);
  52. while ($rs->next()) {
  53. $return += $rs->getInt(1);
  54. }
  55. return $return;
  56. }
  57. public function generatePDF() {
  58. $katao_supplier = $this->getKataoSupplier();
  59. $tva_rates = array('0.055' => '2', '0.196' => '1');
  60. $pdf = new PDF_Invoice('P', 'mm', 'A4');
  61. $page = $pdf->addPageHeaderSupplierInvoice(1, $this, $katao_supplier);
  62. $y = 109;
  63. $used_sol_by_product = $this->getUsedSolByProduct();
  64. $total_by_tva_rate = array(1 => 0, 2 => 0);
  65. foreach ($this->getKataoSupplierInvoiceProductsJoinKataoProduct() as/*(KataoSupplierInvoiceProduct)*/ $katao_supplier_invoice_product) {
  66. if ($y > 244) {
  67. $page = $pdf->addPageHeaderSupplierInvoice($page, $this, $katao_supplier);
  68. $y = 109;
  69. }
  70. $tva_rate = !empty($tva_rates[(string)$katao_supplier_invoice_product->getProductTvaRate()])?$tva_rates[(string)$katao_supplier_invoice_product->getProductTvaRate()]:0;
  71. $quantity = $katao_supplier_invoice_product->getQuantity();
  72. $unit_price = $katao_supplier_invoice_product->getProductPriceEuro();
  73. $amount = $katao_supplier_invoice_product->getProductPriceTotal();
  74. if ($tva_rate) {
  75. $total_by_tva_rate[$tva_rate] += round($quantity * $katao_supplier_invoice_product->getProductPriceEuro(), 2);
  76. }
  77. $designation = utf8_decode($katao_supplier_invoice_product->getProductName());
  78. if (!empty($used_sol_by_product[$katao_supplier_invoice_product->getKataoProductId()])) {
  79. $designation .= "\n" . 'Dont ' . $used_sol_by_product[$katao_supplier_invoice_product->getKataoProductId()] . ' ' . wpConfig::getAdditionalCurrencyName();
  80. }
  81. $line = array("REFERENCE" => $katao_supplier_invoice_product->getProductReference(),
  82. "DESIGNATION" => $designation,
  83. "QUANTITE" => $quantity,
  84. "P.U. TTC" => round($unit_price, 2),
  85. "MONTANT TTC" => round($amount, 2),
  86. "TVA" => $tva_rate);
  87. $size = $pdf->addLine($y, $line);
  88. $y += $size + 2;
  89. }
  90. $total_by_tva_rate[1] = $this->getTaux1BasesHt();
  91. $total_by_tva_rate[2] = $this->getTaux2BasesHt();
  92. $pdf->addCadreTVAs();
  93. $tot_prods = array();
  94. foreach ($total_by_tva_rate as $tva_rate => $amount) {
  95. $tot_prods[] = array ("px_unit" => $amount, "qte" => 1, "tva" => $tva_rate);
  96. }
  97. $tab_tva = array("1" => 19.6,
  98. "2" => 5.5);
  99. $params = array("RemiseGlobale" => 1,
  100. "remise_tva" => 0, // {la remise s'applique sur ce code TVA}
  101. "remise" => 0, // {montant de la remise}
  102. "remise_percent" => 0, // {pourcentage de remise sur ce montant de TVA}
  103. "FraisPort" => 0,
  104. "portTTC" => 0, // montant des frais de ports TTC
  105. // par defaut la TVA = 19.6 %
  106. "portHT" => 0, // montant des frais de ports HT
  107. "portTVA" => 19.6, // valeur de la TVA a appliquer sur le montant HT
  108. "AccompteExige" => 0,
  109. "accompte" => 0, // montant de l'acompte (TTC)
  110. "accompte_percent" => 0, // pourcentage d'acompte (TTC)
  111. "Remarque" => "");
  112. $pdf->addTVAs($params, $tab_tva, $tot_prods, $this);
  113. $pdf->addCadreEurosFrancs();
  114. return $pdf->Output('', 'S');
  115. }
  116. public function initPaymentAmounts() {
  117. $payment_amount_euro = 0;
  118. $payment_amount_sol = 0;
  119. $criteria = new Criteria();
  120. $criteria->addSelectColumn(KataoInvoiceProductPeer::QUANTITY);
  121. $criteria->addSelectColumn(KataoInvoiceProductPeer::PRODUCT_PRICE_EURO);
  122. $criteria->addSelectColumn(KataoInvoiceProductPeer::PRODUCT_TVA_RATE);
  123. $criteria->addSelectColumn(KataoInvoiceProductPeer::SOL_AMOUNT);
  124. $criteria->addJoin(KataoSupplierInvoiceOrderPeer::KATAO_ORDER_ID, KataoOrderPeer::ID);
  125. $criteria->addJoin(KataoOrderPeer::ID, KataoOrderProductPeer::KATAO_ORDER_ID);
  126. $criteria->addJoin(KataoOrderProductPeer::ID, KataoCartProductPeer::KATAO_ORDER_PRODUCT_ID);
  127. $criteria->addJoin(KataoCartProductPeer::KATAO_CART_ID, KataoCartPeer::ID);
  128. $criteria->addJoin(KataoCartPeer::KATAO_USER_ID, KataoUserPeer::ID);
  129. $criteria->addJoin(KataoUserPeer::KATAO_MEMBER_ID, KataoInvoicePeer::KATAO_MEMBER_ID);
  130. $criteria->addJoin(KataoInvoicePeer::ID, KataoInvoiceProductPeer::KATAO_INVOICE_ID);
  131. $criteria->addJoin(KataoInvoiceProductPeer::KATAO_PRODUCT_ID, KataoSupplierInvoiceProductPeer::KATAO_PRODUCT_ID);
  132. $criteria->add(KataoInvoicePeer::KATAO_PERIOD_ID, $this->getKataoPeriodId());
  133. $criteria->add(KataoSupplierInvoiceProductPeer::KATAO_SUPPLIER_INVOICE_ID, $this->getId());
  134. $criteria->setDistinct();
  135. $rs = KataoInvoiceProductPeer::doSelectRS($criteria);
  136. while ($rs->next()) {
  137. $payment_amount_euro += $rs->getInt(1) * round($rs->getFloat(2) * (1 + $rs->getFloat(3)), 2);
  138. $payment_amount_sol += $rs->getInt(4);
  139. }
  140. $this->setPaymentAmountEuro($payment_amount_euro - $payment_amount_sol / CONST_EURO_TO_SOL);
  141. $this->setPaymentAmountSol($payment_amount_sol);
  142. }
  143. }