mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-01-29 18:52:22 +01:00
close an accounting period from interface to db through api
This commit is contained in:
parent
b1b5edbfb4
commit
d89f9e9301
@ -392,7 +392,10 @@ Application.Controllers.controller('InvoicesController', ['$scope', '$state', 'I
|
||||
$uibModal.open({
|
||||
templateUrl: '<%= asset_path "admin/invoices/closePeriodModal.html" %>',
|
||||
controller: 'ClosePeriodModalController',
|
||||
size: 'lg'
|
||||
size: 'lg',
|
||||
resolve: {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -614,12 +617,12 @@ Application.Controllers.controller('AvoirModalController', ['$scope', '$uibModal
|
||||
/**
|
||||
* Controller used in the modal window allowing an admin to close an accounting period
|
||||
*/
|
||||
Application.Controllers.controller('ClosePeriodModalController', ['$scope', '$uibModalInstance', 'Invoice', 'AccountingPeriod', 'growl', '_t',
|
||||
function ($scope, $uibModalInstance, Invoice, AccountingPeriod, growl, _t) {
|
||||
Application.Controllers.controller('ClosePeriodModalController', ['$scope', '$uibModalInstance', 'Invoice', 'AccountingPeriod', 'dialogs', 'growl', '_t',
|
||||
function ($scope, $uibModalInstance, Invoice, AccountingPeriod, dialogs, growl, _t) {
|
||||
/* PUBLIC SCOPE */
|
||||
$scope.period = {
|
||||
start_date: null,
|
||||
end_date: null
|
||||
start_at: null,
|
||||
end_at: null
|
||||
};
|
||||
|
||||
// AngularUI-Bootstrap datepickers parameters to define the period to close
|
||||
@ -643,11 +646,35 @@ Application.Controllers.controller('ClosePeriodModalController', ['$scope', '$ui
|
||||
};
|
||||
|
||||
/**
|
||||
* Validate the refunding and generate a refund invoice
|
||||
* Validate the close period creation
|
||||
*/
|
||||
$scope.ok = function () {
|
||||
$uibModalInstance.close({ period: $scope.period });
|
||||
growl.info(_t('not_implemented_yet'));
|
||||
dialogs.confirm(
|
||||
{
|
||||
resolve: {
|
||||
object () {
|
||||
return {
|
||||
title: _t('invoices.confirmation_required'),
|
||||
msg: _t('invoices.confirm_close')
|
||||
};
|
||||
}
|
||||
}
|
||||
},
|
||||
function () { // creation confirmed
|
||||
AccountingPeriod.save({ accounting_period: $scope.period }, function (resp) {
|
||||
growl.success(_t(
|
||||
'invoices.period_START_END_closed_success',
|
||||
{ START: moment(resp.start_at).format('LL'), END: moment(resp.end_at).format('LL') }
|
||||
));
|
||||
$uibModalInstance.close(resp);
|
||||
}
|
||||
, function(error) {
|
||||
growl.error(_t('invoices.failed_to_close_period'));
|
||||
console.error(error);
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1,11 +1,11 @@
|
||||
'use strict';
|
||||
|
||||
Application.Services.factory('AccountingPeriod', ['$resource', function ($resource) {
|
||||
return $resource('/api/accounting_period/:id',
|
||||
return $resource('/api/accounting_periods/:id',
|
||||
{ id: '@id' }, {
|
||||
lastClosingEnd: {
|
||||
method: 'GET',
|
||||
url: '/api/accounting_period/last_closing_end'
|
||||
url: '/api/accounting_periods/last_closing_end'
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -3,14 +3,14 @@
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form name="closePeriodForm" novalidate="novalidate" class="row">
|
||||
<div class="form-group col-md-6" ng-class="{'has-error': closePeriodForm.start_date.$dirty && closePeriodForm.start_date.$invalid }">
|
||||
<div class="form-group col-md-6" ng-class="{'has-error': closePeriodForm.start_at.$dirty && closePeriodForm.start_at.$invalid }">
|
||||
<label translate>{{ 'invoices.close_from_date' }}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
|
||||
<input type="text"
|
||||
class="form-control"
|
||||
name="start_date"
|
||||
ng-model="period.start_date"
|
||||
name="start_at"
|
||||
ng-model="period.start_at"
|
||||
uib-datepicker-popup="{{datePicker.format}}"
|
||||
datepicker-options="datePicker.options"
|
||||
is-open="datePicker.startOpened"
|
||||
@ -18,16 +18,16 @@
|
||||
ng-click="openDatePicker($event, 'start')"
|
||||
required/>
|
||||
</div>
|
||||
<span class="help-block" ng-show="closePeriodForm.start_date.$dirty && closePeriodForm.start_date.$error.required" translate>{{ 'invoices.start_date_is_required' }}</span>
|
||||
<span class="help-block" ng-show="closePeriodForm.start_at.$dirty && closePeriodForm.start_at.$error.required" translate>{{ 'invoices.start_date_is_required' }}</span>
|
||||
</div>
|
||||
<div class="form-group col-md-6" ng-class="{'has-error': closePeriodForm.end_date.$dirty && closePeriodForm.end_date.$invalid }">
|
||||
<div class="form-group col-md-6" ng-class="{'has-error': closePeriodForm.end_at.$dirty && closePeriodForm.end_at.$invalid }">
|
||||
<label translate>{{ 'invoices.close_until_date' }}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
|
||||
<input type="text"
|
||||
class="form-control"
|
||||
name="end_date"
|
||||
ng-model="period.end_date"
|
||||
name="end_at"
|
||||
ng-model="period.end_at"
|
||||
uib-datepicker-popup="{{datePicker.format}}"
|
||||
datepicker-options="datePicker.options"
|
||||
is-open="datePicker.endOpened"
|
||||
@ -35,7 +35,7 @@
|
||||
ng-click="openDatePicker($event, 'end')"
|
||||
required/>
|
||||
</div>
|
||||
<span class="help-block" ng-show="closePeriodForm.end_date.$dirty && closePeriodForm.end_date.$error.required" translate>{{ 'invoices.end_date_is_required' }}</span>
|
||||
<span class="help-block" ng-show="closePeriodForm.end_at.$dirty && closePeriodForm.end_at.$error.required" translate>{{ 'invoices.end_date_is_required' }}</span>
|
||||
</div>
|
||||
</form>
|
||||
<div>
|
||||
|
@ -1,7 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# API Controller for resources of AccountingPeriod
|
||||
class API::AccountingPeriodsController < API::ApiController
|
||||
|
||||
before_action :authenticate_user!, except: %i[index show]
|
||||
before_action :set_period, only: %i[show update destroy]
|
||||
before_action :authenticate_user!
|
||||
before_action :set_period, only: %i[show]
|
||||
|
||||
def index
|
||||
@accounting_periods = AccountingPeriod.all
|
||||
@ -11,7 +14,7 @@ class API::AccountingPeriodsController < API::ApiController
|
||||
|
||||
def create
|
||||
authorize AccountingPeriod
|
||||
@accounting_period = AccountingPeriod.new(tag_params)
|
||||
@accounting_period = AccountingPeriod.new(period_params)
|
||||
if @accounting_period.save
|
||||
render :show, status: :created, location: @accounting_period
|
||||
else
|
||||
@ -19,6 +22,11 @@ class API::AccountingPeriodsController < API::ApiController
|
||||
end
|
||||
end
|
||||
|
||||
def last_closing_end
|
||||
authorize AccountingPeriod
|
||||
@last_period = AccountingPeriodService.find_last_period
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_period
|
||||
@ -26,6 +34,6 @@ class API::AccountingPeriodsController < API::ApiController
|
||||
end
|
||||
|
||||
def period_params
|
||||
params.require(:accounting_period).permit(:start_date, :end_date)
|
||||
params.require(:accounting_period).permit(:start_at, :end_at)
|
||||
end
|
||||
end
|
||||
|
10
app/policies/accounting_period_policy.rb
Normal file
10
app/policies/accounting_period_policy.rb
Normal file
@ -0,0 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# Check the access policies for API::AccountingPeriodsController
|
||||
class AccountingPeriodPolicy < ApplicationPolicy
|
||||
%w[index show create last_closing_end].each do |action|
|
||||
define_method "#{action}?" do
|
||||
user.is_admin?
|
||||
end
|
||||
end
|
||||
end
|
9
app/services/accounting_period_service.rb
Normal file
9
app/services/accounting_period_service.rb
Normal file
@ -0,0 +1,9 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# Provides methods for accessing AccountingPeriods properties
|
||||
class AccountingPeriodService
|
||||
|
||||
def find_last_period
|
||||
AccountingPeriod.where(end_at: AccountingPeriod.select('max(end_at)')).first
|
||||
end
|
||||
end
|
@ -0,0 +1,3 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
json.extract! @last_period, :id, :end_at
|
3
app/views/api/accounting_periods/show.json.jbuilder
Normal file
3
app/views/api/accounting_periods/show.json.jbuilder
Normal file
@ -0,0 +1,3 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
json.extract! @accounting_period, :id, :start_at, :end_at, :closed_at, :closed_by, :created_at
|
@ -412,6 +412,7 @@ en:
|
||||
end_date: "To"
|
||||
closed_at: "Closed at"
|
||||
closed_by: "By"
|
||||
confirmation_required: "Confirmation required"
|
||||
|
||||
members:
|
||||
# management of users, labels, groups, and so on
|
||||
|
@ -412,6 +412,10 @@ fr:
|
||||
end_date: "Au"
|
||||
closed_at: "Clôturé le"
|
||||
closed_by: "Par"
|
||||
confirmation_required: "Confirmation requise"
|
||||
confirm_close: "Êtes-vous sur de vouloir clôturer cette période comptable ? Toute modification ultérieure sera impossible."
|
||||
period_START_END_closed_success: "La période comptable du {{START}} au {{END}} a bien été clôturée"
|
||||
failed_to_close_period: "Une erreur est survenue, impossible de clôturer la période comptable"
|
||||
|
||||
members:
|
||||
# gestion des utilisateurs, des groupes, des étiquettes, etc.
|
||||
|
@ -127,6 +127,9 @@ Rails.application.routes.draw do
|
||||
end
|
||||
resources :price_categories
|
||||
resources :spaces
|
||||
resources :accounting_periods do
|
||||
get 'last_closing_end'
|
||||
end
|
||||
|
||||
# i18n
|
||||
# regex allows using dots in URL for 'state'
|
||||
|
Loading…
x
Reference in New Issue
Block a user