diff --git a/sql/develop.sql b/sql/develop.sql index 4f97c9c05bb71137ebc2117abb6fd147b9ec0f9a..cf29b342df5ca603dae92471e0fbec9d5d142db6 100755 --- a/sql/develop.sql +++ b/sql/develop.sql @@ -101,11 +101,11 @@ CREATE TABLE exports_templates ( id serial NOT NULL, user_id INTEGER NOT NULL, -type character varying(3) NOT NULL, +format character varying(3) NOT NULL, delimiter character varying(3), data json DEFAULT '[]' NOT NULL, CONSTRAINT exports_templates_pkey PRIMARY KEY (id), -CONSTRAINT exports_templates_unique_key UNIQUE (user_id, type) +CONSTRAINT exports_templates_unique_key UNIQUE (user_id, format) ) WITH (OIDS=FALSE); diff --git a/sql/structure.sql b/sql/structure.sql index 1201e0f9927a33495f3bc6b9b410affd9e09c6ae..ce503d09458bcb639958e29fea625e5af6639313 100755 --- a/sql/structure.sql +++ b/sql/structure.sql @@ -2189,10 +2189,10 @@ CREATE TABLE exports_templates id serial NOT NULL, user_id INTEGER NOT NULL, delimiter character varying(3), -type character varying(3) NOT NULL, +format character varying(3) NOT NULL, data json DEFAULT '[]' NOT NULL, CONSTRAINT exports_templates_pkey PRIMARY KEY (id), -CONSTRAINT exports_templates_unique_key UNIQUE (user_id, type) +CONSTRAINT exports_templates_unique_key UNIQUE (user_id, format) ) WITH (OIDS=FALSE); diff --git a/src/app/resource/controllers/ExportController.php b/src/app/resource/controllers/ExportController.php index 413b5be5badd6652fe9fd014ec4760765bc6f7ac..d8ad8d15c54e93d8b9ac50baaa4a351b1b01f5c1 100644 --- a/src/app/resource/controllers/ExportController.php +++ b/src/app/resource/controllers/ExportController.php @@ -38,13 +38,13 @@ class ExportController { $currentUser = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id']]); - $rawTemplates = ExportTemplateModel::getByUserId(['userId' => $currentUser['id']]); + $rawTemplates = ExportTemplateModel::getByUserId(['userId' => $currentUser['id']]); - $templates = ['pdf' => [], 'csv' => []]; + $templates = ['pdf' => ['data' => []], 'csv' => ['data' => []]]; foreach ($rawTemplates as $rawTemplate) { - if ($rawTemplate['type'] == 'pdf') { + if ($rawTemplate['format'] == 'pdf') { $templates['pdf'] = ['data' => (array)json_decode($rawTemplate['data'])]; - } elseif ($rawTemplate['type'] == 'csv') { + } elseif ($rawTemplate['format'] == 'csv') { $templates['csv'] = ['delimiter' => $rawTemplate['delimiter'], 'data' => (array)json_decode($rawTemplate['data'])]; } } @@ -63,9 +63,9 @@ class ExportController $body = $request->getParsedBody(); - if (!Validator::stringType()->notEmpty()->validate($body['type']) || !in_array($body['type'], ['pdf', 'csv'])) { - return $response->withStatus(400)->withJson(['errors' => 'Data type is empty or not a string between [\'pdf\', \'csv\']']); - } elseif ($body['type'] == 'csv' && (!Validator::stringType()->notEmpty()->validate($body['delimiter']) || !in_array($body['delimiter'], [',', ';', 'TAB']))) { + if (!Validator::stringType()->notEmpty()->validate($body['format']) || !in_array($body['format'], ['pdf', 'csv'])) { + return $response->withStatus(400)->withJson(['errors' => 'Data format is empty or not a string between [\'pdf\', \'csv\']']); + } elseif ($body['format'] == 'csv' && (!Validator::stringType()->notEmpty()->validate($body['delimiter']) || !in_array($body['delimiter'], [',', ';', 'TAB']))) { return $response->withStatus(400)->withJson(['errors' => 'Delimiter is empty or not a string between [\',\', \';\', \'TAB\']']); } elseif (!Validator::arrayType()->notEmpty()->validate($body['data'])) { return $response->withStatus(400)->withJson(['errors' => 'Data data is empty or not an array']); @@ -101,21 +101,22 @@ class ExportController } $order .= 'END'; - $template = ExportTemplateModel::getByUserId(['select' => [1], 'userId' => $currentUser['id']]); + $template = ExportTemplateModel::get(['select' => [1], 'where' => ['user_id = ?', 'format = ?'], 'data' => [$currentUser['id'], $body['format']]]); if (empty($template)) { ExportTemplateModel::create([ 'userId' => $currentUser['id'], - 'delimiter' => $body['delimiter'], + 'format' => $body['format'], + 'delimiter' => empty($body['delimiter']) ? null : $body['delimiter'], 'data' => json_encode($body['data']) ]); } else { ExportTemplateModel::update([ 'set' => [ - 'delimiter' => $body['delimiter'], + 'delimiter' => empty($body['delimiter']) ? null : $body['delimiter'], 'data' => json_encode($body['data']) ], - 'where' => ['user_id = ?'], - 'data' => [$currentUser['id']] + 'where' => ['user_id = ?', 'format = ?'], + 'data' => [$currentUser['id'], $body['format']] ]); } @@ -241,6 +242,84 @@ class ExportController return $response->withHeader('Content-Type', 'application/vnd.ms-excel'); } + public function getCsv(array $aArgs) + { + ValidatorModel::notEmpty($aArgs, ['delimiter', 'data', 'resources']); + ValidatorModel::stringType($aArgs, ['delimiter']); + ValidatorModel::arrayType($aArgs, ['data', 'resources']); + + $file = fopen('php://memory', 'w'); + $delimiter = ($aArgs['delimiter'] == 'TAB' ? "\t" : $aArgs['delimiter']); + + $csvHead = []; + foreach ($aArgs['data'] as $value) { + $csvHead[] = $value['label']; + } + + fputcsv($file, $csvHead, $delimiter); + + foreach ($aArgs['resources'] as $resource) { + $csvContent = []; + foreach ($body['data'] as $value) { + if (empty($value['value'])) { + $csvContent[] = ''; + continue; + } + if ($value['isFunction']) { + if ($value['value'] == 'getStatus') { + $csvContent[] = $resource['status.label_status']; + } elseif ($value['value'] == 'getPriority') { + $csvContent[] = $resource['priorities.label']; + } elseif ($value['value'] == 'getCopies') { + $csvContent[] = ExportController::getCopies(['resId' => $resource['res_id']]); + } elseif ($value['value'] == 'getDetailLink') { + $csvContent[] = str_replace('rest/', "apps/maarch_entreprise/index.php?page=details&dir=indexing_searching&id={$resource['res_id']}", \Url::coreurl()); + } elseif ($value['value'] == 'getParentFolder') { + $csvContent[] = $resource['folders.folder_name']; + } elseif ($value['value'] == 'getCategory') { + $csvContent[] = ResModel::getCategoryLabel(['categoryId' => $resource['category_id']]); + } elseif ($value['value'] == 'getInitiatorEntity') { + $csvContent[] = $resource['enone.short_label']; + } elseif ($value['value'] == 'getDestinationEntity') { + $csvContent[] = $resource['entwo.short_label']; + } elseif ($value['value'] == 'getDestinationEntityType') { + $csvContent[] = $resource['enthree.entity_type']; + } elseif ($value['value'] == 'getSender') { + //TODO + $csvContent[] = ''; + } elseif ($value['value'] == 'getRecipient') { + //TODO + $csvContent[] = ''; + } elseif ($value['value'] == 'getTypist') { + $csvContent[] = UserModel::getLabelledUserById(['login' => $resource['typist']]); + } elseif ($value['value'] == 'getAssignee') { + $csvContent[] = UserModel::getLabelledUserById(['login' => $resource['dest_user']]); + } elseif ($value['value'] == 'getTags') { + $csvContent[] = ExportController::getTags(['resId' => $resource['res_id']]); + } elseif ($value['value'] == 'getSignatories') { + $csvContent[] = ExportController::getSignatories(['resId' => $resource['res_id']]); + } elseif ($value['value'] == 'getSignatureDates') { + $csvContent[] = ExportController::getSignatureDates(['resId' => $resource['res_id']]); + } + } else { + $allDates = ['doc_date', 'departure_date', 'admission_date', 'process_limit_date', 'opinion_limit_date', 'closing_date', 'sve_start_date']; + if (in_array($value['value'], $allDates)) { + $csvContent[] = TextFormatModel::formatDate($resource[$value['value']]); + } else { + $csvContent[] = $resource[$value['value']]; + } + } + } + fputcsv($file, $csvContent, $delimiter); + } + + rewind($file); + $response->write(stream_get_contents($file)); + $response = $response->withAddedHeader('Content-Disposition', 'attachment; filename=export_maarch.csv'); + + return $response->withHeader('Content-Type', 'application/vnd.ms-excel'); + } + private static function getCopies(array $args) { ValidatorModel::notEmpty($args, ['resId']); diff --git a/src/app/resource/models/ExportTemplateModel.php b/src/app/resource/models/ExportTemplateModel.php index c249bfdc35d479c2e6cb2fc3a790c8abe12c7888..df7e0a40769212efa88b193a5de2332b578f83c6 100644 --- a/src/app/resource/models/ExportTemplateModel.php +++ b/src/app/resource/models/ExportTemplateModel.php @@ -19,6 +19,23 @@ use SrcCore\models\ValidatorModel; class ExportTemplateModel { + public static function get(array $aArgs = []) + { + ValidatorModel::arrayType($aArgs, ['select', 'where', 'data', 'orderBy']); + ValidatorModel::intType($aArgs, ['limit']); + + $aTemplates = DatabaseModel::select([ + 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], + 'table' => ['exports_templates'], + 'where' => empty($aArgs['where']) ? [] : $aArgs['where'], + 'data' => empty($aArgs['data']) ? [] : $aArgs['data'], + 'order_by' => empty($aArgs['orderBy']) ? [] : $aArgs['orderBy'], + 'limit' => empty($aArgs['limit']) ? 0 : $aArgs['limit'] + ]); + + return $aTemplates; + } + public static function getByUserId(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['userId']); @@ -37,15 +54,15 @@ class ExportTemplateModel public static function create(array $aArgs) { - ValidatorModel::notEmpty($aArgs, ['userId', 'type', 'data']); - ValidatorModel::stringType($aArgs, ['type', 'delimiter', 'data']); + ValidatorModel::notEmpty($aArgs, ['userId', 'format', 'data']); + ValidatorModel::stringType($aArgs, ['format', 'delimiter', 'data']); ValidatorModel::intVal($aArgs, ['userId']); DatabaseModel::insert([ 'table' => 'exports_templates', 'columnsValues' => [ 'user_id' => $aArgs['userId'], - 'type' => $aArgs['type'], + 'format' => $aArgs['format'], 'delimiter' => empty($aArgs['delimiter']) ? null : $aArgs['delimiter'], 'data' => $aArgs['data'] ] diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index a8e0b0bb21582d00423610a1bd61a8f1ed21dab6..a127bbaf9e5d8bf716c279e444e77f9f21b7821e 100755 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -498,12 +498,11 @@ class UserController 'data' => [$aArgs['userId']] ]); - if (!empty($user)) { - $user = $user[0]; - return $response->withJson(['status' => $user['status']]); + if (empty($user[0])) { + return $response->withJson(['status' => null]); } - return $response->withJson(['status' => null]); + return $response->withJson(['status' => $user[0]['status']]); } public function updateStatus(Request $request, Response $response, array $aArgs)