Skip to content

Commit

Permalink
feat: added api to import timely file
Browse files Browse the repository at this point in the history
  • Loading branch information
varijkapil13 committed Jan 16, 2019
1 parent 5c9d64d commit 852b03f
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 14 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"debug": "~2.6.9",
"express": "~4.16.0",
"http-errors": "~1.6.2",
"moment": "^2.23.0",
"morgan": "~1.9.0",
"multer": "^1.4.1",
"pg": "^7.7.1",
Expand Down
81 changes: 81 additions & 0 deletions server/controllers/workday.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import * as XLSX from 'xlsx';
import moment from 'moment';
import model from '../models';

const {WorkDay} = model;
const {Avatar} = model;
class Workdays {
/**
*
* @param req
* @param res
*/
static importTimelyFile(req, res) {
// get the user id from the url
const user_id = req.params.avatarId;
Avatar.findById(user_id)
.then(avatar => {
if (avatar) {
const userName = avatar.first_name + ' ' + avatar.last_name;
// parse the excel file from the request
if (req.file) {
const workbook = XLSX.read(req.file.buffer, {type: 'buffer'});
const sheetNameList = workbook.SheetNames;
const sheetInJson = XLSX.utils.sheet_to_json(workbook.Sheets[sheetNameList[1]]);
// remove the first row from the array. because it contains only the total hours logged
sheetInJson.shift();
const length = sheetInJson.length;
for (let element of sheetInJson) {
const nameInFile = element['Name'];
if (nameInFile === userName) {
WorkDay.create({
user_id,
date: moment.utc(element['Date'], 'DD/MM/YYYY').toDate(),
from: element['From'],
to: element['To'],
logged_hours: element['Logged'],
tags: element['Tags'],
notes: element['Note']
})
.then(() => {
if (sheetInJson.indexOf(element) === length - 1) {
return res.status(200).send({
status: true,
msg: 'Entries saved to database successfully'
});
}
})
.catch(error => {
console.error(error);
return res.status(400).send(error);
});
}
}
} else {
return res.status(400).send({
status: false,
errors: [
{
name: 'File not found error',
detail: 'File was not found in the request.'
}
]
});
}
} else {
return res.status(400).send({
status: false,
errors: [
{
name: 'User not found error',
details: 'User with id ' + user_id + ' was not found in the database'
}
]
});
}
})
.catch(error => res.status(400).send(error));
}
}

export default Workdays;
14 changes: 2 additions & 12 deletions server/routes/workday.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,10 @@
import express from 'express';
import multer from 'multer';
import * as XLSX from 'xlsx';
import Workday from '../controllers/workday';

const routes = express.Router();
const upload = multer({storage: multer.memoryStorage()});
routes.post('/upload', upload.single('reportFile'), (req, res, next) => {
const workbook = XLSX.read(req.file.buffer, {type: 'buffer'});
const sheet_name_list = workbook.SheetNames;
const sheet_in_json = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[1]]);
for (let element of sheet_in_json) {
console.log(element);
}

return res.status(200).send({
status: true
});
});
routes.post('/:avatarId/upload', upload.single('reportFile'), Workday.importTimelyFile);

export default routes;
4 changes: 2 additions & 2 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1286,7 +1286,7 @@ d@1:
dependencies:
es5-ext "^0.10.9"

date-fns@^1.27.2:
date-fns@^1.27.2, date-fns@^1.30.1:
version "1.30.1"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
Expand Down Expand Up @@ -2865,7 +2865,7 @@ moment-timezone@^0.5.14:
dependencies:
moment ">= 2.9.0"

"moment@>= 2.9.0", moment@^2.20.0:
"moment@>= 2.9.0", moment@^2.20.0, moment@^2.23.0:
version "2.23.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.23.0.tgz#759ea491ac97d54bac5ad776996e2a58cc1bc225"
integrity sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA==
Expand Down

0 comments on commit 852b03f

Please sign in to comment.