Skip to content

Commit fa3a65d

Browse files
committed
Merge 'develop' for v1.1.16 release
2 parents 4a5d63c + e5bb2d7 commit fa3a65d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1152
-695
lines changed

package.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "Dashboard",
3-
"version": "1.1.141",
3+
"version": "1.1.16",
44
"description": "Ottemo Administration Tool",
55
"main": "gulpfile.js",
66
"repository": {
@@ -21,10 +21,7 @@
2121
"gulp-imagemin": "^2.0.0",
2222
"gulp-inline-css": "^3.0.1",
2323
"gulp-jshint": "^1.10.0",
24-
"gulp-livereload": "^3.8.0",
2524
"gulp-load-plugins": "^1.2.0",
26-
"gulp-minify-css": "^0.3.13",
27-
"gulp-minify-html": "^0.1.8",
2825
"gulp-plumber": "^1.0.1",
2926
"gulp-rename": "^1.2.2",
3027
"gulp-replace-task": "^0.11.0",

src/app/app.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
@import 'login/login';
2323
@import 'order/order';
2424
@import 'product/product';
25+
@import 'reports/reports';
2526
@import 'seo/seo';
2627
@import 'subscriptions/subscriptions';
2728
@import 'visitor/visitor';

src/app/category/api.service.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,11 @@ angular.module("categoryModule")
5252
"addProduct": {
5353
method: "POST",
5454
params: {
55-
categoryID: "@categoryId",
56-
productID: "@productId"
55+
// this is a post method, but we don't really care about the data as much
56+
// as the params, the `@` extracts the param values from the post data
57+
// so that we don't have to write `addProduct({},params)
58+
categoryID: "@categoryID",
59+
productID: "@productID"
5760
},
5861
url: REST_SERVER_URI + "/category/:categoryID/product/:productID"
5962
},

src/app/category/edit.controller.js

Lines changed: 81 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ angular.module("categoryModule")
99
"dashboardUtilsService",
1010
"_",
1111
function ($scope, $routeParams, $location, $q, categoryApiService, dashboardUtilsService, _) {
12-
var categoryId, rememberProducts, oldProducts, getDefaultCategory;
12+
13+
var savedProducts = []
14+
1315
// Initialize SEO
1416
if (typeof $scope.initSeo === "function") {
1517
$scope.initSeo("category");
1618
}
1719

18-
categoryId = $routeParams.id;
20+
var categoryId = $routeParams.id;
1921

2022
if (!categoryId && categoryId !== "new") {
2123
$location.path("/categories");
@@ -25,21 +27,14 @@ function ($scope, $routeParams, $location, $q, categoryApiService, dashboardUtil
2527
categoryId = null;
2628
}
2729

28-
oldProducts = [];
29-
30-
getDefaultCategory = function () {
30+
function getDefaultCategory() {
3131
return {
3232
name: "",
3333
"parent_id": "",
3434
"products": []
3535
};
3636
};
3737

38-
/**
39-
* Current selected category
40-
*
41-
* @type {Object}
42-
*/
4338
$scope.category = {};
4439

4540
/**
@@ -55,7 +50,7 @@ function ($scope, $routeParams, $location, $q, categoryApiService, dashboardUtil
5550
var result = response.result || {};
5651
$scope.category = result;
5752
$scope.category.parent = $scope.category['parent_id'];
58-
$scope.category.products = $scope.category.product_ids;
53+
savedProducts = $scope.category.product_ids;
5954
});
6055
}
6156

@@ -64,34 +59,34 @@ function ($scope, $routeParams, $location, $q, categoryApiService, dashboardUtil
6459
};
6560

6661
$scope.saveProducts = function () {
67-
var promises = [];
68-
69-
var categoryId = $scope.category.id || $scope.category._id;
70-
var _prev = $scope.category.product_ids;
71-
var _new = $scope.category.products;
72-
73-
var products_to_remove = _.difference(_prev,_new);
74-
var products_to_add = _.difference(_new,_prev);
75-
76-
if (products_to_remove.length){
77-
_.each(products_to_remove, function(productID){
78-
promises.push(categoryApiService.removeProduct({
79-
categoryID: categoryId,
80-
productID: productID
81-
}))
82-
})
83-
}
62+
var categoryID = $scope.category.id || $scope.category._id;
63+
var newProductList = $scope.category.product_ids;
8464

85-
if (products_to_add.length){
86-
_.each(products_to_add, function(productID){
87-
promises.push(categoryApiService.addProduct({
88-
categoryId: categoryId,
89-
productId: productID
90-
}))
91-
})
92-
}
65+
var toRemove = _.difference(savedProducts, newProductList);
66+
var toAdd = _.difference(newProductList, savedProducts);
67+
68+
var promises = _.map(toRemove, removePid);
69+
promises = promises.concat( _.map(toAdd, addPid) );
9370

9471
return $q.all(promises);
72+
73+
/////////////////
74+
75+
function removePid(productID){
76+
var params = {
77+
categoryID: categoryID,
78+
productID: productID,
79+
};
80+
return categoryApiService.removeProduct(params).$promise;
81+
}
82+
83+
function addPid(productID){
84+
var params = {
85+
categoryID: categoryID,
86+
productID: productID,
87+
};
88+
return categoryApiService.addProduct(params).$promise;
89+
}
9590
};
9691

9792
/**
@@ -101,75 +96,81 @@ function ($scope, $routeParams, $location, $q, categoryApiService, dashboardUtil
10196
$scope.save = function () {
10297
$('[ng-click="save()"]').addClass('disabled').append('<i class="fa fa-spin fa-spinner"><i>').siblings('.btn').addClass('disabled');
10398

104-
var id, defer, saveSuccess, saveError, updateSuccess, updateError;
105-
defer = $q.defer();
99+
var defer = $q.defer();
100+
var id = $scope.category.id || $scope.category._id;
101+
102+
// Props that aren't recognized by the server
103+
delete $scope.category.parent;
104+
delete $scope.category.path;
105+
delete $scope.category.products;
106+
107+
if (!id) {
108+
if ($scope.category.name !== '') {
109+
110+
// Props that aren't recognized by the server
111+
delete $scope.category.product_ids;
112+
113+
categoryApiService.save($scope.category).$promise
114+
.then(saveSuccess, saveError)
115+
.then(function(){
116+
savedProducts = $scope.category.product_ids;
117+
});
118+
}
119+
} else {
120+
$scope.category.id = id;
121+
$scope.saveProducts().then(function () {
122+
123+
// Props that aren't recognized by the server
124+
delete $scope.category.product_ids;
106125

107-
if (typeof $scope.category !== "undefined") {
108-
id = $scope.category.id || $scope.category._id;
126+
categoryApiService.update($scope.category).$promise
127+
.then(updateSuccess, updateError)
128+
.then(function(){
129+
savedProducts = $scope.category.product_ids;
130+
});
131+
});
109132
}
110133

111-
saveSuccess = function (response) {
134+
return defer.promise;
135+
136+
////////////////
137+
138+
function saveSuccess(response) {
112139
if (response.error === null) {
113140
$scope.category = response.result || getDefaultCategory();
114141
$scope.message = dashboardUtilsService.getMessage(null, 'success', 'Category was created successfully');
115142
defer.resolve(true);
116143
}
117-
$('[ng-click="save()"]').removeClass('disabled').children('i').remove();
118-
$('[ng-click="save()"]').siblings('.btn').removeClass('disabled');
144+
145+
allowSaving();
119146
};
120147

121-
saveError = function () {
148+
function saveError() {
122149
defer.resolve(false);
123-
$('[ng-click="save()"]').removeClass('disabled').children('i').remove();
124-
$('[ng-click="save()"]').siblings('.btn').removeClass('disabled');
150+
allowSaving();
125151
};
126152

127-
updateSuccess = function (response) {
153+
function updateSuccess(response) {
128154
if (response.error === null) {
129155
$scope.category = response.result || getDefaultCategory();
130156
$scope.message = dashboardUtilsService.getMessage(null, 'success', 'Product was updated successfully');
131157
defer.resolve(true);
132-
$('[ng-click="save()"]').removeClass('disabled').children('i').remove();
133-
$('[ng-click="save()"]').siblings('.btn').removeClass('disabled');
158+
159+
allowSaving();
134160
}
135161
};
136162

137-
updateError = function () {
163+
function updateError() {
138164
defer.resolve(false);
139-
$('[ng-click="save()"]').removeClass('disabled').children('i').remove();
140-
$('[ng-click="save()"]').siblings('.btn').removeClass('disabled');
165+
allowSaving();
141166
};
142167

143-
delete $scope.category.parent;
144-
delete $scope.category.path;
145-
146-
147-
if (!id) {
148-
if ($scope.category.name !== '') {
149-
150-
delete $scope.category.products;
151-
categoryApiService.save($scope.category).$promise
152-
.then(saveSuccess, saveError)
153-
.then(function(){
154-
$scope.category.products = $scope.category.product_ids;
155-
});
156-
}
157-
} else {
158-
$scope.category.id = id;
159-
$scope.saveProducts().then(function () {
160-
161-
// Clean the associated product list off, before posting up
162-
delete $scope.category.products;
163-
categoryApiService.update($scope.category).$promise
164-
.then(updateSuccess, updateError)
165-
.then(function(){
166-
$scope.category.products = $scope.category.product_ids;
167-
});
168-
});
169-
168+
// Refactor
169+
function allowSaving() {
170+
$('[ng-click="save()"]').removeClass('disabled').children('i').remove();
171+
$('[ng-click="save()"]').siblings('.btn').removeClass('disabled');
170172
}
171173

172-
return defer.promise;
173174
};
174175

175176
}]);
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
angular.module("configModule")
2+
3+
.directive('otStoreDate',
4+
['timezoneService', '$filter',
5+
function(timezoneService, $filter) {
6+
return {
7+
restrict: 'EA',
8+
template: '{{localDate}}',
9+
scope: {
10+
'date' : '=',
11+
},
12+
link: function(scope, element, attrs) {
13+
14+
scope.localDate = '';
15+
16+
activate();
17+
18+
////////////////
19+
20+
function activate() {
21+
update();
22+
scope.$watch('date', update);
23+
}
24+
25+
function update() {
26+
scope.localDate = scope.date ? 'Loading...' : '-';
27+
28+
if (!scope.date) {
29+
return;
30+
}
31+
32+
timezoneService.get().then(function(tz){
33+
scope.localDate = $filter('date')(scope.date, 'MM/dd/yyyy hh:mma', tz);
34+
});
35+
}
36+
}
37+
};
38+
}
39+
]);
40+

src/app/config/filters/ot-storedate.js

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/app/config/init.js

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
/**
2-
* Config Module
3-
*/
4-
angular.module("configModule", ["ngRoute", "ngResource", "coreModule"])
1+
angular.module('configModule', [
2+
'ngRoute',
3+
'ngResource',
4+
'coreModule'
5+
])
56

6-
.config(["$routeProvider", function ($routeProvider) {
7+
.config(['$routeProvider', function($routeProvider) {
78
$routeProvider
8-
.when("/settings/:group", {
9-
templateUrl: "/views/config/edit.html",
10-
controller: "configEditController"
9+
.when('/settings/:group', {
10+
templateUrl: '/views/config/edit.html',
11+
controller: 'configEditController',
1112
});
12-
}])
13+
}]);
1314

14-
.run(['timezoneService', function (timezoneService) {
15-
timezoneService.init();
16-
}]);

0 commit comments

Comments
 (0)