0]; $consulta = $query = DB::table('almoxarifado_saida_item') ->join( 'cadastro_material', 'almoxarifado_saida_item.material_id', 'cadastro_material.id' ) ->join( 'cadastro_apresentacao', 'cadastro_apresentacao.id', 'cadastro_material.apresentacao_id' ) ->join( 'almoxarifado_saida_item_entrada_item', 'almoxarifado_saida_item.id', 'almoxarifado_saida_item_entrada_item.saida_item_id' ) ->join( 'almoxarifado_saida', 'almoxarifado_saida_item.saida_id', 'almoxarifado_saida.id' ) ->join( 'almoxarifado_entrada_item', 'almoxarifado_saida_item_entrada_item.entrada_item_id', 'almoxarifado_entrada_item.id' ) ->leftJoin( 'almoxarifado_saida_requisicao', 'almoxarifado_saida.id', 'almoxarifado_saida_requisicao.saida_id' ) ->join( 'cadastro_centro_custo', 'cadastro_centro_custo.id', 'almoxarifado_saida.centro_custo_id' ) ->join( 'cadastro_setor', 'cadastro_setor.id', 'cadastro_centro_custo.setor_id' ) ->join( 'cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id' ) ->join( 'cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id' ) ->join( 'cadastro_grupo', 'cadastro_grupo.id', 'cadastro_material.grupo_id' ) ->leftJoin( 'cadastro_unidade_medida as apresentacao_unidade_medida', 'apresentacao_unidade_medida.id', 'cadastro_material.apresentacao_unidade_medida_id' ) ->leftJoin( 'cadastro_subgrupo', 'cadastro_material.subgrupo_id', 'cadastro_subgrupo.id' ) ->select( DB::raw("DATE_FORMAT(almoxarifado_saida_item.created_at, '%d/%m/%Y') as data"), 'cadastro_material.codigo_material', DB::raw(MaterialService::getDescricaoCompletaRaw( 'cadastro_material', 'cadastro_apresentacao', 'apresentacao_unidade_medida' ) . " AS descricao"), 'almoxarifado_entrada_item.valor_unitario AS valor_unitario', 'almoxarifado_saida_item_entrada_item.quantidade_saida AS quantidade', DB::raw('almoxarifado_entrada_item.valor_unitario * almoxarifado_saida_item_entrada_item.quantidade_saida AS valor_total'), 'cadastro_grupo.nome AS grupo', 'cadastro_subgrupo.nome AS subgrupo', 'cadastro_unidade.nome_fantasia AS unidade', DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS infraestrutura') ) ->whereNull('almoxarifado_saida_item.estornado_em') ->when(request()->periodo['start'], fn ($q, $data) => $q ->where('almoxarifado_saida_item.created_at', '>=', Carbon::createFromFormat('d/m/Y', $data) ->setTime(0, 0, 0)) ) ->when(request()->periodo['end'], fn ($q, $data) => $q ->where('almoxarifado_saida_item.created_at', '<=', Carbon::createFromFormat('d/m/Y', $data) ->setTime(23, 59, 59)) ) ->when(request()->query('unidade_id'), fn ($q, $id) => $q->where('cadastro_infraestrutura.unidade_id', $id)) ->when(request()->query('infraestrutura_id'), fn ($q, $id) => $q->where('cadastro_infraestrutura.id', $id)) ->when(request()->query('centro_custo_id'), fn ($q, $id) => $q->where('cadastro_centro_custo.id', $id)) ->when(request()->query('grupo_id'), fn ($q, $id) => $q->where('cadastro_grupo.id', $id)) ->when(request()->query('subgrupo_id'), fn ($q, $id) => $q->where('cadastro_subgrupo.id', $id)) ->when(request()->query('material_id'), fn ($q, $id) => $q->where('cadastro_material.id', $id)) ->select( DB::raw("DATE_FORMAT(almoxarifado_saida_item.created_at, '%d/%m/%Y') as data"), 'cadastro_material.codigo_material', DB::raw(MaterialService::getDescricaoCompletaRaw( 'cadastro_material', 'cadastro_apresentacao', 'apresentacao_unidade_medida' ) . " AS descricao"), 'almoxarifado_entrada_item.valor_unitario AS valor_unitario', 'almoxarifado_saida_item_entrada_item.quantidade_saida as quantidade', DB::raw('almoxarifado_entrada_item.valor_unitario * almoxarifado_saida_item_entrada_item.quantidade_saida AS valor_total'), 'cadastro_grupo.nome AS grupo', 'cadastro_subgrupo.nome AS subgrupo', 'cadastro_unidade.nome_fantasia AS unidade', DB::raw("COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS infraestrutura"), ) ->get(); $totalizadores = [ 'total' => number_format($consulta->sum('valor_total'), 2, ',', '.'), ]; $consulta = $consulta->map(function ($item) use ($totalizadores) { $item->valor_total = number_format($item->valor_total, 2, ',', '.'); $item->valor_unitario = number_format($item->valor_unitario, 2, ',', '.'); return $item; }); return ['consulta' => $consulta, 'totalizadores' => $totalizadores]; } public static function list() { $centroCustoLogado = self::getCurrentCentroCusto(); return [ 'additionals' => [], 'form' => [ 'tipos_documento' => DocumentoTipo::orderBy('nome')->get(['id', 'nome']), 'unidades' => Unidade::orderBy('nome_fantasia') ->whereHas('infraestruturas', function ($query) { $query->whereHas('centrosCusto'); }) ->get() ->map(fn ($unidade) => [ 'id' => $unidade->id, 'nome_fantasia' => $unidade->nome_fantasia, 'infraestruturas' => $unidade->infraestruturas() ->whereHas('centrosCusto') ->get() ->sortBy('nome') ->map(fn ($infraestrutura) => [ 'id' => $infraestrutura->id, 'nome' => $infraestrutura->nome, 'centros_custo' => $infraestrutura->centrosCusto() ->get() ->map(fn ($centroCusto) => [ 'id' => $centroCusto->id, 'setor_nome' => $centroCusto->setor->nome, ]) ->sortBy('setor_nome') ->values() ]) ->values() ]), 'grupos' => Grupo::orderBy('nome') ->get() ->map(fn ($grupo) => [ 'id' => $grupo->id, 'nome' => $grupo->nome, 'subgrupos' => $grupo->subgrupos()->orderBy('nome')->get(['id', 'nome']) ]), ], 'model' => [ 'periodo' => [ 'start' => null, 'end' => null, ], 'unidade_id' => null, 'infraestrutura_id' => null, 'centro_custo_id' => null, 'grupo_id' => null, 'subgrupo_id' => null, 'tipo_documento_id' => null, 'material_id' => null, ], ]; } public static function getPrintExportData() { $resultado = self::index(); $itens = $resultado['consulta']; $unidade = Unidade::find(request()->unidade_id); $infraestrutura = Infraestrutura::find(request()->infraestrutura_id); $centroCusto = CentroCusto::find(request()->centro_custo_id); $grupo = Grupo::find(request()->grupo_id); $subgrupo = Subgrupo::find(request()->subgrupo_id); $material = Material::find(request()->material_id['id'] ?? null); $tipo_documento = DocumentoTipo::find(request()->tipo_documento_id); return [ 'inicio' => request()->periodo['start'], 'fim' => request()->periodo['end'], 'unidade' => $unidade->nome_fantasia ?? 'Todas', 'infraestrutura' => $infraestrutura->nome ?? 'Todas', 'setor' => $centroCusto->setor->nome ?? 'Todos', 'grupo' => $grupo->nome ?? 'Todos', 'subgrupo' => $subgrupo->nome ?? 'Todos', 'colunas' => collect(request()->selectedCols), 'itens' => $itens, 'totalizadores' => $resultado['totalizadores'], 'tipo_documento' => $tipo_documento->nome ?? 'Todos', 'material' => $material->descricao_completa ?? 'Todos', ]; } }