403Webshell
Server IP : 54.94.228.101  /  Your IP : 172.28.1.13
Web Server : Apache
System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/vinumday2_0/app/Modules/Confraria/Services/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Modules/Confraria/Services/ConfrariaService.php
<?php 

namespace App\Modules\Confraria\Services;

use DB;
use App\BasicInfo;
use Illuminate\Support\Facades\Log;
use App\Modules\Adega\Models\Adega;
use App\Modules\PedidoVenda\Models\PedidoVenda;
use App\Modules\PedidoEntrega\Models\PedidoEntrega;
use App\Modules\ConfrariaMembro\Models\ConfrariaMembro;
use App\Modules\PedidoVendaHasProduto\Models\PedidoVendaHasProduto;
use App\Modules\Confraria\Models\Confraria;
use App\Modules\ConfrariaProduto\Models\ConfrariaProduto;
use App\Modules\Oferta\Models\Oferta;
use App\Modules\Cadastro\Models\Cadastro;
use App\Services\GeralService;
use App\Modules\Confraria\Services\ConfrariaEntregaService;
use App\Modules\ConfrariaConvite\Models\ConfrariaConvite;
use App\Modules\ConfrariaProdutoPedido\Models\ConfrariaProdutoPedido;
use App\User;

class ConfrariaService{

    public static function deletarConfraria($confraria_id, $cliente_id){

        $resultado = [];
        $confraria = Confraria::where('id', $confraria_id)->first();
        if(!$confraria){
            return ['status' => false, 'message' => 'Confraria não existe!'];
        }

        if($confraria->deleted){
            return ['status' => false, 'message' => 'Confraria já excluída!'];
        }

        if($confraria->cadastro_id != $cliente_id){
            return ['status' => false, 'message' => 'Somente o fundador pode excluir esta confraria!'];
        }

        //VERIFICAR ADEGA ABERTA
        $adegaAberta = ConfrariaEntregaService::buscarAdegaAberta(['confraria_id' => $confraria_id]);
        if($adegaAberta){
            $sql = "UPDATE adega SET id_cliente = {$confraria->cadastro_id} WHERE id = {$adegaAberta->id}";
            Log::info($sql);
            DB::statement($sql);
            ConfrariaService::deletarAdegaConfraria($adegaAberta, $confraria);
        }

        //VERIFICAR CASHBACK NÃO UTILIZADO, NO

        $deleted_at = date('Y-m-d H:i:s');

        //EXCLUSÃO MEMBROS
        $sql = "UPDATE confraria_membro SET deleted = 1, deleted_at = '{$deleted_at}' WHERE confraria_id = {$confraria_id}";
        Log::info($sql);
        DB::statement($sql);

        //EXCLUSÃO CONFRARIA
        $confraria->deleted = 1;
        $confraria->deleted_at = $deleted_at;
        $confraria->save();

        return ['status' => true, 'message' => 'Confraria excluída com sucesso!'];

    }

    public static function deletarAdegaConfraria($adega, $confraria, $cliente_id=FALSE){

        if($cliente_id){
            ConfrariaService::deletarAdegaMembroConfraria($adega, $confraria, $cliente_id);
        }else{
            foreach($confraria->membros as $membroConfraria){
                ConfrariaService::deletarAdegaMembroConfraria($adega, $confraria, $membroConfraria->cadastro_id);
            }
        }

        //Recalcula Adega Confraria
        GeralService::recalcularAdega($confraria->cadastro_id, FALSE, $adega->id, $confraria->id);

        return true;

    }

