|
166 | 166 | </RegistryYield> |
167 | 167 | </ContentPanel> |
168 | 168 |
|
| 169 | + {{! ORCHESTRATOR CONSTRAINTS }} |
| 170 | + <ContentPanel @title="Orchestrator Constraints" @open={{true}} @wrapperClass="bordered-top"> |
| 171 | + <div class="grid grid-cols-1 gap-2 lg:grid-cols-2 lg:gap-2 no-input-group-padding text-xs"> |
| 172 | + <div class="col-span-1 lg:col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-1"> |
| 173 | + Skills & Certifications |
| 174 | + </div> |
| 175 | + <div class="col-span-1 lg:col-span-2"> |
| 176 | + <InputGroup @name="Driver Skills" @helpText="Skills and certifications this driver holds (e.g. refrigerated, hazmat, forklift). Used by the Orchestrator for order matching."> |
| 177 | + <MultiSelect |
| 178 | + @options={{get-fleet-ops-options "driverSkills"}} |
| 179 | + @selected={{@resource.skills}} |
| 180 | + @onChange={{fn (mut @resource.skills)}} |
| 181 | + @placeholder="Select skills…" |
| 182 | + @triggerClass="form-select form-input" |
| 183 | + @disabled={{cannot-write @resource}} |
| 184 | + as |option| |
| 185 | + > |
| 186 | + {{option.label}} |
| 187 | + </MultiSelect> |
| 188 | + </InputGroup> |
| 189 | + </div> |
| 190 | + <div class="col-span-1 lg:col-span-2 text-[11px] uppercase tracking-wide text-gray-500 font-semibold mt-3"> |
| 191 | + Route Limits |
| 192 | + </div> |
| 193 | + <div class="col-span-1 lg:col-span-2 text-xs text-gray-500 dark:text-gray-400 -mt-1"> |
| 194 | + Hard caps applied by the Orchestrator when building a single route. These are separate from the driver's shift schedule, which controls availability windows. |
| 195 | + </div> |
| 196 | + <InputGroup |
| 197 | + @name="Max Driving Time (seconds)" |
| 198 | + @helpText="Maximum total driving time in seconds the Orchestrator may assign to this driver in a single route. Leave blank for no limit. Example: 28800 = 8 hours." |
| 199 | + > |
| 200 | + <Input @value={{@resource.max_travel_time}} @type="number" class="form-input w-full" placeholder="e.g. 28800 (8 h)" disabled={{cannot-write @resource}} /> |
| 201 | + </InputGroup> |
| 202 | + <InputGroup |
| 203 | + @name="Max Distance (metres)" |
| 204 | + @helpText="Maximum total route distance in metres the Orchestrator may assign to this driver in a single route. Leave blank for no limit." |
| 205 | + > |
| 206 | + <Input @value={{@resource.max_distance}} @type="number" class="form-input w-full" placeholder="e.g. 150000 (150 km)" disabled={{cannot-write @resource}} /> |
| 207 | + </InputGroup> |
| 208 | + </div> |
| 209 | + </ContentPanel> |
| 210 | + |
169 | 211 | <CustomField::Yield @subject={{@resource}} @wrapperClass="bordered-top" /> |
170 | 212 |
|
171 | 213 | <RegistryYield @registry="fleet-ops:component:driver:form" as |RegistryComponent|> |
|
0 commit comments