fix: refs #7355 remove and tests accounts
This commit is contained in:
parent
3ee9833a70
commit
3ee377156b
|
@ -0,0 +1,4 @@
|
||||||
|
<slot-descriptor>
|
||||||
|
<vn-user-descriptor>
|
||||||
|
</vn-user-descriptor>
|
||||||
|
</slot-descriptor>
|
|
@ -0,0 +1,9 @@
|
||||||
|
import ngModule from '../module';
|
||||||
|
import DescriptorPopover from 'salix/components/descriptor-popover';
|
||||||
|
|
||||||
|
class Controller extends DescriptorPopover {}
|
||||||
|
|
||||||
|
ngModule.vnComponent('vnAccountDescriptorPopover', {
|
||||||
|
slotTemplate: require('./index.html'),
|
||||||
|
controller: Controller
|
||||||
|
});
|
|
@ -0,0 +1,192 @@
|
||||||
|
<vn-descriptor-content
|
||||||
|
module="account"
|
||||||
|
description="$ctrl.user.nickname"
|
||||||
|
summary="$ctrl.$.summary">
|
||||||
|
<slot-before>
|
||||||
|
<vn-user-photo user-id="{{$ctrl.id}}"/>
|
||||||
|
</slot-before>
|
||||||
|
<slot-menu>
|
||||||
|
<vn-item
|
||||||
|
ng-click="deleteUser.show()"
|
||||||
|
name="deleteUser"
|
||||||
|
vn-acl="itManagement"
|
||||||
|
vn-acl-action="remove"
|
||||||
|
translate>
|
||||||
|
Delete
|
||||||
|
</vn-item>
|
||||||
|
<vn-item
|
||||||
|
ng-if="::$root.user.id == $ctrl.id"
|
||||||
|
ng-click="$ctrl.onChangePassClick(true)"
|
||||||
|
name="changePassword"
|
||||||
|
vn-acl="sysadmin"
|
||||||
|
vn-acl-action="remove"
|
||||||
|
translate>
|
||||||
|
Change password
|
||||||
|
</vn-item>
|
||||||
|
<vn-item
|
||||||
|
ng-click="$ctrl.onChangePassClick(false)"
|
||||||
|
name="setPassword"
|
||||||
|
vn-acl="sysadmin"
|
||||||
|
vn-acl-action="remove"
|
||||||
|
translate>
|
||||||
|
Set password
|
||||||
|
</vn-item>
|
||||||
|
<vn-item
|
||||||
|
ng-if="!$ctrl.hasAccount"
|
||||||
|
ng-click="enableAccount.show()"
|
||||||
|
name="enableAccount"
|
||||||
|
vn-acl="sysadmin"
|
||||||
|
vn-acl-action="remove"
|
||||||
|
translate>
|
||||||
|
Enable account
|
||||||
|
</vn-item>
|
||||||
|
<vn-item
|
||||||
|
ng-if="$ctrl.hasAccount"
|
||||||
|
ng-click="disableAccount.show()"
|
||||||
|
name="disableAccount"
|
||||||
|
vn-acl="sysadmin"
|
||||||
|
vn-acl-action="remove"
|
||||||
|
translate>
|
||||||
|
Disable account
|
||||||
|
</vn-item>
|
||||||
|
<vn-item
|
||||||
|
ng-if="!$ctrl.user.active"
|
||||||
|
ng-click="activateUser.show()"
|
||||||
|
name="activateUser"
|
||||||
|
vn-acl="itManagement"
|
||||||
|
vn-acl-action="remove"
|
||||||
|
translate>
|
||||||
|
Activate user
|
||||||
|
</vn-item>
|
||||||
|
<vn-item
|
||||||
|
ng-if="$ctrl.user.active"
|
||||||
|
ng-click="deactivateUser.show()"
|
||||||
|
name="deactivateUser"
|
||||||
|
vn-acl="itManagement"
|
||||||
|
vn-acl-action="remove"
|
||||||
|
translate>
|
||||||
|
Deactivate user
|
||||||
|
</vn-item>
|
||||||
|
<vn-item
|
||||||
|
ng-click="syncUser.show()"
|
||||||
|
name="synchronizeUser"
|
||||||
|
vn-acl="it"
|
||||||
|
vn-acl-action="remove"
|
||||||
|
translate>
|
||||||
|
Synchronize
|
||||||
|
</vn-item>
|
||||||
|
</slot-menu>
|
||||||
|
<slot-body>
|
||||||
|
<div class="attributes">
|
||||||
|
<vn-label-value
|
||||||
|
label="User"
|
||||||
|
value="{{$ctrl.user.name}}">
|
||||||
|
</vn-label-value>
|
||||||
|
<vn-label-value
|
||||||
|
label="Role"
|
||||||
|
value="{{$ctrl.user.role.name}}">
|
||||||
|
</vn-label-value>
|
||||||
|
</div>
|
||||||
|
<div class="icons">
|
||||||
|
<vn-icon
|
||||||
|
vn-tooltip="User deactivated"
|
||||||
|
icon="icon-disabled"
|
||||||
|
ng-if="!$ctrl.user.active">
|
||||||
|
</vn-icon>
|
||||||
|
<vn-icon
|
||||||
|
vn-tooltip="Account enabled"
|
||||||
|
icon="contact_mail"
|
||||||
|
ng-if="$ctrl.hasAccount">
|
||||||
|
</vn-icon>
|
||||||
|
</div>
|
||||||
|
</slot-body>
|
||||||
|
</vn-descriptor-content>
|
||||||
|
<vn-confirm
|
||||||
|
vn-id="deleteUser"
|
||||||
|
on-accept="$ctrl.onDelete()"
|
||||||
|
question="Are you sure you want to continue?"
|
||||||
|
message="User will be removed">
|
||||||
|
</vn-confirm>
|
||||||
|
<vn-confirm
|
||||||
|
vn-id="enableAccount"
|
||||||
|
on-accept="$ctrl.onEnableAccount()"
|
||||||
|
question="Are you sure you want to continue?"
|
||||||
|
message="Account will be enabled">
|
||||||
|
</vn-confirm>
|
||||||
|
<vn-confirm
|
||||||
|
vn-id="disableAccount"
|
||||||
|
on-accept="$ctrl.onDisableAccount()"
|
||||||
|
question="Are you sure you want to continue?"
|
||||||
|
message="Account will be disabled">
|
||||||
|
</vn-confirm>
|
||||||
|
<vn-confirm
|
||||||
|
vn-id="activateUser"
|
||||||
|
on-accept="$ctrl.onSetActive(true)"
|
||||||
|
question="Are you sure you want to continue?"
|
||||||
|
message="User will activated">
|
||||||
|
</vn-confirm>
|
||||||
|
<vn-confirm
|
||||||
|
vn-id="deactivateUser"
|
||||||
|
on-accept="$ctrl.onSetActive(false)"
|
||||||
|
question="Are you sure you want to continue?"
|
||||||
|
message="User will be deactivated">
|
||||||
|
</vn-confirm>
|
||||||
|
<vn-dialog
|
||||||
|
vn-id="changePass"
|
||||||
|
on-accept="$ctrl.onPassChange()"
|
||||||
|
on-close="$ctrl.onPassClose()">
|
||||||
|
<tpl-body>
|
||||||
|
<vn-textfield
|
||||||
|
ng-if="$ctrl.askOldPass"
|
||||||
|
label="Old password"
|
||||||
|
ng-model="$ctrl.oldPassword"
|
||||||
|
type="password"
|
||||||
|
vn-focus>
|
||||||
|
</vn-textfield>
|
||||||
|
<vn-textfield
|
||||||
|
label="New password"
|
||||||
|
ng-model="$ctrl.newPassword"
|
||||||
|
type="password"
|
||||||
|
info="{{'Password requirements' | translate:$ctrl.passRequirements}}"
|
||||||
|
vn-focus>
|
||||||
|
</vn-textfield>
|
||||||
|
<vn-textfield
|
||||||
|
label="Repeat password"
|
||||||
|
ng-model="$ctrl.repeatPassword"
|
||||||
|
type="password">
|
||||||
|
</vn-textfield>
|
||||||
|
</tpl-body>
|
||||||
|
<tpl-buttons>
|
||||||
|
<input type="button" response="cancel" translate-attr="{value: 'Cancel'}"/>
|
||||||
|
<button response="accept" translate>Change password</button>
|
||||||
|
</tpl-buttons>
|
||||||
|
</vn-dialog>
|
||||||
|
<vn-dialog
|
||||||
|
vn-id="syncUser"
|
||||||
|
on-accept="$ctrl.onSync()"
|
||||||
|
on-close="$ctrl.onSyncClose()">
|
||||||
|
<tpl-title translate>
|
||||||
|
Do you want to synchronize user?
|
||||||
|
</tpl-title>
|
||||||
|
<tpl-body>
|
||||||
|
<vn-check
|
||||||
|
label="Synchronize password"
|
||||||
|
ng-model="$ctrl.shouldSyncPassword"
|
||||||
|
info="If password is not specified, just user attributes are synchronized"
|
||||||
|
vn-focus>
|
||||||
|
</vn-check>
|
||||||
|
<vn-textfield
|
||||||
|
label="Password"
|
||||||
|
ng-model="$ctrl.syncPassword"
|
||||||
|
type="password"
|
||||||
|
ng-if="$ctrl.shouldSyncPassword">
|
||||||
|
</vn-textfield>
|
||||||
|
</tpl-body>
|
||||||
|
<tpl-buttons>
|
||||||
|
<input type="button" response="cancel" translate-attr="{value: 'Cancel'}"/>
|
||||||
|
<button response="accept" translate>Synchronize</button>
|
||||||
|
</tpl-buttons>
|
||||||
|
</vn-dialog>
|
||||||
|
<vn-popup vn-id="summary">
|
||||||
|
<vn-user-summary user="$ctrl.user"></vn-user-summary>
|
||||||
|
</vn-popup>
|
|
@ -0,0 +1,145 @@
|
||||||
|
import ngModule from '../module';
|
||||||
|
import Descriptor from 'salix/components/descriptor';
|
||||||
|
import UserError from 'core/lib/user-error';
|
||||||
|
|
||||||
|
class Controller extends Descriptor {
|
||||||
|
get user() {
|
||||||
|
return this.entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
set user(value) {
|
||||||
|
this.entity = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
get entity() {
|
||||||
|
return super.entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
set entity(value) {
|
||||||
|
super.entity = value;
|
||||||
|
this.hasAccount = null;
|
||||||
|
if (!value) return;
|
||||||
|
|
||||||
|
this.$http.get(`Accounts/${value.id}/exists`)
|
||||||
|
.then(res => this.hasAccount = res.data.exists);
|
||||||
|
}
|
||||||
|
|
||||||
|
loadData() {
|
||||||
|
const filter = {
|
||||||
|
where: {id: this.$params.id},
|
||||||
|
include: {
|
||||||
|
relation: 'role',
|
||||||
|
scope: {
|
||||||
|
fields: ['id', 'name']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return Promise.all([
|
||||||
|
this.$http.get(`VnUsers/preview`, {filter})
|
||||||
|
.then(res => {
|
||||||
|
const [user] = res.data;
|
||||||
|
this.user = user;
|
||||||
|
}),
|
||||||
|
this.$http.get(`Accounts/${this.$params.id}/exists`)
|
||||||
|
.then(res => this.hasAccount = res.data.exists)
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDelete() {
|
||||||
|
return this.$http.delete(`VnUsers/${this.id}`)
|
||||||
|
.then(() => this.$state.go('account.index'))
|
||||||
|
.then(() => this.vnApp.showSuccess(this.$t('User removed')));
|
||||||
|
}
|
||||||
|
|
||||||
|
onChangePassClick(askOldPass) {
|
||||||
|
this.$http.get('UserPasswords/findOne')
|
||||||
|
.then(res => {
|
||||||
|
this.passRequirements = res.data;
|
||||||
|
this.askOldPass = askOldPass;
|
||||||
|
this.$.changePass.show();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onPassChange() {
|
||||||
|
if (!this.newPassword)
|
||||||
|
throw new UserError(`You must enter a new password`);
|
||||||
|
if (this.newPassword != this.repeatPassword)
|
||||||
|
throw new UserError(`Passwords don't match`);
|
||||||
|
|
||||||
|
let method;
|
||||||
|
const params = {newPassword: this.newPassword};
|
||||||
|
|
||||||
|
if (this.askOldPass) {
|
||||||
|
method = 'change-password';
|
||||||
|
params.oldPassword = this.oldPassword;
|
||||||
|
} else
|
||||||
|
method = 'setPassword';
|
||||||
|
|
||||||
|
return this.$http.patch(`Accounts/${this.id}/${method}`, params)
|
||||||
|
.then(() => {
|
||||||
|
this.emit('change');
|
||||||
|
this.vnApp.showSuccess(this.$t('Password changed succesfully!'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onPassClose() {
|
||||||
|
this.oldPassword = '';
|
||||||
|
this.newPassword = '';
|
||||||
|
this.repeatPassword = '';
|
||||||
|
this.$.$apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
onEnableAccount() {
|
||||||
|
return this.$http.post(`Accounts`, {id: this.id})
|
||||||
|
.then(() => this.onSwitchAccount(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
onDisableAccount() {
|
||||||
|
return this.$http.delete(`Accounts/${this.id}`)
|
||||||
|
.then(() => this.onSwitchAccount(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
onSwitchAccount(enable) {
|
||||||
|
this.hasAccount = enable;
|
||||||
|
const message = enable
|
||||||
|
? 'Account enabled!'
|
||||||
|
: 'Account disabled!';
|
||||||
|
this.emit('change');
|
||||||
|
this.vnApp.showSuccess(this.$t(message));
|
||||||
|
}
|
||||||
|
|
||||||
|
onSetActive(active) {
|
||||||
|
return this.$http.patch(`VnUsers/${this.id}`, {active})
|
||||||
|
.then(() => {
|
||||||
|
this.user.active = active;
|
||||||
|
const message = active
|
||||||
|
? 'User activated!'
|
||||||
|
: 'User deactivated!';
|
||||||
|
this.emit('change');
|
||||||
|
this.vnApp.showSuccess(this.$t(message));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onSync() {
|
||||||
|
const params = {force: true};
|
||||||
|
if (this.shouldSyncPassword)
|
||||||
|
params.password = this.syncPassword;
|
||||||
|
|
||||||
|
return this.$http.patch(`Accounts/${this.user.name}/sync`, params)
|
||||||
|
.then(() => this.vnApp.showSuccess(this.$t('User synchronized!')));
|
||||||
|
}
|
||||||
|
|
||||||
|
onSyncClose() {
|
||||||
|
this.shouldSyncPassword = false;
|
||||||
|
this.syncPassword = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ngModule.component('vnUserDescriptor', {
|
||||||
|
template: require('./index.html'),
|
||||||
|
controller: Controller,
|
||||||
|
bindings: {
|
||||||
|
user: '<'
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,35 @@
|
||||||
|
User will be removed: El usuario será eliminado
|
||||||
|
User removed: Usuario eliminado
|
||||||
|
Are you sure you want to continue?: ¿Seguro que quieres continuar?
|
||||||
|
Account will be enabled: La cuenta será habilitada
|
||||||
|
Account will be disabled: La cuenta será deshabilitada
|
||||||
|
Account enabled!: ¡Cuenta habilitada!
|
||||||
|
Account disabled!: ¡Cuenta deshabilitada!
|
||||||
|
User will activated: El usuario será activado
|
||||||
|
User will be deactivated: El usuario será desactivado
|
||||||
|
User activated!: ¡Usuario activado!
|
||||||
|
User deactivated!: ¡Usuario desactivado!
|
||||||
|
Account enabled: Cuenta habilitada
|
||||||
|
User deactivated: Usuario desactivado
|
||||||
|
Change role: Modificar rol
|
||||||
|
Change password: Cambiar contraseña
|
||||||
|
Set password: Establecer contraseña
|
||||||
|
Enable account: Habilitar cuenta
|
||||||
|
Disable account: Deshabilitar cuenta
|
||||||
|
Activate user: Activar usuario
|
||||||
|
Deactivate user: Desactivar usuario
|
||||||
|
Old password: Contraseña antigua
|
||||||
|
New password: Nueva contraseña
|
||||||
|
Repeat password: Repetir contraseña
|
||||||
|
Password changed succesfully!: ¡Contraseña modificada correctamente!
|
||||||
|
Synchronize: Sincronizar
|
||||||
|
Do you want to synchronize user?: ¿Quieres sincronizar el usuario?
|
||||||
|
Synchronize password: Sincronizar contraseña
|
||||||
|
User synchronized!: ¡Usuario sincronizado!
|
||||||
|
Role changed succesfully!: ¡Rol modificado correctamente!
|
||||||
|
Password requirements: >
|
||||||
|
La contraseña debe tener al menos {{ length }} caracteres de longitud,
|
||||||
|
{{nAlpha}} caracteres alfabéticos, {{nUpper}} letras mayúsculas, {{nDigits}}
|
||||||
|
dígitos y {{nPunct}} símbolos (Ej: $%&.)
|
||||||
|
You must enter a new password: Debes introducir la nueva contraseña
|
||||||
|
Passwords don't match: Las contraseñas no coinciden
|
|
@ -1,3 +1,6 @@
|
||||||
export * from './module';
|
export * from './module';
|
||||||
|
|
||||||
import './main';
|
import './main';
|
||||||
|
import './descriptor';
|
||||||
|
import './descriptor-popover';
|
||||||
|
import './summary';
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
<vn-card class="summary">
|
||||||
|
<h5>
|
||||||
|
<a
|
||||||
|
ng-if="::summary.id"
|
||||||
|
vn-tooltip="Go to the user"
|
||||||
|
ui-sref="account.card.summary({id: {{::summary.id}}})"
|
||||||
|
name="goToSummary">
|
||||||
|
<vn-icon-button icon="launch"></vn-icon-button>
|
||||||
|
</a>
|
||||||
|
<span>{{summary.id}} - {{summary.nickname}}</span>
|
||||||
|
</h5>
|
||||||
|
<vn-horizontal class="vn-pa-md">
|
||||||
|
<vn-one>
|
||||||
|
<h4 ng-show="$ctrl.isHr">
|
||||||
|
<a
|
||||||
|
ui-sref="account.card.basicData({id:summary.id})"
|
||||||
|
target="_self">
|
||||||
|
<span translate vn-tooltip="Go to">Basic Data</span>
|
||||||
|
</a>
|
||||||
|
</h4>
|
||||||
|
<h4
|
||||||
|
translate
|
||||||
|
ng-show="!$ctrl.isHr">
|
||||||
|
Basic Data
|
||||||
|
</h4>
|
||||||
|
<vn-label-value
|
||||||
|
label="Id"
|
||||||
|
value="{{summary.id}}">
|
||||||
|
</vn-label-value>
|
||||||
|
<vn-label-value
|
||||||
|
label="User"
|
||||||
|
value="{{summary.name}}">
|
||||||
|
</vn-label-value>
|
||||||
|
<vn-label-value
|
||||||
|
label="Role"
|
||||||
|
value="{{summary.role.name}}">
|
||||||
|
</vn-label-value>
|
||||||
|
</vn-one>
|
||||||
|
</vn-horizontal>
|
||||||
|
</vn-card>
|
|
@ -0,0 +1,40 @@
|
||||||
|
import ngModule from '../module';
|
||||||
|
import Summary from 'salix/components/summary';
|
||||||
|
|
||||||
|
class Controller extends Summary {
|
||||||
|
set user(value) {
|
||||||
|
this._user = value;
|
||||||
|
this.$.summary = null;
|
||||||
|
if (!value) return;
|
||||||
|
|
||||||
|
const filter = {
|
||||||
|
where: {id: value.id},
|
||||||
|
include: {
|
||||||
|
relation: 'role',
|
||||||
|
scope: {
|
||||||
|
fields: ['id', 'name']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.$http.get(`VnUsers/preview`, {filter})
|
||||||
|
.then(res => {
|
||||||
|
const [summary] = res.data;
|
||||||
|
this.$.summary = summary;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
get isHr() {
|
||||||
|
return this.aclService.hasAny(['hr']);
|
||||||
|
}
|
||||||
|
|
||||||
|
get user() {
|
||||||
|
return this._user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ngModule.component('vnUserSummary', {
|
||||||
|
template: require('./index.html'),
|
||||||
|
controller: Controller,
|
||||||
|
bindings: {
|
||||||
|
user: '<'
|
||||||
|
}
|
||||||
|
});
|
Loading…
Reference in New Issue