    public static function deletarConfrariaMembro($confraria_id, $cliente_id){

        $resultado = [];
        $confraria = Confraria::where('id', $confraria_id)->first();
        if(!$confraria){
            return ['status' => false, 'message' => 'Confraria não existe!'];
        }

        if($confraria->deleted){
            return ['status' => false, 'message' => 'Confraria já excluída!'];
        }

        //VERIFICAR ADEGA ABERTA
        $adegaAberta = ConfrariaEntregaService::buscarAdegaAberta(['confraria_id' => $confraria_id]);
        if($adegaAberta){
            $sql = "UPDATE adega SET id_cliente = {$confraria->cadastro_id} WHERE id = {$adegaAberta->id}";
            Log::info($sql);
            DB::statement($sql);
            ConfrariaService::deletarAdegaConfraria($adegaAberta, $confraria, $cliente_id);
        }

        //VERIFICAR CASHBACK NÃO UTILIZADO, NO

        $deleted_at = date('Y-m-d H:i:s');

        //EXCLUSÃO MEMBRO
        $sql = "UPDATE confraria_membro SET deleted = 1, deleted_at = '{$deleted_at}', confraria_convite_id = NULL WHERE confraria_id = {$confraria_id} AND cadastro_id = {$cliente_id}";
        Log::info($sql);
        DB::statement($sql);

        $sql = "DELETE FROM confraria_convite WHERE cadastro_id = {$cliente_id}";
        Log::info($sql);
        DB::statement($sql);

        return ['status' => true, 'message' => 'Membro excluído com sucesso!'];

    }

    public static function deletarAdegaMembroConfraria($adega, $confraria, $cliente_id){

        $sql = "UPDATE pedido_venda SET confraria_id = NULL WHERE pedido_venda.id_cliente = {$cliente_id} AND EXISTS (SELECT 1 FROM adega_has_pedido_venda ahpv WHERE ahpv.id_pedido_venda= pedido_venda.id AND ahpv.id_adega={$adega->id})";
        Log::info($sql);
        DB::statement($sql);

        $adegaAbertaMembro = Adega::where('id_cliente', $cliente_id)->whereRaw('confraria_id IS NULL')->where('status', 'A')->first();

        if (!$adegaAbertaMembro) {
            $adegaAbertaMembro = new Adega();
            $adegaAbertaMembro->data_abertura = date('Y-m-d H:i:s');
            $adegaAbertaMembro->status        = 'A';
            $adegaAbertaMembro->id_cliente    = $cliente_id;
            $adegaAbertaMembro->save();
        }

        $listaPedidos = PedidoVenda::select('id')->where('id_cliente', $cliente_id)->whereRaw("EXISTS (SELECT 1 FROM adega_has_pedido_venda ahpv WHERE ahpv.id_pedido_venda= pedido_venda.id AND ahpv.id_adega={$adega->id} AND pedido_venda.id_cliente={$cliente_id})")->get();
        $pedidos      = [];
        if(count($listaPedidos) > 0){
            foreach($listaPedidos as $pedido){
                $pedidos[] = $pedido->id;
            }
        }

        $pedidos = (count($pedidos) ? implode(",", $pedidos) : 0);

        $sql = "UPDATE adega_has_pedido_venda SET id_adega = {$adegaAbertaMembro->id} WHERE id_pedido_venda IN ({$pedidos})";
        Log::info($sql);
        DB::statement($sql);

        //LIMPEZA CONFRARIA PRODUTO X MEMBRO
        $ProdutosPedidos = ConfrariaProdutoPedido::select('confraria_produto_id')
        ->join('pedido_venda', 'pedido_venda.id_cliente', '=', 'confraria_produto_pedido.pedido_venda_id')
        ->where('pedido_venda.id_cliente', $cliente_id)
        ->get();

        $produtosConfraria = [];
        if(count($ProdutosPedidos) > 0){
            foreach($ProdutosPedidos as $produto){
                $produtosConfraria[] = $produto->confraria_produto_id;
            }
        }

        $produtosConfraria = (count($produtosConfraria) ? implode(",", $produtosConfraria) : 0);

        $sql = "DELETE FROM confraria_produto_avaliacao WHERE confraria_produto_id IN ($produtosConfraria)";
        Log::info($sql);
        DB::statement($sql);

        $sql = "DELETE FROM confraria_produto_curtida WHERE confraria_produto_id IN ($produtosConfraria)";
        Log::info($sql);
        DB::statement($sql);

        $sql = "DELETE FROM confraria_produto_pedido WHERE confraria_produto_id IN ($produtosConfraria)";
        Log::info($sql);
        DB::statement($sql);

        $sql = "DELETE FROM confraria_produto WHERE id IN ($produtosConfraria)";
        Log::info($sql);
        DB::statement($sql);

        //Recalcula Adega Membro
        GeralService::recalcularAdega($cliente_id, FALSE, $adegaAbertaMembro->id, FALSE);

        return true;

    }

    public static function recalcularConfraria($confraria_id, $id_cliente = FALSE){

        $PedidosConfraria = PedidoVendaHasProduto::selectRaw('CAST(COALESCE(SUM(pedido_venda_has_produto.quantidade), 0) AS UNSIGNED) qtde_garrafas, COALESCE(SUM(pedido_venda.subtotal),0) total_confraria, COALESCE(SUM(oferta.preco_mercado - oferta.preco_oferta),0) total_economizado')
        ->join('oferta', 'oferta.id', '=', 'pedido_venda_has_produto.id_oferta')
        ->join('pedido_venda', 'pedido_venda.id', '=', 'pedido_venda_has_produto.id_pedido_venda')
        ->where('frete', 0)
        ->where('pedido_venda.confraria_id', $confraria_id)
        ->whereIn('pedido_venda.id_status_pedido_venda', [2,7])
        ->first();

        $sql = "UPDATE confraria SET qtde_garrafas = {$PedidosConfraria->qtde_garrafas}, total_confraria = {$PedidosConfraria->total_confraria}, total_economizado = {$PedidosConfraria->total_economizado} WHERE id = {$confraria_id}";
        Log::info($sql);
        DB::statement($sql);

        if($id_cliente){

            $PedidosMembro = PedidoVendaHasProduto::selectRaw('CAST(COALESCE(SUM(pedido_venda_has_produto.quantidade), 0) AS UNSIGNED) qtde_garrafas, COALESCE(SUM(pedido_venda.subtotal),0) total_confraria')
            ->join('oferta', 'oferta.id', '=', 'pedido_venda_has_produto.id_oferta')
            ->join('pedido_venda', 'pedido_venda.id', '=', 'pedido_venda_has_produto.id_pedido_venda')
            ->where('frete', 0)
            ->where('pedido_venda.confraria_id', $confraria_id)
            ->where('pedido_venda.id_cliente', $id_cliente)
            ->whereIn('pedido_venda.id_status_pedido_venda', [2,7])
            ->first();

            $valor_adega_atual = 0;
            $adegaAberta       = ConfrariaEntregaService::buscarAdegaAberta(['confraria_id' => $confraria_id]);
            if($adegaAberta){
                $infoAdega         = ConfrariaEntregaService::buscarInformacoesBasicasAdega($confraria_id, $adegaAberta->id, $id_cliente);
                $valor_adega_atual = $infoAdega['valorTotal'];
                if($valor_adega_atual > 0)
                $valor_adega_atual = number_format($valor_adega_atual, 2, '.', '');
            }

            $sql = "UPDATE confraria_membro SET total_garrafas = {$PedidosMembro->qtde_garrafas}, contribuicao_total = {$PedidosMembro->total_confraria}, valor_adega_atual = {$valor_adega_atual} WHERE confraria_id = {$confraria_id} AND cadastro_id = {$id_cliente} AND confraria_membro.deleted = 0";
            Log::info($sql);
            DB::statement($sql);

            $ConfrariaMembro = ConfrariaMembro::where('confraria_id', $confraria_id)->where('cadastro_id', $id_cliente)->where('confraria_membro.deleted', 0)->first();

            if($ConfrariaMembro){

                $PedidosMembro = PedidoVendaHasProduto::selectRaw('COALESCE(SUM(pedido_venda.subtotal),0) total_pedidos_site')
                ->join('oferta', 'oferta.id', '=', 'pedido_venda_has_produto.id_oferta')
                ->join('pedido_venda', 'pedido_venda.id', '=', 'pedido_venda_has_produto.id_pedido_venda')
                ->where('frete', 0)
                ->where('pedido_venda.id_cliente', $id_cliente)
                ->whereIn('pedido_venda.id_status_pedido_venda', [2,7])
                ->first();

                $basicInfo = BasicInfo::find(1);

                $sql = "UPDATE confraria_membro SET total_valor_pedidos = {$PedidosMembro->total_pedidos_site} WHERE confraria_id = {$confraria_id} AND cadastro_id = {$id_cliente}";
                Log::info($sql);
                DB::statement($sql);

                if($ConfrariaMembro->elegivel_kit){

                    $PedidosMembrosConfraria = PedidoVendaHasProduto::selectRaw('COALESCE(SUM(pedido_venda.subtotal),0) total_valor_pedidos, pedido_venda.id_cliente')
                    ->join('pedido_venda', 'pedido_venda.id', '=', 'pedido_venda_has_produto.id_pedido_venda')
                    ->join('confraria_membro', 'confraria_membro.cadastro_id', '=', 'pedido_venda.id_cliente')
                    ->where('frete', 0)
                    ->where('confraria_membro.confraria_id', $confraria_id)
                    ->where('confraria_membro.elegivel_kit', 1)
                    ->whereIn('pedido_venda.id_status_pedido_venda', [2,7])
                    ->where('confraria_membro.deleted', 0)
                    ->groupBy('pedido_venda.id_cliente')
                    ->havingRaw("total_valor_pedidos >= {$basicInfo->valor_minimo_meta_kit_confraria}");

                    Log::info($PedidosMembrosConfraria->toSql());

                    $PedidosMembrosConfraria = $PedidosMembrosConfraria->get();

                    $total_meta_kit       = count($PedidosMembrosConfraria);
                    $total_meta_kit_valor = $total_meta_kit * $basicInfo->valor_minimo_meta_kit_confraria;
                    
                    $sql = "UPDATE confraria SET total_meta_kit = {$total_meta_kit}, total_meta_kit_valor = {$total_meta_kit_valor} WHERE id = {$confraria_id}";
                    Log::info($sql);
                    DB::statement($sql);

                    $confraria = Confraria::where('id', $confraria_id)->first();

                    if(!$confraria->confrariaKit && $total_meta_kit >= $basicInfo->min_membros_confraria && $total_meta_kit_valor >= ($total_meta_kit * $basicInfo->valor_minimo_kit_confraria)){

                        DB::table('confraria_kit')->insert([
                            [
                                'confraria_id' => $confraria_id,
                                'oferta_id'    => NULL,
                                'data'         => date('Y-m-d H:i:s'),
                                'situacao'     => 'P'
                            ]
                        ]);

                    }

                }
                
            }
        }

    }

