Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into dev
This commit is contained in:
commit
82c569cfc0
|
@ -580,6 +580,10 @@ export default {
|
|||
searchButton: 'vn-order-index vn-searchbar vn-icon[icon="search"]',
|
||||
createOrderButton: `${components.vnFloatButton}`,
|
||||
},
|
||||
orderDescriptor: {
|
||||
returnToModuleIndexButton: 'vn-order-descriptor a[ui-sref="order.index"]',
|
||||
acceptNavigationButton: 'vn-order-basic-data vn-confirm button[response=ACCEPT]'
|
||||
},
|
||||
createOrderView: {
|
||||
clientAutocomplete: 'vn-autocomplete[label="Client"]',
|
||||
addressAutocomplete: 'vn-autocomplete[label="Address"]',
|
||||
|
|
|
@ -28,8 +28,8 @@ describe('Order edit basic data path', () => {
|
|||
it('should now navigate to order index', async() => {
|
||||
const orderId = 16;
|
||||
const url = await nightmare
|
||||
.waitToClick(selectors.globalItems.returnToModuleIndexButton)
|
||||
.waitToClick(selectors.globalItems.acceptButton)
|
||||
.waitToClick(selectors.orderDescriptor.returnToModuleIndexButton)
|
||||
.waitToClick(selectors.orderDescriptor.acceptNavigationButton)
|
||||
.wait(selectors.ordersIndex.createOrderButton)
|
||||
.accessToSearchResult(orderId)
|
||||
.accessToSection('order.card.basicData')
|
||||
|
|
|
@ -52,5 +52,6 @@
|
|||
"Concept cannot be blank": "Concept cannot be blank",
|
||||
"Ticket id cannot be blank": "Ticket id cannot be blank",
|
||||
"Weekday cannot be blank": "Weekday cannot be blank",
|
||||
"This ticket can not be modified": "This ticket can not be modified"
|
||||
"This ticket can not be modified": "This ticket can not be modified",
|
||||
"You can't delete a confirmed order": "You can't delete a confirmed order"
|
||||
}
|
|
@ -100,5 +100,6 @@
|
|||
"You don't have privileges to change the zone": "No tienes permisos para cambiar la zona",
|
||||
"This ticket is already on weekly tickets": "Este ticket ya está en tickets programados",
|
||||
"Ticket id cannot be blank": "El id de ticket no puede quedar en blanco",
|
||||
"Weekday cannot be blank": "El día de la semana no puede quedar en blanco"
|
||||
"Weekday cannot be blank": "El día de la semana no puede quedar en blanco",
|
||||
"You can't delete a confirmed order": "No puedes borrar un pedido confirmado"
|
||||
}
|
|
@ -1,3 +1,5 @@
|
|||
const UserError = require('vn-loopback/util/user-error');
|
||||
|
||||
module.exports = Self => {
|
||||
require('../methods/order/new')(Self);
|
||||
require('../methods/order/getTotalVolume')(Self);
|
||||
|
@ -14,4 +16,11 @@ module.exports = Self => {
|
|||
require('../methods/order/confirm')(Self);
|
||||
require('../methods/order/filter')(Self);
|
||||
require('../methods/order/getItemTypeAvailable')(Self);
|
||||
|
||||
Self.beforeRemote('deleteById', async function(ctx) {
|
||||
const targetOrder = await Self.findById(ctx.args.id);
|
||||
|
||||
if (targetOrder.isConfirmed === 1)
|
||||
throw new UserError(`You can't delete a confirmed order`);
|
||||
});
|
||||
};
|
||||
|
|
|
@ -6,7 +6,15 @@
|
|||
<a translate-attr="{title: 'Preview'}" ui-sref="order.card.summary">
|
||||
<vn-icon icon="desktop_windows"></vn-icon>
|
||||
</a>
|
||||
<div></div>
|
||||
<vn-icon-menu
|
||||
vn-id="more-button"
|
||||
icon="more_vert"
|
||||
show-filter="false"
|
||||
value-field="callback"
|
||||
translate-fields="['name']"
|
||||
data="$ctrl.moreOptions"
|
||||
on-change="value()">
|
||||
</vn-icon-menu>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div class="attributes">
|
||||
|
@ -17,7 +25,7 @@
|
|||
value="{{$ctrl.order.client.name}}">
|
||||
</vn-label-value>
|
||||
<vn-label-value label="State"
|
||||
value="{{$ctrl.order.isConfirmed ? $ctrl.translate.instant('Confirmed') : $ctrl.translate.instant('Not confirmed')}}">
|
||||
value="{{$ctrl.order.isConfirmed ? $ctrl.$translate.instant('Confirmed') : $ctrl.$translate.instant('Not confirmed')}}">
|
||||
</vn-label-value>
|
||||
<vn-label-value label="Sales person"
|
||||
value="{{$ctrl.order.client.salesPerson.user.nickname}}">
|
||||
|
@ -66,3 +74,9 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<vn-confirm
|
||||
vn-id="deleteOrderConfirmation"
|
||||
on-response="$ctrl.deleteOrder(response)"
|
||||
message="You are going to delete this order"
|
||||
question="continue anyway?">
|
||||
</vn-confirm>
|
|
@ -2,8 +2,15 @@ import ngModule from '../module';
|
|||
import './style.scss';
|
||||
|
||||
class Controller {
|
||||
constructor($translate) {
|
||||
this.translate = $translate;
|
||||
constructor($translate, $scope, vnApp, $http, $state) {
|
||||
this.$state = $state;
|
||||
this.$scope = $scope;
|
||||
this.vnApp = vnApp;
|
||||
this.$http = $http;
|
||||
this.$translate = $translate;
|
||||
this.moreOptions = [
|
||||
{name: 'Delete order', callback: () => this.showDeleteOrderDialog()}
|
||||
];
|
||||
}
|
||||
|
||||
set order(value) {
|
||||
|
@ -36,9 +43,23 @@ class Controller {
|
|||
get quicklinks() {
|
||||
return this._quicklinks;
|
||||
}
|
||||
|
||||
deleteOrder(response) {
|
||||
if (response === 'ACCEPT') {
|
||||
const params = {id: this.order.id};
|
||||
this.$http.delete(`/api/Orders/${params.id}`).then(() => {
|
||||
this.$state.go('order.index');
|
||||
this.vnApp.showSuccess(this.$translate.instant('Order deleted'));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
showDeleteOrderDialog() {
|
||||
this.$scope.deleteOrderConfirmation.show();
|
||||
}
|
||||
}
|
||||
|
||||
Controller.$inject = ['$translate'];
|
||||
Controller.$inject = ['$translate', '$scope', 'vnApp', '$http', '$state'];
|
||||
|
||||
ngModule.component('vnOrderDescriptor', {
|
||||
template: require('./index.html'),
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
import './index.js';
|
||||
|
||||
describe('Order Component vnOrderDescriptor', () => {
|
||||
let $httpBackend;
|
||||
let controller;
|
||||
|
||||
beforeEach(() => {
|
||||
ngModule('order');
|
||||
});
|
||||
|
||||
beforeEach(angular.mock.inject(($componentController, _$httpBackend_) => {
|
||||
$httpBackend = _$httpBackend_;
|
||||
controller = $componentController('vnOrderDescriptor');
|
||||
controller.order = {id: 1};
|
||||
}));
|
||||
|
||||
describe('deleteOrder()', () => {
|
||||
it(`should do nothing if the response isn't ACCEPT`, () => {
|
||||
let response = 'WAGH!';
|
||||
|
||||
spyOn(controller.vnApp, 'showSuccess');
|
||||
spyOn(controller.$state, 'go');
|
||||
controller.deleteOrder(response);
|
||||
|
||||
expect(controller.vnApp.showSuccess).not.toHaveBeenCalledWith('Order deleted!');
|
||||
expect(controller.$state.go).not.toHaveBeenCalledWith('order.index');
|
||||
});
|
||||
|
||||
it(`should perform a DELETE query if the response was ACCEPT`, () => {
|
||||
let response = 'ACCEPT';
|
||||
|
||||
spyOn(controller.vnApp, 'showSuccess');
|
||||
spyOn(controller.$state, 'go');
|
||||
$httpBackend.when('DELETE', `/api/Orders/${controller.order.id}`).respond(200);
|
||||
$httpBackend.expect('DELETE', `/api/Orders/${controller.order.id}`);
|
||||
controller.deleteOrder(response);
|
||||
$httpBackend.flush();
|
||||
|
||||
expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Order deleted');
|
||||
expect(controller.$state.go).toHaveBeenCalledWith('order.index');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -6,4 +6,7 @@ Landed: F. entrega
|
|||
Items: Articulos
|
||||
Agency: Agencia
|
||||
Sales person: Comercial
|
||||
Order ticket list: Ticket del pedido
|
||||
Order ticket list: Ticket del pedido
|
||||
Delete order: Borrar pedido
|
||||
You are going to delete this order: El pedido se borrará
|
||||
continue anyway?: ¿Continuar de todos modos?
|
Loading…
Reference in New Issue