Fixes for profit loss

This commit is contained in:
David Bomba 2023-07-24 18:57:02 +10:00
parent 60daf3d3fc
commit b960a21201
7 changed files with 55 additions and 87 deletions

View File

@ -31,25 +31,29 @@ use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundExceptio
* @property-read mixed $hashed_id
* @property string $number
* @property int $company_id
* @property int $id
* @property \App\Models\Company $company
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel|Illuminate\Database\Eloquent\Relations\BelongsTo|\Awobaz\Compoships\Database\Eloquent\Relations\BelongsTo|\App\Models\Company company()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel|Illuminate\Database\Eloquent\Relations\HasMany|BaseModel orderBy()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel exclude($columns)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel with()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel query()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel with($value)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel newModelQuery($query)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel newQuery($query)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel query($query)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel exclude(array $excludeable)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel withTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel scopeExclude()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel find()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel whereIn()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel where()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel scopeExclude($query)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel find($value)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel whereIn($query)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel where($query)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel count()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel create()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel insert()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel create($query)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel insert($query)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel service()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel whereHas()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel withTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel orderBy($column, $direction)
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel invitations()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel createInvitations()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel whereHas($query)
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\InvoiceInvitation | \App\Models\CreditInvitation | \App\Models\QuoteInvitation | \App\Models\RecurringInvoiceInvitation> $invitations
* @property-read int|null $invitations_count
*

View File

@ -66,6 +66,7 @@ use Illuminate\Contracts\Translation\HasLocalePreference;
* @property string|null $shipping_postal_code
* @property int|null $shipping_country_id
* @property object|null $settings
* @property object|null $group_settings
* @property bool $is_deleted
* @property int|null $group_settings_id
* @property string|null $vat_number
@ -115,68 +116,12 @@ use Illuminate\Contracts\Translation\HasLocalePreference;
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\RecurringInvoice> $recurring_invoices
* @property-read int|null $tasks_count
* @property-read \App\Models\User $user
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel company()
* @method static \Illuminate\Database\Eloquent\Builder|Client exclude($columns)
* @method static \Database\Factories\ClientFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder|Client filter(\App\Filters\QueryFilters $filters)
* @method static \Illuminate\Database\Eloquent\Builder|Client newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Client newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Client onlyTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|Client query()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel scope()
* @method static \Illuminate\Database\Eloquent\Builder|Client whereAddress1($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereAddress2($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereAssignedUserId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereBalance($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereCity($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereClientHash($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereCompanyId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereCountryId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereCreditBalance($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereCustomValue1($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereCustomValue2($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereCustomValue3($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereCustomValue4($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereDeletedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereGroupSettingsId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereIdNumber($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereIndustryId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereIsDeleted($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereLastLogin($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereLogo($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereNumber($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client wherePaidToDate($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client wherePhone($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client wherePostalCode($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client wherePrivateNotes($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client wherePublicNotes($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereSettings($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereShippingAddress1($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereShippingAddress2($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereShippingCity($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereShippingCountryId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereShippingPostalCode($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereShippingState($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereSizeId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereState($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereUserId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereVatNumber($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client whereWebsite($value)
* @method static \Illuminate\Database\Eloquent\Builder|Client withTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|Client withoutTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|Client with()
* @method static \Illuminate\Database\Eloquent\Builder|Client where()
* @property string $payment_balance
* @method static \Illuminate\Database\Eloquent\Builder|Client wherePaymentBalance($value)
* @property mixed $tax_data
* @method static \Illuminate\Database\Eloquent\Builder|Client whereTaxData($value)
* @property int $is_tax_exempt
* @method static \Illuminate\Database\Eloquent\Builder|Client whereIsTaxExempt($value)
* @property int $has_valid_vat_number
* @mixin \Eloquent
*/

View File

@ -53,7 +53,6 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Eloquent\Builder|CompanyToken whereUserId($value)
* @method static \Illuminate\Database\Eloquent\Builder|CompanyToken withTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|CompanyToken withoutTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|CompanyToken with()
* @mixin \Eloquent
*/
class CompanyToken extends BaseModel

View File

@ -22,13 +22,13 @@ use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundExceptio
* @property-read mixed $id
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel company()
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel exclude($columns)
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel query()
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel find()
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel with()
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel withTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel findOrFail()
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel newModelQuery($value)
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel newQuery($value)
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel query($value)
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel find($value)
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel with($value)
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel withTrashed($value)
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel findOrFail($value)
* @mixin \Eloquent
*/
class StaticModel extends Model

View File

@ -98,6 +98,7 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
* @method static \Illuminate\Database\Eloquent\Builder|User newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|User onlyTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|User query()
* @method static \Illuminate\Database\Eloquent\Builder|User where($column, $value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereAcceptedTermsVersion($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereAccountId($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereAvatar($value)
@ -336,13 +337,6 @@ class User extends Authenticatable implements MustVerifyEmail
return $this->getCompany();
}
// private function setCompanyByGuard()
// {
// if (Auth::guard('contact')->check()) {
// $this->setCompany(auth()->user()->client->company);
// }
// }
public function company_users()
{
return $this->hasMany(CompanyUser::class)->withTrashed();

View File

@ -366,7 +366,7 @@ class ProfitLoss
$csv->insertOne(['--------------------']);
$csv->insertOne([ctrans('texts.total_revenue'), Number::formatMoney($this->income, $this->company)]);
$csv->insertOne([ctrans('texts.total_revenue'), Number::formatMoney($this->income - $this->income_taxes, $this->company)]);
//total taxes
@ -386,7 +386,7 @@ class ProfitLoss
$csv->insertOne([ctrans('texts.total_taxes'), Number::formatMoney(array_sum(array_column($this->expense_break_down, 'tax')), $this->company)]);
$csv->insertOne(['--------------------']);
$csv->insertOne([ctrans('texts.total_profit'), Number::formatMoney($this->income - array_sum(array_column($this->expense_break_down, 'total')), $this->company)]);
$csv->insertOne([ctrans('texts.total_profit'), Number::formatMoney($this->income - $this->income_taxes - array_sum(array_column($this->expense_break_down, 'total'))- array_sum(array_column($this->expense_break_down, 'tax')), $this->company)]);
//net profit

View File

@ -120,6 +120,34 @@ class ProfitAndLossReportTest extends TestCase
$this->account->delete();
}
public function testExpenseResolution()
{
$this->buildData();
Expense::factory()->create([
'company_id' => $this->company->id,
'user_id' => $this->user->id,
'amount' => 121,
'date' => now()->format('Y-m-d'),
'uses_inclusive_taxes' => true,
'tax_rate1' => 21,
'tax_name1' => 'VAT',
'calculate_tax_by_amount' => false,
'exchange_rate' => 1,
]);
$pl = new ProfitLoss($this->company, $this->payload);
$pl->build();
$expense_breakdown = $pl->getExpenseBreakDown();
$this->assertEquals(100, array_sum(array_column($expense_breakdown, 'total')));
$this->assertEquals(21, array_sum(array_column($expense_breakdown, 'tax')));
$this->account->delete();
}
public function testMultiCurrencyInvoiceIncome()
{
$this->buildData();
@ -141,7 +169,6 @@ class ProfitAndLossReportTest extends TestCase
'is_deleted' => 0,
]);
Invoice::factory()->create([
'client_id' => $client->id,
'user_id' => $this->user->id,
@ -163,7 +190,6 @@ class ProfitAndLossReportTest extends TestCase
'exchange_rate' => 2
]);
Invoice::factory()->create([
'client_id' => $client2->id,
'user_id' => $this->user->id,