	public static function buscarPagamentosPorConfraria($idConfraria, $idPedido = false){
        $pedidos = PedidoVenda::select('pedido_venda.*')
        ->where('confraria_id', $idConfraria);

        if($idPedido)
            $pedidos->where('id', $idPedido);
        
        $pedidos->orderBy('data_fechamento', 'DESC')
        ->with('status', 'produtos')
        ->groupBy('pedido_venda.id');

        return $pedidos->paginate(15);
    }

    public static function buscarAdegasConfraria($params){

        $query = Adega::where('confraria_id', $params['confraria_id'])->orderBy('data_abertura', 'DESC')->with('pedidoEntrega');

        if(isset($params['status'])){
            $query->where('adega.status', $params['status']);
        }
        $adegas = $query->get();

        return $adegas;
    }

    public static function buscarEntregasPorConfraria($idConfraria, $tipo = 'entregas'){

        $query = PedidoEntrega::select('pedido_entrega.*', DB::raw('SUM(pvhp.quantidade) as quantidade_produtos'), DB::raw('SUM(pvhp.valor_total) as valor_total'), 'pvf.total as valor_frete')
        ->join('adega as a', 'pedido_entrega.id_adega', '=', 'a.id')
        ->join('adega_has_pedido_venda as ahpv', 'a.id', '=', 'ahpv.id_adega')
        ->join('pedido_venda as pv', 'pv.id', '=', 'ahpv.id_pedido_venda')
        ->join('pedido_venda_has_produto as pvhp', 'pvhp.id_pedido_venda', '=', 'pv.id')

        ->leftJoin('pedido_venda as pvf', 'pvf.id', '=', 'pedido_entrega.id_pedido_venda_frete')

        ->where('a.confraria_id', $idConfraria)
        ->where('pv.id_status_pedido_venda', 7);

        if($tipo == 'resumo'){
            $query->whereNotIn('pedido_entrega.id_pedido_entrega_status', [6,7]); //Entregue, Cancelado
        }

        $query->orderBy('data_solicitacao', 'DESC')->with('endereco', 'adega')->groupBy('pedido_entrega.id');

        if($tipo == 'resumo'){
            $entregas = $query->get();
        }else{
            $entregas = $query->paginate(15);
        }

        return $entregas;
    }

