diff --git a/app/Jobs/RecurringInvoice/SendRecurring.php b/app/Jobs/RecurringInvoice/SendRecurring.php index 441c4f2b5769..cd150fdb9662 100644 --- a/app/Jobs/RecurringInvoice/SendRecurring.php +++ b/app/Jobs/RecurringInvoice/SendRecurring.php @@ -13,12 +13,14 @@ namespace App\Jobs\RecurringInvoice; use App\DataMapper\Analytics\SendRecurringFailure; use App\Events\Invoice\InvoiceWasEmailed; +use App\Factory\InvoiceInvitationFactory; use App\Factory\RecurringInvoiceToInvoiceFactory; use App\Jobs\Entity\EmailEntity; use App\Models\Invoice; use App\Models\RecurringInvoice; use App\Utils\Ninja; use App\Utils\Traits\GeneratesCounter; +use App\Utils\Traits\MakesHash; use App\Utils\Traits\MakesInvoiceValues; use Carbon\Carbon; use Illuminate\Bus\Queueable; @@ -32,7 +34,8 @@ class SendRecurring implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; use GeneratesCounter; - + use MakesHash; + public $recurring_invoice; protected $db; @@ -58,16 +61,6 @@ class SendRecurring implements ShouldQueue */ public function handle() : void { - //reset all contacts here - // $this->recurring_invoice->client->contacts()->update(['send_email' => false]); - - // $this->recurring_invoice->invitations->each(function ($invitation){ - - // $contact = $invitation->contact; - // $contact->send_email = true; - // $contact->save(); - - // }); // Generate Standard Invoice $invoice = RecurringInvoiceToInvoiceFactory::create($this->recurring_invoice, $this->recurring_invoice->client); @@ -86,10 +79,12 @@ class SendRecurring implements ShouldQueue $invoice = $invoice->service() ->markSent() ->applyNumber() - ->createInvitations() //need to only link invitations to those in the recurring invoice + // ->createInvitations() //need to only link invitations to those in the recurring invoice ->fillDefaults() ->save(); - + + $invoice = $this->createRecurringInvitations($invoice); + } else{ @@ -154,6 +149,28 @@ class SendRecurring implements ShouldQueue } + /** + * Only create the invitations that are defined on the recurring invoice. + * @param Invoice $invoice + * @return Invoice $invoice + */ + private function createRecurringInvitations($invoice) :Invoice + { + + $this->recurring_invoice->invitations->each(function ($recurring_invitation) use($invoice){ + + $ii = InvoiceInvitationFactory::create($invoice->company_id, $invoice->user_id); + $ii->key = $this->createDbHash(config('database.default')); + $ii->invoice_id = $invoice->id; + $ii->client_contact_id = $recurring_invitation->client_contact_id; + $ii->save(); + + }); + + + return $invoice->fresh(); + } + public function failed($exception = null) { nlog('the job failed'); diff --git a/app/Repositories/BaseRepository.php b/app/Repositories/BaseRepository.php index d75e03f7e6f6..e122fa3110c7 100644 --- a/app/Repositories/BaseRepository.php +++ b/app/Repositories/BaseRepository.php @@ -222,15 +222,15 @@ class BaseRepository $this->saveDocuments($data['documents'], $model); /* Marks whether the client contact should receive emails based on the send_email property */ - if (isset($data['client_contacts'])) { - foreach ($data['client_contacts'] as $contact) { - if ($contact['send_email'] == 1 && is_string($contact['id'])) { - $client_contact = ClientContact::find($this->decodePrimaryKey($contact['id'])); - $client_contact->send_email = true; - $client_contact->save(); - } - } - } + // if (isset($data['client_contacts'])) { + // foreach ($data['client_contacts'] as $contact) { + // if ($contact['send_email'] == 1 && is_string($contact['id'])) { + // $client_contact = ClientContact::find($this->decodePrimaryKey($contact['id'])); + // $client_contact->send_email = true; + // $client_contact->save(); + // } + // } + // } /* If invitations are present we need to filter existing invitations with the new ones */ if (isset($data['invitations'])) { diff --git a/app/Services/Quote/ConvertQuote.php b/app/Services/Quote/ConvertQuote.php index 23631b5baa01..12915ce54f24 100644 --- a/app/Services/Quote/ConvertQuote.php +++ b/app/Services/Quote/ConvertQuote.php @@ -13,6 +13,8 @@ namespace App\Services\Quote; use App\Factory\CloneQuoteToInvoiceFactory; +use App\Factory\InvoiceInvitationFactory; +use App\Models\Invoice; use App\Models\Quote; use App\Repositories\InvoiceRepository; use App\Utils\Traits\MakesHash; @@ -39,14 +41,20 @@ class ConvertQuote { $invoice = CloneQuoteToInvoiceFactory::create($quote, $quote->user_id); $invoice->design_id = $this->decodePrimaryKey($this->client->getSetting('invoice_design_id')); - $invoice = $this->invoice_repo->save($invoice->toArray(), $invoice); + + //create invitations here before the repo save() + //we need to do this here otherwise the repo_save will create + //invitations for ALL contacts + $invites = $this->createConversionInvitations($invoice, $quote); + $invoice_array = $invoice->toArray(); + $invoice_array['invitations'] = $invites; + + $invoice = $this->invoice_repo->save($invoice_array, $invoice); $invoice->fresh(); $invoice->service() ->fillDefaults() - // ->markSent() - // ->createInvitations() ->save(); $quote->invoice_id = $invoice->id; @@ -56,4 +64,26 @@ class ConvertQuote // maybe should return invoice here return $invoice; } + + /** + * Only create the invitations that are defined on the quote. + * + * @return Invoice $invoice + */ + private function createConversionInvitations($invoice, $quote) + { + $invites = []; + + foreach($quote->invitations as $quote_invitation){ + + $ii = InvoiceInvitationFactory::create($invoice->company_id, $invoice->user_id); + $ii->key = $this->createDbHash(config('database.default')); + $ii->client_contact_id = $quote_invitation->client_contact_id; + + $invites[] = $ii; + } + + return $invites; + } + } diff --git a/app/Services/Quote/QuoteService.php b/app/Services/Quote/QuoteService.php index b8865b8d2abf..a16210bf5be1 100644 --- a/app/Services/Quote/QuoteService.php +++ b/app/Services/Quote/QuoteService.php @@ -12,6 +12,7 @@ namespace App\Services\Quote; use App\Events\Quote\QuoteWasApproved; +use App\Factory\InvoiceInvitationFactory; use App\Jobs\Util\UnlinkFile; use App\Models\Invoice; use App\Models\Quote; @@ -117,7 +118,6 @@ class QuoteService $this->invoice ->service() ->markSent() - ->createInvitations() ->deletePdf() ->save(); diff --git a/app/Services/Recurring/RecurringService.php b/app/Services/Recurring/RecurringService.php index 0f7d8b892e2c..380cf8a66610 100644 --- a/app/Services/Recurring/RecurringService.php +++ b/app/Services/Recurring/RecurringService.php @@ -54,8 +54,6 @@ class RecurringService return $this; } - // $this->createInvitations()->setStatus(RecurringInvoice::STATUS_ACTIVE); - $this->setStatus(RecurringInvoice::STATUS_ACTIVE); return $this;