Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Comanda\Services;
- use Comanda\Models\Order;
- use Comanda\Repositories\OrderRepository;
- use Comanda\Repositories\ProdutoRepository;
- use Comanda\Repositories\TamanhoRepository;
- use Comanda\Repositories\IngredienteRepository;
- use Comanda\Repositories\IngrediextraRepository;
- use Comanda\Repositories\MesaRepository;
- use Illuminate\Support\Facades\DB;
- class OrderService
- {
- private $mesaRepository;
- /**
- * @var OrderRepository
- */
- private $orderRepository;
- /**
- * @var ProductRepository
- */
- private $tamanhoRepository;
- /**
- * @var tamanhoRepository
- */
- private $IngredienteRepository;
- /**
- * @var tamanhoRepository
- */
- private $IngrediextraRepository;
- /**
- * @var tamanhoRepository
- */
- private $produtoRepository;
- /**
- * @var PushProcessor
- */
- public function __construct(
- MesaRepository $mesaRepository,
- OrderRepository $orderRepository,
- TamanhoRepository $tamanhoRepository,
- IngredienteRepository $IngredienteRepository,
- IngrediextraRepository $IngrediextraRepository,
- ProdutoRepository $produtoRepository)
- {
- $this->mesaRepository = $mesaRepository;
- $this->orderRepository = $orderRepository;
- $this->tamanhoRepository = $tamanhoRepository;
- $this->IngredienteRepository = $IngredienteRepository;
- $this->IngrediextraRepository = $IngrediextraRepository;
- $this->produtoRepository = $produtoRepository;
- }
- public function create(array $attributes)
- {
- return $attributes= $this->save($attributes);
- }
- private function save(array $attributes)
- {
- /// return $attributes['ingredientes'];
- /*
- ///return $attributes;
- $teste =$attributes;
- ////$collection = collect($attributes['items']);
- /// $plucked = $collection->pluck('ingredientes');
- function showProfile($teste)
- {
- $collection = collect($teste['items']);
- $plucked = $collection->pluck('ingredientes');
- return $plucked->map(function ($pizza) {
- return collect($pizza)->map(function ($ingredientes) {
- $ingredientes = array_merge($ingredientes, $ingredientes['pivot']);
- unset($ingredientes['pivot']);
- return $ingredientes;
- });
- });
- };
- $edu = showProfile($teste);
- unset($edu['0']['0']);
- */
- $parsed = $this->parseProdutos($attributes['items']);
- $parsedIngrediente = $this->parseIngredientes($attributes['ingredientes']);
- $parsedIngredienteextra = $this->parseIngredientesextras($attributes['items']);
- $parsedTamanho = $this->parseTamanhos($attributes['items']);
- // $parsed = $this->parseProdutos($attributes['items']);
- ///return $parsedIngrediente;
- $total = 0;
- foreach ($attributes['items'] as $verificarit) {
- $verificar = $this->produtoRepository->find($verificarit['produto_id']);
- if(empty($verificarit['tamanho']['price'])){
- $verificarit['tamanho']['price'] = 0;
- }
- $total += $verificarit['tamanho']['price'] * $verificarit['qtd'];
- if ($verificarit['qtd'] > $verificar['quantidade']) {
- $order = $verificar['name'];
- return $order;
- } else {
- $resultquant['quantidade'] = $verificar['quantidade'] - $verificarit['qtd'];
- $this->produtoRepository->update($resultquant, $verificarit['produto_id']);
- }
- };
- $attributes['total']= $total;
- $order = $this->orderRepository->create($attributes);
- $order->produtos()->sync($parsed);
- $order->tamanhos()->sync($parsedTamanho);
- $order->ingrediente()->sync($parsedIngrediente);
- $order->ingrediextra()->sync($parsedIngredienteextra);
- $mesaresult['situacao']='table active';
- $this->mesaRepository->update($mesaresult,$attributes['mesa_id']);
- $resultTest = \Comanda\Models\Order::query();
- $resultTest->where('orders.id', $order->id);
- ///dd($resultTest->get());
- ////$resultTest->where('produtos.print', '1');
- $resultTest->join('order_produto', 'order_produto.order_id', '=', 'orders.id');
- $resultTest->join('produtos', 'produtos.id', '=', 'order_produto.produto_id');
- $resultTest->groupBy(DB::raw(' IF(produtos.categoria_id IN (1, 2) <> 0, produtos.id, order_produto.id) '));
- $resultTest->orderBy('produtos.id');
- $resultTest->leftJoin('order_tamanho', 'order_tamanho.order_id', '=', 'orders.id');
- $resultTest->leftJoin('tamanhos', 'tamanhos.id', '=', 'order_tamanho.tamanho_id');
- $resultTest->leftJoin('ingrediente_order', 'ingrediente_order.order_id', '=', 'orders.id');
- $resultTest->leftJoin('ingredientes', 'ingredientes.id', '=', 'ingrediente_order.ingrediente_id');
- $resultTest->leftJoin('ingrediextra_order', 'ingrediextra_order.order_id', '=', 'orders.id');
- $resultTest->leftJoin('ingrediextras', 'ingrediextras.id', '=', 'ingrediextra_order.ingrediextra_id');
- $resultTest->select([
- 'orders.id',
- 'produtos.name',
- DB::raw(' tamanhos.name AS tamanho_pizza '),
- /* DB::raw(' GROUP_CONCAT(ingrediextra_order.name) AS ingredientesextra '),
- DB::raw(' GROUP_CONCAT(ingrediente_order.name) AS ingredientes '),*/
- DB::raw('GROUP_CONCAT(DISTINCT ingrediextra_order.name) as ingredientesextra,
- GROUP_CONCAT(DISTINCT ingrediente_order.name) AS ingredientes,
- GROUP_CONCAT( ingrediextra_order.price) AS precoextra '
- ),
- DB::raw(' CAST(SUM(ingrediextra_order.price) / COUNT(*) AS UNSIGNED) AS preco_pedida '),
- DB::raw(' order_produto.qtd AS quantidade_pedida ')
- ]);
- $result = $resultTest->get();
- return $result;
- }
- /////verificar ingredientes extras
- public function parseIngredientesextras($ingredientesextras)
- {
- try {
- $parseIngredientesextras = [];
- foreach ($ingredientesextras['0']['sabores']['0']['ingrediextras'] as $ingredientesextra) {
- // aqui verifica se o produto existe no pedido
- if($ingredientesextra['selected']=='true') {
- $ingredientesextra['name'] = $this->IngrediextraRepository->find($ingredientesextra['id'])->name;
- $parseIngredientesextras[$ingredientesextra['id']] = [
- //e as colunas adicionais da pivot aqui
- /// $parsedProdutos=[$item]['0']['tamanho'];
- 'name' => $ingredientesextra['name'],
- 'price' => $ingredientesextra['price']
- ];
- };
- };
- return $parseIngredientesextras;
- }
- catch (ErrorException $e){
- return [];
- }
- }
- /////verificar ingredientes
- public function parseIngredientes($ingredientes)
- {
- try {
- $parseIngredientes = [];
- foreach ($ingredientes as $ingrediente) {
- // aqui verifica se o produto existe no pedido
- if($ingrediente['selected']=='false') {
- $ingrediente['name'] = $this->IngredienteRepository->find($ingrediente['id'])->name;
- $parseIngredientes[$ingrediente['id']] = [
- //e as colunas adicionais da pivot aqui
- /// $parsedProdutos=[$item]['0']['tamanho'];
- 'id_product' => $ingrediente['pivot']['produto_id'],
- 'name' => $ingrediente['name']
- ];
- };
- };
- return $parseIngredientes;
- }
- catch (ErrorException $e){
- return [];
- }
- }
- ////verificar tamanhos
- public function parseTamanhos($tamanhos)
- {
- try {
- $parseTamanhos = [];
- foreach ($tamanhos as $tamanho) {
- // aqui verifica se o produto existe no pedido
- if(!empty($tamanho['tamanho']['id'])) {
- $tamanho['price'] = $this->tamanhoRepository->find($tamanho['tamanho']['id'])->price;
- $parseTamanhos[$tamanho['tamanho']['id']] = [
- //e as colunas adicionais da pivot aqui
- /// $parsedProdutos=[$item]['0']['tamanho'];
- 'price' => $tamanho['price']
- ];
- };
- };
- return $parseTamanhos;
- }
- catch (ErrorException $e){
- return [];
- }
- }
- public function parseProdutos($items)
- {
- try {
- $parsedProdutos = [];
- foreach ($items as $item) {
- // aqui verifica se o produto existe no pedido
- if($item['produto_id']) {
- $item['price'] = $this->produtoRepository->find($item['produto_id'])->price;
- $parsedProdutos[$item['produto_id']][ ]=[
- //// $parsedProdutos[$item['produto_id']] = [
- //e as colunas adicionais da pivot aqui
- /// $parsedProdutos=[$item]['0']['tamanho'];
- 'qtd' => $item['qtd'],
- 'price' => $item['price']
- ];
- };
- };
- return $parsedProdutos;
- }
- catch (ErrorException $e){
- return [];
- }
- }
- public function checkIfHasProduct($item){
- $item->produtos->where('produto_id','=',$item);
- return $item;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement