0, 'medicamentos' => 0]; DB::table('farmacia_alto_custo_processo_item_mes') ->select([ 'farmacia_alto_custo_processo_item_mes.retirado_paciente_em as data_dispensacao', 'cadastro_unidade.nome_fantasia AS unidade_nome_fantasia', DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS infraestrutura_nome'), 'cadastro_setor.nome AS setor_nome', 'cadastro_cidadao_usuario.nome AS usuario_nome', 'cadastro_cidadao_paciente.id AS paciente_id', 'cadastro_cidadao_paciente.nome AS paciente_nome', DB::raw(MaterialService::getDescricaoCompletaRaw( 'cadastro_material', 'cadastro_apresentacao', 'apresentacao_unidade_medida' ) . " AS material_descricao"), 'farmacia_alto_custo_processo_item_mes.quantidade_retirada AS quantidade', ]) ->join('farmacia_alto_custo_processo_item', 'farmacia_alto_custo_processo_item.id', 'farmacia_alto_custo_processo_item_mes.item_id') ->join('farmacia_alto_custo_processo', 'farmacia_alto_custo_processo.id', 'farmacia_alto_custo_processo_item.processo_id') ->join('cadastro_material', 'cadastro_material.id', 'farmacia_alto_custo_processo_item.material_id') ->join('cadastro_apresentacao', 'cadastro_apresentacao.id', 'cadastro_material.apresentacao_id') ->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'farmacia_alto_custo_processo.created_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_usuario', 'cadastro_usuario.id', 'farmacia_alto_custo_processo.usuario_solicitante_id') ->join('cadastro_cidadao AS cadastro_cidadao_usuario', 'cadastro_cidadao_usuario.id', 'cadastro_usuario.cidadao_id') ->join('cadastro_paciente', 'cadastro_paciente.id', 'farmacia_alto_custo_processo.paciente_id') ->join('cadastro_cidadao AS cadastro_cidadao_paciente', 'cadastro_cidadao_paciente.id', 'cadastro_paciente.cidadao_id') ->leftJoin( 'cadastro_unidade_medida as apresentacao_unidade_medida', 'apresentacao_unidade_medida.id', 'cadastro_material.apresentacao_unidade_medida_id' ) ->whereBetween('farmacia_alto_custo_processo_item_mes.retirado_paciente_em', [request()->get('start_date'), request()->get('end_date')]) ->where('farmacia_alto_custo_processo_item_mes.status_id', ProcessoItemMesStatus::RETIRADO_PACIENTE) ->when(request()->get('unidade_id'), function ($query) { $query->where('cadastro_unidade.id', request()->get('unidade_id')); }) ->when(request()->get('infraestrutura_id'), function ($query) { $query->where('cadastro_infraestrutura.id', request()->get('infraestrutura_id')); }) ->when(request()->get('setor_id'), function ($query) { $query->where('cadastro_setor.id', request()->get('setor_id')); }) ->when(request()->get('usuario_id'), function ($query) { $query->where('cadastro_usuario.id', request()->get('usuario_id')); }) ->when(request()->get('material_id'), function ($query) { $query->where('cadastro_material.id', request()->get('material_id')); }) ->get() ->each(function($dispensacao) use ($dispensacoes, $totalizadores) { if (is_null($dispensacoes->where('paciente_id', $dispensacao->paciente_id)->first())) { $totalizadores->pacientes++; } $totalizadores->medicamentos += $dispensacao->quantidade; $dispensacoes->push($dispensacao); }); return compact('dispensacoes', 'totalizadores'); } public static function create() { return [ 'form' => self::getForm(), 'model' => self::getModel(), ]; } public static function list() { switch (request()->get('listar')) { case 'unidades': return self::getUnidades(request()->get('start_date'), request()->get('end_date')); break; case 'infraestruturas': return self::getInfraestruturas(request()->get('start_date'), request()->get('end_date'), request()->get('unidade_id')); break; case 'setores': return self::getSetores(request()->get('start_date'), request()->get('end_date'), request()->get('infraestrutura_id')); break; case 'usuarios': return self::getUsuarios(request()->get('start_date'), request()->get('end_date'), request()->get('infraestrutura_id'), request()->get('setor_id')); break; default: return []; break; } } public static function autocompleteMaterial() { return DB::table('cadastro_material') ->join('cadastro_apresentacao', 'cadastro_apresentacao.id', 'cadastro_material.apresentacao_id') ->leftJoin( 'cadastro_unidade_medida as apresentacao_unidade_medida', 'apresentacao_unidade_medida.id', 'cadastro_material.apresentacao_unidade_medida_id' ) ->select([ 'cadastro_material.id', DB::raw(MaterialService::getDescricaoCompletaRaw( 'cadastro_material', 'cadastro_apresentacao', 'apresentacao_unidade_medida' ) . " AS descricao") ]) ->whereExists(function ($query) { $query->select(DB::raw(1)) ->from('farmacia_alto_custo_processo_item_mes') ->join('farmacia_alto_custo_processo_item', 'farmacia_alto_custo_processo_item.id', 'farmacia_alto_custo_processo_item_mes.item_id') ->join('farmacia_alto_custo_processo', 'farmacia_alto_custo_processo.id', 'farmacia_alto_custo_processo_item.processo_id') ->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'farmacia_alto_custo_processo.created_centro_custo_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_centro_custo.infraestrutura_id') ->whereBetween('farmacia_alto_custo_processo_item_mes.retirado_paciente_em', [request()->get('start_date'), request()->get('end_date')]) ->where('farmacia_alto_custo_processo_item_mes.status_id', ProcessoItemMesStatus::RETIRADO_PACIENTE) ->when(request()->get('unidade_id'), function ($query) { $query->where('cadastro_infraestrutura.unidade_id', request()->get('unidade_id')); }) ->when(request()->get('infraestrutura_id'), function ($query) { $query->where('cadastro_centro_custo.infraestrutura_id', request()->get('infraestrutura_id')); }) ->when(request()->get('setor_id'), function ($query) { $query->where('cadastro_centro_custo.setor_id', request()->get('setor_id')); }) ->when(request()->get('usuario_id'), function ($query) { $query->where('farmacia_alto_custo_processo.usuario_solicitante_id', request()->get('usuario_id')); }) ->whereColumn('farmacia_alto_custo_processo_item.material_id', 'cadastro_material.id'); }); } public static function getPrintData() { $data = self::index(); $data['dispensacoes']->each(function ($dispensacao) { $dispensacao->data_dispensacao = (new Carbon($dispensacao->data_dispensacao))->format('d/m/Y'); }); $unidade = Unidade::find(request()->get('unidade_id')); $infraestrutura = Infraestrutura::find(request()->get('infraestrutura_id')); $setor = Setor::find(request()->get('setor_id')); $usuario = Usuario::find(request()->get('usuario_id')); $material = Material::find(request()->get('material_id')); $paciente = Paciente::find(request()->get('paciente_id')); return [ 'start_date' => Carbon::create(request()->get('start_date'))->format('d/m/Y'), 'end_date' => Carbon::create(request()->get('end_date'))->format('d/m/Y'), 'unidade_nome_fantasia' => $unidade->nome_fantasia ?? 'Todas', 'infraestrutura_nome' => $infraestrutura->nome ?? 'Todos', 'setor_nome' => $setor->nome ?? 'Todos', 'usuario_nome' => $usuario->cidadao->nome ?? 'Todos', 'paciente_nome' => $paciente->cidadao->nome ?? 'Todos', 'material_descricao' => $material->descricao_completa ?? 'Todos', 'columns' => collect(request()->get('selected_columns')), 'itens' => $data, ]; } private static function getForm() { return [ 'unidades' => [], 'infraestruturas' => [], 'setores' => [], 'usuarios' => [], ]; } private static function getModel() { return [ 'periodo' => [ 'start' => null, 'end' => null, ], 'unidade_id' => null, 'infraestrutura_id' => null, 'setor_id' => null, 'usuario_id' => null, 'material' => [ 'id' => null, 'descricao' => null, ], ]; } private static function getUnidades($startDate, $endDate) { return DB::table('cadastro_unidade') ->select([ 'id', 'nome_fantasia' ]) ->whereExists(function ($query) use ($startDate, $endDate) { $query->select(DB::raw(1)) ->from('farmacia_alto_custo_processo_item_mes') ->join('farmacia_alto_custo_processo_item', 'farmacia_alto_custo_processo_item.id', 'farmacia_alto_custo_processo_item_mes.item_id') ->join('farmacia_alto_custo_processo', 'farmacia_alto_custo_processo.id', 'farmacia_alto_custo_processo_item.processo_id') ->whereBetween('farmacia_alto_custo_processo_item_mes.retirado_paciente_em', [$startDate, $endDate]) ->where('farmacia_alto_custo_processo_item_mes.status_id', ProcessoItemMesStatus::RETIRADO_PACIENTE) ->whereColumn('farmacia_alto_custo_processo.unidade_solicitante_id', 'cadastro_unidade.id'); }) ->orderBy('cadastro_unidade.nome_fantasia') ->get(); } private static function getInfraestruturas($startDate, $endDate, $unidadeId) { return DB::table('cadastro_infraestrutura') ->select([ 'cadastro_infraestrutura.id', DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome'), ]) ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->where('cadastro_unidade.id', $unidadeId) ->whereExists(function ($query) use ($startDate, $endDate) { $query->select(DB::raw(1)) ->from('farmacia_alto_custo_processo_item_mes') ->join('farmacia_alto_custo_processo_item', 'farmacia_alto_custo_processo_item.id', 'farmacia_alto_custo_processo_item_mes.item_id') ->join('farmacia_alto_custo_processo', 'farmacia_alto_custo_processo.id', 'farmacia_alto_custo_processo_item.processo_id') ->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'farmacia_alto_custo_processo.created_centro_custo_id') ->whereBetween('farmacia_alto_custo_processo_item_mes.retirado_paciente_em', [$startDate, $endDate]) ->where('farmacia_alto_custo_processo_item_mes.status_id', ProcessoItemMesStatus::RETIRADO_PACIENTE) ->whereColumn('cadastro_centro_custo.infraestrutura_id', 'cadastro_infraestrutura.id'); }) ->orderByRaw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia)') ->get(); } private static function getSetores($startDate, $endDate, $infraestruturaId) { return DB::table('cadastro_setor') ->select([ 'cadastro_setor.id', 'cadastro_setor.nome', ]) ->whereExists(function ($query) use ($startDate, $endDate, $infraestruturaId) { $query->select(DB::raw(1)) ->from('farmacia_alto_custo_processo_item_mes') ->join('farmacia_alto_custo_processo_item', 'farmacia_alto_custo_processo_item.id', 'farmacia_alto_custo_processo_item_mes.item_id') ->join('farmacia_alto_custo_processo', 'farmacia_alto_custo_processo.id', 'farmacia_alto_custo_processo_item.processo_id') ->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'farmacia_alto_custo_processo.created_centro_custo_id') ->whereBetween('farmacia_alto_custo_processo_item_mes.retirado_paciente_em', [$startDate, $endDate]) ->where('cadastro_centro_custo.infraestrutura_id', $infraestruturaId) ->where('farmacia_alto_custo_processo_item_mes.status_id', ProcessoItemMesStatus::RETIRADO_PACIENTE) ->whereColumn('cadastro_centro_custo.setor_id', 'cadastro_setor.id'); }) ->orderBy('cadastro_setor.nome') ->get(); } private static function getUsuarios($startDate, $endDate, $infraestruturaId, $setorId) { return DB::table('cadastro_usuario') ->select([ 'cadastro_usuario.id', 'cadastro_cidadao.nome', ]) ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id') ->whereExists(function ($query) use ($startDate, $endDate, $infraestruturaId, $setorId) { $query->select(DB::raw(1)) ->from('farmacia_alto_custo_processo_item_mes') ->join('farmacia_alto_custo_processo_item', 'farmacia_alto_custo_processo_item.id', 'farmacia_alto_custo_processo_item_mes.item_id') ->join('farmacia_alto_custo_processo', 'farmacia_alto_custo_processo.id', 'farmacia_alto_custo_processo_item.processo_id') ->join('cadastro_centro_custo', 'cadastro_centro_custo.id', 'farmacia_alto_custo_processo.created_centro_custo_id') ->whereBetween('farmacia_alto_custo_processo_item_mes.retirado_paciente_em', [$startDate, $endDate]) ->where('cadastro_centro_custo.infraestrutura_id', $infraestruturaId) ->where('cadastro_centro_custo.setor_id', $setorId) ->where('farmacia_alto_custo_processo_item_mes.status_id', ProcessoItemMesStatus::RETIRADO_PACIENTE) ->whereColumn('farmacia_alto_custo_processo.usuario_solicitante_id', 'cadastro_usuario.id'); }) ->orderBy('cadastro_cidadao.nome') ->get(); } }