#265 Añadir boton ok y estado CR: JUAN
This commit is contained in:
parent
68b13efb83
commit
024a248797
|
@ -3,9 +3,25 @@
|
||||||
<vn-card pad-large>
|
<vn-card pad-large>
|
||||||
<vn-vertical>
|
<vn-vertical>
|
||||||
<vn-title>Sale</vn-title>
|
<vn-title>Sale</vn-title>
|
||||||
|
<vn-tool-bar margin-medium-bottom>
|
||||||
|
<vn-button
|
||||||
|
disabled="$ctrl.ticket.tracking.state.alertLevel != 0"
|
||||||
|
label="Ok"
|
||||||
|
ng-click="$ctrl.onStateOkClick()">
|
||||||
|
</vn-button>
|
||||||
|
<vn-icon-menu
|
||||||
|
disabled="$ctrl.ticket.tracking.state.alertLevel != 0"
|
||||||
|
label="State"
|
||||||
|
url="/ticket/api/States/alertLevelIs0"
|
||||||
|
on-change="$ctrl.onStateChange(value)">
|
||||||
|
</vn-icon-menu>
|
||||||
|
</vn-tool-bar>
|
||||||
<table class="vn-grid">
|
<table class="vn-grid">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th number>
|
||||||
|
<vn-multi-check data="index.model.instances"></vn-multi-check>
|
||||||
|
</th>
|
||||||
<th number translate>Item</th>
|
<th number translate>Item</th>
|
||||||
<th translate style="text-align:center">Description</th>
|
<th translate style="text-align:center">Description</th>
|
||||||
<th number translate>Quantity</th>
|
<th number translate>Quantity</th>
|
||||||
|
@ -15,7 +31,10 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr ng-repeat="sale in $ctrl.instances track by sale.id">
|
<tr ng-repeat="sale in index.model.instances track by sale.id">
|
||||||
|
<td number>
|
||||||
|
<vn-check field="sale.checked"></vn-check>
|
||||||
|
</td>
|
||||||
<td
|
<td
|
||||||
pointer
|
pointer
|
||||||
number
|
number
|
||||||
|
@ -35,7 +54,7 @@
|
||||||
</table>
|
</table>
|
||||||
</vn-vertical>
|
</vn-vertical>
|
||||||
</vn-card>
|
</vn-card>
|
||||||
<vn-auto-paging vn-one margin-large-top index="index" total="index.model.count" items="$ctrl.instances"></vn-auto-paging>
|
<vn-auto-paging vn-one margin-large-top index="index" total="index.model.count" items="index.model.instances"></vn-auto-paging>
|
||||||
<vn-item-descriptor-popover vn-id="descriptor">
|
<vn-item-descriptor-popover vn-id="descriptor">
|
||||||
</vn-item-descriptor-popover>
|
</vn-item-descriptor-popover>
|
||||||
</vn-popover>
|
</vn-popover>
|
||||||
|
|
|
@ -2,11 +2,27 @@ import ngModule from '../module';
|
||||||
import FilterTicketList from '../filter-ticket-list';
|
import FilterTicketList from '../filter-ticket-list';
|
||||||
|
|
||||||
class Controller extends FilterTicketList {
|
class Controller extends FilterTicketList {
|
||||||
constructor($scope, $timeout, $stateParams) {
|
constructor($scope, $timeout, $stateParams, $http) {
|
||||||
super($scope, $timeout, $stateParams);
|
super($scope, $timeout, $stateParams);
|
||||||
this.$ = $scope;
|
this.$ = $scope;
|
||||||
this.$timeout = $timeout;
|
this.$timeout = $timeout;
|
||||||
this.onOrder('itemFk', 'ASC');
|
this.onOrder('itemFk', 'ASC');
|
||||||
|
this.$http = $http;
|
||||||
|
}
|
||||||
|
|
||||||
|
onStateOkClick() {
|
||||||
|
let filter = {where: {code: "OK"}, fields: ["id"]};
|
||||||
|
let json = encodeURIComponent(JSON.stringify(filter));
|
||||||
|
this.$http.get(`/ticket/api/States?filter=${json}`).then(res => {
|
||||||
|
this.onStateChange(res.data[0].id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onStateChange(value) {
|
||||||
|
let params = {ticketFk: this.$state.params.id, stateFk: value};
|
||||||
|
this.$http.post(`/ticket/api/TicketTrackings`, params).then(() => {
|
||||||
|
this.card.reload();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
showDescriptor(event, itemFk) {
|
showDescriptor(event, itemFk) {
|
||||||
|
@ -19,9 +35,15 @@ class Controller extends FilterTicketList {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Controller.$inject = ['$scope', '$timeout', '$state'];
|
Controller.$inject = ['$scope', '$timeout', '$state', '$http'];
|
||||||
|
|
||||||
ngModule.component('vnTicketSale', {
|
ngModule.component('vnTicketSale', {
|
||||||
template: require('./sale.html'),
|
template: require('./sale.html'),
|
||||||
controller: Controller
|
controller: Controller,
|
||||||
|
bindings: {
|
||||||
|
ticket: '<'
|
||||||
|
},
|
||||||
|
require: {
|
||||||
|
card: '^vnTicketCard'
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
import './sale.js';
|
||||||
|
|
||||||
|
describe('Ticket', () => {
|
||||||
|
describe('Component vnTicketSale', () => {
|
||||||
|
let $componentController;
|
||||||
|
let controller;
|
||||||
|
let $httpBackend;
|
||||||
|
let $state;
|
||||||
|
let $scope;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
angular.mock.module('ticket');
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(angular.mock.inject((_$componentController_, _$state_, _$httpBackend_, $rootScope) => {
|
||||||
|
$componentController = _$componentController_;
|
||||||
|
$httpBackend = _$httpBackend_;
|
||||||
|
$scope = $rootScope.$new();
|
||||||
|
$scope.index = {model: {instances: [{id: 1}, {id: 2}]}, accept: () => {
|
||||||
|
return {
|
||||||
|
then: () => {}
|
||||||
|
};
|
||||||
|
}};
|
||||||
|
$state = _$state_;
|
||||||
|
$state.params.id = 1;
|
||||||
|
controller = $componentController('vnTicketSale', {$scope: $scope}, {$state: $state});
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('onStateOkClick()', () => {
|
||||||
|
it('should perform a get and then call a function', () => {
|
||||||
|
let filter = {where: {code: "OK"}, fields: ["id"]};
|
||||||
|
filter = encodeURIComponent(JSON.stringify(filter));
|
||||||
|
let res = [{id: 3}];
|
||||||
|
spyOn(controller, 'onStateChange');
|
||||||
|
|
||||||
|
$httpBackend.whenGET(`/ticket/api/States?filter=${filter}`).respond(res);
|
||||||
|
$httpBackend.expectGET(`/ticket/api/States?filter=${filter}`);
|
||||||
|
controller.onStateOkClick();
|
||||||
|
$httpBackend.flush();
|
||||||
|
|
||||||
|
expect(controller.onStateChange).toHaveBeenCalledWith(3);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('onStateChange()', () => {
|
||||||
|
it('should perform a post and then call a function', () => {
|
||||||
|
$httpBackend.expectPOST(`/ticket/api/TicketTrackings`).respond();
|
||||||
|
controller.card = {reload: () => {}};
|
||||||
|
controller.onStateChange(3);
|
||||||
|
$httpBackend.flush();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -7,7 +7,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"ticketFk": {
|
||||||
"id": true,
|
"id": true,
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"forceId": false
|
"forceId": false
|
||||||
|
@ -30,8 +30,13 @@
|
||||||
},
|
},
|
||||||
"worker": {
|
"worker": {
|
||||||
"type": "belongsTo",
|
"type": "belongsTo",
|
||||||
"model": "Worder",
|
"model": "Worker",
|
||||||
"foreignKey": "workerFk"
|
"foreignKey": "workerFk"
|
||||||
|
},
|
||||||
|
"alertLevel": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"model": "State",
|
||||||
|
"foreignKey": "alertLevel"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,14 +3,20 @@ module.exports = function(Self) {
|
||||||
|
|
||||||
Self.validatesPresenceOf('stateFk', {message: 'State cannot be blank'});
|
Self.validatesPresenceOf('stateFk', {message: 'State cannot be blank'});
|
||||||
|
|
||||||
Self.observe('before save', function(ctx, next) {
|
Self.observe('before save', async function(ctx) {
|
||||||
|
let models = Self.app.models;
|
||||||
let token = ctx.options.accessToken;
|
let token = ctx.options.accessToken;
|
||||||
let userId = token && token.userId;
|
let userId = token && token.userId;
|
||||||
|
|
||||||
Self.app.models.Worker.findOne({where: {userFk: userId}}, (err, user) => {
|
let isEmployee = await models.Account.hasRole(userId, 'employee');
|
||||||
if (err) return next(err);
|
let isProduction = await models.Account.hasRole(userId, 'production');
|
||||||
ctx.instance.workerFk = user.id;
|
let isAlertLevel0 = await models.State.isAlertLevel0(ctx.instance.stateFk);
|
||||||
next();
|
let ticketAlertLevel = await models.TicketState.findOne({where: {id: ctx.instance.ticketFk}, fields: ["alertLevel"]});
|
||||||
});
|
|
||||||
|
if ((!isProduction && !isAlertLevel0) || !isEmployee || (isEmployee && ticketAlertLevel != 0 && !isProduction))
|
||||||
|
throw new Error("You don't have enough privileges to do that");
|
||||||
|
|
||||||
|
let user = await models.Worker.findOne({where: {userFk: userId}});
|
||||||
|
ctx.instance.workerFk = user.id;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue