USP_SPONSORSHIPSMARTFIELD_AVAILABLEVALUESCHILD

Calculates the values for sponsorship opportunity child available smart fields.

Parameters

Parameter Parameter Type Mode Description
@DIMENSIONLIST xml IN
@CALCULATIONTYPE tinyint IN
@ASOF datetime IN

Definition

Copy


CREATE procedure dbo.USP_SPONSORSHIPSMARTFIELD_AVAILABLEVALUESCHILD(
    @DIMENSIONLIST xml,
    @CALCULATIONTYPE tinyint = 0,
    @ASOF datetime
)
as
begin
    set nocount on;

    declare @DIMENSIONS table (FIELDID nvarchar(50))
    declare @LOCATIONDIMENSIONS table (FIELDID nvarchar(36))

    declare @NULLID uniqueidentifier
    set @NULLID = cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier)

    insert into @DIMENSIONS
    select *
    from dbo.UFN_SPONSORSHIPOPPORTUNITYDIMENSIONLIST_FROMITEMLISTXML(@DIMENSIONLIST)

    declare @CHECKERROR int
    select @CHECKERROR = count(*)
    from (select FIELDID from @DIMENSIONS group by FIELDID having count(*)>1) X;

    if @CHECKERROR > 1
    begin
      raiserror('BBERR_DUPLICATEDIMENSION', 13, 1);
      return 1
    end

    insert into @LOCATIONDIMENSIONS
    select D.FIELDID
    from @DIMENSIONS D
    inner join SPONSORSHIPLOCATIONTYPECODE on D.FIELDID = cast(SPONSORSHIPLOCATIONTYPECODE.ID as nvarchar(36))

    if @@ROWCOUNT > 1
    begin
      raiserror('Process could not finish. More than one location type listed.', 13, 1);
      return 1
    end

    delete from @DIMENSIONS
    where FIELDID in(select cast(FIELDID as nvarchar(36)) from @LOCATIONDIMENSIONS)

    declare @SEGMENTS table(ID uniqueidentifier,
                            SPONSORSHIPOPPORTUNITYGROUPID uniqueidentifier,
                            SPONSORSHIPLOCATIONID uniqueidentifier,
                            SPROPPAGERANGEID uniqueidentifier,
                            SPROPPCONDITIONCODEID uniqueidentifier,
                            GENDERCODE tinyint);

    insert into @SEGMENTS
    select
        newid(),
        SPONSORSHIPOPPORTUNITYGROUP.ID,
        SPONSORSHIPLOCATION.ID,
        SPONSORSHIPOPPORTUNITYAGERANGE.ID,
        SPROPPCHILDCONDITIONCODE.ID,
        GENDER.GENDERCODE
    from SPONSORSHIPOPPORTUNITYGROUP
    left outer join dbo.SPONSORSHIPLOCATION on SPONSORSHIPLOCATION.SPONSORSHIPLOCATIONTYPECODEID in(select FIELDID from @LOCATIONDIMENSIONS)
    left outer join dbo.SPONSORSHIPOPPORTUNITYAGERANGE on 'Child age range' in(select FIELDID from @DIMENSIONS)
    left outer join dbo.SPROPPCHILDCONDITIONCODE on 'Child disability/illness' in(select FIELDID from @DIMENSIONS)
    left outer join (select 0 GENDERCODE union all select 1 union all select 2) GENDER on GENDER.GENDERCODE = 0 or 'Child gender' in(select FIELDID from @DIMENSIONS)
    where SPONSORSHIPOPPORTUNITYGROUP.SPONSORSHIPOPPORTUNITYTYPECODE = 1;

    ------------------------------------------------------------------


    declare @OPPORTUNITIES table (OPPORTUNITYID uniqueidentifier,
                                  SEGMENTID uniqueidentifier,
                                  AVAILABLE bit)

    insert into @OPPORTUNITIES
    select SPONSORSHIPOPPORTUNITY.ID, SEGMENT.ID, case when AVAILABILITYCODE = 0 then 1 else 0 end
    from dbo.SPONSORSHIPOPPORTUNITY
    inner join dbo.SPONSORSHIPLOCATION OPPORTUNITYLOCATION on OPPORTUNITYLOCATION.ID = SPONSORSHIPOPPORTUNITY.SPONSORSHIPLOCATIONID
    left outer join dbo.SPONSORSHIPLOCATION DIMENSIONLOCATION on OPPORTUNITYLOCATION.HIERARCHYPATH.IsDescendantOf(DIMENSIONLOCATION.HIERARCHYPATH) = 1 and DIMENSIONLOCATION.SPONSORSHIPLOCATIONTYPECODEID in(select FIELDID from @LOCATIONDIMENSIONS)
    inner join dbo.SPONSORSHIPOPPORTUNITYCHILD on SPONSORSHIPOPPORTUNITYCHILD.ID = SPONSORSHIPOPPORTUNITY.ID
  inner join dbo.CONSTITUENT on CONSTITUENT.ID = SPONSORSHIPOPPORTUNITYCHILD.CONSTITUENTID
    inner join @SEGMENTS SEGMENT on
        SEGMENT.SPONSORSHIPOPPORTUNITYGROUPID = SPONSORSHIPOPPORTUNITY.SPONSORSHIPOPPORTUNITYGROUPID and
        isnull(SEGMENT.SPONSORSHIPLOCATIONID,@NULLID) = isnull(DIMENSIONLOCATION.ID,@NULLID) and
        isnull(SEGMENT.SPROPPAGERANGEID,@NULLID) = case when (select count(*) from @DIMENSIONS where FIELDID = 'Child age range') = 1 then (select ID from dbo.SPONSORSHIPOPPORTUNITYAGERANGE where CONSTITUENT.BIRTHDATE<>'00000000' and dbo.UFN_AGEFROMFUZZYDATE(CONSTITUENT.BIRTHDATE,getdate()) between SPONSORSHIPOPPORTUNITYAGERANGE.MINAGE and SPONSORSHIPOPPORTUNITYAGERANGE.MAXAGE) else @NULLID end and
        isnull(SEGMENT.SPROPPCONDITIONCODEID,@NULLID) = case when (select count(*) from @DIMENSIONS where FIELDID = 'Child disability/illness') = 1 then SPONSORSHIPOPPORTUNITYCHILD.SPROPPCHILDCONDITIONCODEID else @NULLID end and
        SEGMENT.GENDERCODE = case when (select count(*) from @DIMENSIONS where FIELDID = 'Child gender') = 1 then CONSTITUENT.GENDERCODE else 0 end
    where SPONSORSHIPOPPORTUNITY.ELIGIBILITYCODE = 1
    and (@CALCULATIONTYPE = 1 or SPONSORSHIPOPPORTUNITY.AVAILABILITYCODE = 0);


    if @CALCULATIONTYPE = 0  -- count

        select O.OPPORTUNITYID, S.VAL
        from @OPPORTUNITIES O
        inner join (select SEGMENTID, count(*) VAL
                    from @OPPORTUNITIES
                    group by SEGMENTID) S on S.SEGMENTID = O.SEGMENTID;

    else if @CALCULATIONTYPE = 1    -- percent available

        select O.OPPORTUNITYID, S.VAL
        from @OPPORTUNITIES O
        inner join (select SEGMENTID,
                           cast(sum(cast(AVAILABLE as tinyint)) as float)/count(*)*100 VAL
                    from @OPPORTUNITIES
                    group by SEGMENTID) S on S.SEGMENTID = O.SEGMENTID;

end