mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Copy documents when converting a quote to an invoice
This commit is contained in:
parent
01dde73e95
commit
a46a770496
85
app/Jobs/Document/CopyDocs.php
Normal file
85
app/Jobs/Document/CopyDocs.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\Jobs\Document;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\Company;
|
||||
use App\Models\Document;
|
||||
use App\Libraries\MultiDB;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
|
||||
class CopyDocs implements ShouldQueue
|
||||
{
|
||||
use Dispatchable;
|
||||
use InteractsWithQueue;
|
||||
use Queueable;
|
||||
use SerializesModels;
|
||||
|
||||
public $tries = 1;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function __construct(private \Illuminate\Support\Collection $document_ids, private $entity, private string $db)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the job.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
MultiDB::setDb($this->db);
|
||||
|
||||
Document::whereIn('id', $this->document_ids)
|
||||
->where('company_id', $this->entity->company_id)
|
||||
->each(function ($document){
|
||||
|
||||
$file = $document->getFile();
|
||||
|
||||
$extension = pathinfo($document->name, PATHINFO_EXTENSION);
|
||||
|
||||
$new_hash = \Illuminate\Support\Str::random(32) . "." . $extension;
|
||||
|
||||
Storage::disk($document->disk)->put(
|
||||
"{$this->entity->company->company_key}/documents/{$new_hash}",
|
||||
$file,
|
||||
);
|
||||
|
||||
$instance = Storage::disk($document->disk)->path("{$this->entity->company->company_key}/documents/{$new_hash}");
|
||||
|
||||
$new_doc = new Document();
|
||||
$new_doc->user_id = $this->entity->user_id;
|
||||
$new_doc->company_id = $this->entity->company_id;
|
||||
$new_doc->url = $instance;
|
||||
$new_doc->name = $document->name;
|
||||
$new_doc->type = $extension;
|
||||
$new_doc->disk = $document->disk;
|
||||
$new_doc->hash = $new_hash;
|
||||
$new_doc->size = $document->size;
|
||||
$new_doc->width = $document->width;
|
||||
$new_doc->height = $document->height;
|
||||
$new_doc->is_public = $document->is_public;
|
||||
|
||||
$this->entity->documents()->save($new_doc);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
@ -103,13 +103,6 @@ class Statement
|
||||
], \App\Services\PdfMaker\Design::STATEMENT),
|
||||
'variables' => $variables,
|
||||
'options' => [
|
||||
// 'client' => $this->client,
|
||||
// 'entity' => $this->entity,
|
||||
// 'variables' => $variables,
|
||||
// 'invoices' => $this->getInvoices()->cursor(),
|
||||
// 'payments' => $this->getPayments()->cursor(),
|
||||
// 'credits' => $this->getCredits()->cursor(),
|
||||
// 'aging' => $this->getAging(),
|
||||
],
|
||||
'process_markdown' => $this->entity->client->company->markdown_enabled,
|
||||
];
|
||||
|
@ -12,13 +12,15 @@
|
||||
|
||||
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\GeneratesConvertedQuoteCounter;
|
||||
use App\Models\Invoice;
|
||||
use App\Jobs\Util\UploadFile;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Repositories\InvoiceRepository;
|
||||
use App\Factory\InvoiceInvitationFactory;
|
||||
use App\Factory\CloneQuoteToInvoiceFactory;
|
||||
use App\Jobs\Document\CopyDocs;
|
||||
use App\Utils\Traits\GeneratesConvertedQuoteCounter;
|
||||
|
||||
class ConvertQuote
|
||||
{
|
||||
@ -73,7 +75,9 @@ class ConvertQuote
|
||||
$quote->status_id = Quote::STATUS_CONVERTED;
|
||||
$quote->save();
|
||||
|
||||
// maybe should return invoice here
|
||||
if($quote->documents()->count() > 0)
|
||||
CopyDocs::dispatch($quote->documents()->pluck('id'), $invoice, $invoice->company->db);
|
||||
|
||||
return $invoice;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user