{
  "orderPreparation": {
    "parameters": {
      "max_planned_orders": {
        "type": "Number",
        "default": "0"
      },
      "min_submitted_orders": {
        "type": "Number",
        "default": "0"
      },
      "min_orders_monday": {
        "type": "Number",
        "default": "0"
      },
      "min_orders_tuesday": {
        "type": "Number",
        "default": "0"
      },
      "min_orders_wednesday": {
        "type": "Number",
        "default": "0"
      },
      "min_orders_thursday": {
        "type": "Number",
        "default": "0"
      },
      "min_orders_friday": {
        "type": "Number",
        "default": "0"
      },
      "min_orders_saturday": {
        "type": "Number",
        "default": "0"
      },
      "min_orders_sunday": {
        "type": "Number",
        "default": "0"
      },
      "except_days": {
        "type": "String",
        "default": "\"''\""
      },
      "run_daily_plan_service": {
        "type": "Boolean",
        "default": "true"
      },
      "wait_for_daily_plan_service": {
        "type": "Number",
        "default": "60"
      }
    },
    "allowUndeclared": false
  },
  "instructions": [
    {
      "TYPE": "Try",
      "try": {
        "instructions": [
          {
            "TYPE": "If",
            "predicate": "$run_daily_plan_service",
            "then": {
              "instructions": [
                {
                  "TYPE": "Execute.Named",
                  "jobName": "run-dailyplan-service",
                  "label": "run-dailyplan-service"
                },
                {
                  "TYPE": "Sleep",
                  "duration": "$wait_for_daily_plan_service",
                  "label": "wait-for-daily-plan-service"
                }
              ]
            },
            "label": "check-daily-plan-service"
          },
          {
            "TYPE": "Execute.Named",
            "jobName": "get-settings",
            "label": "get-settings"
          },
          {
            "TYPE": "Execute.Named",
            "jobName": "get-dailyplan-orders",
            "label": "get-dailyplan-orders"
          },
          {
            "TYPE": "If",
            "predicate": "$planned_orders_count.toNumber > $max_planned_orders",
            "then": {
              "instructions": [
                {
                  "TYPE": "Fail",
                  "message": "\"Maximum of planned orders [${max_planned_orders}] exceeded: ${planned_orders_count}\"",
                  "outcome": {
                    "returnCode": 0
                  },
                  "uncatchable": false
                }
              ]
            }
          },
          {
            "TYPE": "If",
            "predicate": "$submitted_orders_count.toNumber < $min_submitted_orders",
            "then": {
              "instructions": [
                {
                  "TYPE": "Fail",
                  "message": "\"Minimum of submitted orders [${min_submitted_orders}] not reached: ${submitted_orders_count}\"",
                  "outcome": {
                    "returnCode": 0
                  },
                  "uncatchable": false
                }
              ]
            }
          },
          {
            "TYPE": "If",
            "predicate": "$submitted_orders_least_monday.toNumber < $min_orders_monday || $submitted_orders_least_tuesday.toNumber < $min_orders_tuesday || $submitted_orders_least_wednesday.toNumber < $min_orders_wednesday || $submitted_orders_least_thursday.toNumber < $min_orders_thursday || $submitted_orders_least_friday.toNumber < $min_orders_friday || $submitted_orders_least_saturday.toNumber < $min_orders_saturday || $submitted_orders_least_sunday.toNumber < $min_orders_sunday",
            "then": {
              "instructions": [
                {
                  "TYPE": "Fail",
                  "message": "\"Minimum of submitted orders per day [${min_orders_monday}, ${min_orders_tuesday}, ${min_orders_wednesday}, ${min_orders_thursday}, ${min_orders_friday}, ${min_orders_saturday}, ${min_orders_sunday}] not reached: ${submitted_orders_least_monday}, ${submitted_orders_least_tuesday}, ${submitted_orders_least_wednesday}, ${submitted_orders_least_thursday}, ${submitted_orders_least_friday}, ${submitted_orders_least_saturday}, ${submitted_orders_least_sunday}\"",
                  "outcome": {
                    "returnCode": 0
                  },
                  "uncatchable": false
                }
              ]
            }
          }
        ]
      },
      "catch": {
        "instructions": [
          {
            "TYPE": "Finish",
            "unsuccessful": true
          }
        ]
      }
    }
  ],
  "title": "Check submitted orders from the Daily Plan",
  "timeZone": "Etc/UTC",
  "jobResourceNames": [
    "AuthenticationSettings"
  ],
  "jobs": {
    "run-dailyplan-service": {
      "agentName": "LinuxAgent",
      "withSubagentClusterIdExpr": false,
      "executable": {
        "TYPE": "InternalExecutable",
        "className": "com.sos.jitl.jobs.rest.JS7RESTClientJob",
        "internalType": "JITL",
        "arguments": {
          "request": "\"{\\n  \\\"endpoint\\\": \\\"/joc/cluster/run\\\",\\n  \\\"method\\\": \\\"POST\\\",\\n  \\\"headers\\\": [],\\n  \\\"body\\\": {\\n    \\\"controllerId\\\": \\\"${js7ControllerId}\\\",\\n    \\\"type\\\": \\\"dailyplan\\\",\\n    \\\"auditLog\\\": {\\n        \\\"comment\\\": \\\"Daily Plan Service started by workflow: ${js7WorkflowPath}\\\"\\n    }\\n  }\\n}\""
        }
      },
      "skipIfNoAdmissionForOrderDay": false,
      "parallelism": 100,
      "graceTimeout": 1,
      "failOnErrWritten": false,
      "warnOnErrWritten": false,
      "isNotRestartable": false
    },
    "get-settings": {
      "agentName": "LinuxAgent",
      "withSubagentClusterIdExpr": false,
      "executable": {
        "TYPE": "InternalExecutable",
        "className": "com.sos.jitl.jobs.rest.JS7RESTClientJob",
        "internalType": "JITL",
        "arguments": {
          "request": "\"{\\n  \\\"endpoint\\\": \\\"/settings\\\",\\n  \\\"method\\\": \\\"POST\\\",\\n  \\\"headers\\\": []\\n}\"",
          "return_variable": "\"[\\n    {\\n        \\\"name\\\": \\\"date_from\\\",\\n        \\\"path\\\": \\\"[(.deliveryDate | strptime(\\\\\\\"yyyy-MM-dd\\\\\\\")), 24*60*60*1000] | add | strftime(\\\\\\\"yyyy-MM-dd\\\\\\\")\\\"\\n    },\\n    {\\n        \\\"name\\\": \\\"date_to\\\",\\n        \\\"path\\\": \\\"[(.configuration.configurationItem | fromjson | .dailyplan.days_ahead_submit.value | (tonumber *24*60*60*1000)), (.deliveryDate | strptime(\\\\\\\"yyyy-MM-dd\\\\\\\") )] | add | strftime(\\\\\\\"yyyy-MM-dd\\\\\\\")\\\"\\n    }\\n]\""
        }
      },
      "skipIfNoAdmissionForOrderDay": false,
      "parallelism": 1,
      "graceTimeout": 1,
      "failOnErrWritten": false,
      "warnOnErrWritten": false,
      "isNotRestartable": false
    },
    "get-dailyplan-orders": {
      "agentName": "LinuxAgent",
      "withSubagentClusterIdExpr": false,
      "executable": {
        "TYPE": "InternalExecutable",
        "className": "com.sos.jitl.jobs.rest.JS7RESTClientJob",
        "internalType": "JITL",
        "arguments": {
          "request": "\"{\\n  \\\"endpoint\\\": \\\"/daily_plan/orders\\\",\\n  \\\"method\\\": \\\"POST\\\",\\n  \\\"headers\\\": [],\\n  \\\"body\\\": {\\n    \\\"dailyPlanDateFrom\\\": ${date_from},\\n    \\\"dailyPlanDateTo\\\": ${date_to}\\n  }\\n}\"",
          "return_variable": "\"[\\n    {\\n        \\\"_comment\\\": \\\"number of planned orders in daily plan period\\\",\\n        \\\"name\\\": \\\"planned_orders_count\\\",\\n        \\\"path\\\": \\\"[.plannedOrderItems[] | select(.state._text == \\\\\\\"PLANNED\\\\\\\" and ( [.orderId[1:11]] | inside(\\\\\\\"${except_days}\\\\\\\" | split(\\\\\\\",\\\\\\\")) | not ) )] | length\\\"\\n    },\\n    {\\n        \\\"_comment\\\": \\\"number of submitted orders in daily plan period\\\",\\n        \\\"name\\\": \\\"submitted_orders_count\\\",\\n        \\\"path\\\": \\\"[.plannedOrderItems[] | select(.state._text == \\\\\\\"SUBMITTED\\\\\\\" and ( [.orderId[1:11]] | inside(\\\\\\\"${except_days}\\\\\\\" | split(\\\\\\\",\\\\\\\")) | not ) )] | length\\\"\\n    },\\n    {\\n        \\\"_comment\\\": \\\"number of submitted oders per day in daily plan period\\\",\\n        \\\"name\\\": \\\"submitted_orders_per_day\\\",\\n        \\\"path\\\": \\\"[.plannedOrderItems[] | select(.state._text == \\\\\\\"SUBMITTED\\\\\\\" and ([.orderId[1:11]] | inside( \\\\\\\"${except_days}\\\\\\\" | split(\\\\\\\",\\\\\\\") ) | not ) )] | group_by(.orderId[1:11]) | map( [first.orderId[1:11], (map(.) | length)])\\\"\\n    },\\n    {\\n        \\\"_comment\\\": \\\"number of least submitted monday oders in daily plan period\\\",\\n        \\\"name\\\": \\\"submitted_orders_least_monday\\\",\\n        \\\"path\\\": \\\"[.plannedOrderItems[] | select(.state._text == \\\\\\\"SUBMITTED\\\\\\\" and ( [.orderId[1:11] | strptime(\\\\\\\"yyyy-MM-dd\\\\\\\") | strftime(\\\\\\\"E\\\\\\\")] | inside([\\\\\\\"Mon\\\\\\\",\\\\\\\"Monday\\\\\\\"]) ) and ( [.orderId[1:11]] | inside(\\\\\\\"${except_days}\\\\\\\" | split(\\\\\\\",\\\\\\\")) | not) )] | group_by(.orderId[1:11]) | map( (map(.) | length) ) | min\\\"\\n    },\\n    {\\n        \\\"_comment\\\": \\\"number of least submitted tuesday oders in daily plan period\\\",\\n        \\\"name\\\": \\\"submitted_orders_least_tuesday\\\",\\n        \\\"path\\\": \\\"[.plannedOrderItems[] | select(.state._text == \\\\\\\"SUBMITTED\\\\\\\" and ( [.orderId[1:11] | strptime(\\\\\\\"yyyy-MM-dd\\\\\\\") | strftime(\\\\\\\"E\\\\\\\")] | inside([\\\\\\\"Tue\\\\\\\",\\\\\\\"Tuesday\\\\\\\"]) ) and ( [.orderId[1:11]] | inside(\\\\\\\"${except_days}\\\\\\\" | split(\\\\\\\",\\\\\\\")) | not) )] | group_by(.orderId[1:11]) | map( (map(.) | length) ) | min\\\"\\n    },\\n    {\\n        \\\"_comment\\\": \\\"number of least submitted wednesday oders in daily plan period\\\",\\n        \\\"name\\\": \\\"submitted_orders_least_wednesday\\\",\\n        \\\"path\\\": \\\"[.plannedOrderItems[] | select(.state._text == \\\\\\\"SUBMITTED\\\\\\\" and ( [.orderId[1:11] | strptime(\\\\\\\"yyyy-MM-dd\\\\\\\") | strftime(\\\\\\\"E\\\\\\\")] | inside([\\\\\\\"Wed\\\\\\\",\\\\\\\"Wednesday\\\\\\\"]) ) and ( [.orderId[1:11]] | inside(\\\\\\\"${except_days}\\\\\\\" | split(\\\\\\\",\\\\\\\")) | not) )] | group_by(.orderId[1:11]) | map( (map(.) | length) ) | min\\\"\\n    },\\n    {\\n        \\\"_comment\\\": \\\"number of least submitted thursday oders in daily plan period\\\",\\n        \\\"name\\\": \\\"submitted_orders_least_thursday\\\",\\n        \\\"path\\\": \\\"[.plannedOrderItems[] | select(.state._text == \\\\\\\"SUBMITTED\\\\\\\" and ( [.orderId[1:11] | strptime(\\\\\\\"yyyy-MM-dd\\\\\\\") | strftime(\\\\\\\"E\\\\\\\")] | inside([\\\\\\\"Thu\\\\\\\",\\\\\\\"Thursday\\\\\\\"]) ) and ( [.orderId[1:11]] | inside(\\\\\\\"${except_days}\\\\\\\" | split(\\\\\\\",\\\\\\\")) | not) )] | group_by(.orderId[1:11]) | map( (map(.) | length) ) | min\\\"\\n    },\\n    {\\n        \\\"_comment\\\": \\\"number of least submitted friday oders in daily plan period\\\",\\n        \\\"name\\\": \\\"submitted_orders_least_friday\\\",\\n        \\\"path\\\": \\\"[.plannedOrderItems[] | select(.state._text == \\\\\\\"SUBMITTED\\\\\\\" and ( [.orderId[1:11] | strptime(\\\\\\\"yyyy-MM-dd\\\\\\\") | strftime(\\\\\\\"E\\\\\\\")] | inside([\\\\\\\"Fri\\\\\\\",\\\\\\\"Friday\\\\\\\"]) ) and ( [.orderId[1:11]] | inside(\\\\\\\"${except_days}\\\\\\\" | split(\\\\\\\",\\\\\\\")) | not) )] | group_by(.orderId[1:11]) | map( (map(.) | length) ) | min\\\"\\n    },\\n    {\\n        \\\"_comment\\\": \\\"number of least submitted saturday oders in daily plan period\\\",\\n        \\\"name\\\": \\\"submitted_orders_least_saturday\\\",\\n        \\\"path\\\": \\\"[.plannedOrderItems[] | select(.state._text == \\\\\\\"SUBMITTED\\\\\\\" and ( [.orderId[1:11] | strptime(\\\\\\\"yyyy-MM-dd\\\\\\\") | strftime(\\\\\\\"E\\\\\\\")] | inside([\\\\\\\"Sat\\\\\\\",\\\\\\\"Saturday\\\\\\\"]) ) and ( [.orderId[1:11]] | inside(\\\\\\\"${except_days}\\\\\\\" | split(\\\\\\\",\\\\\\\")) | not) )] | group_by(.orderId[1:11]) | map( (map(.) | length) ) | min\\\"\\n    },\\n    {\\n        \\\"_comment\\\": \\\"number of least submitted sunday oders in daily plan period\\\",\\n        \\\"name\\\": \\\"submitted_orders_least_sunday\\\",\\n        \\\"path\\\": \\\"[.plannedOrderItems[] | select(.state._text == \\\\\\\"SUBMITTED\\\\\\\" and ( [.orderId[1:11] | strptime(\\\\\\\"yyyy-MM-dd\\\\\\\") | strftime(\\\\\\\"E\\\\\\\")] | inside([\\\\\\\"Sun\\\\\\\",\\\\\\\"Sunday\\\\\\\"]) ) and ( [.orderId[1:11]] | inside(\\\\\\\"${except_days}\\\\\\\" | split(\\\\\\\",\\\\\\\")) | not) )] | group_by(.orderId[1:11]) | map( (map(.) | length) ) | min\\\"\\n    }\\n]\""
        }
      },
      "skipIfNoAdmissionForOrderDay": false,
      "parallelism": 1,
      "graceTimeout": 1,
      "failOnErrWritten": false,
      "warnOnErrWritten": false,
      "isNotRestartable": false
    }
  }
}