This commit is contained in:
James Cole
2021-02-27 05:59:40 +01:00
parent 2287339781
commit 43e8779e3b
3 changed files with 48 additions and 31 deletions

View File

@@ -44,15 +44,15 @@ class PiggyBankStoreRequest extends FormRequest
public function getAll(): array public function getAll(): array
{ {
return [ return [
'name' => $this->string('name'), 'name' => $this->string('name'),
'account_id' => $this->integer('account_id'), 'account_id' => $this->integer('account_id'),
'targetamount' => $this->string('target_amount'), 'targetamount' => $this->string('target_amount'),
'current_amount' => $this->string('current_amount'), 'current_amount' => $this->string('current_amount'),
'startdate' => $this->date('start_date'), 'startdate' => $this->date('start_date'),
'targetdate' => $this->date('target_date'), 'targetdate' => $this->date('target_date'),
'notes' => $this->nlString('notes'), 'notes' => $this->nlString('notes'),
'object_group_id' => $this->integer('object_group_id'), 'object_group_id' => $this->integer('object_group_id'),
'object_group' => $this->string('object_group_name'), 'object_group_title' => $this->string('object_group_title'),
]; ];
} }
@@ -64,14 +64,15 @@ class PiggyBankStoreRequest extends FormRequest
public function rules(): array public function rules(): array
{ {
return [ return [
'name' => 'required|between:1,255|uniquePiggyBankForUser', 'name' => 'required|between:1,255|uniquePiggyBankForUser',
'current_amount' => ['numeric', 'gte:0', 'lte:target_amount'], 'current_amount' => ['numeric', 'gte:0', 'lte:target_amount'],
'account_id' => 'required|numeric|belongsToUser:accounts,id', 'account_id' => 'required|numeric|belongsToUser:accounts,id',
'object_group_id' => 'numeric|belongsToUser:object_groups,id', 'object_group_id' => 'numeric|belongsToUser:object_groups,id',
'target_amount' => ['numeric', 'gte:0', 'lte:target_amount', 'required'], 'object_group_title' => 'between:1,255',
'start_date' => 'date|nullable', 'target_amount' => ['numeric', 'gte:0', 'lte:target_amount', 'required'],
'target_date' => 'date|nullable|after:start_date', 'start_date' => 'date|nullable',
'notes' => 'max:65000', 'target_date' => 'date|nullable|after:start_date',
'notes' => 'max:65000',
]; ];
} }

View File

