From 67492c3384c456826ddbaac08471bd35a966f4d4 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 18 Sep 2020 07:49:22 +1000 Subject: [PATCH] Recurring Invoice Invitations --- app/Models/RecurringInvoice.php | 5 +++ app/Models/RecurringInvoiceInvitation.php | 9 ---- .../RecurringInvoiceInvitationTransformer.php | 33 ++++++++++++++ .../RecurringInvoiceTransformer.php | 43 ++++++++++--------- ...40557_add_is_public_to_documents_table.php | 19 ++++++++ 5 files changed, 79 insertions(+), 30 deletions(-) create mode 100644 app/Transformers/RecurringInvoiceInvitationTransformer.php diff --git a/app/Models/RecurringInvoice.php b/app/Models/RecurringInvoice.php index adedd9f8bb76..aaefb46b0d30 100644 --- a/app/Models/RecurringInvoice.php +++ b/app/Models/RecurringInvoice.php @@ -181,6 +181,11 @@ class RecurringInvoice extends BaseModel $this->morphMany(RecurringInvoiceInvitation::class); } + public function documents() + { + return $this->morphMany(Document::class, 'documentable'); + } + public function getStatusAttribute() { if ($this->status_id == self::STATUS_ACTIVE && $this->next_send_date > Carbon::now()) { //marked as active, but yet to fire first cycle diff --git a/app/Models/RecurringInvoiceInvitation.php b/app/Models/RecurringInvoiceInvitation.php index d5a66a8415c0..6d3f7cca1922 100644 --- a/app/Models/RecurringInvoiceInvitation.php +++ b/app/Models/RecurringInvoiceInvitation.php @@ -11,12 +11,10 @@ namespace App\Models; -use App\Utils\Traits\MakesDates; use Illuminate\Database\Eloquent\Model; class RecurringInvoiceInvitation extends BaseModel { - use MakesDates; protected $fillable = ['client_contact_id']; @@ -59,12 +57,5 @@ class RecurringInvoiceInvitation extends BaseModel return $this->belongsTo(Company::class); } - public function signatureDiv() - { - if (! $this->signature_base64) { - return false; - } - return sprintf('

%s: %s', $this->signature_base64, ctrans('texts.signed'), $this->createClientDate($this->signature_date, $this->contact->client->timezone()->name)); - } } diff --git a/app/Transformers/RecurringInvoiceInvitationTransformer.php b/app/Transformers/RecurringInvoiceInvitationTransformer.php new file mode 100644 index 000000000000..aff8dee99096 --- /dev/null +++ b/app/Transformers/RecurringInvoiceInvitationTransformer.php @@ -0,0 +1,33 @@ + $this->encodePrimaryKey($invitation->id), + 'client_contact_id' => $this->encodePrimaryKey($invitation->client_contact_id), + 'key' => $invitation->key, + 'updated_at' => (int) $invitation->updated_at, + 'archived_at' => (int) $invitation->deleted_at, + 'created_at' => (int) $invitation->created_at, + ]; + } +} diff --git a/app/Transformers/RecurringInvoiceTransformer.php b/app/Transformers/RecurringInvoiceTransformer.php index ffbb8c450318..b43e1195dc38 100644 --- a/app/Transformers/RecurringInvoiceTransformer.php +++ b/app/Transformers/RecurringInvoiceTransformer.php @@ -11,8 +11,12 @@ namespace App\Transformers; +use App\Models\Document; use App\Models\Invoice; use App\Models\RecurringInvoice; +use App\Models\RecurringInvoiceInvitation; +use App\Transformers\DocumentTransformer; +use App\Transformers\RecurringInvoiceInvitationTransformer; use App\Utils\Traits\MakesHash; class RecurringInvoiceTransformer extends EntityTransformer @@ -20,14 +24,15 @@ class RecurringInvoiceTransformer extends EntityTransformer use MakesHash; protected $defaultIncludes = [ - // 'invoice_items', + 'invitations', + 'documents', ]; protected $availableIncludes = [ - // 'invitations', + 'invitations', + 'documents', // 'payments', // 'client', - // 'documents', ]; /* @@ -58,25 +63,21 @@ class RecurringInvoiceTransformer extends EntityTransformer return $this->includeItem($invoice->client, $transformer, ENTITY_CLIENT); } - - public function includeExpenses(Invoice $invoice) - { - $transformer = new ExpenseTransformer($this->account, $this->serializer); - - return $this->includeCollection($invoice->expenses, $transformer, ENTITY_EXPENSE); - } - - public function includeDocuments(Invoice $invoice) - { - $transformer = new DocumentTransformer($this->account, $this->serializer); - - $invoice->documents->each(function ($document) use ($invoice) { - $document->setRelation('invoice', $invoice); - }); - - return $this->includeCollection($invoice->documents, $transformer, ENTITY_DOCUMENT); - } */ + public function includeInvitations(RecurringInvoice $invoice) + { + $transformer = new RecurringInvoiceInvitationTransformer($this->serializer); + + return $this->includeCollection($invoice->invitations, $transformer, RecurringInvoiceInvitation::class); + } + + public function includeDocuments(RecurringInvoice $invoice) + { + $transformer = new DocumentTransformer($this->serializer); + + return $this->includeCollection($invoice->documents, $transformer, Document::class); + } + public function transform(RecurringInvoice $invoice) { return [ diff --git a/database/migrations/2020_08_18_140557_add_is_public_to_documents_table.php b/database/migrations/2020_08_18_140557_add_is_public_to_documents_table.php index 119434755b2a..b843e2bd93a1 100644 --- a/database/migrations/2020_08_18_140557_add_is_public_to_documents_table.php +++ b/database/migrations/2020_08_18_140557_add_is_public_to_documents_table.php @@ -76,6 +76,25 @@ class AddIsPublicToDocumentsTable extends Migration $table->enum('default_auto_bill', ['off', 'always', 'optin', 'optout'])->default('off'); }); + Schema::create('recurring_invoice_invitations', function ($t) { + $t->increments('id'); + $t->unsignedInteger('company_id'); + $t->unsignedInteger('user_id'); + $t->unsignedInteger('client_contact_id'); + $t->unsignedInteger('recurring_invoice_id')->index(); + $t->string('key')->index(); + + $t->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade'); + $t->foreign('client_contact_id')->references('id')->on('client_contacts')->onDelete('cascade')->onUpdate('cascade'); + $t->foreign('recurring_invoice_id')->references('id')->on('recurring_invoices')->onDelete('cascade')->onUpdate('cascade'); + $t->foreign('company_id')->references('id')->on('companies')->onDelete('cascade')->onUpdate('cascade'); + + $t->timestamps(6); + $t->softDeletes('deleted_at', 6); + + $t->index(['deleted_at', 'recurring_invoice_id', 'company_id'], 'rec_co_del'); + $t->unique(['client_contact_id', 'recurring_invoice_id'], 'cli_rec'); + }); } /**