diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php
index eaa3de6529..dc08c1af9d 100644
--- a/app/Http/Controllers/AccountController.php
+++ b/app/Http/Controllers/AccountController.php
@@ -429,6 +429,7 @@ class AccountController extends BaseController
'currencies' => Cache::get('currencies'),
'title' => trans('texts.localization'),
'weekdays' => Utils::getTranslatedWeekdayNames(),
+ 'months' => Utils::getMonthOptions(),
];
return View::make('accounts.localization', $data);
@@ -674,11 +675,9 @@ class AccountController extends BaseController
* @param $section
* @return \Illuminate\Http\RedirectResponse
*/
- public function doSection($section = ACCOUNT_COMPANY_DETAILS)
+ public function doSection($section)
{
- if ($section === ACCOUNT_COMPANY_DETAILS) {
- return AccountController::saveDetails();
- } elseif ($section === ACCOUNT_LOCALIZATION) {
+ if ($section === ACCOUNT_LOCALIZATION) {
return AccountController::saveLocalization();
} elseif ($section == ACCOUNT_PAYMENTS) {
return self::saveOnlinePayments();
@@ -1225,6 +1224,7 @@ class AccountController extends BaseController
$account->military_time = Input::get('military_time') ? true : false;
$account->show_currency_code = Input::get('show_currency_code') ? true : false;
$account->start_of_week = Input::get('start_of_week') ? Input::get('start_of_week') : 0;
+ $account->financial_year_start = Input::get('financial_year_start') ? Input::get('financial_year_start') : null;
$account->save();
event(new UserSettingsChanged());
diff --git a/app/Http/Controllers/DashboardApiController.php b/app/Http/Controllers/DashboardApiController.php
index d5ff416e7e..c6cf454666 100644
--- a/app/Http/Controllers/DashboardApiController.php
+++ b/app/Http/Controllers/DashboardApiController.php
@@ -23,8 +23,8 @@ class DashboardApiController extends BaseAPIController
$dashboardRepo = $this->dashboardRepo;
$metrics = $dashboardRepo->totals($accountId, $userId, $viewAll);
- $paidToDate = $dashboardRepo->paidToDate($accountId, $userId, $viewAll);
- $averageInvoice = $dashboardRepo->averages($accountId, $userId, $viewAll);
+ $paidToDate = $dashboardRepo->paidToDate($account, $userId, $viewAll);
+ $averageInvoice = $dashboardRepo->averages($account, $userId, $viewAll);
$balances = $dashboardRepo->balances($accountId, $userId, $viewAll);
$activities = $dashboardRepo->activities($accountId, $userId, $viewAll);
$pastDue = $dashboardRepo->pastDue($accountId, $userId, $viewAll);
diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php
index 50c5d3d394..14cb4c638b 100644
--- a/app/Http/Controllers/DashboardController.php
+++ b/app/Http/Controllers/DashboardController.php
@@ -33,9 +33,9 @@ class DashboardController extends BaseController
$dashboardRepo = $this->dashboardRepo;
$metrics = $dashboardRepo->totals($accountId, $userId, $viewAll);
- $paidToDate = $dashboardRepo->paidToDate($accountId, $userId, $viewAll);
- $averageInvoice = $dashboardRepo->averages($accountId, $userId, $viewAll);
- $balances = $dashboardRepo->balances($accountId, $userId, $viewAll);
+ $paidToDate = $dashboardRepo->paidToDate($account, $userId, $viewAll);
+ $averageInvoice = $dashboardRepo->averages($account, $userId, $viewAll);
+ $balances = $dashboardRepo->balances($accountId, $userId, $viewAll);
$activities = $dashboardRepo->activities($accountId, $userId, $viewAll);
$pastDue = $dashboardRepo->pastDue($accountId, $userId, $viewAll);
$upcoming = $dashboardRepo->upcoming($accountId, $userId, $viewAll);
diff --git a/app/Http/Controllers/OnlinePaymentController.php b/app/Http/Controllers/OnlinePaymentController.php
index c49a4d6669..e7d709096e 100644
--- a/app/Http/Controllers/OnlinePaymentController.php
+++ b/app/Http/Controllers/OnlinePaymentController.php
@@ -75,6 +75,8 @@ class OnlinePaymentController extends BaseController
}
$invitation = $invitation->load('invoice.client.account.account_gateways.gateway');
+ $account = $invitation->account;
+ $account->loadLocalizationSettings($invitation->invoice->client);
if ( ! $gatewayTypeAlias) {
$gatewayTypeId = Session::get($invitation->id . 'gateway_type');
@@ -84,7 +86,7 @@ class OnlinePaymentController extends BaseController
$gatewayTypeId = $gatewayTypeAlias;
}
- $paymentDriver = $invitation->account->paymentDriver($invitation, $gatewayTypeId);
+ $paymentDriver = $account->paymentDriver($invitation, $gatewayTypeId);
try {
return $paymentDriver->startPurchase(Input::all(), $sourceId);
diff --git a/app/Libraries/Utils.php b/app/Libraries/Utils.php
index 0b3984acc2..0d001697d6 100644
--- a/app/Libraries/Utils.php
+++ b/app/Libraries/Utils.php
@@ -22,6 +22,9 @@ class Utils
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday",
];
+ public static $months = [
+ 'january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december',
+ ];
public static function isRegistered()
{
@@ -97,7 +100,7 @@ class Utils
if (Utils::isNinjaProd()) {
return false;
}
-
+
return \App\Models\Account::first()->hasFeature(FEATURE_WHITE_LABEL);
}
@@ -649,12 +652,23 @@ class Utils
return Utils::getYear($offset);
}
}
+
+ public static function getMonthOptions()
+ {
+ $months = [];
+
+ for ($i=1; $i<=count(static::$months); $i++) {
+ $month = static::$months[$i-1];
+ $number = $i < 10 ? '0' . $i : $i;
+ $months["2000-{$number}-01"] = trans("texts.{$month}");
+ }
+
+ return $months;
+ }
private static function getMonth($offset)
{
- $months = ['january', 'february', 'march', 'april', 'may', 'june',
- 'july', 'august', 'september', 'october', 'november', 'december', ];
-
+ $months = static::$months;
$month = intval(date('n')) - 1;
$month += $offset;
diff --git a/app/Models/Account.php b/app/Models/Account.php
index 4db6511136..b1b9a1ad74 100644
--- a/app/Models/Account.php
+++ b/app/Models/Account.php
@@ -69,6 +69,7 @@ class Account extends Eloquent
'enable_second_tax_rate',
'include_item_taxes_inline',
'start_of_week',
+ 'financial_year_start',
];
/**
diff --git a/app/Ninja/Repositories/DashboardRepository.php b/app/Ninja/Repositories/DashboardRepository.php
index 455497d130..f7cc88b6ca 100644
--- a/app/Ninja/Repositories/DashboardRepository.php
+++ b/app/Ninja/Repositories/DashboardRepository.php
@@ -175,29 +175,39 @@ class DashboardRepository
return $metrics->groupBy('accounts.id')->first();
}
- public function paidToDate($accountId, $userId, $viewAll)
+ public function paidToDate($account, $userId, $viewAll)
{
+ $accountId = $account->id;
$select = DB::raw(
- 'SUM('.DB::getQueryGrammar()->wrap('clients.paid_to_date', true).') as value,'
+ 'SUM('.DB::getQueryGrammar()->wrap('payments.amount', true).' - '.DB::getQueryGrammar()->wrap('payments.refunded', true).') as value,'
.DB::getQueryGrammar()->wrap('clients.currency_id', true).' as currency_id'
);
- $paidToDate = DB::table('accounts')
+ $paidToDate = DB::table('payments')
->select($select)
- ->leftJoin('clients', 'accounts.id', '=', 'clients.account_id')
- ->where('accounts.id', '=', $accountId)
- ->where('clients.is_deleted', '=', false);
+ ->leftJoin('invoices', 'invoices.id', '=', 'payments.invoice_id')
+ ->leftJoin('clients', 'clients.id', '=', 'invoices.client_id')
+ ->where('payments.account_id', '=', $accountId)
+ ->where('clients.is_deleted', '=', false)
+ ->where('invoices.is_deleted', '=', false)
+ ->whereNotIn('payments.payment_status_id', [PAYMENT_STATUS_VOIDED, PAYMENT_STATUS_FAILED]);
if (!$viewAll){
- $paidToDate = $paidToDate->where('clients.user_id', '=', $userId);
+ $paidToDate->where('invoices.user_id', '=', $userId);
}
- return $paidToDate->groupBy('accounts.id')
- ->groupBy(DB::raw('CASE WHEN '.DB::getQueryGrammar()->wrap('clients.currency_id', true).' IS NULL THEN CASE WHEN '.DB::getQueryGrammar()->wrap('accounts.currency_id', true).' IS NULL THEN 1 ELSE '.DB::getQueryGrammar()->wrap('accounts.currency_id', true).' END ELSE '.DB::getQueryGrammar()->wrap('clients.currency_id', true).' END'))
+ if ($account->financial_year_start) {
+ $yearStart = str_replace('2000', date('Y'), $account->financial_year_start);
+ $paidToDate->where('payments.payment_date', '>=', $yearStart);
+ }
+
+ return $paidToDate->groupBy('payments.account_id')
+ ->groupBy(DB::raw('CASE WHEN '.DB::getQueryGrammar()->wrap('clients.currency_id', true).' IS NULL THEN '.($account->currency_id ?: DEFAULT_CURRENCY).' ELSE '.DB::getQueryGrammar()->wrap('clients.currency_id', true).' END'))
->get();
}
- public function averages($accountId, $userId, $viewAll)
+ public function averages($account, $userId, $viewAll)
{
+ $accountId = $account->id;
$select = DB::raw(
'AVG('.DB::getQueryGrammar()->wrap('invoices.amount', true).') as invoice_avg, '
.DB::getQueryGrammar()->wrap('clients.currency_id', true).' as currency_id'
@@ -213,7 +223,12 @@ class DashboardRepository
->where('invoices.is_recurring', '=', false);
if (!$viewAll){
- $averageInvoice = $averageInvoice->where('invoices.user_id', '=', $userId);
+ $averageInvoice->where('invoices.user_id', '=', $userId);
+ }
+
+ if ($account->financial_year_start) {
+ $yearStart = str_replace('2000', date('Y'), $account->financial_year_start);
+ $averageInvoice->where('invoices.invoice_date', '>=', $yearStart);
}
return $averageInvoice->groupBy('accounts.id')
diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php
index 8e80b75c12..587733f4b9 100644
--- a/resources/lang/en/texts.php
+++ b/resources/lang/en/texts.php
@@ -1369,7 +1369,7 @@ $LANG = array(
'failed_remove_payment_method' => 'Failed to remove the payment method',
'gateway_exists' => 'This gateway already exists',
'manual_entry' => 'Manual entry',
- 'start_of_week' => 'First day of the week',
+ 'start_of_week' => 'First Day of the Week',
// Frequencies
'freq_weekly' => 'Weekly',
@@ -2174,6 +2174,7 @@ $LANG = array(
'invalid_white_label_license' => 'The white label license is not valid',
'created_by' => 'Created by :name',
'modules' => 'Modules',
+ 'financial_year_start' => 'First Month of the Year',
);
diff --git a/resources/views/accounts/localization.blade.php b/resources/views/accounts/localization.blade.php
index f124410f0d..1d196bdec8 100644
--- a/resources/views/accounts/localization.blade.php
+++ b/resources/views/accounts/localization.blade.php
@@ -42,7 +42,7 @@
{!! Former::select('language_id')->addOption('','')
->fromQuery($languages, 'name', 'id')
->help(trans('texts.translate_app', ['link' => link_to(TRANSIFEX_URL, 'Transifex.com', ['target' => '_blank'])])) !!}
-
+
{!! Former::select('timezone_id')->addOption('','')
->fromQuery($timezones, 'location', 'id') !!}
@@ -50,9 +50,16 @@
->fromQuery($dateFormats) !!}
{!! Former::select('datetime_format_id')->addOption('','')
->fromQuery($datetimeFormats) !!}
+ {!! Former::checkbox('military_time')->text(trans('texts.enable')) !!}
+
+
+
{!! Former::select('start_of_week')->addOption('','')
->fromQuery($weekdays) !!}
- {!! Former::checkbox('military_time')->text(trans('texts.enable')) !!}
+ {!! Former::select('financial_year_start')
+ ->addOption('','')
+ ->options($months) !!}
+