Tarea #352 ticket.lines Modificar descuento
This commit is contained in:
parent
54ee27dcef
commit
accd66f63a
|
@ -0,0 +1,24 @@
|
||||||
|
<vn-horizontal pad-medium class="header">
|
||||||
|
<h5>MANÁ: {{$ctrl.mana | currency:' €':0}}</h5>
|
||||||
|
</vn-horizontal>
|
||||||
|
<div pad-medium>
|
||||||
|
<vn-textfield
|
||||||
|
label="Discount"
|
||||||
|
model="$ctrl.newDiscount"
|
||||||
|
type="number"
|
||||||
|
on-change="$ctrl.updateDiscount()">
|
||||||
|
<t-right-icons>
|
||||||
|
<span class="filter">%</span>
|
||||||
|
</t-right-icons>
|
||||||
|
</vn-textfield>
|
||||||
|
<div class="simulator">
|
||||||
|
<p class="simulatorTitle" translate>New price</p>
|
||||||
|
<p>{{($ctrl.edit[0].quantity * $ctrl.edit[0].price)
|
||||||
|
- (($ctrl.newDiscount * ($ctrl.edit[0].quantity * $ctrl.edit[0].price))/100)
|
||||||
|
| currency:' €':2}}</p>
|
||||||
|
<vn-button
|
||||||
|
label="Save"
|
||||||
|
ng-click="$ctrl.updateDiscount()">
|
||||||
|
</vn-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,71 @@
|
||||||
|
import ngModule from '../module';
|
||||||
|
|
||||||
|
class Controller {
|
||||||
|
constructor($scope, $http, $state, vnApp, $translate) {
|
||||||
|
this.$scope = $scope;
|
||||||
|
this.$http = $http;
|
||||||
|
this.$state = $state;
|
||||||
|
this.vnApp = vnApp;
|
||||||
|
this.translate = $translate;
|
||||||
|
}
|
||||||
|
|
||||||
|
set edit(value) {
|
||||||
|
this._edit = value;
|
||||||
|
this.clear();
|
||||||
|
this.setNewDiscount();
|
||||||
|
}
|
||||||
|
|
||||||
|
get edit() {
|
||||||
|
return this._edit;
|
||||||
|
}
|
||||||
|
|
||||||
|
set bulk(value) {
|
||||||
|
this._bulk = value;
|
||||||
|
this.setNewDiscount();
|
||||||
|
}
|
||||||
|
|
||||||
|
get bulk() {
|
||||||
|
return this._bulk;
|
||||||
|
}
|
||||||
|
|
||||||
|
setNewDiscount() {
|
||||||
|
if (!this.newDiscount && this.edit[0])
|
||||||
|
this.newDiscount = this.edit[0].discount;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateDiscount() {
|
||||||
|
let editLines = [];
|
||||||
|
let modified = false;
|
||||||
|
for (let i = 0; i < this.edit.length; i++) {
|
||||||
|
if (this.newDiscount != this.edit[0].discount || this.bulk) {
|
||||||
|
editLines.push({id: this.edit[i].id, discount: this.newDiscount, ticketFk: this.$state.params.id});
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (modified) {
|
||||||
|
this.$http.post(`/ticket/api/Sales/updateDiscount`, {editLines}).then(() => {
|
||||||
|
this.hide();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.vnApp.showError(this.translate.instant('There is no changes to save'));
|
||||||
|
}
|
||||||
|
this.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
clear() {
|
||||||
|
this.newDiscount = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.$inject = ['$scope', '$http', '$state', 'vnApp', '$translate'];
|
||||||
|
|
||||||
|
ngModule.component('vnTicketSaleEditDiscount', {
|
||||||
|
template: require('./editDiscount.html'),
|
||||||
|
controller: Controller,
|
||||||
|
bindings: {
|
||||||
|
edit: '<?',
|
||||||
|
mana: '<?',
|
||||||
|
bulk: '<?',
|
||||||
|
hide: '&'
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,89 @@
|
||||||
|
import './editDiscount.js';
|
||||||
|
|
||||||
|
describe('Ticket', () => {
|
||||||
|
describe('Component vnTicketSaleEditDiscount', () => {
|
||||||
|
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_;
|
||||||
|
$httpBackend.when('GET', /\/locale\/\w+\/[a-z]{2}\.json/).respond({});
|
||||||
|
$scope = $rootScope.$new();
|
||||||
|
$scope.index = {model: {instances: [{id: 1}, {id: 2}]}, accept: () => {
|
||||||
|
return {
|
||||||
|
then: () => {}
|
||||||
|
};
|
||||||
|
}};
|
||||||
|
$state = _$state_;
|
||||||
|
$state.params.id = 1;
|
||||||
|
controller = $componentController('vnTicketSaleEditDiscount', {$scope: $scope, $state: $state});
|
||||||
|
controller._edit = [{id: 3, discount: 15}];
|
||||||
|
controller.hide = () => {};
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('edit() setter', () => {
|
||||||
|
it('should set _edit value and call setNewDiscount', () => {
|
||||||
|
spyOn(controller, 'setNewDiscount');
|
||||||
|
controller.edit = {id: 1};
|
||||||
|
|
||||||
|
expect(controller.edit).toEqual({id: 1});
|
||||||
|
expect(controller.setNewDiscount).toHaveBeenCalledWith();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('bulk() setter', () => {
|
||||||
|
it('should set _bulk value and call setNewDiscount', () => {
|
||||||
|
spyOn(controller, 'setNewDiscount');
|
||||||
|
controller.bulk = true;
|
||||||
|
|
||||||
|
expect(controller.bulk).toEqual(true);
|
||||||
|
expect(controller.setNewDiscount).toHaveBeenCalledWith();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('setNewDiscount()', () => {
|
||||||
|
it('should set NewDiscount to edit[0].discount value if it doesnt exists', () => {
|
||||||
|
controller.edit = [{discount: 1}];
|
||||||
|
controller.setNewDiscount();
|
||||||
|
|
||||||
|
expect(controller.newDiscount).toEqual(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('updateDiscount()', () => {
|
||||||
|
it('should make a query if the discount value has been modified or the bulk value is true', () => {
|
||||||
|
controller.bulk = true;
|
||||||
|
controller.newDiscount = 15;
|
||||||
|
|
||||||
|
$httpBackend.expectPOST(`/ticket/api/Sales/updateDiscount`).respond();
|
||||||
|
controller.updateDiscount();
|
||||||
|
|
||||||
|
$httpBackend.flush();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call vnApp.showError if the discount value hasnt has been modified and the bulk value is false', () => {
|
||||||
|
controller.bulk = false;
|
||||||
|
spyOn(controller.vnApp, "showError");
|
||||||
|
controller.updateDiscount();
|
||||||
|
|
||||||
|
expect(controller.vnApp.showError).toHaveBeenCalledWith('There is no changes to save');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('clear()', () => {
|
||||||
|
it('should set newDiscount to null', () => {
|
||||||
|
controller.clear();
|
||||||
|
|
||||||
|
expect(controller.newDiscount).toEqual(null);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,62 @@
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethod('updateDiscount', {
|
||||||
|
description: 'Changes the discount of a sale',
|
||||||
|
accessType: '',
|
||||||
|
accepts: [{
|
||||||
|
arg: 'params',
|
||||||
|
type: 'object',
|
||||||
|
required: true,
|
||||||
|
description: 'sale ID, newDiscount, price',
|
||||||
|
http: {source: 'body'}
|
||||||
|
}],
|
||||||
|
returns: {
|
||||||
|
type: 'string',
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/updateDiscount`,
|
||||||
|
verb: 'post'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.updateDiscount = async params => {
|
||||||
|
let model = Self.app.models;
|
||||||
|
let thisTicketIsEditable = await model.Ticket.isEditable(params.editLines[0].ticketFk);
|
||||||
|
|
||||||
|
if (!thisTicketIsEditable)
|
||||||
|
throw new Error(`The sales of this ticket can't be modified`);
|
||||||
|
|
||||||
|
let ticket = await model.Ticket.find({
|
||||||
|
where: {
|
||||||
|
id: params.editLines[0].ticketFk
|
||||||
|
},
|
||||||
|
include: [{
|
||||||
|
relation: 'client',
|
||||||
|
scope: {
|
||||||
|
fields: ['salesPersonFk']
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
fields: ['id', 'clientFk']
|
||||||
|
});
|
||||||
|
|
||||||
|
let componentToUse;
|
||||||
|
let usesMana = await model.WorkerMana.findOne({where: {workerFk: ticket[0].client().salesPersonFk}, fields: 'amount'});
|
||||||
|
|
||||||
|
if (usesMana)
|
||||||
|
componentToUse = 37;
|
||||||
|
else
|
||||||
|
componentToUse = 34;
|
||||||
|
|
||||||
|
for (let i = 0; i < params.editLines.length; i++) {
|
||||||
|
let currentLine = await model.Sale.findOne({where: {id: params.editLines[i].id}, fields: 'price'});
|
||||||
|
let value = (-currentLine.price * params.editLines[i].discount / 100);
|
||||||
|
await model.SaleComponent.upsert({saleFk: params.editLines[i].id, value: value, componentFk: componentToUse});
|
||||||
|
|
||||||
|
await model.Sale.update({id: params.editLines[i].id}, {discount: params.editLines[i].discount});
|
||||||
|
}
|
||||||
|
|
||||||
|
query = `
|
||||||
|
call vn.manaSpellersRequery(?)`;
|
||||||
|
await Self.rawSql(query, [ticket[0].client().salesPersonFk]);
|
||||||
|
};
|
||||||
|
};
|
|
@ -4,8 +4,9 @@ module.exports = Self => {
|
||||||
require('../methods/sale/priceDifference')(Self);
|
require('../methods/sale/priceDifference')(Self);
|
||||||
require('../methods/sale/crudSale')(Self);
|
require('../methods/sale/crudSale')(Self);
|
||||||
require('../methods/sale/moveToTicket')(Self);
|
require('../methods/sale/moveToTicket')(Self);
|
||||||
|
require('../methods/sale/moveToNewTicket')(Self);
|
||||||
require('../methods/sale/removes')(Self);
|
require('../methods/sale/removes')(Self);
|
||||||
// require('../methods/sale/updateDiscount')(Self);
|
require('../methods/sale/updateDiscount')(Self);
|
||||||
// require('../methods/sale/updatePrice')(Self);
|
require('../methods/sale/updatePrice')(Self);
|
||||||
// require('../methods/sale/updateQuantity')(Self);
|
require('../methods/sale/updateQuantity')(Self);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue