Advertisement
Edumorim

Untitled

Feb 14th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.17 KB | None | 0 0
  1. <?php
  2.  
  3.  
  4. namespace Comanda\Services;
  5.  
  6.  
  7. use Comanda\Models\Order;
  8. use Comanda\Repositories\OrderRepository;
  9. use Comanda\Repositories\ProdutoRepository;
  10. use Comanda\Repositories\TamanhoRepository;
  11. use Comanda\Repositories\IngredienteRepository;
  12. use Comanda\Repositories\IngrediextraRepository;
  13. use Comanda\Repositories\MesaRepository;
  14. use Illuminate\Support\Facades\DB;
  15.  
  16.  
  17. class OrderService
  18. {
  19.  
  20.  
  21. private $mesaRepository;
  22. /**
  23. * @var OrderRepository
  24. */
  25. private $orderRepository;
  26. /**
  27. * @var ProductRepository
  28. */
  29. private $tamanhoRepository;
  30. /**
  31. * @var tamanhoRepository
  32. */
  33. private $IngredienteRepository;
  34. /**
  35. * @var tamanhoRepository
  36. */
  37. private $IngrediextraRepository;
  38. /**
  39. * @var tamanhoRepository
  40. */
  41. private $produtoRepository;
  42. /**
  43. * @var PushProcessor
  44. */
  45.  
  46.  
  47.  
  48. public function __construct(
  49. MesaRepository $mesaRepository,
  50. OrderRepository $orderRepository,
  51. TamanhoRepository $tamanhoRepository,
  52. IngredienteRepository $IngredienteRepository,
  53. IngrediextraRepository $IngrediextraRepository,
  54. ProdutoRepository $produtoRepository)
  55. {
  56. $this->mesaRepository = $mesaRepository;
  57. $this->orderRepository = $orderRepository;
  58. $this->tamanhoRepository = $tamanhoRepository;
  59. $this->IngredienteRepository = $IngredienteRepository;
  60. $this->IngrediextraRepository = $IngrediextraRepository;
  61. $this->produtoRepository = $produtoRepository;
  62. }
  63. public function create(array $attributes)
  64. {
  65.  
  66.  
  67. return $attributes= $this->save($attributes);
  68. }
  69.  
  70. private function save(array $attributes)
  71. {
  72.  
  73.  
  74.  
  75. /// return $attributes['ingredientes'];
  76. /*
  77.  
  78. ///return $attributes;
  79.  
  80. $teste =$attributes;
  81.  
  82.  
  83. ////$collection = collect($attributes['items']);
  84.  
  85. /// $plucked = $collection->pluck('ingredientes');
  86.  
  87. function showProfile($teste)
  88.  
  89.  
  90. {
  91. $collection = collect($teste['items']);
  92. $plucked = $collection->pluck('ingredientes');
  93. return $plucked->map(function ($pizza) {
  94. return collect($pizza)->map(function ($ingredientes) {
  95. $ingredientes = array_merge($ingredientes, $ingredientes['pivot']);
  96. unset($ingredientes['pivot']);
  97. return $ingredientes;
  98.  
  99. });
  100. });
  101.  
  102. };
  103.  
  104. $edu = showProfile($teste);
  105. unset($edu['0']['0']);
  106. */
  107.  
  108.  
  109.  
  110.  
  111. $parsed = $this->parseProdutos($attributes['items']);
  112.  
  113. $parsedIngrediente = $this->parseIngredientes($attributes['ingredientes']);
  114.  
  115. $parsedIngredienteextra = $this->parseIngredientesextras($attributes['items']);
  116. $parsedTamanho = $this->parseTamanhos($attributes['items']);
  117. // $parsed = $this->parseProdutos($attributes['items']);
  118. ///return $parsedIngrediente;
  119.  
  120. $total = 0;
  121.  
  122. foreach ($attributes['items'] as $verificarit) {
  123. $verificar = $this->produtoRepository->find($verificarit['produto_id']);
  124. if(empty($verificarit['tamanho']['price'])){
  125. $verificarit['tamanho']['price'] = 0;
  126. }
  127.  
  128. $total += $verificarit['tamanho']['price'] * $verificarit['qtd'];
  129. if ($verificarit['qtd'] > $verificar['quantidade']) {
  130. $order = $verificar['name'];
  131. return $order;
  132. } else {
  133. $resultquant['quantidade'] = $verificar['quantidade'] - $verificarit['qtd'];
  134. $this->produtoRepository->update($resultquant, $verificarit['produto_id']);
  135.  
  136. }
  137. };
  138.  
  139. $attributes['total']= $total;
  140. $order = $this->orderRepository->create($attributes);
  141. $order->produtos()->sync($parsed);
  142. $order->tamanhos()->sync($parsedTamanho);
  143. $order->ingrediente()->sync($parsedIngrediente);
  144. $order->ingrediextra()->sync($parsedIngredienteextra);
  145. $mesaresult['situacao']='table active';
  146. $this->mesaRepository->update($mesaresult,$attributes['mesa_id']);
  147.  
  148. $resultTest = \Comanda\Models\Order::query();
  149. $resultTest->where('orders.id', $order->id);
  150. ///dd($resultTest->get());
  151. ////$resultTest->where('produtos.print', '1');
  152. $resultTest->join('order_produto', 'order_produto.order_id', '=', 'orders.id');
  153. $resultTest->join('produtos', 'produtos.id', '=', 'order_produto.produto_id');
  154. $resultTest->groupBy(DB::raw(' IF(produtos.categoria_id IN (1, 2) <> 0, produtos.id, order_produto.id) '));
  155. $resultTest->orderBy('produtos.id');
  156.  
  157. $resultTest->leftJoin('order_tamanho', 'order_tamanho.order_id', '=', 'orders.id');
  158. $resultTest->leftJoin('tamanhos', 'tamanhos.id', '=', 'order_tamanho.tamanho_id');
  159.  
  160. $resultTest->leftJoin('ingrediente_order', 'ingrediente_order.order_id', '=', 'orders.id');
  161. $resultTest->leftJoin('ingredientes', 'ingredientes.id', '=', 'ingrediente_order.ingrediente_id');
  162.  
  163. $resultTest->leftJoin('ingrediextra_order', 'ingrediextra_order.order_id', '=', 'orders.id');
  164. $resultTest->leftJoin('ingrediextras', 'ingrediextras.id', '=', 'ingrediextra_order.ingrediextra_id');
  165.  
  166. $resultTest->select([
  167. 'orders.id',
  168. 'produtos.name',
  169. DB::raw(' tamanhos.name AS tamanho_pizza '),
  170. /* DB::raw(' GROUP_CONCAT(ingrediextra_order.name) AS ingredientesextra '),
  171. DB::raw(' GROUP_CONCAT(ingrediente_order.name) AS ingredientes '),*/
  172.  
  173. DB::raw('GROUP_CONCAT(DISTINCT ingrediextra_order.name) as ingredientesextra,
  174. GROUP_CONCAT(DISTINCT ingrediente_order.name) AS ingredientes,
  175. GROUP_CONCAT( ingrediextra_order.price) AS precoextra '
  176.  
  177. ),
  178.  
  179. DB::raw(' CAST(SUM(ingrediextra_order.price) / COUNT(*) AS UNSIGNED) AS preco_pedida '),
  180. DB::raw(' order_produto.qtd AS quantidade_pedida ')
  181.  
  182. ]);
  183. $result = $resultTest->get();
  184. return $result;
  185.  
  186.  
  187.  
  188.  
  189. }
  190.  
  191.  
  192. /////verificar ingredientes extras
  193. public function parseIngredientesextras($ingredientesextras)
  194. {
  195.  
  196.  
  197. try {
  198.  
  199.  
  200.  
  201. $parseIngredientesextras = [];
  202.  
  203.  
  204.  
  205. foreach ($ingredientesextras['0']['sabores']['0']['ingrediextras'] as $ingredientesextra) {
  206.  
  207.  
  208. // aqui verifica se o produto existe no pedido
  209.  
  210. if($ingredientesextra['selected']=='true') {
  211.  
  212. $ingredientesextra['name'] = $this->IngrediextraRepository->find($ingredientesextra['id'])->name;
  213.  
  214.  
  215.  
  216. $parseIngredientesextras[$ingredientesextra['id']] = [
  217. //e as colunas adicionais da pivot aqui
  218. /// $parsedProdutos=[$item]['0']['tamanho'];
  219. 'name' => $ingredientesextra['name'],
  220. 'price' => $ingredientesextra['price']
  221. ];
  222. };
  223. };
  224.  
  225. return $parseIngredientesextras;
  226. }
  227. catch (ErrorException $e){
  228. return [];
  229. }
  230.  
  231.  
  232. }
  233.  
  234. /////verificar ingredientes
  235. public function parseIngredientes($ingredientes)
  236. {
  237.  
  238.  
  239. try {
  240.  
  241.  
  242.  
  243. $parseIngredientes = [];
  244.  
  245.  
  246.  
  247. foreach ($ingredientes as $ingrediente) {
  248.  
  249.  
  250. // aqui verifica se o produto existe no pedido
  251.  
  252. if($ingrediente['selected']=='false') {
  253.  
  254. $ingrediente['name'] = $this->IngredienteRepository->find($ingrediente['id'])->name;
  255.  
  256.  
  257.  
  258. $parseIngredientes[$ingrediente['id']] = [
  259. //e as colunas adicionais da pivot aqui
  260. /// $parsedProdutos=[$item]['0']['tamanho'];
  261.  
  262. 'id_product' => $ingrediente['pivot']['produto_id'],
  263. 'name' => $ingrediente['name']
  264. ];
  265. };
  266. };
  267.  
  268. return $parseIngredientes;
  269. }
  270. catch (ErrorException $e){
  271. return [];
  272. }
  273.  
  274.  
  275. }
  276.  
  277. ////verificar tamanhos
  278. public function parseTamanhos($tamanhos)
  279. {
  280.  
  281.  
  282. try {
  283.  
  284.  
  285.  
  286. $parseTamanhos = [];
  287.  
  288.  
  289.  
  290. foreach ($tamanhos as $tamanho) {
  291.  
  292. // aqui verifica se o produto existe no pedido
  293.  
  294. if(!empty($tamanho['tamanho']['id'])) {
  295. $tamanho['price'] = $this->tamanhoRepository->find($tamanho['tamanho']['id'])->price;
  296.  
  297.  
  298.  
  299. $parseTamanhos[$tamanho['tamanho']['id']] = [
  300. //e as colunas adicionais da pivot aqui
  301. /// $parsedProdutos=[$item]['0']['tamanho'];
  302. 'price' => $tamanho['price']
  303. ];
  304. };
  305. };
  306.  
  307. return $parseTamanhos;
  308. }
  309. catch (ErrorException $e){
  310. return [];
  311. }
  312.  
  313.  
  314. }
  315.  
  316. public function parseProdutos($items)
  317. {
  318.  
  319.  
  320. try {
  321.  
  322.  
  323.  
  324. $parsedProdutos = [];
  325.  
  326. foreach ($items as $item) {
  327. // aqui verifica se o produto existe no pedido
  328. if($item['produto_id']) {
  329. $item['price'] = $this->produtoRepository->find($item['produto_id'])->price;
  330. $parsedProdutos[$item['produto_id']][ ]=[
  331. //// $parsedProdutos[$item['produto_id']] = [
  332. //e as colunas adicionais da pivot aqui
  333. /// $parsedProdutos=[$item]['0']['tamanho'];
  334. 'qtd' => $item['qtd'],
  335. 'price' => $item['price']
  336. ];
  337. };
  338. };
  339.  
  340. return $parsedProdutos;
  341. }
  342. catch (ErrorException $e){
  343. return [];
  344. }
  345.  
  346.  
  347. }
  348. public function checkIfHasProduct($item){
  349.  
  350. $item->produtos->where('produto_id','=',$item);
  351.  
  352. return $item;
  353. }
  354.  
  355.  
  356.  
  357. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement