PLSQL search procedure to return best and near matches based on multiple criteria
if I correctly understood, that criteria: 

1) status = pending 

2) company = PipedPiper 

3) type=manual 

4) date = Not selected

means (1 or 2 or 3 or 4) = true

if so, there I can see two way.
firstly you can use dynamic sql, secondly you can use case keyword. I think you know how to use dynamic sql, I will show example for using case keyword.

select * from your_table t

   where case 
         when param_status != 'Not selected' and param_status = t.status then 1
         when param_status = 'Not selected' then 1 else 0 end = 1

         and case 
         when param_company != 'Not selected' and param_company = t.company then 1
         when param_company = 'Not selected' then 1 else 0 end = 1

       ...

    -- Checking filter parameters, if non of selected then returning empty --
     and  case when param_status = 'Not selected' and param_company = 'Not selected' ... 
         then 0 else 1 end = 1 


I hope this will help you.