Add enable/disable workflow

This commit is contained in:
shamoon 2023-12-26 22:40:11 -08:00
parent 8062378016
commit 18ebae7dd0
14 changed files with 31 additions and 10 deletions

View File

@ -6,12 +6,15 @@
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-8">
<div class="col-md-6">
<pngx-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></pngx-input-text>
</div>
<div class="col">
<div class="col-4">
<pngx-input-number i18n-title title="Sort order" formControlName="order" [showAdd]="false" [error]="error?.order"></pngx-input-number>
</div>
<div class="col">
<pngx-input-switch i18n-title title="Enabled" formControlName="enabled" [error]="error?.enabled"></pngx-input-switch>
</div>
</div>
<div ngbAccordion>
<div ngbAccordionItem>

View File

@ -18,6 +18,7 @@ import { PermissionsUserComponent } from '../../input/permissions/permissions-us
import { SelectComponent } from '../../input/select/select.component'
import { TagsComponent } from '../../input/tags/tags.component'
import { TextComponent } from '../../input/text/text.component'
import { SwitchComponent } from '../../input/switch/switch.component'
import { EditDialogMode } from '../edit-dialog.component'
import { WorkflowEditDialogComponent } from './workflow-edit-dialog.component'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
@ -36,6 +37,7 @@ describe('ConsumptionTemplateEditDialogComponent', () => {
SelectComponent,
TextComponent,
NumberComponent,
SwitchComponent,
TagsComponent,
PermissionsUserComponent,
PermissionsGroupComponent,

View File

@ -121,6 +121,7 @@ export class WorkflowEditDialogComponent
return new FormGroup({
name: new FormControl(null),
order: new FormControl(null),
enabled: new FormControl(true),
triggers: new FormArray([]),
actions: new FormArray([]),
})

View File

@ -1,8 +1,9 @@
<div class="mb-3">
<div class="row">
@if (horizontal) {
<div class="d-flex align-items-center position-relative hidden-button-container col-md-3">
<label class="form-label" [class.mb-md-0]="horizontal" [for]="inputId">{{title}}</label>
<div class="d-flex align-items-center position-relative hidden-button-container col-md-3">
@if (!horizontal) {
<label class="form-label" [for]="inputId">{{title}}</label>
}
@if (removable) {
<button type="button" class="btn btn-sm btn-danger position-absolute left-0" (click)="removed.emit(this)">
<svg class="sidebaricon" fill="currentColor">
@ -10,12 +11,11 @@
</svg>&nbsp;<ng-container i18n>Remove</ng-container>
</button>
}
</div>
}
</div>
<div [ngClass]="{'col-md-9': horizontal, 'align-items-center': horizontal, 'd-flex': horizontal}">
<div class="form-check form-switch">
<input #inputField type="checkbox" class="form-check-input" [id]="inputId" [(ngModel)]="value" (change)="onChange(value)" (blur)="onTouched()" [disabled]="disabled">
@if (!horizontal) {
@if (horizontal) {
<label class="form-check-label" [for]="inputId">{{title}}</label>
}
@if (hint) {

View File

@ -13,6 +13,7 @@
<div class="row">
<div class="col" i18n>Name</div>
<div class="col" i18n>Sort order</div>
<div class="col" i18n>Enabled</div>
<div class="col" i18n>Triggers</div>
<div class="col" i18n>Actions</div>
</div>
@ -23,6 +24,7 @@
<div class="row">
<div class="col d-flex align-items-center"><button class="btn btn-link p-0" type="button" (click)="editWorkflow(workflow)" [disabled]="!permissionsService.currentUserCan(PermissionAction.Change, PermissionType.Workflow)">{{workflow.name}}</button></div>
<div class="col d-flex align-items-center"><code>{{workflow.order}}</code></div>
<div class="col d-flex align-items-center"><code> @if(workflow.enabled) { <ng-container i18n>Enabled</ng-container> } @else { <span i18n class="text-muted">Disabled</span> }</code></div>
<div class="col d-flex align-items-center">{{getTypesList(workflow)}}</div>
<div class="col">
<div class="btn-group">

View File

@ -28,6 +28,7 @@ const workflows: Workflow[] = [
name: 'Workflow 1',
id: 1,
order: 1,
enabled: true,
triggers: [
{
id: 1,
@ -47,6 +48,7 @@ const workflows: Workflow[] = [
name: 'Workflow 2',
id: 2,
order: 2,
enabled: true,
triggers: [
{
id: 2,

View File

@ -8,7 +8,6 @@ import { ToastService } from 'src/app/services/toast.service'
import { PermissionsService } from 'src/app/services/permissions.service'
import {
WorkflowEditDialogComponent,
DOCUMENT_SOURCE_OPTIONS,
WORKFLOW_TYPE_OPTIONS,
} from '../../common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component'
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'

View File

@ -7,6 +7,8 @@ export interface Workflow extends ObjectWithId {
order: number
enabled: boolean
triggers: WorkflowTrigger[]
actions: WorkflowAction[]

View File

@ -17,6 +17,7 @@ const workflows: Workflow[] = [
name: 'Workflow 1',
id: 1,
order: 1,
enabled: true,
triggers: [
{
id: 1,
@ -36,6 +37,7 @@ const workflows: Workflow[] = [
name: 'Workflow 2',
id: 2,
order: 2,
enabled: true,
triggers: [
{
id: 2,

View File

@ -612,7 +612,7 @@ class Consumer(LoggingMixin):
file name filters, path filters or mail rule filter if specified
"""
overrides = DocumentMetadataOverrides()
for workflow in Workflow.objects.all().order_by("order"):
for workflow in Workflow.objects.filter(enabled=True).order_by("order"):
template_overrides = DocumentMetadataOverrides()
if document_matches_workflow(

View File

@ -205,6 +205,10 @@ class Migration(migrations.Migration):
models.CharField(max_length=256, unique=True, verbose_name="name"),
),
("order", models.IntegerField(default=0, verbose_name="order")),
(
"enabled",
models.BooleanField(default=True, verbose_name="enabled"),
),
],
),
migrations.CreateModel(

View File

@ -1086,5 +1086,7 @@ class Workflow(models.Model):
verbose_name=_("actions"),
)
enabled = models.BooleanField(_("enabled"), default=True)
def __str__(self):
return f"Workflow: {self.name}"

View File

@ -1371,6 +1371,7 @@ class WorkflowSerializer(serializers.ModelSerializer):
"id",
"name",
"order",
"enabled",
"triggers",
"actions",
]

View File

@ -529,6 +529,7 @@ def run_workflow_updated(sender, document: Document, logging_group=None, **kwarg
def run_workflow(trigger_type: WorkflowTrigger.WorkflowTriggerType, document: Document):
for workflow in Workflow.objects.filter(
enabled=True,
triggers__type=trigger_type,
).order_by("order"):
if matching.document_matches_workflow(