1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-10 05:02:36 +01:00

Fix companygatewaytransformer (#3677)

* Working on subscriptions

* Implement return type in models

* Subscription implementation

* Improvements to handling importation of large accountS

* Loggin imports

* Activate collector

* Improve memory usage of import script

* Appen Tags into emails - fix companygatewaytransformer
This commit is contained in:
David Bomba 2020-05-06 21:49:42 +10:00 committed by GitHub
parent b0968b6aff
commit b3eb2ae3b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
57 changed files with 444 additions and 33 deletions

View File

@ -77,6 +77,18 @@ class MigrationController extends BaseController
*/
public function purgeCompany(Company $company)
{
// $account = $company->account;
// if($account->default_company_id == $company->id)
// {
// $companies = $account->companies;
// if($companies->count() > 1)
// {
// }
// }
$company->delete();
return response()->json(['message' => 'Company purged'], 200);
@ -207,6 +219,9 @@ class MigrationController extends BaseController
$account = auth()->user()->account;
$company = (new ImportMigrations())->getCompany($account);
$account->default_company_id = $company->id;
$account->save();
$company_token = new CompanyToken();
$company_token->user_id = $user->id;
$company_token->company_id = $company->id;
@ -262,6 +277,10 @@ class MigrationController extends BaseController
$account = auth()->user()->account;
$company = (new ImportMigrations())->getCompany($account);
$account->default_company_id = $company->id;
$account->save();
$company_token = new CompanyToken();
$company_token->user_id = $user->id;
$company_token->company_id = $company->id;
@ -291,6 +310,10 @@ class MigrationController extends BaseController
$account = auth()->user()->account;
$company = (new ImportMigrations())->getCompany($account);
$account->default_company_id = $company->id;
$account->save();
$company_token = new CompanyToken();
$company_token->user_id = $user->id;
$company_token->company_id = $company->id;

View File

@ -147,6 +147,9 @@ class Import implements ShouldQueue
*/
public function handle()
{
set_time_limit(0);
foreach ($this->data as $key => $resource) {
if (! in_array($key, $this->available_imports)) {
//throw new ResourceNotAvailableForMigration("Resource {$key} is not available for migration.");
@ -193,6 +196,12 @@ class Import implements ShouldQueue
$company_repository->save($data, $this->company);
Company::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
$rules = null;
$validator = null;
$company_repository = null;
}
private function transformCompanyData(array $data): array
@ -258,6 +267,11 @@ class Import implements ShouldQueue
}
TaxRate::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
$rules = null;
$validator = null;
}
/**
@ -305,6 +319,12 @@ class Import implements ShouldQueue
}
User::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
$rules = null;
$validator = null;
$user_repository = null;
}
/**
@ -358,6 +378,11 @@ class Import implements ShouldQueue
}
Client::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
$contact_repository = null;
$client_repository = null;
}
private function processProducts(array $data): void
@ -396,6 +421,10 @@ class Import implements ShouldQueue
}
Product::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
$product_repository = null;
}
private function processInvoices(array $data): void
@ -414,7 +443,8 @@ class Import implements ShouldQueue
$invoice_repository = new InvoiceRepository();
foreach ($data as $resource) {
foreach ($data as $key => $resource) {
$modified = $resource;
if (array_key_exists('client_id', $resource) && ! array_key_exists('clients', $this->ids)) {
@ -442,6 +472,11 @@ class Import implements ShouldQueue
}
Invoice::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
$invoice_repository = null;
}
private function processCredits(array $data): void
@ -487,6 +522,10 @@ class Import implements ShouldQueue
}
Credit::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
$credit_repository = null;
}
private function processQuotes(array $data): void
@ -535,6 +574,10 @@ class Import implements ShouldQueue
}
Quote::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
$quote_repository = null;
}
private function processPayments(array $data): void
@ -570,6 +613,7 @@ class Import implements ShouldQueue
unset($modified['invoice_id']);
if (isset($modified['invoices'])) {
foreach ($modified['invoices'] as $invoice) {
$invoice['invoice_id'] = $this->transformId('invoices', $invoice['invoice_id']);
}
@ -591,6 +635,10 @@ class Import implements ShouldQueue
}
Payment::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
$payment_repository = null;
}
private function processDocuments(array $data): void
@ -642,6 +690,9 @@ class Import implements ShouldQueue
}
Document::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
}
private function processCompanyGateways(array $data) :void
@ -688,6 +739,9 @@ class Import implements ShouldQueue
}
CompanyGateway::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
}
private function processClientGatewayTokens(array $data) :void
@ -715,6 +769,9 @@ class Import implements ShouldQueue
}
ClientGatewayToken::reguard();
/*Improve memory handling by setting everything to null when we have finished*/
$data = null;
}
/**

View File

@ -2,24 +2,34 @@
namespace App\Jobs\Util;
use App\Models\Subscription;
use App\Transformers\ArraySerializer;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use League\Fractal\Manager;
use League\Fractal\Resource\Item;
class SubscriptionHandler implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $entity;
private $event_id;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
public function __construct($event_id, $entity)
{
//
$this->event_id = $event_id;
$this->entity = $entity;
}
/**
@ -29,6 +39,55 @@ class SubscriptionHandler implements ShouldQueue
*/
public function handle()
{
//
$subscriptions = Subscription::where('company_id', $this->entity->company_id)
->where('event_id', $this->event_id)
->get();
if(!$subscriptions || $subscriptions->count() == 0)
return;
$subscriptions->each(function($subscription) {
$this->process($subscription);
});
}
private function process($subscription)
{
// generate JSON data
$manager = new Manager();
$manager->setSerializer(new ArraySerializer());
$manager->parseIncludes($include);
$transformer = new $this->getTransformerClassName();
$resource = new Item($this->entity, $transformer, $this->entity->getEntityType());
$data = $manager->createData($resource)->toArray();
$this->postData($subscription, $data, []);
}
private function getTransformerClassName()
{
return sprintf('App\\Transformers\\%sTransformer', class_basename($this->entity));
}
private function postData($subscription, $data, $headers = [])
{
$base_headers = [
'Content-Length' => strlen($data),
'Accept' => 'application/json'
];
$client = new \GuzzleHttp\Client(['headers' => array_merge($base_headers, $headers)]);
//$response = $client->request('POST', $subscription->target_url, ['form_params' => $data]);
$response = $client->post($subscription->target_url, [
GuzzleHttp\RequestOptions::JSON => $data // or 'json' => [...]
]);
if ($response->getStatusCode() == 410 || $response->getStatusCode() == 200) {
$subscription->delete();
}
}
}

