Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
f131993
FOUR-20534:Implement the improvements in Request and Cases
fagubla Dec 10, 2024
901b61b
add to Requests
fagubla Dec 11, 2024
50b32df
CR
fagubla Dec 12, 2024
b1603f8
Merge pull request #7816 from ProcessMaker/feature/FOUR-20534
pmPaulis Dec 12, 2024
fcca1c6
FOUR-20544: Review the general status of the process
fagubla Dec 12, 2024
7012868
Merge branch 'epic/FOUR-20336-FOUR-20318' into feature/FOUR-20544
fagubla Dec 12, 2024
7fe04f5
Merge pull request #7823 from ProcessMaker/feature/FOUR-20544
pmPaulis Dec 13, 2024
5d3c352
FOUR-20543:Review the tooltip status of each task
fagubla Dec 17, 2024
b32bb90
Merge remote-tracking branch 'origin/release-2024-fall' into epic/FOU…
pmPaulis Dec 18, 2024
50e6c16
Merge remote-tracking branch 'origin/release-2024-fall' into epic/FOU…
pmPaulis Dec 18, 2024
0d487ca
correction tooltip
fagubla Dec 18, 2024
3d1cb73
CR
fagubla Dec 18, 2024
5f633d7
Merge pull request #7843 from ProcessMaker/feature/FOUR-20543
pmPaulis Dec 18, 2024
5a9c3ab
Merge remote-tracking branch 'origin/epic/FOUR-20336-FOUR-20337' into…
pmPaulis Dec 18, 2024
8507272
FOUR-20279:Optimize the In-Flight Modeler UI Component
fagubla Dec 19, 2024
1d73d3d
console error
fagubla Dec 19, 2024
2c94a12
Merge pull request #7845 from ProcessMaker/feature/FOUR-20279
pmPaulis Dec 19, 2024
129044e
Merge remote-tracking branch 'origin/epic/FOUR-20336-FOUR-20337' into…
pmPaulis Dec 19, 2024
a167b65
FOUR-21372:We can move the elements of the process in the Request - O…
fagubla Dec 23, 2024
3a9b575
Merge pull request #7852 from ProcessMaker/bugfix/FOUR-21372
henryjonathanquispe Dec 23, 2024
17db778
Merge remote-tracking branch 'origin/epic/FOUR-20336-FOUR-20337' into…
pmPaulis Jan 6, 2025
6060b71
Merge remote-tracking branch 'origin/release-2025-winter' into epic/F…
pmPaulis Jan 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
FOUR-20534:Implement the improvements in Request and Cases
  • Loading branch information
fagubla committed Dec 10, 2024
commit f131993947b2cfb9c20abc4e2668ea09e21b0f23
45 changes: 44 additions & 1 deletion ProcessMaker/Http/Controllers/CasesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
use ProcessMaker\Models\Screen;
use ProcessMaker\Package\PackageComments\PackageServiceProvider;
use ProcessMaker\ProcessTranslations\ScreenTranslation;
use ProcessMaker\Traits\ProcessMapTrait;

