Skip to content

FOUR-18970: Create the view for show the summary related to the case - History Tab #7395

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
153 changes: 152 additions & 1 deletion ProcessMaker/Http/Controllers/CasesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,159 @@ public function index($type = null)
// This is a temporary API the engine team will provide the new
return view('cases.casesMain');
}
/**
* Cases Detail
*
* @param ProcessRequest $request
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function edit(ProcessRequest $request)
{
return view('cases.edit');
if (!request()->input('skipInterstitial') && $request->status === 'ACTIVE') {
$startEvent = $request->tokens()->orderBy('id')->first();
if ($startEvent) {
$definition = $startEvent->getDefinition();
$allowInterstitial = false;
if (isset($definition['allowInterstitial'])) {
$allowInterstitial = filter_var(
$definition['allowInterstitial'],
FILTER_VALIDATE_BOOLEAN,
FILTER_NULL_ON_FAILURE
);
}
if ($allowInterstitial && $request->user_id == Auth::id() && request()->has('fromTriggerStartEvent')) {
$active = $request->tokens()
->where('user_id', Auth::id())
->where('element_type', 'task')
->where('status', 'ACTIVE')
->orderBy('id')->first();

// If the interstitial is enabled on the start event, then use it as the task
if ($active) {
$task = $allowInterstitial ? $startEvent : $active;
} else {
$task = $startEvent;
}

return redirect(route('tasks.edit', [
'task' => $task->getKey(),
]));
}
}
}

$userHasCommentsForRequest = Comment::where('commentable_type', ProcessRequest::class)
->where('commentable_id', $request->id)
->where('body', 'like', '%{{' . \Auth::user()->id . '}}%')
->count() > 0;

$requestMedia = $request->media()->get()->pluck('id');

$userHasCommentsForMedia = Comment::where('commentable_type', \ProcessMaker\Models\Media::class)
->whereIn('commentable_id', $requestMedia)
->where('body', 'like', '%{{' . \Auth::user()->id . '}}%')
->count() > 0;

if (!$userHasCommentsForMedia && !$userHasCommentsForRequest) {
$this->authorize('view', $request);
}

$request->participants;
$request->user;
$request->summary = $request->summary();

if ($request->status === 'CANCELED' && $request->process->cancel_screen_id) {
$request->summary_screen = $request->process->cancelScreen;
} else {
$request->summary_screen = $request->getSummaryScreen();
}
$request->request_detail_screen = Screen::find($request->process->request_detail_screen_id);

$canCancel = Auth::user()->can('cancel', $request->processVersion);
$canViewComments = (Auth::user()->hasPermissionsFor('comments')->count() > 0) || class_exists(PackageServiceProvider::class);
$canManuallyComplete = Auth::user()->is_administrator && $request->status === 'ERROR';
$canRetry = false;

if ($canManuallyComplete) {
$retry = RetryProcessRequest::for($request);

$canRetry = $retry->hasRetriableTasks() &&
!$retry->hasNonRetriableTasks() &&
!$retry->isChildRequest();
}

$files = \ProcessMaker\Models\Media::getFilesRequest($request);

$canPrintScreens = $this->canUserPrintScreen($request);

$manager = app(ScreenBuilderManager::class);
event(new ScreenBuilderStarting($manager, ($request->summary_screen) ? $request->summary_screen->type : 'FORM'));

$addons = [];
$dataActionsAddons = [];

$isProcessManager = $request->process?->manager_id === Auth::user()->id;

$eligibleRollbackTask = null;
$errorTask = RollbackProcessRequest::getErrorTask($request);
if ($errorTask) {
$eligibleRollbackTask = RollbackProcessRequest::eligibleRollbackTask($errorTask);
}
$this->summaryScreenTranslation($request);
return view('cases.edit', compact(
'request',
'files',
'canCancel',
'canViewComments',
'canManuallyComplete',
'canRetry',
'manager',
'canPrintScreens',
'addons',
'isProcessManager',
'eligibleRollbackTask',
'errorTask',
));
}

/**
* the user may or may not print forms
*
* @param ProcessRequest $request
* @return bool
*/
private function canUserPrintScreen(ProcessRequest $request)
{
//validate user is administrator
if (Auth::user()->is_administrator) {
return true;
}

//validate user is participant or requester
if (in_array(Auth::user()->id, $request->participants()->get()->pluck('id')->toArray())) {
return true;
}

// Any user with permissions Edit Request Data, Edit Task Data and view All Requests
if (Auth::user()->can('view-all_requests') && Auth::user()->can('edit-request_data') && Auth::user()->can('edit-task_data')) {
return true;
}

return false;
}

/**
* Translates the summary screen strings
* @param ProcessRequest $request
* @return void
*/
public function summaryScreenTranslation(ProcessRequest $request): void
{
if ($request->summary_screen) {
$processTranslation = new ProcessTranslation($request->process);
$translatedConf = $processTranslation->applyTranslations($request->summary_screen);
$request->summary_screen['config'] = $translatedConf;
}
}
}
9 changes: 9 additions & 0 deletions resources/jscomposition/cases/casesDetail/api/data.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export default {};

export const getRequestId = () => requestId;

export const getRequestStatus = () => request.status;

export const getComentableType = () => comentable_type;

export const getProcessName = () => request.process.name;
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { defineComponent, ref } from "vue";
import Tabs from "./Tabs.vue";
import TaskTable from "./TaskTable.vue";
import RequestTable from "./RequestTable.vue";
import TabHistory from "./TabHistory.vue";

export default defineComponent({
components: { Tabs },
Expand All @@ -34,7 +35,7 @@ export default defineComponent({
name: translate.t("File Manager"), href: "#file_manager", current: "file_manager", show: false, content: "",
},
{
name: translate.t("History"), href: "#history", current: "history", show: true, content: "",
name: translate.t("History"), href: "#history", current: "history", show: true, content: TabHistory,
},
{
name: translate.t("Requests"), href: "#requests", current: "requests", show: true, content: RequestTable,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<template>
<div class="tw-flex tw-flex-col tw-gap-2">
<span>{{ processName }}</span>
<TimeLine
:commentable_id="commentableId"
:commentable_type="comentableType"
:adding="false"
:readonly="status === 'COMPLETED'"
:timeline="false"
/>
</div>
</template>

<script>
import { defineComponent, ref } from "vue";
import TimeLine from "../../../../js/components/Timeline.vue";
import {
getRequestId, getRequestStatus, getComentableType, getProcessName,
} from "../api/data";

export default defineComponent({
components: { TimeLine },
setup() {
const status = ref(getRequestStatus());
const commentableId = ref(getRequestId());
const comentableType = ref(getComentableType());
const processName = ref(getProcessName());
return {
status,
commentableId,
comentableType,
processName,
};
},
});
</script>
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import BadgeContainer from "../../casesMain/components/BadgeContainer.vue";
import BadgeContainer from "../../casesMain/components/BadgesSection.vue";
import AvatarContainer from "../../casesMain/components/AvatarContainer.vue";

export default {};
Expand Down
Loading
Loading