(function() { window.app.factory("inventorySvc", [ "$http", "$filter", function($http, $filter) { var inventories = []; loadInventories(); var svc = { add: add, distribute: distribute, update: update, remove: remove, inventories: inventories, get: get, refresh: refresh, find: find, exportInventory: exportInventory }; return svc; function loadInventories() { $http.post("/Inventory/All") .success(function(data) { angular.copy(data, inventories); }); } function exportInventory() { return $http.post("/Inventory/Export", {}, { responseType: "arraybuffer" }); } 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 }); } } ]); })();