From a87b8d1e99fba313d0a7e8a78882e8bed3aaaaa0 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 11 Nov 2022 14:52:50 +1100 Subject: [PATCH] EPC QR Codes WIP --- app/Console/Commands/BackupUpdate.php | 35 +++++++++--- app/Filters/ProductFilters.php | 3 ++ app/Helpers/Epc/EpcQrGenerator.php | 78 +++++++++++++++++++++++++++ app/Jobs/Company/CompanyImport.php | 2 +- 4 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 app/Helpers/Epc/EpcQrGenerator.php diff --git a/app/Console/Commands/BackupUpdate.php b/app/Console/Commands/BackupUpdate.php index e5bff73c5..b1ad1ddff 100644 --- a/app/Console/Commands/BackupUpdate.php +++ b/app/Console/Commands/BackupUpdate.php @@ -15,6 +15,7 @@ use App\Libraries\MultiDB; use App\Models\Backup; use App\Models\Company; use App\Models\Design; +use App\Models\Document; use Illuminate\Console\Command; use Illuminate\Support\Facades\Storage; use stdClass; @@ -76,29 +77,51 @@ class BackupUpdate extends Command set_time_limit(0); //logos - - Company::query() - ->cursor() + Company::cursor() ->each(function ($company){ - $logo = @file_get_contents($company->present()->logo()); + $company_logo = $company->present()->logo(); + + if($company_logo == 'https://invoicing.co/images/new_logo.png') + return; + + $logo = @file_get_contents($company_logo); if($logo){ - $path = str_replace("https://object.invoicing.co/", "", $company->present()->logo()); + $path = str_replace("https://objects.invoicing.co/", "", $company->present()->logo()); $path = str_replace("https://v5-at-backup.us-southeast-1.linodeobjects.com/", "", $path); Storage::disk($this->option('disk'))->put($path, $logo); - } }); //documents + Document::cursor() + ->each(function ($document){ + + $doc_bin = $document->getFile(); + + if($doc_bin) + Storage::disk($this->option('disk'))->put($document->url, $doc_bin); + + }); //backups + Backup::cursor() + ->each(function ($backup){ + + $backup_bin = Storage::disk('s3')->get($backup->filename); + + if($backup_bin) + Storage::disk($this->option('disk'))->put($backup->filename, $backup_bin); + + }); + + } } diff --git a/app/Filters/ProductFilters.php b/app/Filters/ProductFilters.php index a406b6521..4e4ed2f50 100644 --- a/app/Filters/ProductFilters.php +++ b/app/Filters/ProductFilters.php @@ -102,6 +102,9 @@ class ProductFilters extends QueryFilters { $sort_col = explode('|', $sort); + if(!is_array($sort_col)) + return $this->builder; + return $this->builder->orderBy($sort_col[0], $sort_col[1]); } diff --git a/app/Helpers/Epc/EpcQrGenerator.php b/app/Helpers/Epc/EpcQrGenerator.php new file mode 100644 index 000000000..adf36dc83 --- /dev/null +++ b/app/Helpers/Epc/EpcQrGenerator.php @@ -0,0 +1,78 @@ + 'BCD', + 'version' => 2, + 'characterSet' => 1, + 'identification' => 'SCT', + 'bic' => '', + 'purpose' => '', + + ]; + + public function __construct(protected Company $company, protected Invoice $invoice, protected float $amount){} + + public function getQrCode() + { + + $renderer = new ImageRenderer( + new RendererStyle(200), + new SvgImageBackEnd() + ); + $writer = new Writer($renderer); + + $qr = $writer->writeString($this->encodeMessage()); + + return " + {$qr}"; + + } + + public function encodeMessage() + { + + return rtrim(implode("\n", array( + $this->sepa['serviceTag'], + sprintf('%03d', $this->sepa['version']), + $this->sepa['characterSet'], + $this->sepa['identification'], + $this->sepa['bic'], + $this->company->present()->name(), + $this->company?->custom_fields?->company1 ?: '', + $this->formatMoney($this->amount), + $this->sepa['purpose'], + substr($this->invoice->number,0,34), + substr($this->invoice->public_notes,0,139), + '' + )), "\n"); + + } + + private function formatMoney($value) { + return sprintf('EUR%s', number_format($value, 2, '.', '')); + } +} \ No newline at end of file diff --git a/app/Jobs/Company/CompanyImport.php b/app/Jobs/Company/CompanyImport.php index 8cac0d230..67964eefa 100644 --- a/app/Jobs/Company/CompanyImport.php +++ b/app/Jobs/Company/CompanyImport.php @@ -1107,7 +1107,7 @@ class CompanyImport implements ShouldQueue $storage_url = (object)$this->getObject('storage_url', true); - if(!Storage::exists($new_document->url)){ + if(!Storage::exists($new_document->url) && is_string($storage_url)){ $url = $storage_url . $new_document->url;