mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Fixes for profit loss
This commit is contained in:
parent
60daf3d3fc
commit
b960a21201
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user