Skip to content
This repository has been archived by the owner on Nov 3, 2020. It is now read-only.

Commit

Permalink
users details
Browse files Browse the repository at this point in the history
  • Loading branch information
gaetancollaud committed Oct 4, 2015
1 parent b0cb802 commit 5709dc6
Show file tree
Hide file tree
Showing 6 changed files with 160 additions and 14 deletions.
2 changes: 1 addition & 1 deletion sql/data_update/accounting-upate.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ DELETE FROM r_group_role WHERE group_id=(
SELECT group_id FROM t_group WHERE technicalname = 'comite'
) AND role_id=(
SELECT role_id FROM t_role WHERE technicalname = 'ROLE_ACCOUNTING_MANAGE'
)
);

INSERT INTO t_group (technicalname,name)VALUES('accounting','Accounting');

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ public interface UserRepository extends JpaRepository<UserEO, Integer>{
@Query("SELECT u "
+ " FROM UserEO u "
+ " LEFT JOIN FETCH u.balance b "
+ " LEFT JOIN FETCH u.membershipType mt "
+ " LEFT JOIN FETCH u.subscriptions s "
+ " WHERE u.enabled=1 ")
List<UserEO> findAll();

Expand Down
73 changes: 69 additions & 4 deletions src/main/webapp/components/user/list-ctrl.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,65 @@
angular.module('Fablab').controller('UserListController', function ($scope, $filter, $location,
ngTableParams, UserService, NotificationService) {

$scope.details = {
open: false
};

var resetDetails = function () {
var reset = {
balance: {
positiv: {
nb: 0,
total: 0
},
neutral: {
nb: 0
},
negativ: {
nb: 0,
total: 0
}
},
subscription: {
positiv: 0,
negativ: 0,
unconfirmed: 0
},
nb:0
};
angular.extend($scope.details, reset);
return $scope.details;
};

var computeDetails = function (users) {
var d = resetDetails();
users.forEach(function (u) {
d.nb++;

//subscription
if (u.subscriptions.length === 0) {
d.subscription.unconfirmed++;
} else {
if ($filter('lastSubscriptionDays')(u.subscriptions) < 0) {
d.subscription.negativ++;
} else {
d.subscription.positiv++;
}
}

//balance
if (u.balance.value == 0) {
d.balance.neutral.nb++;
} else if (u.balance.value < 0) {
d.balance.negativ.nb++;
d.balance.negativ.total += -u.balance.value;
} else {
d.balance.positiv.nb++;
d.balance.positiv.total += u.balance.value;
}
});
};

$scope.tableParams = new ngTableParams(
angular.extend({
page: 1, // show first page
Expand Down Expand Up @@ -28,7 +87,13 @@ angular.module('Fablab').controller('UserListController', function ($scope, $fil

var updateUserList = function () {
UserService.list(function (data) {
computeDetails(data);
$scope.users = data;
$scope.users.forEach(function (u) {
u.balance.value = $filter('number')(u.balance.value, 2);
u.subsriptionExpireDay = $filter('lastSubscriptionDays')(u.subscriptions);
u.subsriptionExpireDayText = $filter('lastSubscriptionDaysText')(u.subscriptions);
});
$scope.tableParams.reload();
});
};
Expand All @@ -43,10 +108,10 @@ angular.module('Fablab').controller('UserListController', function ($scope, $fil
NotificationService.notify("success", "TODO Mailing list mise à jour");
});
};
$scope.export = function(){
window.location=App.API.USER_API+"/export";
}

$scope.export = function () {
window.location = App.API.USER_API + "/export";
};

updateUserList();

Expand Down
43 changes: 43 additions & 0 deletions src/main/webapp/components/user/list-view.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@

<div class="header-control">
<div class="btn-group">
<a class="btn btn-primary" href="" ng-click="details.open=!details.open">
{{'button.detail'| translate}}
</a>
<a class="btn btn-success" href="#/users/edit">{{'button.create'| translate}} <span class="glyphicon glyphicon-plus"> </span></a>
<a class="btn btn-danger" ng-click="export()">{{'button.export'| translate}} <span class="glyphicon glyphicon-export"> </span></a>
<a class="btn btn-warning" href=""
Expand All @@ -9,6 +12,40 @@
</div>
</div>


<div ng-show="details.open">
<div class="well">
<div class="row">
<div class="col-md-3">Total users</div>
<div class="col-md-2 text-bold">{{details.nb}} </div>
</div>
<div class="row text-success">
<div class="col-md-3">Users with positiv balance</div>
<div class="col-md-2 text-bold">{{details.balance.positiv.nb}} ({{details.balance.positiv.total|currency}})</div>
<div class="col-md-1"></div>
<div class="col-md-3">Memer with valid subscription</div>
<div class="col-md-2 text-bold">{{details.subscription.positiv}}</div>
<div class="col-md-1"></div>
</div>
<div class="row">
<div class="col-md-3">Users with neutral balance</div>
<div class="col-md-2 text-bold">{{details.balance.neutral.nb}}</div>
<div class="col-md-1"></div>
<div class="col-md-3">Never confirmed subscription</div>
<div class="col-md-2 text-bold">{{details.subscription.unconfirmed}}</div>
<div class="col-md-1"></div>
</div>
<div class="row text-danger">
<div class="col-md-3">Users with negativ balance</div>
<div class="col-md-2 text-bold">{{details.balance.negativ.nb}} ({{details.balance.negativ.total|currency}})</div>
<div class="col-md-1"></div>
<div class="col-md-3">Memer with valid subscription</div>
<div class="col-md-2 text-bold">{{details.subscription.negativ}}</div>
<div class="col-md-1"></div>
</div>
</div>
</div>

<table ng-table="tableParams" class="table" show-filter="true">
<tr ng-repeat="user in $data">
<td
Expand Down Expand Up @@ -40,6 +77,12 @@
sortable="'membershipType.name'">
{{user.membershipType.name}}
</td>
<td
data-title="'user.subscription.text' | translate"
sortable="'subsriptionExpireDay'"
ng-class="{'negativBalance' : user.subsriptionExpireDay < 0}">
<span ng-bind-html="user.subsriptionExpireDayText"></span>
</td>
<td>
<div class="btn-group">
<a class="btn btn-sm btn-default" href="#/users/edit/{{user.id}}"><span class="glyphicon glyphicon-pencil"></span></a>
Expand Down
52 changes: 43 additions & 9 deletions src/main/webapp/components/user/user-filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,66 @@
'use strict';

var app = angular.module('Fablab');

app.filter('prettyUser', function () {
return function (user) {
if(!user){
if (!user) {
return '';
}
return user.firstname + " " + user.lastname;
};
});

app.filter('lastSubscription', function ($filter, $translate) {

app.filter('lastSubscription', function ($filter) {
return function (subscriptions) {
if (subscriptions && subscriptions.length > 0) {
var ordered = $filter('orderBy')(subscriptions, 'dateSubscription', true);
return ordered[0];
}
};
});

app.filter('lastSubscriptionDetail', function ($filter, $translate) {
var dateFormat;
$translate('date.format.date').then(function (d) {
dateFormat = d;
});
return function (subscriptions) {
if (!subscriptions || subscriptions.length === 0) {
var sub = $filter('lastSubscription')(subscriptions);
if (!sub) {
return '<span class="text-danger text-bold">Not a member yet</span>';//FIXME
}
var ordered = $filter('orderBy')(subscriptions, 'dateSubscription', true);
var sub = moment(ordered[0].dateSubscription);
sub.add(1, 'year');//FIXME get from duration
var diff = sub.diff(moment(), 'days');
var subDate = moment(sub.dateSubscription);
subDate.add(1, 'year');//FIXME get from duration
var diff = subDate.diff(moment(), 'days');
var diffText = diff > 0 ? diff + ' days left' : 'expired';
var clazz = diff < 0 ? 'text-danger text-bold' : '';
return '<span class="'+clazz+'">'+sub.format(dateFormat) + ' - ' + diffText+'</span>';
return '<span class="' + clazz + '">' + subDate.format(dateFormat) + ' - ' + diffText + '</span>';
};
});

app.filter('lastSubscriptionDays', function ($filter, $translate) {
return function (subscriptions) {
var sub = $filter('lastSubscription')(subscriptions);
if (!sub) {
return 0;
}
var subDate = moment(sub.dateSubscription);
subDate.add(1, 'year');//FIXME get from duration
return subDate.diff(moment(), 'days');
};
});

app.filter('lastSubscriptionDaysText', function ($filter, $translate) {
return function (subscriptions) {
var sub = $filter('lastSubscription')(subscriptions);
if (!sub) {
return '<span class="text-warning text-bold">Never confirm</span>';//FIXME
}
var diff = $filter('lastSubscriptionDays')(subscriptions);
var clazz = diff < 0 ? 'text-danger text-bold' : 'text-success';
return '<span class="' + clazz + '">' + diff + ' days </span>';
};
});

Expand Down
2 changes: 2 additions & 0 deletions src/main/webapp/i18n/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ angular.module('Fablab').config(function ($translateProvider) {
create: 'Create',
export: 'Export',
search: 'Search',
detail: 'Detail',
updateMailingList: 'Update mailing list'
},
panel: {
Expand Down Expand Up @@ -90,6 +91,7 @@ angular.module('Fablab').config(function ($translateProvider) {
female: 'Female'
},
subscription: {
text:'Subscription',
subscribe: 'Subscribe',
confirmButton: 'Confirm',
confirmTitle: 'Confirm subscription',
Expand Down

0 comments on commit 5709dc6

Please sign in to comment.