    /*
    Pedidos da confraria [



        oferta (oferta que é do tipo CF)
        produtos
        pedido_venda
        cadastro
    
    ]
    */

    public static function buscarPedidosMembrosConfraria($params){

        $arrPedidosMembros = [];

        $queryPedidosVendaConfraria = PedidoVenda::select('pedido_venda.id', 'pedido_venda.total', 'pedido_venda.id_cliente', 'pedido_venda.total', 'pedido_venda.data_fechamento', 'pedido_venda.subtotal', 'pedido_venda.qtd_garrafas', 'pedido_venda.valor_economizado', 'pedido_venda.comprovante', 'pedido_venda.tipo_deposito', 'pedido_venda.id_status_pedido_venda')
        ->where('confraria_id', $params['confraria_id']);

        if(isset($params['id_adega'])){
            $queryPedidosVendaConfraria->join('adega_has_pedido_venda', 'adega_has_pedido_venda.id_pedido_venda', '=', 'pedido_venda.id')->where('adega_has_pedido_venda.id_adega', $params['id_adega']);
        }

        $pedidosVendaConfraria = $queryPedidosVendaConfraria->with('produtos.produto.caracteristicas.produtoRegiao.pais', 'cliente')->get()->toArray();

        foreach($pedidosVendaConfraria as $key => $pedidoVenda){

            $arrayOfertas = [];

            foreach($pedidoVenda['produtos'] as $produto){
                if(!in_array($produto['id_oferta'], $arrayOfertas, true)){
                    array_push($arrayOfertas, $produto['id_oferta']);
                }
            }

            $oferta_id = $arrayOfertas[0];
            $oferta = Oferta::where('id', $oferta_id)->first();
            $arrPedidosMembros[$key]['pedido_venda'] = $pedidoVenda;
            $arrPedidosMembros[$key]['oferta'] = $oferta;
        }

        return $arrPedidosMembros;
    }

    // Busca todos os produtos que estão na adega do membro
    public static function buscarOfertasAdegaMembroConfraria($idAdega){
        $adegaProdutos = DB::table('adega_has_pedido_venda')
        ->select('oferta.*', 'pedido_venda_has_produto.quantidade as quantidadeProdutos')
        ->join('pedido_venda', 'pedido_venda.id', 'adega_has_pedido_venda.id_pedido_venda')
        ->join('pedido_venda_has_produto', 'pedido_venda_has_produto.id_pedido_venda', 'pedido_venda.id')
        ->join('produto', 'produto.id', 'pedido_venda_has_produto.id_produto')
        ->join('oferta', 'oferta.id', 'pedido_venda_has_produto.id_oferta')
        ->where('adega_has_pedido_venda.id_adega', $idAdega)
        ->get();

        return $adegaProdutos;
    }

