feat: refs #7905 getBuysCsv #2900

Merged
guillermo merged 10 commits from 7905-getBuysCsv into dev 2024-09-05 09:44:39 +00:00
2 changed files with 56 additions and 37 deletions
Showing only changes of commit 0f4bc3f83b - Show all commits

28
loopback/util/flatten.js Normal file
View File

@ -0,0 +1,28 @@
function flatten(dataArray) {
return dataArray.map(item => flatten(item.__data));
}
function flattenObj(data, prefix = '') {
let result = {};
try {
for (let key in data) {
if (!data[key]) continue;
const newKey = prefix ? `${prefix}_${key}` : key;
const value = data[key];
if (typeof value === 'object' && value !== null && !Array.isArray(value))
Object.assign(result, flattenObj(value.__data, newKey));
else
result[newKey] = value;
}
} catch (error) {
console.error(error);
}
return result;
}
module.exports = {
flatten,
flattenObj,
};

View File

@ -1,5 +1,5 @@
const UserError = require('vn-loopback/util/user-error');
const {toCSV} = require('vn-loopback/util/csv');
guillermo marked this conversation as resolved
Review

@jsegarra se quiere que los proveedores puedan tener sus buys. Ya lo hicimos via json, ahora lo quieren via csv, pero con este enfoque duplicamos codigo, hay forma de tenerlo unificado o por parametros ?

@jsegarra se quiere que los proveedores puedan tener sus buys. Ya lo hicimos via json, ahora lo quieren via csv, pero con este enfoque duplicamos codigo, hay forma de tenerlo unificado o por parametros ?
Review

Si, esto ya lo he visto pero tengo que buscar el commit
El ejemplo que tengo en la cabeza es cuando se planteo la necesidad de que printReport, según la cabecera generase un pdf o un html

Si, esto ya lo he visto pero tengo que buscar el commit El ejemplo que tengo en la cabeza es cuando se planteo la necesidad de que printReport, según la cabecera generase un pdf o un html
Review

Creo que la cabecera que buscamos es la de accept

Creo que la cabecera que buscamos es la de accept
Review

El commit
bb96125bbd

El commit https://gitea.verdnatura.es/verdnatura/salix/commit/bb96125bbda28164046ce7148aee6ccc934f9114
Review
https://gitea.verdnatura.es/verdnatura/salix/pulls/2900#issuecomment-61247
const {flatten} = require('vn-loopback/util/flatten');
module.exports = Self => {
Self.remoteMethodCtx('getBuysCsv', {
@ -35,41 +35,32 @@ module.exports = Self => {
});
Self.getBuysCsv = async(ctx, id, options) => {
const userId = ctx.req.accessToken.userId;
const models = Self.app.models;
const myOptions = {};
if (typeof options == 'object')
Object.assign(myOptions, options);
const client = await models.Client.findById(userId, myOptions);
const supplier = await models.Supplier.findOne({where: {nif: client.fi}}, myOptions);
if (supplier) {
const isEntryOwner = (await Self.findById(id)).supplierFk === supplier.id;
if (!isEntryOwner) throw new UserError('Access Denied');
}
const data = await Self.rawSql(`
SELECT b.id,
b.itemFk,
i.name,
b.stickers,
b.packing,
b.grouping,
b.packing,
b.groupingMode,
b.quantity,
b.packagingFk,
b.weight,
b.buyingValue,
b.price2,
b.price3,
b.printedStickers
FROM buy b
JOIN item i ON i.id = b.itemFk
WHERE b.entryFk = ?
`, [id]);
return [toCSV(data), 'text/csv', `inline; filename="buys-${id}.csv"`];
const data = await Self.getBuys(ctx, id, null, options);
const dataFlatted = flatten(data);
return [toCSV(dataFlatted), 'text/csv', `inline; filename="buys-${id}.csv"`];
};
};
// function flattenJSON(dataArray) {
// return dataArray.map(item => flatten(item.__data));
// }
// function flatten(data, prefix = '') {
// let result = {};
// try {
// for (let key in data) {
// if (!data[key]) continue;
// const newKey = prefix ? `${prefix}_${key}` : key;
// const value = data[key];
// if (typeof value === 'object' && value !== null && !Array.isArray(value))
// Object.assign(result, flatten(value.__data, newKey));
// else
// result[newKey] = value;
// }
// } catch (error) {
// console.error(error);
// }
// return result;
// }