KataoMember.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <?php
  2. /**
  3. * Subclass for representing a row from the 'katao_member' table.
  4. *
  5. * @package lib.model
  6. */
  7. class KataoMember extends BaseKataoMember {
  8. public function save($con = null)
  9. {
  10. $this->initAccountingCode();
  11. parent::save($con);
  12. }
  13. public function __toString()
  14. {
  15. return $this->getFullName();
  16. }
  17. /**
  18. * KataoMember::getKataoNode()
  19. *
  20. * @param Connection $con
  21. * @return KataoNode
  22. * @throws PropelException
  23. */
  24. public function getKataoNode($con = null)
  25. {
  26. return $this->getKataoNodeRelatedByKataoNodeId();
  27. }
  28. public function getFullName()
  29. {
  30. // return mb_convert_case($this->getFirstName(), MB_CASE_TITLE, "UTF-8") . ' ' . strtoupper($this->getLastName());
  31. return $this->getFirstName() . ' ' . strtoupper($this->getLastName());
  32. }
  33. public function getIsRefererStr()
  34. {
  35. return $this->getIsReferer()?'Oui':'Non';
  36. }
  37. public function getIsDelegateStr()
  38. {
  39. return $this->getIsDelegate()?'Oui':'Non';
  40. }
  41. public function getIsAnonymousStr()
  42. {
  43. return $this->getIsAnonymous()?'Oui':'Non';
  44. }
  45. /**
  46. * KataoMember::getFirstKataoUser()
  47. *
  48. * @return KataoUser
  49. */
  50. public function getFirstKataoUser()
  51. {
  52. $katao_users = $this->getKataoUsers();
  53. return array_shift($katao_users);
  54. }
  55. public function initAccountingCode()
  56. {
  57. if ('' == $this->getAccountingCode()) {
  58. $index = 0;
  59. $accounting_code = sprintf('411%s', strtoupper(substr($this->getLastName(), 0, 3)));
  60. $accounting_code_sol = sprintf('412%s', strtoupper(substr($this->getLastName(), 0, 3)));
  61. while (0 < KataoMemberPeer::countByAccountingCode($accounting_code)) {
  62. $index++;
  63. $accounting_code = sprintf('411%s%d', strtoupper(substr($this->getLastName(), 0, 2)), $index);
  64. $accounting_code_sol = sprintf('412%s%d', strtoupper(substr($this->getLastName(), 0, 2)), $index);
  65. }
  66. $this->setAccountingCode($accounting_code);
  67. $this->setAccountingCodeSol($accounting_code_sol);
  68. }
  69. }
  70. public function getNodeLink($with_link = false)
  71. {
  72. $result = '';
  73. if (null != $katao_node = $this->getKataoNode()) {
  74. if ($with_link) {
  75. $result = link_to($katao_node->getCity(), '@katao_node_show?id=' . $katao_node->getId());
  76. } else {
  77. $result = $katao_node->getCity();
  78. }
  79. }
  80. return $result;
  81. }
  82. public function getStatusStr()
  83. {
  84. return $this->getFirstKataoUser()->getStatusStr();
  85. }
  86. public function getNodesHistory()
  87. {
  88. $return = array();
  89. $begin = $this->getCreatedAt(null);
  90. $criteria = new Criteria();
  91. $criteria->addAscendingOrderByColumn(KataoMemberNodePeer::CREATED_AT);
  92. $katao_member_nodes = $this->getKataoMemberNodesJoinKataoNode($criteria);
  93. if (0 < count($katao_member_nodes)) {
  94. foreach ($katao_member_nodes as/*(KataoMemberNode)*/ $katao_member_node) {
  95. $end = $katao_member_node->getCreatedAt(null);
  96. $return[$end] = array('begin' => CatalyzDate::formatShort($begin), 'end' => CatalyzDate::formatShort($end), 'node' => $katao_member_node->getKataoNode()->getCity());
  97. $begin = $end;
  98. }
  99. }
  100. $return[time()] = array('begin' => CatalyzDate::formatShort($begin), 'end' => '<i>noeud actuel</i>', 'node' => $this->getKataoNode()->getCity());
  101. ksort($return);
  102. return $return;
  103. }
  104. public function getCurrentAmountEuro()
  105. {
  106. return $this->getInitialAmountEuro() + $this->getCurrentAmount(KataoMemberDeposit::CURRENCY_EURO);
  107. }
  108. public function getCurrentAmountEuroStr()
  109. {
  110. return Utils::formatCurrencyEuro($this->getCurrentAmountEuro());
  111. }
  112. public function getCurrentAmountSol()
  113. {
  114. return $this->getInitialAmountSol() + $this->getCurrentAmount(KataoMemberDeposit::CURRENCY_SOL);
  115. }
  116. public function getCurrentAmountSolStr()
  117. {
  118. return Utils::formatCurrencySol($this->getCurrentAmountSol());
  119. }
  120. public function getCurrentAmountStr()
  121. {
  122. return sprintf('%s / %s', $this->getCurrentAmountEuroStr(), $this->getCurrentAmountSolStr());
  123. }
  124. public function getCurrentAmount($currency)
  125. {
  126. $return = 0;
  127. $criteria = new Criteria();
  128. $criteria->addSelectColumn(KataoMemberDepositPeer::KATAO_MEMBER_ID);
  129. $criteria->addAsColumn('sum_amount', sprintf('SUM(%s)', KataoMemberDepositPeer::AMOUNT));
  130. $criteria->add(KataoMemberDepositPeer::KATAO_MEMBER_ID, $this->getId());
  131. $criteria->add(KataoMemberDepositPeer::CURRENCY, $currency);
  132. $criteria->add(KataoMemberDepositPeer::PAYMENT_MODE, KataoMemberDeposit::PAYMENT_MODE_WITHDRAWAL, Criteria::NOT_EQUAL);
  133. $criteria->add(KataoMemberDepositPeer::STATUS, KataoMemberDeposit::STATUS_EXPIRED, Criteria::NOT_EQUAL);
  134. $criteria->addGroupByColumn(KataoMemberDepositPeer::KATAO_MEMBER_ID);
  135. $rs = KataoMemberDepositPeer::doSelectRS($criteria);
  136. if ($rs->next()) {
  137. $return += $rs->getFloat(2);
  138. }
  139. $criteria = new Criteria();
  140. $criteria->addSelectColumn(KataoMemberDepositPeer::KATAO_MEMBER_ID);
  141. $criteria->addAsColumn('sum_amount', sprintf('SUM(%s)', KataoMemberDepositPeer::AMOUNT));
  142. $criteria->add(KataoMemberDepositPeer::KATAO_MEMBER_ID, $this->getId());
  143. $criteria->add(KataoMemberDepositPeer::CURRENCY, $currency);
  144. $criteria->add(KataoMemberDepositPeer::PAYMENT_MODE, KataoMemberDeposit::PAYMENT_MODE_WITHDRAWAL);
  145. $criteria->add(KataoMemberDepositPeer::STATUS, KataoMemberDeposit::STATUS_EXPIRED, Criteria::NOT_EQUAL);
  146. $criteria->addGroupByColumn(KataoMemberDepositPeer::KATAO_MEMBER_ID);
  147. $rs = KataoMemberDepositPeer::doSelectRS($criteria);
  148. if ($rs->next()) {
  149. $return -= $rs->getFloat(2);
  150. }
  151. if (KataoMemberDeposit::CURRENCY_SOL == $currency) {
  152. $return = (int)$return;
  153. $criteria = new Criteria();
  154. $criteria->addSelectColumn(KataoInvoicePeer::KATAO_MEMBER_ID);
  155. $criteria->addAsColumn('sum_products', sprintf('SUM(%s)', KataoInvoicePeer::SOL_AMOUNT));
  156. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_SENT);
  157. $criteria->add(KataoInvoicePeer::KATAO_MEMBER_ID, $this->getId());
  158. $criteria->addGroupByColumn(KataoInvoicePeer::KATAO_MEMBER_ID);
  159. $rs = KataoInvoicePeer::doSelectRS($criteria);
  160. while ($rs->next()) {
  161. $return -= $rs->getInt(2);
  162. }
  163. } else {
  164. $criteria = new Criteria();
  165. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_SENT);
  166. foreach ($this->getKataoInvoices($criteria) as/*(KataoInvoice)*/ $katao_invoice) {
  167. $return -= $katao_invoice->sumProducts();
  168. }
  169. $criteria = new Criteria();
  170. $criteria->addSelectColumn(KataoInvoicePeer::KATAO_MEMBER_ID);
  171. $criteria->addAsColumn('sum_sol', sprintf('SUM(%s)', KataoInvoicePeer::SOL_AMOUNT));
  172. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_SENT);
  173. $criteria->add(KataoInvoicePeer::KATAO_MEMBER_ID, $this->getId());
  174. $criteria->addGroupByColumn(KataoInvoicePeer::KATAO_MEMBER_ID);
  175. $rs = KataoInvoicePeer::doSelectRS($criteria);
  176. while ($rs->next()) {
  177. $return += $rs->getInt(2) / CONST_EURO_TO_SOL;
  178. }
  179. }
  180. return $return;
  181. }
  182. public function isDeletable()
  183. {
  184. // $katao_user = $this->getFirstKataoUser();
  185. // return (0 == $this->countKataoMemberDeposits()) && (0 == $katao_user->countKataoCarts()) && (0 == $this->countKataoInvoices()) && (0 == $katao_user->countKataoNodes()) && (0 == $this->countKataoMembersRelatedByKataoMemberId());
  186. return $this->countKataoMember() == 0 ? false : true;
  187. }
  188. public function countKataoMember()
  189. {
  190. // if ($criteria === null) {
  191. $criteria = new Criteria();
  192. // }elseif ($criteria instanceof Criteria) {
  193. // $criteria = clone $criteria;
  194. // }
  195. $criteria->add(KataoMemberPeer::ID, $this->getId());
  196. // return KataoMemberPeer::doCount($criteria, $distinct, $con);
  197. return KataoMemberPeer::doCount($criteria);
  198. }
  199. public function transferTo($to_id, $amount)
  200. {
  201. $time = time();
  202. $to_user = KataoMemberPeer::retrieveByPK($to_id);
  203. $commentaire = sprintf('Virement de %s vers %s d\'un montant de %s Abeilles le %s', $this->getFullName(), $to_user->getFullName(), $amount, date('d/m/Y à H:i:s'));
  204. $con = Propel::getConnection();
  205. $con->begin();
  206. try {
  207. $depot = new KataoMemberDeposit();
  208. $depot->setKataoMemberId($to_user->getId());
  209. $depot->setAmount($amount);
  210. $depot->setComment($commentaire);
  211. $depot->setCurrency(KataoMemberDeposit::CURRENCY_SOL);
  212. $depot->setPaymentMode(KataoMemberDeposit::PAYMENT_MODE_TRANSFER_SOL);
  213. $depot->setStatus(KataoMemberDeposit::STATUS_VALIDATED);
  214. $depot->setValuedAt($time);
  215. $depot->save($con);
  216. $depot = new KataoMemberDeposit();
  217. $depot->setKataoMemberId($this->getId());
  218. $depot->setAmount(- 1 * $amount);
  219. $depot->setComment($commentaire);
  220. $depot->setCurrency(KataoMemberDeposit::CURRENCY_SOL);
  221. $depot->setPaymentMode(KataoMemberDeposit::PAYMENT_MODE_TRANSFER_SOL);
  222. $depot->setStatus(KataoMemberDeposit::STATUS_VALIDATED);
  223. $depot->setValuedAt($time);
  224. $depot->save($con);
  225. $con->commit();
  226. }
  227. catch (Exception $e) {
  228. $con->rollback();
  229. throw $e;
  230. }
  231. return $to_user;
  232. }
  233. }