PHP code example of slash197 / reges-laravel

1. Go to this page and download the library: Download slash197/reges-laravel library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

slash197 / reges-laravel example snippets


use Illuminate\Support\Facades\Schedule;

Schedule::command('reges:send')->everyMinute()->withoutOverlapping();
Schedule::command('reges:results')->everyMinute()->withoutOverlapping();
Schedule::command('reges:nomenclators')->weekly();

use slash197\Reges\Data\InfoSalariat;
use slash197\Reges\Laravel\Outbox\Outbox;
use slash197\Reges\Message;
use slash197\Reges\Operation;

app(Outbox::class)->queue(
    Message::salariat(Operation::InregistrareSalariat, new InfoSalariat(
        cnp: $employee->cnp,
        nume: $employee->last_name,
        prenume: $employee->first_name,
        adresa: $employee->address,
        tipActIdentitate: 'CarteIdentitate',
        taraDomiciliu: 'România',
        nationalitate: 'România',
    )),
    sequence: "employee:{$employee->id}",
    subject: $employee,
    user: $request->user()->name,
);

use slash197\Reges\Laravel\Events\MessageAccepted;
use slash197\Reges\Laravel\Events\MessageRejected;

final class StoreRegesId
{
    public function handle(MessageAccepted $event): void
    {
        if ($event->message->operation === 'InregistrareSalariat') {
            $event->message->subject?->update(['reges_id' => $event->message->ref]);
        }
    }
}

final class FlagRegesRejection
{
    public function handle(MessageRejected $event): void
    {
        $event->message->subject?->update(['reges_error' => $event->message->error]);
    }
}

use slash197\Reges\Reges;

final class ShowRegesProfile
{
    public function __invoke(Reges $reges): string
    {
        return $reges->profile()->angajatorId ?? 'unknown';
    }
}

use slash197\Reges\Laravel\Facades\Reges;

$nomenclator = Reges::nomenclators()->get('TemeiIncetare');

use slash197\Reges\Credentials;
use slash197\Reges\Laravel\CredentialsProvider;

final class CompanyCredentials implements CredentialsProvider
{
    public function credentials(string $registry): Credentials
    {
        $company = Company::findOrFail($registry);

        return new Credentials($company->reges_username, $company->reges_password);
    }
}

// in a service provider's register()
$this->app->singleton(CredentialsProvider::class, CompanyCredentials::class);

use slash197\Reges\Laravel\Registries;

$reges = app(Registries::class)->client((string) $company->id);

use slash197\Reges\Laravel\Outbox\Outbox;

$queued = app(Outbox::class)->queue(
    $message,
    sequence: "contract:{$contract->id}",
    registry: (string) $company->id,
    subject: $contract,
    meta: ['addendum_id' => $addendum->id],
    user: $request->user()->name,
);

use slash197\Reges\Exception\ValidationException;

try {
    $outbox->queue($message, sequence: "contract:{$contract->id}");
} catch (ValidationException $exception) {
    $exception->fields(); // ['continut.salariu', 'continut.cor.cod', ...]
    $exception->errors;   // field => the rule it broke: '

public function handle(MessageAccepted $event): void
{
    $message = $event->message;

    if ($message->operation === 'InregistrareSalariat') {
        $employee = $message->subject;
        $employee->update(['reges_id' => $message->ref]);

        foreach ($employee->contracts()->whereNull('reges_id')->get() as $contract) {
            $this->outbox->queue(
                Message::contract(Operation::AdaugareContract, continut: $this->continut($contract)),
                sequence: "contract:{$contract->id}",
                registry: $message->registry,
                subject: $contract,
            );
        }
    }
}

use Illuminate\Database\Eloquent\Relations\MorphMany;
use slash197\Reges\Laravel\Outbox\OutboxMessage;

public function regesMessages(): MorphMany
{
    return $this->morphMany(OutboxMessage::class, 'subject');
}

$latest = $contract->regesMessages()->latest('id')->first();

$latest?->status;   // MessageStatus::Sent
$latest?->error;    // "Contractul ... nu poate fi modificat ..."

$queued->cancel();

use slash197\Reges\Laravel\Events\ResultReceived;

final class LogRegesResult
{
    public function handle(ResultReceived $event): void
    {
        $event->result;    // slash197\Reges\Results\Result
        $event->registry;  // the registry key
    }
}

use slash197\Reges\Laravel\Registries;
use slash197\Reges\Laravel\ResultReader;

$read = app(ResultReader::class)->drain(
    app(Registries::class)->client($registry),
    $registry,
    limit: 50,
);

$envelope = $reges->envelope($message, $user);   // validated and final, not sent
// store $envelope->messageId() and $envelope->toJson() yourself

$receipt = $reges->send(Envelope::fromJson($json));

$this->app->singleton(\slash197\Reges\Auth\TokenStore::class, DatabaseTokenStore::class);

config([
    'reges.client_id' => 'reges-api',
    'reges.client_secret' => 'secret',
    'reges.username' => '7d2c6c32-643d-4746-8402-003b0f420eb4',
    'reges.password' => 'secret',
    'reges.user' => 'Test User',
]);

$this->post("/employees/{$employee->id}/register")->assertOk();

$this->assertDatabaseHas('reges_messages', [
    'operation' => 'InregistrareSalariat',
    'sequence' => "employee:{$employee->id}",
    'status' => 'pending',
]);

use slash197\Reges\Laravel\Events\ResultReceived;
use slash197\Reges\Laravel\Outbox\OutboxMessage;
use slash197\Reges\Results\Result;

$queued = OutboxMessage::query()->latest('id')->firstOrFail();

event(new ResultReceived(Result::fromPayload([
    'header' => ['messageId' => $queued->message_id],
    'result' => ['code' => 'SUCCES', 'ref' => '0f3a6c1e-0000-4000-8000-000000000001'],
])));

$this->assertSame('0f3a6c1e-0000-4000-8000-000000000001', $employee->refresh()->reges_id);

use GuzzleHttp\Client;
use GuzzleHttp\Handler\MockHandler;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Psr7\Response;
use Psr\Http\Client\ClientInterface;

$responses = new MockHandler([
    new Response(200, [], json_encode(['access_token' => 'token', 'expires_in' => 300])),
    new Response(200, [], json_encode(['responseId' => 'r-1'])),
]);

$this->app->instance(ClientInterface::class, new Client(['handler' => HandlerStack::create($responses)]));

$this->artisan('reges:send')->assertSuccessful();
bash
php artisan vendor:publish --tag=reges-config
php artisan vendor:publish --tag=reges-migrations
bash
php artisan reges:check
php artisan reges:nomenclators
bash
php artisan reges:nomenclators