    public static function buscarProdutosAdegaMembroConfraria($idAdega, $id_status_pedido_venda=FALSE){
        $query = DB::table('adega_has_pedido_venda')
        ->select('produto.*', 'produto_caracteristica.safra', 'produto_caracteristica.regiao', 'produto_caracteristica.castas', 'produto_caracteristica.teor_alcoolico',  'pedido_venda_has_produto.quantidade as quantidadeProdutos', 'pais.nome as pais_nome', 'produto_regiao.nome as produto_regiao_nome')
        ->join('pedido_venda', 'pedido_venda.id', 'adega_has_pedido_venda.id_pedido_venda')
        ->join('pedido_venda_has_produto', 'pedido_venda_has_produto.id_pedido_venda', 'pedido_venda.id')
        ->join('produto', 'produto.id', 'pedido_venda_has_produto.id_produto')
        ->leftJoin('pais', 'pais.id', 'produto.id_pais_origem')
        ->join('oferta', 'oferta.id', 'pedido_venda_has_produto.id_oferta')
        ->join('produto_caracteristica', 'produto_caracteristica.id_produto', 'produto.id')
        ->leftJoin('produto_regiao', 'produto_regiao.id', 'produto_caracteristica.produto_regiao_id')
        ->where('adega_has_pedido_venda.id_adega', $idAdega);

        if($id_status_pedido_venda){
            if(is_array($id_status_pedido_venda)){
                $query->whereIn('pedido_venda.id_status_pedido_venda', $id_status_pedido_venda);
            }else{
                $query->where('pedido_venda.id_status_pedido_venda', $id_status_pedido_venda);
            }
        }

        $adegaProdutos = $query->get();

        return $adegaProdutos;
    }

    public static function buscarPedidoVenda($idAdega){
        $pedidoVenda = Adega::select('pedido_venda.*')
        ->join('adega_has_pedido_venda', 'adega_has_pedido_venda.id_adega', 'adega.id')
        ->join('pedido_venda', 'pedido_venda.id', 'adega_has_pedido_venda.id_pedido_venda')
        ->where('adega.id', $idAdega)
        ->first();

        return $pedidoVenda;
    }

    public static function buscarHistorico($confraria_id, $filtro = []){

        $produtos = ConfrariaProduto::select('produto.nome as produto_nome', 'produto.thumbnail_principal as thumbnail_produto', 'cadastro.thumbnail_principal as thumbnail_membro', 'pais.nome as nome_pais', 'produto_regiao.nome as nome_regiao', 'produto.slug as slugProduto', 'oferta.*', 'pedido_venda.id as id_pedido_venda', 'cadastro.nome as nome_cadastro', 'pedido_venda.data_fechamento', 'produto_caracteristica.castas', 'produto_caracteristica.safra', 'produto_caracteristica.teor_alcoolico', 'produto_caracteristica.regiao', 'pedido_venda.total as valor_total_pedido', 'confraria_produto.id as confraria_produto_id')
        ->where('confraria_produto.confraria_id', $confraria_id);

        if(isset($filtro['nome'])){
            $produtos->where('produto.nome', 'like', '%'.$filtro['nome'].'%');
        }

        if(isset($filtro['cadastro_id'])){
            $produtos->where('cadastro.id', $filtro['cadastro_id']);
        }

        $produtos->join('produto', 'produto.id', 'confraria_produto.produto_id')
        ->join('confraria_produto_pedido', 'confraria_produto_pedido.confraria_produto_id', 'confraria_produto.id')
        ->join('pedido_venda', 'pedido_venda.id', 'confraria_produto_pedido.pedido_venda_id')
        ->join('cadastro', 'cadastro.id', 'pedido_venda.id_cliente')
        ->join('produto_caracteristica', 'produto_caracteristica.id_produto', 'produto.id')
        ->join('pedido_venda_has_produto', function($produtos)
                {
                    $produtos->on('pedido_venda_has_produto.id_produto', 'confraria_produto.produto_id')->on('pedido_venda_has_produto.id_pedido_venda', 'confraria_produto_pedido.pedido_venda_id');
                })
        ->join('oferta_has_produto', function($produtos)
            {
                $produtos->on('oferta_has_produto.id_oferta', 'pedido_venda_has_produto.id_oferta')->on('oferta_has_produto.id_produto', 'pedido_venda_has_produto.id_produto');
            })
        ->join('oferta', 'oferta.id', 'oferta_has_produto.id_oferta')
        ->leftJoin('produto_regiao', 'produto_regiao.id', 'produto_caracteristica.produto_regiao_id')
        ->leftJoin('pais', 'pais.id', 'produto_regiao.pais_id')
        ->whereIn('pedido_venda.id_status_pedido_venda', [2,7])
        ->groupBy('confraria_produto.id');

        return $produtos->get();
    }

