0]; $periodo = [ 'start' => Carbon::createFromFormat('d/m/Y', request()->periodo['start'])->setTime(0, 0, 0), 'end' => Carbon::createFromFormat('d/m/Y', request()->periodo['end'])->setTime(23, 59, 59) ]; $estornos = DB::table('almoxarifado_entrada_item as entrada_item') ->join( 'almoxarifado_entrada as entrada', 'entrada.id', 'entrada_item.entrada_id' ) ->join( 'cadastro_centro_custo as entrada_centro_custo', 'entrada_centro_custo.id', 'entrada.created_centro_custo_id' ) ->join( 'cadastro_infraestrutura as entrada_infraestrutura', 'entrada_infraestrutura.id', 'entrada_centro_custo.infraestrutura_id' ) ->join( 'almoxarifado_entrada_documento as entrada_documento', 'entrada_documento.entrada_id', 'entrada.id' ) ->join( 'almoxarifado_documento_tipo as documento_tipo', 'documento_tipo.id', 'entrada_documento.tipo_id' ) ->join( 'cadastro_fornecedor as fornecedor', 'fornecedor.id', 'entrada_documento.fornecedor_id' ) ->join( 'cadastro_material as material', 'material.id', 'entrada_item.material_id' ) ->join( 'cadastro_apresentacao as apresentacao', 'apresentacao.id', 'material.apresentacao_id' ) ->join( 'cadastro_grupo as grupo', 'grupo.id', 'material.grupo_id' ) ->leftJoin( 'cadastro_subgrupo as subgrupo', 'subgrupo.id', 'material.subgrupo_id' ) ->join( 'almoxarifado_saida_item as saida_item', 'saida_item.id', 'entrada_item.saida_item_estornado_id' ) ->join( 'cadastro_lotacao as saida_item_lotacao', 'saida_item_lotacao.id', 'saida_item.created_lotacao_id' ) ->join( 'cadastro_usuario as saida_item_usuario', 'saida_item_usuario.id', 'saida_item_lotacao.usuario_id' ) ->join( 'cadastro_cidadao as saida_item_cidadao', 'saida_item_cidadao.id', 'saida_item_usuario.cidadao_id' ) ->join( 'almoxarifado_saida_item_entrada_item as saida_item_entrada_item', fn ($join) => $join->on('saida_item_entrada_item.entrada_item_id', 'entrada_item.id') ->whereColumn('saida_item_entrada_item.saida_item_id', 'entrada_item.saida_item_estornado_id') ) ->leftJoin( 'cadastro_unidade_medida as apresentacao_unidade_medida', 'apresentacao_unidade_medida.id', 'material.apresentacao_unidade_medida_id' ) ->where('entrada.finalizada', true) ->whereNotNull('entrada_item.estornado_em') ->whereBetween('entrada_item.estornado_em', $periodo) ->when( request()->unidade_id, fn ($q, $id) => $q->where('entrada_infraestrutura.unidade_id', $id) ) ->when( request()->infraestrutura_id, fn ($q, $id) => $q->where('entrada_centro_custo.infraestrutura_id', $id) ) ->when( request()->centro_custo_id, fn ($q, $id) => $q->where('entrada.created_centro_custo_id', $id) ) ->when( request()->fornecedor_id, fn ($q, $id) => $q->where('entrada_documento.fornecedor_id', $id) ) ->when( request()->grupo_id, fn ($q, $id) => $q->where('material.grupo_id', $id) ) ->when( request()->subgrupo_id, fn ($q, $id) => $q->where('material.subgrupo_id', $id) ) ->when( request()->material_id, fn ($q, $id) => $q->where('entrada_item.material_id', $id) ) ->select( 'entrada_item.estornado_em as data_hora_estorno', 'material.codigo_material', DB::raw(MaterialService::getDescricaoCompletaRaw( 'material', 'apresentacao', 'apresentacao_unidade_medida' ) . " as material"), 'entrada_item.lote as lote', 'entrada_item.validade_lote as validade', 'grupo.nome as grupo', 'subgrupo.nome as subgrupo', 'entrada_documento.data as data_documento', 'entrada_documento.numero as numero_documento', 'documento_tipo.nome as tipo_documento', 'fornecedor.nome_fantasia as fornecedor', 'saida_item_cidadao.nome as usuario_estorno', 'saida_item_entrada_item.quantidade_saida as quantidade' ) ->get(); $estornos->each(fn ($e) => $totalizadores->quantidade += $e->quantidade); return compact('estornos', 'totalizadores'); } public static function list() { return [ 'additionals' => [ 'data_atual' => Carbon::now()->format('d/m/Y') ], 'form' => [ 'unidades' => Unidade::orderBy('nome_fantasia') ->whereHas('infraestruturas', function ($query) { $query->whereHas('centrosCusto', function ($query) { $query->whereHas('setor', fn ($q) => $q->where('tipo_id', SetorTipo::ALMOXARIFADO)); }); }) ->get() ->map(fn ($unidade) => [ 'id' => $unidade->id, 'nome_fantasia' => $unidade->nome_fantasia, 'infraestruturas' => $unidade->infraestruturas() ->whereHas('centrosCusto', function ($query) { $query->whereHas('setor', fn ($q) => $q->where('tipo_id', SetorTipo::ALMOXARIFADO)); }) ->get() ->sortBy('nome') ->map(fn ($infraestrutura) => [ 'id' => $infraestrutura->id, 'nome' => $infraestrutura->nome, 'centros_custo' => $infraestrutura->centrosCusto() ->whereHas('setor', fn ($q) => $q->where('tipo_id', SetorTipo::ALMOXARIFADO)) ->get() ->map(fn ($centroCusto) => [ 'id' => $centroCusto->id, 'setor_nome' => $centroCusto->setor->nome, ]) ->sortBy('setor_nome') ->values() ]) ->values() ]), 'fornecedores' => Fornecedor::orderBy('nome_fantasia')->get(['id', 'nome_fantasia']), '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, 'fornecedor_id' => null, 'grupo_id' => null, 'subgrupo_id' => null, 'material' => null, ], ]; } public static function getPrintExportData() { $resultado = self::index(); $itens = $resultado['estornos']; $itens->each(function ($item) { $item->data_hora_estorno = (new Carbon($item->data_hora_estorno))->format('d/m/Y H:i'); $item->data_documento = (new Carbon($item->data_documento))->format('d/m/Y'); if (!is_null($item->validade)) { $item->validade = (new Carbon($item->validade))->format('d/m/Y'); } }); $unidade = Unidade::find(request()->unidade_id); $infraestrutura = Infraestrutura::find(request()->infraestrutura_id); $centroCusto = CentroCusto::find(request()->centro_custo_id); $fornecedor = Fornecedor::find(request()->fornecedor_id); $grupo = Grupo::find(request()->grupo_id); $subgrupo = Subgrupo::find(request()->subgrupo_id); $material = Material::find(request()->material_id); return [ 'inicio' => request()->periodo['start'], 'fim' => request()->periodo['end'], 'unidade' => $unidade->nome_fantasia ?? 'Todas', 'infraestrutura' => $infraestrutura->nome ?? 'Todas', 'setor' => $centroCusto->setor->nome ?? 'Todos', 'fornecedor' => $fornecedor->nome_fantasia ?? 'Todos', 'grupo' => $grupo->nome ?? 'Todos', 'subgrupo' => $subgrupo->nome ?? 'Todos', 'material' => $material->descricao_completa ?? 'Todos', 'colunas' => collect(request()->selectedCols), 'itens' => $itens, 'totalizadores' => $resultado['totalizadores'], ]; } }