diff --git a/app/DataMapper/Tax/BaseRule.php b/app/DataMapper/Tax/BaseRule.php index 1a89d4ea5718..7fba1ff96c91 100644 --- a/app/DataMapper/Tax/BaseRule.php +++ b/app/DataMapper/Tax/BaseRule.php @@ -184,14 +184,15 @@ class BaseRule implements RuleInterface $company = $this->invoice->company; /** If no company tax data has been configured, lets do that now. */ - if(!$company->origin_tax_data && \DB::transactionLevel() == 0) - { + /** We should never encounter this scenario */ + // if(!$company->origin_tax_data && \DB::transactionLevel() == 0) + // { - $tp = new TaxProvider($company); - $tp->updateCompanyTaxData(); - $company->fresh(); + // $tp = new TaxProvider($company); + // $tp->updateCompanyTaxData(); + // $company->fresh(); - } + // } /** If we are in a Origin based state, force the company tax here */ if($company->origin_tax_data?->originDestination == 'O' && ($company->tax_data?->seller_subregion == $this->client_subregion)) { diff --git a/app/Jobs/Client/UpdateTaxData.php b/app/Jobs/Client/UpdateTaxData.php index 1f640f9a0b34..ec34e7b62b51 100644 --- a/app/Jobs/Client/UpdateTaxData.php +++ b/app/Jobs/Client/UpdateTaxData.php @@ -11,16 +11,17 @@ namespace App\Jobs\Client; -use App\DataProviders\USStates; use App\Models\Client; use App\Models\Company; use App\Libraries\MultiDB; use Illuminate\Bus\Queueable; +use App\DataProviders\USStates; use App\Utils\Traits\MakesHash; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; +use Illuminate\Queue\Middleware\WithoutOverlapping; class UpdateTaxData implements ShouldQueue { @@ -73,6 +74,11 @@ class UpdateTaxData implements ShouldQueue nlog("problem getting tax data => ".$e->getMessage()); } - } + + public function middleware() + { + return [new WithoutOverlapping($this->company->id)]; + } + } \ No newline at end of file diff --git a/app/Jobs/Company/CompanyTaxRate.php b/app/Jobs/Company/CompanyTaxRate.php index 1abb6c848ab5..0ca0d813fa4b 100644 --- a/app/Jobs/Company/CompanyTaxRate.php +++ b/app/Jobs/Company/CompanyTaxRate.php @@ -19,11 +19,14 @@ use Illuminate\Queue\InteractsWithQueue; use App\Services\Tax\Providers\TaxProvider; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; +use Illuminate\Queue\Middleware\WithoutOverlapping; class CompanyTaxRate implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + public $tries = 1; + /** * Create a new job instance. * @@ -38,8 +41,14 @@ class CompanyTaxRate implements ShouldQueue MultiDB::setDB($this->company->db); $tp = new TaxProvider($this->company); + $tp->updateCompanyTaxData(); } + public function middleware() + { + return [new WithoutOverlapping($this->company->id)]; + } + } \ No newline at end of file diff --git a/app/Utils/Traits/CompanySettingsSaver.php b/app/Utils/Traits/CompanySettingsSaver.php index 0a351767659e..79d08059fc20 100644 --- a/app/Utils/Traits/CompanySettingsSaver.php +++ b/app/Utils/Traits/CompanySettingsSaver.php @@ -15,6 +15,7 @@ use stdClass; use App\Utils\Ninja; use App\Models\Company; use App\DataMapper\CompanySettings; +use App\Jobs\Company\CompanyTaxRate; /** * Class CompanySettingsSaver. @@ -78,15 +79,23 @@ trait CompanySettingsSaver $entity->settings = $company_settings; - if(Ninja::isHosted() && $entity?->calc_taxes && $company_settings->country_id == "840" && array_key_exists('settings', $entity->getDirty())) + if( $entity?->calculate_taxes && $company_settings->country_id == "840" && array_key_exists('settings', $entity->getDirty())) { $old_settings = $entity->getOriginal()['settings']; /** Monitor changes of the Postal code */ if($old_settings->postal_code != $company_settings->postal_code) { - + nlog("postal code change"); + CompanyTaxRate::dispatch($entity); } + + } + elseif( $entity?->calculate_taxes && $company_settings->country_id == "840" && array_key_exists('calculate_taxes', $entity->getDirty()) && $entity->getOriginal('calculate_taxes') == 0) + { + nlog("calc taxes change"); + nlog($entity->getOriginal('calculate_taxes')); + CompanyTaxRate::dispatch($entity); }