PHP Classes

File: README.md

Recommend this page to a friend!
  Classes of Uldis Nelsons   D3 EDI   README.md   Download  
File: README.md
Role: Documentation
Content type: text/markdown
Description: Documentation
Class: D3 EDI
Process information exchanged electronically
Author: By
Last change: Update README.md
Update README.md
Date: 2 years ago
Size: 3,744 bytes
 

Contents

Class file image Download

[EDIFACT messaging[(https://en.wikipedia.org/wiki/EDIFACT)

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']
        ],