PageRenderTime 58ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/classes/service/AchatService.php

http://zeybux.googlecode.com/
PHP | 884 lines | 521 code | 92 blank | 271 comment | 45 complexity | 0555c1b3cdde3065f0cd428854cb1b4e MD5 | raw file
  1. <?php
  2. //****************************************************************
  3. //
  4. // Createur : Julien PIERRE
  5. // Date de creation : 22/07/2011
  6. // Fichier : AchatService.php
  7. //
  8. // Description : Classe AchatService
  9. //
  10. //****************************************************************
  11. // Inclusion des classes
  12. /*include_once(CHEMIN_CLASSES_MANAGERS . "ReservationManager.php");
  13. include_once(CHEMIN_CLASSES_MANAGERS . "HistoriqueReservationManager.php");
  14. include_once(CHEMIN_CLASSES_VALIDATEUR . "ReservationValid.php");
  15. include_once(CHEMIN_CLASSES_SERVICE . "CompteService.php" );*/
  16. include_once(CHEMIN_CLASSES_VO . "AchatVO.php");
  17. include_once(CHEMIN_CLASSES_VO . "ListeAchatReservationVO.php");
  18. include_once(CHEMIN_CLASSES_SERVICE . "StockService.php" );
  19. include_once(CHEMIN_CLASSES_SERVICE . "DetailOperationService.php" );
  20. include_once(CHEMIN_CLASSES_SERVICE . "OperationService.php" );
  21. include_once(CHEMIN_CLASSES_VALIDATEUR . "AchatValid.php");
  22. include_once(CHEMIN_CLASSES_VIEW_MANAGER . "AchatDetailSolidaireViewManager.php");
  23. include_once(CHEMIN_CLASSES_VIEW_MANAGER . "AchatDetailViewManager.php");
  24. include_once(CHEMIN_CLASSES_VIEW_MANAGER . "AdherentViewManager.php");
  25. include_once(CHEMIN_CLASSES_VIEW_MANAGER . "DetailMarcheViewManager.php");
  26. /**
  27. * @name AchatService
  28. * @author Julien PIERRE
  29. * @since 22/07/2011
  30. * @desc Classe Service d'une Achat
  31. */
  32. class AchatService
  33. {
  34. /**
  35. * @name set($pAchat)
  36. * @param AchatVO
  37. * @return integer
  38. * @desc Ajoute ou modifie une réservation
  39. */
  40. public function set($pAchat) {
  41. $lAchatValid = new AchatValid();
  42. if($lAchatValid->insert($pAchat)) {
  43. return $this->insert($pAchat);
  44. } else if($lAchatValid->updateReservation($pAchat)) {
  45. return $this->updateReservation($pAchat);
  46. } else if($lAchatValid->updateAchat($pAchat)) {
  47. return $this->updateAchat($pAchat);
  48. }
  49. return false;
  50. }
  51. /**
  52. * @name insert($pAchat)
  53. * @param AchatVO
  54. * @return integer
  55. * @desc Ajoute une réservation
  56. */
  57. private function insert($pAchat) {
  58. // Calcul du total
  59. $lTotal = 0;
  60. foreach($pAchat->getDetailAchat() as $lProduit) {
  61. $lTotal += $lProduit->getMontant();
  62. }
  63. $lOperationService = new OperationService();
  64. if($lTotal < 0) {
  65. // L'operation
  66. $lOperation = new OperationVO();
  67. $lOperation->setIdCompte($pAchat->getId()->getIdCompte());
  68. $lOperation->setMontant($lTotal);
  69. $lOperation->setLibelle("Marché N°" . $pAchat->getId()->getIdCommande());
  70. $lOperation->setTypePaiement(7);
  71. $lOperation->setIdCommande($pAchat->getId()->getIdCommande());
  72. $lIdOperation = $lOperationService->set($lOperation);
  73. // Operation sur le compte Zeybu
  74. $lOperationZeybu = new OperationVO();
  75. $lOperationZeybu->setIdCompte(-1);
  76. $lOperationZeybu->setMontant($lTotal * -1);
  77. $lOperationZeybu->setLibelle("Marché N°" . $pAchat->getId()->getIdCommande());
  78. $lOperationZeybu->setTypePaiement(7);
  79. $lOperationZeybu->setTypePaiementChampComplementaire($lIdOperation);
  80. $lOperationZeybu->setIdCommande($pAchat->getId()->getIdCommande());
  81. $lIdOperationZeybu = $lOperationService->set($lOperationZeybu);
  82. $lOperation->setTypePaiementChampComplementaire($lIdOperationZeybu);
  83. $lOperationService->set($lOperation);
  84. // Ajout detail operation
  85. $lStockService = new StockService;
  86. $lDetailOperationService = new DetailOperationService;
  87. foreach($pAchat->getDetailAchat() as $lProduit) {
  88. // Ajout du stock
  89. $lStock = new StockVO();
  90. $lStock->setQuantite($lProduit->getQuantite());
  91. $lStock->setType(1);
  92. $lStock->setIdCompte($pAchat->getId()->getIdCompte());
  93. $lStock->setIdDetailCommande($lProduit->getIdDetailCommande());
  94. $lStock->setIdOperation($lIdOperation);
  95. $lStockService->set($lStock);
  96. // Ajout du détail de l'operation
  97. $lDetailOperation = new DetailOperationVO();
  98. $lDetailOperation->setIdOperation($lIdOperation);
  99. $lDetailOperation->setIdCompte($pAchat->getId()->getIdCompte());
  100. $lDetailOperation->setMontant($lProduit->getMontant());
  101. $lDetailOperation->setLibelle("Marché N°" . $pAchat->getId()->getIdCommande());
  102. $lDetailOperation->setTypePaiement(7);
  103. $lDetailOperation->setIdDetailCommande($lProduit->getIdDetailCommande());
  104. $lDetailOperationService->set($lDetailOperation);
  105. }
  106. }
  107. // Ajout des produits solidaire
  108. $lIdOperation = $this->insertProduitAchatSolidaire($pAchat);
  109. return $lIdOperation;
  110. }
  111. /**
  112. * @name updateReservation($pAchat)
  113. * @param AchatVO
  114. * @return integer
  115. * @desc Met ŕ jour une réservation pour la passer en achat
  116. */
  117. private function updateReservation($pAchat) {
  118. $lIdReservation = new IdReservationVO();
  119. $lIdReservation->setIdCompte($pAchat->getId()->getIdCompte());
  120. $lIdReservation->setIdCommande($pAchat->getId()->getIdCommande());
  121. $lReservationService = new ReservationService();
  122. $lReservationActuelle = $lReservationService->get($lIdReservation);
  123. return $this->update($lReservationActuelle,$pAchat,$pAchat->getId()->getIdReservation());
  124. }
  125. /**
  126. * @name updateAchat($pAchat)
  127. * @param AchatVO
  128. * @return integer
  129. * @desc Met ŕ jour un achat
  130. */
  131. private function updateAchat($pAchat) {
  132. $lAchat = $this->get($pAchat->getId());
  133. return $this->update($lAchat,$pAchat,$pAchat->getId()->getIdAchat());
  134. }
  135. /**
  136. * @name update($pAchat)
  137. * @param AchatVO
  138. * @return integer
  139. * @desc Met ŕ jour une réservation
  140. */
  141. private function update($pAchatActuel,$pNouvelAchat,$pIdOperation) {
  142. // Récupération de l'opération
  143. $lOperationService = new OperationService();
  144. $lOperation = $lOperationService->get($pIdOperation);
  145. switch($lOperation->getTypePaiement()) {
  146. case 0: // Une réservation
  147. // Mise ŕ jour du détail
  148. $lTotal = $this->updateProduitReservationAchat($pAchatActuel,$pNouvelAchat,$pIdOperation);
  149. $lIdOperationSolidaire = $this->insertProduitAchatSolidaire($pNouvelAchat);
  150. if($lTotal < 0) {
  151. // Mise ŕ jour de l'opération de réservation en achat
  152. $lOperation->setMontant($lTotal);
  153. $lOperation->setTypePaiement(7);
  154. $lIdOperation = $lOperationService->set($lOperation);
  155. // Operation sur le compte Zeybu
  156. $lOperationZeybu = new OperationVO();
  157. $lOperationZeybu->setIdCompte(-1);
  158. $lOperationZeybu->setMontant($lTotal * -1);
  159. $lOperationZeybu->setLibelle("Marché N°" . $pNouvelAchat->getId()->getIdCommande());
  160. $lOperationZeybu->setTypePaiement(7);
  161. $lOperationZeybu->setTypePaiementChampComplementaire($lIdOperation);
  162. $lOperationZeybu->setIdCommande($pNouvelAchat->getId()->getIdCommande());
  163. $lIdOperationZeybu = $lOperationService->set($lOperationZeybu);
  164. $lOperation->setTypePaiementChampComplementaire($lIdOperationZeybu);
  165. $lOperationService->set($lOperation);
  166. } else {
  167. // Mise ŕ jour de l'opération de réservation en annulation
  168. //$lOperation->setTypePaiement(16);
  169. $lOperationService->delete($lOperation);
  170. }
  171. break;
  172. case 7: // Achat
  173. $lTotal = $this->updateProduitAchat($pAchatActuel,$pNouvelAchat,$pIdOperation);
  174. if($lTotal < 0) {
  175. // Mise ŕ jour de l'opération d'achat
  176. $lOperation->setMontant($lTotal);
  177. $lOperationService->set($lOperation);
  178. $lOperationZeybu = $lOperationService->get($lOperation->getTypePaiementChampComplementaire());
  179. $lOperationZeybu->setMontant($lTotal * -1);
  180. $lOperationService->set($lOperationZeybu);
  181. } else {
  182. // Mise ŕ jour de l'opération en annulation
  183. //$lOperation->setTypePaiement(18);
  184. $lOperationService->delete($lOperation->getId());
  185. $lOperationZeybu = $lOperationService->get($lOperation->getTypePaiementChampComplementaire());
  186. //$lOperationZeybu->setTypePaiement(18);
  187. $lOperationService->delete($lOperationZeybu->getId());
  188. }
  189. break;
  190. case 8: // Achat Solidaire
  191. $lTotalSolidaire = $this->updateProduitAchatSolidaire($pAchatActuel,$pNouvelAchat,$pIdOperation);
  192. if($lTotalSolidaire < 0) {
  193. // Mise ŕ jour de l'opération d'achat
  194. $lOperation->setMontant($lTotalSolidaire);
  195. $lOperationService->set($lOperation);
  196. $lOperationZeybu = $lOperationService->get($lOperation->getTypePaiementChampComplementaire());
  197. $lOperationZeybu->setMontant($lTotalSolidaire * -1);
  198. $lOperationService->set($lOperationZeybu);
  199. } else {
  200. // Mise ŕ jour de l'opération en annulation
  201. //$lOperation->setTypePaiement(20);
  202. $lOperationService->delete($lOperation->getId());
  203. $lOperationZeybu = $lOperationService->get($lOperation->getTypePaiementChampComplementaire());
  204. //$lOperationZeybu->setTypePaiement(20);
  205. $lOperationService->delete($lOperationZeybu->getId());
  206. }
  207. break;
  208. }
  209. return true;
  210. }
  211. /**
  212. * @name updateProduitAchat($pAchatActuel,$pNouvelAchat,$pIdOperation)
  213. * @param AchatVO
  214. * @param AchatVO
  215. * @param integer
  216. * @return decimal(10,2)
  217. * @desc Met ŕ jour les produits
  218. */
  219. private function updateProduitAchat($pAchatActuel,$pNouvelAchat,$pIdOperation) {
  220. $lTotal = 0;
  221. $lStockService = new StockService();
  222. $lDetailOperationService = new DetailOperationService();
  223. foreach($pAchatActuel->getDetailAchat() as $lAchatActuelle) {
  224. $lTestUpdate = false;
  225. foreach($pNouvelAchat->getDetailAchat() as $lAchatNouvelle) {
  226. if($lAchatActuelle->getIdDetailCommande() == $lAchatNouvelle->getIdDetailCommande()) {
  227. $lTotal += $lAchatNouvelle->getMontant();
  228. // Maj du stock
  229. $lStock = new StockVO();
  230. $lStock->setId($lAchatActuelle->getId()->getIdStock());
  231. $lStock->setQuantite($lAchatNouvelle->getQuantite());
  232. $lStock->setType(1);
  233. $lStock->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  234. $lStock->setIdDetailCommande($lAchatActuelle->getIdDetailCommande());
  235. $lStock->setIdOperation($pIdOperation);
  236. $lStockService->set($lStock);
  237. // Maj du détail Opération
  238. $lDetailOperation = new DetailOperationVO();
  239. $lDetailOperation->setId($lAchatActuelle->getId()->getIdDetailOperation());
  240. $lDetailOperation->setIdOperation($pIdOperation);
  241. $lDetailOperation->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  242. $lDetailOperation->setMontant($lAchatNouvelle->getMontant());
  243. $lDetailOperation->setLibelle("Marché N°" . $pNouvelAchat->getId()->getIdCommande());
  244. $lDetailOperation->setTypePaiement(7);
  245. $lDetailOperation->setIdDetailCommande($lAchatActuelle->getIdDetailCommande());
  246. $lDetailOperationService->set($lDetailOperation);
  247. $lTestUpdate = true;
  248. }
  249. }
  250. if(!$lTestUpdate) {
  251. // Suppression du stock et du detail operation
  252. $lStockService->delete($lAchatActuelle->getId()->getIdStock());
  253. $lDetailOperationService->delete($lAchatActuelle->getId()->getIdDetailOperation());
  254. }
  255. }
  256. foreach($pNouvelAchat->getDetailAchat() as $lAchatNouvelle) {
  257. $lTestInsert = true;
  258. foreach($pAchatActuel->getDetailAchat() as $lAchatActuelle) {
  259. if($lAchatActuelle->getIdDetailCommande() == $lAchatNouvelle->getIdDetailCommande()) {
  260. $lTestInsert = false;
  261. }
  262. }
  263. if($lTestInsert) {
  264. $lTotal += $lAchatNouvelle->getMontant();
  265. // Ajout du stock
  266. $lStock = new StockVO();
  267. $lStock->setQuantite($lAchatNouvelle->getQuantite());
  268. $lStock->setType(1);
  269. $lStock->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  270. $lStock->setIdDetailCommande($lAchatNouvelle->getIdDetailCommande());
  271. $lStock->setIdOperation($pIdOperation);
  272. $lStockService->set($lStock);
  273. // Ajout du détail Opération
  274. $lDetailOperation = new DetailOperationVO();
  275. $lDetailOperation->setIdOperation($pIdOperation);
  276. $lDetailOperation->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  277. $lDetailOperation->setMontant($lAchatNouvelle->getMontant());
  278. $lDetailOperation->setLibelle("Marché N°" . $pNouvelAchat->getId()->getIdCommande());
  279. $lDetailOperation->setTypePaiement(7);
  280. $lDetailOperation->setIdDetailCommande($lAchatNouvelle->getIdDetailCommande());
  281. $lDetailOperationService->set($lDetailOperation);
  282. }
  283. }
  284. return $lTotal;
  285. }
  286. /**
  287. * @name updateProduitReservationAchat($pAchatActuel,$pNouvelAchat,$pIdOperation)
  288. * @param AchatVO
  289. * @param AchatVO
  290. * @param integer
  291. * @return decimal(10,2)
  292. * @desc Met ŕ jour les produits
  293. */
  294. private function updateProduitReservationAchat($pAchatActuel,$pNouvelAchat,$pIdOperation) {
  295. $lTotal = 0;
  296. $lStockService = new StockService();
  297. $lDetailOperationService = new DetailOperationService();
  298. foreach($pAchatActuel->getDetailReservation() as $lAchatActuelle) {
  299. $lTestUpdate = false;
  300. foreach($pNouvelAchat->getDetailAchat() as $lAchatNouvelle) {
  301. if($lAchatActuelle->getIdDetailCommande() == $lAchatNouvelle->getIdDetailCommande()) {
  302. $lTotal += $lAchatNouvelle->getMontant();
  303. // Maj du stock
  304. $lStock = new StockVO();
  305. //$lStock->setId($lAchatActuelle->getId()->getIdStock());
  306. $lStock->setQuantite($lAchatNouvelle->getQuantite());
  307. $lStock->setType(1);
  308. $lStock->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  309. $lStock->setIdDetailCommande($lAchatActuelle->getIdDetailCommande());
  310. $lStock->setIdOperation($pIdOperation);
  311. $lStockService->set($lStock);
  312. // Maj du détail Opération
  313. $lDetailOperation = new DetailOperationVO();
  314. //$lDetailOperation->setId($lAchatActuelle->getId()->getIdDetailOperation());
  315. $lDetailOperation->setIdOperation($pIdOperation);
  316. $lDetailOperation->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  317. $lDetailOperation->setMontant($lAchatNouvelle->getMontant());
  318. $lDetailOperation->setLibelle("Marché N°" . $pNouvelAchat->getId()->getIdCommande());
  319. $lDetailOperation->setTypePaiement(7);
  320. $lDetailOperation->setIdDetailCommande($lAchatActuelle->getIdDetailCommande());
  321. $lDetailOperationService->set($lDetailOperation);
  322. $lTestUpdate = true;
  323. }
  324. }
  325. if(!$lTestUpdate) {
  326. // Suppression du stock et du detail operation
  327. $lStockService->delete($lAchatActuelle->getId()->getIdStock());
  328. $lDetailOperationService->delete($lAchatActuelle->getId()->getIdDetailOperation());
  329. }
  330. }
  331. foreach($pNouvelAchat->getDetailAchat() as $lAchatNouvelle) {
  332. $lTestInsert = true;
  333. foreach($pAchatActuel->getDetailReservation() as $lAchatActuelle) {
  334. if($lAchatActuelle->getIdDetailCommande() == $lAchatNouvelle->getIdDetailCommande()) {
  335. $lTestInsert = false;
  336. }
  337. }
  338. if($lTestInsert) {
  339. $lTotal += $lAchatNouvelle->getMontant();
  340. // Ajout du stock
  341. $lStock = new StockVO();
  342. $lStock->setQuantite($lAchatNouvelle->getQuantite());
  343. $lStock->setType(1);
  344. $lStock->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  345. $lStock->setIdDetailCommande($lAchatNouvelle->getIdDetailCommande());
  346. $lStock->setIdOperation($pIdOperation);
  347. $lStockService->set($lStock);
  348. // Ajout du détail Opération
  349. $lDetailOperation = new DetailOperationVO();
  350. $lDetailOperation->setIdOperation($pIdOperation);
  351. $lDetailOperation->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  352. $lDetailOperation->setMontant($lAchatNouvelle->getMontant());
  353. $lDetailOperation->setLibelle("Marché N°" . $pNouvelAchat->getId()->getIdCommande());
  354. $lDetailOperation->setTypePaiement(7);
  355. $lDetailOperation->setIdDetailCommande($lAchatNouvelle->getIdDetailCommande());
  356. $lDetailOperationService->set($lDetailOperation);
  357. }
  358. }
  359. return $lTotal;
  360. }
  361. /**
  362. * @name updateProduitAchatSolidaire($pAchatActuel,$pNouvelAchat,$pIdOperation)
  363. * @param AchatVO
  364. * @param AchatVO
  365. * @param integer
  366. * @return decimal(10,2)
  367. * @desc Met ŕ jour les produits solidaire
  368. */
  369. private function updateProduitAchatSolidaire($pAchatActuel,$pNouvelAchat,$pIdOperation) {
  370. $lTotalSolidaire = 0;
  371. $lStockService = new StockService();
  372. $lDetailOperationService = new DetailOperationService();
  373. foreach($pAchatActuel->getDetailAchatSolidaire() as $lAchatActuelle) {
  374. $lTestUpdate = false;
  375. foreach($pNouvelAchat->getDetailAchatSolidaire() as $lAchatNouvelle) {
  376. if($lAchatActuelle->getIdDetailCommande() == $lAchatNouvelle->getIdDetailCommande()) {
  377. $lTotalSolidaire += $lAchatNouvelle->getMontant();
  378. // Maj du stock
  379. $lStock = new StockVO();
  380. $lStock->setId($lAchatActuelle->getId()->getIdStock());
  381. $lStock->setQuantite($lAchatNouvelle->getQuantite());
  382. $lStock->setType(2);
  383. $lStock->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  384. $lStock->setIdDetailCommande($lAchatActuelle->getIdDetailCommande());
  385. $lStock->setIdOperation($pIdOperation);
  386. $lStockService->set($lStock);
  387. // Maj de la qté produit dans le stock solidaire
  388. $lStockSolidaireActuel = $lStockService->selectSolidaireByIdNomProduitUnite($lAchatNouvelle->getIdNomProduit(),$lAchatNouvelle->getUnite());
  389. $lStockSolidaireActuel = $lStockSolidaireActuel[0];
  390. $lStockSolidaire = new StockSolidaireVO();
  391. if(!is_null($lStockSolidaireActuel->getId())) {
  392. $lStockSolidaire->setId($lStockSolidaireActuel->getId());
  393. $lStockSolidaire->setQuantite($lStockSolidaireActuel->getQuantite() + $lAchatNouvelle->getQuantite() - $lAchatActuelle->getQuantite());
  394. $lStockSolidaire->setIdNomProduit($lAchatNouvelle->getIdNomProduit());
  395. $lStockSolidaire->setUnite($lAchatNouvelle->getUnite());
  396. $lStockService->setSolidaire($lStockSolidaire);
  397. }
  398. // Maj du détail Opération
  399. $lDetailOperation = new DetailOperationVO();
  400. $lDetailOperation->setId($lAchatActuelle->getId()->getIdDetailOperation());
  401. $lDetailOperation->setIdOperation($pIdOperation);
  402. $lDetailOperation->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  403. $lDetailOperation->setMontant($lAchatNouvelle->getMontant());
  404. $lDetailOperation->setLibelle("Marché Solidaire N°" . $pNouvelAchat->getId()->getIdCommande());
  405. $lDetailOperation->setTypePaiement(8);
  406. $lDetailOperation->setIdDetailCommande($lAchatActuelle->getIdDetailCommande());
  407. $lDetailOperationService->set($lDetailOperation);
  408. $lTestUpdate = true;
  409. }
  410. }
  411. if(!$lTestUpdate) {
  412. // Suppression du stock et du detail operation
  413. $lStockService->delete($lAchatActuelle->getId()->getIdStock());
  414. $lDetailOperationService->delete($lAchatActuelle->getId()->getIdDetailOperation());
  415. // Maj de la qté produit dans le stock solidaire
  416. $lStockSolidaireActuel = $lStockService->selectSolidaireByIdNomProduitUnite($lAchatActuelle->getIdNomProduit(),$lAchatActuelle->getUnite());
  417. $lStockSolidaireActuel = $lStockSolidaireActuel[0];
  418. // $lDetail = DetailMarcheViewManager::selectByLot($lAchatActuelle->getId()->getIdDetailOperation());
  419. // Maj de la qté produit dans le stock solidaire
  420. /* $lStock = $lStockService->get($lDetail->getId()->getIdStock());
  421. $lDetailMarche = DetailMarcheViewManager::selectByLot($lStock->getIdDetailCommande());
  422. $lDetailMarche = $lDetailMarche[0]; */
  423. $lStockSolidaire = new StockSolidaireVO();
  424. if(!is_null($lStockSolidaireActuel->getId())) {
  425. $lStockSolidaire->setId($lStockSolidaireActuel->getId());
  426. $lStockSolidaire->setQuantite($lStockSolidaireActuel->getQuantite() - $lAchatActuelle->getQuantite());
  427. $lStockSolidaire->setIdNomProduit($lStockSolidaireActuel->getProIdNomProduit());
  428. $lStockSolidaire->setUnite($lStockSolidaireActuel->getProUniteMesure());
  429. $lStockService->setSolidaire($lStockSolidaire);
  430. }
  431. }
  432. }
  433. foreach($pNouvelAchat->getDetailAchatSolidaire() as $lAchatNouvelle) {
  434. $lTestInsert = true;
  435. foreach($pAchatActuel->getDetailAchatSolidaire() as $lAchatActuelle) {
  436. if($lAchatActuelle->getIdDetailCommande() == $lAchatNouvelle->getIdDetailCommande()) {
  437. $lTestInsert = false;
  438. }
  439. }
  440. if($lTestInsert) {
  441. $lTotalSolidaire += $lAchatNouvelle->getMontant();
  442. // Ajout du stock
  443. $lStock = new StockVO();
  444. $lStock->setQuantite($lAchatNouvelle->getQuantite());
  445. $lStock->setType(2);
  446. $lStock->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  447. $lStock->setIdDetailCommande($lAchatNouvelle->getIdDetailCommande());
  448. $lStock->setIdOperation($pIdOperation);
  449. $lStockService->set($lStock);
  450. // Suppression de la qté produit dans le stock solidaire
  451. $lStockSolidaireActuel = $lStockService->selectSolidaireByIdNomProduitUnite($lAchatNouvelle->getIdNomProduit(),$lAchatNouvelle->getUnite());
  452. $lStockSolidaireActuel = $lStockSolidaireActuel[0];
  453. $lStockSolidaire = new StockSolidaireVO();
  454. if(!is_null($lStockSolidaireActuel->getId())) {
  455. $lStockSolidaire->setId($lStockSolidaireActuel->getId());
  456. $lStockSolidaire->setQuantite($lStockSolidaireActuel->getQuantite() + $lAchatNouvelle->getQuantite());
  457. $lStockSolidaire->setIdNomProduit($lAchatNouvelle->getIdNomProduit());
  458. $lStockSolidaire->setUnite($lAchatNouvelle->getUnite());
  459. $lStockService->setSolidaire($lStockSolidaire);
  460. }
  461. // Ajout du détail Opération
  462. $lDetailOperation = new DetailOperationVO();
  463. $lDetailOperation->setIdOperation($pIdOperation);
  464. $lDetailOperation->setIdCompte($pNouvelAchat->getId()->getIdCompte());
  465. $lDetailOperation->setMontant($lAchatNouvelle->getMontant());
  466. $lDetailOperation->setLibelle("Marché Solidaire N°" . $pNouvelAchat->getId()->getIdCommande());
  467. $lDetailOperation->setTypePaiement(8);
  468. $lDetailOperation->setIdDetailCommande($lAchatNouvelle->getIdDetailCommande());
  469. $lDetailOperationService->set($lDetailOperation);
  470. }
  471. }
  472. return $lTotalSolidaire;
  473. }
  474. /**
  475. * @name insertProduitAchatSolidaire($pAchat)
  476. * @param AchatVO
  477. * @return decimal(10,2)
  478. * @desc Ajoute les produits solidaire
  479. */
  480. private function insertProduitAchatSolidaire($pAchat) {
  481. $lTotalSolidaire = 0;
  482. foreach($pAchat->getDetailAchatSolidaire() as $lProduit) {
  483. $lTotalSolidaire += $lProduit->getMontant();
  484. }
  485. // L'operation Solidaire
  486. $lOperationSolidaire = new OperationVO();
  487. $lOperationSolidaire->setIdCompte($pAchat->getId()->getIdCompte());
  488. $lOperationSolidaire->setMontant($lTotalSolidaire);
  489. $lOperationSolidaire->setLibelle("Marché Solidaire N°" . $pAchat->getId()->getIdCommande());
  490. $lOperationSolidaire->setTypePaiement(8);
  491. $lOperationSolidaire->setIdCommande($pAchat->getId()->getIdCommande());
  492. $lOperationService = new OperationService();
  493. if($lTotalSolidaire < 0) {
  494. $lIdOperationSolidaire = $lOperationService->set($lOperationSolidaire);
  495. // Ajout Détail Operation Solidaire
  496. $lStockService = new StockService();
  497. $lDetailOperationService = new DetailOperationService();
  498. foreach($pAchat->getDetailAchatSolidaire() as $lProduit) {
  499. // Ajout du stock
  500. $lStock = new StockVO();
  501. $lStock->setQuantite($lProduit->getQuantite());
  502. $lStock->setType(2);
  503. $lStock->setIdCompte($pAchat->getId()->getIdCompte());
  504. $lStock->setIdDetailCommande($lProduit->getIdDetailCommande());
  505. $lStock->setIdOperation($lIdOperationSolidaire);
  506. $lStockService->set($lStock);
  507. // Suppression de la qté produit dans le stock solidaire
  508. $lStockSolidaireActuel = $lStockService->selectSolidaireByIdNomProduitUnite($lProduit->getIdNomProduit(),$lProduit->getUnite());
  509. $lStockSolidaireActuel = $lStockSolidaireActuel[0];
  510. $lStockSolidaire = new StockSolidaireVO();
  511. if(!is_null($lStockSolidaireActuel->getId())) {
  512. $lStockSolidaire->setId($lStockSolidaireActuel->getId());
  513. $lStockSolidaire->setQuantite($lStockSolidaireActuel->getQuantite() + $lProduit->getQuantite());
  514. $lStockSolidaire->setIdNomProduit($lProduit->getIdNomProduit());
  515. $lStockSolidaire->setUnite($lProduit->getUnite());
  516. $lStockService->setSolidaire($lStockSolidaire);
  517. }
  518. // Ajout du détail de l'operation
  519. $lDetailOperation = new DetailOperationVO();
  520. $lDetailOperation->setIdOperation($lIdOperationSolidaire);
  521. $lDetailOperation->setIdCompte($pAchat->getId()->getIdCompte());
  522. $lDetailOperation->setMontant($lProduit->getMontant());
  523. $lDetailOperation->setLibelle("Marché Solidaire N°" . $pAchat->getId()->getIdCommande());
  524. $lDetailOperation->setTypePaiement(8);
  525. $lDetailOperation->setIdDetailCommande($lProduit->getIdDetailCommande());
  526. $lDetailOperationService->set($lDetailOperation);
  527. }
  528. // Operation sur le compte Zeybu
  529. $lOperationZeybu = new OperationVO();
  530. $lOperationZeybu->setIdCompte(-1);
  531. $lOperationZeybu->setMontant($lTotalSolidaire * -1);
  532. $lOperationZeybu->setLibelle("Marché Solidaire N°" . $pAchat->getId()->getIdCommande());
  533. $lOperationZeybu->setTypePaiement(8);
  534. $lOperationZeybu->setTypePaiementChampComplementaire($lIdOperationSolidaire);
  535. $lOperationZeybu->setIdCommande($pAchat->getId()->getIdCommande());
  536. $lIdOperationZeybu = $lOperationService->set($lOperationZeybu);
  537. $lOperationSolidaire->setTypePaiementChampComplementaire($lIdOperationZeybu);
  538. $lOperationService->set($lOperationSolidaire);
  539. return $lIdOperationSolidaire;
  540. }
  541. return null;
  542. }
  543. /**
  544. * @name delete($pId)
  545. * @param IdAchatVO
  546. * @desc Supprime un achat
  547. */
  548. public function delete($pId) {
  549. $lAchatValid = new AchatValid();
  550. if(!is_null($pId) && $lAchatValid->select($pId)) {
  551. $lAchatActuel = $this->get($pId);
  552. // Suppression de l'opération
  553. $lOperationService = new OperationService();
  554. $lIdOperationZeybu = $lOperationService->get($pId->getIdAchat())->getTypePaiementChampComplementaire();
  555. $lOperationService->delete($pId->getIdAchat());
  556. $lOperationService->delete($lIdOperationZeybu);
  557. $lStockService = new StockService();
  558. $lDetailOperationService = new DetailOperationService();
  559. foreach($lAchatActuel->getDetailAchat() as $lDetail) {
  560. // Suppression du stock et du detail operation
  561. $lStockService->delete($lDetail->getId()->getIdStock());
  562. $lDetailOperationService->delete($lDetail->getId()->getIdDetailOperation());
  563. }
  564. foreach($lAchatActuel->getDetailAchatSolidaire() as $lDetail) {
  565. // Suppression du stock et du detail operation
  566. $lStockService->delete($lDetail->getId()->getIdStock());
  567. $lDetailOperationService->delete($lDetail->getId()->getIdDetailOperation());
  568. $lStock = $lStockService->get($lDetail->getId()->getIdStock());
  569. $lDetailMarche = DetailMarcheViewManager::selectByLot($lStock->getIdDetailCommande());
  570. $lDetailMarche = $lDetailMarche[0];
  571. // Maj de la qté produit dans le stock solidaire
  572. $lStockSolidaireActuel = $lStockService->selectSolidaireByIdNomProduitUnite($lDetailMarche->getProIdNomProduit(),$lDetailMarche->getProUniteMesure());
  573. $lStockSolidaireActuel = $lStockSolidaireActuel[0];
  574. $lStockSolidaire = new StockSolidaireVO();
  575. if(!is_null($lStockSolidaireActuel->getId())) {
  576. $lStockSolidaire->setId($lStockSolidaireActuel->getId());
  577. $lStockSolidaire->setQuantite($lStockSolidaireActuel->getQuantite() - $lDetail->getQuantite());
  578. $lStockSolidaire->setIdNomProduit($lDetailMarche->getProIdNomProduit());
  579. $lStockSolidaire->setUnite($lDetailMarche->getProUniteMesure());
  580. $lStockService->setSolidaire($lStockSolidaire);
  581. }
  582. }
  583. }
  584. return false;
  585. }
  586. /**
  587. * @name get($pId)
  588. * @param integer
  589. * @return AchatVO
  590. * @desc Retourne une liste d'achat
  591. */
  592. public function get($pId = null) {
  593. $lAchatValid = new AchatValid();
  594. if(!is_null($pId) && $lAchatValid->select($pId)) {
  595. return $this->select($pId);
  596. }
  597. return false;
  598. }
  599. /**
  600. * @name getAll($pId)
  601. * @param integer
  602. * @return array(AchatVO)
  603. * @desc Retourne une liste d'achat
  604. */
  605. public function getAll($pId = null) {
  606. $lAchatValid = new AchatValid();
  607. if(!is_null($pId) && $lAchatValid->selectAll($pId)) {
  608. return $this->selectAll($pId);
  609. }
  610. return false;
  611. }
  612. /**
  613. * @name selectOperationAchat($pId)
  614. * @param IdReservation
  615. * @return array(OperationVO)
  616. * @desc Retourne une liste d'operation
  617. */
  618. private function selectOperationAchat($pId) {
  619. // ORDER BY date -> récupčre la derničre operation en lien avec la commande
  620. return OperationManager::recherche(
  621. array(OperationManager::CHAMP_OPERATION_TYPE_PAIEMENT,OperationManager::CHAMP_OPERATION_ID_COMPTE,OperationManager::CHAMP_OPERATION_ID_COMMANDE),
  622. array('in','=','='),
  623. array(array(7,8), $pId->getIdCompte(),$pId->getIdCommande()),
  624. array(OperationManager::CHAMP_OPERATION_TYPE_PAIEMENT,OperationManager::CHAMP_OPERATION_DATE),
  625. array('ASC','DESC'));
  626. }
  627. /**
  628. * @name selectAll($pId)
  629. * @param IdReservation
  630. * @return array(AchatVO)
  631. * @desc Retourne les achats du compte pour un marché
  632. */
  633. private function selectAll($pId) {
  634. $lOperations = $this->selectOperationAchat($pId);
  635. $lAchats = array();
  636. if(!is_null($lOperations[0]->getId())) {
  637. foreach($lOperations as $lOperation) {
  638. $pId->setIdAchat($lOperation->getId());
  639. array_push($lAchats,$this->select($pId));
  640. }
  641. }
  642. return $lAchats;
  643. }
  644. /**
  645. * @name select($pId)
  646. * @param IdAchatVO
  647. * @return AchatVO
  648. * @desc Retourne une Reservation
  649. */
  650. private function select($pId) {
  651. $lOperation = OperationManager::select($pId->getIdAchat());
  652. $lAchat = new AchatVO();
  653. $lAchat->getId()->setIdCompte($pId->getIdCompte());
  654. $lAchat->getId()->setIdCommande($pId->getIdCommande());
  655. $lAchat->getId()->setIdAchat($pId->getIdAchat());
  656. // Recherche du détail de la reservation
  657. switch($lOperation->getTypePaiement()) {
  658. case 7: // Un achat
  659. $lDetailsAchat = AchatDetailViewManager::select($lOperation->getId());
  660. foreach($lDetailsAchat as $lDetail) {
  661. if(!is_null($lDetail->getStoId())) {
  662. $lDetailAchat = new DetailReservationVO();
  663. $lDetailAchat->getId()->setIdStock($lDetail->getStoId());
  664. $lDetailAchat->getId()->setIdDetailOperation($lDetail->getDopeId());
  665. $lDetailAchat->setIdDetailCommande($lDetail->getStoIdDetailCommande());
  666. $lDetailAchat->setMontant($lDetail->getDopeMontant());
  667. $lDetailAchat->setQuantite($lDetail->getStoQuantite());
  668. $lDetailAchat->setIdProduit($lDetail->getDcomIdProduit());
  669. $lAchat->addDetailAchat($lDetailAchat);
  670. }
  671. }
  672. $lAchat->setTotal($lOperation->getMontant());
  673. break;
  674. case 8: // Achat Solidaire
  675. $lDetailsAchat = AchatDetailSolidaireViewManager::select($lOperation->getId());
  676. foreach($lDetailsAchat as $lDetail) {
  677. if(!is_null($lDetail->getStoId())) {
  678. $lDetailAchat = new DetailReservationVO();
  679. $lDetailAchat->getId()->setIdStock($lDetail->getStoId());
  680. $lDetailAchat->getId()->setIdDetailOperation($lDetail->getDopeId());
  681. $lDetailAchat->setIdDetailCommande($lDetail->getStoIdDetailCommande());
  682. $lDetailAchat->setMontant($lDetail->getDopeMontant());
  683. $lDetailAchat->setQuantite($lDetail->getStoQuantite());
  684. $lDetailAchat->setIdProduit($lDetail->getDcomIdProduit());
  685. $lAchat->addDetailAchatSolidaire($lDetailAchat);
  686. }
  687. }
  688. $lAchat->setTotalSolidaire($lOperation->getMontant());
  689. break;
  690. }
  691. return $lAchat;
  692. }
  693. /**
  694. * @name selectMarcheAll($pIdMarche)
  695. * @param IdMarche
  696. * @return
  697. * @desc Retourne une Reservation
  698. */
  699. /*public function selectMarcheAll($pIdMarche) {
  700. // Initialisation du Logger
  701. $lLogger = &Log::singleton('file', CHEMIN_FICHIER_LOGS);
  702. $lLogger->setMask(Log::MAX(LOG_LEVEL));
  703. $lRequete =
  704. "SELECT
  705. ADHERENT." . AdherentManager::CHAMP_ADHERENT_ID .
  706. ", ADHERENT." . AdherentManager::CHAMP_ADHERENT_NUMERO .
  707. ", ADHERENT." . AdherentManager::CHAMP_ADHERENT_ID_COMPTE .
  708. ", ADHERENT." . CompteManager::CHAMP_COMPTE_LABEL .
  709. ", ADHERENT." . AdherentManager::CHAMP_ADHERENT_NOM .
  710. ", ADHERENT." . AdherentManager::CHAMP_ADHERENT_PRENOM .
  711. ", OPERATION." . OperationManager::CHAMP_OPERATION_MONTANT . "_reservation" .
  712. ", OPERATION." . OperationManager::CHAMP_OPERATION_MONTANT . "_achat
  713. FROM " . AdherentViewManager::VUE_ADHERENT . " AS ADHERENT
  714. LEFT JOIN (
  715. SELECT "
  716. . AdherentManager::CHAMP_ADHERENT_ID .
  717. ", RESERVATION." . OperationManager::CHAMP_OPERATION_MONTANT . " AS " . OperationManager::CHAMP_OPERATION_MONTANT . "_reservation" .
  718. ", ACHAT." . OperationManager::CHAMP_OPERATION_MONTANT . " AS " . OperationManager::CHAMP_OPERATION_MONTANT . "_achat
  719. FROM " . AdherentViewManager::VUE_ADHERENT . "
  720. LEFT JOIN (
  721. SELECT "
  722. . OperationManager::CHAMP_OPERATION_ID_COMMANDE .
  723. "," . OperationManager::CHAMP_OPERATION_MONTANT .
  724. "," . OperationManager::CHAMP_OPERATION_ID_COMPTE . "
  725. FROM " . OperationManager::TABLE_OPERATION . "
  726. WHERE " . OperationManager::CHAMP_OPERATION_TYPE_PAIEMENT . " = 0) AS RESERVATION
  727. ON RESERVATION." . OperationManager::CHAMP_OPERATION_ID_COMPTE . " = " . AdherentViewManager::VUE_ADHERENT . "." . AdherentManager::CHAMP_ADHERENT_ID_COMPTE . "
  728. LEFT JOIN (
  729. SELECT "
  730. . OperationManager::CHAMP_OPERATION_ID_COMMANDE .
  731. ", sum(" . OperationManager::CHAMP_OPERATION_MONTANT . ") AS " . OperationManager::CHAMP_OPERATION_MONTANT .
  732. "," . OperationManager::CHAMP_OPERATION_ID_COMPTE . "
  733. FROM " . OperationManager::TABLE_OPERATION . "
  734. WHERE " . OperationManager::CHAMP_OPERATION_TYPE_PAIEMENT . " in (7,8)
  735. GROUP BY " . OperationManager::CHAMP_OPERATION_ID_COMMANDE . "," . OperationManager::CHAMP_OPERATION_ID_COMPTE . ") AS ACHAT
  736. ON ACHAT." . OperationManager::CHAMP_OPERATION_ID_COMPTE . " = " . AdherentViewManager::VUE_ADHERENT . "." . AdherentManager::CHAMP_ADHERENT_ID_COMPTE . "
  737. WHERE RESERVATION." . OperationManager::CHAMP_OPERATION_ID_COMMANDE . " = " . StringUtils::securiser($pIdMarche) . "
  738. OR ACHAT." . OperationManager::CHAMP_OPERATION_ID_COMMANDE . " = " . StringUtils::securiser($pIdMarche) . "
  739. GROUP BY " . AdherentViewManager::VUE_ADHERENT . "." . AdherentManager::CHAMP_ADHERENT_ID . ") AS OPERATION
  740. ON ADHERENT." . AdherentManager::CHAMP_ADHERENT_ID . " = OPERATION." . AdherentManager::CHAMP_ADHERENT_ID;
  741. $lLogger->log("Execution de la requete : " . $lRequete,PEAR_LOG_DEBUG); // Maj des logs
  742. $lSql = Dbutils::executerRequete($lRequete);
  743. $lListeAchatEtReservation = array();
  744. if( mysql_num_rows($lSql) > 0 ) {
  745. while ($lLigne = mysql_fetch_assoc($lSql)) {
  746. array_push($lListeAchatEtReservation,
  747. $this->remplirAchatEtReservation(
  748. $lLigne[AdherentManager::CHAMP_ADHERENT_ID],
  749. $lLigne[AdherentManager::CHAMP_ADHERENT_NUMERO],
  750. $lLigne[AdherentManager::CHAMP_ADHERENT_ID_COMPTE],
  751. $lLigne[CompteManager::CHAMP_COMPTE_LABEL],
  752. $lLigne[AdherentManager::CHAMP_ADHERENT_NOM],
  753. $lLigne[AdherentManager::CHAMP_ADHERENT_PRENOM],
  754. $lLigne[OperationManager::CHAMP_OPERATION_MONTANT . "_reservation"],
  755. $lLigne[OperationManager::CHAMP_OPERATION_MONTANT . "_achat"]));
  756. }
  757. } else {
  758. $lListeAchatEtReservation[0] = new ListeAchatReservationVO();
  759. }
  760. return $lListeAchatEtReservation;
  761. }
  762. */
  763. /**
  764. * @name remplirAchatEtReservation($pAdhId, $pAdhNumero, $pAdhIdCompte, $pCptLabel, $pAdhNom, $pAdhPrenom, $pOpeMontantReservation, $pOpeMontantAchat)
  765. * @param int(11)
  766. * @param int(11)
  767. * @param int(11)
  768. * @param varchar(30)
  769. * @param varchar(50)
  770. * @param varchar(50)
  771. * @param decimal(10,2)
  772. * @param decimal(10,2)
  773. * @return ListeAchatReservationVO
  774. * @desc Retourne une ListeAchatReservationVO remplie
  775. */
  776. /*private function remplirAchatEtReservation($pAdhId, $pAdhNumero, $pAdhIdCompte, $pCptLabel, $pAdhNom, $pAdhPrenom, $pOpeMontantReservation, $pOpeMontantAchat) {
  777. $lListeAchatReservation = new ListeAchatReservationVO();
  778. $lListeAchatReservation->setAdhId($pAdhId);
  779. $lListeAchatReservation->setAdhNumero($pAdhNumero);
  780. $lListeAchatReservation->setAdhIdCompte($pAdhIdCompte);
  781. $lListeAchatReservation->setCptLabel($pCptLabel);
  782. $lListeAchatReservation->setAdhNom($pAdhNom);
  783. $lListeAchatReservation->setAdhPrenom($pAdhPrenom);
  784. $lListeAchatReservation->setOpeMontantReservation($pOpeMontantReservation);
  785. $lListeAchatReservation->setOpeMontantAchat($pOpeMontantAchat);
  786. return $lListeAchatReservation;
  787. }*/
  788. }
  789. ?>