Merge branch 'dev' into 2430-catalog_multi_tag
gitea/salix/pipeline/head This commit looks good Details

This commit is contained in:
Joan Sanchez 2020-09-16 09:06:08 +00:00
commit b6499370e1
38 changed files with 167 additions and 178 deletions

View File

@ -51,15 +51,9 @@ module.exports = Self => {
scope: { scope: {
fields: ['salesPersonFk', 'name'], fields: ['salesPersonFk', 'name'],
include: { include: {
relation: 'salesPerson', relation: 'salesPersonUser',
scope: { scope: {
fields: ['userFk'], fields: ['id', 'name']
include: {
relation: 'user',
scope: {
fields: ['nickname']
}
}
} }
} }
} }

View File

@ -45,7 +45,7 @@ module.exports = Self => {
if (addressId) if (addressId)
address = await models.Address.findById(addressId, null, options); address = await models.Address.findById(addressId, null, options);
const salesPerson = sale.ticket().client().salesPerson(); const salesPerson = sale.ticket().client().salesPersonUser();
if (salesPerson) { if (salesPerson) {
const nickname = address && address.nickname || destination.description; const nickname = address && address.nickname || destination.description;
const origin = ctx.req.headers.origin; const origin = ctx.req.headers.origin;
@ -113,7 +113,10 @@ module.exports = Self => {
relation: 'client', relation: 'client',
scope: { scope: {
include: { include: {
relation: 'salesPerson' relation: 'salesPersonUser',
scope: {
fields: ['id', 'name']
}
} }
} }
} }

View File

@ -16,7 +16,7 @@
</vn-label-value> </vn-label-value>
<vn-label-value <vn-label-value
label="Salesperson" label="Salesperson"
value="{{$ctrl.summary.claim.client.salesPerson.user.nickname}}"> value="{{$ctrl.summary.claim.client.salesPersonUser.name}}">
</vn-label-value> </vn-label-value>
<vn-label-value <vn-label-value
label="Attended by" label="Attended by"

View File

@ -46,7 +46,6 @@ module.exports = function(Self) {
isEqualizated: data.isEqualizated isEqualizated: data.isEqualizated
}, options); }, options);
let address = await Address.create({ let address = await Address.create({
clientFk: client.id, clientFk: client.id,
nickname: client.name, nickname: client.name,

View File

@ -25,17 +25,6 @@ module.exports = function(Self) {
}, },
include: [ include: [
{ {
relation: 'salesPerson',
scope: {
fields: ['userFk', 'firstName'],
include: {
relation: 'user',
scope: {
fields: ['name', 'nickname']
}
}
}
}, {
relation: 'contactChannel', relation: 'contactChannel',
scope: { scope: {
fields: ['id', 'name'] fields: ['id', 'name']

View File

@ -25,17 +25,17 @@ module.exports = Self => {
let conn = Self.dataSource.connector; let conn = Self.dataSource.connector;
let stmt = new ParameterizedSQL(` let stmt = new ParameterizedSQL(`
SELECT SELECT
t.id, t.id,
t.clientFk, t.clientFk,
t.created, t.created,
t.amount / 100 amount, t.amount / 100 amount,
t.receiptFk IS NOT NULL AS isConfirmed, t.receiptFk IS NOT NULL AS isConfirmed,
tt.message responseMessage, tt.message responseMessage,
te.message errorMessage te.message errorMessage
FROM hedera.tpvTransaction t FROM hedera.tpvTransaction t
JOIN hedera.tpvMerchant m ON m.id = t.merchantFk JOIN hedera.tpvMerchant m ON m.id = t.merchantFk
LEFT JOIN hedera.tpvResponse tt ON tt.id = t.response LEFT JOIN hedera.tpvResponse tt ON tt.id = t.response
LEFT JOIN hedera.tpvError te ON te.code = errorCode`); LEFT JOIN hedera.tpvError te ON te.code = errorCode`);
stmt.merge(conn.makeSuffix(filter, 't')); stmt.merge(conn.makeSuffix(filter, 't'));

View File

@ -30,8 +30,8 @@ module.exports = Self => {
}); });
Self.hasCustomerRole = (id, context, callback) => { Self.hasCustomerRole = (id, context, callback) => {
let query = let query = `
`SELECT COUNT(*) > 0 isCustomer SELECT COUNT(*) > 0 isCustomer
FROM salix.Account A FROM salix.Account A
JOIN salix.Role r ON r.id = A.roleFK JOIN salix.Role r ON r.id = A.roleFK
WHERE r.name = 'customer' WHERE r.name = 'customer'

View File

@ -30,12 +30,12 @@ module.exports = Self => {
}); });
Self.isValidClient = async id => { Self.isValidClient = async id => {
let query = let query = `
`SELECT r.name SELECT r.name
FROM salix.Account a FROM salix.Account a
JOIN vn.client c ON a.id = c.id JOIN vn.client c ON a.id = c.id
JOIN salix.RoleMapping rm ON rm.principalId = a.id JOIN salix.RoleMapping rm ON rm.principalId = a.id
JOIN salix.Role r ON r.id = rm.roleId JOIN salix.Role r ON r.id = rm.roleId
WHERE a.id = ? AND c.isActive AND c.isTaxDataChecked`; WHERE a.id = ? AND c.isActive AND c.isTaxDataChecked`;
let roleNames = await Self.rawSql(query, [id]); let roleNames = await Self.rawSql(query, [id]);

View File

@ -42,15 +42,9 @@ module.exports = Self => {
} }
}, },
{ {
relation: 'salesPerson', relation: 'salesPersonUser',
scope: { scope: {
fields: ['userFk'], fields: ['id', 'name']
include: {
relation: 'user',
scope: {
fields: ['name']
}
}
} }
}, },
{ {

View File

@ -25,7 +25,6 @@ module.exports = Self => {
Self.createWithInsurance = async(data, ctx) => { Self.createWithInsurance = async(data, ctx) => {
const tx = await Self.beginTransaction({}); const tx = await Self.beginTransaction({});
const models = Self.app.models; const models = Self.app.models;
const $t = ctx.req.__; // $translate
try { try {
let options = {transaction: tx}; let options = {transaction: tx};

View File

@ -105,7 +105,7 @@ module.exports = Self => {
}); });
function hasSalesMan(err) { function hasSalesMan(err) {
if (this.payMethod && !this.salesPerson) if (this.payMethod && !this.salesPersonUser)
err(); err();
} }

View File

@ -131,11 +131,6 @@
"model": "PayMethod", "model": "PayMethod",
"foreignKey": "payMethodFk" "foreignKey": "payMethodFk"
}, },
"salesPerson": {
"type": "belongsTo",
"model": "Worker",
"foreignKey": "salesPersonFk"
},
"salesPersonUser": { "salesPersonUser": {
"type": "belongsTo", "type": "belongsTo",
"model": "Account", "model": "Account",

View File

@ -51,7 +51,7 @@ module.exports = function(Self) {
const data = ctx.instance; const data = ctx.instance;
const insurance = await Self.findById(data.id, null, options); const insurance = await Self.findById(data.id, null, options);
const client = insurance.classification().customer(); const client = insurance.classification().customer();
const salesPerson = client.salesPerson(); const salesPerson = client.salesPersonUser();
if (!salesPerson) return; if (!salesPerson) return;

View File

@ -43,15 +43,9 @@
"scope": { "scope": {
"fields": ["name", "salesPersonFk"], "fields": ["name", "salesPersonFk"],
"include": { "include": {
"relation": "salesPerson", "relation": "salesPersonUser",
"scope": { "scope": {
"fields": "userFk", "fields": ["id", "name"]
"include": {
"relation": "user",
"scope": {
"fields": ["name"]
}
}
} }
} }
} }

View File

@ -108,7 +108,7 @@
<vn-td center shrink> <vn-td center shrink>
<a ng-show="balance.hasPdf" <a ng-show="balance.hasPdf"
target="_blank" target="_blank"
href="InvoiceOuts/{{::balance.id}}/download?access_token={{::$ctrl.vnToken.token}}"> href="api/InvoiceOuts/{{::balance.id}}/download?access_token={{::$ctrl.vnToken.token}}">
<vn-icon-button <vn-icon-button
icon="cloud_download" icon="cloud_download"
title="{{'Download PDF' | translate}}"> title="{{'Download PDF' | translate}}">

View File

@ -39,7 +39,7 @@
<span <span
ng-click="workerDescriptor.show($event, $ctrl.client.salesPersonFk)" ng-click="workerDescriptor.show($event, $ctrl.client.salesPersonFk)"
class="link"> class="link">
{{$ctrl.client.salesPerson.user.name}} {{$ctrl.client.salesPersonUser.name}}
</span> </span>
</vn-label-value> </vn-label-value>
</div> </div>

View File

@ -1,5 +1,5 @@
<vn-card class="summary"> <vn-card class="summary">
<h5>{{$ctrl.summary.name}} - {{$ctrl.summary.id}} - {{$ctrl.summary.salesPerson.user.nickname}}</h5> <h5>{{$ctrl.summary.name}} - {{$ctrl.summary.id}} - {{$ctrl.summary.salesPersonUser.name}}</h5>
<vn-horizontal> <vn-horizontal>
<vn-one> <vn-one>
<h4 translate>Basic data</h4> <h4 translate>Basic data</h4>
@ -25,7 +25,7 @@
<span <span
ng-click="workerDescriptor.show($event, $ctrl.summary.salesPersonFk)" ng-click="workerDescriptor.show($event, $ctrl.summary.salesPersonFk)"
class="link"> class="link">
{{$ctrl.summary.salesPerson.user.name}} {{$ctrl.summary.salesPersonUser.name}}
</span> </span>
</vn-label-value> </vn-label-value>
<vn-label-value label="Channel" <vn-label-value label="Channel"

View File

@ -108,6 +108,20 @@ module.exports = Self => {
i.isActive, i.isActive,
i.minPrice, i.minPrice,
i.description, i.description,
i.name,
i.subName,
i.tag5,
i.value5,
i.tag6,
i.value6,
i.tag7,
i.value7,
i.tag8,
i.value8,
i.tag9,
i.value9,
i.tag10,
i.value10,
t.name AS type, t.name AS type,
intr.description AS intrastat, intr.description AS intrastat,
ori.code AS origin, ori.code AS origin,

View File

@ -36,6 +36,7 @@
<vn-th field="quantity">Quantity</vn-th> <vn-th field="quantity">Quantity</vn-th>
<vn-th field="description" style="text-align: center">Description</vn-th> <vn-th field="description" style="text-align: center">Description</vn-th>
<vn-th field="size">Size</vn-th> <vn-th field="size">Size</vn-th>
<vn-th field="tags" style="text-align: center">Tags</vn-th>
<vn-th field="type">Type</vn-th> <vn-th field="type">Type</vn-th>
<vn-th field="intrastat">Intrastat</vn-th> <vn-th field="intrastat">Intrastat</vn-th>
<vn-th field="origin">Origin</vn-th> <vn-th field="origin">Origin</vn-th>
@ -95,6 +96,14 @@
{{::buy.description | dashIfEmpty}} {{::buy.description | dashIfEmpty}}
</vn-td> </vn-td>
<vn-td number>{{::buy.size}}</vn-td> <vn-td number>{{::buy.size}}</vn-td>
<vn-td expand>
<vn-fetched-tags
max-length="6"
item="::buy"
name="::buy.name"
sub-name="::buy.subName">
</vn-fetched-tags>
</vn-td>
<vn-td shrink title="{{::buy.type}}"> <vn-td shrink title="{{::buy.type}}">
{{::buy.type}} {{::buy.type}}
</vn-td> </vn-td>
@ -121,7 +130,12 @@
<vn-td number>{{::buy.freightValue | currency: 'EUR':2}}</vn-td> <vn-td number>{{::buy.freightValue | currency: 'EUR':2}}</vn-td>
<vn-td number>{{::buy.comissionValue | currency: 'EUR':2}}</vn-td> <vn-td number>{{::buy.comissionValue | currency: 'EUR':2}}</vn-td>
<vn-td number>{{::buy.packageValue | currency: 'EUR':2}}</vn-td> <vn-td number>{{::buy.packageValue | currency: 'EUR':2}}</vn-td>
<vn-td shrink>{{::buy.isIgnored}}</vn-td> <vn-td shrink>
<vn-check
disabled="true"
ng-model="::buy.isIgnored">
</vn-check>
</vn-td>
<vn-td number>{{::buy.price2 | currency: 'EUR':2}}</vn-td> <vn-td number>{{::buy.price2 | currency: 'EUR':2}}</vn-td>
<vn-td number>{{::buy.price3 | currency: 'EUR':2}}</vn-td> <vn-td number>{{::buy.price3 | currency: 'EUR':2}}</vn-td>
<vn-td number>{{::buy.minPrice | currency: 'EUR':2}}</vn-td> <vn-td number>{{::buy.minPrice | currency: 'EUR':2}}</vn-td>

View File

@ -94,30 +94,31 @@ module.exports = Self => {
] ]
)); ));
stmt = new ParameterizedSQL(`SELECT stmt = new ParameterizedSQL(`
i.id, SELECT
i.name, i.id,
i.subName, i.name,
i.image, i.subName,
i.tag5, i.image,
i.value5, i.tag5,
i.tag6, i.value5,
i.value6, i.tag6,
i.tag7, i.value6,
i.value7, i.tag7,
i.tag8, i.value7,
i.value8, i.tag8,
tci.price, i.value8,
tci.available, tci.price,
w.lastName AS lastName, tci.available,
w.firstName, w.lastName AS lastName,
tci.priceKg, w.firstName,
ink.hex tci.priceKg,
FROM tmp.ticketCalculateItem tci ink.hex
JOIN vn.item i ON i.id = tci.itemFk FROM tmp.ticketCalculateItem tci
JOIN vn.itemType it ON it.id = i.typeFk JOIN vn.item i ON i.id = tci.itemFk
JOIN vn.ink ON ink.id = i.inkFk JOIN vn.itemType it ON it.id = i.typeFk
JOIN vn.worker w on w.id = it.workerFk`); JOIN vn.ink ON ink.id = i.inkFk
JOIN vn.worker w on w.id = it.workerFk`);
// Apply order by tag // Apply order by tag
if (orderBy.isTag) { if (orderBy.isTag) {

View File

@ -38,16 +38,16 @@ module.exports = Self => {
order.agencyModeFk order.agencyModeFk
]); ]);
stmts.push(stmt); stmts.push(stmt);
stmt = new ParameterizedSQL(`SELECT it.id, it.name, ic.name categoryName stmt = new ParameterizedSQL(`
FROM tmp.availableCalc ac SELECT it.id, it.name, ic.name categoryName
JOIN cache.available a ON a.calc_id = ac.calcFk FROM tmp.availableCalc ac
JOIN item i ON i.id = a.item_id JOIN cache.available a ON a.calc_id = ac.calcFk
JOIN itemType it ON it.id = i.typeFk JOIN item i ON i.id = a.item_id
JOIN itemCategory ic ON ic.id = it.categoryFk JOIN itemType it ON it.id = i.typeFk
WHERE it.categoryFk = ? JOIN itemCategory ic ON ic.id = it.categoryFk
GROUP BY it.id`, [ WHERE it.categoryFk = ?
itemCategoryId GROUP BY it.id`, [itemCategoryId]
]); );
let categoriesIndex = stmts.push(stmt) - 1; let categoriesIndex = stmts.push(stmt) - 1;
let sql = ParameterizedSQL.join(stmts, ';'); let sql = ParameterizedSQL.join(stmts, ';');

View File

@ -28,7 +28,6 @@ module.exports = Self => {
stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.order'); stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.order');
stmt = new ParameterizedSQL(` stmt = new ParameterizedSQL(`
CREATE TEMPORARY TABLE tmp.order CREATE TEMPORARY TABLE tmp.order
(INDEX (orderFk)) (INDEX (orderFk))

View File

@ -31,14 +31,17 @@ module.exports = Self => {
async function getOrderData(Self, orderId) { async function getOrderData(Self, orderId) {
let filter = { let filter = {
include: [ include: [
{relation: 'agencyMode', scope: {fields: ['name']}}, {
relation: 'agencyMode', scope: {fields: ['name']}},
{ {
relation: 'client', relation: 'client',
scope: { scope: {
fields: ['salesPersonFk', 'name'], fields: ['salesPersonFk', 'name'],
include: { include: {
relation: 'salesPerson', relation: 'salesPersonUser',
fields: ['firstName', 'name'] scope: {
fields: ['id', 'name']
}
} }
} }
}, },

View File

@ -31,15 +31,9 @@ class Controller extends ModuleCard {
'isTaxDataChecked' 'isTaxDataChecked'
], ],
include: { include: {
relation: 'salesPerson', relation: 'salesPersonUser',
scope: { scope: {
fields: ['userFk'], fields: ['id', 'name']
include: {
relation: 'user',
scope: {
fields: ['name']
}
}
} }
} }
} }

View File

@ -19,7 +19,7 @@
<span <span
ng-click="workerDescriptor.show($event, $ctrl.order.client.salesPersonFk)" ng-click="workerDescriptor.show($event, $ctrl.order.client.salesPersonFk)"
class="link"> class="link">
{{$ctrl.order.client.salesPerson.user.name}} {{$ctrl.order.client.salesPersonUser.name}}
</span> </span>
</vn-label-value> </vn-label-value>
<vn-label-value <vn-label-value

View File

@ -31,7 +31,10 @@ module.exports = Self => {
relation: 'client', relation: 'client',
scope: { scope: {
include: { include: {
relation: 'salesPerson' relation: 'salesPersonUser',
scope: {
fields: ['id', 'name']
}
} }
} }
}] }]
@ -69,7 +72,7 @@ module.exports = Self => {
await ticketTracking.destroy(); await ticketTracking.destroy();
const salesPerson = ticket.client().salesPerson(); const salesPerson = ticket.client().salesPersonUser();
if (salesPerson) { if (salesPerson) {
const origin = ctx.req.headers.origin; const origin = ctx.req.headers.origin;
const message = $t('This ticket is not an stowaway anymore', { const message = $t('This ticket is not an stowaway anymore', {

View File

@ -197,6 +197,7 @@ module.exports = Self => {
t.routeFk, t.routeFk,
t.warehouseFk, t.warehouseFk,
t.clientFk, t.clientFk,
io.id AS invoiceOutId,
a.provinceFk, a.provinceFk,
p.name AS province, p.name AS province,
w.name AS warehouse, w.name AS warehouse,
@ -216,6 +217,7 @@ module.exports = Self => {
z.id AS zoneFk, z.id AS zoneFk,
CAST(z.hour AS CHAR) AS hour CAST(z.hour AS CHAR) AS hour
FROM ticket t FROM ticket t
LEFT JOIN invoiceOut io ON t.refFk = io.ref
LEFT JOIN zone z ON z.id = t.zoneFk LEFT JOIN zone z ON z.id = t.zoneFk
LEFT JOIN address a ON a.id = t.addressFk LEFT JOIN address a ON a.id = t.addressFk
LEFT JOIN province p ON p.id = a.provinceFk LEFT JOIN province p ON p.id = a.provinceFk
@ -258,12 +260,12 @@ module.exports = Self => {
stmt = new ParameterizedSQL(` stmt = new ParameterizedSQL(`
SELECT SELECT
f.*, f.*,
tt.total, tt.total,
tp.* tp.*
FROM tmp.filter f FROM tmp.filter f
LEFT JOIN tmp.ticketProblems tp ON tp.ticketFk = f.id LEFT JOIN tmp.ticketProblems tp ON tp.ticketFk = f.id
LEFT JOIN tmp.ticketTotal tt ON tt.ticketFk = f.id`); LEFT JOIN tmp.ticketTotal tt ON tt.ticketFk = f.id`);
if (args.problems != undefined && (!args.from && !args.to)) if (args.problems != undefined && (!args.from && !args.to))
throw new UserError('Choose a date range or days forward'); throw new UserError('Choose a date range or days forward');

View File

@ -89,12 +89,9 @@ module.exports = Self => {
scope: { scope: {
fields: ['id', 'salesPersonFk'], fields: ['id', 'salesPersonFk'],
include: { include: {
relation: 'salesPerson', relation: 'salesPersonUser',
scope: { scope: {
fields: ['id', 'userFk'], fields: ['id', 'name']
include: {
relation: 'user'
}
} }
} }
} }
@ -121,15 +118,14 @@ module.exports = Self => {
} }
// Send notification to salesPerson // Send notification to salesPerson
const salesPerson = ticket.client().salesPerson(); const salesPersonUser = ticket.client().salesPersonUser();
if (salesPerson) { if (salesPersonUser) {
const salesPersonUser = salesPerson.user().name;
const origin = ctx.req.headers.origin; const origin = ctx.req.headers.origin;
const message = $t(`Has deleted the ticket id`, { const message = $t(`Has deleted the ticket id`, {
id: id, id: id,
url: `${origin}/#!/ticket/${id}/summary` url: `${origin}/#!/ticket/${id}/summary`
}); });
await models.Chat.send(ctx, `@${salesPersonUser}`, message); await models.Chat.send(ctx, `@${salesPersonUser.name}`, message);
} }
return ticket.updateAttribute('isDeleted', true); return ticket.updateAttribute('isDeleted', true);

View File

@ -67,14 +67,12 @@ describe('ticket filter()', () => {
const ctx = {req: {accessToken: {userId: 9}}, args: {pending: true}}; const ctx = {req: {accessToken: {userId: 9}}, args: {pending: true}};
const filter = {}; const filter = {};
const result = await app.models.Ticket.filter(ctx, filter); const result = await app.models.Ticket.filter(ctx, filter);
const firstRow = result[0];
const secondRow = result[1]; const length = result.length;
const thirdRow = result[2]; const anyResult = result[Math.floor(Math.random() * Math.floor(length))];
expect(result.length).toEqual(7); expect(result.length).toEqual(7);
expect(firstRow.state).toEqual('Libre'); expect(anyResult.state).toMatch(/(Libre|Arreglar)/);
expect(secondRow.state).toEqual('Libre');
expect(thirdRow.state).toEqual('Libre');
}); });
it('should return the tickets that are not pending', async() => { it('should return the tickets that are not pending', async() => {

View File

@ -57,15 +57,9 @@ module.exports = Self => {
scope: { scope: {
fields: ['salesPersonFk', 'name', 'phone', 'mobile'], fields: ['salesPersonFk', 'name', 'phone', 'mobile'],
include: { include: {
relation: 'salesPerson', relation: 'salesPersonUser',
scope: { scope: {
fields: ['userFk'], fields: ['id', 'name']
include: {
relation: 'user',
scope: {
fields: ['name']
}
}
} }
} }
} }

View File

@ -38,15 +38,9 @@ class Controller extends ModuleCard {
'mobile' 'mobile'
], ],
include: { include: {
relation: 'salesPerson', relation: 'salesPersonUser',
scope: { scope: {
fields: ['userFk'], fields: ['id', 'name']
include: {
relation: 'user',
scope: {
fields: ['name']
}
}
} }
}, },
}, },

View File

@ -94,7 +94,7 @@
<span <span
ng-click="workerDescriptor.show($event, $ctrl.ticket.client.salesPersonFk)" ng-click="workerDescriptor.show($event, $ctrl.ticket.client.salesPersonFk)"
class="link"> class="link">
{{$ctrl.ticket.client.salesPerson.user.name}} {{$ctrl.ticket.client.salesPersonUser.name}}
</span> </span>
</vn-label-value> </vn-label-value>
<vn-label-value <vn-label-value

View File

@ -204,15 +204,9 @@ class Controller extends Descriptor {
'isTaxDataChecked' 'isTaxDataChecked'
], ],
include: { include: {
relation: 'salesPerson', relation: 'salesPersonUser',
scope: { scope: {
fields: ['userFk'], fields: ['id', 'name']
include: {
relation: 'user',
scope: {
fields: ['name']
}
}
} }
} }
} }

View File

@ -23,7 +23,6 @@
<vn-th field="stateFk" >State</vn-th> <vn-th field="stateFk" >State</vn-th>
<vn-th field="zoneFk">Zone</vn-th> <vn-th field="zoneFk">Zone</vn-th>
<vn-th field="warehouseFk">Warehouse</vn-th> <vn-th field="warehouseFk">Warehouse</vn-th>
<vn-th field="refFk" class="expendable">Invoice</vn-th>
<vn-th field="hour" shrink>Closure</vn-th> <vn-th field="hour" shrink>Closure</vn-th>
<vn-th number>Total</vn-th> <vn-th number>Total</vn-th>
<vn-th></vn-th> <vn-th></vn-th>
@ -89,8 +88,17 @@
</span> </span>
</vn-td> </vn-td>
<vn-td class="expendable">{{::ticket.province}}</vn-td> <vn-td class="expendable">{{::ticket.province}}</vn-td>
<vn-td> <vn-td class="expendable">
<span class="chip {{$ctrl.stateColor(ticket)}}"> <span
ng-show="ticket.refFk"
title="{{::ticket.refFk}}"
vn-click-stop="invoiceOutDescriptor.show($event, ticket.invoiceOutId)"
class="link">
{{::ticket.refFk}}
</span>
<span
ng-show="!ticket.refFk"
class="chip {{$ctrl.stateColor(ticket)}}">
{{ticket.state}} {{ticket.state}}
</span> </span>
</vn-td> </vn-td>
@ -103,7 +111,6 @@
</span> </span>
</vn-td> </vn-td>
<vn-td>{{::ticket.warehouse}}</vn-td> <vn-td>{{::ticket.warehouse}}</vn-td>
<vn-td class="expendable">{{::ticket.refFk | dashIfEmpty}}</vn-td>
<vn-td shrink>{{::ticket.zoneLanding | date: 'HH:mm'}}</vn-td> <vn-td shrink>{{::ticket.zoneLanding | date: 'HH:mm'}}</vn-td>
<vn-td number> <vn-td number>
<span class="chip {{$ctrl.totalPriceColor(ticket)}}"> <span class="chip {{$ctrl.totalPriceColor(ticket)}}">
@ -169,6 +176,9 @@
<vn-client-balance-create <vn-client-balance-create
vn-id="balanceCreateDialog"> vn-id="balanceCreateDialog">
</vn-client-balance-create> </vn-client-balance-create>
<vn-invoice-out-descriptor-popover
vn-id="invoiceOutDescriptor">
</vn-invoice-out-descriptor-popover>
<vn-contextmenu vn-id="contextmenu" targets="['vn-data-viewer']" model="model" <vn-contextmenu vn-id="contextmenu" targets="['vn-data-viewer']" model="model"
expr-builder="$ctrl.exprBuilder(param, value)"> expr-builder="$ctrl.exprBuilder(param, value)">
<slot-menu> <slot-menu>

View File

@ -22,7 +22,7 @@
<span <span
ng-click="workerDescriptor.show($event, $ctrl.summary.client.salesPersonFk)" ng-click="workerDescriptor.show($event, $ctrl.summary.client.salesPersonFk)"
class="link"> class="link">
{{$ctrl.summary.client.salesPerson.user.name}} {{$ctrl.summary.client.salesPersonUser.name}}
</span> </span>
</vn-label-value> </vn-label-value>
<vn-label-value label="Agency" <vn-label-value label="Agency"

View File

@ -1,4 +1,5 @@
const fs = require('fs-extra'); const fs = require('fs-extra');
const path = require('path');
let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development'; let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development';
let configPath = `/etc/salix`; let configPath = `/etc/salix`;
@ -12,6 +13,9 @@ let configFiles = [
]; ];
for (let configFile of configFiles) { for (let configFile of configFiles) {
if (!configFile.includes(configPath))
configFile = path.join(__dirname, configFile);
if (fs.existsSync(configFile)) { if (fs.existsSync(configFile)) {
const conf = require(configFile); const conf = require(configFile);
for (let prop in conf) for (let prop in conf)
@ -20,5 +24,4 @@ for (let configFile of configFiles) {
} }
config.env = env; config.env = env;
module.exports = config; module.exports = config;

View File

@ -27,7 +27,7 @@ class Report extends Component {
if (fs.existsSync(fullPath)) if (fs.existsSync(fullPath))
options = require(optionsPath); options = require(optionsPath);
const page = await config.browser.newPage(); const page = (await config.browser.pages())[0];
await page.emulateMedia('screen'); await page.emulateMedia('screen');
await page.setContent(template); await page.setContent(template);

View File

@ -10,12 +10,15 @@ module.exports = {
const routes = await this.fetchRoutes(routesId); const routes = await this.fetchRoutes(routesId);
const tickets = await this.fetchTickets(routesId); const tickets = await this.fetchTickets(routesId);
for (let route of routes) { const map = new Map();
const routeTickets = tickets.filter(ticket => {
return ticket.routeFk == route.id;
});
route.tickets = routeTickets; for (let route of routes)
map.set(route.id, route);
for (let ticket of tickets) {
const route = map.get(ticket.routeFk);
if (!route.tickets) route.tickets = [];
route.tickets.push(ticket);
} }
this.routes = routes; this.routes = routes;
@ -61,7 +64,7 @@ module.exports = {
a.postalCode, a.postalCode,
LPAD(a.id, 5, '0') AS addressFk, LPAD(a.id, 5, '0') AS addressFk,
p.name province, p.name province,
vn.ticketGetTotal(t.id) AS import, 0 AS import,
am.name ticketAgency, am.name ticketAgency,
tob.description, tob.description,
s.shipFk, s.shipFk,