/** * @ngdoc filService * @name fasit.services.#filService * @filService * * @description * Service som hanterar Dokument. Innehåller metoder för att * hämta, spara, lägga till och ta bort dokument * */ angular.module('fasit') .factory('filService', ['$resource', 'resourceService', 'changeTrackingService', '$q', function ( $resource: ng.resource.IResourceService, resourceService: fb.IResourceService, changeTrackingService: fb.IChangeTrackingService, $q: ng.IQService ): fb.IFilService { var Fil = $resource('/WebAPI/api/Fil/:filId/', null, { get: { method: 'GET', cache: false }, query: { method: 'GET', isArray: true, cache: false }, add: { method: 'POST', cache: false, }, save: { method: 'PUT', cache: false, }, remove: { method: 'DELETE', cache: false, } }); var maeklarObjektFiler = $resource('/WebAPI/api/Fil/MaeklarObjekt/:id/', null, { query: { method: 'GET', isArray: true, cache: false } }); var personFiler = $resource('/WebAPI/api/Fil/Person/:id/', null, { query: { method: 'GET', isArray: true, cache: false } }); var produktblad = $resource('/WebAPI/api/Fil/ProduktBlad/'); var get = function (id: number): fb.Fil { var res = resourceService.get(Fil, { filId: id }); var ret = new fb.Fil(res); return ret; }; var remove = function (id: number): fb.Fil { var res = resourceService.remove(Fil, { filId: id }); return res; }; var maeklarObjektQuery = function (maeklarObjektId: number): fb.List { var res = resourceService.query(maeklarObjektFiler, { id: maeklarObjektId }); var ret = new fb.List(res, fb.Fil); ret.$promise.then(function () { //Sortera efter filordning ret.sort((a, b) => a.FilOrdning.value < b.FilOrdning.value ? -1 : 1); _.each(ret, function (item: fb.Fil, index: number) { item.MaeklarObjektId = new fb.ChangeTrack(maeklarObjektId, item); if (item.FilOrdning.missValue) { //Vi vill att objektbilagor ska komma efter föreningens bilagor, //därför adderar vi tusen till filordning. item.FilOrdning.setValue(1000 + index); } else if (index !== 0 && item.FilOrdning.value === ret.slice(index - 1, index)[0].FilOrdning.value) { item.FilOrdning.setValue(ret.slice(index - 1, index)[0].FilOrdning.value + 1); } }); }); return ret; } var personQuery = function (personId: number): fb.List { var res = resourceService.query(personFiler, { id: personId }); var ret = new fb.List(res, fb.Fil); ret.$promise.then(function () { _.each(ret, function(item: any, index: number) { item.PersonId = new fb.ChangeTrack(personId, item); if (item.FilOrdning.missValue) { item.FilOrdning.setValue(index); } }); }); return ret; } var save = function (fil: fb.Fil): fb.Fil { //var res = resourceService.save(Fil, { filId: fil.FilId.value }, fil); //return res; var dbFil = get(fil.FilId.value); dbFil.$promise.then(function () { dbFil.SkallVisasPaaInternet = fil.SkallVisasPaaInternet; dbFil.Namn = fil.Namn; dbFil.FilOrdning = fil.FilOrdning; dbFil.UppladdatDatum = fil.UppladdatDatum; var res = resourceService.save(Fil, { filId: fil.FilId.value }, dbFil); res.$promise.then(function success(data) { fil.merge(data, false); }); }); var response = new fb.Fil(dbFil); return response; }; var queryProduktblad = function (): fb.List { var res = resourceService.query(produktblad, {}); return new fb.List(res, fb.Fil); } return { get: get, remove: remove, maeklarObjekt: { query: maeklarObjektQuery }, person: { query: personQuery }, //add: add, save: save, queryProduktblad: queryProduktblad }; }]);