| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- const _ = require('lodash')
- const { init, Retailer, Service, Workday } = require('../database')
- const { title } = require('change-case')
- const terminals = require('./terminals')
- const XLSX = require('xlsx')
- const $import = async (locKey, filename) => {
- await init()
- const locs = await terminals()
- const terminal = locs[locKey]
- const book = XLSX.readFile(filename)
- const sheets = []
- for (let sheetName of book.SheetNames) {
- let sheet = book.Sheets[sheetName]
- const data = XLSX.utils.sheet_to_json(sheet, {
- header: 1,
- blankrows: false
- })
- sheets.push(data)
- }
- const workdays = []
- for (let sheet of sheets) {
- if (!sheet[0] || !sheet[0][0]) continue
- const date = sheet[0][0]
- const regularHours = +sheet[5][1]
- const overtimeHours = +sheet[5][2]
- let foundRetailer = 0
- const services = sheet
- .filter(row => (row[0] && foundRetailer) || (row[0] === 'Retailer' && foundRetailer++))
- .map(([retailer, totalDel, nonDlv, early, late, onTime, pctOnTime, delivered, scanned, notScanned, pctScanned]) => ({
- date,
- retailer,
- delivered: +delivered,
- scanned: +scanned
- }))
- //.filter(row => row.delivered || row.scanned)
- workdays.push({
- date,
- services,
- regularHours,
- overtimeHours
- })
- }
- const retailerKeys = _.chain(workdays)
- .map(x => x.services)
- .flatten()
- .map(x => x.retailer)
- .uniq()
- .value()
- for (let key of retailerKeys) {
- console.log(key)
- await Retailer.upsert({
- key,
- name: title(key)
- })
- }
- const retailerIds = _.chain(await Retailer.findAll())
- .map(({key, id}) => [key, id])
- .fromPairs()
- .value()
- console.log(retailerIds)
-
- for (let workday of workdays) {
- await Workday.upsert({
- terminalId: terminal.id,
- date: workday.date,
- regularHours: workday.regularHours,
- overtimeHours: workday.overtimeHours
- })
- const wd = await Workday.find({where: {
- terminalId: terminal.id,
- date: workday.date
- }})
- for (let service of workday.services) {
- if (service.delivered || service.scanned) {
- console.log(service)
- await Service.upsert({
- workdayId: wd.id,
- retailerId: retailerIds[service.retailer],
- date: workday.date,
- delivered: service.delivered,
- scanned: service.scanned
- })
- }
- }
- }
- }
- module.exports = {
- import: $import
- }
|