@@ -1358,6 +1358,162 @@ output application/json
13581358}]]></ee:set-payload>
13591359 </ee:message>
13601360 </ee:transform>
1361+ </flow>
1362+ <flow name="get:\coach\(coachId)\stats" doc:id="ffd9b198-afcf-48f3-9378-d284e6a8290f" >
1363+ <set-variable value="#[attributes.uriParams.' coachId' ]" doc:name=' Save " coachId" ' doc:id="741cebb4-072d-4d8e-9af8-7bcf4bb79e4e" variableName="coachId" />
1364+ <set-variable value="#[attributes.queryParams.' interval' default " overall" ]" doc:name=' Save " interval" ' doc:id="9c99f9b4-5bd8-4801-b234-db24ca47c389" variableName="interval" />
1365+ <set-variable value="#[attributes.queryParams.' teamSeasonId' ]" doc:name=' Save " teamSeasonId" ' doc:id="e219a9fd-c2c6-47ed-851d-39b229927b1a" variableName="teamSeasonId" />
1366+ <set-variable value="#[attributes.queryParams.' seasonId' ]" doc:name=' Save " seasonId" ' doc:id="0bab0beb-a972-4a89-b6e2-ba31b3902cf7" variableName="seasonId" />
1367+ <choice doc:name="Choice" doc:id="c26ef9b8-ee01-4386-b285-b20f62423ff7">
1368+ <when expression="#[vars.interval != ' overall' ]">
1369+ <set-variable value='#[%dw 2.0 import * from dw::core::Dates import floor from dw::core::Numbers output application/json var interval = vars.interval var today = now() as Date fun quarterStart(d: Date): Date = date({ year: d.year, month: floor(((d.month) - 1) / 3) * 3 + 1, day: 1 }) var first = if (interval == "month") atBeginningOfMonth(today) else if (interval == "quarter") quarterStart(today) else if (interval == "year") atBeginningOfYear(today) else if (interval == "week") atBeginningOfWeek(today) else today var last = if (interval == "month") (atBeginningOfMonth(today + |P1M|) - |P1D|) as Date else if (interval == "quarter") (quarterStart(today + |P3M|) - |P1D|) as Date else if (interval == "year") (atBeginningOfYear(today + |P1Y|) - |P1D|) as Date else if (interval == "week") (atBeginningOfWeek(today + |P7D|) - |P1D|) as Date else today --- { firstDay: first, lastDay : last }]' doc:name="Set Dates" doc:id="e6d6fe3e-ed67-4f99-941b-19027f57b0ee" variableName="dates" />
1370+ </when>
1371+ </choice>
1372+ <set-variable doc:name="query" doc:id="b267385d-523f-491d-97cf-9fbb7109d686" variableName="query" value="#[%dw 2.0 import * from dw::core::Dates import floor from dw::core::Numbers output application/json var firstDay = vars.dates.firstDay default "" var lastDay = vars.dates.lastDay default "" var interval = vars.interval var teamSeasonId = vars.teamSeasonId var seasonId = vars.seasonId var tq1 = if (interval == 'overall') "" else "Session__r.Session_Date__c >= $(firstDay) AND Session__r.Session_Date__c <= $(lastDay)" var tq2 = if (isEmpty(teamSeasonId)) "" else "Session__r.Team_Season__c = '$(teamSeasonId)'" var tq3 = if (isEmpty(seasonId)) "" else "Session__r.Team_Season__r.Season__c = '$(seasonId)'" var taskQuery = ([tq1, tq2, tq3] filter (item) -> item != "") joinBy " AND " var sq1 = if (interval == 'overall') "" else "Session_Date__c >= $(firstDay) AND Session_Date__c <= $(lastDay)" var sq2 = if (isEmpty(teamSeasonId)) "" else "Team_Season__c = '$(teamSeasonId)'" var sq3 = if (isEmpty(seasonId)) "" else "Team_Season__r.Season__c = '$(seasonId)'" var sessionQuery = ([sq1, sq2, sq3] filter (item) -> item != "") joinBy " AND " var attendanceQuery = taskQuery --- { "tasksQuery": taskQuery, "sessionsQuery": sessionQuery, "attendancesQuery": attendanceQuery }]"/>
1373+ <salesforce:query doc:name="Attendances" doc:id="a8fac832-eb95-4309-aecf-9be8eeb63cb4" config-ref="Salesforce_Config" target="attendances">
1374+ <salesforce:salesforce-query><![CDATA[SELECT COUNT()
1375+ FROM Attendance__c
1376+ WHERE (Session__r.Team_Season__r.Coach_Writing__c = ' :coachId' OR Session__r.Team_Season__r.Coach_Soccer__c = ' :coachId' )
1377+ :q]]></salesforce:salesforce-query>
1378+ <salesforce:parameters><![CDATA[#[%dw 2.0
1379+ output application/java
1380+ ---
1381+ {
1382+ coachId: vars.coachId,
1383+ q: if (isEmpty((vars.query.attendancesQuery default "") as String))
1384+ ""
1385+ else
1386+ " AND " ++ (vars.query.attendancesQuery default "") as String
1387+ }]]]></salesforce:parameters>
1388+ </salesforce:query>
1389+ <salesforce:query doc:name=' Attendances " True" ' doc:id="13ddeea7-b74c-4a82-99ef-f2a49c53aab8" config-ref="Salesforce_Config" target="attendancesTrue">
1390+ <salesforce:salesforce-query><![CDATA[SELECT COUNT()
1391+ FROM Attendance__c
1392+ WHERE (Session__r.Team_Season__r.Coach_Writing__c = ' :coachId' OR Session__r.Team_Season__r.Coach_Soccer__c = ' :coachId' )
1393+ AND Attended__c = true
1394+ :q]]></salesforce:salesforce-query>
1395+ <salesforce:parameters><![CDATA[#[%dw 2.0
1396+ output application/java
1397+ ---
1398+ {
1399+ coachId: vars.coachId,
1400+ q: if (isEmpty((vars.query.attendancesQuery default "") as String))
1401+ ""
1402+ else
1403+ " AND " ++ (vars.query.attendancesQuery default "") as String
1404+ }]]]></salesforce:parameters>
1405+ </salesforce:query>
1406+ <salesforce:query doc:name="Sessions" doc:id="98be4b7b-ed86-4faa-afe2-8036661a4047" config-ref="Salesforce_Config" target="sessions">
1407+ <salesforce:salesforce-query><![CDATA[SELECT COUNT()
1408+ FROM Session__c
1409+ WHERE (Team_Season__r.Coach_Writing__c = ' :coachId' OR Team_Season__r.Coach_Soccer__c = ' :coachId' )
1410+ :q]]></salesforce:salesforce-query>
1411+ <salesforce:parameters><![CDATA[#[%dw 2.0
1412+ output application/java
1413+ ---
1414+ {
1415+ coachId: vars.coachId,
1416+ q: if (isEmpty((vars.query.sessionsQuery default "") as String))
1417+ ""
1418+ else
1419+ " AND " ++ (vars.query.sessionsQuery default "") as String
1420+ }]]]></salesforce:parameters>
1421+ </salesforce:query>
1422+ <salesforce:query doc:name=' Sessions " Completed" ' doc:id="fff15502-7569-4860-a491-a9237522b7d9" config-ref="Salesforce_Config" target="sessionsCompleted">
1423+ <salesforce:salesforce-query><![CDATA[SELECT COUNT()
1424+ FROM Session__c
1425+ WHERE (Team_Season__r.Coach_Writing__c = ' :coachId' OR Team_Season__r.Coach_Soccer__c = ' :coachId' )
1426+ :subquery
1427+ :q]]></salesforce:salesforce-query>
1428+ <salesforce:parameters><![CDATA[#[%dw 2.0
1429+ import * from dw::core::Dates // atBeginningOfDay, etc. (not used here)
1430+
1431+ var dateTime = now() >> "America/Los_Angeles"
1432+ var nowDate = (dateTime as Date) as String
1433+ var nowTime = dateTime as String { format: "HH:mm:ss" } ++ ' Z'
1434+
1435+ output application/java
1436+ ---
1437+ {
1438+ coachId: vars.coachId,
1439+ subquery: " AND Session_Date__c <= $(nowDate) AND Session_End__c <= $(nowTime)",
1440+ q: if (isEmpty((vars.query.sessionsQuery default "") as String))
1441+ ""
1442+ else
1443+ " AND " ++ (vars.query.sessionsQuery default "") as String
1444+ }]]]></salesforce:parameters>
1445+ </salesforce:query>
1446+ <salesforce:query doc:name="Tasks" doc:id="34d761e8-bdca-46bd-b7ee-5b915c82f688" config-ref="Salesforce_Config" target="tasks">
1447+ <salesforce:salesforce-query><![CDATA[SELECT COUNT()
1448+ FROM SCORES_Task__c
1449+ WHERE Assigned_To__c = ' :coachId'
1450+ :q]]></salesforce:salesforce-query>
1451+ <salesforce:parameters><![CDATA[#[%dw 2.0
1452+ output application/java
1453+ ---
1454+ {
1455+ coachId: vars.coachId,
1456+ q: if (isEmpty((vars.query.tasksQuery default "") as String))
1457+ ""
1458+ else
1459+ " AND " ++ (vars.query.tasksQuery default "") as String
1460+ }]]]></salesforce:parameters>
1461+ </salesforce:query>
1462+ <salesforce:query doc:name=' Tasks " Done" ' doc:id="6087d402-6845-4c26-b01f-19513c816964" config-ref="Salesforce_Config" target="tasksDone">
1463+ <salesforce:salesforce-query><![CDATA[SELECT COUNT()
1464+ FROM SCORES_Task__c
1465+ WHERE Assigned_To__c = ' :coachId'
1466+ AND Task_Status__c = ' Done'
1467+ :q]]></salesforce:salesforce-query>
1468+ <salesforce:parameters><![CDATA[#[%dw 2.0
1469+ output application/java
1470+ ---
1471+ {
1472+ coachId: vars.coachId,
1473+ q: if (isEmpty((vars.query.tasksQuery default "") as String))
1474+ ""
1475+ else
1476+ " AND " ++ (vars.query.tasksQuery default "") as String
1477+ }]]]></salesforce:parameters>
1478+ </salesforce:query>
1479+ <ee:transform doc:name="Prepare Response" doc:id="e67b671b-2a19-4189-884f-ce588b0fa2d3">
1480+ <ee:message>
1481+ <ee:set-payload><![CDATA[%dw 2.0
1482+
1483+ fun ratio(trueList = [], totalList = []): String =
1484+ if (sizeOf(totalList default []) != 0)
1485+ ((sizeOf(trueList default []) as Number
1486+ / sizeOf(totalList default []) ) * 100)
1487+ as String { format: "##0.00", roundMode: "HALF_UP" } ++ "%"
1488+ else "100%"
1489+
1490+
1491+ output application/json
1492+ ---
1493+ {
1494+ "coach": vars.coachId,
1495+ "interval": vars.interval,
1496+ "teamseason": vars.teamSeasonId default "",
1497+ "season": vars.seasonId default "",
1498+ "sessions": {
1499+ "completed": sizeOf(vars.sessionsCompleted default []),
1500+ "total": sizeOf(vars.sessions default []),
1501+ "ratio": ratio(vars.sessionsCompleted, vars.sessions)
1502+ },
1503+ "tasks": {
1504+ "done": sizeOf(vars.tasksDone default []),
1505+ "total": sizeOf(vars.tasks default []),
1506+ "ratio": ratio(vars.tasksDone, vars.tasks)
1507+ },
1508+ "attendances":{
1509+ "true": sizeOf(vars.attendancesTrue default []),
1510+ "total": sizeOf(vars.attendances default []),
1511+ "ratio": ratio(vars.attendancesTrue, vars.attendances)
1512+ }
1513+ }
1514+ ]]></ee:set-payload>
1515+ </ee:message>
1516+ </ee:transform>
13611517 </flow>
13621518 <flow name="get:\coach\(coachId)\teamseasons\(teamSeasonId)\stats" doc:id="59de02c6-9de9-4b00-9b6c-f7af6438b90e" >
13631519 <set-variable value="#[attributes.uriParams.' coachId' ]" doc:name=' Save " coachId" ' doc:id="66df3a39-36f9-4328-81d5-ed4a29902fb1" variableName="coachId" />
0 commit comments