KataoUser.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  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 new KataoCart; // A VIRER
  96. return KataoCartPeer::retrieveByUserAndPeriodAndNode($this->getId(),
  97. $katao_period_id?$katao_period_id:$sf_user->getActivePeriod()->getId(),
  98. $katao_node_id?$katao_node_id:$sf_user->getActiveNode()->getId(), $ignore_status);
  99. }
  100. /**
  101. * KataoUser::addProductToCart()
  102. *
  103. * @param integer $product_id
  104. * @param integer $quantity
  105. * @return
  106. */
  107. public function addProductToCart($product_id, $quantity = 1) {
  108. $katao_cart_product = KataoCartProductPeer::retrieveByCartAndProduct($this->getCart()->getId(), $product_id);
  109. if (null != $katao_product = KataoProductPeer::retrieveByPK($product_id)) {
  110. $katao_cart_product->setProductReference($katao_product->getReference());
  111. $katao_cart_product->setProductName($katao_product->getName());
  112. $katao_cart_product->setProductPriceEuro($katao_product->getUnitPriceEuro());
  113. $katao_cart_product->setProductMargin($katao_product->getMargin());
  114. $katao_cart_product->setProductTvaRate($katao_product->getTvaRate());
  115. }
  116. $katao_cart_product->setQuantity($quantity);
  117. $katao_cart_product->save();
  118. }
  119. /**
  120. * KataoUser::removeProductFromCart()
  121. *
  122. * @param integer $product_id
  123. * @return
  124. */
  125. public function removeProductFromCart($product_id) {
  126. KataoCartProductPeer::deleteByCartAndProduct($this->getCart()->getId(), $product_id);
  127. }
  128. public function validateCart() {
  129. $this->updateCartStatus(KataoCart::STATUS_VALIDATED);
  130. }
  131. public function unvalidateCart() {
  132. $this->updateCartStatus(KataoCart::STATUS_IN_PROGRESS);
  133. }
  134. protected function updateCartStatus($status) {
  135. $katao_cart = $this->getCart();
  136. $katao_cart->setStatus($status);
  137. $katao_cart->save();
  138. }
  139. public function getHistoryEuro($is_admin = false) {
  140. $return = array();
  141. sfLoader::loadHelpers(array('Tag', 'Url'));
  142. if ($this->isMember()) {
  143. $katao_member = $this->getKataoMember();
  144. $initial_amount_euro = $katao_member->getInitialAmountEuro();
  145. $account = $initial_amount_euro;
  146. $criteria = new Criteria();
  147. $criteria->add(KataoMemberDepositPeer::CURRENCY, KataoMemberDeposit::CURRENCY_EURO);
  148. $criteria->add(KataoMemberDepositPeer::STATUS, KataoMemberDeposit::STATUS_EXPIRED, Criteria::NOT_EQUAL);
  149. foreach ($katao_member->getKataoMemberDeposits($criteria) as/*(KataoMemberDeposit)*/ $katao_member_deposit) {
  150. $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);
  151. }
  152. $criteria = new Criteria();
  153. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_SENT);
  154. foreach ($katao_member->getKataoInvoices($criteria) as/*(KataoInvoice)*/ $katao_invoice) {
  155. $amount = $katao_invoice->sumProducts();
  156. $amount -= $katao_invoice->getSolAmount() / CONST_EURO_TO_SOL;
  157. $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);
  158. }
  159. ksort($return);
  160. foreach ($return as $index => $data) {
  161. if (in_array($data['type'], array('invoice'))) {
  162. $account -= $data['amount'];
  163. } elseif (in_array($data['type'], array('deposit'))) {
  164. $account += $data['amount'];
  165. }
  166. $return[$index]['account'] = $account;
  167. }
  168. krsort($return);
  169. $return[] = array('type' => 'initial',
  170. 'date' => $katao_member->getCreatedAt('U'),
  171. 'summary' => 'Solde initial',
  172. 'amount' => 0,
  173. 'account' => $initial_amount_euro
  174. );
  175. }
  176. return $return;
  177. }
  178. public function getHistorySol($is_admin = false) {
  179. $return = array();
  180. sfLoader::loadHelpers(array('Tag', 'Url'));
  181. if ($this->isMember()) {
  182. $katao_member = $this->getKataoMember();
  183. $initial_amount_sol = $katao_member->getInitialAmountSol();
  184. $account = $initial_amount_sol;
  185. $criteria = new Criteria();
  186. $criteria->add(KataoMemberDepositPeer::CURRENCY, KataoMemberDeposit::CURRENCY_SOL);
  187. $criteria->add(KataoMemberDepositPeer::STATUS, KataoMemberDeposit::STATUS_EXPIRED, Criteria::NOT_EQUAL);
  188. foreach ($katao_member->getKataoMemberDeposits($criteria) as/*(KataoMemberDeposit)*/ $katao_member_deposit) {
  189. $ts = $katao_member_deposit->getCreatedAt(null);
  190. while (isset($return[$ts])) {
  191. $ts++;
  192. }
  193. $return[$ts] = array(
  194. 'type' => 'deposit',
  195. 'date' => $katao_member_deposit->getCreatedAt(null),
  196. 'summary' => $katao_member_deposit->getPaymentModeStr(),
  197. 'amount' => $katao_member_deposit->getAmount(),
  198. 'account' => 0
  199. );
  200. }
  201. $criteria = new Criteria();
  202. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_SENT);
  203. foreach ($katao_member->getKataoInvoices($criteria) as/*(KataoInvoice)*/ $katao_invoice) {
  204. $ts = $katao_invoice->getCreatedAt(null);
  205. while (isset($return[$ts])) {
  206. $ts++;
  207. }
  208. $return[$ts] = array(
  209. 'type' => 'invoice',
  210. 'date' => $katao_invoice->getCreatedAt(null),
  211. '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')),
  212. 'amount' => $katao_invoice->getSolAmount(),
  213. 'account' => 0
  214. );
  215. }
  216. ksort($return);
  217. foreach ($return as $index => $data) {
  218. if (in_array($data['type'], array('invoice'))) {
  219. $account -= $data['amount'];
  220. } elseif (in_array($data['type'], array('deposit'))) {
  221. $account += $data['amount'];
  222. }
  223. $return[$index]['account'] = $account;
  224. }
  225. krsort($return);
  226. $return[] = array('type' => 'initial',
  227. 'date' => $katao_member->getCreatedAt('U'),
  228. 'summary' => 'Solde initial',
  229. 'amount' => 0,
  230. 'account' => $initial_amount_sol
  231. );
  232. }
  233. return $return;
  234. }
  235. public function getHistoryOrder() {
  236. $return = array();
  237. if ($this->isSupplier()) {
  238. $katao_supplier = $this->getKataoSupplier();
  239. $criteria = new Criteria();
  240. $criteria->add(KataoOrderPeer::STATUS, KataoOrder::STATUS_SENT, Criteria::GREATER_EQUAL);
  241. $criteria->addAscendingOrderbyColumn(KataoOrderPeer::CREATED_AT);
  242. foreach ($katao_supplier->getKataoOrders($criteria) as/*(KataoOrder)*/ $katao_order) {
  243. $used_sol = 0;
  244. $used_sol_by_product = $katao_order->getUsedSolByProduct();
  245. foreach ($used_sol_by_product as $katao_product_id => $sol_amount) {
  246. $used_sol += $sol_amount;
  247. }
  248. $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());
  249. }
  250. }
  251. return $return;
  252. }
  253. public function isBothMemberAndSupplier() {
  254. return $this->getKataoMemberId() && $this->getKataoSupplierId();
  255. }
  256. public function isMember() {
  257. return (bool)$this->getKataoMemberId();
  258. }
  259. public function isSupplier() {
  260. return (bool)$this->getKataoSupplierId();
  261. }
  262. public function getManagedNodeIds() {
  263. $return = array();
  264. if ($this->getIsSeo() || $this->getIsAdmin()) {
  265. foreach (KataoNodePeer::getAllArray() as $katao_node_id => $katao_node_city) {
  266. $return[$katao_node_id] = true;
  267. }
  268. } else {
  269. foreach ($this->getKataoNodes() as/*(KataoNode)*/ $katao_node) {
  270. $return[$katao_node->getId()] = true;
  271. }
  272. }
  273. return $return;
  274. }
  275. public function initGmapCoordinates($force = false) {
  276. if ($this->isNew() || $force) {
  277. $lat_lng = Utils::getGmapLatLng($this->getCompleteAdress(), $this->getZip() . ' ' . $this->getCity());
  278. $this->setGmapLat($lat_lng['lat']);
  279. $this->setGmapLng($lat_lng['lng']);
  280. }
  281. }
  282. }