d3yii2/d3edi

There is no license information available for the latest version (dev-master) of this package.

EDI

dev-master 2022-04-01 12:38 UTC

This package is auto-updated.

Last update: 2024-03-29 04:25:48 UTC


README

Features

  • Collect EDI messages in DB
  • Other processes process collected messages and registries
    • status processed and ref records
    • status error and error message

used packages

DB Schema

DB Schema

Installation

The preferred way to install this extension is through composer.

Either run

$ composer require d3yii2/d3edi "*"

or add

"d3yii2/d3edi": "*"

to the require section of your composer.json file.

Methods

Usage

map edi fata to model attributes

class DepoEdiBooking extends BaseDepoEdiBooking
{
    public function loadEdi($ediMessage): void
    {
        $r = $ediMessage->readEdiMessage();
        $this->booking_ref_number = $r->readEdiDataValue(['RFF',['1'=>'BN']],1,0);
        $this->carier = $r->readEdiDataValue(['NAD',['1'=>'CA']],2,0);
        $this->containerType = $r->readEdiDataValue(['EQD',['1'=>'CN']],3,0);
        if(!$this->cont_type_id = CargoContTypeDictionary::getIdByEdiCode($containerType)){
            $this->cont_type_id = null;
            $this->addError('cont_type_id','Undefined container type: ' . $containerType);
        }
    }
}

procesing

        $cnt = 0;
        foreach(EdiMessage::find()->allNews() as $ediMessage){
            if(!$transaction = $this->module->db->begintransaction()){
                throw new \yii\db\Exception('can not start Begin transaction');
            }
            try {
                $ediBooking = new DepoEdiBooking();
                $ediBooking->loadEdi($ediMessage);
                if ($ediBooking->hasErrors() || !$ediBooking->validate()) {
                    $ediMessage->saveError($ediBooking->getErrors());
                    continue;
                }
                if (!$ediBooking->save()) {
                    throw new D3ActiveRecordException($ediBooking);
                }

                $ediMessage->saveProcessed($ediBooking);

                $transaction->commit();
                $cnt ++;
                continue;
            }catch (Exception $e){
                $transaction->rollBack();
                Yii::error($e->getMessage());
                Yii::error($e->getTraceAsString());
                $ediMessage->saveError($e->getMessage());
            }
        }

        return $cnt;

    }

Panle for unprocessed messages

For showing unprocessed messages can use panel solution Yii2Panel

add widget

echo \unyii2\yii2panel\PanelWidget::widget([
    'name' => 'MyAllerts',
]);

to module add parameter panels

class MyModule extends Module
{
    
    /**
     * @var array panels for PanelWidgets
     */
    public $panels;

in module config add widget

        'mymodule' => [
            'class' => 'MyModule',
            'panels' => [
                'MyAllerts' =>
                [
                    [
                        'route' => 'edi/panel/message',
                     ]
                 ]
            ],
        ],

in EDI module can set role for access to panel. Otherwise every authorised user has access to panle widget

        'edi' => [
            'class' => 'd3yii2\d3edi\Module',
            'accessRulesMessageRoles' => ['Depo3EdiFull']
        ],