Skip to content
Snippets Groups Projects
Verified Commit 152821cf authored by Damien's avatar Damien
Browse files

FEAT #14149 TIME 0:20 SB Can update documents + lock route

parent 9d7dd788
No related branches found
No related tags found
No related merge requests found
......@@ -405,6 +405,7 @@ $app->get('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/fil
$app->put('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/exports', \Resource\controllers\ExportController::class . ':updateExport');
$app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/summarySheets', \Resource\controllers\SummarySheetController::class . ':createList');
$app->put('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/actions/{actionId}', \Resource\controllers\ResourceListController::class . ':setAction');
$app->put('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/locked', \Resource\controllers\ResourceListController::class . ':areLocked');
$app->get('/resourcesList/exportTemplate', \Resource\controllers\ExportController::class . ':getExportTemplates');
$app->get('/resourcesList/summarySheets', \Resource\controllers\SummarySheetController::class . ':createListWithAll');
$app->put('/resourcesList/integrations', \Resource\controllers\ResController::class . ':setInIntegrations');
......
......@@ -498,6 +498,10 @@ class BasketController
'canUpdateModel' => !empty($data['list_event_data']['canUpdateModel']),
'defaultTab' => $data['list_event_data']['defaultTab'] ?? 'dashboard'
];
} elseif ($data['list_event'] == 'signatureBookAction') {
$listEventData = [
'canUpdateDocument' => !empty($data['list_event_data']['canUpdateDocument']),
];
}
GroupBasketModel::update([
......
......@@ -610,6 +610,66 @@ class ResourceListController
return $response->withStatus(204);
}
public function areLocked(Request $request, Response $response, array $args)
{
$body = $request->getParsedBody();
if (!Validator::arrayType()->notEmpty()->validate($body['resources'])) {
return $response->withStatus(400)->withJson(['errors' => 'Data resources is empty or not an array']);
}
$body['resources'] = array_slice($body['resources'], 0, 500);
$errors = ResourceListController::listControl(['groupId' => $args['groupId'], 'userId' => $args['userId'], 'basketId' => $args['basketId'], 'currentUserId' => $GLOBALS['id']]);
if (!empty($errors['errors'])) {
return $response->withStatus($errors['code'])->withJson(['errors' => $errors['errors']]);
}
$basket = BasketModel::getById(['id' => $args['basketId'], 'select' => ['basket_clause']]);
$user = UserModel::getById(['id' => $args['userId'], 'select' => ['user_id']]);
$whereClause = PreparedClauseController::getPreparedClause(['clause' => $basket['basket_clause'], 'login' => $user['user_id']]);
$resources = ResModel::getOnView([
'select' => ['res_id', 'locker_user_id', 'locker_time'],
'where' => [$whereClause, 'res_view_letterbox.res_id in (?)'],
'data' => [$body['resources']]
]);
$resourcesInBasket = array_column($resources, 'res_id');
if (!empty(array_diff($body['resources'], $resourcesInBasket))) {
return $response->withStatus(403)->withJson(['errors' => 'Resources out of perimeter']);
}
$locked = 0;
$resourcesToLock = [];
$lockersId = [];
foreach ($resources as $resource) {
$lock = true;
if (empty($resource['locker_user_id'] || empty($resource['locker_time']))) {
$lock = false;
} elseif ($resource['locker_user_id'] == $GLOBALS['id']) {
$lock = false;
} elseif (strtotime($resource['locker_time']) < time()) {
$lock = false;
}
if (!$lock) {
$resourcesToLock[] = $resource['res_id'];
} else {
$lockersId[] = $resource['locker_user_id'];
++$locked;
}
}
$lockers = [];
if (!empty($lockersId)) {
$lockersId = array_unique($lockersId);
foreach ($lockersId as $lockerId) {
$lockers[] = UserModel::getLabelledUserById(['id' => $lockerId]);
}
}
return $response->withJson(['countLockedResources' => $locked, 'lockers' => $lockers, 'resourcesToProcess' => $resourcesToLock]);
}
public static function listControl(array $aArgs)
{
ValidatorModel::notEmpty($aArgs, ['groupId', 'userId', 'basketId', 'currentUserId']);
......
......@@ -87,6 +87,7 @@ class SignatureBookController
$datas['hasWorkflow'] = ((int)$listInstances[0]['count'] > 0);
$datas['listinstance'] = ListInstanceModel::getCurrentStepByResId(['resId' => $resId]);
$datas['canSign'] = PrivilegeController::hasPrivilege(['privilegeId' => 'sign_document', 'userId' => $GLOBALS['id']]);
$datas['canUpdateDocument'] = SignatureBookController::isResourceInSignatureBook(['resId' => $resId, 'userId' => $GLOBALS['id'], 'canUpdateDocument' => true]);
$datas['isCurrentWorkflowUser'] = $datas['listinstance']['item_id'] == $GLOBALS['userId'];
return $response->withJson($datas);
......@@ -691,7 +692,14 @@ class SignatureBookController
$groups = GroupModel::get(['select' => ['group_id'], 'where' => ['id in (?)'], 'data' => [$groups]]);
$groups = array_column($groups, 'group_id');
$baskets = GroupBasketModel::get(['select' => ['basket_id'], 'where' => ['group_id in (?)', 'list_event = ?'], 'data' => [$groups, 'signatureBookAction']]);
$where = ['group_id in (?)', 'list_event = ?'];
$data = [$groups, 'signatureBookAction'];
if (!empty($args['canUpdateDocument'])) {
$where[] = "list_event_data->>'canUpdateDocument' = ?";
$data[] = 'true';
}
$baskets = GroupBasketModel::get(['select' => ['basket_id'], 'where' => $where, 'data' => $data]);
$baskets = array_column($baskets, 'basket_id');
if (!empty($baskets)) {
$clauses = BasketModel::get(['select' => ['basket_clause'], 'where' => ['basket_id in (?)'], 'data' => [$baskets]]);
......@@ -708,7 +716,14 @@ class SignatureBookController
$assignedBaskets = RedirectBasketModel::getAssignedBasketsByUserId(['userId' => $currentUser['id']]);
foreach ($assignedBaskets as $basket) {
$hasSB = GroupBasketModel::get(['select' => [1], 'where' => ['basket_id = ?', 'group_id = ?', 'list_event = ?'], 'data' => [$basket['basket_id'], $basket['oldGroupId'], 'signatureBookAction']]);
$where = ['basket_id = ?', 'group_id = ?', 'list_event = ?'];
$data = [$basket['basket_id'], $basket['oldGroupId'], 'signatureBookAction'];
if (!empty($args['canUpdateDocument'])) {
$where[] = "list_event_data->>'canUpdateDocument' = ?";
$data[] = 'true';
}
$hasSB = GroupBasketModel::get(['select' => [1], 'where' => $where, 'data' => $data]);
if (!empty($hasSB)) {
$basketOwner = UserModel::getById(['id' => $basket['owner_user_id'], 'select' => ['user_id']]);
$basketClause = PreparedClauseController::getPreparedClause(['clause' => $basket['basket_clause'], 'login' => $basketOwner['user_id']]);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment