Merge branch 'test' into 6199-saleUploadQuantity
gitea/salix/pipeline/head This commit looks good
Details
gitea/salix/pipeline/head This commit looks good
Details
This commit is contained in:
commit
a0e32cf455
|
@ -17,6 +17,7 @@ Search claim by id or client name: Buscar reclamaciones por identificador o nomb
|
||||||
Claim deleted!: Reclamación eliminada!
|
Claim deleted!: Reclamación eliminada!
|
||||||
claim: reclamación
|
claim: reclamación
|
||||||
Photos: Fotos
|
Photos: Fotos
|
||||||
|
Development: Trazabilidad
|
||||||
Go to the claim: Ir a la reclamación
|
Go to the claim: Ir a la reclamación
|
||||||
Sale tracking: Líneas preparadas
|
Sale tracking: Líneas preparadas
|
||||||
Ticket tracking: Estados del ticket
|
Ticket tracking: Estados del ticket
|
||||||
|
|
|
@ -55,7 +55,7 @@ module.exports = Self => {
|
||||||
|
|
||||||
const refoundZoneId = refundAgencyMode.zones()[0].id;
|
const refoundZoneId = refundAgencyMode.zones()[0].id;
|
||||||
|
|
||||||
if (salesIds) {
|
if (salesIds.length) {
|
||||||
const salesFilter = {
|
const salesFilter = {
|
||||||
where: {id: {inq: salesIds}},
|
where: {id: {inq: salesIds}},
|
||||||
include: {
|
include: {
|
||||||
|
@ -91,16 +91,14 @@ module.exports = Self => {
|
||||||
await models.SaleComponent.create(components, myOptions);
|
await models.SaleComponent.create(components, myOptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!refundTicket) {
|
if (!refundTicket) {
|
||||||
const servicesFilter = {
|
const servicesFilter = {
|
||||||
where: {id: {inq: servicesIds}}
|
where: {id: {inq: servicesIds}}
|
||||||
};
|
};
|
||||||
const services = await models.TicketService.find(servicesFilter, myOptions);
|
const services = await models.TicketService.find(servicesFilter, myOptions);
|
||||||
const ticketsIds = [...new Set(services.map(service => service.ticketFk))];
|
const firstTicketId = services[0].ticketFk;
|
||||||
|
|
||||||
const now = Date.vnNew();
|
const now = Date.vnNew();
|
||||||
const [firstTicketId] = ticketsIds;
|
|
||||||
|
|
||||||
// eslint-disable-next-line max-len
|
// eslint-disable-next-line max-len
|
||||||
refundTicket = await createTicketRefund(firstTicketId, now, refundAgencyMode, refoundZoneId, withWarehouse, myOptions);
|
refundTicket = await createTicketRefund(firstTicketId, now, refundAgencyMode, refoundZoneId, withWarehouse, myOptions);
|
||||||
|
@ -114,8 +112,8 @@ module.exports = Self => {
|
||||||
for (const service of services) {
|
for (const service of services) {
|
||||||
await models.TicketService.create({
|
await models.TicketService.create({
|
||||||
description: service.description,
|
description: service.description,
|
||||||
quantity: service.quantity,
|
quantity: - service.quantity,
|
||||||
price: - service.price,
|
price: service.price,
|
||||||
taxClassFk: service.taxClassFk,
|
taxClassFk: service.taxClassFk,
|
||||||
ticketFk: refundTicket.id,
|
ticketFk: refundTicket.id,
|
||||||
ticketServiceTypeFk: service.ticketServiceTypeFk,
|
ticketServiceTypeFk: service.ticketServiceTypeFk,
|
||||||
|
|
|
@ -16,8 +16,8 @@ class Controller extends SearchPanel {
|
||||||
this.$http.get('ItemPackingTypes', {filter}).then(res => {
|
this.$http.get('ItemPackingTypes', {filter}).then(res => {
|
||||||
for (let ipt of res.data) {
|
for (let ipt of res.data) {
|
||||||
itemPackingTypes.push({
|
itemPackingTypes.push({
|
||||||
code: ipt.code,
|
description: this.$t(ipt.description),
|
||||||
description: this.$t(ipt.description)
|
code: ipt.code
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
this.itemPackingTypes = itemPackingTypes;
|
this.itemPackingTypes = itemPackingTypes;
|
||||||
|
|
|
@ -163,26 +163,16 @@ export default class Controller extends Section {
|
||||||
return {'futureId': value};
|
return {'futureId': value};
|
||||||
case 'liters':
|
case 'liters':
|
||||||
return {'liters': value};
|
return {'liters': value};
|
||||||
case 'lines':
|
|
||||||
return {'lines': value};
|
|
||||||
case 'futureLiters':
|
case 'futureLiters':
|
||||||
return {'futureLiters': value};
|
return {'futureLiters': value};
|
||||||
|
case 'lines':
|
||||||
|
return {'lines': value};
|
||||||
case 'futureLines':
|
case 'futureLines':
|
||||||
return {'futureLines': value};
|
return {'futureLines': value};
|
||||||
case 'ipt':
|
case 'ipt':
|
||||||
return {or:
|
return {'ipt': {like: `%${value}%`}};
|
||||||
[
|
|
||||||
{'ipt': {like: `%${value}%`}},
|
|
||||||
{'ipt': null}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
case 'futureIpt':
|
case 'futureIpt':
|
||||||
return {or:
|
return {'futureIpt': {like: `%${value}%`}};
|
||||||
[
|
|
||||||
{'futureIpt': {like: `%${value}%`}},
|
|
||||||
{'futureIpt': null}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
case 'totalWithVat':
|
case 'totalWithVat':
|
||||||
return {'totalWithVat': value};
|
return {'totalWithVat': value};
|
||||||
case 'futureTotalWithVat':
|
case 'futureTotalWithVat':
|
||||||
|
|
|
@ -18,3 +18,4 @@ Multiple invoice: Factura múltiple
|
||||||
Make invoice...: Crear factura...
|
Make invoice...: Crear factura...
|
||||||
Invoice selected tickets: Facturar tickets seleccionados
|
Invoice selected tickets: Facturar tickets seleccionados
|
||||||
Are you sure to invoice tickets: ¿Seguro que quieres facturar {{ticketsAmount}} tickets?
|
Are you sure to invoice tickets: ¿Seguro que quieres facturar {{ticketsAmount}} tickets?
|
||||||
|
Rounding: Redondeo
|
||||||
|
|
|
@ -318,7 +318,7 @@
|
||||||
clear-disabled="true"
|
clear-disabled="true"
|
||||||
suffix="%">
|
suffix="%">
|
||||||
</vn-input-number>
|
</vn-input-number>
|
||||||
<vn-vertical ng-if="$ctrl.usesMana && $ctrl.currentWorkerMana != 0">
|
<vn-vertical ng-if="$ctrl.usesMana">
|
||||||
<vn-radio
|
<vn-radio
|
||||||
label="Promotion mana"
|
label="Promotion mana"
|
||||||
val="mana"
|
val="mana"
|
||||||
|
|
|
@ -97,14 +97,6 @@ class Controller extends Section {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
this.getUsesMana();
|
this.getUsesMana();
|
||||||
this.getCurrentWorkerMana();
|
|
||||||
}
|
|
||||||
|
|
||||||
getCurrentWorkerMana() {
|
|
||||||
this.$http.get(`WorkerManas/getCurrentWorkerMana`)
|
|
||||||
.then(res => {
|
|
||||||
this.currentWorkerMana = res.data;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getUsesMana() {
|
getUsesMana() {
|
||||||
|
|
|
@ -120,12 +120,10 @@ describe('Ticket', () => {
|
||||||
const expectedAmount = 250;
|
const expectedAmount = 250;
|
||||||
$httpBackend.expect('GET', 'Tickets/1/getSalesPersonMana').respond(200, expectedAmount);
|
$httpBackend.expect('GET', 'Tickets/1/getSalesPersonMana').respond(200, expectedAmount);
|
||||||
$httpBackend.expect('GET', 'Sales/usesMana').respond(200);
|
$httpBackend.expect('GET', 'Sales/usesMana').respond(200);
|
||||||
$httpBackend.expect('GET', 'WorkerManas/getCurrentWorkerMana').respond(200, expectedAmount);
|
|
||||||
controller.getMana();
|
controller.getMana();
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
|
|
||||||
expect(controller.edit.mana).toEqual(expectedAmount);
|
expect(controller.edit.mana).toEqual(expectedAmount);
|
||||||
expect(controller.currentWorkerMana).toEqual(expectedAmount);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
disabled="watcher.dataChanged() || !$ctrl.checkeds.length"
|
disabled="watcher.dataChanged() || !$ctrl.checkeds.length"
|
||||||
label="Pay"
|
label="Pay"
|
||||||
ng-click="$ctrl.createRefund()"
|
ng-click="$ctrl.createRefund()"
|
||||||
vn-acl="invoicing, claimManager, salesAssistant"
|
vn-acl="invoicing, claimManager, salesAssistant, buyer"
|
||||||
vn-acl-action="remove">
|
vn-acl-action="remove">
|
||||||
</vn-button>
|
</vn-button>
|
||||||
</vn-button-bar>
|
</vn-button-bar>
|
||||||
|
@ -37,7 +37,9 @@
|
||||||
<vn-check
|
<vn-check
|
||||||
tabindex="1"
|
tabindex="1"
|
||||||
on-change="$ctrl.addChecked(service.id)"
|
on-change="$ctrl.addChecked(service.id)"
|
||||||
disabled="!service.id">
|
disabled="!service.id"
|
||||||
|
vn-acl="invoicing, claimManager, salesAssistant, buyer"
|
||||||
|
vn-acl-action="remove">
|
||||||
</vn-check>
|
</vn-check>
|
||||||
<vn-autocomplete vn-two vn-focus
|
<vn-autocomplete vn-two vn-focus
|
||||||
data="ticketServiceTypes"
|
data="ticketServiceTypes"
|
||||||
|
@ -68,7 +70,8 @@
|
||||||
vn-one
|
vn-one
|
||||||
label="Price"
|
label="Price"
|
||||||
ng-model="service.price"
|
ng-model="service.price"
|
||||||
step="0.01">
|
step="0.01"
|
||||||
|
min="0">
|
||||||
</vn-input-number>
|
</vn-input-number>
|
||||||
<vn-auto>
|
<vn-auto>
|
||||||
<vn-icon-button
|
<vn-icon-button
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
module.exports = Self => {
|
|
||||||
Self.remoteMethodCtx('getCurrentWorkerMana', {
|
|
||||||
description: 'Returns the mana of the logged worker',
|
|
||||||
accessType: 'READ',
|
|
||||||
accepts: [],
|
|
||||||
returns: {
|
|
||||||
type: 'number',
|
|
||||||
root: true
|
|
||||||
},
|
|
||||||
http: {
|
|
||||||
path: `/getCurrentWorkerMana`,
|
|
||||||
verb: 'GET'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Self.getCurrentWorkerMana = async ctx => {
|
|
||||||
let userId = ctx.req.accessToken.userId;
|
|
||||||
|
|
||||||
let workerMana = await Self.app.models.WorkerMana.findOne({
|
|
||||||
where: {workerFk: userId},
|
|
||||||
fields: 'amount'
|
|
||||||
});
|
|
||||||
|
|
||||||
return workerMana ? workerMana.amount : 0;
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
const app = require('vn-loopback/server/server');
|
|
||||||
|
|
||||||
describe('workerMana getCurrentWorkerMana()', () => {
|
|
||||||
it('should get the mana of the logged worker', async() => {
|
|
||||||
let mana = await app.models.WorkerMana.getCurrentWorkerMana({req: {accessToken: {userId: 18}}});
|
|
||||||
|
|
||||||
expect(mana).toEqual(124);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return 0 if the user doesnt uses mana', async() => {
|
|
||||||
let mana = await app.models.WorkerMana.getCurrentWorkerMana({req: {accessToken: {userId: 9}}});
|
|
||||||
|
|
||||||
expect(mana).toEqual(0);
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -66,46 +66,36 @@ module.exports = Self => {
|
||||||
stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate');
|
stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.timeControlCalculate');
|
||||||
stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.timeBusinessCalculate');
|
stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.timeBusinessCalculate');
|
||||||
|
|
||||||
|
const destroyAllWhere = {
|
||||||
|
timed: {between: [started, ended]},
|
||||||
|
isSendMail: true
|
||||||
|
};
|
||||||
|
const updateAllWhere = {
|
||||||
|
year: args.year,
|
||||||
|
week: args.week
|
||||||
|
};
|
||||||
|
|
||||||
|
const tmpUserSQL = `
|
||||||
|
CREATE OR REPLACE TEMPORARY TABLE tmp.user
|
||||||
|
SELECT id as userFk
|
||||||
|
FROM vn.worker`;
|
||||||
|
let tmpUser = new ParameterizedSQL(tmpUserSQL);
|
||||||
|
|
||||||
if (args.workerId) {
|
if (args.workerId) {
|
||||||
await models.WorkerTimeControl.destroyAll({
|
destroyAllWhere.userFk = args.workerId;
|
||||||
userFk: args.workerId,
|
updateAllWhere.workerFk = args.workerId;
|
||||||
timed: {between: [started, ended]},
|
tmpUser = new ParameterizedSQL(tmpUserSQL + ' WHERE id = ?', [args.workerId]);
|
||||||
isSendMail: true
|
|
||||||
}, myOptions);
|
|
||||||
|
|
||||||
const where = {
|
|
||||||
workerFk: args.workerId,
|
|
||||||
year: args.year,
|
|
||||||
week: args.week
|
|
||||||
};
|
|
||||||
await models.WorkerTimeControlMail.updateAll(where, {
|
|
||||||
updated: Date.vnNew(), state: 'SENDED'
|
|
||||||
}, myOptions);
|
|
||||||
|
|
||||||
stmt = new ParameterizedSQL('DROP TEMPORARY TABLE IF EXISTS tmp.`user`');
|
|
||||||
stmts.push(stmt);
|
|
||||||
stmt = new ParameterizedSQL('CREATE TEMPORARY TABLE tmp.`user` SELECT id userFk FROM account.user WHERE id = ?', [args.workerId]);
|
|
||||||
stmts.push(stmt);
|
|
||||||
} else {
|
|
||||||
await models.WorkerTimeControl.destroyAll({
|
|
||||||
timed: {between: [started, ended]},
|
|
||||||
isSendMail: true
|
|
||||||
}, myOptions);
|
|
||||||
|
|
||||||
const where = {
|
|
||||||
year: args.year,
|
|
||||||
week: args.week
|
|
||||||
};
|
|
||||||
await models.WorkerTimeControlMail.updateAll(where, {
|
|
||||||
updated: Date.vnNew(), state: 'SENDED'
|
|
||||||
}, myOptions);
|
|
||||||
|
|
||||||
stmt = new ParameterizedSQL('DROP TEMPORARY TABLE IF EXISTS tmp.`user`');
|
|
||||||
stmts.push(stmt);
|
|
||||||
stmt = new ParameterizedSQL('CREATE TEMPORARY TABLE IF NOT EXISTS tmp.`user` SELECT id as userFk FROM vn.worker w JOIN account.`user` u ON u.id = w.id WHERE id IS NOT NULL');
|
|
||||||
stmts.push(stmt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await models.WorkerTimeControl.destroyAll(destroyAllWhere, myOptions);
|
||||||
|
|
||||||
|
await models.WorkerTimeControlMail.updateAll(updateAllWhere, {
|
||||||
|
updated: Date.vnNew(),
|
||||||
|
state: 'SENDED'
|
||||||
|
}, myOptions);
|
||||||
|
|
||||||
|
stmts.push(tmpUser);
|
||||||
|
|
||||||
stmt = new ParameterizedSQL(
|
stmt = new ParameterizedSQL(
|
||||||
`CALL vn.timeControl_calculate(?, ?)
|
`CALL vn.timeControl_calculate(?, ?)
|
||||||
`, [started, ended]);
|
`, [started, ended]);
|
||||||
|
|
|
@ -46,7 +46,7 @@ module.exports = Self => {
|
||||||
SELECT DISTINCT w.id, w.code, u.name, u.nickname, u.active, b.departmentFk
|
SELECT DISTINCT w.id, w.code, u.name, u.nickname, u.active, b.departmentFk
|
||||||
FROM worker w
|
FROM worker w
|
||||||
JOIN account.user u ON u.id = w.id
|
JOIN account.user u ON u.id = w.id
|
||||||
JOIN business b ON b.workerFk = w.id
|
LEFT JOIN business b ON b.workerFk = w.id
|
||||||
) w`);
|
) w`);
|
||||||
|
|
||||||
stmt.merge(conn.makeSuffix(filter));
|
stmt.merge(conn.makeSuffix(filter));
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
module.exports = Self => {
|
|
||||||
require('../methods/worker-mana/getCurrentWorkerMana')(Self);
|
|
||||||
};
|
|
|
@ -117,7 +117,7 @@
|
||||||
<td class="number">{{service.price | currency('EUR', $i18n.locale)}}</td>
|
<td class="number">{{service.price | currency('EUR', $i18n.locale)}}</td>
|
||||||
<td class="centered" width="5%"></td>
|
<td class="centered" width="5%"></td>
|
||||||
<td class="centered">{{service.taxDescription}}</td>
|
<td class="centered">{{service.taxDescription}}</td>
|
||||||
<td class="number">{{service.price | currency('EUR', $i18n.locale)}}</td>
|
<td class="number">{{service.total | currency('EUR', $i18n.locale)}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
|
|
|
@ -2,7 +2,8 @@ SELECT
|
||||||
tc.code taxDescription,
|
tc.code taxDescription,
|
||||||
ts.description,
|
ts.description,
|
||||||
ts.quantity,
|
ts.quantity,
|
||||||
ts.price
|
ts.price,
|
||||||
|
ts.quantity * ts.price total
|
||||||
FROM ticketService ts
|
FROM ticketService ts
|
||||||
JOIN taxClass tc ON tc.id = ts.taxClassFk
|
JOIN taxClass tc ON tc.id = ts.taxClassFk
|
||||||
WHERE ts.ticketFk = ?
|
WHERE ts.ticketFk = ?
|
Loading…
Reference in New Issue