WebErpMesv2 icon indicating copy to clipboard operation
WebErpMesv2 copied to clipboard

[COMPANY] Use DragonBe/vies

Open SMEWebify opened this issue 1 year ago • 0 comments

composer require dragonbe/vies


namespace App\Services;

use DragonBe\Vies\Vies;

class VatValidationService
{
    protected $vies;

    public function __construct()
    {
        $this->vies = new Vies();
    }

    public function validateVatNumber($countryCode, $vatNumber)
    {
        if ($this->vies->getHeartBeat()->isAlive()) {
            $result = $this->vies->validateVat($countryCode, $vatNumber);
            return $result->isValid();
        }
        return false;
    }
}

namespace App\Http\Controllers;

use App\Services\VatValidationService;
use Illuminate\Http\Request;

class PartnerController extends Controller
{
    protected $vatService;

    public function __construct(VatValidationService $vatService)
    {
        $this->vatService = $vatService;
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'vat_number' => ['required', function($attribute, $value, $fail) use ($request) {
                $countryCode = substr($value, 0, 2); // Assume the first two characters are the country code
                $vatNumber = substr($value, 2);
                if (!$this->vatService->validateVatNumber($countryCode, $vatNumber)) {
                    $fail('The VAT number is invalid.');
                }
            }],
            // autres règles de validation
        ]);

        // Logic to store the partner details...
    }
}

namespace App\Rules;

use App\Services\VatValidationService;
use Illuminate\Contracts\Validation\Rule;

class ValidVatNumber implements Rule
{
    protected $vatService;

    public function __construct(VatValidationService $vatService)
    {
        $this->vatService = $vatService;
    }

    public function passes($attribute, $value)
    {
        $countryCode = substr($value, 0, 2);
        $vatNumber = substr($value, 2);

        return $this->vatService->validateVatNumber($countryCode, $vatNumber);
    }

    public function message()
    {
        return 'The VAT number is invalid.';
    }
}
use App\Rules\ValidVatNumber;

$request->validate([
    'vat_number' => ['required', new ValidVatNumber(app(VatValidationService::class))],
]);

SMEWebify avatar Aug 23 '24 19:08 SMEWebify