Fixes for converting quotes to invoices - invitations

This commit is contained in:
David Bomba 2021-10-18 13:31:21 +11:00
parent 8e586c788d
commit 37aac0db03
5 changed files with 73 additions and 28 deletions

View File

@ -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,6 +34,7 @@ class SendRecurring implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
use GeneratesCounter;
use MakesHash;
public $recurring_invoice;
@ -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');

View File

@ -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'])) {

View File

@ -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;
}
}

View File

@ -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();

View File

@ -54,8 +54,6 @@ class RecurringService
return $this;
}
// $this->createInvitations()->setStatus(RecurringInvoice::STATUS_ACTIVE);
$this->setStatus(RecurringInvoice::STATUS_ACTIVE);
return $this;