Adding
This commit is contained in:
+110
@@ -0,0 +1,110 @@
|
||||
WITH PersonLookup AS
|
||||
(
|
||||
SELECT DISTINCT
|
||||
MAX(n.PERSNBR) AS PERSNBR,
|
||||
MAX(n.SHAREACCTNBR) AS SHAREACCTNBR,
|
||||
MAX(n.MEMBERAGREENBR) AS MEMBERAGREENBR,
|
||||
MAX(n.PRIORITY) AS PRIORITY
|
||||
FROM (
|
||||
SELECT a.TAXRPTFORPERSNBR AS PERSNBR, a.ACCTNBR AS SHAREACCTNBR, m.MEMBERAGREENBR, 0 AS PRIORITY
|
||||
FROM ACCT a
|
||||
LEFT OUTER JOIN MEMBERAGREEMENT m ON m.PRIMARYPERSNBR = a.TAXRPTFORPERSNBR
|
||||
LEFT OUTER JOIN OSIBANK.ACCTACCTROLEPERS a1 ON a1.ACCTNBR = a.ACCTNBR AND a.TAXRPTFORPERSNBR <> a1.PERSNBR AND a1.ACCTROLECD = 'CUST'
|
||||
WHERE a1.ACCTROLECD IS NULL
|
||||
UNION
|
||||
SELECT DISTINCT a.PERSNBR, a3.ACCTNBR AS SHAREACCTNBR, NULL AS MEMBERAGREENBR, 1 AS PRIORITY
|
||||
FROM OSIBANK.ACCTACCTROLEPERS a
|
||||
INNER JOIN OSIBANK.ACCTROLE a2 ON a.ACCTROLECD = a2.ACCTROLECD AND a2.TRANSACTYN = 'Y'
|
||||
INNER JOIN ACCT a3 ON a.ACCTNBR IN (a3.ACCTNBR, a3.STMTACCTNBR)
|
||||
LEFT OUTER JOIN MEMBERAGREEMENT e ON e.SHAREACCTNBR = a3.STMTACCTNBR
|
||||
WHERE a.EFFDATE <= CURRENT_DATE
|
||||
AND a.EFFDATE IS NOT NULL
|
||||
) n
|
||||
WHERE n.PERSNBR = :personNumber
|
||||
GROUP BY (n.PERSNBR, n.SHAREACCTNBR, n.MEMBERAGREENBR)
|
||||
ORDER BY (MAX(n.PRIORITY))
|
||||
)
|
||||
,Person AS
|
||||
(
|
||||
SELECT DISTINCT e.FIRSTNAME||COALESCE(nullif(' '||e.MDLINIT,' '), '')||' '||e.LASTNAME AS PERSONNAME, l.PERSNBR, l.MEMBERAGREENBR, l.SHAREACCTNBR
|
||||
FROM OSIBANK.PERS e
|
||||
INNER JOIN PersonLookup l ON l.PERSNBR=e.PERSNBR
|
||||
)
|
||||
,Phone_list AS
|
||||
(
|
||||
SELECT DISTINCT p.PERSNBR, p.AREACD||p.EXCHANGE||p.PHONENBR AS phone_number, p.PHONEUSECD AS phone_type, p.PHONESEQ,
|
||||
ROW_NUMBER () OVER(PARTITION BY p.PERSNBR, p.PHONEUSECD ORDER BY PREFERREDYN DESC, p.PHONESEQ DESC) AS rn
|
||||
FROM OSIBANK.PERSPHONE p
|
||||
INNER JOIN PersonLookup l ON l.PERSNBR=p.PERSNBR
|
||||
WHERE p.PHONEUSECD IN ('PER', 'CELL', 'BUS')
|
||||
)
|
||||
,phone_part AS
|
||||
(
|
||||
SELECT * FROM
|
||||
(
|
||||
SELECT PERSNBR, phone_type, phone_number
|
||||
FROM Phone_list
|
||||
WHERE rn=1
|
||||
)
|
||||
PIVOT
|
||||
(
|
||||
MAX(phone_number) FOR phone_type IN ('PER' AS Home_Phone, 'CELL' AS Cell_Phone, 'BUS' AS Business_Phone)
|
||||
)
|
||||
)
|
||||
,SharedAcctTran AS
|
||||
(
|
||||
SELECT t.ACCTNBR, a.PERSNBR, t.RTXNTYPCD, t.ORIGPOSTDATE, t.TRANAMT, a.SHAREACCTNBR,
|
||||
CASE WHEN t.RTXNTYPCD = 'WTH' THEN 'WTH'
|
||||
WHEN t.RTXNTYPCD IN ('DEP', 'XDEP') THEN 'DEP' END AS TransType
|
||||
FROM PersonLookup a
|
||||
INNER JOIN OSIBANK.RTXN t ON t.ACCTNBR=a.SHAREACCTNBR AND t.RTXNTYPCD IN ('WTH','DEP','XDEP')
|
||||
ORDER BY t.ORIGPOSTDATE DESC
|
||||
FETCH FIRST 1000 ROWS ONLY
|
||||
)
|
||||
,SharedAcctTranOrder AS
|
||||
(
|
||||
SELECT ACCTNBR, PERSNBR, ORIGPOSTDATE, TRANAMT, RTXNTYPCD, TransType, SHAREACCTNBR,
|
||||
ROW_NUMBER() OVER(PARTITION BY ACCTNBR, TransType ORDER BY ORIGPOSTDATE DESC) AS rn
|
||||
FROM SharedAcctTran
|
||||
)
|
||||
,SharedAcctTran_Part AS
|
||||
(
|
||||
SELECT ACCTNBR, PERSNBR, TransType, SHAREACCTNBR,
|
||||
CASE WHEN TransType='WTH' THEN ORIGPOSTDATE END AS Last_ShareAcct_Withdrawal_DateTime,
|
||||
CASE WHEN TransType='DEP' THEN ORIGPOSTDATE END AS Last_Share_Deposit_Date,
|
||||
CASE WHEN TransType='DEP' THEN TRANAMT END AS Last_Share_Deposit_Amount
|
||||
FROM SharedAcctTranOrder
|
||||
WHERE rn=1
|
||||
)
|
||||
,Autoloan_Part AS
|
||||
(
|
||||
SELECT DISTINCT MAX(l.PERSNBR) AS PERSNBR, MAX(pr.PROPDESC) AS PROPDESC
|
||||
FROM OSIBANK.ACCT a
|
||||
INNER JOIN PersonLookup l ON a.ACCTNBR = l.SHAREACCTNBR OR a.TAXRPTFORPERSNBR = l.PERSNBR
|
||||
INNER JOIN OSIBANK.ACCTPROP AP ON AP.ACCTNBR=a.ACCTNBR
|
||||
INNER JOIN OSIBANK.prop pr ON pr.propnbr=ap.PROPNBR
|
||||
WHERE a.MJACCTTYPCD='CNS'
|
||||
AND a.CURRMIACCTTYPCD IN ('DL01','DL02','DL03','DL04','DV01','DV02','DV03','DV04')
|
||||
GROUP BY (l.PERSNBR)
|
||||
ORDER BY a.CONTRACTDATE DESC
|
||||
)
|
||||
SELECT DISTINCT
|
||||
MAX(p.PERSNBR) AS PersonNumber,
|
||||
MAX(e.PERSONNAME) AS PERSONNAME,
|
||||
MAX(e.MEMBERAGREENBR) AS MemberNumber,
|
||||
MAX(p.Home_Phone) AS HomePhone,
|
||||
MAX(p.Cell_Phone) AS CellPhone,
|
||||
MAX(p.Business_Phone) AS BusinessPhone,
|
||||
MAX(w.Last_ShareAcct_Withdrawal_DateTime) AS LastShareAcctWithdrawalTime,
|
||||
MAX(d.Last_Share_Deposit_Date) AS LastShareDepositDate,
|
||||
MAX(d.Last_Share_Deposit_Amount) AS LastShareDepositAmount,
|
||||
MAX(l.PROPDESC) AS VehicleYearMakeModelVin,
|
||||
MAX(puf.VALUE) AS PassPhrase
|
||||
FROM phone_part p
|
||||
LEFT JOIN Person e ON p.PERSNBR=e.PERSNBR
|
||||
LEFT JOIN PERSUSERFIELD puf on p.PERSNBR=puf.PERSNBR AND puf.userfieldcd='PASS'
|
||||
LEFT JOIN SharedAcctTran_Part w ON e.SHAREACCTNBR=w.SHAREACCTNBR AND w.TransType='WTH'
|
||||
LEFT JOIN SharedAcctTran_Part d ON e.SHAREACCTNBR=d.SHAREACCTNBR AND d.TransType='DEP'
|
||||
LEFT JOIN Autoloan_Part l ON p.PERSNBR=l.PERSNBR
|
||||
GROUP BY (p.PERSNBR)
|
||||
FETCH FIRST 2 ROWS ONLY
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
WITH PersonLookup AS
|
||||
(
|
||||
SELECT DISTINCT
|
||||
MAX(n.PERSNBR) AS PERSNBR,
|
||||
MAX(n.SHAREACCTNBR) AS SHAREACCTNBR,
|
||||
MAX(n.MEMBERAGREENBR) AS MEMBERAGREENBR,
|
||||
MAX(n.PRIORITY) AS PRIORITY
|
||||
FROM (
|
||||
SELECT a.TAXRPTFORPERSNBR AS PERSNBR, a.ACCTNBR AS SHAREACCTNBR, m.MEMBERAGREENBR, 0 AS PRIORITY
|
||||
FROM ACCT a
|
||||
LEFT OUTER JOIN MEMBERAGREEMENT m ON m.PRIMARYPERSNBR = a.TAXRPTFORPERSNBR
|
||||
LEFT OUTER JOIN OSIBANK.ACCTACCTROLEPERS a1 ON a1.ACCTNBR = a.ACCTNBR AND a.TAXRPTFORPERSNBR <> a1.PERSNBR AND a1.ACCTROLECD = 'CUST'
|
||||
WHERE a1.ACCTROLECD IS NULL
|
||||
UNION
|
||||
SELECT DISTINCT a.PERSNBR, a3.ACCTNBR AS SHAREACCTNBR, NULL AS MEMBERAGREENBR, 1 AS PRIORITY
|
||||
FROM OSIBANK.ACCTACCTROLEPERS a
|
||||
INNER JOIN OSIBANK.ACCTROLE a2 ON a.ACCTROLECD = a2.ACCTROLECD AND a2.TRANSACTYN = 'Y'
|
||||
INNER JOIN ACCT a3 ON a.ACCTNBR IN (a3.ACCTNBR, a3.STMTACCTNBR)
|
||||
LEFT OUTER JOIN MEMBERAGREEMENT e ON e.SHAREACCTNBR = a3.STMTACCTNBR
|
||||
WHERE a.EFFDATE <= CURRENT_DATE
|
||||
AND a.EFFDATE IS NOT NULL
|
||||
) n
|
||||
INNER JOIN (
|
||||
SELECT DISTINCT p2.PERSNBR
|
||||
FROM PERSPHONE p2
|
||||
WHERE p2.AREACD||p2.EXCHANGE||p2.PHONENBR = :phoneNumber
|
||||
FETCH FIRST 50 ROWS ONLY
|
||||
) l ON l.PERSNBR = n.PERSNBR
|
||||
GROUP BY (n.PERSNBR, n.SHAREACCTNBR)
|
||||
ORDER BY (MAX(n.PRIORITY))
|
||||
)
|
||||
,Person AS
|
||||
(
|
||||
SELECT DISTINCT e.FIRSTNAME||COALESCE(nullif(' '||e.MDLINIT,' '), '')||' '||e.LASTNAME AS PERSONNAME, l.PERSNBR, l.MEMBERAGREENBR, l.SHAREACCTNBR
|
||||
FROM OSIBANK.PERS e
|
||||
INNER JOIN PersonLookup l ON l.PERSNBR=e.PERSNBR
|
||||
)
|
||||
,Phone_list AS
|
||||
(
|
||||
SELECT DISTINCT p.PERSNBR, p.AREACD||p.EXCHANGE||p.PHONENBR AS phone_number, p.PHONEUSECD AS phone_type, p.PHONESEQ,
|
||||
ROW_NUMBER () OVER(PARTITION BY p.PERSNBR, p.PHONEUSECD ORDER BY PREFERREDYN DESC, p.PHONESEQ DESC) AS rn
|
||||
FROM OSIBANK.PERSPHONE p
|
||||
INNER JOIN PersonLookup l ON l.PERSNBR=p.PERSNBR
|
||||
WHERE p.PHONEUSECD IN ('PER', 'CELL', 'BUS')
|
||||
)
|
||||
,phone_part AS
|
||||
(
|
||||
SELECT * FROM
|
||||
(
|
||||
SELECT PERSNBR, phone_type, phone_number
|
||||
FROM Phone_list
|
||||
WHERE rn=1
|
||||
)
|
||||
PIVOT
|
||||
(
|
||||
MAX(phone_number) FOR phone_type IN ('PER' AS Home_Phone, 'CELL' AS Cell_Phone, 'BUS' AS Business_Phone)
|
||||
)
|
||||
)
|
||||
,SharedAcctTran AS
|
||||
(
|
||||
SELECT t.ACCTNBR, a.PERSNBR, t.RTXNTYPCD, t.ORIGPOSTDATE, t.TRANAMT, a.SHAREACCTNBR,
|
||||
CASE WHEN t.RTXNTYPCD = 'WTH' THEN 'WTH'
|
||||
WHEN t.RTXNTYPCD IN ('DEP', 'XDEP') THEN 'DEP' END AS TransType
|
||||
FROM PersonLookup a
|
||||
INNER JOIN OSIBANK.RTXN t ON t.ACCTNBR=a.SHAREACCTNBR AND t.RTXNTYPCD IN ('WTH','DEP','XDEP')
|
||||
ORDER BY t.ORIGPOSTDATE DESC
|
||||
FETCH FIRST 1000 ROWS ONLY
|
||||
)
|
||||
,SharedAcctTranOrder AS
|
||||
(
|
||||
SELECT ACCTNBR, PERSNBR, ORIGPOSTDATE, TRANAMT, RTXNTYPCD, TransType, SHAREACCTNBR,
|
||||
ROW_NUMBER() OVER(PARTITION BY ACCTNBR, TransType ORDER BY ORIGPOSTDATE DESC) AS rn
|
||||
FROM SharedAcctTran
|
||||
)
|
||||
,SharedAcctTran_Part AS
|
||||
(
|
||||
SELECT ACCTNBR, PERSNBR, TransType, SHAREACCTNBR,
|
||||
CASE WHEN TransType='WTH' THEN ORIGPOSTDATE END AS Last_ShareAcct_Withdrawal_DateTime,
|
||||
CASE WHEN TransType='DEP' THEN ORIGPOSTDATE END AS Last_Share_Deposit_Date,
|
||||
CASE WHEN TransType='DEP' THEN TRANAMT END AS Last_Share_Deposit_Amount
|
||||
FROM SharedAcctTranOrder
|
||||
WHERE rn=1
|
||||
)
|
||||
,Autoloan_Part AS
|
||||
(
|
||||
SELECT DISTINCT MAX(l.PERSNBR) AS PERSNBR, MAX(pr.PROPDESC) AS PROPDESC
|
||||
FROM OSIBANK.ACCT a
|
||||
INNER JOIN PersonLookup l ON a.ACCTNBR = l.SHAREACCTNBR OR a.TAXRPTFORPERSNBR = l.PERSNBR
|
||||
INNER JOIN OSIBANK.ACCTPROP AP ON AP.ACCTNBR=a.ACCTNBR
|
||||
INNER JOIN OSIBANK.prop pr ON pr.propnbr=ap.PROPNBR
|
||||
WHERE a.MJACCTTYPCD='CNS'
|
||||
AND a.CURRMIACCTTYPCD IN ('DL01','DL02','DL03','DL04','DV01','DV02','DV03','DV04')
|
||||
GROUP BY (l.PERSNBR)
|
||||
ORDER BY a.CONTRACTDATE DESC
|
||||
)
|
||||
SELECT DISTINCT
|
||||
MAX(p.PERSNBR) AS PersonNumber,
|
||||
MAX(e.PERSONNAME) AS PERSONNAME,
|
||||
MAX(e.MEMBERAGREENBR) AS MemberNumber,
|
||||
MAX(p.Home_Phone) AS HomePhone,
|
||||
MAX(p.Cell_Phone) AS CellPhone,
|
||||
MAX(p.Business_Phone) AS BusinessPhone,
|
||||
MAX(w.Last_ShareAcct_Withdrawal_DateTime) AS LastShareAcctWithdrawalTime,
|
||||
MAX(d.Last_Share_Deposit_Date) AS LastShareDepositDate,
|
||||
MAX(d.Last_Share_Deposit_Amount) AS LastShareDepositAmount,
|
||||
MAX(l.PROPDESC) AS VehicleYearMakeModelVin,
|
||||
MAX(puf.VALUE) AS PassPhrase
|
||||
FROM phone_part p
|
||||
LEFT JOIN Person e ON p.PERSNBR=e.PERSNBR
|
||||
LEFT JOIN PERSUSERFIELD puf on p.PERSNBR=puf.PERSNBR AND puf.userfieldcd='PASS'
|
||||
LEFT JOIN SharedAcctTran_Part w ON e.SHAREACCTNBR=w.SHAREACCTNBR AND w.TransType='WTH'
|
||||
LEFT JOIN SharedAcctTran_Part d ON e.SHAREACCTNBR=d.SHAREACCTNBR AND d.TransType='DEP'
|
||||
LEFT JOIN Autoloan_Part l ON p.PERSNBR=l.PERSNBR
|
||||
GROUP BY (p.PERSNBR)
|
||||
FETCH FIRST 2 ROWS ONLY
|
||||
+143
@@ -0,0 +1,143 @@
|
||||
/*New Activity Manager Incentive Referral Query
|
||||
----------------------------------
|
||||
DESCRIPTION:
|
||||
Get all Activity Manager entries associated with incented referrals.
|
||||
|
||||
Supplies Activity Data, Associate Name information, as well as the Agreement Number, Card Status (Should always be ISS (issue)),
|
||||
CardAgreementTypeCd, AccountNumber for the associated agreement as well as the account status at time the activity was generated.
|
||||
|
||||
RETURNS: Models/Activity/ActivityManagerIncentiveReferral.cs
|
||||
|
||||
PARAMS:
|
||||
|
||||
|afterActivityOd : Null or Int (as string)
|
||||
|------------------------------------------------------------------------------
|
||||
|Returns all Activity Manager entries with a ID after the supplied ID
|
||||
|If null defaults to -1 which will return all Checking SalesActivities
|
||||
|
||||
|newerThanOriginationDate : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|
||||
|-----------------------------------------------------------------------------
|
||||
|Returns all Activity Manager entries that were created after specified date time.
|
||||
|The origination date is always the date that the activity was first entered into the system
|
||||
|regardless of its initial station or what station it is in now
|
||||
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|
||||
|returns all Checking Sales Activities
|
||||
|
||||
NOTES:
|
||||
- When an activity's station is updated, its activity stays the same, but its created date and date last maintained
|
||||
dates are updated to the StationDate. They are always with respect to the current station. To get the date that
|
||||
the activity first entered activity manager, use OriginationDate
|
||||
|
||||
- When a referral is for a business the LF_PERS.EXTID3 column has a O in front of the OrgNbr,
|
||||
When a referral is for a person the LFPERS.EXTID3 coulumn has a P in front of the PersNbr
|
||||
|
||||
- Remember that these fields are all entered manually by an employee. This should not be used as a source of truth for any given activity.
|
||||
This data is supplied with the intention of matching this referral to a sale. It is the best plan to focus on the referred person,
|
||||
and manually query for related accounts as opposed to using the 'custom fields'. We include them here for audit purposes.
|
||||
|
||||
CUSTOM FIELD INFO (ActivityManager.LF_LEAD_CUSTOM):
|
||||
Credit Card Balance Transfer
|
||||
--LeadCust_39 = External CC Account Number
|
||||
--LeadCust_31 = Landmark Credit Card Number
|
||||
--LeadCust_29 = Transfer Ammount
|
||||
--LeadCust_28 = Payment State + Zip
|
||||
--LeadCust_27 = Payment City
|
||||
--LeadCust_26 = Payment Address Line 1
|
||||
--LeadCust_24 = Transfer Institution
|
||||
|
||||
Direct Deposit
|
||||
--LeadCust_38 = Direct Deposit is Qualified Referral
|
||||
--LeadCust_4 = Direct Deposit Account Number
|
||||
|
||||
LF_PERSON-><COMM{int}TYPE>
|
||||
B = PAGER
|
||||
C = MOBILE
|
||||
E = BUSINESS EMAIL
|
||||
F = FAX
|
||||
H = HOME
|
||||
J = PERSONAL EMAIL
|
||||
P = PHONE
|
||||
*/
|
||||
|
||||
WITH EmployeeEmail AS (
|
||||
SELECT pers.USERID AS SafUserId,
|
||||
prod.PERSNBR AS SafPersNbr,
|
||||
prod.PRODPERSID AS CorePersNbr,
|
||||
addr.TEXT AS EmployeeEmail
|
||||
FROM SAF.PERSUSER pers
|
||||
JOIN SAF.PERSPROD prod ON
|
||||
pers.PERSNBR = PROD.PERSNBR
|
||||
AND prod.PRODNBR = '3'
|
||||
JOIN OSIBANK.PERSADDRUSE paddr ON
|
||||
prod.PRODPERSID = PADDR.PERSNBR
|
||||
JOIN OSIBANK.ADDRLINE addr ON
|
||||
paddr.ADDRNBR = addr.ADDRNBR
|
||||
AND paddr.ADDRUSECD = 'EBUS'
|
||||
)
|
||||
SELECT ll.ID AS ActivityId,
|
||||
-- These custom fields can be reused, guarentee their contents by only using them for their respective campaigns
|
||||
(CASE WHEN ll.CAMPAIGN = 'CC Balance Transfer' THEN llc.LEADCUST_31 ELSE NULL END) AS LandmarkCreditCardNumber,
|
||||
(CASE WHEN ll.CAMPAIGN = 'Direct Deposit' THEN llc.LEADCUST_4 ELSE NULL END) AS DirectDepositAccountNumber,
|
||||
ll.ORIGINATOR AS OriginatorUserId,
|
||||
safprod.PRODPERSID AS OriginatorPersNbr,
|
||||
p.FIRSTNAME AS OriginatorFirstName,
|
||||
p.LASTNAME AS OriginatorLastName,
|
||||
p.MDLINIT AS OriginatorMiddleInitial,
|
||||
ee.EmployeeEmail AS EmployeeEmail,
|
||||
ll.CAMPAIGN AS Campaign,
|
||||
ll.CATEGORY AS Category,
|
||||
ll.STATION AS ReferralStation,
|
||||
ll.DATELASTMAINT AS LastUpdatedDateTime,
|
||||
(CASE WHEN att.INITIAL_STATION = 'Yes' THEN 1 ELSE 0 END) AS IsInitialStation,
|
||||
(CASE WHEN att.FINAL_STATION = 'Yes' THEN 1 ELSE 0 END) AS IsFinalStation,
|
||||
att.ACTIVITY_ORIGINATION_DATE AS OriginationDateTime,
|
||||
att.ENTER_STATION_DATETIME AS StationDateTime,
|
||||
ll.SOURCE AS OriginatingBranchName,
|
||||
(CASE WHEN SUBSTR(lp.EXTID3, 1, 1) = 'P' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+') ELSE NULL END) AS ReferredPersonNbr,
|
||||
(CASE WHEN SUBSTR(lp.EXTID3, 1, 1) = 'O' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+') ELSE NULL END) AS ReferredOrgNbr,
|
||||
CASE WHEN REFPERS.LASTNAME IS NOT NULL THEN CONCAT(CONCAT(REFPERS.LASTNAMEUPPER, ','), REFPERS.FIRSTNAMEUPPER)
|
||||
WHEN lp.LastName IS NOT NULL THEN CONCAT(CONCAT(UPPER(lp.LastName), ','), UPPER(lp.FirstName)) ELSE NULL END AS ReferredPersonName,
|
||||
REFORG.ORGNAME AS ReferredOrgName,
|
||||
lp.EXTID3 AS ReferredPersOrgNbr,
|
||||
lp.PREFERRED_PHONE AS PreferredPhone,
|
||||
COALESCE(lp.COMM1, '') AS COMM1,
|
||||
COALESCE(lp.COMM2, '') AS COMM2,
|
||||
COALESCE(lp.COMM3, '') AS COMM3,
|
||||
COALESCE(lp.COMM4, '') AS COMM4,
|
||||
COALESCE(lp.COMM5, '') AS COMM5,
|
||||
COALESCE(lp.COMM6, '') AS COMM6,
|
||||
COALESCE(lp.COMM7, '') AS COMM7
|
||||
FROM ACTIVITYMANAGER.LF_LEAD ll
|
||||
JOIN ACTIVITYMANAGER.LF_LEAD_CUSTOM llc ON
|
||||
ll.ID = llc.ID
|
||||
JOIN SAF.PERSUSER safp ON
|
||||
safp.USERID = ll.ORIGINATOR
|
||||
JOIN SAF.PERSPROD safprod ON
|
||||
SAFPROD.PERSNBR = safp.PERSNBR AND
|
||||
SAFPROD.PRODNBR = '3'
|
||||
JOIN OSIBANK.PERS p ON
|
||||
p.PERSNBR = SAFPROD.PRODPERSID
|
||||
LEFT JOIN EmployeeEmail ee ON
|
||||
ee.SafPersNbr = SAFP.PERSNBR
|
||||
JOIN ACTIVITYMANAGER.LF_PERSON lp ON
|
||||
lp.ID = ll.PERSONID
|
||||
JOIN ACTIVITYMANAGER.ACTIVITY_TIME_TRACKING att
|
||||
ON att.ACTIVITY_ID = ll.ID AND SEQUENCE_NUMBER = (
|
||||
SELECT MAX(SEQUENCE_NUMBER)
|
||||
FROM ACTIVITYMANAGER.ACTIVITY_TIME_TRACKING att2
|
||||
WHERE att2.ACTIVITY_ID = ll.ID
|
||||
)
|
||||
LEFT JOIN OSIBANK.ORG REFORG ON reforg.ORGNBR = (CASE WHEN SUBSTR(lp.EXTID3, 1, 1) = 'O' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+') ELSE NULL END)
|
||||
LEFT JOIN OSIBANK.PERS REFPERS ON refpers.PERSNBR = (CASE WHEN SUBSTR(lp.EXTID3, 1, 1) = 'P' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+') ELSE NULL END)
|
||||
WHERE ll.CAMPAIGN IN (
|
||||
'ATM Card',
|
||||
'Check Card Referral',
|
||||
'Checking Referral',
|
||||
'Direct Deposit',
|
||||
'CC Balance Transfer',
|
||||
'Mortgage Referral',
|
||||
'LIC Referral',
|
||||
'First Mortgage Referral',
|
||||
'eStatement Referral')
|
||||
AND ll.ID > TO_NUMBER(COALESCE(:afterActivityId, '-1'))
|
||||
AND att.ACTIVITY_ORIGINATION_DATE >= TO_TIMESTAMP(COALESCE(:newerThanOriginationDate, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
/*New ATM/Check Cards Sale Query
|
||||
----------------------------------
|
||||
DESCRIPTION:
|
||||
Get all Activities related to New Check or ATM Cards (ActvType = AGRE and SubActivity contains a change
|
||||
to the 'CardAgreement' table where the AgreeTypCd = 'DBT', 'DBT2', 'BDBT', 'ATM')
|
||||
after a supplied DateTime (inclusive) or after a supplied ActivityNumber (not inclusive) or both.
|
||||
|
||||
Supplies Activity Data, Associate Name information, as well as the Agreement Number, Card Status (Should always be ISS (issue)),
|
||||
CardAgreementTypeCd, AccountNumber for the associated agreement as well as the account status at time the activity was generated.
|
||||
|
||||
RETURNS: Models/Activity/NewAtmCheckCardActivity.cs
|
||||
|
||||
PARAMS:
|
||||
|
||||
|afterActivityNbr : Null or Int (as string)
|
||||
|------------------------------------------------------------------------------
|
||||
|Returns all Checking Sales with ActivityNbrs larger than the supplied number.
|
||||
|If null defaults to -1 which will return all Checking SalesActivities
|
||||
|
||||
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|
||||
|-----------------------------------------------------------------------------
|
||||
|Returns all Checking Sales with ActivityNbrs that occured on or after the supplied date
|
||||
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|
||||
|returns all Checking Sales Activities
|
||||
|
||||
|limitAmount : Null or Int (as string)
|
||||
|------------------------------------------------------------------------------
|
||||
|Return record count
|
||||
|If null defaults to '100'
|
||||
|
||||
NOTES:
|
||||
- 'AGRE' activity is an activity related to a change or update to an agreement
|
||||
- 'DBT', 'DBT2', 'BDBT' abd 'ATM are the only CardTypes that are incented
|
||||
|
||||
- This will return all new ATM/Check card sales, even those that were created when a new account was created,
|
||||
Note that these are not incented. Uncommment the line in the where clause to filter out unincented accounts.
|
||||
|
||||
- Though not explicitly filtered these results will only include cards in the 'ISS' issued status. This is because
|
||||
of the join with CARDMEMBERISSUEHIST
|
||||
|
||||
- The AcctStatDuringActivity column is the last status of the account (from ACCTACCTSTATHIST table) before or when
|
||||
the activity occured. We do not return the current status at the time of the query.
|
||||
|
||||
- When Card is in APPR state, sometimes personNbr will be missing. When creating this query there were no situations
|
||||
Where the cards was in ACT state and did not have a person number assigned to them
|
||||
*/
|
||||
WITH EmployeeEmail AS (
|
||||
SELECT p.PERSNBR As CorePersNbr,
|
||||
addr.TEXT AS EmployeeEmail
|
||||
FROM OSIBANK.PERSEMPL p
|
||||
JOIN OSIBANK.PERSADDRUSE paddr ON
|
||||
p.PERSNBR = PADDR.PERSNBR
|
||||
JOIN OSIBANK.ADDRLINE addr ON
|
||||
paddr.ADDRNBR = addr.ADDRNBR
|
||||
AND paddr.ADDRUSECD = 'EBUS'
|
||||
),
|
||||
ActivitySubActivity AS (
|
||||
SELECT *
|
||||
FROM OSIBANK.ACTVSUBACTV asa
|
||||
WHERE asa.TABLEID = 'CardAgreement'
|
||||
),
|
||||
AGREEMENTACTIVITYDATA AS (
|
||||
SELECT a.ACTVNBR AS ActivityNbr,
|
||||
a.ACTVDATETIME AS ActivityDateTime,
|
||||
a.RESPPERSNBR AS ResponsiblePersonNbr,
|
||||
a.ACTVTYPCD AS ActivityTypeCde,
|
||||
-- CardAgreement table has only one row in value table. Other rows may have duplicate unmatching data for Non-owner users
|
||||
max(CASE WHEN asa.COLUMNID = 'AgreeNbr' THEN asa.NEWVALUE END) AS AgreementNbr,
|
||||
max(CASE WHEN asa.COLUMNID = 'AgreeTypCd' THEN asa.NEWVALUE END) AS CardState,
|
||||
max(CASE WHEN asa.COLUMNID = 'AgreeTypCd' THEN asa.NEWVALUE END) AS CardType,
|
||||
max(CASE WHEN asa.COLUMNID = 'ServChgAcctNbr' THEN asa.NEWVALUE END) AS AccountNbr,
|
||||
max(CASE WHEN asa.COLUMNID = 'OwnerPersNbr' THEN asa.NEWVALUE END) AS OwnerPersonNbr,
|
||||
max(CASE WHEN asa.COLUMNID = 'OwnerOrgNbr' THEN asa.NEWVALUE END) AS OwnerOrgNbr
|
||||
FROM OSIBANK.ACTV a
|
||||
LEFT JOIN ActivitySubActivity asa ON asa.ACTVNBR = a.ACTVNBR
|
||||
WHERE a.ACTVTYPCD = 'AGRE'
|
||||
GROUP BY a.ACTVNBR, a.ACTVDATETIME, a.RESPPERSNBR, a.ACTVTYPCD
|
||||
),
|
||||
PHONEMETADATA AS (
|
||||
SELECT p.PERSNBR,
|
||||
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR), ',') AS PhoneNumbers
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
|
||||
GROUP BY p.PERSNBR
|
||||
),
|
||||
EMAILMETADATA AS (
|
||||
SELECT p.PERSNBR,
|
||||
LISTAGG(al.TEXT, ',') AS EmailAddresses
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM', 'EML')
|
||||
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
|
||||
GROUP BY p.PERSNBR
|
||||
)
|
||||
SELECT ActvData.*,
|
||||
acc.CURRACCTSTATCD AS AcctStatAtQueryTime,
|
||||
hist.ACCTSTATCD AS AcctStateAtActivity,
|
||||
hist.EFFDATETIME AS AcctStateEffDateTime,
|
||||
p.FIRSTNAME AS AssociateFirst,
|
||||
p.LASTNAME AS AssociateLast,
|
||||
p.MDLINIT AS AssociateMiddleInit,
|
||||
CASE
|
||||
WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','), TAXPERS.FIRSTNAMEUPPER)
|
||||
ELSE NULL
|
||||
END AS TaxPersonName,
|
||||
TAXORG.ORGNAME AS TaxOrgName,
|
||||
ee.EmployeeEmail AS EmployeeEmail,
|
||||
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
|
||||
emd.EmailAddresses AS TaxPersonEmailAddresses
|
||||
FROM AGREEMENTACTIVITYDATA ActvData
|
||||
-- Sometimes a card activity shows up with identical data but a different date time Seconds apart.
|
||||
-- There seems to always be an entry created in CARDMEMBERISSUEHIST that has one record matching these timestamps
|
||||
JOIN OSIBANK.CARDMEMBERISSUEHIST c ON
|
||||
c.AGREENBR = ActvData.AgreementNbr
|
||||
AND c.EFFDATETIME = ActvData.ActivityDateTime
|
||||
JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = ActvData.AccountNbr
|
||||
LEFT JOIN OSIBANK.PERS taxpers ON ActvData.OwnerPersonNbr = TAXPERS.PERSNBR
|
||||
LEFT JOIN OSIBANK.ORG taxorg ON ActvData.OwnerOrgNbr = TAXORG.ORGNBR
|
||||
--Check for most recent account status before the Activity was recorded
|
||||
--This has been verified to not produce duplicate rows and not eliminate rows
|
||||
JOIN OSIBANK.ACCTACCTSTATHIST hist ON ActvData.AccountNbr = hist.ACCTNBR AND hist.TIMEUNIQUEEXTN = (
|
||||
SELECT MAX(TIMEUNIQUEEXTN)
|
||||
FROM OSIBANK.ACCTACCTSTATHIST histsearch
|
||||
WHERE histsearch.EFFDATETIME <= ActvData.ActivityDateTime
|
||||
AND histsearch.ACCTNBR = ActvData.AccountNbr
|
||||
)
|
||||
JOIN OSIBANK.PERS p ON ActvData.ResponsiblePersonNbr = p.PERSNBR
|
||||
JOIN EmployeeEmail ee ON ActvData.ResponsiblePersonNbr = ee.CorePersNbr
|
||||
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
|
||||
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
|
||||
WHERE (ActvData.AgreementNbr IS NOT NULL AND ActvData.CardState IS NOT NULL AND ActvData.CARDTYPE IS NOT NULL)
|
||||
AND ActvData.CardType IN ('DBT', 'DBT2', 'BDBT', 'ATM')
|
||||
--AND ACCTSTATCD = 'ACT' (Uncomment to only return cards that we issued to active accounts)
|
||||
AND ActivityNbr > TO_NUMBER(COALESCE(:afterActivityNbr, '-1'))
|
||||
AND ActivityDateTime >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
|
||||
ORDER BY ActvData.ActivityDateTime ASC
|
||||
FETCH NEXT TO_NUMBER(COALESCE(:limitAmount, '100')) ROWS ONLY
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
/*New Checking Account Sale Query
|
||||
----------------------------------
|
||||
DESCRIPTION:
|
||||
Get all Activities related to New checking accounts (ActvType = AADD and AccountType = 'Checking')
|
||||
after a supplied DateTime (inclusive) or after a supplied ActivityNumber (not inclusive) or both.
|
||||
Supplies Activity Data as well as the Account Number of the new account and the account status at the time of querying
|
||||
|
||||
RETURNS: Models/Activity/NewCheckingAccountActivity.cs
|
||||
|
||||
PARAMS:
|
||||
|
||||
|afterActivityNbr : Null or Int (as string)
|
||||
|------------------------------------------------------------------------------
|
||||
|Returns all Checking Sales with ActivityNbrs larger than the supplied number.
|
||||
|If null defaults to -1 which will return all Checking SalesActivities
|
||||
|
||||
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|
||||
|-----------------------------------------------------------------------------
|
||||
|Returns all Checking Sales with ActivityNbrs that occured on or after the supplied date
|
||||
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|
||||
|returns all Checking Sales Activities
|
||||
|
||||
|limitAmount : Null or Int (as string)
|
||||
|------------------------------------------------------------------------------
|
||||
|Return record count
|
||||
|If null defaults to '100'
|
||||
|
||||
NOTES:
|
||||
- Activity Type Code 'AADD' are activities related to 'Adding an account'
|
||||
- Limitation: You get the status of the account when querying. This could be different immediately after creation
|
||||
- When Acct is associated with person, the TAXRPTFORPERSNBR will populate, when associated with organizations the
|
||||
when associated with an organization the TAXRPTFORORGNBR will populate
|
||||
- Using both the following sub account filters resulted in the same number of activities to be found (638) and removed duplicates. When neither of these are checked for null values, there are 662 (24 duplicates)
|
||||
1. max(CASE WHEN a2.OLDVALUE = 'Key=' AND a2.TABLEID = 'Acct' AND a2.COLUMNID = 'AcctNbr' AND a2.DATABASEACTVCD = 'UPD' THEN a2.NEWVALUE END) AS SubActivityAccount (638 results)
|
||||
2. max(CASE WHEN a2.COLUMNID = 'ACCTNBR' AND a2.TABLEID = 'ACCT' AND a2.DATABASEACTVCD = 'ADD' THEN a2.NEWVALUE END) AS SubActivityAccount (638 results)
|
||||
|
||||
*/
|
||||
WITH EmployeeEmail AS (
|
||||
SELECT p.PERSNBR As CorePersNbr,
|
||||
addr.TEXT AS EmployeeEmail
|
||||
FROM OSIBANK.PERSEMPL p
|
||||
JOIN OSIBANK.PERSADDRUSE paddr ON
|
||||
p.PERSNBR = PADDR.PERSNBR
|
||||
JOIN OSIBANK.ADDRLINE addr ON
|
||||
paddr.ADDRNBR = addr.ADDRNBR
|
||||
AND paddr.ADDRUSECD = 'EBUS'
|
||||
),
|
||||
OriginalBalance AS (
|
||||
--This assumes there is only 1 Note/Bal sub account for every account
|
||||
--So far that has been true.
|
||||
SELECT ACCTNBR, ORIGBAL
|
||||
FROM OSIBANK.ACCTSUBACCT a2
|
||||
WHERE a2.BALCATCD = 'NOTE'
|
||||
AND a2.BALTYPCD = 'BAL'
|
||||
),
|
||||
ActivitySubActivity AS (
|
||||
SELECT *
|
||||
FROM OSIBANK.ACTVSUBACTV asa
|
||||
WHERE asa.TABLEID = 'Acct'
|
||||
),
|
||||
NEWCHECKINGACTIVITYDATA AS (
|
||||
SELECT a.ACTVNBR AS ActivityNbr,
|
||||
a.ACTVDATETIME AS ActivityDateTime,
|
||||
a.SUBJACCTNBR AS SubjectAccountNbr,
|
||||
a.RESPPERSNBR AS ResponsiblePersonNbr,
|
||||
a.ACTVTYPCD AS ActivityTypeCode,
|
||||
--2 activities are sometimes created for adding an account, only 1 will update the account from key= to the actual account number value
|
||||
max(CASE
|
||||
WHEN asa.OLDVALUE = 'Key=' AND asa.COLUMNID = 'AcctNbr' AND asa.DATABASEACTVCD = 'UPD' THEN asa.NEWVALUE
|
||||
END) AS SubActivityAccount
|
||||
FROM OSIBANK.ACTV a
|
||||
LEFT JOIN ActivitySubActivity asa ON asa.ACTVNBR = a.ACTVNBR
|
||||
WHERE a.ACTVTYPCD = 'AADD'
|
||||
GROUP BY a.ACTVNBR, a.ACTVDATETIME, a.SUBJACCTNBR, a.RESPPERSNBR, a.ACTVTYPCD
|
||||
),
|
||||
PHONEMETADATA AS (
|
||||
SELECT p.PERSNBR,
|
||||
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR), ',') AS PhoneNumbers
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
|
||||
GROUP BY p.PERSNBR
|
||||
),
|
||||
EMAILMETADATA AS (
|
||||
SELECT p.PERSNBR,
|
||||
LISTAGG(al.TEXT, ',') AS EmailAddresses
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM', 'EML')
|
||||
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
|
||||
GROUP BY p.PERSNBR
|
||||
)
|
||||
SELECT ActvData.*,
|
||||
p.FIRSTNAME AS AssociateFirst,
|
||||
p.LASTNAME AS AssociateLast,
|
||||
p.MDLINIT AS AssociateMiddleInit,
|
||||
ee.EmployeeEmail AS EmployeeEmail,
|
||||
acc.CURRACCTSTATCD AS CurrentAccountStatus,
|
||||
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
|
||||
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
|
||||
CASE
|
||||
WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','), TAXPERS.FIRSTNAMEUPPER)
|
||||
ELSE NULL
|
||||
END AS TaxPersonName,
|
||||
TAXORG.ORGNAME AS TaxOrgName,
|
||||
acc.BranchOrgNbr As BranchOrgNbr,
|
||||
acc.CONTRACTDATE AS AccountContractDate,
|
||||
acc.CURRMIACCTTYPCD AS MinorAccountType,
|
||||
org.ORGNAME AS BranchOrgName,
|
||||
ob.ORIGBAL AS OriginalBalance,
|
||||
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
|
||||
emd.EmailAddresses AS TaxPersonEmailAddresses
|
||||
FROM NEWCHECKINGACTIVITYDATA ActvData
|
||||
JOIN OSIBANK.PERS p ON p.PERSNBR = ActvData.ResponsiblePersonNbr
|
||||
LEFT JOIN EmployeeEmail ee ON ee.CorePersNbr = ActvData.ResponsiblePersonNbr
|
||||
JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = ActvData.SubjectAccountNbr
|
||||
JOIN OSIBANK.ORG org ON acc.BranchOrgNbr = org.ORGNBR
|
||||
LEFT JOIN OSIBANK.PERS taxpers ON acc.TAXRPTFORPERSNBR = TAXPERS.PERSNBR
|
||||
LEFT JOIN OSIBANK.ORG taxorg ON acc.TAXRPTFORORGNBR = TAXORG.ORGNBR
|
||||
LEFT JOIN OriginalBalance ob ON acc.ACCTNBR = ob.AcctNbr
|
||||
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
|
||||
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
|
||||
WHERE ActvData.SubActivityAccount IS NOT NULL
|
||||
AND acc.CURRMIACCTTYPCD IN ('CK04', 'CK01', 'CK02', 'CK03', 'BC10', 'BC20', 'MMC5', 'BOC1', 'BOC2', 'BC01', 'MMC1', 'CK05', 'BC11', 'CK06')
|
||||
AND ActivityNbr > TO_NUMBER(COALESCE(:afterActivityNbr, '-1'))
|
||||
AND ActivityDateTime >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
|
||||
ORDER BY ActvData.ActivityDateTime ASC
|
||||
FETCH NEXT TO_NUMBER(COALESCE(:limitAmount, '100')) ROWS ONLY
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
/*New Checking Account Sale Query
|
||||
----------------------------------
|
||||
DESCRIPTION:
|
||||
Get all Activities related to New checking accounts (ActvType = ADAC and AccountType = 'Checking')
|
||||
after a supplied DateTime (inclusive) or after a supplied ActivityNumber (not inclusive) or both.
|
||||
Supplies Activity Data as well as the Account Number of the new account and the account status at the time of querying
|
||||
|
||||
RETURNS: Models/Activity/NewCheckingAccountActivity.cs
|
||||
|
||||
PARAMS:
|
||||
|
||||
|afterActivityNbr : Null or Int (as string)
|
||||
|------------------------------------------------------------------------------
|
||||
|Returns all Checking Sales with ActivityNbrs larger than the supplied number.
|
||||
|If null defaults to -1 which will return all Checking SalesActivities
|
||||
|
||||
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|
||||
|-----------------------------------------------------------------------------
|
||||
|Returns all Checking Sales with ActivityNbrs that occured on or after the supplied date
|
||||
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|
||||
|returns all Checking Sales Activities
|
||||
|
||||
NOTES:
|
||||
- Activity Type Code 'ADAC' are activities related to 'Adding an account'
|
||||
- Limitation: You get the status of the account when querying. This could be different immediately after creation
|
||||
- When Acct is associated with person, the TAXRPTFORPERSNBR will populate, when associated with organizations the
|
||||
when associated with an organization the TAXRPTFORORGNBR will populate
|
||||
- Using both the following sub account filters resulted in the same number of activities to be found (638) and removed duplicates. When neither of these are checked for null values, there are 662 (24 duplicates)
|
||||
1. max(CASE WHEN a2.OLDVALUE = 'Key=' AND a2.TABLEID = 'Acct' AND a2.COLUMNID = 'AcctNbr' AND a2.DATABASEACTVCD = 'ADD' THEN a2.NEWVALUE END) AS SubActivityAccount (638 results)
|
||||
2. max(CASE WHEN a2.COLUMNID = 'ACCTNBR' AND a2.TABLEID = 'ACCT' AND a2.DATABASEACTVCD = 'ADD' THEN a2.NEWVALUE END) AS SubActivityAccount (638 results)
|
||||
|
||||
*/
|
||||
WITH OriginalBalance AS (
|
||||
--This assumes there is only 1 Note/Bal sub account for every account
|
||||
--So far that has been true.
|
||||
SELECT ACCTNBR, ORIGBAL
|
||||
FROM OSIBANK.ACCTSUBACCT a2
|
||||
WHERE a2.BALCATCD = 'NOTE'
|
||||
AND a2.BALTYPCD = 'BAL'
|
||||
),
|
||||
NEWCHECKINGACTIVITYDATA AS (
|
||||
SELECT a.ACTVNBR AS ActivityNbr,
|
||||
a.ACTVDATETIME AS ActivityDateTime,
|
||||
a.SUBJACCTNBR AS SubjectAccountNbr,
|
||||
a.RESPPERSNBR AS ResponsiblePersonNbr,
|
||||
a.ACTVTYPCD AS ActivityTypeCode,
|
||||
--2 activities are sometimes created for adding an account, only 1 will update the account from key= to the actual account number value
|
||||
max(CASE
|
||||
WHEN asa.OLDVALUE = 'Key=' AND asa.COLUMNID = 'AcctNbr' AND asa.DATABASEACTVCD = 'ADD' THEN asa.NEWVALUE
|
||||
END) AS SubActivityAccount
|
||||
FROM OSIBANK.ACTV a
|
||||
LEFT JOIN OSIBANK.ACTVSUBACTV asa ON asa.ACTVNBR = a.ACTVNBR and asa.TABLEID = 'Acct'
|
||||
WHERE a.ACTVTYPCD = 'ADAC'
|
||||
GROUP BY a.ACTVNBR, a.ACTVDATETIME, a.SUBJACCTNBR, a.RESPPERSNBR, a.ACTVTYPCD
|
||||
),
|
||||
PHONEMETADATA AS (
|
||||
SELECT p.PERSNBR,
|
||||
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR), ',') AS PhoneNumbers
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
|
||||
GROUP BY p.PERSNBR
|
||||
),
|
||||
EMAILMETADATA AS (
|
||||
SELECT p.PERSNBR,
|
||||
LISTAGG(al.TEXT, ',') AS EmailAddresses
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM', 'EML')
|
||||
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
|
||||
GROUP BY p.PERSNBR )
|
||||
SELECT ActvData.*,
|
||||
'Digital' AS AssociateFirst,
|
||||
'Banking' AS AssociateLast,
|
||||
p.MDLINIT AS AssociateMiddleInit,
|
||||
acc.CURRACCTSTATCD AS CurrentAccountStatus,
|
||||
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
|
||||
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
|
||||
'[email protected]' AS EmployeeEmail, --we will not have employee email for Digital Banking
|
||||
CASE
|
||||
WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','), TAXPERS.FIRSTNAMEUPPER)
|
||||
ELSE NULL
|
||||
END AS TaxPersonName,
|
||||
TAXORG.ORGNAME AS TaxOrgName,
|
||||
acc.BranchOrgNbr As BranchOrgNbr,
|
||||
acc.CONTRACTDATE AS AccountContractDate,
|
||||
acc.CURRMIACCTTYPCD AS MinorAccountType,
|
||||
org.ORGNAME AS BranchOrgName,
|
||||
ob.ORIGBAL AS OriginalBalance,
|
||||
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
|
||||
emd.EmailAddresses AS TaxPersonEmailAddresses
|
||||
FROM NEWCHECKINGACTIVITYDATA ActvData
|
||||
JOIN OSIBANK.PERS p ON p.PERSNBR = ActvData.ResponsiblePersonNbr
|
||||
JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = ActvData.SubjectAccountNbr
|
||||
JOIN OSIBANK.ORG org ON acc.BranchOrgNbr = org.ORGNBR
|
||||
LEFT JOIN OSIBANK.PERS taxpers ON acc.TAXRPTFORPERSNBR = TAXPERS.PERSNBR
|
||||
LEFT JOIN OSIBANK.ORG taxorg ON acc.TAXRPTFORORGNBR = TAXORG.ORGNBR
|
||||
LEFT JOIN OriginalBalance ob ON acc.ACCTNBR = ob.AcctNbr
|
||||
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
|
||||
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
|
||||
WHERE acc.CURRMIACCTTYPCD IN ('CK04', 'CK01', 'CK02', 'CK03', 'BC10', 'BC20', 'MMC5', 'BOC1', 'BOC2', 'BC01', 'MMC1', 'CK05', 'BC11', 'CK06')
|
||||
AND ActivityNbr > TO_NUMBER(COALESCE(:afterActivityNbr, '-1'))
|
||||
AND ActivityDateTime >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
|
||||
ORDER BY ActvData.ActivityDateTime ASC
|
||||
FETCH NEXT TO_NUMBER(COALESCE(:limitAmount, '200')) ROWS ONLY
|
||||
+175
@@ -0,0 +1,175 @@
|
||||
/*New Debt Protected Loan Sale Query
|
||||
----------------------------------
|
||||
DESCRIPTION:
|
||||
All activities related to new loans that can have debt protection associated with them, but are not
|
||||
incentivised like Mortgages and Vehicles.
|
||||
|
||||
RETURNS: Models/Activity/NewCheckingAccountActivity.cs
|
||||
|
||||
PARAMS:
|
||||
|
||||
|afterActivityNbr : Null or Int (as string)
|
||||
|------------------------------------------------------------------------------
|
||||
|Returns all Sales with ActivityNbrs larger than the supplied number.
|
||||
|If null defaults to -1 which will return all Checking SalesActivities
|
||||
|
||||
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|
||||
|-----------------------------------------------------------------------------
|
||||
|Returns all Sales with ActivityNbrs that occured on or after the supplied date
|
||||
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|
||||
|returns all Checking Sales Activities
|
||||
|
||||
NOTES:
|
||||
- Use ContractDate as the date of the sale. This is the day that the customer signs for the loan. There is a legal grace-period between
|
||||
When a loan is signed and when the loan is booked into the banking system. This is why there is a gap between contract date and activity date.
|
||||
-Only need to know if an account has debt protection not how many debt protection policies the account has. We select the earliest sold
|
||||
debt protection and add the date and type to signify that the loan has debt protection
|
||||
- LADD type activities seem to produce duplicates occasionally, None were found for mortgage type accounts
|
||||
*/
|
||||
WITH EmployeeEmail AS (
|
||||
SELECT p.PERSNBR As CorePersNbr,
|
||||
addr.TEXT AS EmployeeEmail
|
||||
FROM OSIBANK.PERSEMPL p
|
||||
JOIN OSIBANK.PERSADDRUSE paddr ON
|
||||
p.PERSNBR = PADDR.PERSNBR
|
||||
JOIN OSIBANK.ADDRLINE addr ON
|
||||
paddr.ADDRNBR = addr.ADDRNBR
|
||||
AND paddr.ADDRUSECD = 'EBUS'
|
||||
),
|
||||
OriginatorRole AS (
|
||||
SELECT ACCTNBR, PERSNBR, ACCTROLECD, DATELASTMAINT, EFFDATE
|
||||
from OSIBANK.ACCTACCTROLEPERS a
|
||||
WHERE ACCTROLECD = 'OEMP'
|
||||
GROUP BY ACCTNBR, ACCTROLECD, DATELASTMAINT, EFFDATE, PERSNBR
|
||||
HAVING DATELASTMAINT = MAX(DATELASTMAINT)
|
||||
),
|
||||
LoanLimit AS (
|
||||
SELECT a2.ACCTNBR, a2.CREDITLIMITAMT, a2.DATELASTMAINT
|
||||
FROM OSIBANK.ACCTLOANLIMITHIST a2
|
||||
WHERE a2.CREDITLIMITAMT > '0'
|
||||
GROUP BY a2.ACCTNBR, a2.CREDITLIMITAMT, a2.DATELASTMAINT
|
||||
HAVING MIN(a2.DATELASTMAINT) = a2.DATELASTMAINT
|
||||
ORDER BY CREDITLIMITAMT
|
||||
),
|
||||
OriginalBalance AS (
|
||||
--This assumes there is only 1 Note/Bal sub account for every account
|
||||
--So far that has been true.
|
||||
SELECT ACCTNBR, ORIGBAL
|
||||
FROM OSIBANK.ACCTSUBACCT a2
|
||||
WHERE a2.BALCATCD = 'NOTE'
|
||||
AND a2.BALTYPCD = 'BAL'
|
||||
),
|
||||
DebtProtection AS (
|
||||
SELECT a.ACCTNBR,
|
||||
MIN(var.CALCTYPEFFDATE) AS EffectiveDate,
|
||||
a.BALCATCD
|
||||
FROM OSIBANK.ACCTSUBACCT a
|
||||
INNER JOIN (
|
||||
SELECT ACCTNBR, MIN(SUBACCTNBR) AS SUBACCTNBR
|
||||
FROM OSIBANK.ACCTSUBACCT sa
|
||||
WHERE sa.BALTYPCD = 'SINS'
|
||||
GROUP BY ACCTNBR
|
||||
) b ON a.ACCTNBR = b.ACCTNBR AND a.SUBACCTNBR = b.SUBACCTNBR
|
||||
INNER JOIN OSIBANK.ACCTSUBACCTCALCVAR var ON var.ACCTNBR = a.ACCTNBR AND a.SUBACCTNBR = var.SUBACCTNBR
|
||||
GROUP BY a.ACCTNBR, var.CALCTYPEFFDATE, a.BALCATCD
|
||||
),
|
||||
BorrowerAge AS (
|
||||
SELECT a.ACCTNBR, MAX(p.DATEBIRTH) AS YoungestBirthdate
|
||||
FROM OSIBANK.ACCTACCTROLEPERS a
|
||||
LEFT JOIN OSIBANK.ACCT acc ON a.ACCTNBR = acc.ACCTNBR
|
||||
LEFT JOIN OSIBANK.ACCTROLE r ON r.ACCTROLECD = a.ACCTROLECD
|
||||
LEFT JOIN OSIBANK.PERS p ON a.PERSNBR = p.PERSNBR
|
||||
WHERE a.ACCTROLECD IN ('TRO', 'NTO', 'SIGN')
|
||||
AND (p.DATEDEATH IS NULL OR p.DATEDEATH > acc.CONTRACTDATE)
|
||||
GROUP BY a.ACCTNBR
|
||||
),
|
||||
PHONEMETADATA AS (
|
||||
SELECT p.PERSNBR,
|
||||
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR), ',') AS PhoneNumbers
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
|
||||
GROUP BY p.PERSNBR
|
||||
),
|
||||
EMAILMETADATA AS (
|
||||
SELECT p.PERSNBR,
|
||||
LISTAGG(al.TEXT, ',') AS EmailAddresses
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM', 'EML')
|
||||
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
|
||||
GROUP BY p.PERSNBR
|
||||
)
|
||||
SELECT a.ACTVNBR AS ActivityNbr,
|
||||
a.ACTVDATETIME AS ActivityDateTime,
|
||||
a.SUBJACCTNBR AS SubjectAccountNbr,
|
||||
a.RESPPERSNBR AS ActivityResponsiblePersonNbr,
|
||||
oe.PERSNBR AS OriginatingPersonNbr,
|
||||
a.ACTVTYPCD AS ActivityTypeCode,
|
||||
p.FIRSTNAME AS AssociateFirst,
|
||||
p.LASTNAME AS AssociateLast,
|
||||
p.MDLINIT AS AssociateMiddleInit,
|
||||
--NEW = "New" | REFI = "Refinance"
|
||||
ll.CREDITLIMITAMT AS LoanLimit,
|
||||
ob.OrigBal AS OriginalBalance,
|
||||
COALESCE(ll.CREDITLIMITAMT, ob.ORIGBAL) AS LoanAmount,
|
||||
al.LOANSOURCECD AS LoanSourceCode,
|
||||
--ABS(r.TRANAMT) AS LoanDispersalAmmount,
|
||||
ee.EmployeeEmail AS EmployeeEmail,
|
||||
acc.CURRACCTSTATCD AS CurrentAccountStatus,
|
||||
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
|
||||
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
|
||||
CASE WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','), TAXPERS.FIRSTNAMEUPPER) ELSE NULL END AS TaxPersonName,
|
||||
TAXORG.ORGNAME AS TaxOrgName,
|
||||
acc.BranchOrgNbr As BranchOrgNbr,
|
||||
acc.MjAcctTypCd AS MajorAccountType,
|
||||
acc.CURRMIACCTTYPCD AS MinorAccountType,
|
||||
acc.CONTRACTDATE AS AccountContractDate,
|
||||
org.ORGNAME AS BranchOrgName,
|
||||
dp.EffectiveDate AS DebtProtectionEffectiveDate,
|
||||
dp.BALCATCD AS DebtProtectionCategory,
|
||||
CASE
|
||||
WHEN
|
||||
ba.YoungestBirthdate IS NOT NULL AND
|
||||
p2.DATEBIRTH IS NOT NULL
|
||||
THEN
|
||||
GREATEST(ba.YOUNGESTBIRTHDATE, p2.DATEBIRTH)
|
||||
ELSE
|
||||
COALESCE(ba.YOUNGESTBIRTHDATE, p2.DATEBIRTH)
|
||||
END AS YoungestBirthdateOnLoan,
|
||||
CASE
|
||||
WHEN
|
||||
acc.ACCTNBR IN (
|
||||
SELECT acctnbr
|
||||
FROM OSIBANK.ACCTACCTROLEORG aro
|
||||
Where aro.ACCTROLECD IN ('DBA', 'LLC', 'UNAS')
|
||||
) OR
|
||||
acc.TAXRPTFORORGNBR IS NOT NULL
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END AS HasOrgRoles,
|
||||
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
|
||||
emd.EmailAddresses AS TaxPersonEmailAddresses
|
||||
FROM OSIBANK.ACTV a
|
||||
LEFT JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = a.SUBJACCTNBR
|
||||
LEFT JOIN OriginatorRole oe ON acc.ACCTNBR = oe.AcctNbr
|
||||
LEFT JOIN OSIBANK.PERS p ON p.PERSNBR = oe.PERSNBR
|
||||
LEFT JOIN OSIBANK.PERS taxpers ON acc.TAXRPTFORPERSNBR = TAXPERS.PERSNBR
|
||||
LEFT JOIN OSIBANK.ORG taxorg ON acc.TAXRPTFORORGNBR = TAXORG.ORGNBR
|
||||
JOIN OSIBANK.ORG org ON org.ORGNBR = acc.BRANCHORGNBR
|
||||
LEFT JOIN EmployeeEmail ee ON p.PERSNBR = ee.CorePersNbr
|
||||
--Uncomment to get Loan Dispersal Transaction Information
|
||||
--LEFT JOIN OSIBANK.RTXN r ON acc.ACCTNBR = r.ACCTNBR AND r.RTXNTYPCD = 'NDSB'
|
||||
LEFT JOIN OSIBANK.ACCTLOAN al ON acc.ACCTNBR = al.ACCTNBR
|
||||
LEFT JOIN LoanLimit ll ON ll.AcctNbr = acc.ACCTNBR
|
||||
LEFT JOIN OriginalBalance ob ON ob.AcctNbr = acc.ACCTNBR
|
||||
LEFT JOIN DebtProtection dp ON dp.ACCTNBR = acc.ACCTNBR
|
||||
LEFT JOIN OSIBANK.ACTVSUBACTV sa ON sa.ACTVNBR = a.ACTVNBR
|
||||
LEFT JOIN BorrowerAge ba ON ba.AcctNbr = acc.ACCTNBR
|
||||
LEFT JOIN OSIBANK.PERS p2 ON acc.TAXRPTFORPERSNBR = p2.PERSNBR
|
||||
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
|
||||
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
|
||||
WHERE acc.CURRMIACCTTYPCD IN ('SC01', 'SC02', 'SG01')
|
||||
AND (a.ACTVTYPCD = 'ADAC' OR a.ACTVTYPCD = 'LADD')
|
||||
AND LOWER(sa.TABLEID) = 'acct'
|
||||
AND LOWER(sa.COLUMNID) = 'acctnbr'
|
||||
AND a.ACTVNBR > TO_NUMBER(COALESCE(:afterActivityNbr, '-1'))
|
||||
AND a.ACTVDATETIME >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
|
||||
+186
@@ -0,0 +1,186 @@
|
||||
/*New Mortgagage Account Sale Query
|
||||
----------------------------------
|
||||
DESCRIPTION:
|
||||
Get all Activities related to New Mortgage Accounts (ActvType = AADD and AccountType = ('FE01', 'MF01', 'FE02', 'FLML')
|
||||
after a supplied DateTime (inclusive) or after a supplied ActivityNumber (not inclusive) or both.
|
||||
Supplies Activity Data as well as the Account Number of the new account and the account status at the time of querying
|
||||
|
||||
RETURNS: Models/Activity/NewCheckingAccountActivity.cs
|
||||
|
||||
PARAMS:
|
||||
|
||||
|afterActivityNbr : Null or Int (as string)
|
||||
|------------------------------------------------------------------------------
|
||||
|Returns all Checking Sales with ActivityNbrs larger than the supplied number.
|
||||
|If null defaults to -1 which will return all Checking SalesActivities
|
||||
|
||||
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|
||||
|-----------------------------------------------------------------------------
|
||||
|Returns all Checking Sales with ActivityNbrs that occured on or after the supplied date
|
||||
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|
||||
|returns all Checking Sales Activities
|
||||
|
||||
NOTES:
|
||||
- ALL HELOC type loans are technically 'children' of a mainline loan. A person may get approved for a 100,000 mainline loan
|
||||
but take out only 5k at a time via fixed loans. For incentive purposes we do not want to pull in the activity for HELOC's children loans
|
||||
instead we pull in Flex Mainline (FLML) Loans.
|
||||
- For mainline loans we use the first credit limit amount that is not 0 as the loan amount (the amount the customer was approved for)
|
||||
- For loans that do not have a parent mainline we use the original balance amount on the loan (the amount the customer has available after approval)
|
||||
- Use ContractDate as the date of the sale. This is the day that the customer signs for the loan. There is a legal grace-period between
|
||||
When a loan is signed and when the loan is booked into the banking system. This is why there is a gap between contract date and activity date.
|
||||
-Only need to know if an account has debt protection not how many debt protection policies the account has. We select the earliest sold
|
||||
debt protection and add the date and type to signify that the loan has debt protection
|
||||
- LADD type activities seem to produce duplicates occasionally, None were found for mortgage type accounts
|
||||
*/
|
||||
WITH EmployeeEmail AS (
|
||||
SELECT p.PERSNBR As CorePersNbr,
|
||||
addr.TEXT AS EmployeeEmail
|
||||
FROM OSIBANK.PERSEMPL p
|
||||
JOIN OSIBANK.PERSADDRUSE paddr ON
|
||||
p.PERSNBR = PADDR.PERSNBR
|
||||
JOIN OSIBANK.ADDRLINE addr ON
|
||||
paddr.ADDRNBR = addr.ADDRNBR
|
||||
AND paddr.ADDRUSECD = 'EBUS'
|
||||
),
|
||||
OriginatorRole AS (
|
||||
SELECT ACCTNBR, PERSNBR, ACCTROLECD, DATELASTMAINT, EFFDATE
|
||||
from OSIBANK.ACCTACCTROLEPERS a
|
||||
WHERE ACCTROLECD = 'OEMP'
|
||||
GROUP BY ACCTNBR, ACCTROLECD, DATELASTMAINT, EFFDATE, PERSNBR
|
||||
HAVING DATELASTMAINT = MAX(DATELASTMAINT)
|
||||
),
|
||||
LoanLimit AS (
|
||||
SELECT a2.ACCTNBR, a2.CREDITLIMITAMT, a2.DATELASTMAINT
|
||||
FROM OSIBANK.ACCTLOANLIMITHIST a2
|
||||
WHERE a2.CREDITLIMITAMT > '0'
|
||||
GROUP BY a2.ACCTNBR, a2.CREDITLIMITAMT, a2.DATELASTMAINT
|
||||
HAVING MIN(a2.DATELASTMAINT) = a2.DATELASTMAINT
|
||||
ORDER BY CREDITLIMITAMT
|
||||
),
|
||||
OriginalBalance AS (
|
||||
--This assumes there is only 1 Note/Bal sub account for every account
|
||||
--So far that has been true.
|
||||
SELECT ACCTNBR, ORIGBAL
|
||||
FROM OSIBANK.ACCTSUBACCT a2
|
||||
WHERE a2.BALCATCD = 'NOTE'
|
||||
AND a2.BALTYPCD = 'BAL'
|
||||
),
|
||||
DebtProtection AS (
|
||||
SELECT a.ACCTNBR,
|
||||
MIN(var.CALCTYPEFFDATE) AS EffectiveDate,
|
||||
a.BALCATCD
|
||||
FROM OSIBANK.ACCTSUBACCT a
|
||||
INNER JOIN (
|
||||
SELECT ACCTNBR, MIN(SUBACCTNBR) AS SUBACCTNBR
|
||||
FROM OSIBANK.ACCTSUBACCT sa
|
||||
WHERE sa.BALTYPCD = 'SINS'
|
||||
GROUP BY ACCTNBR
|
||||
) b ON a.ACCTNBR = b.ACCTNBR AND a.SUBACCTNBR = b.SUBACCTNBR
|
||||
INNER JOIN OSIBANK.ACCTSUBACCTCALCVAR var ON var.ACCTNBR = a.ACCTNBR AND a.SUBACCTNBR = var.SUBACCTNBR
|
||||
GROUP BY a.ACCTNBR, var.CALCTYPEFFDATE, a.BALCATCD
|
||||
),
|
||||
BorrowerAge AS (
|
||||
SELECT a.ACCTNBR, MAX(p.DATEBIRTH) AS YoungestBirthdate
|
||||
FROM OSIBANK.ACCTACCTROLEPERS a
|
||||
LEFT JOIN OSIBANK.ACCT acc ON a.ACCTNBR = acc.ACCTNBR
|
||||
LEFT JOIN OSIBANK.ACCTROLE r ON r.ACCTROLECD = a.ACCTROLECD
|
||||
LEFT JOIN OSIBANK.PERS p ON a.PERSNBR = p.PERSNBR
|
||||
WHERE a.ACCTROLECD IN ('TRO', 'NTO', 'SIGN')
|
||||
AND (p.DATEDEATH IS NULL OR p.DATEDEATH > acc.CONTRACTDATE)
|
||||
GROUP BY a.ACCTNBR
|
||||
),
|
||||
PHONEMETADATA AS (
|
||||
SELECT p.PERSNBR,
|
||||
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR), ',') AS PhoneNumbers
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
|
||||
GROUP BY p.PERSNBR
|
||||
),
|
||||
EMAILMETADATA AS (
|
||||
SELECT p.PERSNBR,
|
||||
LISTAGG(al.TEXT, ',') AS EmailAddresses
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM', 'EML')
|
||||
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
|
||||
GROUP BY p.PERSNBR
|
||||
)
|
||||
SELECT a.ACTVNBR AS ActivityNbr,
|
||||
a.ACTVDATETIME AS ActivityDateTime,
|
||||
a.SUBJACCTNBR AS SubjectAccountNbr,
|
||||
a.RESPPERSNBR AS ActivityResponsiblePersonNbr,
|
||||
oe.PERSNBR AS OriginatingPersonNbr,
|
||||
a.ACTVTYPCD AS ActivityTypeCode,
|
||||
p.FIRSTNAME AS AssociateFirst,
|
||||
p.LASTNAME AS AssociateLast,
|
||||
p.MDLINIT AS AssociateMiddleInit,
|
||||
--NEW = "New" | REFI = "Refinance"
|
||||
ll.CREDITLIMITAMT AS LoanLimit,
|
||||
ob.OrigBal AS OriginalBalance,
|
||||
COALESCE(ll.CREDITLIMITAMT, ob.ORIGBAL) AS LoanAmount,
|
||||
al.LOANSOURCECD AS LoanSourceCode,
|
||||
--ABS(r.TRANAMT) AS LoanDispersalAmmount,
|
||||
ee.EmployeeEmail AS EmployeeEmail,
|
||||
acc.CURRACCTSTATCD AS CurrentAccountStatus,
|
||||
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
|
||||
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
|
||||
CASE WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','), TAXPERS.FIRSTNAMEUPPER) ELSE NULL END AS TaxPersonName,
|
||||
TAXORG.ORGNAME AS TaxOrgName,
|
||||
acc.BranchOrgNbr As BranchOrgNbr,
|
||||
acc.MjAcctTypCd AS MajorAccountType,
|
||||
acc.CURRMIACCTTYPCD AS MinorAccountType,
|
||||
acc.CONTRACTDATE AS AccountContractDate,
|
||||
org.ORGNAME AS BranchOrgName,
|
||||
dp.EffectiveDate AS DebtProtectionEffectiveDate,
|
||||
dp.BALCATCD AS DebtProtectionCategory,
|
||||
CASE
|
||||
WHEN
|
||||
ba.YOUNGESTBIRTHDATE IS NOT NULL AND
|
||||
p2.DATEBIRTH IS NOT NULL
|
||||
THEN
|
||||
GREATEST(ba.YOUNGESTBIRTHDATE, p2.DATEBIRTH)
|
||||
ELSE
|
||||
COALESCE(ba.YOUNGESTBIRTHDATE, p2.DATEBIRTH)
|
||||
END AS YoungestBirthdateOnLoan,
|
||||
CASE
|
||||
WHEN
|
||||
acc.ACCTNBR IN (
|
||||
SELECT acctnbr
|
||||
FROM OSIBANK.ACCTACCTROLEORG aro
|
||||
Where aro.ACCTROLECD IN ('DBA', 'LLC', 'UNAS')
|
||||
) OR
|
||||
acc.TAXRPTFORORGNBR IS NOT NULL
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END AS HasOrgRoles,
|
||||
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
|
||||
emd.EmailAddresses AS TaxPersonEmailAddresses
|
||||
FROM OSIBANK.ACTV a
|
||||
LEFT JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = a.SUBJACCTNBR
|
||||
LEFT JOIN OriginatorRole oe ON acc.ACCTNBR = oe.AcctNbr
|
||||
LEFT JOIN OSIBANK.PERS p ON p.PERSNBR = oe.PERSNBR
|
||||
LEFT JOIN OSIBANK.PERS taxpers ON acc.TAXRPTFORPERSNBR = TAXPERS.PERSNBR
|
||||
LEFT JOIN OSIBANK.ORG taxorg ON acc.TAXRPTFORORGNBR = TAXORG.ORGNBR
|
||||
JOIN OSIBANK.ORG org ON org.ORGNBR = acc.BRANCHORGNBR
|
||||
LEFT JOIN EmployeeEmail ee ON p.PERSNBR = ee.CorePersNbr
|
||||
--Uncomment to get Loan Dispersal Transaction Information
|
||||
--LEFT JOIN OSIBANK.RTXN r ON acc.ACCTNBR = r.ACCTNBR AND r.RTXNTYPCD = 'NDSB'
|
||||
LEFT JOIN OSIBANK.ACCTLOAN al ON acc.ACCTNBR = al.ACCTNBR
|
||||
LEFT JOIN LoanLimit ll ON ll.AcctNbr = acc.ACCTNBR
|
||||
LEFT JOIN OriginalBalance ob ON ob.AcctNbr = acc.ACCTNBR
|
||||
LEFT JOIN DebtProtection dp ON dp.ACCTNBR = acc.ACCTNBR
|
||||
LEFT JOIN OSIBANK.ACTVSUBACTV sa ON sa.ACTVNBR = a.ACTVNBR
|
||||
LEFT JOIN BorrowerAge ba ON ba.AcctNbr = acc.ACCTNBR
|
||||
LEFT JOIN OSIBANK.PERS p2 ON acc.TAXRPTFORPERSNBR = p2.PERSNBR
|
||||
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
|
||||
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
|
||||
WHERE acc.MJACCTTYPCD IN ('CNS', 'MLN', 'MTG')
|
||||
AND acc.CURRMIACCTTYPCD IN ('HE01', 'FE01', 'MF01', 'FE02', 'FNMA', 'FRML', 'FRMH', 'MPFR', 'MJ30', 'HM01', 'HM02',
|
||||
'MF10', 'HM03', 'HM04', 'DEF3', 'ML01', 'ML03', 'MJ03', 'MJ05', 'MJ07', 'MF15', 'MF20', 'MF30', 'MC93', 'MA55', 'MS30',
|
||||
'MS10', 'MS15', 'MS20', 'MS40', 'MC09', 'ML02', 'MA01', 'MP05', 'MA05', 'MC01', 'MI05', 'MC03', 'MJ55', 'MC91', 'MF40',
|
||||
'MS05', 'MS07', 'MI03', 'MA03', 'MA07', 'MA27', 'ML23', 'ML21', 'MP25', 'MC21', 'MA21', 'MJ27', 'HM05', 'MA23', 'MA25',
|
||||
'MI25', 'MJ23', 'MJ25')
|
||||
AND (a.ACTVTYPCD = 'ADAC' OR a.ACTVTYPCD = 'LADD')
|
||||
AND LOWER(sa.TABLEID) = 'acct'
|
||||
AND LOWER(sa.COLUMNID) = 'acctnbr'
|
||||
AND a.ACTVNBR > TO_NUMBER(COALESCE(:afterActivityNbr, '-1'))
|
||||
AND a.ACTVDATETIME >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
|
||||
+164
@@ -0,0 +1,164 @@
|
||||
/*New Vehicle Account Sale Query
|
||||
----------------------------------
|
||||
DESCRIPTION:
|
||||
Get all Activities related to New Mortgage Accounts (ActvType = AADD and AccountType = ('FE01', 'MF01', 'FE02', 'FLML')
|
||||
after a supplied DateTime (inclusive) or after a supplied ActivityNumber (not inclusive) or both.
|
||||
Supplies Activity Data as well as the Account Number of the new account and the account status at the time of querying
|
||||
|
||||
RETURNS: Models/Activity/NewCheckingAccountActivity.cs
|
||||
|
||||
PARAMS:
|
||||
|
||||
|afterActivityNbr : Null or Int (as string)
|
||||
|------------------------------------------------------------------------------
|
||||
|Returns all Checking Sales with ActivityNbrs larger than the supplied number.
|
||||
|If null defaults to -1 which will return all Checking SalesActivities
|
||||
|
||||
|newerThanDateTime : Null or Datetime in format 'YYYY-MM-DD HH24:MI:SS' (as string)
|
||||
|-----------------------------------------------------------------------------
|
||||
|Returns all Checking Sales with ActivityNbrs that occured on or after the supplied date
|
||||
|If null defaults to '0001-01-01 00:00:00' which is oracles MIN Date time, this effectively
|
||||
|returns all Checking Sales Activities
|
||||
Potential Types: DLxx may be added in the future
|
||||
'BE21','DL01','DL06','DL07','DL08','DL09','DL10','DL11','DL12','DL13','DL14','DL16','DV01','DV02','DV03','DV04','DV05','DV06','DV07','DV08',
|
||||
NOTES:
|
||||
- See Mortgage Loan Notes
|
||||
-Only need to know if an account has debt protection not how many debt protection policies the account has. We select the earliest sold
|
||||
debt protection and add the date and type to signify that the loan has debt protection
|
||||
- LADD type activities seem to produce duplicates occasionally, None were found for vehicle type accounts
|
||||
*/
|
||||
WITH EmployeeEmail AS (
|
||||
SELECT
|
||||
p.PERSNBR As CorePersNbr,
|
||||
addr.TEXT AS EmployeeEmail
|
||||
FROM
|
||||
OSIBANK.PERSEMPL p
|
||||
JOIN OSIBANK.PERSADDRUSE paddr ON
|
||||
p.PERSNBR = PADDR.PERSNBR
|
||||
JOIN OSIBANK.ADDRLINE addr ON
|
||||
paddr.ADDRNBR = addr.ADDRNBR
|
||||
AND paddr.ADDRUSECD = 'EBUS'
|
||||
),
|
||||
OriginatorRole AS (
|
||||
SELECT ACCTNBR, PERSNBR, ACCTROLECD, DATELASTMAINT, EFFDATE from OSIBANK.ACCTACCTROLEPERS a
|
||||
WHERE ACCTROLECD = 'OEMP'
|
||||
GROUP BY ACCTNBR, ACCTROLECD, DATELASTMAINT, EFFDATE, PERSNBR
|
||||
HAVING DATELASTMAINT = MAX(DATELASTMAINT)
|
||||
),
|
||||
OriginalBalance AS (
|
||||
--This assumes there is only 1 Note/Bal sub account for every account
|
||||
--So far that has been true.
|
||||
SELECT ACCTNBR, ORIGBAL FROM OSIBANK.ACCTSUBACCT a2
|
||||
WHERE a2.BALCATCD = 'NOTE' AND a2.BALTYPCD = 'BAL'
|
||||
),
|
||||
DebtProtection AS (
|
||||
SELECT
|
||||
a.ACCTNBR,
|
||||
MIN(var.CALCTYPEFFDATE) AS EffectiveDate,
|
||||
a.BALCATCD
|
||||
FROM OSIBANK.ACCTSUBACCT a
|
||||
INNER JOIN (
|
||||
SELECT ACCTNBR, MAX(SUBACCTNBR) AS SUBACCTNBR FROM OSIBANK.ACCTSUBACCT sa
|
||||
WHERE sa.BALTYPCD = 'SINS'
|
||||
GROUP BY ACCTNBR
|
||||
) b ON a.ACCTNBR = b.ACCTNBR AND a.SUBACCTNBR = b.SUBACCTNBR
|
||||
INNER JOIN OSIBANK.ACCTSUBACCTCALCVAR var ON var.ACCTNBR = a.ACCTNBR AND a.SUBACCTNBR = var.SUBACCTNBR
|
||||
GROUP BY a.ACCTNBR, var.CALCTYPEFFDATE, a.BALCATCD
|
||||
),
|
||||
BorrowerAge AS (
|
||||
SELECT a.ACCTNBR, MAX(p.DATEBIRTH) AS YoungestBirthdate FROM OSIBANK.ACCTACCTROLEPERS a
|
||||
LEFT JOIN OSIBANK.ACCT acc ON a.ACCTNBR = acc.ACCTNBR
|
||||
LEFT JOIN OSIBANK.ACCTROLE r ON r.ACCTROLECD = a.ACCTROLECD
|
||||
LEFT JOIN OSIBANK.PERS p ON a.PERSNBR = p.PERSNBR
|
||||
WHERE a.ACCTROLECD IN ('TRO','NTO','SIGN') AND (p.DATEDEATH IS NULL OR p.DATEDEATH > acc.CONTRACTDATE)
|
||||
GROUP BY a.ACCTNBR
|
||||
),
|
||||
PHONEMETADATA AS (
|
||||
SELECT
|
||||
p.PERSNBR,
|
||||
LISTAGG((pp.AREACD || pp.EXCHANGE || pp.PHONENBR),',') AS PhoneNumbers
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSPHONE pp ON p.PERSNBR = pp.PERSNBR AND pp.PHONEUSECD != 'BUS'
|
||||
GROUP BY p.PERSNBR
|
||||
),
|
||||
EMAILMETADATA AS (
|
||||
SELECT
|
||||
p.PERSNBR,
|
||||
LISTAGG(al.TEXT,',') AS EmailAddresses
|
||||
FROM OSIBANK.PERS p
|
||||
LEFT JOIN OSIBANK.PERSADDRUSE pa ON p.PERSNBR = pa.PERSNBR AND pa.ADDRUSECD IN ('EHOM','EML')
|
||||
LEFT JOIN OSIBANK.ADDRLINE al ON pa.ADDRNBR = al.ADDRNBR AND al.LINENBR = 1
|
||||
GROUP BY p.PERSNBR
|
||||
)
|
||||
SELECT
|
||||
a.ACTVNBR AS ActivityNbr,
|
||||
a.ACTVDATETIME AS ActivityDateTime,
|
||||
a.SUBJACCTNBR AS SubjectAccountNbr,
|
||||
a.RESPPERSNBR AS ActivityResponsiblePersonNbr,
|
||||
oe.PERSNBR AS OriginatingPersonNbr,
|
||||
a.ACTVTYPCD AS ActivityTypeCode,
|
||||
p.FIRSTNAME AS AssociateFirst,
|
||||
p.LASTNAME AS AssociateLast,
|
||||
p.MDLINIT AS AssociateMiddleInit,
|
||||
--NEW = "New" | REFI = "Refinance"
|
||||
ob.OrigBal AS LoanAmount,
|
||||
al.LOANSOURCECD AS LoanSourceCode,
|
||||
--ABS(r.TRANAMT) AS LoanDispersalAmmount,
|
||||
ee.EmployeeEmail AS EmployeeEmail,
|
||||
acc.CURRACCTSTATCD AS CurrentAccountStatus,
|
||||
acc.TAXRPTFORPERSNBR AS TaxPersonNbr,
|
||||
acc.TAXRPTFORORGNBR AS TaxOrgNbr,
|
||||
CASE WHEN acc.TAXRPTFORPERSNBR IS NOT NULL THEN CONCAT(CONCAT(TAXPERS.LASTNAMEUPPER, ','),TAXPERS.FIRSTNAMEUPPER) ELSE NULL END AS TaxPersonName,
|
||||
TAXORG.ORGNAME AS TaxOrgName,
|
||||
acc.BranchOrgNbr As BranchOrgNbr,
|
||||
acc.MjAcctTypCd AS MajorAccountType,
|
||||
acc.CURRMIACCTTYPCD AS MinorAccountType,
|
||||
acc.CONTRACTDATE AS AccountContractDate,
|
||||
org.ORGNAME AS BranchOrgName,
|
||||
dp.EffectiveDate AS DebtProtectionEffectiveDate,
|
||||
dp.BALCATCD AS DebtProtectionCategory,
|
||||
CASE
|
||||
WHEN
|
||||
ba.YOUNGESTBIRTHDATE IS NOT NULL AND
|
||||
p2.DATEBIRTH IS NOT NULL
|
||||
THEN
|
||||
GREATEST(ba.YoungestBirthdate, p2.DATEBIRTH)
|
||||
ELSE
|
||||
COALESCE (ba.YoungestBirthdate, p2.DATEBIRTH)
|
||||
END AS YoungestBirthdateOnLoan,
|
||||
CASE
|
||||
WHEN
|
||||
acc.ACCTNBR IN (
|
||||
SELECT acctnbr FROM OSIBANK.ACCTACCTROLEORG aro
|
||||
Where aro.ACCTROLECD IN ('DBA', 'LLC','UNAS')
|
||||
) OR
|
||||
acc.TAXRPTFORORGNBR IS NOT NULL
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END AS HasOrgRoles,
|
||||
pmd.PhoneNumbers AS TaxPersonPhoneNumbers,
|
||||
emd.EmailAddresses AS TaxPersonEmailAddresses
|
||||
FROM OSIBANK.ACTV a
|
||||
JOIN OSIBANK.ACCT acc ON acc.ACCTNBR = a.SUBJACCTNBR
|
||||
LEFT JOIN OriginatorRole oe ON acc.ACCTNBR = oe.AcctNbr
|
||||
LEFT JOIN OSIBANK.PERS p ON p.PERSNBR = oe.PERSNBR
|
||||
LEFT JOIN OSIBANK.PERS taxpers ON acc.TAXRPTFORPERSNBR = TAXPERS.PERSNBR
|
||||
LEFT JOIN OSIBANK.ORG taxorg ON acc.TAXRPTFORORGNBR = TAXORG.ORGNBR
|
||||
JOIN OSIBANK.ORG org ON org.ORGNBR = acc.BRANCHORGNBR
|
||||
LEFT JOIN EmployeeEmail ee ON p.PERSNBR = ee.CorePersNbr
|
||||
--Uncomment to get Loan Dispersal Transaction Information
|
||||
--LEFT JOIN OSIBANK.RTXN r ON acc.ACCTNBR = r.ACCTNBR AND r.RTXNTYPCD = 'NDSB'
|
||||
LEFT JOIN OSIBANK.ACCTLOAN al ON acc.ACCTNBR = al.ACCTNBR
|
||||
LEFT JOIN OriginalBalance ob ON ob.AcctNbr = acc.ACCTNBR
|
||||
LEFT JOIN DebtProtection dp ON dp.ACCTNBR = acc.ACCTNBR
|
||||
LEFT JOIN OSIBANK.ACTVSUBACTV sa ON sa.ACTVNBR = a.ACTVNBR
|
||||
LEFT JOIN BorrowerAge ba ON ba.AcctNbr = acc.ACCTNBR
|
||||
LEFT JOIN OSIBANK.PERS p2 ON acc.TAXRPTFORPERSNBR = p2.PERSNBR
|
||||
LEFT JOIN PHONEMETADATA pmd ON taxpers.PERSNBR = pmd.PERSNBR
|
||||
LEFT JOIN EMAILMETADATA emd ON taxpers.PERSNBR = emd.PERSNBR
|
||||
WHERE
|
||||
acc.MJACCTTYPCD IN ('CNS','CML')
|
||||
AND acc.CURRMIACCTTYPCD IN ('BE21','DV01','DV02','DV03','DV04','DV05','DV06','DV07','DV08')
|
||||
AND (a.ACTVTYPCD = 'ADAC' OR a.ACTVTYPCD = 'LADD') AND LOWER(sa.TABLEID) = 'acct' AND LOWER(sa.COLUMNID) = 'acctnbr'
|
||||
AND a.ACTVNBR > TO_NUMBER(COALESCE( :afterActivityNbr, '-1'))
|
||||
AND a.ACTVDATETIME >= TO_TIMESTAMP(COALESCE(:newerThanDateTime, '0001-01-01 00:00:00'), 'YYYY-MM-DD HH24:MI:SS')
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
CUSTOM FIELD INFO (ActivityManager.LF_LEAD_CUSTOM):
|
||||
Credit Card Balance Transfer
|
||||
--LeadCust_39 = External CC Account Number
|
||||
--LeadCust_31 = Landmark Credit Card Number
|
||||
--LeadCust_29 = Transfer Ammount
|
||||
--LeadCust_28 = Payment State + Zip
|
||||
--LeadCust_27 = Payment City
|
||||
--LeadCust_26 = Payment Address Line 1
|
||||
--LeadCust_24 = Transfer Institution
|
||||
|
||||
Direct Deposit
|
||||
--LeadCust_38 = Direct Deposit is Qualified Referral
|
||||
--LeadCust_4 = Direct Deposit Account Number
|
||||
*/
|
||||
|
||||
WITH EmployeeEmail AS (
|
||||
SELECT pers.USERID AS SafUserId,
|
||||
prod.PERSNBR AS SafPersNbr,
|
||||
prod.PRODPERSID AS CorePersNbr,
|
||||
addr.TEXT AS EmployeeEmail
|
||||
FROM SAF.PERSUSER pers
|
||||
JOIN SAF.PERSPROD prod ON
|
||||
pers.PERSNBR = PROD.PERSNBR
|
||||
AND prod.PRODNBR = '3'
|
||||
JOIN OSIBANK.PERSADDRUSE paddr ON
|
||||
prod.PRODPERSID = PADDR.PERSNBR
|
||||
JOIN OSIBANK.ADDRLINE addr ON
|
||||
paddr.ADDRNBR = addr.ADDRNBR
|
||||
AND paddr.ADDRUSECD = 'EBUS'
|
||||
)
|
||||
SELECT ll.ID AS ActivityId,
|
||||
-- These custom fields can be reused, guarentee their contents by only using them for their respective campaigns
|
||||
(CASE WHEN ll.CAMPAIGN = 'CC Balance Transfer' THEN llc.LEADCUST_31 ELSE NULL END) AS LandmarkCreditCardNumber,
|
||||
(CASE WHEN ll.CAMPAIGN = 'Direct Deposit' THEN llc.LEADCUST_4 ELSE NULL END) AS DirectDepositAccountNumber,
|
||||
ll.ORIGINATOR AS OriginatorUserId,
|
||||
safprod.PRODPERSID AS OriginatorPersNbr,
|
||||
p.FIRSTNAME AS OriginatorFirstName,
|
||||
p.LASTNAME AS OriginatorLastName,
|
||||
p.MDLINIT AS OriginatorMiddleInitial,
|
||||
ee.EmployeeEmail AS EmployeeEmail,
|
||||
ll.CAMPAIGN AS Campaign,
|
||||
ll.CATEGORY AS Category,
|
||||
ll.STATION AS ReferralStation,
|
||||
ll.DATELASTMAINT AS LastUpdatedDateTime,
|
||||
(CASE WHEN att.INITIAL_STATION = 'Yes' THEN 1 ELSE 0 END) AS IsInitialStation,
|
||||
(CASE WHEN att.FINAL_STATION = 'Yes' THEN 1 ELSE 0 END) AS IsFinalStation,
|
||||
att.ACTIVITY_ORIGINATION_DATE AS OriginationDateTime,
|
||||
att.ENTER_STATION_DATETIME AS StationDateTime,
|
||||
ll.SOURCE AS OriginatingBranchName,
|
||||
(CASE
|
||||
WHEN SUBSTR(lp.EXTID3, 1, 1) = 'P' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+')
|
||||
ELSE NULL END
|
||||
) AS ReferredPersonNbr,
|
||||
(CASE
|
||||
WHEN SUBSTR(lp.EXTID3, 1, 1) = 'O' THEN REGEXP_SUBSTR(lp.EXTID3, '\d+')
|
||||
ELSE NULL END
|
||||
) AS ReferredOrgNbr,
|
||||
lp.EXTID3 AS ReferredPersOrgNbr
|
||||
FROM ACTIVITYMANAGER.LF_LEAD ll
|
||||
JOIN ACTIVITYMANAGER.LF_LEAD_CUSTOM llc ON
|
||||
ll.ID = llc.ID
|
||||
JOIN SAF.PERSUSER safp ON
|
||||
safp.USERID = ll.ORIGINATOR
|
||||
JOIN SAF.PERSPROD safprod ON
|
||||
SAFPROD.PERSNBR = safp.PERSNBR AND
|
||||
SAFPROD.PRODNBR = '3'
|
||||
JOIN OSIBANK.PERS p ON
|
||||
p.PERSNBR = SAFPROD.PRODPERSID
|
||||
LEFT JOIN EmployeeEmail ee ON
|
||||
ee.SafPersNbr = SAFP.PERSNBR
|
||||
JOIN ACTIVITYMANAGER.LF_PERSON lp ON
|
||||
lp.ID = ll.PERSONID
|
||||
JOIN ACTIVITYMANAGER.ACTIVITY_TIME_TRACKING att
|
||||
ON att.ACTIVITY_ID = ll.ID AND SEQUENCE_NUMBER = (
|
||||
SELECT MAX(SEQUENCE_NUMBER)
|
||||
FROM ACTIVITYMANAGER.ACTIVITY_TIME_TRACKING att2
|
||||
WHERE att2.ACTIVITY_ID = ll.ID
|
||||
)
|
||||
WHERE ll.Id IN :activityIds
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
With PhoneMetaData as (
|
||||
Select p.persnbr, ListAgg((pp.areacd || pp.exchange || pp.phonenbr), ',') As PhoneNumbers
|
||||
From Osibank.Pers p
|
||||
Left Join Osibank.PersPhone pp on p.persnbr = pp.persnbr and pp.phoneusecd != 'BUS'
|
||||
Group By p.persnbr
|
||||
),
|
||||
|
||||
EmailMetaData as (
|
||||
Select p.persnbr, ListAgg(al.text, ',') As EmailAddresses
|
||||
From Osibank.Pers p
|
||||
Left Join Osibank.PersAddrUse pa on p.persnbr = pa.persnbr and pa.ADDRUSECD IN ('EHOM', 'EML')
|
||||
Left Join Osibank.AddrLine al on pa.addrnbr = al.addrnbr and al.linenbr = 1
|
||||
Group By p.persnbr),
|
||||
|
||||
ActivityData as (
|
||||
Select activity.subjacctnbr as AccountNumber, activity.actvnbr as ActivityNumber, activity.datelastmaint as ActivityDateTime
|
||||
From (Select av.subjacctnbr, asv.actvnbr, asv.datelastmaint, ROW_NUMBER() Over (Partition by av.subjacctnbr Order by asv.datelastmaint asc) deliveryUpdate
|
||||
From Osibank.ActvSubActv asv
|
||||
Join Osibank.Actv av on asv.actvnbr = av.actvnbr
|
||||
where (
|
||||
asv.columnID = 'OvrDeliveryMethCd'
|
||||
and asv.OldValue = 'PRNT'
|
||||
and asv.databaseactvcd = 'UPD'
|
||||
and asv.NewValue = 'WWW'
|
||||
and asv.datelastmaint > TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS')
|
||||
)
|
||||
) activity
|
||||
|
||||
Where deliveryUpdate = 1 and activity.datelastmaint > TO_TIMESTAMP(:newerThanDateTime, 'YYYY-MM-DD HH24:MI:SS'))
|
||||
|
||||
Select ad.*, ma.shareacctnbr as ShareAccountNumber,
|
||||
ma.primarypersnbr as PersonNumber,
|
||||
ac.taxrptfororgnbr as OrganizationNumber,
|
||||
ac.currmiaccttypcd as MinorAccountType,
|
||||
pe.firstname as FirstName, pe.lastname as LastName,
|
||||
pmd.phonenumbers, emd.emailaddresses
|
||||
From Osibank.Acct ac
|
||||
Join ActivityData ad on ad.AccountNumber = ac.acctnbr
|
||||
Join Osibank.MemberAgreement ma on ma.shareacctnbr = ac.acctnbr
|
||||
Join Osibank.Pers pe on pe.persnbr = ma.primarypersnbr
|
||||
Left Join PhoneMetaData pmd on pe.persnbr = pmd.persnbr
|
||||
Left Join EmailMetaData emd on pe.persnbr = emd.persnbr
|
||||
where ac.OvrDeliveryMethCd = 'WWW'
|
||||
Reference in New Issue
Block a user