OpenFn/OpenFn-Site

View on GitHub
app/assets/javascripts/the_bridge_ng/controllers/mappings/salesforce_ctrl.js.coffee

Summary

Maintainability
Test Coverage
'use strict'

@controllerModule.controller 'SalesforceCtrl', ['$scope', '$filter', 'SalesforceObject',
  ($scope, $filter, SalesforceObject) ->

    ########## VARIABLE ASSIGNMENT

    $scope.sfFilter = {}

    ########## FUNCTIONS

    $scope.filterSfFields = (event, ui) ->
      sfObject = $scope.mapping.salesforceObjects.filter((sfObj) ->
        sfObj.color is ui.item.sortable.moved.color
      )[0]

      if $scope.sfFilter
       sfObject.salesforceFields = $filter('filter')(sfObject.originalFields, $scope.sfFilter)
      else
       sfObject.salesforceFields = angular.copy(sfObject.originalFields)

    $scope.updateSalesforceObjectOrder = ->
      for sfObject, index in $scope.mapping.salesforceObjects
        SalesforceObject.update(
          mapping_id: $scope.mapping.id,
          id: sfObject.id
          salesforce_object:
            order: index + 1
        ).$promise.then () ->
          $scope.$emit "mapping:saved"

        sfObject.order = index + 1


    $scope.prepare = ->
      $scope.sfSortableOptions =
        connectWith: '.sf-connected-sortable'
        revert: true
        opacity: 0.8
        scroll: true
        stop: (event, ui) ->
          if ui.item.sortable.received
            $scope.filterSfFields(event, ui)

      $scope.sfObjectSortableOptions =
        revert: true
        opacity: 0.8
        scroll: true
        stop: (event, ui) ->
          $scope.updateSalesforceObjectOrder()

      for sfObject in $scope.mapping.salesforceObjects
        sfObject.originalFields = angular.copy(sfObject.salesforceFields)

      $scope.setViewingSfObject($scope.mapping.salesforceObjects[0])

    $scope.toggleRepeat = (salesforceObject) ->
      salesforceObject.is_repeat = !salesforceObject.is_repeat
      SalesforceObject.update(
        mapping_id: $scope.mapping.id
        id: salesforceObject.id
        salesforce_object:
          is_repeat: salesforceObject.is_repeat
      ).$promise.then () ->
        $scope.$emit "mapping:saved"

    $scope.deleteSfObject = (sfObject) ->
      if confirm("Please ensure that all destination fields from this object have been removed before continuing. Are you sure you want to remove this object?")
        SalesforceObject.delete(
          mapping_id: $scope.mapping.id,
          id: sfObject.id
        ).$promise.then (response) ->
          i = $scope.mapping.salesforceObjects.indexOf(sfObject)
          $scope.mapping.salesforceObjects.splice(i, 1)
          $scope.$emit "mapping:saved"

    $scope.refreshSfFields = (sfObject) ->
      SalesforceObject.refreshFields(
        mapping_id: $scope.mapping.id,
        id: sfObject.id
      ).$promise.then (response) ->
        i = $scope.mapping.salesforceObjects.indexOf(sfObject)
        $scope.mapping.salesforceObjects[i].salesforceFields = response.salesforce_object.salesforceFields
        $scope.$emit "mapping:saved"

    $scope.setViewingSfObject = (sfObject) ->
      $scope.viewingSfObject = sfObject

    $scope.tabMoved = () ->
      $scope.updateSalesforceObjectOrder()

    ########## WATCHES

    $scope.$watch "mapping.salesforceObjectName", (salesforceObjectId) ->
      if salesforceObjectId isnt undefined && salesforceObjectId isnt ''
        SalesforceObject.save(
          mapping_id: $scope.mapping.id
          salesforce_object:
            name: salesforceObjectId,
            order: $scope.mapping.salesforceObjects.length + 1
        ).$promise.then (response) ->
          response.salesforce_object.originalFields = angular.copy(response.salesforce_object.salesforceFields)
          $scope.mapping.salesforceObjects.push(response.salesforce_object)
          $scope.$emit "mapping:saved"

          # Reset the chosen object name
          $scope.mapping.salesforceObjectName = ''

          unless $scope.viewingSfObject
            $scope.setViewingSfObject(response.salesforce_object)

    $scope.$watch "sfFilter.field_name", (fieldName) ->
      if $scope.viewingSfObject
        if fieldName is ''
          $scope.viewingSfObject.salesforceFields = angular.copy($scope.viewingSfObject.originalFields)
        else
          $scope.viewingSfObject.salesforceFields = $filter('filter')($scope.viewingSfObject.originalFields, $scope.sfFilter)


    ########## BEFORE FILTERS

    $scope.prepare()
]