Adicionar a módulo

Criar seed das permissões

php artisan make:migration seed_t09_system_communications_resources_table

<?php

use WeMake\Sgi\Core\Models\SystemCommunicationTemplate;
use WeMake\Sgi\Core\SeederClasses\GardenerResourceSeeder;

return new class extends GardenerResourceSeeder {
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up(): void
    {
        $module = DB::table('t00_modules')->where('slug', '=', 'suppliers')->first();

        $data = [
            [
                'module_id'    => $module->id,
                'slug'         => 'suppliers.system-communications',
                'model'        => SystemCommunicationTemplate::class,
                'description'  => null,
                'actions'      => ['manage', 'edit', 'view'],
                'translations' => [
                    'en' => 'System communications',
                    'es' => 'Comunicaciones de sistema',
                    'pt' => 'Comunicações de sistema',
                    'fr' => 'Communications système',
                ],
            ],
        ];

        $this->insertResources($data);
        $this->insertTranslations($data);
        $this->insertPermissionActions($data);
        $this->insertPermissions($data);
    }
};

Atribuir permissões por defeito ao utilizador root:

php artisan make:migration seed_t09_system_communications_permission_table

<?php

return new class extends SeedT00PermissionRoleTable {
    /**
     * Module slug
     *
     * @var string
     */
    protected $moduleSlug = 'suppliers';

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function up(): void
    {
        $this->loadRolesAndModulePermissions();
        $this->insertGlobalAdministratorData();

        $this->insertModuleAdministratorData();
    }

    /**
     * Inserts module administrator data
     *
     * @return void
     */
    private function insertModuleAdministratorData(): void
    {
        $permissions = [
            "$this->moduleSlug.system-communications.manage",
        ];

        $this->insertData("$this->moduleSlug.administrator", $permissions);
    }
};

Criar seed dos models de communicações de sistema

<?php

use WeMake\Sgi\Core\SeederClasses\SystemCommunicationTemplatesSeeder;

return new class extends SystemCommunicationTemplatesSeeder {

    protected string $moduleSlug = 'suppliers';

    protected string $templateSlug = 'suppliers.mail.supplier-evaluation';

    protected array $wildcards = [
        ':evaluation_date' => 'form.field.evaluation-date',
        ':classification'  => 'form.field.classification',
    ];

    protected array $translations = [
        'en' => [
            'subject' => 'Supplier evaluation results - :evaluation_date',
            'body'    => <<<BODY
            The supplier evaluation was completed with the classification **:classification points**
            BODY,
        ],
        'es' => [
            'subject' => 'Resultados de evaluación de proveedores - :evaluation_date',
            'body'    => <<<BODY
            La evaluación del proveedor se completó con la clasificación **:classification pontos**
            BODY,
        ],
        'fr' => [
            'subject' => 'Résultats de l\'évaluation des fournisseurs - :evaluation_date',
            'body'    => <<<BODY
            L'évaluation du fournisseur a été complétée par un score de **: points de classement **
            BODY,
        ],
        'pt' => [
            'subject' => 'Resultados da avaliação de fornecedor - :evaluation_date',
            'body'    => <<<BODY
            A avaliação de fornecedores foi concluída com a pontuação **:classification pontos**
            BODY,
        ],
    ];
};

Wildcards

Exemplo: ':evaluation_date' => 'form.field.evaluation-date',

Onde :evaluation_date é o wildcard, e a respetiva tradução form.field.evaluation-date

Frontend

Sempre que seja necessária a implementação de modelos de sistema para um módulo, é apenas necessária a importação do componente:


<require from="wemake-modules/administration/system-communication-templates/list/index"></require>

<system-communications-list if.bind="canManageSystemCommunicationTemplates" module-slug="suppliers"></system-communications-list>

Podemos exibir a lista condicionalmente, utilizando as permissões do módulo.

import { computedFrom } from 'aurelia-framework';
//...
@computedFrom('this.appContainer.authenticatedUser.user.allPermissions')
get
canManageSystemCommunicationTemplates()
{
    return this.appContainer.authenticatedUser.can([
        'suppliers.system-communications.manage',
        'suppliers.system-communications.view',
    ]);
}

Usar um modelo de comunicação

Obter a tradução

protected
SystemCommunicationTemplateTranslation
$translation;

$this->translation = SystemCommunicationTemplate::where('slug', '=', 'suppliers.mail.supplier-evaluation')
->
first()
->
translate(App::getLocale());

Podemos aceder ao assunto e ao corpo da communicação através de:

$this->translation->subject e $this->translation->body