Store full datetime in post_date; recalculate finances on every pirep
This commit is contained in:
parent
6fa724d7b7
commit
6b002f24a8
@ -3,6 +3,7 @@
|
|||||||
!! Please do a complete reinstall, with a new database
|
!! Please do a complete reinstall, with a new database
|
||||||
|
|
||||||
- Finances! The finance portions have been implemented, you can [read about them here](http://docs.phpvms.net/concepts/finances)
|
- Finances! The finance portions have been implemented, you can [read about them here](http://docs.phpvms.net/concepts/finances)
|
||||||
|
- Awards! Added the award plugin system. [see docs](http://docs.phpvms.net/customizing/awards)
|
||||||
- Changed theme system to using [laravel-theme](https://github.com/igaster/laravel-theme), there are changes to making theming much simpler with much more flexibility.
|
- Changed theme system to using [laravel-theme](https://github.com/igaster/laravel-theme), there are changes to making theming much simpler with much more flexibility.
|
||||||
- Fixed several security vulnerabilities (thanks magicflyer!)
|
- Fixed several security vulnerabilities (thanks magicflyer!)
|
||||||
- Fuel units changed to lbs/kgs [#193](https://github.com/nabeelio/phpvms/issues/193)
|
- Fuel units changed to lbs/kgs [#193](https://github.com/nabeelio/phpvms/issues/193)
|
||||||
|
2
Procfile
2
Procfile
@ -1,5 +1,5 @@
|
|||||||
dnsmasq: /usr/local/sbin/dnsmasq --keep-in-foreground
|
dnsmasq: /usr/local/sbin/dnsmasq --keep-in-foreground
|
||||||
php-fpm: /usr/local/sbin/php-fpm --nodaemonize
|
php-fpm: /usr/local/sbin/php-fpm --nodaemonize
|
||||||
nginx: /usr/local/bin/nginx -g 'daemon off;'
|
nginx: /usr/local/bin/nginx -g 'daemon off;'
|
||||||
#mysql: /usr/local/bin/mysqld
|
mysql: /usr/local/bin/mysqld
|
||||||
#mailhog: /usr/local/bin/mailhog
|
#mailhog: /usr/local/bin/mailhog
|
||||||
|
@ -354,7 +354,7 @@ class PirepController extends RestController
|
|||||||
$pirep = $this->pirepRepo->find($id);
|
$pirep = $this->pirepRepo->find($id);
|
||||||
$this->checkCancelled($pirep);
|
$this->checkCancelled($pirep);
|
||||||
|
|
||||||
Log::info(
|
Log::debug(
|
||||||
'Posting ACARS update (user: '.Auth::user()->pilot_id.', pirep id :'.$id.'): ',
|
'Posting ACARS update (user: '.Auth::user()->pilot_id.', pirep id :'.$id.'): ',
|
||||||
$request->post()
|
$request->post()
|
||||||
);
|
);
|
||||||
@ -394,7 +394,7 @@ class PirepController extends RestController
|
|||||||
$pirep = $this->pirepRepo->find($id);
|
$pirep = $this->pirepRepo->find($id);
|
||||||
$this->checkCancelled($pirep);
|
$this->checkCancelled($pirep);
|
||||||
|
|
||||||
Log::info('Posting ACARS log, PIREP: '.$id, $request->post());
|
Log::debug('Posting ACARS log, PIREP: '.$id, $request->post());
|
||||||
|
|
||||||
$count = 0;
|
$count = 0;
|
||||||
$logs = $request->post('logs');
|
$logs = $request->post('logs');
|
||||||
@ -426,7 +426,7 @@ class PirepController extends RestController
|
|||||||
$pirep = $this->pirepRepo->find($id);
|
$pirep = $this->pirepRepo->find($id);
|
||||||
$this->checkCancelled($pirep);
|
$this->checkCancelled($pirep);
|
||||||
|
|
||||||
Log::info('Posting ACARS event, PIREP: ' . $id, $request->post());
|
Log::debug('Posting ACARS event, PIREP: ' . $id, $request->post());
|
||||||
|
|
||||||
$count = 0;
|
$count = 0;
|
||||||
$logs = $request->post('events');
|
$logs = $request->post('events');
|
||||||
@ -468,7 +468,7 @@ class PirepController extends RestController
|
|||||||
$pirep = $this->pirepRepo->find($id);
|
$pirep = $this->pirepRepo->find($id);
|
||||||
$this->checkCancelled($pirep);
|
$this->checkCancelled($pirep);
|
||||||
|
|
||||||
Log::info('Posting comment, PIREP: '.$id, $request->post());
|
Log::debug('Posting comment, PIREP: '.$id, $request->post());
|
||||||
|
|
||||||
# Add it
|
# Add it
|
||||||
$comment = new PirepComment($request->post());
|
$comment = new PirepComment($request->post());
|
||||||
@ -483,6 +483,8 @@ class PirepController extends RestController
|
|||||||
* @param $id
|
* @param $id
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||||
|
* @throws \UnexpectedValueException
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
public function finances_get($id, Request $request)
|
public function finances_get($id, Request $request)
|
||||||
{
|
{
|
||||||
|
@ -38,18 +38,14 @@ class RecalculateBalances
|
|||||||
|
|
||||||
$journals = Journal::all();
|
$journals = Journal::all();
|
||||||
foreach ($journals as $journal) {
|
foreach ($journals as $journal) {
|
||||||
|
$old_balance = $journal->balance;
|
||||||
|
|
||||||
$where = ['journal_id' => $journal->id];
|
$this->journalRepo->recalculateBalance($journal);
|
||||||
$credits = Money::create(JournalTransaction::where($where)->sum('credit') ?: 0);
|
$journal->refresh();
|
||||||
$debits = Money::create(JournalTransaction::where($where)->sum('debit') ?: 0);
|
|
||||||
$balance = $credits->subtract($debits);
|
|
||||||
|
|
||||||
Log::info('Adjusting balance on ' .
|
Log::info('Adjusting balance on ' .
|
||||||
$journal->morphed_type . ':' . $journal->morphed_id
|
$journal->morphed_type . ':' . $journal->morphed_id
|
||||||
. ' from ' . $journal->balance . ' to ' . $balance);
|
. ' from ' . $old_balance . ' to ' . $journal->balance);
|
||||||
|
|
||||||
$journal->balance = $balance->getAmount();
|
|
||||||
$journal->save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Log::info('Done calculating balances');
|
Log::info('Done calculating balances');
|
||||||
|
@ -18,6 +18,8 @@ use Carbon\Carbon;
|
|||||||
* @property Carbon $post_date
|
* @property Carbon $post_date
|
||||||
* @property Carbon $created_at
|
* @property Carbon $created_at
|
||||||
* @property \App\Models\Enums\JournalType type
|
* @property \App\Models\Enums\JournalType type
|
||||||
|
* @property mixed morphed_type
|
||||||
|
* @property mixed morphed_id
|
||||||
*/
|
*/
|
||||||
class Journal extends BaseModel
|
class Journal extends BaseModel
|
||||||
{
|
{
|
||||||
|
@ -41,7 +41,7 @@ class JournalTransaction extends BaseModel
|
|||||||
'tags' => 'array',
|
'tags' => 'array',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $dateFormat = 'Y-m-d';
|
//protected $dateFormat = 'Y-m-d';
|
||||||
protected $dates = [
|
protected $dates = [
|
||||||
'created_at',
|
'created_at',
|
||||||
'updated_at',
|
'updated_at',
|
||||||
|
@ -41,6 +41,29 @@ class JournalRepository extends BaseRepository implements CacheableInterface
|
|||||||
return $date->setTimezone('UTC')->toDateString();
|
return $date->setTimezone('UTC')->toDateString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recalculate the balance of the given journal
|
||||||
|
* @param Journal $journal
|
||||||
|
* @return Journal
|
||||||
|
* @throws \UnexpectedValueException
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function recalculateBalance(Journal $journal)
|
||||||
|
{
|
||||||
|
$where = [
|
||||||
|
'journal_id' => $journal->id
|
||||||
|
];
|
||||||
|
|
||||||
|
$credits = Money::create($this->findWhere($where)->sum('credit') ?: 0);
|
||||||
|
$debits = Money::create($this->findWhere($where)->sum('debit') ?: 0);
|
||||||
|
$balance = $credits->subtract($debits);
|
||||||
|
|
||||||
|
$journal->balance = $balance->getAmount();
|
||||||
|
$journal->save();
|
||||||
|
|
||||||
|
return $journal;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Post a new transaction to a journal, and also adjust the balance
|
* Post a new transaction to a journal, and also adjust the balance
|
||||||
* on the transaction itself. A cron will run to reconcile the journal
|
* on the transaction itself. A cron will run to reconcile the journal
|
||||||
@ -67,7 +90,6 @@ class JournalRepository extends BaseRepository implements CacheableInterface
|
|||||||
$transaction_group = null,
|
$transaction_group = null,
|
||||||
$tags = null
|
$tags = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
# tags can be passed in a list
|
# tags can be passed in a list
|
||||||
if ($tags && \is_array($tags)) {
|
if ($tags && \is_array($tags)) {
|
||||||
$tags = implode(',', $tags);
|
$tags = implode(',', $tags);
|
||||||
|
@ -80,6 +80,10 @@ class PirepFinanceService extends BaseService
|
|||||||
$pirep->airline->journal->refresh();
|
$pirep->airline->journal->refresh();
|
||||||
$pirep->user->journal->refresh();
|
$pirep->user->journal->refresh();
|
||||||
|
|
||||||
|
// Recalculate balances...
|
||||||
|
$this->journalRepo->recalculateBalance($pirep->airline->journal);
|
||||||
|
$this->journalRepo->recalculateBalance($pirep->user->journal);
|
||||||
|
|
||||||
return $pirep;
|
return $pirep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,10 +112,12 @@ class RecurringFinanceService extends BaseService
|
|||||||
'journal_id' => $journal->id,
|
'journal_id' => $journal->id,
|
||||||
'ref_class' => Expense::class,
|
'ref_class' => Expense::class,
|
||||||
'ref_class_id' => $expense->id,
|
'ref_class_id' => $expense->id,
|
||||||
'post_date' => \Carbon::now('UTC')->format('Y-m-d'),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
$found = JournalTransaction::where($w)->count(['id']);
|
$found = JournalTransaction::where($w)
|
||||||
|
->whereDate('post_date', '=', \Carbon::now('UTC')->toDateString())
|
||||||
|
->count(['id']);
|
||||||
|
|
||||||
if($found > 0) {
|
if($found > 0) {
|
||||||
Log::info('Expense "'.$expense->name.'" already charged for today, skipping');
|
Log::info('Expense "'.$expense->name.'" already charged for today, skipping');
|
||||||
continue;
|
continue;
|
||||||
|
@ -7,6 +7,12 @@ class UtilsTest extends TestCase
|
|||||||
public function setUp() {
|
public function setUp() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testDates()
|
||||||
|
{
|
||||||
|
$carbon = new \Carbon\Carbon('2018-03-18 00:20:43');
|
||||||
|
//echo $carbon;
|
||||||
|
}
|
||||||
|
|
||||||
public function testSecondsToTimeParts()
|
public function testSecondsToTimeParts()
|
||||||
{
|
{
|
||||||
$t = Utils::secondsToTimeParts(3600);
|
$t = Utils::secondsToTimeParts(3600);
|
||||||
|
Loading…
Reference in New Issue
Block a user