All files / source/reports rangesByUser.js

100% Statements 36/36
88.23% Branches 15/17
100% Functions 8/8
100% Lines 32/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102                        2x 18x 18x     6x 6x 4x       2x 2x 2x   2x                                                                               2x   2x 18x   2x 2x 2x 2x 1x 2x 2x     2x 2x 2x 2x   2x     2x 2x 18x   18x 18x 4x     2x      
import moment from 'moment-timezone';
import RangeDao from '../../database/dao/range';
import { models } from '../../../config/database';
import { mountWhereBasedFilter } from '../../helpers/reports/sequelize';
 
export default async function generateData(
  columns,
  filters,
  headers = [],
  rows = [],
  opts = {}
) {
  const where = mountWhereBasedFilter(filters);
  const headersValueDefault = columns.map((it) => it.value);
  const headersValue = columns.map((it) => it.value);
 
  function remove(columnValuesToFind, value) {
    const index = columnValuesToFind.indexOf(value);
    if (index !== -1) {
      columnValuesToFind.splice(index, 1);
    }
  }
 
  remove(headersValue, 'branchName');
  remove(headersValue, 'usersRangesCode');
  remove(headersValue, 'usersRangesName');
 
  const dados = await RangeDao.findRanges(where, {
    attributes: headersValue,
    include: [
      {
        required: true,
        model: models.Branch,
        as: 'branch',
        attributes: ['code', 'name'],
      },
      {
        required: false,
        model: models.User,
        as: 'userCreated',
        attributes: ['login'],
      },
      {
        required: false,
        model: models.User,
        as: 'userUpdated',
        attributes: ['login'],
      },
      {
        separate: true,
        required: false,
        model: models.UsersRanges,
        as: 'usersRanges',
        attributes: ['rangeCode'],
        include: [
          {
            required: true,
            model: models.User,
            as: 'user',
            attributes: ['login', 'name'],
          },
        ],
      },
    ],
    ...opts,
  });
 
  const data = dados.map((value) => value.toJSON());
 
  columns.forEach((it) => {
    headers.push(it.label);
  });
  data.forEach((it) => {
    const usersRangesCodes = [];
    const usersRangesNames = [];
    if (it.usersRanges.length > 0) {
      it.usersRanges.forEach((userRange) => {
        usersRangesCodes.push(userRange.user.login);
        usersRangesNames.push(userRange.user.name);
      });
    }
    it.createdUser = it.userCreated.login;
    it.updatedUser = it.userUpdated.login;
    it.branchCode = it.branch ? `${it.branch.code}-${it.branch.name}` : '';
    it.usersRangesCode =
      usersRangesCodes.length > 0 ? usersRangesCodes.toLocaleString() : '';
    it.usersRangesName =
      usersRangesNames.length > 0 ? usersRangesNames.toLocaleString() : '';
 
    const row = [];
    for (let index = 0; index < headersValueDefault.length; index += 1) {
      const column = headersValueDefault[index];
 
      row.push(it[column]);
      if (column === 'createdAt' || column === 'updatedAt') {
        row[index] = moment(row[index]).format('L LTS');
      }
    }
    rows.push(row);
  });
}