advance template installment on RecoReco spawn (v1.0.3)
This commit is contained in:
@@ -73,6 +73,19 @@ class FinancePersistence extends Base
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* recoreco:task:spawned -- RecoReco (calendar recurrence) just spawned a copy. Its ongoing card
|
||||||
|
* is the TEMPLATE that stays (unlike native recurrence, whose ongoing card is the new child), so
|
||||||
|
* advance the SOURCE template's installment. The clone already copied the current installment
|
||||||
|
* verbatim via onDuplication during RecoReco's duplicate() call.
|
||||||
|
*/
|
||||||
|
public function onRecoRecoSpawn(array &$payload)
|
||||||
|
{
|
||||||
|
if (! empty($payload['source_task_id'])) {
|
||||||
|
$this->advanceInstallment((int) $payload['source_task_id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* model:task:modification:prepare -- fires before UPDATE, $values by reference. The task id is
|
* model:task:modification:prepare -- fires before UPDATE, $values by reference. The task id is
|
||||||
* removed from $values by core, but it is the route parameter of the modification request.
|
* removed from $values by core, but it is the route parameter of the modification request.
|
||||||
@@ -176,6 +189,31 @@ class FinancePersistence extends Base
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Advance a task's current installment by one, in place. A finite plan clamps at the total
|
||||||
|
* (p10/10 stays p10/10); an open-ended one (no total) increments unbounded (p2 -> p3). Cards
|
||||||
|
* with no numeric current installment are left alone.
|
||||||
|
*/
|
||||||
|
private function advanceInstallment($task_id)
|
||||||
|
{
|
||||||
|
$current = $this->taskMetadataModel->get($task_id, FinanceHelper::INSTALLMENT_CURRENT_KEY, '');
|
||||||
|
|
||||||
|
if ($current === '' || ! ctype_digit((string) $current)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$total = $this->taskMetadataModel->get($task_id, FinanceHelper::INSTALLMENT_TOTAL_KEY, '');
|
||||||
|
$next = (int) $current + 1;
|
||||||
|
|
||||||
|
if ($total !== '' && ctype_digit((string) $total) && $next > (int) $total) {
|
||||||
|
$next = (int) $total;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->taskMetadataModel->save($task_id, array(
|
||||||
|
FinanceHelper::INSTALLMENT_CURRENT_KEY => (string) $next,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
private function intOrBlank($raw)
|
private function intOrBlank($raw)
|
||||||
{
|
{
|
||||||
$raw = trim((string) $raw);
|
$raw = trim((string) $raw);
|
||||||
|
|||||||
@@ -34,6 +34,11 @@ class Plugin extends Base
|
|||||||
// and a manual Duplicate copies it verbatim.
|
// and a manual Duplicate copies it verbatim.
|
||||||
$this->hook->on('model:task:duplication:aftersave', array($persistence, 'onDuplication'));
|
$this->hook->on('model:task:duplication:aftersave', array($persistence, 'onDuplication'));
|
||||||
|
|
||||||
|
// RecoReco (calendar recurrence) spawns a copy and emits this signal. The clone already got
|
||||||
|
// the finance verbatim (via onDuplication above); here we advance the SOURCE template's
|
||||||
|
// installment, since RecoReco's ongoing card is the template that stays.
|
||||||
|
$this->hook->on('recoreco:task:spawned', array($persistence, 'onRecoRecoSpawn'));
|
||||||
|
|
||||||
// The line-3 money badge on each board card, rendered directly under the title. Two hooks:
|
// The line-3 money badge on each board card, rendered directly under the title. Two hooks:
|
||||||
// "private" is the normal board, "public" is the read-only board shared by token.
|
// "private" is the normal board, "public" is the read-only board shared by token.
|
||||||
$this->template->hook->attach('template:board:private:task:after-title', 'financeBuddy:board/task_money');
|
$this->template->hook->attach('template:board:private:task:after-title', 'financeBuddy:board/task_money');
|
||||||
@@ -72,7 +77,7 @@ class Plugin extends Base
|
|||||||
|
|
||||||
public function getPluginVersion()
|
public function getPluginVersion()
|
||||||
{
|
{
|
||||||
return '1.0.2';
|
return '1.0.3';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPluginHomepage()
|
public function getPluginHomepage()
|
||||||
|
|||||||
Reference in New Issue
Block a user