Merge branch 'dev' into 4146-claim_pickup_order
gitea/salix/pipeline/head This commit looks good
Details
gitea/salix/pipeline/head This commit looks good
Details
This commit is contained in:
commit
2a8a8ed84a
|
@ -1,12 +1,13 @@
|
||||||
const jsdom = require('jsdom');
|
const jsdom = require('jsdom');
|
||||||
const mysql = require('mysql');
|
const mysql = require('mysql');
|
||||||
|
const FormData = require('form-data');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('closeTicket', {
|
Self.remoteMethodCtx('closeTicket', {
|
||||||
description: 'Close tickets without response from the user',
|
description: 'Close tickets without response from the user',
|
||||||
accessType: 'READ',
|
accessType: 'READ',
|
||||||
returns: {
|
returns: {
|
||||||
type: 'Object',
|
type: 'object',
|
||||||
root: true
|
root: true
|
||||||
},
|
},
|
||||||
http: {
|
http: {
|
||||||
|
@ -54,9 +55,9 @@ module.exports = Self => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
await requestToken();
|
await getRequestToken();
|
||||||
|
|
||||||
async function requestToken() {
|
async function getRequestToken() {
|
||||||
const response = await fetch(ostUri);
|
const response = await fetch(ostUri);
|
||||||
|
|
||||||
const result = response.headers.get('set-cookie');
|
const result = response.headers.get('set-cookie');
|
||||||
|
@ -93,24 +94,45 @@ module.exports = Self => {
|
||||||
await close(token, secondCookie);
|
await close(token, secondCookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getLockCode(token, secondCookie, ticketId) {
|
||||||
|
const ostUri = `${config.host}/ajax.php/lock/ticket/${ticketId}`;
|
||||||
|
const params = {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'X-CSRFToken': token,
|
||||||
|
'Cookie': secondCookie
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const response = await fetch(ostUri, params);
|
||||||
|
const body = await response.text();
|
||||||
|
const json = JSON.parse(body);
|
||||||
|
|
||||||
|
return json.code;
|
||||||
|
}
|
||||||
|
|
||||||
async function close(token, secondCookie) {
|
async function close(token, secondCookie) {
|
||||||
for (const ticketId of ticketsId) {
|
for (const ticketId of ticketsId) {
|
||||||
const ostUri = `${config.host}/ajax.php/tickets/${ticketId}/status`;
|
const lockCode = await getLockCode(token, secondCookie, ticketId);
|
||||||
const data = {
|
let form = new FormData();
|
||||||
status_id: config.newStatusId,
|
form.append('__CSRFToken__', token);
|
||||||
comments: config.comment,
|
form.append('id', ticketId);
|
||||||
undefined: config.action
|
form.append('a', config.responseType);
|
||||||
};
|
form.append('lockCode', lockCode);
|
||||||
|
form.append('from_email_id', config.fromEmailId);
|
||||||
|
form.append('reply-to', config.replyTo);
|
||||||
|
form.append('cannedResp', 0);
|
||||||
|
form.append('response', config.comment);
|
||||||
|
form.append('signature', 'none');
|
||||||
|
form.append('reply_status_id', config.newStatusId);
|
||||||
|
|
||||||
|
const ostUri = `${config.host}/tickets.php?id=${ticketId}`;
|
||||||
const params = {
|
const params = {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: new URLSearchParams(data),
|
body: form,
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
|
||||||
'X-CSRFToken': token,
|
|
||||||
'Cookie': secondCookie
|
'Cookie': secondCookie
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return fetch(ostUri, params);
|
return fetch(ostUri, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,9 +27,6 @@
|
||||||
"newStatusId": {
|
"newStatusId": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
"action": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"day": {
|
"day": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
|
@ -47,6 +44,15 @@
|
||||||
},
|
},
|
||||||
"portDb": {
|
"portDb": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
|
},
|
||||||
|
"responseType": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"fromEmailId": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"replyTo": {
|
||||||
|
"type": "string"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,8 +13,4 @@ CREATE TABLE `vn`.`osTicketConfig` (
|
||||||
`passwordDb` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL,
|
`passwordDb` varchar(100) COLLATE utf8mb3_unicode_ci DEFAULT NULL,
|
||||||
`portDb` int(11) DEFAULT NULL,
|
`portDb` int(11) DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
|
||||||
|
|
||||||
INSERT INTO `vn`.`osTicketConfig`(`id`, `host`, `user`, `password`, `oldStatus`, `newStatusId`, `action`, `day`, `comment`, `hostDb`, `userDb`, `passwordDb`, `portDb`)
|
|
||||||
VALUES
|
|
||||||
(0, 'https://cau.verdnatura.es/scp', NULL, NULL, 'open', 3, 'Cerrar', 60, 'Este CAU se ha cerrado automáticamente', NULL, NULL, NULL, NULL);
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
INSERT INTO `salix`.`ACL` (model,property,accessType,permission,principalId)
|
||||||
|
VALUES ('WorkerDisableExcluded','*','*','ALLOW','hr');
|
|
@ -0,0 +1,8 @@
|
||||||
|
ALTER TABLE `vn`.`osTicketConfig` DROP COLUMN `action`;
|
||||||
|
ALTER TABLE `vn`.`osTicketConfig` ADD responseType varchar(100) NULL;
|
||||||
|
ALTER TABLE `vn`.`osTicketConfig` ADD fromEmailId INT NULL;
|
||||||
|
ALTER TABLE `vn`.`osTicketConfig` ADD replyTo varchar(100) NULL;
|
||||||
|
|
||||||
|
UPDATE `vn`.`osTicketConfig`
|
||||||
|
SET responseType='reply', fromEmailId=5, replyTo='all'
|
||||||
|
WHERE id=0;
|
|
@ -2710,3 +2710,7 @@ INSERT INTO `vn`.`ticketCollection` (`ticketFk`, `collectionFk`, `created`, `lev
|
||||||
UPDATE `account`.`user`
|
UPDATE `account`.`user`
|
||||||
SET `hasGrant` = 1
|
SET `hasGrant` = 1
|
||||||
WHERE `id` = 66;
|
WHERE `id` = 66;
|
||||||
|
|
||||||
|
INSERT INTO `vn`.`osTicketConfig` (`id`, `host`, `user`, `password`, `oldStatus`, `newStatusId`, `day`, `comment`, `hostDb`, `userDb`, `passwordDb`, `portDb`, `responseType`, `fromEmailId`, `replyTo`)
|
||||||
|
VALUES
|
||||||
|
(0, 'http://localhost:56596/scp', 'ostadmin', 'Admin1', 'open', 3, 60, 'Este CAU se ha cerrado automáticamente. Si el problema persiste responda a este mensaje.', 'localhost', 'osticket', 'osticket', 40003, 'reply', 1, 'all');
|
|
@ -64,6 +64,9 @@
|
||||||
},
|
},
|
||||||
"WorkerTimeControlMail": {
|
"WorkerTimeControlMail": {
|
||||||
"dataSource": "vn"
|
"dataSource": "vn"
|
||||||
|
},
|
||||||
|
"WorkerDisableExcluded": {
|
||||||
|
"dataSource": "vn"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
"name": "WorkerDisableExcluded",
|
||||||
|
"base": "VnModel",
|
||||||
|
"options": {
|
||||||
|
"mysql": {
|
||||||
|
"table": "workerDisableExcluded"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"workerFk": {
|
||||||
|
"id": true,
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"dated": {
|
||||||
|
"type": "date"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"acls": [
|
||||||
|
{
|
||||||
|
"accessType": "READ",
|
||||||
|
"principalType": "ROLE",
|
||||||
|
"principalId": "$everyone",
|
||||||
|
"permission": "ALLOW"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -14,6 +14,20 @@
|
||||||
</vn-float-button>
|
</vn-float-button>
|
||||||
</div>
|
</div>
|
||||||
</slot-before>
|
</slot-before>
|
||||||
|
<slot-menu>
|
||||||
|
<vn-item
|
||||||
|
ng-click="$ctrl.handleExcluded()"
|
||||||
|
translate
|
||||||
|
ng-if="!$ctrl.excluded">
|
||||||
|
Click to exclude the user from getting disabled
|
||||||
|
</vn-item>
|
||||||
|
<vn-item
|
||||||
|
ng-click="$ctrl.handleExcluded()"
|
||||||
|
translate
|
||||||
|
ng-if="$ctrl.excluded">
|
||||||
|
Click to allow the user to be disabled
|
||||||
|
</vn-item>
|
||||||
|
</slot-menu>
|
||||||
<slot-body>
|
<slot-body>
|
||||||
<div class="attributes">
|
<div class="attributes">
|
||||||
<vn-label-value
|
<vn-label-value
|
||||||
|
@ -37,6 +51,13 @@
|
||||||
value="{{$ctrl.worker.sip.extension}}">
|
value="{{$ctrl.worker.sip.extension}}">
|
||||||
</vn-label-value>
|
</vn-label-value>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="icons">
|
||||||
|
<vn-icon
|
||||||
|
vn-tooltip="This user can't be disabled"
|
||||||
|
icon="person"
|
||||||
|
ng-if="$ctrl.worker.excluded">
|
||||||
|
</vn-icon>
|
||||||
|
</div>
|
||||||
<div class="quicklinks">
|
<div class="quicklinks">
|
||||||
<div ng-transclude="btnOne">
|
<div ng-transclude="btnOne">
|
||||||
<vn-quick-link
|
<vn-quick-link
|
||||||
|
|
|
@ -13,6 +13,33 @@ class Controller extends Descriptor {
|
||||||
|
|
||||||
set worker(value) {
|
set worker(value) {
|
||||||
this.entity = value;
|
this.entity = value;
|
||||||
|
|
||||||
|
if (value)
|
||||||
|
this.getIsExcluded();
|
||||||
|
}
|
||||||
|
|
||||||
|
get excluded() {
|
||||||
|
return this.entity.excluded;
|
||||||
|
}
|
||||||
|
|
||||||
|
set excluded(value) {
|
||||||
|
this.entity.excluded = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
getIsExcluded() {
|
||||||
|
this.$http.get(`workerDisableExcludeds/${this.entity.id}/exists`).then(data => {
|
||||||
|
this.excluded = data.data.exists;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
handleExcluded() {
|
||||||
|
if (this.excluded) {
|
||||||
|
this.$http.delete(`workerDisableExcludeds/${this.entity.id}`);
|
||||||
|
this.excluded = false;
|
||||||
|
} else {
|
||||||
|
this.$http.post(`workerDisableExcludeds`, {workerFk: this.entity.id, dated: new Date});
|
||||||
|
this.excluded = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loadData() {
|
loadData() {
|
||||||
|
|
|
@ -20,4 +20,7 @@ View worker: Ver trabajador
|
||||||
Worker id: Id trabajador
|
Worker id: Id trabajador
|
||||||
Workers: Trabajadores
|
Workers: Trabajadores
|
||||||
worker: trabajador
|
worker: trabajador
|
||||||
Go to the worker: Ir al trabajador
|
Go to the worker: Ir al trabajador
|
||||||
|
Click to exclude the user from getting disabled: Marcar para no deshabilitar
|
||||||
|
Click to allow the user to be disabled: Marcar para deshabilitar
|
||||||
|
This user can't be disabled: Fijado para no deshabilitar
|
|
@ -16,6 +16,7 @@
|
||||||
"bcrypt": "^5.0.1",
|
"bcrypt": "^5.0.1",
|
||||||
"bmp-js": "^0.1.0",
|
"bmp-js": "^0.1.0",
|
||||||
"compression": "^1.7.3",
|
"compression": "^1.7.3",
|
||||||
|
"form-data": "^4.0.0",
|
||||||
"fs-extra": "^5.0.0",
|
"fs-extra": "^5.0.0",
|
||||||
"ftps": "^1.2.0",
|
"ftps": "^1.2.0",
|
||||||
"got": "^10.7.0",
|
"got": "^10.7.0",
|
||||||
|
|
Loading…
Reference in New Issue