eHealthAfrica/direct-delivery-dashboard

View on GitHub
src/app/planning/allocation/delivery-allocation.controller.js

Summary

Maintainability
A
0 mins
Test Coverage
angular.module('planning')
  .controller('DeliveryAllocationCtrl', function (
    deliveryRound,
    allocationTemplates,
    facilityAllocationInfo,
    deliveryAllocationService,
    log,
    calculationService,
    presentations) {
    var vm = this
    vm.views = {
      packedProduct: 'Packed Product',
      productPresentation: 'Product Presentation'
    }
    vm.selectedLGA = ''
    vm.productPresentation = {}

    vm.allocationTemplates = allocationTemplates
    vm.selectedAllocTemp = ''
    vm.presentations = presentations

    function initPresentations () {
      for (var ppId in vm.facAllocInfo.presentationsByProduct) {
        if (vm.facAllocInfo.presentationsByProduct.hasOwnProperty(ppId)) {
          var presentation = vm.facAllocInfo.presentationsByProduct[ppId]
          if (angular.isNumber(presentation)) {
            vm.productPresentation[ppId] = presentation
          }
        }
      }
    }

    vm.deliveryRound = deliveryRound
    vm.selectedView = vm.views.packedProduct
    vm.facAllocInfo = facilityAllocationInfo

    initPresentations()

    vm.isDisabled = function () {
      return vm.selectedView === vm.views.productPresentation
    }

    vm.switchView = function (view) {
      vm.selectedView = view
    }

    vm.hasNoAllocation = function () {
      return (vm.facAllocInfo.rows.length !== 0 &&
      vm.facAllocInfo.productList.length === 0)
    }

    vm.hasNoSchedule = function () {
      return vm.facAllocInfo.rows.length === 0
    }

    vm.hasProducts = function () {
      return vm.facAllocInfo.productList.length > 0
    }

    vm.updateList = function () {
      deliveryAllocationService.getAllocationBy(vm.deliveryRound._id, vm.selectedLGA)
        .then(function (result) {
          vm.facAllocInfo = result
        })
        .catch(vm.handleError)
    }

    vm.handleError = function (err) {
      log.error('getAllocationError', err)
    }

    vm.saveRow = function ($data, facRnd) {
      deliveryAllocationService.update(facRnd._id, facRnd.facility.id, $data)
        .then(function () {
          log.success('updateFacilityPackedQty')
        })
        .catch(deliveryAllocationService.onUpdateError)
    }

    vm.updatePresentation = function ($data, pCode) {
      if (vm.productPresentation[pCode] === $data[pCode]) {
        var msg = 'Same value, please select different value'
        log.info('', null, msg)
        return msg
      }
      return deliveryAllocationService.updatePackedPresentation(vm.deliveryRound._id, $data)
        .then(function (res) {
          var msg = [ pCode,
            'presentation updated to',
            $data[pCode],
            'successfully!'].join(' ')
          log.success('', res, msg)
          return true
        })
        .catch(function (err) {
          deliveryAllocationService.onUpdateError(err)
          return false
        })
    }

    vm.setAllocationTemplate = function (template) {
      if (!template || !angular.isObject(template.products)) {
        return log.info('missingAllocTemplateProducts')
      }
      vm.selectedAllocTemp = template
      for (var pType in vm.selectedAllocTemp.products) {
        if (vm.facAllocInfo.productList.indexOf(pType) === -1) {
          vm.facAllocInfo.productList.push(pType)
        }
      }
      calculationService.setTemplate(vm.selectedAllocTemp)
      var facilities = vm.facAllocInfo.rows
        .map(function (row) {
          return { _id: row.facility.id }
        })

      calculationService.getMonthlyRequirement(facilities)
        .then(function (templates) {
          vm.facAllocInfo.rows = deliveryAllocationService.updateFromTemplate(vm.facAllocInfo.rows, templates)
        })
    }
  })