KataoUser.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. <?php
  2. class KataoUser extends BaseKataoUser {
  3. const STATUS_PENDING = 1;
  4. const STATUS_ACTIVE = 2;
  5. const STATUS_DISABLED = 3;
  6. const SUBSCRIBE_WITH_SOLS = 1;
  7. const SUBSCRIBE_WITHOUT_SOLS = 2;
  8. const SUBSCRIBE_ADHESION_WITH_SOLS = 3;
  9. const SUBSCRIBE_ADHESION_WITHOUT_SOLS = 4;
  10. const ADD_SOLS = 5;
  11. public function getStatusStr() {
  12. return KataoUserPeer::getStatusStr($this->getStatus());
  13. }
  14. public function save($con = null) {
  15. $this->initGmapCoordinates();
  16. parent::save($con);
  17. }
  18. public function __toString() {
  19. return $this->getFullName();
  20. }
  21. public function getFullName() {
  22. $return = '';
  23. if (null != $katao_member = $this->getKataoMember()) {
  24. $return = $katao_member->getFullName();
  25. }
  26. if (null != $katao_supplier = $this->getKataoSupplier()) {
  27. if ('' != $return) {
  28. $return .= sprintf('(%s)', $katao_supplier->getName());
  29. } else {
  30. $return = $katao_supplier->getName();
  31. }
  32. }
  33. return $return;
  34. }
  35. public function getCompleteAdress() {
  36. $result = '';
  37. if ($this->getAddress1()) {
  38. $result .= ' ' . $this->getAddress1() ;
  39. }
  40. if ($this->getAddress2()) {
  41. $result .= ' ' . $this->getAddress2() ;
  42. }
  43. $result .= ' ' . $this->getZip() ;
  44. $result .= ' ' . $this->getCity() ;
  45. return $result;
  46. }
  47. public function getFullAdress() {
  48. $return = $this->getAddress1();
  49. if ('' != $this->getAddress2()) {
  50. $return .= "\n" . $this->getAddress2();
  51. }
  52. $return .= "\n";
  53. $return .= $this->getZip() ;
  54. $return .= ' ' . $this->getCity() ;
  55. return $return;
  56. }
  57. /**
  58. * KataoUser::getCredentials()
  59. *
  60. * @return array
  61. */
  62. public function getCredentials() {
  63. $return = array();
  64. if (null != $katao_member = $this->getKataoMember()) {
  65. $return[] = 'member';
  66. if ($katao_member->getIsReferer()) {
  67. $return[] = 'referer';
  68. }
  69. if ($katao_member->getIsDelegate()) {
  70. $return[] = 'delegate';
  71. }
  72. }
  73. if ($this->getKataoSupplierId()) {
  74. $return[] = 'supplier';
  75. }
  76. if ($this->getIsSeo()) {
  77. $return[] = 'seo';
  78. }
  79. if ($this->getIsAdmin()) {
  80. $return[] = 'admin';
  81. $return[] = 'administrator';
  82. $return[] = 'webmaster';
  83. }
  84. return $return;
  85. }
  86. /**
  87. * KataoUser::getCart()
  88. *
  89. * @param int $katao_period_id
  90. * @param int $katao_node_id
  91. * @return KataoCart
  92. */
  93. public function getCart($katao_period_id = false, $katao_node_id = false, $ignore_status = false) {
  94. $sf_user = sfContext::getInstance()->getUser();
  95. return KataoCartPeer::retrieveByUserAndPeriodAndNode($this->getId(),
  96. $katao_period_id?$katao_period_id:$sf_user->getActivePeriod()->getId(),
  97. $katao_node_id?$katao_node_id:$sf_user->getActiveNode()->getId(), $ignore_status);
  98. }
  99. /**
  100. * KataoUser::addProductToCart()
  101. *
  102. * @param integer $product_id
  103. * @param float $quantity
  104. * @return
  105. */
  106. public function addProductToCart($product_id, $quantity = 1) {
  107. $katao_cart_product = KataoCartProductPeer::retrieveByCartAndProduct($this->getCart()->getId(), $product_id);
  108. if (null != $katao_product = KataoProductPeer::retrieveByPK($product_id)) {
  109. $katao_cart_product->setProductReference($katao_product->getReference());
  110. $katao_cart_product->setProductName($katao_product->getName());
  111. $katao_cart_product->setProductPriceEuro($katao_product->getUnitPriceEuro());
  112. $katao_cart_product->setProductMargin($katao_product->getMargin());
  113. $katao_cart_product->setProductTvaRate($katao_product->getTvaRate());
  114. }
  115. $katao_cart_product->setQuantity($quantity);
  116. $katao_cart_product->save();
  117. }
  118. /**
  119. * KataoUser::removeProductFromCart()
  120. *
  121. * @param integer $product_id
  122. * @return
  123. */
  124. public function removeProductFromCart($product_id) {
  125. KataoCartProductPeer::deleteByCartAndProduct($this->getCart()->getId(), $product_id);
  126. }
  127. public function validateCart() {
  128. $this->updateCartStatus(KataoCart::STATUS_VALIDATED);
  129. }
  130. public function unvalidateCart() {
  131. $this->updateCartStatus(KataoCart::STATUS_IN_PROGRESS);
  132. }
  133. protected function updateCartStatus($status) {
  134. $katao_cart = $this->getCart();
  135. $katao_cart->setStatus($status);
  136. $katao_cart->save();
  137. }
  138. public function getHistoryEuro($is_admin = false) {
  139. $return = array();
  140. sfLoader::loadHelpers(array('Tag', 'Url'));
  141. if ($this->isMember()) {
  142. $katao_member = $this->getKataoMember();
  143. $initial_amount_euro = $katao_member->getInitialAmountEuro();
  144. $account = $initial_amount_euro;
  145. $criteria = new Criteria();
  146. $criteria->add(KataoMemberDepositPeer::CURRENCY, KataoMemberDeposit::CURRENCY_EURO);
  147. $criteria->add(KataoMemberDepositPeer::STATUS, KataoMemberDeposit::STATUS_EXPIRED, Criteria::NOT_EQUAL);
  148. foreach ($katao_member->getKataoMemberDeposits($criteria) as/*(KataoMemberDeposit)*/ $katao_member_deposit) {
  149. $return[$katao_member_deposit->getCreatedAt(null)] = array('type' => 'deposit', 'date' => $katao_member_deposit->getCreatedAt(null), 'summary' => $katao_member_deposit->getPaymentModeStr(), 'amount' => $katao_member_deposit->getAmount(), 'account' => 0);
  150. }
  151. $criteria = new Criteria();
  152. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_SENT);
  153. foreach ($katao_member->getKataoInvoices($criteria) as/*(KataoInvoice)*/ $katao_invoice) {
  154. $amount = $katao_invoice->sumProducts();
  155. $amount -= $katao_invoice->getSolAmount() / CONST_EURO_TO_SOL;
  156. $return[$katao_invoice->getCreatedAt(null)] = array('type' => 'invoice', 'date' => $katao_invoice->getCreatedAt(null), 'summary' => 'Facture ' . link_to($katao_invoice->getNumber(), $is_admin?('@katao_invoice_pdf?id=' . $katao_invoice->getId()):('@katao_member_invoice?id=' . $katao_invoice->getId()), array('title' => 'Télécharger la facture en PDF')), 'amount' => $amount, 'account' => 0);
  157. }
  158. ksort($return);
  159. foreach ($return as $index => $data) {
  160. if (in_array($data['type'], array('invoice'))) {
  161. $account -= $data['amount'];
  162. } elseif (in_array($data['type'], array('deposit'))) {
  163. $account += $data['amount'];
  164. }
  165. $return[$index]['account'] = $account;
  166. }
  167. krsort($return);
  168. $return[] = array('type' => 'initial',
  169. 'date' => $katao_member->getCreatedAt('U'),
  170. 'summary' => 'Solde initial',
  171. 'amount' => 0,
  172. 'account' => $initial_amount_euro
  173. );
  174. }
  175. return $return;
  176. }
  177. public function getHistorySol($is_admin = false) {
  178. $return = array();
  179. sfLoader::loadHelpers(array('Tag', 'Url'));
  180. if ($this->isMember()) {
  181. $katao_member = $this->getKataoMember();
  182. $initial_amount_sol = $katao_member->getInitialAmountSol();
  183. $account = $initial_amount_sol;
  184. $criteria = new Criteria();
  185. $criteria->add(KataoMemberDepositPeer::CURRENCY, KataoMemberDeposit::CURRENCY_SOL);
  186. $criteria->add(KataoMemberDepositPeer::STATUS, KataoMemberDeposit::STATUS_EXPIRED, Criteria::NOT_EQUAL);
  187. foreach ($katao_member->getKataoMemberDeposits($criteria) as/*(KataoMemberDeposit)*/ $katao_member_deposit) {
  188. $ts = $katao_member_deposit->getCreatedAt(null);
  189. while (isset($return[$ts])) {
  190. $ts++;
  191. }
  192. $return[$ts] = array(
  193. 'type' => 'deposit',
  194. 'date' => $katao_member_deposit->getCreatedAt(null),
  195. 'summary' => $katao_member_deposit->getPaymentModeStr(),
  196. 'amount' => $katao_member_deposit->getAmount(),
  197. 'account' => 0
  198. );
  199. }
  200. $criteria = new Criteria();
  201. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_SENT);
  202. foreach ($katao_member->getKataoInvoices($criteria) as/*(KataoInvoice)*/ $katao_invoice) {
  203. $ts = $katao_invoice->getCreatedAt(null);
  204. while (isset($return[$ts])) {
  205. $ts++;
  206. }
  207. $return[$ts] = array(
  208. 'type' => 'invoice',
  209. 'date' => $katao_invoice->getCreatedAt(null),
  210. 'summary' => 'Facture ' . link_to($katao_invoice->getNumber(), $is_admin?('@katao_invoice_pdf?id=' . $katao_invoice->getId()):('@katao_member_invoice?id=' . $katao_invoice->getId()), array('title' => 'Télécharger la facture en PDF')),
  211. 'amount' => $katao_invoice->getSolAmount(),
  212. 'account' => 0
  213. );
  214. }
  215. ksort($return);
  216. foreach ($return as $index => $data) {
  217. if (in_array($data['type'], array('invoice'))) {
  218. $account -= $data['amount'];
  219. } elseif (in_array($data['type'], array('deposit'))) {
  220. $account += $data['amount'];
  221. }
  222. $return[$index]['account'] = $account;
  223. }
  224. krsort($return);
  225. $return[] = array('type' => 'initial',
  226. 'date' => $katao_member->getCreatedAt('U'),
  227. 'summary' => 'Solde initial',
  228. 'amount' => 0,
  229. 'account' => $initial_amount_sol
  230. );
  231. }
  232. return $return;
  233. }
  234. public function getHistoryOrder() {
  235. $return = array();
  236. if ($this->isSupplier()) {
  237. $katao_supplier = $this->getKataoSupplier();
  238. $criteria = new Criteria();
  239. $criteria->add(KataoOrderPeer::STATUS, KataoOrder::STATUS_SENT, Criteria::GREATER_EQUAL);
  240. $criteria->addAscendingOrderbyColumn(KataoOrderPeer::CREATED_AT);
  241. foreach ($katao_supplier->getKataoOrders($criteria) as/*(KataoOrder)*/ $katao_order) {
  242. $used_sol = 0;
  243. $used_sol_by_product = $katao_order->getUsedSolByProduct();
  244. foreach ($used_sol_by_product as $katao_product_id => $sol_amount) {
  245. $used_sol += $sol_amount;
  246. }
  247. $return[$katao_order->getId()] = array('date' => $katao_order->getCreatedAt(null), 'number' => $katao_order->getNumber(), 'amount_euro' => $katao_order->sumProducts(), 'amount_sol' => $used_sol, 'period' => $katao_order->getKataoPeriod()->getName(), 'node' => $katao_order->getKataoNode()->getCity());
  248. }
  249. }
  250. return $return;
  251. }
  252. public function isBothMemberAndSupplier() {
  253. return $this->getKataoMemberId() && $this->getKataoSupplierId();
  254. }
  255. public function isMember() {
  256. return (bool)$this->getKataoMemberId();
  257. }
  258. public function isSupplier() {
  259. return (bool)$this->getKataoSupplierId();
  260. }
  261. public function getManagedNodeIds() {
  262. $return = array();
  263. if ($this->getIsSeo() || $this->getIsAdmin()) {
  264. foreach (KataoNodePeer::getAllArray() as $katao_node_id => $katao_node_city) {
  265. $return[$katao_node_id] = true;
  266. }
  267. } else {
  268. foreach ($this->getKataoNodes() as/*(KataoNode)*/ $katao_node) {
  269. $return[$katao_node->getId()] = true;
  270. }
  271. }
  272. return $return;
  273. }
  274. public function initGmapCoordinates($force = false) {
  275. if ($this->isNew() || $force) {
  276. $lat_lng = Utils::getGmapLatLng($this->getCompleteAdress(), $this->getZip() . ' ' . $this->getCity());
  277. $this->setGmapLat($lat_lng['lat']);
  278. $this->setGmapLng($lat_lng['lng']);
  279. }
  280. }
  281. }