actions.class.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. <?php
  2. /**
  3. * kataoInvoice actions.
  4. *
  5. * @package www.katao.fr
  6. * @subpackage kataoInvoice
  7. * @author Your name here
  8. * @version SVN: $Id: actions.class.php 8507 2008-04-17 17:32:20Z fabien $
  9. */
  10. class kataoInvoiceActions extends wpActions {
  11. public function preExecute() {
  12. parent::preExecute();
  13. sfLoader::loadHelpers(array('Asset', 'Tag', 'Url'));
  14. }
  15. public function executeIndex() {
  16. $criteria = new Criteria();
  17. $criteria->addJoin(KataoInvoicePeer::KATAO_MEMBER_ID, KataoMemberPeer::ID);
  18. if ($this->getUser()->isJustDelegate()) {
  19. $criteria->add(KataoMemberPeer::KATAO_NODE_ID, $this->getUser()->getInstance()->getKataoMember()->getKataoNodeId());
  20. }
  21. $sort_method = $this->getCriteriaSortMethod();
  22. switch ($this->sort = $this->getRequestParameter('sort', 'date')) {
  23. case 'no':
  24. $criteria->$sort_method(KataoInvoicePeer::ID);
  25. break;
  26. case 'status':
  27. $criteria->$sort_method(KataoInvoicePeer::STATUS);
  28. break;
  29. case 'member':
  30. $criteria->$sort_method(KataoInvoicePeer::MEMBER_LAST_NAME);
  31. $criteria->$sort_method(KataoInvoicePeer::MEMBER_FIRST_NAME);
  32. break;
  33. default:
  34. $criteria->$sort_method(KataoInvoicePeer::CREATED_AT);
  35. }
  36. if ('' != $this->filter_status = $this->getUser()->getAttribute('katao_invoice_filter_status')) {
  37. $criteria->add(KataoInvoicePeer::STATUS, $this->filter_status);
  38. }
  39. if ('' != $this->filter_member = $this->getUser()->getAttribute('katao_invoice_filter_member')) {
  40. $criteria->add(KataoInvoicePeer::KATAO_MEMBER_ID, $this->filter_member);
  41. }
  42. if ('' != $this->filter_node = $this->getUser()->getAttribute('katao_invoice_filter_node')) {
  43. $criteria->add(KataoInvoicePeer::KATAO_NODE_ID, $this->filter_node);
  44. }
  45. if ('' != $this->filter_period = $this->getUser()->getAttribute('katao_invoice_filter_period', KataoPeriodPeer::getActivePeriod()->getId())) {
  46. $criteria->add(KataoInvoicePeer::KATAO_PERIOD_ID, $this->filter_period);
  47. }
  48. $pager = new sfPropelPager('KataoInvoice', sfConfig::get('app_pager'));
  49. $pager->setCriteria($criteria);
  50. $pager->setPage($this->getRequestParameter('page', 1));
  51. $pager->init();
  52. $this->pager = $pager;
  53. $this->katao_invoiceList = $pager->getResults();
  54. }
  55. public function executeFilter($request) {
  56. $this->getUser()->setAttribute('katao_invoice_filter_status', $request->getParameter('filter_status'));
  57. $this->getUser()->setAttribute('katao_invoice_filter_member', $request->getParameter('filter_member'));
  58. $this->getUser()->setAttribute('katao_invoice_filter_node', $request->getParameter('filter_node'));
  59. $this->getUser()->setAttribute('katao_invoice_filter_period', $request->getParameter('filter_period'));
  60. return $this->redirect('kataoInvoice/index');
  61. }
  62. public function executeFilterReset($request) {
  63. $this->getUser()->setAttribute('katao_invoice_filter_status', '');
  64. $this->getUser()->setAttribute('katao_invoice_filter_member', '');
  65. $this->getUser()->setAttribute('katao_invoice_filter_node', '');
  66. $this->getUser()->setAttribute('katao_invoice_filter_period', KataoPeriodPeer::getActivePeriod()->getId());
  67. return $this->redirect('kataoInvoice/index');
  68. }
  69. public function executeShow($request) {
  70. $this->katao_invoice = KataoInvoicePeer::retrieveByPk($request->getParameter('id'));
  71. $this->redirectWithErrorUnless($this->katao_invoice, 'Facture #' . $request->getParameter('id') . ' inconnue.');
  72. }
  73. public function executeCreate() {
  74. $this->form = new KataoInvoiceForm();
  75. $this->setTemplate('edit');
  76. }
  77. public function executeEdit($request) {
  78. $this->form = new KataoInvoiceForm(KataoInvoicePeer::retrieveByPk($request->getParameter('id')));
  79. }
  80. public function executeUpdate($request) {
  81. $this->redirectWithErrorUnless($request->isMethod('post'));
  82. $this->form = new KataoInvoiceForm(KataoInvoicePeer::retrieveByPk($request->getParameter('id')));
  83. $this->form->bind($request->getParameter('katao_invoice'));
  84. if ($this->form->isValid()) {
  85. $katao_invoice = $this->form->save();
  86. wpFlashMessages::addConfirmation('Facture "' . $katao_invoice->getNumber() . '" sauvée avec succès.');
  87. $this->redirect('kataoInvoice/index');
  88. }
  89. $this->setTemplate('edit');
  90. }
  91. public function executeDelete($request) {
  92. $this->redirectWithErrorUnless($katao_invoice = KataoInvoicePeer::retrieveByPk($request->getParameter('id')), 'Facture #' . $request->getParameter('id') . ' inconnue.');
  93. $katao_invoice->delete();
  94. wpFlashMessages::addConfirmation('Facture "' . $katao_invoice->getNumber() . '" supprimée avec succès.');
  95. $this->redirect('kataoInvoice/index');
  96. }
  97. public function executeDeleteMultiple($request) {
  98. if (!wpPersistenceManager::isEmpty('katao_invoice')) {
  99. $criteria = new Criteria();
  100. $criteria->add(KataoInvoicePeer::ID, array_keys(wpPersistenceManager::getSelectedItems('katao_invoice')), Criteria::IN);
  101. KataoInvoicePeer::doDelete($criteria);
  102. wpPersistenceManager::cleanSelection('katao_invoice');
  103. wpFlashMessages::addConfirmation('Les factures sélectionnées ont été supprimées avec succès.');
  104. } else {
  105. wpFlashMessages::addWarning('Merci de sélectionner au moins une facture.');
  106. }
  107. $this->redirect('kataoInvoice/index');
  108. }
  109. public function executeExportPDF($request) {
  110. $this->redirectWithErrorUnless($katao_invoice = KataoInvoicePeer::retrieveByPk($request->getParameter('id')), 'Facture #' . $request->getParameter('id') . ' inconnue.');
  111. $content = $katao_invoice->generatePDF();
  112. $response = $this->getResponse();
  113. $response->setContentType('application/pdf');
  114. $response->setHttpHeader('Content-disposition', 'attachment; filename="' . $katao_invoice->getNumber() . '.pdf"');
  115. $response->setHttpHeader('Content-Length', strlen($content));
  116. $response->setHttpHeader('Pragma', 'public');
  117. $response->setHttpHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
  118. $response->setHttpHeader('Expires', '0');
  119. $response->setContent($content);
  120. return sfView::NONE;
  121. }
  122. public function executeSend($request) {
  123. $this->redirectWithErrorUnless($katao_invoice = KataoInvoicePeer::retrieveByPk($request->getParameter('id')), 'Facture #' . $request->getParameter('id') . ' inconnue.');
  124. $this->sendInvoice($katao_invoice);
  125. $this->redirect('kataoInvoice/index');
  126. }
  127. public function executeSendMultiple($request) {
  128. if (!wpPersistenceManager::isEmpty('katao_invoice')) {
  129. foreach (KataoInvoicePeer::retrieveByPKs(array_keys(wpPersistenceManager::getSelectedItems('katao_invoice'))) as $katao_invoice) {
  130. $this->sendInvoice($katao_invoice);
  131. }
  132. wpPersistenceManager::cleanSelection('katao_invoice');
  133. } else {
  134. wpFlashMessages::addWarning('Merci de sélectionner au moins une facture.');
  135. }
  136. $this->redirect('kataoInvoice/index');
  137. }
  138. protected function sendInvoice(KataoInvoice $katao_invoice) {
  139. try {
  140. if ('' != $katao_invoice->getMemberEmail()) {
  141. $content = $katao_invoice->generatePDF();
  142. $mailer = new wpMail();
  143. $message = new Swift_Message('Facture Katao');
  144. $message->attach(new Swift_Message_Part(sprintf('%s,
  145. Suite à la dernière distribution de la periode %s, tu trouveras ci-joint ta facture.
  146. Tu peux consulter ton compte et tes opérations à cette adresse :
  147. %smon-profil
  148. %s', $katao_invoice->getMemberFirstName(), $katao_invoice->getKataoPeriod()->getName(), sfConfig::get('app_katao_frontend_url'), Utils::getKataoEmailFooter())));
  149. $message->attach(new Swift_Message_Attachment($content, sprintf('%s.pdf', $katao_invoice->getNumber()), 'application/pdf'));
  150. $mailer->send($message, new Swift_Address($katao_invoice->getMemberEmail(), sprintf('%s %s', $katao_invoice->getMemberFirstName(), $katao_invoice->getMemberLastName())), sfConfig::get('app_mail_from'));
  151. $mailer->disconnect();
  152. wpFlashMessages::addConfirmation('Facture "' . $katao_invoice->getNumber() . '" envoyée avec succès.');
  153. } else {
  154. wpFlashMessages::addInformation('Facture "' . $katao_invoice->getNumber() . '" non envoyée car cet adhérent n\'a pas d\'email. Merci de bien vouloir l\'exporter et la lui envoyer ou faxer.');
  155. }
  156. if (KataoInvoice::STATUS_VALIDATED == $katao_invoice->getStatus()) {
  157. $katao_invoice->setStatus(KataoInvoice::STATUS_SENT);
  158. $katao_invoice->save();
  159. }
  160. }
  161. catch (Exception $e) {
  162. $mailer->disconnect();
  163. wpFlashMessages::addError('Impossible d\'envoyer la facture ' . $katao_invoice->getNumber() . '.');
  164. }
  165. }
  166. public function executeExportPDFAll($request) {
  167. $criteria = new Criteria();
  168. if ($this->getUser()->isJustDelegate()) {
  169. $criteria->addJoin(KataoInvoicePeer::KATAO_MEMBER_ID, KataoMemberPeer::ID);
  170. $criteria->add(KataoMemberPeer::KATAO_NODE_ID, $this->getUser()->getInstance()->getKataoMember()->getKataoNodeId());
  171. }
  172. $criteria->addAscendingOrderByColumn(KataoInvoicePeer::ID);
  173. return $this->exportInvoicesToPDF(KataoInvoicePeer::doSelect($criteria));
  174. }
  175. public function executeExportPDFSelected($request) {
  176. if (!wpPersistenceManager::isEmpty('katao_invoice')) {
  177. $criteria = new Criteria();
  178. $criteria->add(KataoInvoicePeer::ID, array_keys(wpPersistenceManager::getSelectedItems('katao_invoice')), Criteria::IN);
  179. $criteria->addAscendingOrderByColumn(KataoInvoicePeer::ID);
  180. return $this->exportInvoicesToPDF(KataoInvoicePeer::doSelect($criteria));
  181. } else {
  182. wpFlashMessages::addWarning('Merci de sélectionner au moins une facture.');
  183. $this->redirect('kataoInvoice/index');
  184. }
  185. }
  186. protected function exportInvoicesToPDF($katao_invoices) {
  187. $file = tempnam('tmp', 'zip');
  188. $archive = new ZipArchive();
  189. $archive->open($file, ZipArchive::OVERWRITE);
  190. foreach ($katao_invoices as/*(KataoInvoice)*/ $katao_invoice) {
  191. $archive->addFromString($katao_invoice->getNumber() . '.pdf', $katao_invoice->generatePDF());
  192. }
  193. $archive->close();
  194. $response = $this->getResponse();
  195. $response->setContentType('application/zip');
  196. $response->setHttpHeader('Content-disposition', 'attachment; filename="KATAO_Factures_Adhérents_' . date('Y-m-d') . '.zip"');
  197. $response->setHttpHeader('Content-Length', filesize($file));
  198. $response->setHttpHeader('Pragma', 'public');
  199. $response->setHttpHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
  200. $response->setHttpHeader('Expires', '0');
  201. $response->setContent(file_get_contents($file));
  202. return sfView::NONE;
  203. }
  204. public function executeDeliver($request) {
  205. $this->redirectWithErrorUnless($this->katao_invoice = KataoInvoicePeer::retrieveByPk($request->getParameter('id')), 'Facture #' . $request->getParameter('id') . ' inconnue.');
  206. if ($request->isMethod('POST')) {
  207. foreach ($request->getParameter('quantity') as $katao_invoice_product_id => $quantity) {
  208. KataoInvoiceProductPeer::deliverQuantity($katao_invoice_product_id, $quantity);
  209. }
  210. $this->katao_invoice->setStatus(KataoInvoice::STATUS_DELIVERED);
  211. $this->katao_invoice->save();
  212. $katao_product_id = $request->getParameter('new_product');
  213. if ($katao_product_id) {
  214. $katao_member = $this->katao_invoice->getKataoMember();
  215. $katao_user = $katao_member->getFirstKataoUser();
  216. $katao_cart = $katao_user->getCart($this->katao_invoice->getKataoPeriodId(), $this->katao_invoice->getKataoNodeId(), true);
  217. $katao_product = KataoProductPeer::retrieveByPK($katao_product_id);
  218. $katao_order_product_id = KataoOrderProductPeer::getIdByProductAndPeriodAndNode($katao_product_id, $this->katao_invoice->getKataoPeriodId(), $this->katao_invoice->getKataoNodeId());
  219. $katao_cart_product = new KataoCartProduct();
  220. $katao_cart_product->setKataoCart($katao_cart);
  221. $katao_cart_product->setKataoProduct($katao_product);
  222. $katao_cart_product->setProductReference($katao_product->getReference());
  223. $katao_cart_product->setProductName($katao_product->getName());
  224. $katao_cart_product->setProductPriceEuro($katao_product->getUnitPriceEuro());
  225. $katao_cart_product->setProductMargin($katao_product->getMargin());
  226. $katao_cart_product->setProductTvaRate($katao_product->getTvaRate());
  227. $katao_cart_product->setQuantity(0);
  228. $katao_cart_product->setQuantityAdjusted(0);
  229. $katao_cart_product->setHasBeenAdjusted(true);
  230. $katao_cart_product->setQuantityDelivered(1);
  231. $katao_cart_product->setKataoOrderProductId($katao_order_product_id);
  232. $katao_cart_product->save();
  233. $katao_invoice_product = new KataoInvoiceProduct();
  234. $katao_invoice_product->setKataoInvoice($this->katao_invoice);
  235. $katao_invoice_product->setKataoProduct($katao_product);
  236. $katao_invoice_product->setKataoCartProduct($katao_cart_product);
  237. $katao_invoice_product->setKataoOrderProductId($katao_order_product_id);
  238. $katao_invoice_product->setProductReference($katao_product->getReference());
  239. $katao_invoice_product->setProductName($katao_product->getName());
  240. $katao_invoice_product->setProductPriceEuro($katao_product->getUnitPriceEuro());
  241. $katao_invoice_product->setProductMargin($katao_product->getMargin());
  242. $katao_invoice_product->setProductTvaRate($katao_product->getTvaRate());
  243. $katao_invoice_product->setQuantity(0);
  244. $katao_invoice_product->setQuantityDelivered(0);
  245. $katao_invoice_product->setSolAmount(0);
  246. $katao_invoice_product->save();
  247. wpFlashMessages::addConfirmation('Produit "' . $katao_product->getName() . '" ajouté à la facture avec succès.');
  248. $this->redirect('@katao_invoice_deliver?id=' . $this->katao_invoice->getId());
  249. } else {
  250. wpFlashMessages::addConfirmation('Facture "' . $this->katao_invoice->getNumber() . '" délivrée avec succès.');
  251. $this->redirect('kataoInvoice/index');
  252. }
  253. }
  254. }
  255. public function executeValidate($request) {
  256. $this->redirectWithErrorUnless($this->katao_period = KataoPeriodPeer::retrieveByPK((int)$this->getUser()->getAttribute('katao_invoice_filter_period', KataoPeriodPeer::getActivePeriod()->getId())), 'Merci de filtrer les factures sur une période avant de les valider.', 'kataoInvoice/index');
  257. if ($request->isMethod('POST')) {
  258. $katao_node = KataoNodePeer::retrieveByPK($request->getParameter('node_id'));
  259. $this->redirectWithErrorUnless($katao_node, 'Merci de choisir un noeud', '@katao_invoice_validate');
  260. $criteria_update = new Criteria();
  261. $criteria_update->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_VALIDATED);
  262. $criteria_where = new Criteria();
  263. $criteria_where->add(KataoInvoicePeer::KATAO_PERIOD_ID, $this->katao_period->getId());
  264. $criteria_where->add(KataoInvoicePeer::KATAO_NODE_ID, $katao_node->getId());
  265. $criteria_where->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_DELIVERED);
  266. BasePeer::doUpdate($criteria_where, $criteria_update, Propel::getConnection());
  267. wpFlashMessages::addConfirmation('Les factures du noeud "' . $katao_node->getCity() . '" pour la période "' . $this->katao_period->getName() . '" ont été validées avec succès.');
  268. $this->redirect('kataoInvoice/index');
  269. }
  270. }
  271. public function executeUpdateProductDetails($request) {
  272. $katao_period = KataoPeriodPeer::retrieveByPK((int)$this->getUser()->getAttribute('katao_invoice_filter_period', KataoPeriodPeer::getActivePeriod()->getId()));
  273. $katao_node = KataoNodePeer::retrieveByPK($request->getParameter('node_id'));
  274. $return = '<i>Aucune facture à valider.</i>';
  275. $suppliers = array();
  276. if (!is_null($katao_period) && !is_null($katao_node)) {
  277. $criteria = new Criteria();
  278. $criteria->add(KataoInvoicePeer::KATAO_PERIOD_ID, $katao_period->getId());
  279. $criteria->add(KataoInvoicePeer::KATAO_NODE_ID, $katao_node->getId());
  280. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_DELIVERED, Criteria::NOT_EQUAL);
  281. if (0 < KataoInvoicePeer::doCount($criteria)) {
  282. $return = '<i>Toutes les factures de ce noeud ne sont pas délivrées.</i>';
  283. } else {
  284. $criteria = new Criteria();
  285. $criteria->addJoin(KataoInvoiceProductPeer::KATAO_INVOICE_ID, KataoInvoicePeer::ID);
  286. $criteria->add(KataoInvoicePeer::KATAO_PERIOD_ID, $katao_period->getId());
  287. $criteria->add(KataoInvoicePeer::KATAO_NODE_ID, $katao_node->getId());
  288. $criteria->add(KataoInvoicePeer::STATUS, KataoInvoice::STATUS_DELIVERED);
  289. foreach (KataoInvoiceProductPeer::doSelectJoinAllExceptKataoOrderProduct($criteria) as/*(KataoInvoiceProduct)*/ $katao_invoice_product) {
  290. $return = '<i>Tous les produits ont été distribués en totalité.</i>';
  291. $katao_invoice = $katao_invoice_product->getKataoInvoice();
  292. $katao_product = $katao_invoice_product->getKataoProduct();
  293. $supplier_name = $katao_product->getKataoSupplier()->getName();
  294. $product_name = $katao_invoice_product->getProductName();
  295. $current = $katao_product->getTotalDeliveredQuantity(false, $katao_period->getId(), $katao_node->getId());
  296. $total = $katao_product->getTotalReceivedQuantity($katao_period->getId(), $katao_node->getId());
  297. if ($current != $total) {
  298. $suppliers[$supplier_name][$product_name]['current'] = $current;
  299. $suppliers[$supplier_name][$product_name]['total'] = $total;
  300. $suppliers[$supplier_name][$product_name]['members'][$katao_invoice->getId()] = $katao_invoice->getMemberName();
  301. }
  302. }
  303. }
  304. }
  305. if (0 < count($suppliers)) {
  306. $return = '<table class="admin-sub-list">';
  307. foreach ($suppliers as $supplier_name => $products) {
  308. $return .= sprintf('<tr><td colspan="4" style="border:none!important;"><div class="content-add02">
  309. <div class="heading02"><h2>%s</h2></div>
  310. </div></td></tr>', $supplier_name);
  311. $return .= sprintf('<tr><th>Produit</th><th style="text-align:center!important">%s</th><th style="text-align:center!important"">%s</th><th>Adhérents</th></tr>', image_tag('actions/receive.png', array('alt' => 'Quantité réceptionnée', 'title' => 'Quantité réceptionnée')), image_tag('actions/deliver.png', array('alt' => 'Quantité délivrée', 'title' => 'Quantité délivrée')));
  312. foreach ($products as $product_name => $product_data) {
  313. $diff_str = $product_data['current'] - $product_data['total'];
  314. if (0 < $diff_str) {
  315. $diff_str = '+' . $diff_str;
  316. }
  317. $return .= sprintf('<tr valign="top"><td nowrap="nowrap">%s</td><td style="text-align:center!important">%s</td><td style="text-align:center!important">%d (%s)</td>', $product_name, $product_data['total'], $product_data['current'], $diff_str);
  318. $members = array();
  319. foreach ($product_data['members'] as $invoice_id => $member_name) {
  320. $members[] = sprintf('<li>%s</li>', link_to($member_name, '@katao_invoice_deliver?id=' . $invoice_id));
  321. }
  322. if (0 < count($members)) {
  323. $return .= sprintf('<td><ul>%s</ul></td>', implode('', $members));
  324. }
  325. $return .= '</tr>';
  326. }
  327. }
  328. $return .= '</table>';
  329. }
  330. return $this->renderText($return);
  331. }
  332. }