(function() { window.app.factory('inventorySvc', inventorySvc); inventorySvc.$inject = ['$http', '$filter']; function inventorySvc($http, $filter) { var inventories = []; loadInventories(); var svc = { add: add, distribute: distribute, update: update, remove: remove, inventories: inventories, get: get, refresh: refresh, find: find }; return svc; function loadInventories() { $http.post('/Inventory/All') .success(function(data) { angular.copy(data, inventories); }); } function add(inventory) { return $http.post('/Inventory/Add', inventory) .success(function(inventory) { inventories.unshift(inventory); }); } function distribute(distribution) { return $http.post('/Inventory/Distribute', distribution) .success(function (data) { angular.copy(data, inventories); }); } function update(existingInventory, updatedInventory) { return $http.post('/Inventory/Update', updatedInventory) .success(function(inventory) { angular.extend(existingInventory, inventory); }); } // remove quantity from this inventory function remove(removeForm) { var existingInventory = get(removeForm.inventoryId); return $http.post('/Inventory/Remove', removeForm) .success(function(data) { angular.copy(data, existingInventory); }); } function get(id) { var results = $filter('filter')(inventories, { id: id }); if (results.length > 0) return results[0]; return null; } // refresh this inventory from the server function refresh(id) { var existingInventory = get(id); if (existingInventory) { find(id) .success(function(inventory) { angular.copy(inventory, existingInventory); }); } } function find(id) { return $http.post('/Inventory/Find', { id: id }); } } })();