Untitled
unknown
javascript
10 months ago
3.5 kB
4
Indexable
const buildSummaryWorksheet = (inventory: InventoryItem, costGroups: object): XLSX.WorkSheet => {
const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet([]);
const generalStyle = { alignment: { horizontal: 'right' } };
const generalData = [
[
{ v: 'Date', t: 's' },
{
v: inventory?.closed_at ?? '',
t: 'd',
s: { ...generalStyle, numFmt: 'yyyy-mm-dd' }
}
],
[
{ v: 'Restaurant', t: 's' },
{ v: projectStore.getCurrentRestaurantName(), t: 's', s: generalStyle }
],
[
{ v: 'Inventory list', t: 's' },
{ v: inventory?.type ?? 'N/A', t: 's', s: generalStyle }
]
];
const costGroupSums = [] as any;
for (const [costGroupName, costGroupItems] of Object.entries(costGroups)) {
const sum = costGroupItems.reduce((_sum: number, item: any) => {
_sum += item?.Value ?? 0;
return _sum;
}, 0);
costGroupSums.push([costGroupName, roundToNearestCent(sum)]);
}
const costGroupData = [['Cost groups', ''], ...costGroupSums];
const costGroupsStartRow = generalData.length + 1;
XLSX.utils.sheet_add_aoa(worksheet, generalData);
XLSX.utils.sheet_add_aoa(worksheet, costGroupData, { origin: costGroupsStartRow });
// add number format
costGroupSums.forEach((row, rowIndex) => {
const sumCellIndex = 1;
const cellCoord = XLSX.utils.encode_cell({ r: costGroupsStartRow + 1 + rowIndex, c: sumCellIndex });
worksheet[cellCoord].s = { numFmt: '#,##0.00' };
});
return worksheet;
};
const buildInventoryWorksheet = (costGroups: object): XLSX.WorkSheet => {
const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet([]);
let totalRows = 0;
const sumRowCoords = [] as String[];
const reportedLevelLetter = String.fromCharCode(65 + Object.keys(columnKeyMap).indexOf('Reported Level'));
const defaultValueLetter = String.fromCharCode(
65 + Object.keys(columnKeyMap).indexOf('Value / default unit')
);
const sumColumnLetter = String.fromCharCode(65 + Object.keys(columnKeyMap).indexOf('Value'));
const sumStyle = { font: { bold: true }, numFmt: '#,##0.00' };
for (const [costGroup, groupData] of Object.entries(costGroups) as any[]) {
XLSX.utils.sheet_add_json(worksheet, groupData, { origin: totalRows++ === 0 ? 0 : -1 });
XLSX.utils.sheet_add_aoa(worksheet, [getSumRow(costGroup)], { origin: -1 });
for (let i = totalRows + 1; i < totalRows + groupData.length + 1; i++) {
worksheet[`${reportedLevelLetter}${i}`].s = { numFmt: '#,##0.00' };
worksheet[`${defaultValueLetter}${i}`].s = { numFmt: '#,##0.00' };
worksheet[`${sumColumnLetter}${i}`].s = { numFmt: '#,##0.00' };
}
const sumRowCoord = `${totalRows + groupData.length + 1}`;
worksheet[`A${sumRowCoord}`].s = sumStyle;
worksheet[`${sumColumnLetter}${sumRowCoord}`] = {
t: 'n',
f: `SUM(${sumColumnLetter}${totalRows}:${sumColumnLetter}${totalRows + groupData.length})`,
s: sumStyle
};
XLSX.utils.sheet_add_json(worksheet, [], { origin: -1 });
sumRowCoords.push(`${sumColumnLetter}${sumRowCoord}`);
totalRows += groupData.length + 2;
}
XLSX.utils.sheet_add_aoa(worksheet, [getSumRow('total')], { origin: -1 });
const totalSumFormula = sumRowCoords.join('+');
const range = XLSX.utils.decode_range(worksheet['!ref']!);
const lastRowNumber = range.e.r;
worksheet[`A${lastRowNumber + 1}`].s = sumStyle;
worksheet[`${sumColumnLetter}${lastRowNumber + 1}`] = {
t: 'n',
f: `${totalSumFormula}`,
s: sumStyle
};
return worksheet;
};Editor is loading...
Leave a Comment