@@ -1358,6 +1358,162 @@ output application/json
1358
1358
}]]></ee:set-payload>
1359
1359
</ee:message>
1360
1360
</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>
1361
1517
</flow>
1362
1518
<flow name="get:\coach\(coachId)\teamseasons\(teamSeasonId)\stats" doc:id="59de02c6-9de9-4b00-9b6c-f7af6438b90e" >
1363
1519
<set-variable value="#[attributes.uriParams.' coachId' ]" doc:name=' Save " coachId" ' doc:id="66df3a39-36f9-4328-81d5-ed4a29902fb1" variableName="coachId" />
0 commit comments