actions.class.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. <?php
  2. /**
  3. * kataoOrder actions.
  4. *
  5. * @package www.katao.fr
  6. * @subpackage kataoOrder
  7. * @author Your name here
  8. * @version SVN: $Id: actions.class.php 8507 2008-04-17 17:32:20Z fabien $
  9. */
  10. class kataoOrderActions 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(KataoOrderPeer::KATAO_SUPPLIER_ID, KataoSupplierPeer::ID);
  18. $criteria->add(KataoOrderPeer::IS_SIMULATED, false);
  19. if ($this->getUser()->isJustDelegate()) {
  20. $criteria->addJoin(KataoSupplierPeer::ID, KataoSupplierNodePeer::KATAO_SUPPLIER_ID);
  21. $criteria->add(KataoSupplierNodePeer::KATAO_NODE_ID, $this->getUser()->getInstance()->getKataoMember()->getKataoNodeId());
  22. $criteria->setDistinct();
  23. }
  24. $sort_method = $this->getCriteriaSortMethod();
  25. switch ($this->sort = $this->getRequestParameter('sort', 'supplier')) {
  26. case 'no':
  27. $criteria->$sort_method(KataoOrderPeer::ID);
  28. break;
  29. case 'status':
  30. $criteria->$sort_method(KataoOrderPeer::STATUS);
  31. break;
  32. case 'node':
  33. $criteria->$sort_method(KataoOrderPeer::KATAO_NODE_ID);
  34. break;
  35. case 'period':
  36. $criteria->$sort_method(KataoOrderPeer::KATAO_PERIOD_ID);
  37. break;
  38. default:
  39. $criteria->$sort_method(KataoOrderPeer::SUPPLIER_NAME);
  40. }
  41. if ('' != $this->filter_status = $this->getUser()->getAttribute('katao_cart_order_status')) {
  42. $criteria->add(KataoOrderPeer::STATUS, $this->filter_status);
  43. }
  44. if ('' != $this->filter_supplier = $this->getUser()->getAttribute('katao_cart_order_supplier')) {
  45. $criteria->add(KataoOrderPeer::KATAO_SUPPLIER_ID, $this->filter_supplier);
  46. }
  47. if ('' != $this->filter_node = $this->getUser()->getAttribute('katao_cart_order_node')) {
  48. $criteria->add(KataoOrderPeer::KATAO_NODE_ID, $this->filter_node);
  49. }
  50. if (!is_null(KataoPeriodPeer::getActivePeriod()) && '' != $this->filter_period = $this->getUser()->getAttribute('katao_cart_order_period', KataoPeriodPeer::getActivePeriod()->getId())) {
  51. $criteria->add(KataoOrderPeer::KATAO_PERIOD_ID, $this->filter_period);
  52. }
  53. $pager = new sfPropelPager('KataoOrder', sfConfig::get('app_pager'));
  54. $pager->setCriteria($criteria);
  55. $pager->setPage($this->getRequestParameter('page', 1));
  56. $pager->init();
  57. $this->pager = $pager;
  58. $this->katao_orderList = $pager->getResults();
  59. }
  60. public function executeSimulated() {
  61. $criteria = new Criteria();
  62. $criteria->addJoin(KataoOrderPeer::KATAO_SUPPLIER_ID, KataoSupplierPeer::ID);
  63. $criteria->add(KataoOrderPeer::IS_SIMULATED, true);
  64. if ($this->getUser()->isJustDelegate()) {
  65. $criteria->addJoin(KataoSupplierPeer::ID, KataoSupplierNodePeer::KATAO_SUPPLIER_ID);
  66. $criteria->add(KataoSupplierNodePeer::KATAO_NODE_ID, $this->getUser()->getInstance()->getKataoMember()->getKataoNodeId());
  67. $criteria->setDistinct();
  68. }
  69. $sort_method = $this->getCriteriaSortMethod();
  70. $criteria->$sort_method(KataoOrderPeer::SUPPLIER_NAME);
  71. $pager = new sfPropelPager('KataoOrder', 1000);
  72. $pager->setCriteria($criteria);
  73. $pager->setPage(1);
  74. $pager->init();
  75. $this->pager = $pager;
  76. $this->katao_orderList = $pager->getResults();
  77. }
  78. public function executeFilter($request) {
  79. $this->getUser()->setAttribute('katao_cart_order_status', $request->getParameter('filter_status'));
  80. $this->getUser()->setAttribute('katao_cart_order_supplier', $request->getParameter('filter_supplier'));
  81. $this->getUser()->setAttribute('katao_cart_order_node', $request->getParameter('filter_node'));
  82. $this->getUser()->setAttribute('katao_cart_order_period', $request->getParameter('filter_period'));
  83. return $this->redirect('kataoOrder/index');
  84. }
  85. public function executeFilterReset($request) {
  86. $this->getUser()->setAttribute('katao_cart_order_status', '');
  87. $this->getUser()->setAttribute('katao_cart_order_supplier', '');
  88. $this->getUser()->setAttribute('katao_cart_order_node', '');
  89. $this->getUser()->setAttribute('katao_cart_order_period', KataoPeriodPeer::getActivePeriod()->getId());
  90. return $this->redirect('kataoOrder/index');
  91. }
  92. public function executeShow($request) {
  93. $this->katao_order = KataoOrderPeer::retrieveByPk($request->getParameter('id'));
  94. $this->redirectWithErrorUnless($this->katao_order, 'Commande #' . $request->getParameter('id') . ' inconnue.');
  95. }
  96. public function executeCreate() {
  97. $this->form = new KataoOrderForm();
  98. $this->setTemplate('edit');
  99. }
  100. public function executeEdit($request) {
  101. $this->form = new KataoOrderForm(KataoOrderPeer::retrieveByPk($request->getParameter('id')));
  102. }
  103. public function executeUpdate($request) {
  104. $this->redirectWithErrorUnless($request->isMethod('post'));
  105. $this->form = new KataoOrderForm(KataoOrderPeer::retrieveByPk($request->getParameter('id')));
  106. $this->form->bind($request->getParameter('katao_order'));
  107. if ($this->form->isValid()) {
  108. $katao_order = $this->form->save();
  109. wpFlashMessages::addConfirmation('Commande "' . $katao_order->getSupplierName() . '" sauvée avec succès.');
  110. $this->redirect('kataoOrder/index');
  111. }
  112. $this->setTemplate('edit');
  113. }
  114. public function executeDelete($request) {
  115. $this->redirectWithErrorUnless($katao_order = KataoOrderPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  116. $katao_order->delete();
  117. wpFlashMessages::addConfirmation('Commande "' . $katao_order->getSupplierName() . '" supprimée avec succès.');
  118. $this->redirect('kataoOrder/index');
  119. }
  120. public function executeDeleteMultiple($request) {
  121. if (!wpPersistenceManager::isEmpty('katao_order')) {
  122. $criteria = new Criteria();
  123. $criteria->add(KataoOrderPeer::ID, array_keys(wpPersistenceManager::getSelectedItems('katao_order')), Criteria::IN);
  124. KataoOrderPeer::doDelete($criteria);
  125. wpPersistenceManager::cleanSelection('katao_order');
  126. wpFlashMessages::addConfirmation('Les commandes sélectionnées ont été supprimées avec succès.');
  127. } else {
  128. wpFlashMessages::addWarning('Merci de sélectionner au moins une commande.');
  129. }
  130. $this->redirect('kataoOrder/index');
  131. }
  132. public function executeDeleteSimulated($request) {
  133. $criteria = new Criteria();
  134. $criteria->add(KataoOrderPeer::IS_SIMULATED, true);
  135. KataoOrderPeer::doDelete($criteria);
  136. wpFlashMessages::addConfirmation('Toutes les commandes simulées ont été supprimées avec succès.');
  137. $this->redirect('kataoOrder/simulated');
  138. }
  139. public function executeAdjust($request) {
  140. $this->redirectWithErrorUnless($katao_order = KataoOrderPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  141. $this->redirectWithErrorIf(KataoOrder::STATUS_GENERATED != $katao_order->getStatus());
  142. $katao_order->adjust($this->getUser());
  143. wpFlashMessages::addConfirmation('Commande "' . $katao_order->getNumber() . '" marquée comme ajustée avec succès.');
  144. $this->redirect('kataoOrder/index');
  145. }
  146. public function executeForceAdjustment($request) {
  147. $this->redirectWithErrorUnless($katao_order = KataoOrderPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  148. $this->redirectWithErrorIf(KataoOrder::STATUS_GENERATED != $katao_order->getStatus());
  149. $this->redirectWithErrorIf($this->getUser()->isJustDelegate());
  150. $katao_order->setStatus(KataoOrder::STATUS_ADJUSTED);
  151. $katao_order->save();
  152. $katao_order->notifyMembersWithModifiedAdjustedQuantities();
  153. wpFlashMessages::addConfirmation('L\'ajustement de la commande "' . $katao_order->getNumber() . '" a été forcé avec succès.');
  154. $this->redirect('kataoOrder/index');
  155. }
  156. public function executeAdjustProduct($request) {
  157. $this->redirectWithErrorUnless($this->katao_order_product = KataoOrderProductPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  158. $this->view_mode_only = KataoOrder::STATUS_GENERATED != $this->katao_order_product->getKataoOrder()->getStatus();
  159. if (!$this->view_mode_only && $request->isMethod('POST')) {
  160. $redirect_to_adjust = false;
  161. $katao_order_product_quantity = 0;
  162. foreach ($request->getParameter('quantity') as $katao_cart_product_id => $quantity) {
  163. if ($katao_cart_product_id) {
  164. KataoCartProductPeer::adjustQuantity($katao_cart_product_id, $quantity);
  165. } elseif (null != $katao_user_id = $request->getParameter('new_user_id')) {
  166. $this->katao_order_product->addProductToUser($katao_user_id, $quantity);
  167. $redirect_to_adjust = true;
  168. }
  169. $katao_order_product_quantity += $quantity;
  170. }
  171. $this->katao_order_product->setQuantity($katao_order_product_quantity);
  172. $this->katao_order_product->save();
  173. if ($redirect_to_adjust) {
  174. $this->redirect('@katao_order_product_adjust?id=' . $this->katao_order_product->getId());
  175. } else {
  176. wpFlashMessages::addConfirmation('Produit "' . $this->katao_order_product->getKataoProduct()->getName() . '" de la commande fournisseur "' . $this->katao_order_product->getKataoOrder()->getNumber() . '" ajusté avec succès.');
  177. $this->redirect('kataoOrder/index');
  178. }
  179. }
  180. }
  181. public function executeDeliverProduct($request) {
  182. $this->redirectWithErrorUnless($this->katao_order_product = KataoOrderProductPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  183. if ($request->isMethod('POST')) {
  184. $katao_order_product_quantity = 0;
  185. foreach ($request->getParameter('quantity') as $katao_cart_product_id => $quantity) {
  186. if ($katao_cart_product_id) {
  187. KataoCartProductPeer::deliverQuantity($katao_cart_product_id, $quantity);
  188. $katao_order_product_quantity += $quantity;
  189. }
  190. }
  191. $this->katao_order_product->setQuantityDelivered($katao_order_product_quantity);
  192. $this->katao_order_product->setHasBeenDelivered(true);
  193. $this->katao_order_product->save();
  194. wpFlashMessages::addConfirmation('Produit "' . $this->katao_order_product->getKataoProduct()->getName() . '" de la commande fournisseur "' . $this->katao_order_product->getKataoOrder()->getNumber() . '" délivré avec succès.');
  195. $this->redirect('kataoOrder/index');
  196. }
  197. }
  198. public function executeGenerateMembersInvoices($request) {
  199. $this->redirectWithErrorUnless($this->katao_period = KataoPeriodPeer::retrieveByPK($this->filter_period = $this->getUser()->getAttribute('katao_cart_order_period', KataoPeriodPeer::getActivePeriod()->getId())), 'Merci de sélectionner une période.');
  200. $katao_node_ids = array();
  201. if ($this->getUser()->isJustDelegate()) {
  202. $katao_node_ids[] = $this->getUser()->getInstance()->getKataoMember()->getKataoNodeId();
  203. } elseif (!$request->isMethod('post')) {
  204. $this->katao_node_ids = $this->katao_period->getKataoNodeIdsForMemberInvoices();
  205. return sfView::SUCCESS;
  206. } else {
  207. $katao_node_ids = $request->getParameter('katao_node_ids', array());
  208. }
  209. // re-vérification des noeuds possibles pour la génération des factures pour éviter les doublons si clic simultanés ou avec 2 fen^tres en parallèle...
  210. $valid_katao_node_ids = $this->katao_period->getKataoNodeIdsForMemberInvoices();
  211. foreach ($katao_node_ids as $index => $katao_node_id) {
  212. if (empty($valid_katao_node_ids[$katao_node_id]['available'])) {
  213. unset($katao_node_ids[$index]);
  214. }
  215. }
  216. $katao_invoice_count = 0;
  217. if (0 < count($katao_node_ids)) {
  218. $carts_to_validate = array();
  219. $products_by_member = array();
  220. $criteria = new Criteria();
  221. $criteria->add(KataoOrderPeer::STATUS, KataoOrder::STATUS_RECEIVED);
  222. $criteria->add(KataoOrderPeer::KATAO_PERIOD_ID, $this->katao_period->getId());
  223. $criteria->add(KataoOrderPeer::KATAO_NODE_ID, $katao_node_ids, Criteria::IN);
  224. foreach (KataoOrderPeer::doSelect($criteria) as/*(KataoOrder)*/ $katao_order) {
  225. foreach ($katao_order->getKataoOrderProducts() as/*(KataoOrderProduct)*/ $katao_order_product) {
  226. foreach ($katao_order_product->getKataoCartProductsJoinKataoCart() as/*(KataoCartProduct)*/ $katao_cart_product) {
  227. $katao_cart = $katao_cart_product->getKataoCart();
  228. $katao_product = $katao_cart_product->getKataoProduct();
  229. $carts_to_validate[$katao_cart->getId()] = $katao_cart;
  230. $products_by_member[$katao_cart->getKataoUserId()]['cart'] = $katao_cart->getId();
  231. $products_by_member[$katao_cart->getKataoUserId()]['node'] = $katao_cart->getKataoNodeId();
  232. $products_by_member[$katao_cart->getKataoUserId()]['period'] = $katao_cart->getKataoPeriodId();
  233. $products_by_member[$katao_cart->getKataoUserId()]['products'][$katao_cart_product->getKataoProductId()] = array('name' => $katao_cart_product->getProductName(), 'price' => $katao_cart_product->getProductPriceEuro(), 'quantity' => $katao_cart_product->getQuantityAdjusted(), 'tva_rate' => $katao_cart_product->getProductTvaRate(), 'reference' => $katao_cart_product->getProductReference(), 'margin' => $katao_cart_product->getProductMargin(), 'product_max_sol_amount' => $katao_product->getMaxSolAmount(), 'katao_order_product_id' => $katao_order_product->getId(), 'katao_cart_product_id' => $katao_cart_product->getId());
  234. }
  235. }
  236. }
  237. foreach ($products_by_member as $katao_user_id => $products_data) {
  238. if (null != $katao_user = KataoUserPeer::retrieveByPK($katao_user_id)) {
  239. if (null != $katao_member = $katao_user->getKataoMember()) {
  240. $katao_invoice = new KataoInvoice();
  241. $katao_invoice->setKataoMember($katao_member);
  242. $katao_invoice->setKataoPeriodId($products_data['period']);
  243. $katao_invoice->setKataoNodeId($products_data['node']);
  244. $katao_invoice->setKataoCartId($products_data['cart']);
  245. $katao_invoice->setStatus(KataoInvoice::STATUS_GENERATED);
  246. $katao_invoice->setMemberFirstName($katao_member->getFirstName());
  247. $katao_invoice->setMemberLastName($katao_member->getLastName());
  248. $katao_invoice->setMemberEmail($katao_user->getEmail());
  249. $katao_invoice->setMemberAddress1($katao_user->getAddress1());
  250. $katao_invoice->setMemberAddress2($katao_user->getAddress2());
  251. $katao_invoice->setMemberZip($katao_user->getZip());
  252. $katao_invoice->setMemberCity($katao_user->getCity());
  253. $katao_invoice->setKataoName(wpConfig::getName());
  254. $katao_invoice->setKataoAddress(wpConfig::getAddress());
  255. $katao_invoice->setKataoSiretNumber(wpConfig::getSiretNumber());
  256. $katao_invoice->setKataoRcsNumber(wpConfig::getRCSNumber());
  257. $katao_invoice->setKataoCapital(wpConfig::getCapital());
  258. $katao_invoice->save();
  259. $katao_invoice_count++;
  260. $current_amount_sol = $katao_member->getCurrentAmountSol();
  261. $amount = 0;
  262. $used_sol = 0;
  263. foreach ($products_data['products'] as $katao_product_id => $data) {
  264. $katao_invoice_product = new KataoInvoiceProduct();
  265. $katao_invoice_product->setKataoInvoice($katao_invoice);
  266. $katao_invoice_product->setKataoProductId($katao_product_id);
  267. $katao_invoice_product->setKataoCartProductId($data['katao_cart_product_id']);
  268. $katao_invoice_product->setKataoOrderProductId($data['katao_order_product_id']);
  269. $katao_invoice_product->setProductReference($data['reference']);
  270. $katao_invoice_product->setProductName($data['name']);
  271. $katao_invoice_product->setProductPriceEuro($data['price']);
  272. $katao_invoice_product->setProductMargin($data['margin']);
  273. $katao_invoice_product->setProductTvaRate($data['tva_rate']);
  274. $katao_invoice_product->setQuantity($data['quantity']);
  275. $katao_invoice_product->setQuantityDelivered($data['quantity']);
  276. $sol_amount = $data['quantity'] * $data['product_max_sol_amount'];
  277. if ($current_amount_sol >= $sol_amount) {
  278. $used_sol += $sol_amount;
  279. $katao_invoice_product->setSolAmount($sol_amount);
  280. $current_amount_sol = max(0, $current_amount_sol - $sol_amount);
  281. } else {
  282. $used_sol += $current_amount_sol;
  283. $katao_invoice_product->setSolAmount($current_amount_sol);
  284. $current_amount_sol = 0;
  285. }
  286. $katao_invoice_product->save();
  287. $amount += $data['quantity'] * $data['price'];
  288. }
  289. $katao_invoice->setSolAmount($used_sol);
  290. $katao_invoice->save();
  291. }
  292. }
  293. }
  294. foreach ($carts_to_validate as $katao_cart) {
  295. $katao_cart->setStatus(KataoCart::STATUS_ARCHIVED);
  296. $katao_cart->save();
  297. }
  298. }
  299. if (0 < $katao_invoice_count) {
  300. wpFlashMessages::addConfirmation('Factures adhérents générées avec succès (' . $katao_invoice_count . ' au total).');
  301. $this->redirect('kataoInvoice/index');
  302. }
  303. wpFlashMessages::addWarning('Aucune facture adhérent n\'a été générée.');
  304. $this->redirect('kataoOrder/index');
  305. }
  306. public function executeExportPDF($request) {
  307. $this->redirectWithErrorUnless($katao_order = KataoOrderPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  308. if ($this->getUser()->isJustSupplier()) {
  309. $this->redirectWithErrorIf($katao_order->getKataoSupplierId() != $this->getUser()->getInstance()->getKataoSupplierId(), 'Accès restreint.', '@profile');
  310. }
  311. $content = $katao_order->generatePDF();
  312. $response = $this->getResponse();
  313. $response->setContentType('application/pdf');
  314. $response->setHttpHeader('Content-disposition', 'attachment; filename="' . $katao_order->getNumber() . '.pdf"');
  315. $response->setHttpHeader('Content-Length', strlen($content));
  316. $response->setHttpHeader('Pragma', 'public');
  317. $response->setHttpHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
  318. $response->setHttpHeader('Expires', '0');
  319. $response->setContent($content);
  320. return sfView::NONE;
  321. }
  322. public function executeSend($request) {
  323. $this->redirectWithErrorUnless($this->katao_order = KataoOrderPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  324. if ('' == $this->katao_order->getDeliveryAddress()) {
  325. if ($request->isMethod('post')) {
  326. $this->katao_order->setDeliveryAddress($request->getParameter('delivery_address'));
  327. $this->katao_order->save();
  328. } else {
  329. $this->delivery_address = KataoOrderPeer::getLastDeliveryAddress($this->katao_order->getKataoNodeId(), $this->katao_order->getKataoSupplierId());
  330. return sfView::SUCCESS;
  331. }
  332. }
  333. try {
  334. if (!$request->getParameter('do_not_send')) {
  335. if ('' != $this->katao_order->getSupplierEmail()) {
  336. $katao_node = $this->katao_order->getKataoNode();
  337. $katao_user_delegate = $katao_node->getKataoUser();
  338. $katao_member_delegate = $katao_user_delegate->getKataoMember();
  339. $katao_member_seo = wpConfig::getInstance()->getKataoMember();
  340. $katao_user_seo = $katao_member_seo->getFirstKataoUser();
  341. $content = $this->katao_order->generatePDF();
  342. $mailer = new wpMail();
  343. $message = new Swift_Message('Commande Katao');
  344. $message->attach(new Swift_Message_Part(sprintf('Madame, Monsieur,
  345. Veuillez trouver en pièce jointe notre commande n° %s du %s pour le noeud %s.
  346. Merci de nous confirmer sa bonne réception.
  347. Pour tout problème, merci de prendre contact avec le délégué de %s :
  348. %s %s
  349. %s / %s
  350. Ou, à défaut, notre gérant :
  351. %s %s
  352. %s / %s
  353. La livraison sera au plus tard le %s à l\'adresse suivante :
  354. %s
  355. %s', $this->katao_order->getNumber(), CatalyzDate::formatShort($this->katao_order->getCreatedAt(null)), $katao_node->getCity(), $katao_node->getCity(), $katao_member_delegate->getLastName(), $katao_member_delegate->getFirstName(), $katao_user_delegate->getPhone(), $katao_user_delegate->getEmail(), $katao_member_seo->getLastName(), $katao_member_seo->getFirstName(), $katao_user_seo->getPhone(), $katao_user_seo->getEmail(), $this->katao_order->getKataoPeriod()->getFinishAtStr(), $this->katao_order->getDeliveryAddress(), Utils::getKataoEmailFooter())));
  356. $message->attach(new Swift_Message_Attachment($content, sprintf('%s.pdf', $this->katao_order->getNumber()), 'application/pdf'));
  357. $mailer->send($message, new Swift_Address($this->katao_order->getSupplierEmail(), $this->katao_order->getSupplierName()), sfConfig::get('app_mail_from'));
  358. $mailer->disconnect();
  359. wpFlashMessages::addConfirmation('Commande "' . $this->katao_order->getNumber() . '" envoyée avec succès.');
  360. } else {
  361. wpFlashMessages::addInformation('Commande "' . $this->katao_order->getNumber() . '" non envoyée car ce fournisseur n\'a pas d\'email. Merci de bien vouloir l\'exporter et la lui envoyer ou faxer.');
  362. }
  363. } else {
  364. wpFlashMessages::addConfirmation('Commande "' . $this->katao_order->getNumber() . '" marquée comme envoyée avec succès.');
  365. }
  366. if (KataoOrder::STATUS_ADJUSTED == $this->katao_order->getStatus()) {
  367. $this->katao_order->setStatus(KataoOrder::STATUS_SENT);
  368. $this->katao_order->save();
  369. }
  370. }
  371. catch (Exception $e) {
  372. $mailer->disconnect();
  373. wpFlashMessages::addError('Impossible d\'envoyer la commande ' . $this->katao_order->getNumber() . '.');
  374. }
  375. $this->redirect('kataoOrder/index');
  376. }
  377. public function executeReceive($request) {
  378. $this->redirectWithErrorUnless($this->katao_order = KataoOrderPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  379. $this->redirectWithErrorIf(KataoOrder::STATUS_SENT != $this->katao_order->getStatus());
  380. if ($request->isMethod('post')) {
  381. foreach ($request->getParameter('quantity') as $katao_order_product_id => $quantity) {
  382. KataoOrderProductPeer::receiveQuantity($katao_order_product_id, $quantity);
  383. }
  384. $this->katao_order->setStatus(KataoOrder::STATUS_RECEIVED);
  385. $this->katao_order->save();
  386. if ($this->getUser()->isJustDelegate()) {
  387. $this->katao_order->notifiySeoWithReceive();
  388. }
  389. wpFlashMessages::addConfirmation('Commande "' . $this->katao_order->getNumber() . '" marquée comme réceptionnée avec succès.');
  390. $this->redirect('kataoOrder/index');
  391. }
  392. }
  393. public function executeDeliver($request) {
  394. $this->redirectWithErrorUnless($katao_order = KataoOrderPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  395. $this->redirectWithErrorIf(KataoOrder::STATUS_RECEIVED != $katao_order->getStatus());
  396. $katao_order->setStatus(KataoOrder::STATUS_DELIVERED);
  397. $katao_order->save();
  398. $katao_order->notifyMembersWithModifiedDeliveredQuantities();
  399. if ($this->getUser()->isJustDelegate()) {
  400. $katao_order->notifiySeoWithDeliver();
  401. }
  402. wpFlashMessages::addConfirmation('Commande "' . $katao_order->getNumber() . '" marquée comme délivrée avec succès.');
  403. $this->redirect('kataoOrder/index');
  404. }
  405. public function executeExportPDFAll($request) {
  406. $criteria = new Criteria();
  407. if ($this->getUser()->isJustDelegate()) {
  408. $criteria->addJoin(KataoOrderPeer::KATAO_SUPPLIER_ID, KataoSupplierPeer::ID);
  409. $criteria->addJoin(KataoSupplierPeer::ID, KataoSupplierNodePeer::KATAO_SUPPLIER_ID);
  410. $criteria->add(KataoSupplierNodePeer::KATAO_NODE_ID, $this->getUser()->getInstance()->getKataoMember()->getKataoNodeId());
  411. $criteria->setDistinct();
  412. }
  413. $criteria->addAscendingOrderByColumn(KataoOrderPeer::ID);
  414. return $this->exportOrdersToPDF(KataoOrderPeer::doSelect($criteria));
  415. }
  416. public function executeExportPDFSelected($request) {
  417. if (!wpPersistenceManager::isEmpty('katao_order')) {
  418. $criteria = new Criteria();
  419. $criteria->add(KataoOrderPeer::ID, array_keys(wpPersistenceManager::getSelectedItems('katao_order')), Criteria::IN);
  420. $criteria->addAscendingOrderByColumn(KataoOrderPeer::ID);
  421. return $this->exportOrdersToPDF(KataoOrderPeer::doSelect($criteria));
  422. } else {
  423. wpFlashMessages::addWarning('Merci de sélectionner au moins une commande.');
  424. $this->redirect('kataoCart/index');
  425. }
  426. }
  427. protected function exportOrdersToPDF($katao_orders) {
  428. $file = tempnam('tmp', 'zip');
  429. $archive = new ZipArchive();
  430. $archive->open($file, ZipArchive::OVERWRITE);
  431. foreach ($katao_orders as/*(KataoOrder)*/ $katao_order) {
  432. $archive->addFromString($katao_order->getNumber() . '.pdf', $katao_order->generatePDF());
  433. }
  434. $archive->close();
  435. $response = $this->getResponse();
  436. $response->setContentType('application/zip');
  437. $response->setHttpHeader('Content-disposition', 'attachment; filename="KATAO_Commandes_' . date('Y-m-d') . '.zip"');
  438. $response->setHttpHeader('Content-Length', filesize($file));
  439. $response->setHttpHeader('Pragma', 'public');
  440. $response->setHttpHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
  441. $response->setHttpHeader('Expires', '0');
  442. $response->setContent(file_get_contents($file));
  443. return sfView::NONE;
  444. }
  445. public function executeAdjustMultiple($request) {
  446. if (!wpPersistenceManager::isEmpty('katao_order')) {
  447. $done = 0;
  448. foreach (KataoOrderPeer::retrieveByPKs(array_keys(wpPersistenceManager::getSelectedItems('katao_order'))) as/*(KataoOrder)*/ $katao_order) {
  449. if (KataoOrder::STATUS_GENERATED == $katao_order->getStatus()) {
  450. if ($katao_order->sumProducts() >= $katao_order->getKataoSupplier()->getOrderMinAmount()) {
  451. $last_incomplete_package_count = 0;
  452. foreach ($katao_order->getKataoOrderProductsJoinKataoProduct() as/*(KataoOrderProduct)*/ $katao_order_product) {
  453. $last_incomplete_package_count += $katao_order_product->getKataoProduct()->getLastIncompletePackageQuantity($katao_order->getKataoPeriodId(), $katao_order->getKataoNodeId(), true);
  454. }
  455. if (0 == $last_incomplete_package_count) {
  456. $katao_order->adjust($this->getUser());
  457. $done++;
  458. }
  459. }
  460. }
  461. }
  462. if (0 < $done) {
  463. wpFlashMessages::addConfirmation($done . ' commandes sélectionnés sur ' . wpPersistenceManager::getSelectedItemCount('katao_order') . ' ont été marquées comme ajustées avec succès.');
  464. } else {
  465. wpFlashMessages::addWarning('Aucune commande sélectionnée n\'a été marquée comme ajustée.');
  466. }
  467. wpPersistenceManager::cleanSelection('katao_order');
  468. } else {
  469. wpFlashMessages::addWarning('Merci de sélectionner au moins une commande.');
  470. }
  471. $this->redirect('kataoOrder/index');
  472. }
  473. public function executeReceiveNewProduct($request) {
  474. $this->redirectWithErrorUnless($this->katao_order = KataoOrderPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  475. $this->redirectWithErrorIf(KataoOrder::STATUS_SENT != $this->katao_order->getStatus());
  476. if ($request->isMethod('post')) {
  477. $this->redirectWithErrorUnless($katao_product = KataoProductPeer::retrieveByPk($request->getParameter('product')), 'Produit #' . $request->getParameter('product') . ' inconnu.');
  478. $katao_order_product = new KataoOrderProduct();
  479. $katao_order_product->setKataoOrder($this->katao_order);
  480. $katao_order_product->setKataoProduct($katao_product);
  481. $katao_order_product->setProductReference($katao_product->getReference());
  482. $katao_order_product->setProductName($katao_product->getName());
  483. $katao_order_product->setProductPriceEuro($katao_product->getUnitPriceEuro());
  484. $katao_order_product->setProductMargin($katao_product->getMargin());
  485. $katao_order_product->setProductTvaRate($katao_product->getTvaRate());
  486. $katao_order_product->setQuantity(0);
  487. $katao_order_product->setQuantityReceived(0);
  488. $katao_order_product->setQuantityDelivered(0);
  489. $katao_order_product->setHasBeenReceived(false);
  490. $katao_order_product->setHasBeenDelivered(false);
  491. $katao_order_product->save();
  492. wpFlashMessages::addConfirmation('Produit "' . $katao_product->getName() . '" ajouté à la commande "' . $this->katao_order->getNumber() . '" avec succès.');
  493. $this->redirect('kataoOrder/index');
  494. }
  495. }
  496. public function executeSimulatedMembers($request) {
  497. $this->redirectWithErrorUnless($this->katao_order_product = KataoOrderProductPeer::retrieveByPk($request->getParameter('id')), 'Commande #' . $request->getParameter('id') . ' inconnue.');
  498. $this->katao_product = $this->katao_order_product->getKataoProduct();
  499. $this->katao_order = $this->katao_order_product->getKataoOrder();
  500. }
  501. }