Basically you want to add something like:
o1.DATE between :param_from and :param_to
in every 'order' subquery. :notation
is a standard for oracle parameters, but how parameters will be bound depends on environment that you use to execute your query. So please write what environment/tool you use.
You can try to simplyfy the query (I hope I didn't make any syntax error, I wrote it in notepad...):
select
ASSIGNED_USER,
UID,
count(AREA1) TOTAL_AREA1,
count(1) TOTAL,
count(OPENED) TOTAL_OPENED,
count (RETURNED) TOTAL_RETURNED
from
(
select
u1.id UID,
u1.FIRST_NAME || ' ' || u1.LAST_NAME as ASSIGNED_USER,
case when dm.CODE='AREA1' then 1 else null end AREA1,
case when ww1.STATUS_CODE='S_ORD_CA_021' then 1 else null end OPENED,
case when ww1.STATUS_CODE in
('S_ORD_CA_015', 'S_ORD_CA_016', 'S_ORD_CA_017','S_ORD_CA_018') then 1
else null end RETURNED
from users u1
left outer join WORKFLOW_WORKITEM ww1 on AND ww1.ASSIGNED_TO = U1.ID
AND ww1.ENTITY_NAME = 'Order'
left outer join orders o1 on o1.ORDER_KEY = ww1.ENTITY_KEY_NUM
left outer join domains dm on ww1.DOMAIN_ID=dm.ID
where
o1.DATE between :param_from and :param_to
-- you can add any other conditions that may
-- cut number of selected records
-- to minimum required to get expected results
)
group by UID, ASSIGNED_USER;