actions.class.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. <?php
  2. /**
  3. * kataoCart actions.
  4. *
  5. * @package www.katao.fr
  6. * @subpackage kataoCart
  7. * @author Your name here
  8. * @version SVN: $Id: actions.class.php 8507 2008-04-17 17:32:20Z fabien $
  9. */
  10. class kataoCartActions extends wpActions {
  11. public function preExecute() {
  12. parent::preExecute();
  13. sfLoader::loadHelpers(array('Asset'));
  14. }
  15. public function executeIndex() {
  16. $criteria = new Criteria();
  17. $criteria->addJoin(KataoCartPeer::KATAO_USER_ID, KataoUserPeer::ID);
  18. $criteria->addJoin(KataoUserPeer::KATAO_MEMBER_ID, KataoMemberPeer::ID);
  19. if ($this->getUser()->isJustDelegate()) {
  20. $criteria->add(KataoMemberPeer::KATAO_NODE_ID, $this->getUser()->getInstance()->getKataoMember()->getKataoNodeId());
  21. }
  22. $sort_method = $this->getCriteriaSortMethod();
  23. switch ($this->sort = $this->getRequestParameter('sort', 'date')) {
  24. case 'no':
  25. $criteria->$sort_method(KataoCartPeer::ID);
  26. break;
  27. case 'status':
  28. $criteria->$sort_method(KataoCartPeer::STATUS);
  29. break;
  30. case 'member':
  31. $criteria->$sort_method(KataoMemberPeer::LAST_NAME);
  32. $criteria->$sort_method(KataoMemberPeer::FIRST_NAME);
  33. break;
  34. case 'node':
  35. $criteria->$sort_method(KataoCartPeer::KATAO_NODE_ID);
  36. break;
  37. case 'period':
  38. $criteria->$sort_method(KataoCartPeer::KATAO_PERIOD_ID);
  39. break;
  40. default:
  41. $criteria->$sort_method(KataoCartPeer::CREATED_AT);
  42. }
  43. if ('' != $this->filter_status = $this->getUser()->getAttribute('katao_cart_filter_status')) {
  44. $criteria->add(KataoCartPeer::STATUS, $this->filter_status);
  45. }
  46. if ('' != $this->filter_member = $this->getUser()->getAttribute('katao_cart_filter_member')) {
  47. $criteria->add(KataoCartPeer::KATAO_USER_ID, $this->filter_member);
  48. }
  49. if ('' != $this->filter_node = $this->getUser()->getAttribute('katao_cart_filter_node')) {
  50. $criteria->add(KataoCartPeer::KATAO_NODE_ID, $this->filter_node);
  51. }
  52. if ('' != $this->filter_period = $this->getUser()->getAttribute('katao_cart_filter_period', KataoPeriodPeer::getActivePeriod()->getId())) {
  53. $criteria->add(KataoCartPeer::KATAO_PERIOD_ID, $this->filter_period);
  54. }
  55. $pager = new sfPropelPager('KataoCart', sfConfig::get('app_pager'));
  56. $pager->setPeerMethod('doSelectJoinAll');
  57. $pager->setCriteria($criteria);
  58. $pager->setPage($this->getRequestParameter('page', 1));
  59. $pager->init();
  60. $this->pager = $pager;
  61. $this->katao_cartList = $pager->getResults();
  62. $this->katao_period = KataoPeriodPeer::getActivePeriod();
  63. }
  64. public function executeFilter($request) {
  65. $this->getUser()->setAttribute('katao_cart_filter_status', $request->getParameter('filter_status'));
  66. $this->getUser()->setAttribute('katao_cart_filter_member', $request->getParameter('filter_member'));
  67. $this->getUser()->setAttribute('katao_cart_filter_node', $request->getParameter('filter_node'));
  68. $this->getUser()->setAttribute('katao_cart_filter_period', $request->getParameter('filter_period'));
  69. return $this->redirect('kataoCart/index');
  70. }
  71. public function executeFilterReset($request) {
  72. $this->getUser()->setAttribute('katao_cart_filter_status', '');
  73. $this->getUser()->setAttribute('katao_cart_filter_member', '');
  74. $this->getUser()->setAttribute('katao_cart_filter_node', '');
  75. $this->getUser()->setAttribute('katao_cart_filter_period', KataoPeriodPeer::getActivePeriod()->getId());
  76. return $this->redirect('kataoCart/index');
  77. }
  78. public function executeShow($request) {
  79. $this->katao_cart = KataoCartPeer::retrieveByPk($request->getParameter('id'));
  80. $this->redirectWithErrorUnless($this->katao_cart, 'Demande #' . $request->getParameter('id') . ' inconnue.');
  81. }
  82. public function executeCreate() {
  83. $this->form = new KataoCartForm();
  84. $this->setTemplate('edit');
  85. }
  86. public function executeEdit($request) {
  87. $this->form = new KataoCartForm(KataoCartPeer::retrieveByPk($request->getParameter('id')));
  88. }
  89. public function executeUpdate($request) {
  90. $this->redirectWithErrorUnless($request->isMethod('post'));
  91. $this->form = new KataoCartForm(KataoCartPeer::retrieveByPk($request->getParameter('id')));
  92. $this->form->bind($request->getParameter('katao_cart'));
  93. if ($this->form->isValid()) {
  94. $katao_cart = $this->form->save();
  95. wpFlashMessages::addConfirmation('Demande "' . $katao_cart->getMemberName() . '" sauvée avec succès.');
  96. $this->redirect('kataoCart/index');
  97. }
  98. $this->setTemplate('edit');
  99. }
  100. public function executeDelete($request) {
  101. $this->redirectWithErrorUnless($katao_cart = KataoCartPeer::retrieveByPk($request->getParameter('id')), 'Demande #' . $request->getParameter('id') . ' inconnue.');
  102. $katao_cart->delete();
  103. wpFlashMessages::addConfirmation('Demande "' . $katao_cart->getMemberName() . '" supprimée avec succès.');
  104. $this->redirect('kataoCart/index');
  105. }
  106. public function executeDeleteMultiple($request) {
  107. if (!wpPersistenceManager::isEmpty('katao_cart')) {
  108. $criteria = new Criteria();
  109. $criteria->add(KataoCartPeer::ID, array_keys(wpPersistenceManager::getSelectedItems('katao_cart')), Criteria::IN);
  110. KataoCartPeer::doDelete($criteria);
  111. wpPersistenceManager::cleanSelection('katao_cart');
  112. wpFlashMessages::addConfirmation('Les demandes sélectionnées ont été supprimées avec succès.');
  113. } else {
  114. wpFlashMessages::addWarning('Merci de sélectionner au moins une demande.');
  115. }
  116. $this->redirect('kataoCart/index');
  117. }
  118. public function executeGenerateSuppliersOrders($request) {
  119. $this->redirectWithErrorUnless($katao_period = KataoPeriodPeer::retrieveByPK((int)$this->getUser()->getAttribute('katao_cart_filter_period', KataoPeriodPeer::getActivePeriod()->getId())), 'Merci de filtrer les demandes sur une période avant de générer les commandes fournisseurs.', 'kataoCart/index');
  120. // $this->redirectWithErrorIf(!Utils::between(time(), $katao_period->getOrderEndedAt(null), $katao_period->getFinishAt(null)));
  121. $katao_node_ids = array();
  122. if ($this->getUser()->isJustDelegate()) {
  123. $katao_node_ids[] = $this->getUser()->getInstance()->getKataoMember()->getKataoNodeId();
  124. } elseif (!$request->isMethod('post')) {
  125. $this->katao_node_ids = $katao_period->getKataoNodeIdsForSupplierOrders();
  126. return sfView::SUCCESS;
  127. } else {
  128. $katao_node_ids = $request->getParameter('katao_node_ids', array());
  129. }
  130. $katao_order_count = 0;
  131. if (0 < count($katao_node_ids)) {
  132. $criteria = new Criteria();
  133. $criteria->add(KataoOrderPeer::STATUS, array(KataoOrder::STATUS_GENERATED, KataoOrder::STATUS_ADJUSTED), Criteria::NOT_IN);
  134. $criteria->add(KataoOrderPeer::KATAO_PERIOD_ID, $katao_period->getId());
  135. $criteria->add(KataoOrderPeer::KATAO_NODE_ID, $katao_node_ids, Criteria::IN);
  136. if (0 < KataoOrderPeer::doCount($criteria)) {
  137. wpFlashMessages::addError('Impossible de re-générer les commandes pour ces noeuds et cette période car une commande à déjà été envoyée.');
  138. return $this->redirect('kataoCart/index');
  139. }
  140. $criteria = new Criteria();
  141. $criteria->add(KataoOrderPeer::STATUS, array(KataoOrder::STATUS_GENERATED, KataoOrder::STATUS_ADJUSTED), Criteria::IN);
  142. $criteria->add(KataoOrderPeer::KATAO_PERIOD_ID, $katao_period->getId());
  143. $criteria->add(KataoOrderPeer::KATAO_NODE_ID, $katao_node_ids, Criteria::IN);
  144. if (0 < $katao_order_deleted = KataoOrderPeer::doDelete($criteria)) {
  145. wpFlashMessages::addInformation('Certaines commandes fournisseurs ont été re-générées (' . $katao_order_deleted . ' au total).');
  146. }
  147. $products_by_node_and_period_and_supplier = array();
  148. $criteria = new Criteria();
  149. $criteria->add(KataoCartPeer::KATAO_PERIOD_ID, $katao_period->getId());
  150. $criteria->add(KataoCartPeer::KATAO_NODE_ID, $katao_node_ids, Criteria::IN);
  151. $is_simulated = false;
  152. foreach (KataoCartPeer::doSelect($criteria) as/*(KataoCart)*/ $katao_cart) {
  153. if (KataoCart::STATUS_VALIDATED != $katao_cart->getStatus()) {
  154. $is_simulated = true;
  155. }
  156. foreach ($katao_cart->getKataoCartProductsJoinKataoProduct() as/*(KataoCartProduct)*/ $katao_cart_product) {
  157. $katao_product = $katao_cart_product->getKataoProduct();
  158. if (!isset($products_by_node_and_period_and_supplier[$katao_cart->getKataoNodeId()][$katao_cart->getKataoPeriodId()][$katao_product->getKataoSupplierId()][$katao_product->getId()]['quantity'])) {
  159. $products_by_node_and_period_and_supplier[$katao_cart->getKataoNodeId()][$katao_cart->getKataoPeriodId()][$katao_product->getKataoSupplierId()][$katao_product->getId()]['quantity'] = 0;
  160. }
  161. $products_by_node_and_period_and_supplier[$katao_cart->getKataoNodeId()][$katao_cart->getKataoPeriodId()][$katao_product->getKataoSupplierId()][$katao_product->getId()]['quantity'] += $katao_cart_product->getQuantity();
  162. $products_by_node_and_period_and_supplier[$katao_cart->getKataoNodeId()][$katao_cart->getKataoPeriodId()][$katao_product->getKataoSupplierId()][$katao_product->getId()]['reference'] = $katao_product->getReference();
  163. $products_by_node_and_period_and_supplier[$katao_cart->getKataoNodeId()][$katao_cart->getKataoPeriodId()][$katao_product->getKataoSupplierId()][$katao_product->getId()]['name'] = $katao_product->getName();
  164. $products_by_node_and_period_and_supplier[$katao_cart->getKataoNodeId()][$katao_cart->getKataoPeriodId()][$katao_product->getKataoSupplierId()][$katao_product->getId()]['price_euro'] = $katao_product->getUnitPriceEuro();
  165. $products_by_node_and_period_and_supplier[$katao_cart->getKataoNodeId()][$katao_cart->getKataoPeriodId()][$katao_product->getKataoSupplierId()][$katao_product->getId()]['margin'] = $katao_product->getMargin();
  166. $products_by_node_and_period_and_supplier[$katao_cart->getKataoNodeId()][$katao_cart->getKataoPeriodId()][$katao_product->getKataoSupplierId()][$katao_product->getId()]['tva_rate'] = $katao_product->getTvaRate();
  167. $products_by_node_and_period_and_supplier[$katao_cart->getKataoNodeId()][$katao_cart->getKataoPeriodId()][$katao_product->getKataoSupplierId()][$katao_product->getId()]['katao_cart_products'][] = $katao_cart_product;
  168. }
  169. }
  170. foreach ($products_by_node_and_period_and_supplier as $katao_node_id => $periods) {
  171. foreach ($periods as $katao_period_id => $suppliers) {
  172. foreach ($suppliers as $katao_supplier_id => $products) {
  173. if (null != $katao_supplier = KataoSupplierPeer::retrieveByPK($katao_supplier_id)) {
  174. $katao_order = new KataoOrder();
  175. $katao_order->setIsSimulated($is_simulated);
  176. $katao_order->setKataoSupplierId($katao_supplier_id);
  177. $katao_order->setKataoNodeId($katao_node_id);
  178. $katao_order->setKataoPeriodId($katao_period_id);
  179. $katao_order->setStatus(KataoOrder::STATUS_GENERATED);
  180. $katao_order->setSupplierName($katao_supplier->getName());
  181. $katao_order->setSupplierEmail($katao_supplier->getEmail());
  182. $katao_order->setSupplierAddress1($katao_supplier->getAddress1());
  183. $katao_order->setSupplierAddress2($katao_supplier->getAddress2());
  184. $katao_order->setSupplierZip($katao_supplier->getZip());
  185. $katao_order->setSupplierCity($katao_supplier->getCity());
  186. $katao_order->setKataoName(wpConfig::getName());
  187. $katao_order->setKataoAddress(wpConfig::getAddress());
  188. $katao_order->setKataoSiretNumber(wpConfig::getSiretNumber());
  189. $katao_order->setKataoRcsNumber(wpConfig::getRCSNumber());
  190. $katao_order->setKataoCapital(wpConfig::getCapital());
  191. $katao_order->save();
  192. $katao_order_count++;
  193. foreach ($products as $katao_product_id => $product_data) {
  194. $katao_order_product = new KataoOrderProduct();
  195. $katao_order_product->setKataoOrder($katao_order);
  196. $katao_order_product->setKataoProductId($katao_product_id);
  197. $katao_order_product->setProductReference($product_data['reference']);
  198. $katao_order_product->setProductName($product_data['name']);
  199. $katao_order_product->setProductPriceEuro($product_data['price_euro']);
  200. $katao_order_product->setProductMargin($product_data['margin']);
  201. $katao_order_product->setProductTvaRate($product_data['tva_rate']);
  202. $katao_order_product->setQuantity($product_data['quantity']);
  203. $katao_order_product->save();
  204. foreach ($product_data['katao_cart_products'] as $katao_cart_product) {
  205. $katao_cart_product->setKataoOrderProduct($katao_order_product);
  206. $katao_cart_product->setQuantityAdjusted($katao_cart_product->getQuantity());
  207. $katao_cart_product->setHasBeenAdjusted(true);
  208. $katao_cart_product->save();
  209. }
  210. }
  211. }
  212. }
  213. }
  214. }
  215. }
  216. if (0 < $katao_order_count) {
  217. wpFlashMessages::addConfirmation('Commandes fournisseurs générées avec succès (' . $katao_order_count . ' au total).');
  218. if ($is_simulated) {
  219. $this->redirect('kataoOrder/simulated');
  220. } else {
  221. $this->redirect('kataoOrder/index');
  222. }
  223. }
  224. wpFlashMessages::addWarning('Aucune commande fournisseur n\'a été générée.');
  225. $this->redirect('kataoCart/index');
  226. }
  227. public function executeExportPDF($request) {
  228. $this->redirectWithErrorUnless($katao_cart = KataoCartPeer::retrieveByPk($request->getParameter('id')), 'Demande #' . $request->getParameter('id') . ' inconnue.');
  229. $content = $katao_cart->generatePDF();
  230. $response = $this->getResponse();
  231. $response->setContentType('application/pdf');
  232. $response->setHttpHeader('Content-disposition', 'attachment; filename="' . $katao_cart->getNumber() . '.pdf"');
  233. $response->setHttpHeader('Content-Length', strlen($content));
  234. $response->setHttpHeader('Pragma', 'public');
  235. $response->setHttpHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
  236. $response->setHttpHeader('Expires', '0');
  237. $response->setContent($content);
  238. return sfView::NONE;
  239. }
  240. public function executeExportPDFAll($request) {
  241. $criteria = new Criteria();
  242. if ($this->getUser()->isJustDelegate()) {
  243. $criteria->addJoin(KataoCartPeer::KATAO_USER_ID, KataoUserPeer::ID);
  244. $criteria->addJoin(KataoUserPeer::KATAO_MEMBER_ID, KataoMemberPeer::ID);
  245. $criteria->add(KataoMemberPeer::KATAO_NODE_ID, $this->getUser()->getInstance()->getKataoMember()->getKataoNodeId());
  246. }
  247. $criteria->addAscendingOrderByColumn(KataoCartPeer::ID);
  248. return $this->exportCartsToPDF(KataoCartPeer::doSelect($criteria));
  249. }
  250. public function executeExportPDFSelected($request) {
  251. if (!wpPersistenceManager::isEmpty('katao_cart')) {
  252. $criteria = new Criteria();
  253. $criteria->add(KataoCartPeer::ID, array_keys(wpPersistenceManager::getSelectedItems('katao_cart')), Criteria::IN);
  254. $criteria->addAscendingOrderByColumn(KataoCartPeer::ID);
  255. return $this->exportCartsToPDF(KataoCartPeer::doSelect($criteria));
  256. } else {
  257. wpFlashMessages::addWarning('Merci de sélectionner au moins une demande.');
  258. $this->redirect('kataoCart/index');
  259. }
  260. }
  261. protected function exportCartsToPDF($katao_carts) {
  262. $file = tempnam('tmp', 'zip');
  263. $archive = new ZipArchive();
  264. $archive->open($file, ZipArchive::OVERWRITE);
  265. foreach ($katao_carts as/*(KataoCart)*/ $katao_cart) {
  266. $archive->addFromString($katao_cart->getNumber() . '.pdf', $katao_cart->generatePDF());
  267. }
  268. $archive->close();
  269. $response = $this->getResponse();
  270. $response->setContentType('application/zip');
  271. $response->setHttpHeader('Content-disposition', 'attachment; filename="KATAO_Demandes_' . date('Y-m-d') . '.zip"');
  272. $response->setHttpHeader('Content-Length', filesize($file));
  273. $response->setHttpHeader('Pragma', 'public');
  274. $response->setHttpHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
  275. $response->setHttpHeader('Expires', '0');
  276. $response->setContent(file_get_contents($file));
  277. return sfView::NONE;
  278. }
  279. public function executeValidate($request) {
  280. $this->redirectWithErrorUnless($katao_cart = KataoCartPeer::retrieveByPk($request->getParameter('id')), 'Demande #' . $request->getParameter('id') . ' inconnue.');
  281. $katao_cart->setStatus(KataoCart::STATUS_VALIDATED);
  282. $katao_cart->save();
  283. wpFlashMessages::addConfirmation('Demande "' . $katao_cart->getNumber() . '" validée avec succès.');
  284. $this->redirect('kataoCart/index');
  285. }
  286. public function executeUnvalidate($request) {
  287. $this->redirectWithErrorUnless($katao_cart = KataoCartPeer::retrieveByPk($request->getParameter('id')), 'Demande #' . $request->getParameter('id') . ' inconnue.');
  288. $katao_cart->setStatus(KataoCart::STATUS_IN_PROGRESS);
  289. $katao_cart->save();
  290. wpFlashMessages::addConfirmation('Demande "' . $katao_cart->getNumber() . '" dé-validée avec succès.');
  291. $this->redirect('kataoCart/index');
  292. }
  293. }