class CasesController extends Controller
{
use ProcessMapTrait;
/**
* Get the list of requests.
*
Expand Down Expand Up @@ -76,6 +78,45 @@ public function show($case_number)
// Get the summary screen tranlations
$this->summaryScreenTranslation($request);

// Load the process map
$processRequest = ProcessRequest::find($request->id);

$bpmn = $request->process->bpmn;
$filteredCompletedNodes = [];
$requestInProgressNodes = [];
$requestIdleNodes = [];

if ($processRequest) {
$requestCompletedNodes = $processRequest->tokens()
->whereIn('status', ['CLOSED', 'COMPLETED', 'TRIGGERED'])
->pluck('element_id');
$requestInProgressNodes = $processRequest->tokens()
->whereIn('status', ['ACTIVE', 'INCOMING'])
->pluck('element_id');
// Remove any node that is 'ACTIVE' from the completed list.
$filteredCompletedNodes = $requestCompletedNodes->diff($requestInProgressNodes)->values();

// Obtain In-Progress nodes that were completed before
$matchingNodes = $requestInProgressNodes->intersect($requestCompletedNodes);

// Get idle nodes.
$xml = $this->loadAndPrepareXML($bpmn);
$nodeIds = $this->getNodeIds($xml);
$requestIdleNodes = $nodeIds->diff($filteredCompletedNodes)->diff($requestInProgressNodes)->values();

// Add completed sequence flow to the list of completed nodes.
$sequenceFlowNodes = $this->getCompletedSequenceFlow($xml, $filteredCompletedNodes->implode(' '), $requestInProgressNodes->implode(' '), $matchingNodes->implode(' '));
$filteredCompletedNodes = $filteredCompletedNodes->merge($sequenceFlowNodes);
}


$inflightData = [
'bpmn' => $bpmn,
'requestCompletedNodes' => $filteredCompletedNodes,
'requestInProgressNodes' => $requestInProgressNodes,
'requestIdleNodes' => $requestIdleNodes,
'requestId' => $request->process->id,
];
// Return the view
return view('cases.edit', compact(
'request',
Expand All @@ -85,7 +126,9 @@ public function show($case_number)
'canViewComments',
'canPrintScreens',
'isProcessManager',
'manager'
'manager',
'bpmn',
'inflightData',
));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import RequestTable from "./RequestTable.vue";
import TabHistory from "./TabHistory.vue";
import CompletedForms from "./CompletedForms.vue";
import TabFiles from "./TabFiles.vue";
import Overview from "./Overview.vue";
import Overview from "./NewOverview.vue";
import TabSummary from "./TabSummary.vue";
import ErrorsTab from "./ErrorsTab.vue";
import { getRequestCount, getRequestStatus, isErrors } from "../variables/index";
Expand Down Expand Up @@ -67,7 +67,7 @@ const tabs = [
name: translate.t("Summary"),
href: "#summary",
current: "summary",
show: getRequestStatus() !== 'ERROR',
show: getRequestStatus() !== "ERROR",
content: TabSummary,
},
{
Expand Down
138 changes: 138 additions & 0 deletions resources/jscomposition/cases/casesDetail/components/NewOverview.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
<template>
<div
class="tw-w-full tw-h-full tw-overflow-hidden tw-relative"
data-test="body-container"
>
<ProcessMapTooltip
v-show="showTooltip"
ref="tooltipRef"
:enabled="enableTooltip"
:node-id="tooltip.nodeId"
:node-name="tooltip.nodeName"
:request-id="inflightData.requestId"
:style="{
left: `${tooltip.newX}px`,
top: `${tooltip.newY}px`
}"
@is-loading="isTooltipLoading"
/>
<transition
name="fade"
mode="in-out"
>
<Modeler
ref="modelerRef"
:key="keyModeler"
:decorations="decorations"
:request-completed-nodes="inflightData.requestCompletedNodes"
:request-in-progress-nodes="inflightData.requestInProgressNodes"
:request-idle-nodes="inflightData.requestIdleNodes"
:read-only="true"
@set-xml-manager="xmlManager = $event"
@click="handleClick"
/>
</transition>
</div>
</template>

<script setup>
import {
ref, watchEffect, onMounted, computed, nextTick, onBeforeUnmount,
} from "vue";
import { Modeler } from "@processmaker/modeler";
import ProcessMapTooltip from "../../../../js/processes/modeler/components/ProcessMapTooltip.vue";
import { getInflightData } from "../variables";

const keyModeler = ref(Math.random());
const modelerRef = ref("");
const tooltipRef = ref(null);
const enableTooltip = ref(true);
const decorations = ref({
borderOutline: {},
});
const xmlManager = ref();
const tooltip = ref({
isActive: false,
isLoading: false,
nodeId: null,
nodeName: null,
allowedNodes: [
"bpmn:Task",
"bpmn:ManualTask",
"bpmn:SequenceFlow",
"bpmn:ScriptTask",
"bpmn:CallActivity",
"bpmn:ServiceTask",
],
coordinates: { x: 0, y: 0 },
newX: 0,
newY: 0,
});
const inflightData = ref(getInflightData());

const isMappingActive = computed(() => (window.ProcessMaker.modeler.enableProcessMapping !== undefined
? window.ProcessMaker.modeler.enableProcessMapping
: true));

const showTooltip = computed(() => enableTooltip.value && tooltip.value.isActive);

const calculateTooltipPosition = () => {
const rectTooltip = tooltipRef.value.$el.getBoundingClientRect();
tooltip.value.newY = tooltip.value.coordinates.y - rectTooltip.height - 20;
if (tooltip.value.newY <= 0) {
tooltip.value.newY = 10;
}
tooltip.value.newX = tooltip.value.coordinates.x - (rectTooltip.width / 2);
if (tooltip.value.newX < 0) {
tooltip.value.newX = 0;
} else if (tooltip.value.newX + rectTooltip.width > window.innerWidth) {
tooltip.value.newX = window.innerWidth - rectTooltip.width;
}
};

const setupTooltip = ({ event, node }) => {
const isNodeTooltipAllowed = tooltip.value.allowedNodes.includes(node.$type);
if ((isNodeTooltipAllowed && !tooltip.value.isActive)
|| (isNodeTooltipAllowed && tooltip.value.nodeId !== node.id)) {
tooltip.value.nodeId = node.id;
tooltip.value.nodeName = node.name;
tooltip.value.isActive = true;
nextTick(() => {
tooltip.value.coordinates = { x: event.clientX, y: event.clientY };
calculateTooltipPosition();
});
} else if (tooltip.value.nodeId === node.id && tooltip.value.isActive) {
tooltip.value.isActive = false;
}
};

const isTooltipLoading = (value) => {
tooltip.value.isLoading = value;
};

const handleClick = (payload) => {
if (isMappingActive.value) {
setupTooltip(payload);
}
};

watchEffect(() => {
if (!tooltip.value.isLoading) {
nextTick(() => {
calculateTooltipPosition();
});
}
});

onMounted(() => {
ProcessMaker.$modeler = modelerRef.value;
});

onBeforeUnmount(() => {
console.log("unmounted");
ProcessMaker.$modeler = null;
modelerRef.value?.$destroy();
modelerRef.value = null;
tooltipRef.value = null;
});
</script>
4 changes: 4 additions & 0 deletions resources/jscomposition/cases/casesDetail/variables/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,7 @@ export const getRequestCount = () => requestCount;
export const getErrors = () => errorLogs;

export const isErrors = () => request.status === "ERROR";

export const getInflightData = () => inflightData;

export const getXML = () => inflightData.bpmn;
30 changes: 30 additions & 0 deletions resources/views/cases/edit.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,16 @@ class="tw-grow tw-overflow-hidden"
@endsection

@section('js')
<script src="{{ mix('js/processes/modeler/initialLoad.js') }}"></script>
<script>
window.ProcessMaker.packages = @json(\App::make(ProcessMaker\Managers\PackageManager::class)->listPackages());
window.Processmaker = {
csrfToken: "{{csrf_token()}}",
userId: "{{\Auth::user()->id}}",
messages: [],
apiTimeout: {{config('app.api_timeout')}}
};
</script>
<script>
const data = @json($request->getRequestData());
const requestId = @json($request->getKey());
Expand All @@ -129,6 +139,26 @@ class="tw-grow tw-overflow-hidden"
const canViewComments = @json($canViewComments);
const comentable_type = @json(get_class($request));
const requestCount = @json($requestCount);
const inflightData = @json($inflightData);

window.ProcessMaker.modeler = {
xml: @json($bpmn),
configurables: [],
requestCompletedNodes: inflightData.requestCompletedNodes,
requestInProgressNodes: inflightData.requestInProgressNodes,
requestIdleNodes: inflightData.requestIdleNodes,
requestId: inflightData.requestId,
}

window.ProcessMaker.EventBus.$on('modeler-start', ({
loadXML
}) => {
loadXML(window.ProcessMaker.modeler.xml);
});

window.PM4ConfigOverrides = {
requestFiles: @json($request->requestFiles())
};
</script>

@if (hasPackage('package-files'))
Expand Down