From 8a4da65b6b9b09809c23cebfe7cfd30a2139b9f9 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 22 Jul 2023 16:00:57 +1000 Subject: [PATCH 1/5] Fixes for csv file encodings --- app/Http/Controllers/ImportController.php | 17 ++++++++++++++--- app/Import/Providers/BaseImport.php | 5 +++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/ImportController.php b/app/Http/Controllers/ImportController.php index 0bcbabde60b7..c8aa9c70dbdf 100644 --- a/app/Http/Controllers/ImportController.php +++ b/app/Http/Controllers/ImportController.php @@ -81,7 +81,8 @@ class ImportController extends Controller /** @var UploadedFile $file */ foreach ($request->files->get('files') as $entityType => $file) { $contents = file_get_contents($file->getPathname()); - // $contents = mb_convert_encoding($contents, 'UTF-16LE', 'UTF-8'); + + $contents = $this->convertEncoding($contents); // Store the csv in cache with an expiry of 10 minutes Cache::put($hash.'-'.$entityType, base64_encode($contents), 600); @@ -97,11 +98,21 @@ class ImportController extends Controller ]; } - $data = mb_convert_encoding($data, 'UTF-8', 'UTF-8'); - return response()->json($data); } + private function convertEncoding($data) + { + + $enc = mb_detect_encoding($data, mb_list_encodings(), true); + + if($enc !== false) { + $data = mb_convert_encoding($data, "UTF-8", $enc); + } + + return $data; + } + public function import(ImportRequest $request) { $data = $request->all(); diff --git a/app/Import/Providers/BaseImport.php b/app/Import/Providers/BaseImport.php index 0019a6efed40..04780c6fc2ea 100644 --- a/app/Import/Providers/BaseImport.php +++ b/app/Import/Providers/BaseImport.php @@ -102,6 +102,8 @@ class BaseImport } $csv = base64_decode($base64_encoded_csv); + $csv = mb_convert_encoding($csv, 'UTF-8', 'UTF-8'); + nlog($csv); $csv = Reader::createFromString($csv); $csvdelimiter = self::detectDelimiter($csv); @@ -765,8 +767,7 @@ class BaseImport { $keys = array_shift($data); ksort($keys); -// nlog($data); -// nlog($keys); + return array_map(function ($values) use ($keys) { return array_combine($keys, $values); }, $data); From d535b5bbfdcc2764128c982060824eacd7c08a27 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 22 Jul 2023 16:48:05 +1000 Subject: [PATCH 2/5] Update tax_data => tax_info --- app/Transformers/ClientTransformer.php | 2 +- app/Transformers/InvoiceTransformer.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Transformers/ClientTransformer.php b/app/Transformers/ClientTransformer.php index f1d031022c53..188673315908 100644 --- a/app/Transformers/ClientTransformer.php +++ b/app/Transformers/ClientTransformer.php @@ -150,7 +150,7 @@ class ClientTransformer extends EntityTransformer 'has_valid_vat_number' => (bool) $client->has_valid_vat_number, 'is_tax_exempt' => (bool) $client->is_tax_exempt, 'routing_id' => (string) $client->routing_id, - 'tax_data' => $client->tax_data ?: '', + 'tax_info' => $client->tax_data ?: new \stdClass,, ]; } } diff --git a/app/Transformers/InvoiceTransformer.php b/app/Transformers/InvoiceTransformer.php index 5e3b0a93955d..b4f4639d5ad1 100644 --- a/app/Transformers/InvoiceTransformer.php +++ b/app/Transformers/InvoiceTransformer.php @@ -149,7 +149,7 @@ class InvoiceTransformer extends EntityTransformer 'paid_to_date' => (float) $invoice->paid_to_date, 'subscription_id' => $this->encodePrimaryKey($invoice->subscription_id), 'auto_bill_enabled' => (bool) $invoice->auto_bill_enabled, - 'tax_data' => $invoice->tax_data ?: '', + 'tax_info' => $invoice->tax_data ?: new \stdClass,, ]; } } From cc518b92dd6029242790d2665208cdee9ff25b1c Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 22 Jul 2023 16:55:18 +1000 Subject: [PATCH 3/5] Fixes for transformers --- app/Transformers/ClientTransformer.php | 2 +- app/Transformers/InvoiceTransformer.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Transformers/ClientTransformer.php b/app/Transformers/ClientTransformer.php index 188673315908..047df00a3cf9 100644 --- a/app/Transformers/ClientTransformer.php +++ b/app/Transformers/ClientTransformer.php @@ -150,7 +150,7 @@ class ClientTransformer extends EntityTransformer 'has_valid_vat_number' => (bool) $client->has_valid_vat_number, 'is_tax_exempt' => (bool) $client->is_tax_exempt, 'routing_id' => (string) $client->routing_id, - 'tax_info' => $client->tax_data ?: new \stdClass,, + 'tax_info' => $client->tax_data ?: new \stdClass, ]; } } diff --git a/app/Transformers/InvoiceTransformer.php b/app/Transformers/InvoiceTransformer.php index b4f4639d5ad1..c12ae1361b87 100644 --- a/app/Transformers/InvoiceTransformer.php +++ b/app/Transformers/InvoiceTransformer.php @@ -149,7 +149,7 @@ class InvoiceTransformer extends EntityTransformer 'paid_to_date' => (float) $invoice->paid_to_date, 'subscription_id' => $this->encodePrimaryKey($invoice->subscription_id), 'auto_bill_enabled' => (bool) $invoice->auto_bill_enabled, - 'tax_info' => $invoice->tax_data ?: new \stdClass,, + 'tax_info' => $invoice->tax_data ?: new \stdClass, ]; } } From bd34010ed5ad59199a8c709c1380fb09f6bda0e2 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 22 Jul 2023 17:19:54 +1000 Subject: [PATCH 4/5] Force object prop for custom fields --- app/Transformers/CompanyTransformer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Transformers/CompanyTransformer.php b/app/Transformers/CompanyTransformer.php index 32f4966ba1b6..ed6529d32a39 100644 --- a/app/Transformers/CompanyTransformer.php +++ b/app/Transformers/CompanyTransformer.php @@ -133,7 +133,7 @@ class CompanyTransformer extends EntityTransformer 'show_product_details' => (bool) $company->show_product_details, 'enable_product_quantity' => (bool) $company->enable_product_quantity, 'default_quantity' => (bool) $company->default_quantity, - 'custom_fields' => $company->custom_fields ?? $std, + 'custom_fields' => (object) $company->custom_fields ?? $std, 'size_id' => (string) $company->size_id ?: '', 'industry_id' => (string) $company->industry_id ?: '', 'first_month_of_year' => (string) $company->first_month_of_year ?: '', From ba3873ab85d20a0e2e6c0775434ecc0dec5bfc24 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sun, 23 Jul 2023 09:49:58 +1000 Subject: [PATCH 5/5] Updates for currencies --- ..._currency_format_for_indonesian_rupiah.php | 34 +++++++++++++++++++ database/seeders/CurrenciesSeeder.php | 4 ++- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 database/migrations/2023_07_22_234329_change_currency_format_for_indonesian_rupiah.php diff --git a/database/migrations/2023_07_22_234329_change_currency_format_for_indonesian_rupiah.php b/database/migrations/2023_07_22_234329_change_currency_format_for_indonesian_rupiah.php new file mode 100644 index 000000000000..643813468287 --- /dev/null +++ b/database/migrations/2023_07_22_234329_change_currency_format_for_indonesian_rupiah.php @@ -0,0 +1,34 @@ +first(); + + if($ir){ + $ir->thousand_separator = '.'; + $ir->decimal_separator = ','; + $ir->save(); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +}; diff --git a/database/seeders/CurrenciesSeeder.php b/database/seeders/CurrenciesSeeder.php index 82d92b6595b7..49ecce7e9d43 100644 --- a/database/seeders/CurrenciesSeeder.php +++ b/database/seeders/CurrenciesSeeder.php @@ -49,7 +49,7 @@ class CurrenciesSeeder extends Seeder ['id' => 24, 'name' => 'Bangladeshi Taka', 'code' => 'BDT', 'symbol' => 'Tk', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['id' => 25, 'name' => 'United Arab Emirates Dirham', 'code' => 'AED', 'symbol' => 'DH ', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['id' => 26, 'name' => 'Hong Kong Dollar', 'code' => 'HKD', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], - ['id' => 27, 'name' => 'Indonesian Rupiah', 'code' => 'IDR', 'symbol' => 'Rp', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], + ['id' => 27, 'name' => 'Indonesian Rupiah', 'code' => 'IDR', 'symbol' => 'Rp', 'precision' => '2', 'thousand_separator' => '.', 'decimal_separator' => ','], ['id' => 28, 'name' => 'Mexican Peso', 'code' => 'MXN', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['id' => 29, 'name' => 'Egyptian Pound', 'code' => 'EGP', 'symbol' => 'E£', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['id' => 30, 'name' => 'Colombian Peso', 'code' => 'COP', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => '.', 'decimal_separator' => ','], @@ -136,6 +136,8 @@ class CurrenciesSeeder extends Seeder ['id' => 111, 'name' => 'Cuban Peso', 'code' => 'CUP', 'symbol' => '₱', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['id' => 112, 'name' => 'Cayman Island Dollar', 'code' => 'KYD', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['id' => 113, 'name' => 'Swazi lilangeni', 'code' => 'SZL', 'symbol' => 'E', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], + ['id' => 114, 'name' => 'BZ Dollar', 'code' => 'BZD', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], + ['id' => 115, 'name' => 'Libyan Dinar', 'code' => 'LYD', 'symbol' => 'LD', 'precision' => '3', 'thousand_separator' => ',', 'decimal_separator' => '.'], ]; foreach ($currencies as $currency) {