@@ -105,7 +105,7 @@ trait ModifiesPiggyBanks
$leftOnAccount = $this->leftOnAccount($piggyBank, today(config('app.timezone'))); $leftOnAccount = $this->leftOnAccount($piggyBank, today(config('app.timezone')));
$savedSoFar = (string)$this->getRepetition($piggyBank)->currentamount; $savedSoFar = (string)$this->getRepetition($piggyBank)->currentamount;
$leftToSave = bcsub($piggyBank->targetamount, $savedSoFar); $leftToSave = bcsub($piggyBank->targetamount, $savedSoFar);
$maxAmount = (string)min(round((float) $leftOnAccount, 12), round((float)$leftToSave, 12)); $maxAmount = (string)min(round((float)$leftOnAccount, 12), round((float)$leftToSave, 12));
$compare = bccomp($amount, $maxAmount); $compare = bccomp($amount, $maxAmount);
$result = $compare <= 0; $result = $compare <= 0;
@@ -286,11 +286,14 @@ trait ModifiesPiggyBanks
public function store(array $data): PiggyBank public function store(array $data): PiggyBank
{ {
$data['order'] = $this->getMaxOrder() + 1; $data['order'] = $this->getMaxOrder() + 1;
$piggyData = $data;
// unset fields just in case.
unset($piggyData['object_group_title'], $piggyData['object_group_id'], $piggyData['notes'], $piggyData['current_amount']);
try { try {
/** @var PiggyBank $piggyBank */ /** @var PiggyBank $piggyBank */
$piggyBank = PiggyBank::create($data); $piggyBank = PiggyBank::create($piggyData);
} catch (QueryException $e) { } catch (QueryException $e) {
Log::error(sprintf('Could not store piggy bank: %s', $e->getMessage())); Log::error(sprintf('Could not store piggy bank: %s', $e->getMessage()), $piggyData);
throw new FireflyException('400005: Could not store new piggy bank.'); throw new FireflyException('400005: Could not store new piggy bank.');
} }
@@ -303,15 +306,16 @@ trait ModifiesPiggyBanks
$repetition->save(); $repetition->save();
} }
$objectGroupTitle = $data['object_group'] ?? ''; $objectGroupTitle = $data['object_group_title'] ?? '';
if ('' !== $objectGroupTitle) { if ('' !== $objectGroupTitle) {
$objectGroup = $this->findOrCreateObjectGroup($objectGroupTitle); $objectGroup = $this->findOrCreateObjectGroup($objectGroupTitle);
if (null !== $objectGroup) { if (null !== $objectGroup) {
$piggyBank->objectGroups()->sync([$objectGroup->id]); $piggyBank->objectGroups()->sync([$objectGroup->id]);
$piggyBank->save(); $piggyBank->save();
} }
} }
// try also with ID: // try also with ID
$objectGroupId = (int)($data['object_group_id'] ?? 0); $objectGroupId = (int)($data['object_group_id'] ?? 0);
if (0 !== $objectGroupId) { if (0 !== $objectGroupId) {
$objectGroup = $this->findObjectGroupById($objectGroupId); $objectGroup = $this->findObjectGroupById($objectGroupId);

View File

@@ -72,7 +72,7 @@ Route::group(
); );
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'accounts', ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'accounts',
'as' => 'api.v1.accounts.',], 'as' => 'api.v1.accounts.',],
@@ -91,6 +91,7 @@ Route::group(
} }
); );
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers\Autocomplete', 'prefix' => 'autocomplete', ['namespace' => 'FireflyIII\Api\V1\Controllers\Autocomplete', 'prefix' => 'autocomplete',
'as' => 'api.v1.autocomplete.',], 'as' => 'api.v1.autocomplete.',],
@@ -112,6 +113,7 @@ Route::group(
} }
); );
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'groups', ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'groups',
'as' => 'api.v1.object-groups.',], 'as' => 'api.v1.object-groups.',],
@@ -127,6 +129,7 @@ Route::group(
} }
); );
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'attachments', ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'attachments',
'as' => 'api.v1.attachments.',], 'as' => 'api.v1.attachments.',],
@@ -143,6 +146,7 @@ Route::group(
} }
); );
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'available_budgets', ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'available_budgets',
'as' => 'api.v1.available_budgets.',], 'as' => 'api.v1.available_budgets.',],
@@ -157,6 +161,7 @@ Route::group(
} }
); );
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'bills', ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'bills',
'as' => 'api.v1.bills.',], 'as' => 'api.v1.bills.',],
@@ -175,6 +180,7 @@ Route::group(
} }
); );
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'budgets/limits', ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'budgets/limits',
'as' => 'api.v1.budget_limits.',], 'as' => 'api.v1.budget_limits.',],
@@ -191,6 +197,7 @@ Route::group(
} }
); );
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'budgets', ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'budgets',
'as' => 'api.v1.budgets.',], 'as' => 'api.v1.budgets.',],
@@ -210,6 +217,7 @@ Route::group(
} }
); );
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'categories', ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'categories',
'as' => 'api.v1.categories.',], 'as' => 'api.v1.categories.',],
@@ -232,6 +240,7 @@ Route::group(
*/ */
// Accounts // Accounts
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers\Chart', 'prefix' => 'chart/account', ['namespace' => 'FireflyIII\Api\V1\Controllers\Chart', 'prefix' => 'chart/account',
'as' => 'api.v1.chart.account.',], 'as' => 'api.v1.chart.account.',],
@@ -243,6 +252,7 @@ Route::group(
); );
// Available budgets // Available budgets
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers\Chart', 'prefix' => 'chart/ab', ['namespace' => 'FireflyIII\Api\V1\Controllers\Chart', 'prefix' => 'chart/ab',
'as' => 'api.v1.chart.ab.',], 'as' => 'api.v1.chart.ab.',],
@@ -254,6 +264,7 @@ Route::group(
); );
// Budgets // Budgets
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers\Chart', 'prefix' => 'chart/budget', ['namespace' => 'FireflyIII\Api\V1\Controllers\Chart', 'prefix' => 'chart/budget',
'as' => 'api.v1.chart.budget.',], 'as' => 'api.v1.chart.budget.',],
@@ -315,20 +326,21 @@ Route::group(
} }
); );
// TODO VERIFY API DOCS
Route::group( Route::group(
['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'piggy_banks', ['namespace' => 'FireflyIII\Api\V1\Controllers\Models\PiggyBank', 'prefix' => 'piggy_banks',
'as' => 'api.v1.piggy_banks.',], 'as' => 'api.v1.piggy_banks.',],
static function () { static function () {
// Piggy Bank API routes: // Piggy Bank API routes:
Route::get('', ['uses' => 'PiggyBankController@index', 'as' => 'index']); Route::get('', ['uses' => 'ShowController@index', 'as' => 'index']);
Route::post('', ['uses' => 'PiggyBankController@store', 'as' => 'store']); Route::post('', ['uses' => 'StoreController@store', 'as' => 'store']);
Route::get('{piggyBank}', ['uses' => 'PiggyBankController@show', 'as' => 'show']); Route::get('{piggyBank}', ['uses' => 'ShowController@show', 'as' => 'show']);
Route::put('{piggyBank}', ['uses' => 'PiggyBankController@update', 'as' => 'update']); Route::put('{piggyBank}', ['uses' => 'UpdateController@update', 'as' => 'update']);
Route::delete('{piggyBank}', ['uses' => 'PiggyBankController@delete', 'as' => 'delete']); Route::delete('{piggyBank}', ['uses' => 'DestroyController@destroy', 'as' => 'delete']);
Route::get('{piggyBank}/events', ['uses' => 'PiggyBankController@piggyBankEvents', 'as' => 'events']); Route::get('{piggyBank}/events', ['uses' => 'ListController@piggyBankEvents', 'as' => 'events']);
Route::get('{piggyBank}/attachments', ['uses' => 'PiggyBankController@attachments', 'as' => 'attachments']); Route::get('{piggyBank}/attachments', ['uses' => 'ListController@attachments', 'as' => 'attachments']);
} }
); );