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_saida_item_entrada_item as saida_item_entrada_item') ->join( 'almoxarifado_saida_item as saida_item', 'saida_item.id', 'saida_item_entrada_item.saida_item_id' ) ->join( 'almoxarifado_saida as saida', 'saida.id', 'saida_item.saida_id' ) ->join( 'cadastro_centro_custo as saida_centro_custo', 'saida_centro_custo.id', 'saida.created_centro_custo_id' ) ->join( 'cadastro_infraestrutura as saida_infraestrutura', 'saida_infraestrutura.id', 'saida_centro_custo.infraestrutura_id' ) ->join( 'almoxarifado_saida_tipo as saida_tipo', 'saida_tipo.id', 'saida.tipo_id' ) ->join( 'cadastro_material as material', 'material.id', 'saida_item.material_id' ) ->join( 'cadastro_apresentacao as apresentacao', 'apresentacao.id', 'material.apresentacao_id' ) ->join( 'cadastro_grupo as grupo', 'grupo.id', 'material.grupo_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' ) ->leftJoin( 'cadastro_unidade_medida as apresentacao_unidade_medida', 'apresentacao_unidade_medida.id', 'material.apresentacao_unidade_medida_id' ) ->leftJoin( 'almoxarifado_entrada_item as entrada_item_estorno', 'entrada_item_estorno.id', 'saida_item_entrada_item.entrada_item_estornado_id' ) ->leftJoin( 'cadastro_lotacao as entrada_item_estorno_lotacao', 'entrada_item_estorno_lotacao.id', 'entrada_item_estorno.created_lotacao_id' ) ->leftJoin( 'cadastro_usuario as entrada_item_estorno_usuario', 'entrada_item_estorno_usuario.id', 'entrada_item_estorno_lotacao.usuario_id' ) ->leftJoin( 'cadastro_cidadao as entrada_item_estorno_cidadao', 'entrada_item_estorno_cidadao.id', 'entrada_item_estorno_usuario.cidadao_id' ) ->leftJoin( 'almoxarifado_saida_baixa as saida_baixa', 'saida_baixa.saida_id', 'saida.id' ) ->leftJoin( 'cadastro_lotacao as saida_baixa_lotacao', 'saida_baixa_lotacao.id', 'saida_baixa.usuario_solicitante_id' ) ->leftJoin( 'cadastro_usuario as saida_baixa_usuario', 'saida_baixa_usuario.id', 'saida_baixa_lotacao.usuario_id' ) ->leftJoin( 'cadastro_cidadao as saida_baixa_cidadao', 'saida_baixa_cidadao.id', 'saida_baixa_usuario.cidadao_id' ) ->leftJoin( 'almoxarifado_motivo_baixa as saida_baixa_motivo', 'saida_baixa_motivo.id', 'saida_baixa.motivo_id' ) ->leftJoin( 'almoxarifado_saida_requisicao as saida_requisicao', 'saida_requisicao.saida_id', 'saida.id' ) ->leftJoin( 'cadastro_lotacao as saida_requisicao_lotacao', 'saida_requisicao_lotacao.id', 'saida_requisicao.usuario_id' ) ->leftJoin( 'cadastro_usuario as saida_requisicao_usuario', 'saida_requisicao_usuario.id', 'saida_requisicao_lotacao.usuario_id' ) ->leftJoin( 'cadastro_cidadao as saida_requisicao_cidadao', 'saida_requisicao_cidadao.id', 'saida_requisicao_usuario.cidadao_id' ) ->leftJoin( 'almoxarifado_saida_transferencia as saida_transferencia', 'saida_transferencia.saida_id', 'saida.id' ) ->leftJoin( 'cadastro_lotacao as saida_transferencia_lotacao', 'saida_transferencia_lotacao.id', 'saida_transferencia.usuario_id' ) ->leftJoin( 'cadastro_usuario as saida_transferencia_usuario', 'saida_transferencia_usuario.id', 'saida_transferencia_lotacao.usuario_id' ) ->leftJoin( 'cadastro_cidadao as saida_transferencia_cidadao', 'saida_transferencia_cidadao.id', 'saida_transferencia_usuario.cidadao_id' ) ->leftJoin( 'cadastro_subgrupo as subgrupo', 'subgrupo.id', 'material.subgrupo_id' ) ->where('saida.finalizada', true) ->whereNotNull('saida_item.estornado_em') ->whereBetween('saida_item.estornado_em', $periodo) ->when( request()->unidade_id, fn ($q, $id) => $q->where('saida_infraestrutura.unidade_id', $id) ) ->when( request()->infraestrutura_id, fn ($q, $id) => $q->where('saida_centro_custo.infraestrutura_id', $id) ) ->when( request()->centro_custo_id, fn ($q, $id) => $q->where('saida.created_centro_custo_id', $id) ) ->when( request()->tipo_saida_id, fn ($q, $id) => $q->where('saida.tipo_id', $id) ) ->when( request()->usuario_requisitante_id, fn ($q, $id) => $q->where(function ($query) use ($id) { $query->where('saida_requisicao.usuario_id', $id) ->orWhere('saida_transferencia.usuario_id', $id) ->orWhere('saida_baixa.usuario_solicitante_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('saida_item.material_id', $id) ) ->select( 'saida_item.estornado_em as data_hora_estorno', 'saida_item.created_at as data_saida', DB::raw("CONCAT( saida_tipo.nome, IF(saida.tipo_id = " . SaidaTipoEnum::BAIXA . ", CONCAT(' (', saida_baixa_motivo.descricao, ')'), '' ) ) as tipo_saida"), 'material.codigo_material', DB::raw(MaterialService::getDescricaoCompletaRaw( 'material', 'apresentacao', 'apresentacao_unidade_medida' ) . " as material"), 'entrada_item_estorno.lote as lote', 'entrada_item_estorno.validade_lote as validade', 'grupo.nome as grupo', 'subgrupo.nome as subgrupo', 'saida_requisicao.numero as numero_requisicao', DB::raw("( CASE WHEN saida.tipo_id = " . SaidaTipoEnum::MANUAL . " THEN saida_requisicao_cidadao.nome WHEN saida.tipo_id = " . SaidaTipoEnum::TRANSFERENCIA . " THEN saida_transferencia_cidadao.nome WHEN saida.tipo_id = " . SaidaTipoEnum::BAIXA . " THEN saida_baixa_cidadao.nome END ) as usuario_requisitante"), 'entrada_item_estorno_cidadao.nome as usuario_estorno', 'saida_item_cidadao.nome as usuario_saida', '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() { $centroCustoLogado = self::getCurrentCentroCusto(); $unidadeLogadaId = $centroCustoLogado->infraestrutura->unidade_id; $infraestruturaLogadaId = $centroCustoLogado->infraestrutura_id; $centroCustoLogadoId = $centroCustoLogado->id; $isAlmoxarifado = $centroCustoLogado->setor->tipo_id === SetorTipo::ALMOXARIFADO; $data = [ 'additionals' => [ 'data_atual' => Carbon::now()->format('d/m/Y'), 'is_almoxarifado' => $isAlmoxarifado, ], 'form' => [ 'unidades' => Unidade::orderBy('nome_fantasia') ->when($isAlmoxarifado, fn ($query) => $query->whereHas('infraestruturas', fn ($q) => $q->whereHas('centrosCusto')), fn ($query) => $query->where('id', $unidadeLogadaId) ) ->get() ->map(fn ($unidade) => (object) [ 'id' => $unidade->id, 'nome_fantasia' => $unidade->nome_fantasia, 'infraestruturas' => $unidade->infraestruturas() ->when($isAlmoxarifado, fn ($q) => $q->whereHas('centrosCusto'), fn ($q) => $q->where('id', $infraestruturaLogadaId) ) ->get() ->sortBy('nome') ->map(fn ($infraestrutura) => (object) [ 'id' => $infraestrutura->id, 'nome' => $infraestrutura->nome, 'centros_custo' => $infraestrutura->centrosCusto() ->when(!$isAlmoxarifado, fn ($q) => $q->where('id', $centroCustoLogadoId)) ->get() ->map(fn ($centroCusto) => (object) [ 'id' => $centroCusto->id, 'setor_nome' => $centroCusto->setor->nome, ]) ->sortBy('setor_nome') ->values() ]) ->values() ]), 'tipos_saida' => SaidaTipo::query() ->when($isAlmoxarifado, fn ($q) => $q->whereIn('id', [ SaidaTipoEnum::MANUAL, SaidaTipoEnum::BAIXA, SaidaTipoEnum::TRANSFERENCIA, ]), fn ($q) => $q->where('id', SaidaTipoEnum::BAIXA) ) ->orderBy('nome') ->get(['id', 'nome']), 'grupos' => Grupo::orderBy('nome') ->get() ->map(fn ($grupo) => (object) [ 'id' => $grupo->id, 'nome' => $grupo->nome, 'subgrupos' => $grupo->subgrupos()->orderBy('nome')->get(['id', 'nome']) ]) ], ]; $unidade = $isAlmoxarifado ? null : $data['form']['unidades']->first(); $infraestrutura = $isAlmoxarifado ? null : $unidade->infraestruturas->first(); $centroCusto = $isAlmoxarifado ? null : $infraestrutura->centros_custo->first(); $tipoSaida = $isAlmoxarifado ? null : $data['form']['tipos_saida']->first(); $data['model'] = [ 'periodo' => [ 'start' => null, 'end' => null, ], 'unidade_id' => $unidade->id ?? null, 'infraestrutura_id' => $infraestrutura->id ?? null, 'centro_custo_id' => $centroCusto->id ?? null, 'tipo_saida_id' => $tipoSaida->id ?? null, 'usuario_requisitante' => null, 'grupo_id' => null, 'subgrupo_id' => null, 'material' => null, ]; return $data; } 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_saida = (new Carbon($item->data_saida))->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); $tipoSaida = SaidaTipo::find(request()->tipo_saida_id); $usuarioRequisitante = Usuario::find(request()->usuario_requisitante_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', 'tipoSaida' => $tipoSaida->nome ?? 'Todos', 'usuarioRequisitante' => $usuarioRequisitante->cidadao->nome ?? 'Todos', 'grupo' => $grupo->nome ?? 'Todos', 'subgrupo' => $subgrupo->nome ?? 'Todos', 'material' => $material->descricao_completa ?? 'Todos', 'colunas' => collect(request()->selectedCols), 'itens' => $itens, 'totalizadores' => $resultado['totalizadores'], ]; } }