    public static function gerarUrlConvite($codigo){
        return env('APP_ENV') == 'local' ? url('/confraria/convite/' . $codigo) : config('app.url_prod') . '/confraria/convite/' . $codigo;
    }

    public static function buscarConfrariaUsuarioLogado($cadastro_id = FALSE){

        if($cadastro_id){
            $cadastro = Cadastro::where('id', $cadastro_id)->first();
        }else{
            $cadastro = GeralService::buscarClienteLogado();
        }

        if(!$cadastro){
            return false;
        }

        $confraria = Confraria::selectRaw("confraria.*, (SELECT COUNT(cf.id) FROM confraria_membro cf WHERE cf.confraria_id = confraria.id AND cf.deleted = 0) qtde_membros")
        ->join('confraria_membro', 'confraria_membro.confraria_id', 'confraria.id')
        ->where('confraria_membro.cadastro_id', $cadastro->id)
        ->where('confraria_membro.deleted', 0)
        ->where('confraria.deleted', 0)
        ->with('membros.cadastro')
        ->first();

       return $confraria;
    }

    public static function buscarConvitesPendentes($confrariaId){
        $confrariaConvite = ConfrariaConvite::where('confraria_id', $confrariaId)
        ->where('situacao', 'P')
        ->get();
    
        return $confrariaConvite;
    }

    public static function enviarNotificacaoConvitesPendentes(){
        $confrarias = Confraria::with(['convitesPendentes', 'cadastro'])->where('deleted', 0)->get();

        $confrarias = $confrarias->filter(function ($item, $key) {
            return count($item->convitesPendentes) > 0;
        });

        foreach($confrarias as $confraria)
            self::notificarDonoConfraria($confraria->cadastro, $confraria, $confraria->convitesPendentes);

        return true;
    }

    // Notifica o dono da confraria sobre os membros que não aceiteram o convite
    public static function notificarDonoConfraria($cadastro, $confraria, $convitesPendentes){
        // $email = $cadastro->email;
        $data['convites'] = $confraria->convitesPendentes;
        $data['confraria'] = $confraria;
        $data['nome'] = $cadastro->nome; 
        
        $user = User::where('id', $cadastro->user_id)->first();
        $email = $user->email;
        
        \Mail::send('emails.confraria.notificacao_fundador', $data, function ($m) use ($data, $email){
            $m->from('no-reply@vinumday.com.br', 'Vinum Day');
            $m->to($email)->subject('Notificar membros da confraria');
        });

    }

    // Notifica o membro da confraria que ele não aceitou o convite ainda
    public static function notificarMembroConfraria($confrariaId){
        $confraria = Confraria::where('id', $confrariaId)->with(['convitesPendentes', 'cadastro'])->first();

        foreach($confraria->convitesPendentes as $convite){
            $data['nomeFundador'] = $confraria->cadastro->nome;
            $data['cadastro'] = $confraria->cadastro;
            $data['confraria'] = $confraria;
            $data['link'] = url('/confraria/convite/' . $confraria->codigo . '?email=' . $convite->email);

            $userExistente = User::where('email', $convite->email)->first();
            $data['nome'] = false; 
            if($userExistente){
                $data['nome'] = DB::table('cadastro')->where('user_id', $userExistente->id)->value('nome');
            }

            $email = $convite->email;

            \Mail::send('emails.confraria.notificacao_membro', $data, function ($m) use ($data, $email){
                $m->from('no-reply@vinumday.com.br', 'Vinum Day');
                $m->to($email)->subject('Convite para participar da confraria');
            });
        }

        return true;
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit