diff --git a/app/Http/Controllers/Traits/VerifiesUserEmail.php b/app/Http/Controllers/Traits/VerifiesUserEmail.php index 63cd24fda2ac..fb4d8ca82b7b 100644 --- a/app/Http/Controllers/Traits/VerifiesUserEmail.php +++ b/app/Http/Controllers/Traits/VerifiesUserEmail.php @@ -28,8 +28,6 @@ trait VerifiesUserEmail $user->confirmation_code = null; $user->save(); - $this->setCurrentCompanyId($user->companies()->first()->account->default_company_id); - Auth::loginUsingId($user->id, true); return redirect()->route('dashboard.index')->with('message', ctrans('texts.security_confirmation')); diff --git a/app/Models/User.php b/app/Models/User.php index 4bbccc46c7bb..63f5111fe9b2 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -61,6 +61,11 @@ class User extends Authenticatable implements MustVerifyEmail 'slack_webhook_url', ]; + public function account() + { + return $this->belongsTo(Account::class); + } + public function token() { return $this->tokens()->first(); @@ -114,7 +119,7 @@ class User extends Authenticatable implements MustVerifyEmail public function user_company() { - return $this->user_companies->where('company_id', $this->getCurrentCompanyId())->first(); + return $this->user_companies->where('company_id', $this->company()->id)->first(); } @@ -138,7 +143,7 @@ class User extends Authenticatable implements MustVerifyEmail public function permissions() { - $permissions = json_decode($this->company()->permissions); + $permissions = json_decode($this->user_company()->permissions); if (! $permissions) return []; @@ -154,7 +159,7 @@ class User extends Authenticatable implements MustVerifyEmail public function settings() { - return json_decode($this->company()->settings); + return json_decode($this->user_company()->settings); } diff --git a/app/Transformers/AccountTransformer.php b/app/Transformers/AccountTransformer.php index 82159b3e63a6..4f83606c3c28 100644 --- a/app/Transformers/AccountTransformer.php +++ b/app/Transformers/AccountTransformer.php @@ -1,6 +1,6 @@ serializer); + + return $this->includeCollection($company->users, $transformer, User::class); + } + + public function includeClients(Company $company) + { + $transformer = new ClientTransformer($this->serializer); + + return $this->includeCollection($company->clients, $transformer, Client::class); + } + + public function includeInvoices(Company $company) + { + $transformer = new InvoiceTransformer($this->serializer); + + return $this->includeCollection($company->invoices, $transformer, Invoice::class); + } + + public function includeAccount(Company $company) + { + + $transformer = new AccountTransformer($this->serializer); + + return $this->includeItem($company->account, $transformer, Account::class); + + } } diff --git a/app/Transformers/CompanyUserTransformer.php b/app/Transformers/CompanyUserTransformer.php new file mode 100644 index 000000000000..67ac5e2ad049 --- /dev/null +++ b/app/Transformers/CompanyUserTransformer.php @@ -0,0 +1,62 @@ + (int) $company_user->id, + 'permissions' => $company_user->permissions, + 'settings' => $company_user->settings, + 'is_owner' => (bool) $company_user->is_owner, + 'is_admin' => (bool) $company_user->is_admin, + 'is_locked' => (bool) $company_user->is_locked, + 'updated_at' => $company_user->updated_at, + 'deleted_at' => $company_user->deleted_at, + ]; + } + + public function includeCompany(CompanyUser $company_user) + { + + $transformer = new CompanyTransformer($this->serializer); + + return $this->includeItem($company_user->company, $transformer, Company::class); + + } + + public function includeUser(CompanyUser $company_user) + { + + $transformer = new UserTransformer($this->serializer); + + return $this->includeItem($company_user->user, $transformer, User::class); + + } + +} diff --git a/app/Transformers/EntityTransformer.php b/app/Transformers/EntityTransformer.php new file mode 100644 index 000000000000..23791c4b7c69 --- /dev/null +++ b/app/Transformers/EntityTransformer.php @@ -0,0 +1,63 @@ +serializer = $serializer; + } + + protected function includeCollection($data, $transformer, $entityType) + { + if ($this->serializer && $this->serializer != API_SERIALIZER_JSON) { + $entityType = null; + } + + return $this->collection($data, $transformer, $entityType); + } + + protected function includeItem($data, $transformer, $entityType) + { + if ($this->serializer && $this->serializer != API_SERIALIZER_JSON) { + $entityType = null; + } + + return $this->item($data, $transformer, $entityType); + } + + protected function getTimestamp($date) + { + if (method_exists($date, 'getTimestamp')) { + return $date->getTimestamp(); + } elseif (is_string($date)) { + return strtotime($date); + } else { + return null; + } + } + + public function getDefaultIncludes() + { + return $this->defaultIncludes; + } + + protected function getDefaults($entity) + { + $data = [ + 'is_owner' => (bool) (Auth::check() && Auth::user()->owns($entity)), + ]; + + if ($entity->relationLoaded('user')) { + $data['user_id'] = (int) $entity->user->public_id + 1; + } + + return $data; + } +} diff --git a/app/Transformers/PaymentTransformer.php b/app/Transformers/PaymentTransformer.php index 49656f0b05e6..1351109eab75 100644 --- a/app/Transformers/PaymentTransformer.php +++ b/app/Transformers/PaymentTransformer.php @@ -1,6 +1,6 @@ invoice = $invoice; + $this->serializer = $serializer; + } public function includeInvoice(Payment $payment) { - $transformer = new InvoiceTransformer($this->account, $this->serializer); + $transformer = new InvoiceTransformer($this->serializer); - return $this->includeItem($payment->invoice, $transformer, 'invoice'); + return $this->includeItem($payment->invoice, $transformer, Invoice::class); } public function includeClient(Payment $payment) { - $transformer = new ClientTransformer($this->account, $this->serializer); + $transformer = new ClientTransformer($this->serializer); - return $this->includeItem($payment->client, $transformer, 'client'); + return $this->includeItem($payment->client, $transformer, Client::class); } - +//todo incomplete public function transform(Payment $payment) { - return array_merge($this->getDefaults($payment), [ - 'id' => (int) $payment->public_id, + return [ + 'id' => (int) $payment->id, 'amount' => (float) $payment->amount, 'transaction_reference' => $payment->transaction_reference ?: '', 'payment_date' => $payment->payment_date ?: '', diff --git a/app/Transformers/UserTransformer.php b/app/Transformers/UserTransformer.php new file mode 100644 index 000000000000..106416fed8a4 --- /dev/null +++ b/app/Transformers/UserTransformer.php @@ -0,0 +1,74 @@ + (int) $user->id, + 'first_name' => $user->first_name, + 'last_name' => $user->last_name, + 'email' => $user->email, + 'updated_at' => $user->updated_at, + 'deleted_at' => $user->deleted_at, + 'phone' => $user->phone, + 'email_verified_at' => $user->email_verified_at, + 'oauth_user_id' => $user->oauth_user_id, + 'oauth_provider_id' => $user->oauth_provider_id, + 'signature' => $user->signature, + ]; + } + + public function includeUserCompany(User $user) + { + + $transformer = new UserCompanyTransformer($this->serializer); + + return $this->includeItem($user->user_company(), $transformer, CompanyUser::class); + + } + +}