src/app/components/kpi/kpi.service.js
'use strict'
angular.module('kpi')
.service('kpiService', function (dbService, pouchUtil) {
var _this = this
var DOC_TYPE = 'kpi'
_this.getByRoundId = function (id) {
var view = 'kpi/by-round-id'
var param = {
key: id,
include_docs: true
}
var antigens = []
return dbService.getView(view, param).then(function (res) {
var kpiList = res.rows.map(function (row) {
var kpi = row.doc
if (angular.isArray(kpi.antigensKPI)) {
kpi.antigensKPI.forEach(function (antigenKPI) {
if (antigenKPI && antigenKPI.productID && antigens.indexOf(antigenKPI.productID) === -1) {
antigens.push(antigenKPI.productID)
}
})
}
return kpi
})
return {
antigens: antigens,
kpiList: kpiList
}
})
}
function hash (driverId, date, facilityId) {
return [driverId, date, facilityId].join('-')
}
function hashKPI (kpiList) {
var kpiHash = {}
kpiList.forEach(function (kpi) {
if (kpi.facility && kpi.facility.id) {
var key = hash(kpi.driverID, kpi.date, kpi.facility.id)
kpiHash[key] = kpi
}
})
return kpiHash
}
_this.fillInMissingKPI = function (kpiList, roundId, kpiTemplate) {
var view = 'kpi/deliveries-date-and-driver-by-round'
var param = {
key: roundId
}
var result = angular.copy(kpiList)
var kpiHash = hashKPI(result)
return dbService.getView(view, param)
.then(function (res) {
res.rows
.forEach(function (row) {
row = row.value
var recordKey = hash(row.driverID, row.date, row.facility.id)
if (!kpiHash[recordKey]) {
var temp = angular.copy(kpiTemplate)
delete temp._id
delete temp._rev
temp.doc_type = DOC_TYPE
temp.date = row.date
temp.deliveryRoundID = roundId
temp.driverID = row.driverID
temp.facility = row.facility
result.push(temp)
}
})
return result
})
}
_this.getAllTemplates = function () {
var view = 'kpi-template/all'
var param = {
include_docs: true
}
return dbService.getView(view, param)
.then(pouchUtil.pluckDocs)
.then(pouchUtil.rejectIfEmpty)
}
_this.save = function (doc) {
doc.doc_type = DOC_TYPE
return dbService.save(doc)
}
_this.saveDocs = function (docs) {
return dbService.saveDocs(docs)
}
})