Move up all sources in src directory.
This commit is contained in:
141
src/scheduler/index.js
Normal file
141
src/scheduler/index.js
Normal file
@ -0,0 +1,141 @@
|
||||
// vim: set tw=80 ts=4 sw=4 sts=4:
|
||||
/*
|
||||
This file is part of Accountant.
|
||||
|
||||
Accountant is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Accountant is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with Accountant. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/* jshint node: true */
|
||||
'use strict';
|
||||
|
||||
var angular = require('angular');
|
||||
|
||||
var ngMessages = require('angular-messages'),
|
||||
ngUiNotification = require('angular-ui-notification'),
|
||||
ngBootbox = require('ngbootbox'),
|
||||
ngStrap = require('angular-strap'),
|
||||
ngXEditable = require('angular-xeditable');
|
||||
|
||||
// Note: ngBootbox seems to have no module.exports.
|
||||
ngBootbox = 'ngBootbox';
|
||||
|
||||
// Note: angular-xeditable seems to have no module.exports.
|
||||
ngXEditable = 'xeditable';
|
||||
|
||||
var schedulerModule = angular.module('accountant.scheduler', [
|
||||
ngMessages,
|
||||
ngUiNotification,
|
||||
ngBootbox,
|
||||
ngXEditable,
|
||||
ngStrap
|
||||
])
|
||||
|
||||
.config(function($resourceProvider) {
|
||||
// Keep trailing slashes to avoid redirect by flask..
|
||||
$resourceProvider.defaults.stripTrailingSlashes = false;
|
||||
})
|
||||
|
||||
.factory('ScheduledOperation', function($resource) {
|
||||
return $resource(
|
||||
'/api/scheduled_operation/:id', {
|
||||
id: '@id'
|
||||
}
|
||||
);
|
||||
})
|
||||
|
||||
.controller('SchedulerController', function($rootScope, $routeParams, $ngBootbox, Notification, ScheduledOperation) {
|
||||
var vm = this;
|
||||
|
||||
// Operation store.
|
||||
vm.operations = [];
|
||||
|
||||
/*
|
||||
* Add a new operation at the beginning of th array.
|
||||
*/
|
||||
vm.add = function() {
|
||||
var operation = new ScheduledOperation({
|
||||
// eslint-disable-next-line camelcase
|
||||
account_id: $routeParams.accountId
|
||||
});
|
||||
|
||||
// Insert new operation at the beginning of the array.
|
||||
vm.operations.splice(0, 0, operation);
|
||||
};
|
||||
|
||||
/*
|
||||
* Load operations.
|
||||
*/
|
||||
vm.load = function() {
|
||||
vm.operations = ScheduledOperation.query({
|
||||
// eslint-disable-next-line camelcase
|
||||
account_id: $routeParams.accountId
|
||||
});
|
||||
};
|
||||
|
||||
/*
|
||||
* Save operation.
|
||||
*/
|
||||
vm.save = function($data, $index) {
|
||||
var operation;
|
||||
|
||||
if ($data.$save) {
|
||||
operation = $data;
|
||||
} else {
|
||||
operation = vm.operations[$index];
|
||||
operation = angular.merge(operation, $data);
|
||||
}
|
||||
|
||||
return operation.$save().then(function(data) {
|
||||
Notification.success('Operation #' + data.id + ' saved.');
|
||||
});
|
||||
};
|
||||
|
||||
/*
|
||||
* Cancel operation edition. Delete if new.
|
||||
*/
|
||||
vm.cancelEdit = function(operation, rowform, $index) {
|
||||
if (operation.id) {
|
||||
rowform.$cancel();
|
||||
} else {
|
||||
vm.operations.splice($index, 1);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* Delete operation.
|
||||
*/
|
||||
vm.delete = function(operation, $index) {
|
||||
var id = operation.id;
|
||||
|
||||
$ngBootbox.confirm(
|
||||
'Voulez-vous supprimer l\'operation planifiée \\\'' + operation.label + '\\\' ?',
|
||||
function(result) {
|
||||
if (result) {
|
||||
operation.$delete().then(function() {
|
||||
Notification.success('Operation #' + id + ' deleted.');
|
||||
|
||||
// Remove account from array.
|
||||
vm.operations.splice($index, 1);
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
// Load operations on controller initialization.
|
||||
vm.load();
|
||||
})
|
||||
|
||||
;
|
||||
|
||||
module.exports = schedulerModule;
|
142
src/scheduler/scheduler.html
Normal file
142
src/scheduler/scheduler.html
Normal file
@ -0,0 +1,142 @@
|
||||
<!--
|
||||
This file is part of Accountant.
|
||||
|
||||
Accountant is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Accountant is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with Accountant. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<!-- vim: set tw=80 ts=2 sw=2 sts=2: -->
|
||||
<div class="row">
|
||||
<table class="table table-striped table-condensed table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-md-1">Date de début</th>
|
||||
<th class="col-md-1">Date de fin</th>
|
||||
<th class="col-md-1">Jour</th>
|
||||
<th class="col-md-1">Fréq.</th>
|
||||
<th>Libellé de l'opération</th>
|
||||
<th class="col-md-1">Montant</th>
|
||||
<th class="col-md-2">Catégorie</th>
|
||||
<th class="col-md-1">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
<button class="btn btn-success" ng-click="schedulerCtrl.add()">
|
||||
Ajouter
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="{{ operation.id }}" class="form-inline"
|
||||
ng-repeat="operation in schedulerCtrl.operations">
|
||||
<td class="col-md-1">
|
||||
<span editable-text="operation.start_date"
|
||||
e-style="width: 100%"
|
||||
e-bs-datepicker e-data-date-format="yyyy-MM-dd"
|
||||
e-name="start_date" e-form="rowform" e-required>
|
||||
{{ operation.start_date | date: "yyyy-MM-dd" }}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<span editable-text="operation.stop_date"
|
||||
e-style="width: 100%"
|
||||
e-bs-datepicker e-data-date-format="yyyy-MM-dd"
|
||||
e-name="stop_date" e-form="rowform" e-required>
|
||||
{{ operation.stop_date | date: "yyyy-MM-dd" }}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<span editable-number="operation.day"
|
||||
e-style="width: 100%"
|
||||
e-name="day" e-form="rowform" e-required>
|
||||
{{ operation.day }}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<span editable-number="operation.frequency"
|
||||
e-style="width: 100%"
|
||||
e-name="frequency" e-form="rowform" e-required>
|
||||
{{ operation.frequency }}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<span editable-text="operation.label"
|
||||
e-style="width: 100%"
|
||||
e-placeholder="Libellé de l'opération"
|
||||
e-name="label" e-form="rowform" e-required>
|
||||
{{ operation.label }}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<span editable-number="operation.value"
|
||||
e-style="width: 100%"
|
||||
e-name="value" e-form="rowform" e-required>
|
||||
{{ operation.value | currency : "€" }}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<span editable-text="operation.category"
|
||||
e-style="width: 100%"
|
||||
e-name="category" e-form="rowform">
|
||||
{{ operation.category }}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<form editable-form name="rowform"
|
||||
onbeforesave="schedulerCtrl.save($data, $index)"
|
||||
shown="!operation.id">
|
||||
<div class="btn-group btn-group-xs">
|
||||
<!-- Save current operation -->
|
||||
<button type="submit" class="btn btn-success"
|
||||
ng-if="rowform.$visible" title="Save">
|
||||
<span class="fa fa-floppy-o"></span>
|
||||
</button>
|
||||
|
||||
<!-- Edit operation. -->
|
||||
<button type="button" class="btn btn-default"
|
||||
ng-if="!rowform.$visible"
|
||||
ng-click="rowform.$show()" title="edit">
|
||||
<span class="fa fa-pencil-square-o"></span>
|
||||
</button>
|
||||
|
||||
<!-- Cancel edit. -->
|
||||
<button type="button" class="btn btn-default"
|
||||
ng-if="rowform.$visible"
|
||||
ng-click="schedulerCtrl.cancelEdit(operation, rowform, $index)"
|
||||
title="Cancel">
|
||||
<span class="fa fa-times"></span>
|
||||
</button>
|
||||
|
||||
<!-- Remove operation. -->
|
||||
<button type="button" class="btn btn-default"
|
||||
ng-if="operation.id"
|
||||
ng-click="schedulerCtrl.delete(operation, $index)"
|
||||
title="remove">
|
||||
<span class="fa fa-trash"></span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
Reference in New Issue
Block a user