0]; if(request()->tipo_data == 'entrada') { $tipo_data = 'almoxarifado_entrada.finalizada_em'; } else { $tipo_data = 'almoxarifado_entrada_documento.data'; } $consulta = DB::table('almoxarifado_entrada') ->join( 'almoxarifado_entrada_item', 'almoxarifado_entrada_item.entrada_id', 'almoxarifado_entrada.id' ) ->join( 'cadastro_material', 'cadastro_material.id', 'almoxarifado_entrada_item.material_id' ) ->join( 'cadastro_apresentacao', 'cadastro_apresentacao.id', 'cadastro_material.apresentacao_id' ) ->join( 'almoxarifado_entrada_tipo', 'almoxarifado_entrada_tipo.id', 'almoxarifado_entrada.tipo_id' ) ->join( 'cadastro_grupo', 'cadastro_grupo.id', 'cadastro_material.grupo_id' ) ->join( 'cadastro_centro_custo', 'cadastro_centro_custo.id', 'almoxarifado_entrada.centro_custo_id' ) ->join( 'cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id' ) ->join( 'cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id' ) ->leftJoin( 'almoxarifado_entrada_documento', 'almoxarifado_entrada_documento.entrada_id', 'almoxarifado_entrada.id' ) ->leftJoin( 'almoxarifado_documento_tipo', 'almoxarifado_documento_tipo.id', 'almoxarifado_entrada_documento.tipo_id' ) ->leftJoin( 'cadastro_fornecedor', 'cadastro_fornecedor.id', 'almoxarifado_entrada_documento.fornecedor_id' ) ->leftJoin( 'cadastro_subgrupo', 'cadastro_subgrupo.id', 'cadastro_material.subgrupo_id' ) ->leftJoin( 'cadastro_unidade_medida as apresentacao_unidade_medida', 'apresentacao_unidade_medida.id', 'cadastro_material.apresentacao_unidade_medida_id' ) ->when(request()->periodo['start'], fn ($q, $data) => $q ->where($tipo_data, '>=', Carbon::createFromFormat('d/m/Y', $data) ->setTime(0, 0, 0)) ) ->when(request()->periodo['end'], fn ($q, $data) => $q ->where($tipo_data, '<=', Carbon::createFromFormat('d/m/Y', $data) ->setTime(23, 59, 59)) ) ->when( request()->unidade_id, fn ($q, $id) => $q->where('cadastro_infraestrutura.unidade_id', $id) ) ->when( request()->infraestrutura_id, fn ($q, $id) => $q->where('cadastro_centro_custo.infraestrutura_id', $id) ) ->when( request()->centro_custo_id, fn ($q, $id) => $q->where('almoxarifado_entrada.centro_custo_id', $id) ) ->when( request()->grupo_id, fn ($q, $id) => $q->where('cadastro_material.grupo_id', $id) ) ->when( request()->grupo_id, fn ($q, $id) => $q->where('cadastro_material.grupo_id', $id) ) ->when( request()->subgrupo_id, fn ($q, $id) => $q->where('cadastro_material.subgrupo_id', $id) ) ->when( request()->fornecedor_id, fn ($q, $id) => $q->where('almoxarifado_entrada_documento.fornecedor_id', $id) ) ->when( request()->tipo_documento_id, fn ($q, $id) => $q->where('almoxarifado_entrada_documento.tipo_id', $id) ) ->when( request()->numero_pedido, fn ($q, $id) => $q->where('almoxarifado_entrada_documento.numero_pedido', $id) ) ->when( request()->material_id, fn ($q, $id) => $q->where('almoxarifado_entrada_item.material_id', $id) ) ->when( request()->tipo_entrada_id, fn ($q, $id) => $q->where('almoxarifado_entrada.tipo_id', $id) ) ->when( request()->sort_field, fn ($q, $campo) => $q->orderBy($campo, request()->sort_direction ?? 'asc') ) ->whereNull('almoxarifado_entrada_item.estornado_em') ->select( 'almoxarifado_entrada_documento.data', 'almoxarifado_entrada.finalizada_em', 'almoxarifado_entrada_tipo.nome as entrada', 'almoxarifado_documento_tipo.nome as documento', 'almoxarifado_entrada_documento.numero_pedido', 'almoxarifado_entrada_documento.numero', 'cadastro_fornecedor.nome_fantasia', 'cadastro_grupo.nome as grupo', 'cadastro_subgrupo.nome as subgrupo', DB::raw(MaterialService::getDescricaoCompletaRaw( 'cadastro_material', 'cadastro_apresentacao', 'apresentacao_unidade_medida' ) . " as material"), 'cadastro_material.codigo_material' , 'almoxarifado_entrada_item.lote', 'almoxarifado_entrada_item.validade_lote', 'almoxarifado_entrada_item.quantidade' , 'almoxarifado_entrada_item.valor_unitario' , DB::raw("almoxarifado_entrada_item.quantidade * almoxarifado_entrada_item.valor_unitario as valor_total"), 'cadastro_unidade.nome_fantasia AS unidade', DB::raw("COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS infraestrutura") ) ->get(); $totalizadores = [ 'valor_unitario' => $consulta->sum('valor_unitario'), 'total' => $consulta->sum('valor_total'), ]; return ['consulta' => $consulta, 'totalizadores' => $totalizadores]; } public static function list() { return [ 'additionals' => [], 'form' => [ 'fornecedores' => Fornecedor::orderBy('nome_fantasia')->get(['id', 'nome_fantasia']), '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:: whereNull('grupo_tipo_id') ->orWhere('grupo_tipo_id', '<>', GrupoTipo::EXAME) ->orderBy('nome') ->get() ->map(fn ($grupo) => [ 'id' => $grupo->id, 'nome' => $grupo->nome, 'subgrupos' => $grupo->subgrupos()->orderBy('nome')->get(['id', 'nome']) ]), 'tipos_documento' => DocumentoTipo::orderBy('nome')->get(['id', 'nome']), 'tipos' => EntradaTipo::orderBy('nome')->get(['id', 'nome']), 'tipo_data' => ['documento' => 'Documento', 'entrada' => 'Entrada'], ], 'model' => [ 'periodo' => [ 'start' => null, 'end' => null, ], 'tipo_data' => null, 'unidade_id' => null, 'infraestrutura_id' => null, 'centro_custo_id' => null, 'grupo_id' => null, 'subgrupo_id' => null, 'numero' => null, 'data' => null, 'data_documento' => null, 'tipo_entrada_id' => null, 'tipo_documento_id' => null, 'numero_documento' => null, 'fornecedor_id' => null, 'material_id' => null, ], ]; } public static function getPrintExportData() { $resultado = self::index(); $itens = $resultado['consulta']; $itens->each(function ($item) { $item->finalizada_em = (new Carbon($item->finalizada_em))->format('d/m/Y'); $item->data = (new Carbon($item->data))->format('d/m/Y'); $item->validade_lote = (new Carbon($item->validade_lote))->format('d/m/Y'); $item->valor_unitario = number_format($item->valor_unitario, 2, ',', '.'); $item->valor_total = number_format($item->valor_total, 2, ',', '.'); $item->quantidade = number_format($item->quantidade, 2, ',', '.'); }); $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); $fornecedor = Fornecedor::find(request()->fornecedor_id); $numero_documento = request()->numero_documento; $tipo_documento = DocumentoTipo::find(request()->tipo_documento_id); $tipo_entrada = EntradaTipo::find(request()->tipo_entrada_id); $material = Material::find(request()->material_id['id'] ?? null); 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'], 'fornecedor' => $fornecedor->nome_fantasia ?? 'Todos', 'tipo_documento' => $tipo_documento->nome ?? 'Todos', 'tipo_entrada' => $tipo_entrada->nome ?? 'Todos', 'material' => $material->descricao_completa ?? 'Todos', 'numero_documento' => $numero_documento ?? 'Todos', ]; } }