[CORD-1927] Fixing generate url for service models

Change-Id: I08d0d853ba2ab041626e133d079ab4562d73171e
diff --git a/src/app/core/services/helpers/config.helpers.spec.ts b/src/app/core/services/helpers/config.helpers.spec.ts
index 7718a44..7120a6b 100644
--- a/src/app/core/services/helpers/config.helpers.spec.ts
+++ b/src/app/core/services/helpers/config.helpers.spec.ts
@@ -25,6 +25,7 @@
 import {IXosTableCfg} from '../../table/table';
 import {IXosFormInput, IXosFormCfg} from '../../form/form';
 import {BehaviorSubject} from 'rxjs';
+import {XosFormHelpers} from '../../form/form-helpers';
 
 let service: IXosConfigHelpersService;
 
@@ -95,6 +96,7 @@
       .value('XosModelStore', {
 
       })
+      .service('XosFormHelpers', XosFormHelpers)
       .value('$state', {
         get: () => {
           return [
@@ -283,9 +285,9 @@
   });
 
   describe('the private methods', () => {
-    let modelStoreMock, toastr, auth, stateMock;
+    let modelStoreMock, q, toastr, auth, stateMock, XosFormHelpersMock;
 
-    beforeEach(angular.mock.inject((_toastr_, AuthService) => {
+    beforeEach(angular.mock.inject(($q, _toastr_, AuthService, XosFormHelpers) => {
       modelStoreMock = {
         query: () => {
           const subject = new BehaviorSubject([
@@ -297,9 +299,11 @@
       };
       toastr = _toastr_;
       auth = AuthService;
+      XosFormHelpersMock = XosFormHelpers;
       stateMock = {
         get: ''
       };
+      q = $q;
     }));
 
     const field: IXosModelDefsField = {
@@ -316,7 +320,7 @@
         test: 2
       };
       it('should add the formatted data to the column definition', () => {
-        service = new ConfigHelpers(stateMock, toastr, modelStoreMock);
+        service = new ConfigHelpers(q, stateMock, toastr, modelStoreMock, XosFormHelpersMock);
         service['populateRelated'](item, item.test, field);
         expect(item['test-formatted']).toBe('second');
       });
@@ -332,7 +336,7 @@
       };
 
       it('should add the available choice to the select', () => {
-        service = new ConfigHelpers(stateMock, toastr, modelStoreMock);
+        service = new ConfigHelpers(q, stateMock, toastr, modelStoreMock, XosFormHelpersMock);
         service['populateSelectField'](field, input);
         expect(input.options).toEqual([
           {id: 1, label: 'test'},
diff --git a/src/app/core/services/helpers/config.helpers.ts b/src/app/core/services/helpers/config.helpers.ts
index 445386a..b6f28f7 100644
--- a/src/app/core/services/helpers/config.helpers.ts
+++ b/src/app/core/services/helpers/config.helpers.ts
@@ -23,6 +23,7 @@
 import {IXosFormCfg, IXosFormInput, IXosFormInputValidator, IXosFormInputOptions} from '../../form/form';
 import {IXosModelStoreService} from '../../../datasources/stores/model.store';
 import {IXosState} from '../runtime-states';
+import {IXosFormHelpersService} from '../../form/form-helpers';
 
 export interface IXosModelDefsFieldValidators {
   name: string;
@@ -61,9 +62,12 @@
 
 export class ConfigHelpers implements IXosConfigHelpersService {
   static $inject = [
+    '$q',
     '$state',
     'toastr',
-    'XosModelStore'];
+    'XosModelStore',
+    'XosFormHelpers'
+  ];
 
   public excluded_fields = [
     'created',
@@ -96,9 +100,11 @@
   ]);
 
   constructor(
+    private $q: ng.IQService,
     private $state: ng.ui.IStateService,
     private toastr: ng.toastr.IToastrService,
-    private XosModelStore: IXosModelStoreService
+    private XosModelStore: IXosModelStoreService,
+    private XosFormHelpers: IXosFormHelpersService
   ) {
     pluralize.addIrregularRule('xos', 'xoses');
     pluralize.addPluralRule(/slice$/i, 'slices');
@@ -299,7 +305,7 @@
     };
 
     formCfg.actions[0].cb = (item, form: angular.IFormController) => {
-
+      const d = this.$q.defer();
       if (!form.$valid) {
         formCfg.feedback = {
           show: true,
@@ -318,9 +324,15 @@
 
       // remove field added by xosTable
       _.forEach(Object.keys(item), prop => {
-        if (prop.indexOf('-formatted') > -1) {
+        // FIXME what _ptr fields comes from??
+        if (prop.indexOf('-formatted') > -1 || prop.indexOf('_ptr') > -1) {
           delete item[prop];
         }
+
+        // convert dates back to UnixTime
+        if (this.XosFormHelpers._getFieldFormat(item[prop]) === 'date') {
+          item[prop] = new Date(item[prop]).getTime() / 1000;
+        }
       });
 
       const itemName = (angular.isUndefined(itemCopy.name)) ? model.name : itemCopy.name;
@@ -334,6 +346,7 @@
             closeBtn: true
           };
           this.toastr.success(`${itemName} successfully saved`);
+          d.resolve(res);
         })
         .catch(err => {
           formCfg.feedback = {
@@ -343,7 +356,10 @@
             closeBtn: true
           };
           this.toastr.error(err.specific_error || '', `Error while saving ${itemName}: ${err.error}`);
+          d.reject(err);
         });
+
+      return d.promise;
     };
 
     return formCfg;