diff --git a/app/DataMapper/Tax/de/Rule.php b/app/DataMapper/Tax/de/Rule.php index e379a4ce47b5..6097338b9d7e 100644 --- a/app/DataMapper/Tax/de/Rule.php +++ b/app/DataMapper/Tax/de/Rule.php @@ -108,7 +108,7 @@ class Rule implements RuleInterface public function tax(): self { - $this->tax_name1 = 21; + $this->tax_name1 = $this->vat_rate; $this->tax_rate1 = "VAT"; return $this; diff --git a/app/Services/Tax/Providers/TaxProviderInterface.php b/app/Services/Tax/Providers/TaxProviderInterface.php new file mode 100644 index 000000000000..bd2a60dbaba9 --- /dev/null +++ b/app/Services/Tax/Providers/TaxProviderInterface.php @@ -0,0 +1,20 @@ +api_key = $api_key; + + return $this; + } + /** * callApi * diff --git a/app/Services/Tax/TaxService.php b/app/Services/Tax/TaxService.php index 8d29eb299129..20ef2f042013 100644 --- a/app/Services/Tax/TaxService.php +++ b/app/Services/Tax/TaxService.php @@ -13,13 +13,106 @@ namespace App\Services\Tax; use App\Models\Client; use App\Models\Company; +use App\Services\Tax\Providers\ZipTax; class TaxService { + private string $provider = ZipTax::class; + + private mixed $api_credentials; public function __construct(protected Company $company, protected Client $client) { } + public function updateCompanyTaxData(): self + { + $this->configureProvider($this->provider); //hard coded for now to one provider, but we'll be able to swap these out later + + $company_details = [ + 'address1' => $this->company->settings->address1, + 'address2' => $this->company->settings->address2, + 'city' => $this->company->settings->city, + 'state' => $this->company->settings->state, + 'postal_code' => $this->company->settings->postal_code, + 'country_id' => $this->company->settings->country_id, + ]; + + $tax_provider = new $this->provider($company_details); + + $tax_provider->setApiCredentials($this->api_credentials); + + $tax_data = $tax_provider->run(); + + $this->company->tax_data = $tax_data; + + $this->company->save(); + + return $this; + + } + + public function updateClientTaxData(): self + { + $this->configureProvider($this->provider); //hard coded for now to one provider, but we'll be able to swap these out later + + $billing_details =[ + 'address1' => $this->client->address1, + 'address2' => $this->client->address2, + 'city' => $this->client->city, + 'state' => $this->client->state, + 'postal_code' => $this->client->postal_code, + 'country_id' => $this->client->country_id, + ]; + + $shipping_details =[ + 'address1' => $this->client->shipping_address1, + 'address2' => $this->client->shipping_address2, + 'city' => $this->client->shipping_city, + 'state' => $this->client->shipping_state, + 'postal_code' => $this->client->shipping_postal_code, + 'country_id' => $this->client->shipping_country_id, + ]; + + + $tax_provider = new $this->provider(); + + $tax_provider->setApiCredentials($this->api_credentials); + + $tax_data = $tax_provider->run(); + + $this->company->tax_data = $tax_data; + + $this->company->save(); + + return $this; + + + return $this; + + } + + private function configureProvider(?string $provider): self + { + + match($provider){ + ZipTax::class => $this->configureZipTax(), + default => $this->configureZipTax(), + }; + + return $this; + + } + + private function configureZipTax(): self + { + + $this->provider = ZipTax::class; + + $this->api_credentials = config('services.tax.zip_tax.key'); + + return $this; + + } } \ No newline at end of file diff --git a/config/services.php b/config/services.php index 78d3df8341d6..8cbdfdfe3d98 100644 --- a/config/services.php +++ b/config/services.php @@ -96,4 +96,10 @@ return [ 'redirect' => env('BITBUCKET_OAUTH_REDIRECT'), ], + 'tax' => [ + 'zip_tax' => [ + 'key' => env('ZIP_TAX_KEY', false), + ], + ] + ] ];