package com.constellio.app.modules.tasks.services;
import com.constellio.app.modules.rm.wrappers.type.SchemaLinkingType;
import com.constellio.app.modules.tasks.TaskModule;
import com.constellio.app.modules.tasks.model.managers.TaskReminderEmailManager;
import com.constellio.app.modules.tasks.model.wrappers.Task;
import com.constellio.app.modules.tasks.model.wrappers.Workflow;
import com.constellio.app.modules.tasks.model.wrappers.WorkflowInstance;
import com.constellio.app.modules.tasks.model.wrappers.request.*;
import com.constellio.app.modules.tasks.model.wrappers.types.TaskStatus;
import com.constellio.app.modules.tasks.model.wrappers.types.TaskType;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchema;
import com.constellio.model.entities.schemas.MetadataSchemaType;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.SchemasRecordsServices;
import com.constellio.model.services.search.query.logical.LogicalSearchQuery;
import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition;
import org.joda.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import static com.constellio.app.modules.tasks.model.wrappers.TaskStatusType.FINISHED;
import static com.constellio.app.modules.tasks.model.wrappers.types.TaskStatus.CLOSED_CODE;
import static com.constellio.app.ui.i18n.i18n.$;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.where;
import static java.util.Arrays.asList;
public class TasksSchemasRecordsServices extends SchemasRecordsServices {
private final AppLayerFactory appLayerFactory;
public TasksSchemasRecordsServices(String collection, AppLayerFactory appLayerFactory) {
super(collection, appLayerFactory.getModelLayerFactory());
this.appLayerFactory = appLayerFactory;
}
/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
// Auto-generated methods by GenerateHelperClassAcceptTest -- start
/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
public TaskStatus wrapTaskStatus(Record record) {
return record == null ? null : new TaskStatus(record, getTypes());
}
public List<TaskStatus> wrapTaskStatuss(List<Record> records) {
List<TaskStatus> wrapped = new ArrayList<>();
for (Record record : records) {
wrapped.add(new TaskStatus(record, getTypes()));
}
return wrapped;
}
public List<TaskStatus> searchTaskStatuss(LogicalSearchQuery query) {
return wrapTaskStatuss(appLayerFactory.getModelLayerFactory().newSearchServices().search(query));
}
public List<TaskStatus> searchTaskStatuss(LogicalSearchCondition condition) {
MetadataSchemaType type = ddvTaskStatus.schemaType();
LogicalSearchQuery query = new LogicalSearchQuery(from(type).whereAllConditions(asList(condition)));
return wrapTaskStatuss(appLayerFactory.getModelLayerFactory().newSearchServices().search(query));
}
public TaskStatus getTaskStatus(String id) {
return wrapTaskStatus(get(id));
}
public List<TaskStatus> getTaskStatuss(List<String> ids) {
return wrapTaskStatuss(get(ids));
}
public TaskStatus getTaskStatusWithCode(String code) {
return wrapTaskStatus(getByCode(ddvTaskStatus.schemaType(), code));
}
public TaskStatus getTaskStatusWithLegacyId(String legacyId) {
return wrapTaskStatus(getByLegacyId(ddvTaskStatus.schemaType(), legacyId));
}
public TaskStatus newTaskStatus() {
return wrapTaskStatus(create(ddvTaskStatus.schema()));
}
public TaskStatus newTaskStatusWithId(String id) {
return wrapTaskStatus(create(ddvTaskStatus.schema(), id));
}
public final SchemaTypeShortcuts_ddvTaskStatus_default ddvTaskStatus
= new SchemaTypeShortcuts_ddvTaskStatus_default("ddvTaskStatus_default");
public TaskType getTaskTypeByCode(String code) {
return wrapTaskType(getByCode(taskTypeSchemaType(), code));
}
public TaskType wrapTaskType(Record record) {
return record == null ? null : new TaskType(record, getTypes());
}
public class SchemaTypeShortcuts_ddvTaskStatus_default extends SchemaTypeShortcuts {
protected SchemaTypeShortcuts_ddvTaskStatus_default(String schemaCode) {
super(schemaCode);
}
public Metadata statusType() {
return metadata("statusType");
}
}
public Task wrapTask(Record record) {
return record == null ? null : new Task(record, getTypes());
}
public List<Task> wrapTasks(List<Record> records) {
List<Task> wrapped = new ArrayList<>();
for (Record record : records) {
wrapped.add(new Task(record, getTypes()));
}
return wrapped;
}
public List<Task> searchTasks(LogicalSearchQuery query) {
return wrapTasks(appLayerFactory.getModelLayerFactory().newSearchServices().search(query));
}
public List<Task> searchTasks(LogicalSearchCondition condition) {
MetadataSchemaType type = userTask.schemaType();
LogicalSearchQuery query = new LogicalSearchQuery(from(type).whereAllConditions(asList(condition)));
return wrapTasks(appLayerFactory.getModelLayerFactory().newSearchServices().search(query));
}
public Task getTask(String id) {
return wrapTask(get(id));
}
public List<Task> getTasks(List<String> ids) {
return wrapTasks(get(ids));
}
public Task getTaskWithLegacyId(String legacyId) {
return wrapTask(getByLegacyId(userTask.schemaType(), legacyId));
}
public Task newTask() {
return wrapTask(create(userTask.schema()));
}
public Task newTaskWithId(String id) {
return wrapTask(create(userTask.schema(), id));
}
public final SchemaTypeShortcuts_userTask_default userTask
= new SchemaTypeShortcuts_userTask_default("userTask_default");
public class SchemaTypeShortcuts_userTask_default extends SchemaTypeShortcuts {
protected SchemaTypeShortcuts_userTask_default(String schemaCode) {
super(schemaCode);
}
public Metadata assignedOn() {
return metadata("assignedOn");
}
public Metadata assignee() {
return metadata("assignee");
}
public Metadata assigneeGroupsCandidates() {
return metadata("assigneeGroupsCandidates");
}
public Metadata assigneeUsersCandidates() {
return metadata("assigneeUsersCandidates");
}
public Metadata assigner() {
return metadata("assigner");
}
public Metadata comments() {
return metadata("comments");
}
public Metadata contents() {
return metadata("contents");
}
public Metadata decision() {
return metadata("decision");
}
public Metadata description() {
return metadata("description");
}
public Metadata dueDate() {
return metadata("dueDate");
}
public Metadata endDate() {
return metadata("endDate");
}
public Metadata isModel() {
return metadata("isModel");
}
public Metadata modelTask() {
return metadata("modelTask");
}
public Metadata nextReminderOn() {
return metadata("nextReminderOn");
}
public Metadata nextTaskCreated() {
return metadata("nextTaskCreated");
}
public Metadata nextTasks() {
return metadata("nextTasks");
}
public Metadata nextTasksDecisions() {
return metadata("nextTasksDecisions");
}
public Metadata parentTask() {
return metadata("parentTask");
}
public Metadata parentTaskDueDate() {
return metadata("parentTaskDueDate");
}
public Metadata progressPercentage() {
return metadata("progressPercentage");
}
public Metadata reminders() {
return metadata("reminders");
}
public Metadata startDate() {
return metadata("startDate");
}
public Metadata status() {
return metadata("status");
}
public Metadata statusType() {
return metadata("statusType");
}
public Metadata taskFollowers() {
return metadata("taskFollowers");
}
public Metadata taskFollowersIds() {
return metadata("taskFollowersIds");
}
public Metadata type() {
return metadata("type");
}
public Metadata workflow() {
return metadata("workflow");
}
public Metadata workflowInstance() {
return metadata("workflowInstance");
}
public Metadata workflowTaskSort() {
return metadata("workflowTaskSort");
}
}
public Workflow wrapWorkflow(Record record) {
return record == null ? null : new Workflow(record, getTypes());
}
public List<Workflow> wrapWorkflows(List<Record> records) {
List<Workflow> wrapped = new ArrayList<>();
for (Record record : records) {
wrapped.add(new Workflow(record, getTypes()));
}
return wrapped;
}
public List<Workflow> searchWorkflows(LogicalSearchQuery query) {
return wrapWorkflows(appLayerFactory.getModelLayerFactory().newSearchServices().search(query));
}
public List<Workflow> searchWorkflows(LogicalSearchCondition condition) {
MetadataSchemaType type = workflow.schemaType();
LogicalSearchQuery query = new LogicalSearchQuery(from(type).whereAllConditions(asList(condition)));
return wrapWorkflows(appLayerFactory.getModelLayerFactory().newSearchServices().search(query));
}
public Workflow getWorkflow(String id) {
return wrapWorkflow(get(id));
}
public List<Workflow> getWorkflows(List<String> ids) {
return wrapWorkflows(get(ids));
}
public Workflow getWorkflowWithCode(String code) {
return wrapWorkflow(getByCode(workflow.schemaType(), code));
}
public Workflow getWorkflowWithLegacyId(String legacyId) {
return wrapWorkflow(getByLegacyId(workflow.schemaType(), legacyId));
}
public Workflow newWorkflow() {
return wrapWorkflow(create(workflow.schema()));
}
public Workflow newWorkflowWithId(String id) {
return wrapWorkflow(create(workflow.schema(), id));
}
public final SchemaTypeShortcuts_workflow_default workflow
= new SchemaTypeShortcuts_workflow_default("workflow_default");
public class SchemaTypeShortcuts_workflow_default extends SchemaTypeShortcuts {
protected SchemaTypeShortcuts_workflow_default(String schemaCode) {
super(schemaCode);
}
public Metadata code() {
return metadata("code");
}
}
public WorkflowInstance wrapWorkflowInstance(Record record) {
return record == null ? null : new WorkflowInstance(record, getTypes());
}
public List<WorkflowInstance> wrapWorkflowInstances(List<Record> records) {
List<WorkflowInstance> wrapped = new ArrayList<>();
for (Record record : records) {
wrapped.add(new WorkflowInstance(record, getTypes()));
}
return wrapped;
}
public List<WorkflowInstance> searchWorkflowInstances(LogicalSearchQuery query) {
return wrapWorkflowInstances(appLayerFactory.getModelLayerFactory().newSearchServices().search(query));
}
public List<WorkflowInstance> searchWorkflowInstances(LogicalSearchCondition condition) {
MetadataSchemaType type = workflowInstance.schemaType();
LogicalSearchQuery query = new LogicalSearchQuery(from(type).whereAllConditions(asList(condition)));
return wrapWorkflowInstances(appLayerFactory.getModelLayerFactory().newSearchServices().search(query));
}
public WorkflowInstance getWorkflowInstance(String id) {
return wrapWorkflowInstance(get(id));
}
public List<WorkflowInstance> getWorkflowInstances(List<String> ids) {
return wrapWorkflowInstances(get(ids));
}
public WorkflowInstance getWorkflowInstanceWithLegacyId(String legacyId) {
return wrapWorkflowInstance(getByLegacyId(workflowInstance.schemaType(), legacyId));
}
public WorkflowInstance newWorkflowInstance() {
return wrapWorkflowInstance(create(workflowInstance.schema()));
}
public WorkflowInstance newWorkflowInstanceWithId(String id) {
return wrapWorkflowInstance(create(workflowInstance.schema(), id));
}
public final SchemaTypeShortcuts_workflowInstance_default workflowInstance
= new SchemaTypeShortcuts_workflowInstance_default("workflowInstance_default");
public class SchemaTypeShortcuts_workflowInstance_default extends SchemaTypeShortcuts {
protected SchemaTypeShortcuts_workflowInstance_default(String schemaCode) {
super(schemaCode);
}
public Metadata startedBy() {
return metadata("startedBy");
}
public Metadata startedOn() {
return metadata("startedOn");
}
public Metadata status() {
return metadata("status");
}
public Metadata workflow() {
return metadata("workflow");
}
}
/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
// Auto-generated methods by GenerateHelperClassAcceptTest -- end
/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
public TaskReminderEmailManager getTaskReminderEmailManager() {
return appLayerFactory.getRegisteredManager(getCollection(), TaskModule.ID, TaskReminderEmailManager.ID);
}
public MetadataSchema getLinkedSchema(MetadataSchemaType schemaType, SchemaLinkingType recordType) {
if (recordType == null || recordType.getLinkedSchema() == null) {
return schemaType.getDefaultSchema();
} else {
return schemaType.getSchema(recordType.getLinkedSchema());
}
}
public String getSchemaCodeForTaskTypeRecordId(String taskTypeRecordId) {
ModelLayerFactory modelLayerFactory = getModelLayerFactory();
RecordServices recordServices = modelLayerFactory.newRecordServices();
Record schemaRecord = recordServices.getDocumentById(taskTypeRecordId);
TaskType taskType = new TaskType(schemaRecord, getTypes());
String linkedSchemaCode = taskType.getLinkedSchema();
return linkedSchemaCode;
}
public TaskType getTaskType(String id) {
return new TaskType(get(id), getTypes());
}
public TaskType newTaskType() {
return new TaskType(create(getTypes().getSchemaType(TaskType.SCHEMA_TYPE).getDefaultSchema()), getTypes());
}
public MetadataSchema defaultTaskSchema() {
return getTypes().getSchema(Task.DEFAULT_SCHEMA);
}
public MetadataSchemaType taskTypeSchemaType() {
return getTypes().getSchemaType(TaskType.SCHEMA_TYPE);
}
public MetadataSchemaType taskSchemaType() {
return getTypes().getSchemaType(Task.SCHEMA_TYPE);
}
public MetadataSchema taskSchemaFor(TaskType type) {
return type == null ? defaultTaskSchema() : getLinkedSchema(taskSchemaType(), type);
}
public MetadataSchema taskSchemaFor(String typeId) {
return typeId == null ? defaultTaskSchema() : taskSchemaFor(getTaskType(typeId));
}
public Task newTaskWithType(TaskType type) {
Record record = create(taskSchemaFor(type));
return new Task(record, getTypes()).setType(type);
}
public Task newTaskWithType(String typeId) {
Record record = create(taskSchemaFor(typeId));
return new Task(record, getTypes()).setType(typeId);
}
public Task newWorkflowModelTask(Workflow workflow) {
return wrapTask(create(userTask.schema())).setModel(true).setWorkflow(workflow);
}
public Task newWorkflowModelTaskWithType(Workflow workflow, String typeId) {
Task task = wrapTask(create(taskSchemaFor(typeId))).setModel(true).setWorkflow(workflow);
TaskType taskType = getTaskType(typeId);
task.setType(taskType);
return task;
}
public Task newWorkflowModelTaskWithId(String id, Workflow workflow) {
return wrapTask(create(userTask.schema(), id)).setModel(true).setWorkflow(workflow);
}
public List<TaskStatus> getFinishedOrClosedStatuses() {
List<TaskStatus> status = new ArrayList<>();
status.addAll(searchTaskStatuss(where(ddvTaskStatus.statusType()).is(FINISHED)));
status.add(getTaskStatusWithCode(CLOSED_CODE));
return status;
}
public void setType(Task task, TaskType taskType) {
setType(task.getWrappedRecord(), taskType == null ? null : taskType.getWrappedRecord());
}
//KEEP
public Task newBorrowFolderRequestTask(String assignerId, List<String> assignees, String folderId, int numberOfDays, String recordTitle) {
Task task = newTaskWithType(getTaskTypeByCode(BorrowRequest.SCHEMA_NAME));
return task.setTitle($("TaskSchemasRecordsServices.borrowFolderRequest", recordTitle)).setAssigneeUsersCandidates(assignees)
.setLinkedFolders(asList(folderId)).set(BorrowRequest.BORROW_DURATION, numberOfDays).set(RequestTask.APPLICANT, assignerId);
}
//KEEP
public Task newReturnFolderRequestTask(String assignerId, List<String> assignees, String folderId, String recordTitle){
return newTaskWithType(getTaskTypeByCode(ReturnRequest.SCHEMA_NAME))
.setTitle($("TaskSchemasRecordsServices.returnFolderRequest", recordTitle)).setAssigneeUsersCandidates(assignees)
.setLinkedFolders(asList(folderId)).set(RequestTask.APPLICANT, assignerId);
}
//KEEP
public Task newReactivateFolderRequestTask(String assignerId, List<String> assignees, String folderId, String recordTitle, LocalDate localDate){
return newTaskWithType(getTaskTypeByCode(ReactivationRequest.SCHEMA_NAME))
.setTitle($("TaskSchemasRecordsServices.reactivationFolderRequest", recordTitle)).setAssigneeUsersCandidates(assignees)
.setLinkedFolders(asList(folderId)).set(RequestTask.APPLICANT, assignerId).set(ReactivationRequest.REACTIVATION_DATE, localDate);
}
//KEEP
public Task newBorrowFolderExtensionRequestTask(String assignerId, List<String> assignees, String folderId, String recordTitle, LocalDate value) {
return newTaskWithType(getTaskTypeByCode(ExtensionRequest.SCHEMA_NAME))
.setTitle($("TaskSchemasRecordsServices.borrowFolderExtensionRequest", recordTitle)).setAssigneeUsersCandidates(assignees)
.setLinkedFolders(asList(folderId)).set(RequestTask.APPLICANT, assignerId)
.set(ExtensionRequest.EXTENSION_VALUE, value);
}
//KEEP
public Task newBorrowContainerRequestTask(String assignerId, List<String> assignees, String containerId, int numberOfDays, String recordTitle) {
return newTaskWithType(getTaskTypeByCode(BorrowRequest.SCHEMA_NAME))
.setTitle($("TaskSchemasRecordsServices.borrowContainerRequest", recordTitle)).setAssigneeUsersCandidates(assignees)
.setLinkedContainers(asList(containerId)).set(BorrowRequest.BORROW_DURATION, numberOfDays).set(RequestTask.APPLICANT, assignerId);
}
//KEEP
public Task newReturnContainerRequestTask(String assignerId, List<String> assignees, String containerId, String recordTitle) {
return newTaskWithType(getTaskTypeByCode(ReturnRequest.SCHEMA_NAME))
.setTitle($("TaskSchemasRecordsServices.returnContainerRequest", recordTitle)).setAssigneeUsersCandidates(assignees)
.setLinkedContainers(asList(containerId)).set(RequestTask.APPLICANT, assignerId);
}
//KEEP
public Task newReactivationContainerRequestTask(String assignerId, List<String> assignees, String containerId, String recordTitle, LocalDate localDate) {
return newTaskWithType(getTaskTypeByCode(ReactivationRequest.SCHEMA_NAME))
.setTitle($("TaskSchemasRecordsServices.reactivationContainerRequest", recordTitle)).setAssigneeUsersCandidates(assignees)
.setLinkedContainers(asList(containerId)).set(RequestTask.APPLICANT, assignerId).set(ReactivationRequest.REACTIVATION_DATE, localDate);
}
//KEEP
public Task newBorrowContainerExtensionRequestTask(String assignerId, List<String> assignees, String containerId, String recordTitle, LocalDate value) {
return newTaskWithType(getTaskTypeByCode(ExtensionRequest.SCHEMA_NAME))
.setTitle($("TaskSchemasRecordsServices.borrowContainerExtensionRequest", recordTitle)).setAssigneeUsersCandidates(assignees)
.setLinkedContainers(asList(containerId)).set(RequestTask.APPLICANT, assignerId)
.set(ExtensionRequest.EXTENSION_VALUE, value);
}
//KEEP
public boolean isRequestTask(Task task) {
List<String> acceptedSchemas = new ArrayList<>(asList(BorrowRequest.FULL_SCHEMA_NAME, ReturnRequest.FULL_SCHEMA_NAME,
ReactivationRequest.FULL_SCHEMA_NAME, ExtensionRequest.FULL_SCHEMA_NAME));
return acceptedSchemas.contains(task.getSchemaCode());
}
}