View File

@ -84,9 +84,12 @@ class Account extends BaseModel
const RESULT_FAILURE = 'failure';
const RESULT_SUCCESS = 'success';
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function getEntityType()
{
return Account::class;
}
public function users()
{

View File

@ -79,6 +79,12 @@ class Activity extends StaticModel
'deleted_at' => 'timestamp',
];
public function getEntityType()
{
return Activity::class;
}
public function backup()
{
return $this->hasOne(Backup::class);

View File

@ -18,6 +18,12 @@ use Laracasts\Presenter\PresentableTrait;
class Backup extends BaseModel
{
public function getEntityType()
{
return Backup::class;
}
public function activity()
{
return $this->belongsTo(Activity::class);

View File

@ -32,4 +32,10 @@ class Bank extends StaticModel
return new \App\Libraries\Bank($finance, $config->fid, $config->url, $config->org);
}
public function getEntityType()
{
return Bank::class;
}
}

View File

@ -67,4 +67,10 @@ class BankAccount extends BaseModel
{
return $this->hasMany('App\Models\BankSubaccount');
}
public function getEntityType()
{
return BankAccount::class;
}
}

View File

@ -113,6 +113,11 @@ class Client extends BaseModel implements HasLocalePreference
'deleted_at' => 'timestamp',
];
public function getEntityType()
{
return Client::class;
}
public function ledger()
{
return $this->hasMany(CompanyLedger::class);

View File

@ -86,6 +86,11 @@ class ClientContact extends Authenticatable implements HasLocalePreference
'is_primary',
];
public function getEntityType()
{
return ClientContact::class;
}
public function getHashedIdAttribute()
{
return $this->encodePrimaryKey($this->id);

View File

@ -29,6 +29,11 @@ class ClientGatewayToken extends BaseModel
'deleted_at' => 'timestamp',
];
public function getEntityType()
{
return ClientGatewayToken::class;
}
public function client()
{
return $this->hasOne(Client::class)->withTrashed();

View File

@ -133,6 +133,11 @@ class Company extends BaseModel
self::ENTITY_RECURRING_QUOTE => 2048,
];
public function getEntityType()
{
return Company::class;
}
public function ledger()
{
return $this->hasMany(CompanyLedger::class);

View File

@ -55,6 +55,11 @@ class CompanyGateway extends BaseModel
// return json_decode($this->attributes['fees_and_limits']);
// }
public function getEntityType()
{
return CompanyGateway::class;
}
public function company()
{
return $this->belongsTo(Company::class);

View File

@ -27,6 +27,11 @@ class CompanyLedger extends Model
'deleted_at' => 'timestamp',
];
public function getEntityType()
{
return CompanyLedger::class;
}
public function user()
{
return $this->belongsTo(User::class);

View File

@ -27,6 +27,11 @@ class CompanyToken extends BaseModel
protected $with = [
];
public function getEntityType()
{
return CompanyToken::class;
}
public function account()
{
return $this->belongsTo(Account::class);

View File

@ -48,6 +48,11 @@ class CompanyUser extends Pivot
'slack_webhook_url',
];
public function getEntityType()
{
return CompanyUser::class;
}
public function account()
{
return $this->belongsTo(Account::class);

View File

@ -80,6 +80,11 @@ class Credit extends BaseModel
const STATUS_PARTIAL = 3;
const STATUS_APPLIED = 4;
public function getEntityType()
{
return Credit::class;
}
public function getDateAttribute($value)
{
if (!empty($value)) {

View File

@ -36,6 +36,11 @@ class CreditInvitation extends BaseModel
// 'company',
];
public function getEntityType()
{
return CreditInvitation::class;
}
public function getSignatureDateAttribute($value)
{
if (!$value) {

View File

@ -88,6 +88,10 @@ class Document extends BaseModel
'tif' => 'tiff',
];
public function getEntityType()
{
return Document::class;
}
public function documentable()
{

View File

@ -60,6 +60,10 @@ class Expense extends BaseModel
'deleted_at' => 'timestamp',
];
public function getEntityType()
{
return Expense::class;
}
public function documents()
{

View File

@ -23,6 +23,11 @@ class ExpenseCategory extends BaseModel
'name',
];
public function getEntityType()
{
return ExpenseCategory::class;
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/

View File

@ -131,6 +131,11 @@ class Invoice extends BaseModel
const STATUS_OVERDUE = -1; //status < 4 || < 3 && !is_deleted && !trashed() && due_date < now()
const STATUS_UNPAID = -2; //status < 4 || < 3 && !is_deleted && !trashed()
public function getEntityType()
{
return Invoice::class;
}
public function getDateAttribute($value)
{
if (!empty($value)) {

View File

@ -35,6 +35,10 @@ class InvoiceInvitation extends BaseModel
// 'company',
];
public function getEntityType()
{
return InvoiceInvitation::class;
}
public function getSignatureDateAttribute($value)
{

View File

@ -79,6 +79,11 @@ class Payment extends BaseModel
'paymentables',
];
public function getEntityType()
{
return Payment::class;
}
public function client()
{
return $this->belongsTo(Client::class)->withTrashed();

View File

@ -40,6 +40,11 @@ class Product extends BaseModel
'tax_rate3',
];
public function getEntityType()
{
return Product::class;
}
public function company()
{
return $this->belongsTo(Company::class);

View File

@ -37,6 +37,11 @@ class Project extends BaseModel
'created_at' => 'timestamp',
];
public function getEntityType()
{
return Project::class;
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/

View File

@ -22,6 +22,11 @@ class Proposal extends BaseModel
'id',
];
public function getEntityType()
{
return Proposal::class;
}
protected $appends = ['proposal_id'];
public function getRouteKeyName()

View File

@ -86,6 +86,11 @@ class Quote extends BaseModel
const STATUS_APPROVED = 3;
const STATUS_EXPIRED = -1;
public function getEntityType()
{
return Quote::class;
}
public function getDateAttribute($value)
{
if (!empty($value)) {

View File

@ -30,6 +30,11 @@ class QuoteInvitation extends BaseModel
'client_contact_id',
];
public function getEntityType()
{
return QuoteInvitation::class;
}
public function getSignatureDateAttribute($value)
{
if (!$value) {

View File

@ -111,6 +111,11 @@ class RecurringInvoice extends BaseModel
'status'
];
public function getEntityType()
{
return RecurringInvoice::class;
}
public function getDateAttribute($value)
{
if (!empty($value)) {

View File

@ -18,6 +18,11 @@ class RecurringInvoiceInvitation extends BaseModel
{
use MakesDates;
public function getEntityType()
{
return RecurringInvoiceInvitation::class;
}
/**
* @return mixed
*/

View File

@ -94,6 +94,11 @@ class RecurringQuote extends BaseModel
// 'company',
];
public function getEntityType()
{
return RecurringQuote::class;
}
public function getDateAttribute($value)
{
if (!empty($value)) {

View File

@ -35,6 +35,11 @@ class Task extends BaseModel
'created_at' => 'timestamp',
];
public function getEntityType()
{
return Task::class;
}
public function documents()
{
return $this->morphMany(Document::class, 'documentable');

View File

@ -27,6 +27,11 @@ class TaxRate extends BaseModel
protected $appends = ['tax_rate_id'];
public function getEntityType()
{
return TaxRate::class;
}
public function getRouteKeyName()
{
return 'tax_rate_id';

View File

@ -101,6 +101,11 @@ class User extends Authenticatable implements MustVerifyEmail
//'last_login' => 'timestamp',
];
public function getEntityType()
{
return User::class;
}
public function getHashedIdAttribute()
{
return $this->encodePrimaryKey($this->id);

View File

@ -57,6 +57,11 @@ class Vendor extends BaseModel
// 'contacts',
];
public function getEntityType()
{
return Vendor::class;
}
public function documents()
{
return $this->morphMany(Document::class, 'documentable');

View File

@ -71,6 +71,11 @@ class VendorContact extends Authenticatable implements HasLocalePreference
'is_primary',
];
public function getEntityType()
{
return VendorContact::class;
}
public function getHashedIdAttribute()
{
return $this->encodePrimaryKey($this->id);

View File

@ -97,7 +97,10 @@ class EntitySentNotification extends Notification implements ShouldQueue
return (new MailMessage)
->subject($subject)
->markdown('email.admin.generic', $data);
->markdown('email.admin.generic', $data)
->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->company->company_key);
});
}
/**

View File

@ -73,7 +73,10 @@ class EntityViewedNotification extends Notification implements ShouldQueue
return (new MailMessage)
->subject($subject)
->markdown('email.admin.generic', $data);
->markdown('email.admin.generic', $data)
->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->company->company_key);
});
}
/**

View File

@ -91,7 +91,10 @@ class InvoiceSentNotification extends Notification implements ShouldQueue
return (new MailMessage)
->subject($subject)
->markdown('email.admin.generic', $data);
->markdown('email.admin.generic', $data)
->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->company->company_key);
});
}
/**

View File

@ -89,7 +89,10 @@ class InvoiceViewedNotification extends Notification implements ShouldQueue
return (new MailMessage)
->subject($subject)
->markdown('email.admin.generic', $data);
->markdown('email.admin.generic', $data)
->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->company->company_key);
});
}
/**

View File

@ -93,7 +93,10 @@ class NewPartialPaymentNotification extends Notification implements ShouldQueue
'texts.notification_partial_payment_paid_subject',
['client' => $this->payment->client->present()->name()]
)
)->markdown('email.admin.generic', $data);
)->markdown('email.admin.generic', $data)
->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->company->company_key);
});
}
/**

View File

@ -96,7 +96,10 @@ class NewPaymentNotification extends Notification implements ShouldQueue
'texts.notification_payment_paid_subject',
['client' => $this->payment->client->present()->name(),]
)
)->markdown('email.admin.generic', $data);
)->markdown('email.admin.generic', $data)
->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->company->company_key);
});
}
/**

View File

@ -88,7 +88,9 @@ class BaseNotification extends Notification implements ShouldQueue
}
return $mail_message;
return $mail_message->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->invitation->company->company_key);
});
}
public function buildMailMessageData() :array

View File

@ -70,6 +70,9 @@ class NewAccountCreated extends Notification implements ShouldQueue
return (new MailMessage)
->subject(ctrans('texts.new_signup'))
->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->company->company_key);
})
->markdown('email.admin.generic', $data);
}

View File

@ -70,7 +70,10 @@ class NewAccountCreated extends Notification implements ShouldQueue
return (new MailMessage)
->subject(ctrans('texts.new_signup'))
->markdown('email.admin.generic', $data);
->markdown('email.admin.generic', $data)
->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->company->company_key);
});
}
/**

View File

@ -74,7 +74,9 @@ class SendGenericNotification extends BaseNotification implements ShouldQueue
public function toMail($notifiable)
{
$mail_message = (new MailMessage)
->markdown('email.admin.generic_email', $this->buildMailMessageData());
->withSwiftMessage(function ($message) {
$message->getHeaders()->addTextHeader('Tag', $this->invitation->company->company_key);
})->markdown('email.admin.generic_email', $this->buildMailMessageData());
$mail_message = $this->buildMailMessageSettings($mail_message);

View File

@ -12,7 +12,9 @@
namespace App\Observers;
use App\Events\Client\ClientWasCreated;
use App\Jobs\Util\SubscriptionHandler;
use App\Models\Client;
use App\Models\Subscription;
class ClientObserver
{
@ -25,6 +27,8 @@ class ClientObserver
public function created(Client $client)
{
event(new ClientWasCreated($client));
SubscriptionHandler::dispatch(Subscription::EVENT_CREATE_CLIENT, $client);
}
/**
@ -35,7 +39,7 @@ class ClientObserver
*/
public function updated(Client $client)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_UPDATE_CLIENT, $client);
}
/**
@ -46,7 +50,8 @@ class ClientObserver
*/
public function deleted(Client $client)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_DELETE_CLIENT, $client);
}
/**

View File

@ -11,7 +11,9 @@
namespace App\Observers;
use App\Jobs\Util\SubscriptionHandler;
use App\Models\Expense;
use App\Models\Subscription;
class ExpenseObserver
{
@ -23,7 +25,7 @@ class ExpenseObserver
*/
public function created(Expense $expense)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_CREATE_EXPENSE, $expense);
}
/**
@ -34,7 +36,7 @@ class ExpenseObserver
*/
public function updated(Expense $expense)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_UPDATE_EXPENSE, $expense);
}
/**
@ -45,7 +47,7 @@ class ExpenseObserver
*/
public function deleted(Expense $expense)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_DELETE_EXPENSE, $expense);
}
/**

View File

@ -11,7 +11,9 @@
namespace App\Observers;
use App\Jobs\Util\SubscriptionHandler;
use App\Models\Invoice;
use App\Models\Subscription;
class InvoiceObserver
{
@ -23,7 +25,7 @@ class InvoiceObserver
*/
public function created(Invoice $invoice)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_CREATE_INVOICE, $invoice);
}
/**
@ -34,7 +36,7 @@ class InvoiceObserver
*/
public function updated(Invoice $invoice)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_UPDATE_INVOICE, $invoice);
}
/**
@ -45,7 +47,7 @@ class InvoiceObserver
*/
public function deleted(Invoice $invoice)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_DELETE_INVOICE, $invoice);
}
/**

View File

@ -12,7 +12,9 @@
namespace App\Observers;
use App\Events\Payment\PaymentWasCreated;
use App\Jobs\Util\SubscriptionHandler;
use App\Models\Payment;
use App\Models\Subscription;
class PaymentObserver
{
@ -24,6 +26,7 @@ class PaymentObserver
*/
public function created(Payment $payment)
{
SubscriptionHandler::dispatch(Subscription::EVENT_CREATE_PAYMENT, $payment);
}
/**
@ -34,7 +37,6 @@ class PaymentObserver
*/
public function updated(Payment $payment)
{
//
}
/**
@ -45,7 +47,7 @@ class PaymentObserver
*/
public function deleted(Payment $payment)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_DELETE_PAYMENT, $payment);
}
/**

View File

@ -11,7 +11,9 @@
namespace App\Observers;
use App\Jobs\Util\SubscriptionHandler;
use App\Models\Quote;
use App\Models\Subscription;
class QuoteObserver
{
@ -23,7 +25,7 @@ class QuoteObserver
*/
public function created(Quote $quote)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_CREATE_QUOTE, $quote);
}
/**
@ -34,7 +36,7 @@ class QuoteObserver
*/
public function updated(Quote $quote)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_UPDATE_QUOTE, $quote);
}
/**
@ -45,7 +47,7 @@ class QuoteObserver
*/
public function deleted(Quote $quote)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_DELETE_QUOTE, $quote);
}
/**

View File

@ -11,6 +11,8 @@
namespace App\Observers;
use App\Jobs\Util\SubscriptionHandler;
use App\Models\Subscription;
use App\Models\Task;
class TaskObserver
@ -23,7 +25,7 @@ class TaskObserver
*/
public function created(Task $task)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_CREATE_TASK, $task);
}
/**
@ -34,7 +36,7 @@ class TaskObserver
*/
public function updated(Task $task)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_UPDATE_TASK, $task);
}
/**
@ -45,7 +47,7 @@ class TaskObserver
*/
public function deleted(Task $task)
{
//
SubscriptionHandler::dispatch(Subscription::EVENT_DELETE_TASK, $task);
}
/**

View File

@ -53,7 +53,7 @@ class CompanyGatewayTransformer extends EntityTransformer
'show_shipping_address' => (bool)$company_gateway->show_shipping_address,
'update_details' => (bool)$company_gateway->update_details,
'config' => (string) $company_gateway->getConfigTransformed(),
'fees_and_limits' => $company_gateway->fees_and_limits ?: '',
'fees_and_limits' => $company_gateway->fees_and_limits ?: new \stdClass,
'updated_at' => (int)$company_gateway->updated_at,
'archived_at' => (int)$company_gateway->deleted_at,
'created_at' => (int)$company_gateway->created_at,

View File

@ -32,6 +32,7 @@
"fideloper/proxy": "^4.0",
"fzaninotto/faker": "^1.4",
"google/apiclient": "^2.0",
"guzzlehttp/guzzle": "^6.5",
"hashids/hashids": "^3.0",
"intervention/image": "^2.4",
"laracasts/presenter": "^0.2.1",

View File

@ -31,6 +31,9 @@ class AddIsDeletedColumnToCompanyTokensTable extends Migration
$table->softDeletes('deleted_at', 6);
$table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
$table->index(['event_id', 'company_id']);
});
Schema::table('companies', function (Blueprint $table) {

56
tests/Unit/EntityTest.php Normal file
View File

@ -0,0 +1,56 @@
<?php
namespace Tests\Unit;
use App\Factory\InvoiceFactory;
use App\Factory\InvoiceItemFactory;
use App\Helpers\Invoice\InvoiceSum;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\MockAccountData;
use Tests\TestCase;
/**
* @test
*/
class EntityTest extends TestCase
{
use MockAccountData;
use DatabaseTransactions;
public $invoice;
public $invoice_calc;
public $settings;
public function setUp() :void
{
parent::setUp();
$this->makeTestData();
$this->invoice->line_items = $this->buildLineItems();
$this->invoice_calc = new InvoiceSum($this->invoice);
}
public function testEntityNameResolution()
{
$entity_type = $this->invoice->getEntityType();
$this->assertEquals('Invoice', class_basename($entity_type));
$invitation = $this->invoice->invitations->first();
$entity_type = $invitation->getEntityType();
$this->assertEquals('InvoiceInvitation', class_basename($entity_type));
$this->assertEquals('InvoiceInvitation', class_basename($invitation));
}
}