4616-ticket.sale_mana #1088

Merged
vicent merged 14 commits from 4616-ticket.sale_mana into dev 2022-11-02 13:48:21 +00:00
5 changed files with 66 additions and 60 deletions

View File

@ -18,9 +18,12 @@ describe('ticket componentUpdate()', () => {
beforeAll(async() => {
const deliveryComponenet = await models.Component.findOne({where: {code: 'delivery'}});
deliveryComponentId = deliveryComponenet.id;
componentOfSaleSeven = `SELECT value FROM vn.saleComponent WHERE saleFk = 7 AND componentFk = ${deliveryComponentId}`;
componentOfSaleEight = `SELECT value FROM vn.saleComponent WHERE saleFk = 8 AND componentFk = ${deliveryComponentId}`;
componentOfSaleSeven = `SELECT value
FROM vn.saleComponent
WHERE saleFk = 7 AND componentFk = ${deliveryComponentId}`;
componentOfSaleEight = `SELECT value
FROM vn.saleComponent
WHERE saleFk = 8 AND componentFk = ${deliveryComponentId}`;
[componentValue] = await models.SaleComponent.rawSql(componentOfSaleSeven);
firstvalueBeforeChange = componentValue.value;

View File

@ -115,14 +115,38 @@ module.exports = Self => {
for (let sale of sales) {
const oldDiscount = sale.discount;
const value = ((-sale.price * newDiscount) / 100);
const newComponent = models.SaleComponent.upsert({
const manaComponent = await models.Component.findOne({
where: {code: 'mana'}
}, myOptions);
const manaClaimComponent = await models.Component.findOne({
where: {code: 'manaClaim'}
}, myOptions);
const [oldComponent] = await models.SaleComponent.find({
where: {
and: [
{saleFk: sale.id},
{componentFk: {inq: [manaComponent.id, manaClaimComponent.id]}}
]
}
}, myOptions);
let deletedComponent;
vicent marked this conversation as resolved Outdated
Outdated
Review

No utilizar variables globales, es más dificil de hacer seguimiento

No utilizar variables globales, es más dificil de hacer seguimiento
if (oldComponent) {
const filter = {
saleFk: sale.id,
value: value,
componentFk: componentId}, myOptions);
componentFk: oldComponent.componentFk
};
deletedComponent = await models.SaleComponent.destroyAll(filter, myOptions);
vicent marked this conversation as resolved Outdated
Outdated
Review

Asignar el resultado de esta función (Promesa) a una variable, y hacer el push al array.

Asignar el resultado de esta función (Promesa) a una variable, y hacer el push al array.
}
const newComponent = await createSaleComponent(sale.id, value, componentId, myOptions);
vicent marked this conversation as resolved Outdated
Outdated
Review

Esta linea está repetida en ambos casos, se puede extraer fuera del condicional

Esta linea está repetida en ambos casos, se puede extraer fuera del condicional
const updatedSale = sale.updateAttribute('discount', newDiscount, myOptions);
promises.push(newComponent, updatedSale);
promises.push(newComponent, updatedSale, deletedComponent);
const change = `${oldDiscount}% ➔ *${newDiscount}%*`;
changesMade += `\r\n-${sale.itemFk}: ${sale.concept} (${sale.quantity}) ${change}`;
@ -165,4 +189,14 @@ module.exports = Self => {
throw e;
}
};
async function createSaleComponent(saleId, value, componentId, myOptions) {
const models = Self.app.models;
return models.SaleComponent.create({
saleFk: saleId,
value: value,
componentFk: componentId
}, myOptions);
}
};

View File

@ -300,7 +300,7 @@
ng-model="$ctrl.manaCode">
</vn-radio>
</vn-vertical>
<div class="simulator">
<div class="simulator" ng-show="$ctrl.edit.sale">
<p class="simulatorTitle" translate>New price</p>
<p>
<strong>{{$ctrl.getNewPrice() | currency: 'EUR': 2}}</strong>
@ -321,32 +321,6 @@
</div>
</vn-popover>
<!-- Multiple discount dialog -->
<vn-dialog vn-id="editDiscountDialog"
on-open="$ctrl.getMana()"
message="Edit discount">
<tpl-body>
<vn-spinner class="vn-pa-xs"
ng-if="$ctrl.edit.mana == null"
enable="true">
</vn-spinner>
<div ng-if="$ctrl.edit.mana != null">
<div class="vn-pa-md">
<vn-input-number vn-focus
label="Discount"
ng-model="$ctrl.edit.discount"
on-change="$ctrl.changeMultipleDiscount()"
clear-disabled="true"
suffix="%">
</vn-input-number>
</div>
<section class="header vn-pa-md">
<span>Mana: <strong>{{::$ctrl.edit.mana | currency: 'EUR': 0}}</strong></span>
</section>
</div>
</tpl-body>
</vn-dialog>
<!-- Transfer Popover -->
<vn-popover vn-id="transfer">
<div class="vn-pa-lg transfer">
@ -490,7 +464,7 @@
</vn-item>
<vn-item translate
name="discount"
ng-click="$ctrl.showEditDiscountDialog($event)">
ng-click="$ctrl.showEditDiscountPopover($event, sale)">
Update discount
</vn-item>
<vn-item translate

View File

@ -243,24 +243,19 @@ class Controller extends Section {
showEditDiscountPopover(event, sale) {
if (this.isLocked) return;
if (sale) {
this.edit = {
discount: sale.discount,
sale: sale
};
this.$.editDiscount.show(event);
}
showEditDiscountDialog(event) {
if (this.isLocked) return;
} else {
this.edit = {
discount: null,
sales: this.selectedValidSales()
};
}
this.$.editDiscountDialog.show(event);
this.$.editDiscount.show(event);
}
changeDiscount() {
@ -278,11 +273,10 @@ class Controller extends Section {
const hasChanges = sales.some(sale => {
return sale.discount != newDiscount;
});
if (newDiscount != null && hasChanges)
this.updateDiscount(sales);
this.$.editDiscountDialog.hide();
this.$.editDiscount.hide();
}
updateDiscount(sales) {
@ -303,7 +297,7 @@ class Controller extends Section {
}
getNewPrice() {
if (this.edit) {
if (this.edit.sale) {
const sale = this.edit.sale;
let newDiscount = sale.discount;
let newPrice = this.edit.price || sale.price;
@ -505,7 +499,8 @@ class Controller extends Section {
}
save() {
this.changeDiscount();
if (this.edit.sale) this.changeDiscount();
if (this.edit.sales) this.changeMultipleDiscount();
}
cancel() {

View File

@ -393,7 +393,7 @@ describe('Ticket', () => {
secondSelectedSale.checked = true;
const expectedSales = [firstSelectedSale, secondSelectedSale];
controller.$.editDiscountDialog = {hide: jest.fn()};
controller.$.editDiscount = {hide: jest.fn()};
controller.edit = {
discount: 10,
sales: expectedSales
@ -402,7 +402,7 @@ describe('Ticket', () => {
controller.changeMultipleDiscount();
expect(controller.updateDiscount).toHaveBeenCalledWith(expectedSales);
expect(controller.$.editDiscountDialog.hide).toHaveBeenCalledWith();
expect(controller.$.editDiscount.hide).toHaveBeenCalledWith();
});
it('should not call to the updateDiscount() method and then to the editDiscountDialog hide() method', () => {
@ -417,7 +417,7 @@ describe('Ticket', () => {
secondSelectedSale.discount = 10;
const expectedSales = [firstSelectedSale, secondSelectedSale];
controller.$.editDiscountDialog = {hide: jest.fn()};
controller.$.editDiscount = {hide: jest.fn()};
controller.edit = {
discount: 10,
sales: expectedSales
@ -426,7 +426,7 @@ describe('Ticket', () => {
controller.changeMultipleDiscount();
expect(controller.updateDiscount).not.toHaveBeenCalledWith(expectedSales);
expect(controller.$.editDiscountDialog.hide).toHaveBeenCalledWith();
expect(controller.$.editDiscount.hide).toHaveBeenCalledWith();
});
});