diff --git a/core/xml/actions_pages.xml b/core/xml/actions_pages.xml index 0221532d657b14ebe22c43735badd87e8bd5950d..700d199f022c052b3837bb6e3710da2a2b5954d4 100755 --- a/core/xml/actions_pages.xml +++ b/core/xml/actions_pages.xml @@ -110,6 +110,7 @@ An action page is described in a ACTIONPAGE tag : <LABEL>_CLOSE_MAIL</LABEL> <NAME>close_mail</NAME> <DESC>_CLOSE_MAIL_DESC</DESC> + <component>closeMailAction</component> <ORIGIN>apps</ORIGIN> <MODULE></MODULE> <FLAG_CREATE>false</FLAG_CREATE> diff --git a/src/app/action/controllers/ActionMethodController.php b/src/app/action/controllers/ActionMethodController.php index 8993c4986e29de0486dbb7d72b5a046dfb6f748b..9084e412e6c40031aba7b38e9ffb3d275090b05e 100644 --- a/src/app/action/controllers/ActionMethodController.php +++ b/src/app/action/controllers/ActionMethodController.php @@ -17,11 +17,13 @@ use Note\models\NoteModel; use Resource\models\ResModel; use Action\models\ActionModel; use SrcCore\models\ValidatorModel; +use SrcCore\models\CurlModel; class ActionMethodController { const COMPONENTS_ACTIONS = [ - 'confirmAction' => null + 'confirmAction' => null, + 'closeMailAction' => 'closeMailAction', ]; public static function terminateAction(array $aArgs) @@ -57,7 +59,7 @@ class ActionMethodController if ($action['history'] == 'Y') { foreach ($aArgs['resources'] as $resource) { HistoryController::add([ - 'tableName' => 'actions', + 'tableName' => 'res_view_letterbox', 'recordId' => $resource, 'eventType' => 'ACTION#' . $resource, 'eventId' => $aArgs['id'], @@ -70,4 +72,85 @@ class ActionMethodController return true; } + + public static function closeMailAction(array $aArgs) + { + ValidatorModel::notEmpty($aArgs, ['id', 'resId']); + ValidatorModel::intVal($aArgs, ['id', 'resId']); + + ResModel::updateExt(['set' => ['closing_date' => 'CURRENT_TIMESTAMP'], 'where' => ['res_id = ?'], 'data' => [$aArgs['resId']]]); + + if (CurlModel::isEnabled(['curlCallId' => 'closeResource'])) { + $bodyData = []; + $config = CurlModel::getConfigByCallId(['curlCallId' => 'closeResource']); + $configResource = CurlModel::getConfigByCallId(['curlCallId' => 'sendResourceToExternalApplication']); + + $resource = ResModel::getOnView(['select' => ['doc_' . $configResource['return']['value']], 'where' => ['res_id = ?'], 'data' => [$aArgs['resId']]]); + + if (!empty($resource[0]['doc_' . $configResource['return']['value']])) { + if (!empty($config['inObject'])) { + $multipleObject = true; + + foreach ($config['objects'] as $object) { + $select = []; + $tmpBodyData = []; + foreach ($object['rawData'] as $value) { + if ($value == $configResource['return']['value']) { + $select[] = 'doc_' . $configResource['return']['value']; + } elseif ($value != 'note') { + $select[] = $value; + } + } + + $document = ResModel::getOnView(['select' => $select, 'where' => ['res_id = ?'], 'data' => [$aArgs['resId']]]); + if (!empty($document[0])) { + foreach ($object['rawData'] as $key => $value) { + if ($value == 'note') { + $tmpBodyData[$key] = $formValues['note_content_to_users']; + } elseif ($value == $configResource['return']['value']) { + $tmpBodyData[$key] = $document[0]['doc_' . $value]; + } else { + $tmpBodyData[$key] = $document[0][$value]; + } + } + } + + if (!empty($object['data'])) { + $tmpBodyData = array_merge($tmpBodyData, $object['data']); + } + + $bodyData[$object['name']] = $tmpBodyData; + } + } else { + $multipleObject = false; + + $select = []; + foreach ($config['rawData'] as $value) { + if ($value != 'note') { + $select[] = $value; + } + } + + $document = ResModel::getOnView(['select' => $select, 'where' => ['res_id = ?'], 'data' => [$aArgs['resId']]]); + if (!empty($document[0])) { + foreach ($config['rawData'] as $key => $value) { + if ($value == 'note') { + $bodyData[$key] = $formValues['note_content_to_users']; + } else { + $bodyData[$key] = $document[0][$value]; + } + } + } + + if (!empty($config['data'])) { + $bodyData = array_merge($bodyData, $config['data']); + } + } + + CurlModel::exec(['curlCallId' => 'closeResource', 'bodyData' => $bodyData, 'multipleObject' => $multipleObject, 'noAuth' => true]); + } + } + + return true; + } } diff --git a/src/app/resource/controllers/ResourceListController.php b/src/app/resource/controllers/ResourceListController.php index 6c115e8de3348486febcbcc6963c53dbccb27780..cf4ff22ec03b5309a89cbe26be2c41d7115361ee 100644 --- a/src/app/resource/controllers/ResourceListController.php +++ b/src/app/resource/controllers/ResourceListController.php @@ -145,14 +145,14 @@ class ResourceListController ]); foreach ($resources as $key => $resource) { - $formattedResources[$key]['res_id'] = $resource['res_id']; - $formattedResources[$key]['alt_identifier'] = $resource['alt_identifier']; - $formattedResources[$key]['barcode'] = $resource['barcode']; - $formattedResources[$key]['subject'] = $resource['subject']; - $formattedResources[$key]['statusLabel'] = $resource['status.label_status']; - $formattedResources[$key]['statusImage'] = $resource['status.img_filename']; - $formattedResources[$key]['priorityColor'] = $resource['priorities.color']; - $formattedResources[$key]['closing_date'] = $resource['closing_date']; + $formattedResources[$key]['res_id'] = $resource['res_id']; + $formattedResources[$key]['alt_identifier'] = $resource['alt_identifier']; + $formattedResources[$key]['barcode'] = $resource['barcode']; + $formattedResources[$key]['subject'] = $resource['subject']; + $formattedResources[$key]['statusLabel'] = $resource['status.label_status']; + $formattedResources[$key]['statusImage'] = $resource['status.img_filename']; + $formattedResources[$key]['priorityColor'] = $resource['priorities.color']; + $formattedResources[$key]['closing_date'] = $resource['closing_date']; $formattedResources[$key]['countAttachments'] = 0; foreach ($attachments as $attachment) { if ($attachment['res_id_master'] == $resource['res_id']) { @@ -243,12 +243,12 @@ class ResourceListController $wherePriorities = $where; $whereCategories = $where; - $whereStatuses = $where; - $whereEntities = $where; - $dataPriorities = $queryData; - $dataCategories = $queryData; - $dataStatuses = $queryData; - $dataEntities = $queryData; + $whereStatuses = $where; + $whereEntities = $where; + $dataPriorities = $queryData; + $dataCategories = $queryData; + $dataStatuses = $queryData; + $dataEntities = $queryData; if (isset($data['priorities'])) { if (empty($data['priorities'])) { @@ -262,13 +262,13 @@ class ResourceListController $tmpWhere = 'priority in (?)'; } $dataCategories[] = explode(',', $replace); - $dataStatuses[] = explode(',', $replace); - $dataEntities[] = explode(',', $replace); + $dataStatuses[] = explode(',', $replace); + $dataEntities[] = explode(',', $replace); } $whereCategories[] = $tmpWhere; - $whereStatuses[] = $tmpWhere; - $whereEntities[] = $tmpWhere; + $whereStatuses[] = $tmpWhere; + $whereEntities[] = $tmpWhere; } if (isset($data['categories'])) { if (empty($data['categories'])) { @@ -282,21 +282,21 @@ class ResourceListController $tmpWhere = 'category_id in (?)'; } $dataPriorities[] = explode(',', $replace); - $dataStatuses[] = explode(',', $replace); - $dataEntities[] = explode(',', $replace); + $dataStatuses[] = explode(',', $replace); + $dataEntities[] = explode(',', $replace); } $wherePriorities[] = $tmpWhere; - $whereStatuses[] = $tmpWhere; - $whereEntities[] = $tmpWhere; + $whereStatuses[] = $tmpWhere; + $whereEntities[] = $tmpWhere; } if (!empty($data['statuses'])) { $wherePriorities[] = 'status in (?)'; - $dataPriorities[] = explode(',', $data['statuses']); + $dataPriorities[] = explode(',', $data['statuses']); $whereCategories[] = 'status in (?)'; - $dataCategories[] = explode(',', $data['statuses']); - $whereEntities[] = 'status in (?)'; - $dataEntities[] = explode(',', $data['statuses']); + $dataCategories[] = explode(',', $data['statuses']); + $whereEntities[] = 'status in (?)'; + $dataEntities[] = explode(',', $data['statuses']); } if (isset($data['entities'])) { if (empty($data['entities'])) { @@ -316,7 +316,7 @@ class ResourceListController $wherePriorities[] = $tmpWhere; $whereCategories[] = $tmpWhere; - $whereStatuses[] = $tmpWhere; + $whereStatuses[] = $tmpWhere; } if (!empty($data['entitiesChildren'])) { $entities = explode(',', $data['entitiesChildren']); @@ -327,11 +327,11 @@ class ResourceListController } if (!empty($entitiesChildren)) { $wherePriorities[] = 'destination in (?)'; - $dataPriorities[] = $entitiesChildren; + $dataPriorities[] = $entitiesChildren; $whereCategories[] = 'destination in (?)'; - $dataCategories[] = $entitiesChildren; - $whereStatuses[] = 'destination in (?)'; - $dataStatuses[] = $entitiesChildren; + $dataCategories[] = $entitiesChildren; + $whereStatuses[] = 'destination in (?)'; + $dataStatuses[] = $entitiesChildren; } } @@ -416,8 +416,8 @@ class ResourceListController $priorities = (count($priorities) >= 2) ? $priorities : []; $categories = (count($categories) >= 2) ? $categories : []; - $statuses = (count($statuses) >= 2) ? $statuses : []; - $entities = (count($entities) >= 2) ? $entities : []; + $statuses = (count($statuses) >= 2) ? $statuses : []; + $entities = (count($entities) >= 2) ? $entities : []; $entitiesChildren = []; foreach ($entities as $entity) { diff --git a/src/frontend/app/actions/actions-list.component.ts b/src/frontend/app/actions/actions-list.component.ts index 6df5c23c7aaee144a8af12d33cb03f190cb3534b..a1afdb573283facaf22b63b74d59f7c335f44d8b 100644 --- a/src/frontend/app/actions/actions-list.component.ts +++ b/src/frontend/app/actions/actions-list.component.ts @@ -5,7 +5,7 @@ import { NotificationService } from '../notification.service'; import { MatDialog, MatMenuTrigger } from '@angular/material'; import { ConfirmActionComponent } from './confirm-action/confirm-action.component'; -import { ClosingActionComponent } from './closing-action/closing-action.component'; +import { CloseMailActionComponent } from './close-mail-action/close-mail-action.component'; @Component({ selector: 'app-actions-list', @@ -105,8 +105,8 @@ export class ActionsListComponent implements OnInit { }); } - closingAction() { - this.dialog.open(ClosingActionComponent, { + closeMailAction() { + const dialogRef = this.dialog.open(CloseMailActionComponent, { width: '500px', data: { contextMode: this.contextMode, @@ -116,6 +116,13 @@ export class ActionsListComponent implements OnInit { currentBasketInfo: this.currentBasketInfo } }); + dialogRef.afterClosed().subscribe(result => { + this.unlock(); + + if (result == 'success') { + this.endAction(); + } + }); } //// diff --git a/src/frontend/app/actions/closing-action/closing-action.component.html b/src/frontend/app/actions/closing-action/closing-action.component.html deleted file mode 100644 index 7d7272d6246c6a43d4a97df42eda2dda1c10d733..0000000000000000000000000000000000000000 --- a/src/frontend/app/actions/closing-action/closing-action.component.html +++ /dev/null @@ -1,20 +0,0 @@ -<div mat-dialog-content> - <div class="row"> - <div class="col-md-12 text-center"> - Voulez-vous <b color="primary" class="highlight">{{data.actionName}}</b> - <b *ngIf="data.contextMode && data.selectedRes.length == 1" color="primary" class="highlight">{{data.contextChrono}}</b> - <b *ngIf="!data.contextMode || (data.contextMode && data.selectedRes.length > 1)" color="primary" class="highlight">{{data.selectedRes.length}} - élement(s)</b> ? - <div class="alert-message alert-message-danger" role="alert" style="margin-top: 30px;"> - Cela actualisera la <b class="highlight">date de clôture</b> des courriers. - </div> - </div> - <div class="col-md-12"> - <app-note-editor></app-note-editor> - </div> - </div> -</div> -<div mat-dialog-actions class="actions"> - <button mat-raised-button mat-button color="primary">{{lang.validate}}</button> - <button mat-raised-button mat-button [mat-dialog-close]="">{{lang.cancel}}</button> -</div> \ No newline at end of file diff --git a/src/frontend/app/actions/closing-action/closing-action.component.scss b/src/frontend/app/actions/closing-action/closing-action.component.scss deleted file mode 100644 index 372b5c8e0d0746a9a5a2f3f15700f4cc4e152a77..0000000000000000000000000000000000000000 --- a/src/frontend/app/actions/closing-action/closing-action.component.scss +++ /dev/null @@ -1,84 +0,0 @@ -.mat-dialog-actions, .mat-dialog-title { - justify-content: center; - text-align: center; -} - -.highlight { - font-size: 110%; -} - -.alert-message -{ - margin: 20px 0; - padding: 20px; - border-left: 3px solid #eee; -} -.alert-message h4 -{ - margin-top: 0; - margin-bottom: 5px; -} -.alert-message p:last-child -{ - margin-bottom: 0; -} -.alert-message code -{ - background-color: #fff; - border-radius: 3px; -} -.alert-message-success -{ - background-color: #F4FDF0; - border-color: #3C763D; -} -.alert-message-success h4 -{ - color: #3C763D; -} -.alert-message-danger -{ - background-color: #8e3e521a; - border-color: #8e3e52; - color: #8e3e52; -} -.alert-message-danger h4 -{ - color: #8e3e52; -} -.alert-message-warning -{ - background-color: #fcf8f2; - border-color: #f0ad4e; -} -.alert-message-warning h4 -{ - color: #f0ad4e; -} -.alert-message-info -{ - background-color: #f4f8fa; - border-color: #5bc0de; -} -.alert-message-info h4 -{ - color: #5bc0de; -} -.alert-message-default -{ - background-color: #EEE; - border-color: #B4B4B4; -} -.alert-message-default h4 -{ - color: #000; -} -.alert-message-notice -{ - background-color: #FCFCDD; - border-color: #BDBD89; -} -.alert-message-notice h4 -{ - color: #444; -} \ No newline at end of file diff --git a/src/frontend/app/actions/closing-action/closing-action.component.ts b/src/frontend/app/actions/closing-action/closing-action.component.ts deleted file mode 100644 index 04016249a1dad0887b60080582704040c7e57e45..0000000000000000000000000000000000000000 --- a/src/frontend/app/actions/closing-action/closing-action.component.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Component, OnInit, Inject } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; -import { LANG } from '../../translate.component'; -import { NotificationService } from '../../notification.service'; -import { MAT_DIALOG_DATA, MatDialog } from '@angular/material'; - -@Component({ - templateUrl: "closing-action.component.html", - styleUrls: ['closing-action.component.scss'], - providers: [NotificationService], -}) -export class ClosingActionComponent implements OnInit { - - lang: any = LANG; - loading: boolean = false; - - constructor(public http: HttpClient, private notify: NotificationService, public dialog: MatDialog, @Inject(MAT_DIALOG_DATA) public data: any) { } - - ngOnInit(): void { - /*this.http.get('../../rest/resourcesList/exportTemplate') - .subscribe((data: any) => { - this.loading = false; - }, (err: any) => { - this.notify.handleErrors(err); - });*/ - this.loading = false; - } -} diff --git a/src/frontend/app/app.module.ts b/src/frontend/app/app.module.ts index 29a81f582aa966f36a5a6cdbec4b2eab5904ad33..2f892d4ccd0b273c78514ab9c763e94f41a1409f 100755 --- a/src/frontend/app/app.module.ts +++ b/src/frontend/app/app.module.ts @@ -24,7 +24,7 @@ import { ActivateUserComponent } from './activate-user.component' import { ActionsListComponent } from './actions/actions-list.component'; /*ACTIONS PAGES */ import { ConfirmActionComponent } from './actions/confirm-action/confirm-action.component'; -import { ClosingActionComponent } from './actions/closing-action/closing-action.component'; +import { CloseMailActionComponent } from './actions/close-mail-action/close-mail-action.component'; import { FiltersListComponent } from './list/filters/filters-list.component'; import { FiltersToolComponent } from './list/filters/filters-tool.component'; @@ -67,7 +67,7 @@ import { DiffusionsListComponent } from './diffusions/diffusions-lis SummarySheetComponent, ExportComponent, ConfirmActionComponent, - ClosingActionComponent, + CloseMailActionComponent, ActionsListComponent, ], entryComponents: [ @@ -80,7 +80,7 @@ import { DiffusionsListComponent } from './diffusions/diffusions-lis SummarySheetComponent, ExportComponent, ConfirmActionComponent, - ClosingActionComponent, + CloseMailActionComponent, ], providers: [ ShortcutMenuService, HeaderService, FiltersListService ], bootstrap: [ AppComponent ]