Skip to content

d3yii2/d3codes

Repository files navigation

Yii2

Features

Created as Yii2 moule. Actualy generate barccodes, bot can easy implement Qrcodes Functionality

  • define code series by prefix and interval from and to
  • creating codes from series and assigne to active record
  • read codes and assign to active record
  • label layouts
  • label printing form windows server

DB Schema

DB Schema

Installation

The preferred way to install this extension is through composer.

Either run

$ composer require d3yii2/d3codes "*"

or add

"d3yii2/d3codes": "*"

to the require section of your composer.json file.

Configuration

recorder and Readers

Recorder generate new barcodes from defined series. For diferrent types define different components.

 'components' => [
        'palletCodeRecorder' => [
            'class' => 'd3yii2\d3codes\components\CodeRecorder',
            'codeName' => 'pallets bar code',
            'series' => [
                'p01' => [
                    'prefix' => 'p01',
                    'length' => 5,
                    'from' => 1,
                    'to' => 20000
                ]
            ],
            'modelClass' => 'wood\clasifiers\models\Pallet',
            'componentsSysModel' => 'sysModel'
        ],
        'codeReader' => [
            'class' => 'd3yii2\d3codes\components\CodeReader',
            'modelClassList' => [
                'wood\clasifiers\models\Pallet'
            ],
            'componentsSysModel' => 'sysModel'
        ],
    ]
        

Printer

For printing direct from the Windows server. Use Chrome for converting to PDF and for sending to printer use PDFtoPrinter http://www.columbia.edu/~em36/pdftoprinter.html

To composer add repository https://github.com/uldisn/php-exec.git

    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/uldisn/php-exec.git"
        },
# Bar code printer
BOUNCER_PRINTER=BouncerPrinter
PDFtoPrinter=H:\yii2\cewood\PDFtoPrinter.exe

# chrome
CHROME_PATH=C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

Usage

creating new barcode for model

    $paletBarCode = \Yii::$app->palletCodeRecorder->createNewRecord($palletModelId);

Find model by barcode

    $palletModel = \Yii::$app->palletCodeRecorder->codeReader($barcodeReadedByBarCodeScaner);       

Assign to model created code to other model record

    Yii::$app->packCodeRecorder->assignCodeToOtherRecord($outPackId, $packCode);

Adding code as attribute to model

  • find code, if code attached
  • create new code and attach it, if no code attached
class BtlinePp extends BaseBtlinePp
{

    public function rules()
    {
        return array_merge(parent::rules(),[
            ['code','safe']
        ]);
    }

    public function attributeLabels()
    {
        return array_merge(parent::attributeLabels(),[
            'code' => 'Code'
        ]);
    }

    /**
     * @return string
     * @throws D3ActiveRecordException
     */
    public function getCode(): string
    {
        return Yii::$app->ppCodeRecorder->getCodeOrCreate($this->id);
    }
}

Print barcode by printer

use d3yii2\d3codes\actions\PrintCode;
class BatchController
{

    public function actions() {
        $OC = $this;
        return [
            'pp-print-barcode' => [
                'class' => PrintCode::class,
                'componentRecorderName' => 'ppCodeRecorder',
                'layout' => '@layout_barcode',
                'view' => 'print_barcode',
                'data' => static function(int $id) use ($OC){
                    return [
                        'model' => $OC->findModel($id),
                    ];
                }
            ],
        ];
    }
}

reading in Controller and Form

For form use model d3yii2\d3codes\models\CodeReader.

Controller

use d3yii2\d3codes\models\CodeReader;

        $codeReaderModel = new CodeReader();
        $codeReaderModel->componentCodeReaderName = 'codeReader';
        $post = Yii::$app->request->post();
        if($post && $codeReaderModel->load(Yii::$app->request->post())){
                    /** @var CwpalletPallet $palletModel */
                    $palletModel = $codeReaderModel->model;
        }
        if ($codeReaderModel->hasErrors()) {
            FlashHelper::modelErrorSummary($codeReaderModel);
        }        
        return $this->render('manufacturing', [
            'packList' =>  $searchModel
                ->manufacturedPacks(true)
                ->all(),
            'packId' => $packId,
            'codeReaderModel' => $codeReaderModel
        ]);        

form

                $form = ActiveForm::begin([
                    'id' => 'BauncerCodeReading',
                    'enableClientValidation' => false,
                    'errorSummaryCssClass' => 'error-summary alert alert-error',
                    'fieldConfig' => [
                        'template' => "{label}\n{beginWrapper}\n{input}\n{error}\n{endWrapper}",
                    ],

                ]);
                echo $form
                    ->field(
                        $codeReaderModel,
                        'code',
                        [
                            'inputOptions' => [
                                'autofocus' => 'autofocus',
                                'class' => 'form-control',
                                'tabindex' => '1'
                            ]
                        ])
                    ->textInput()
                    ->label('');


                echo ThButton::widget([
                    'label' => 'Process',
                    'id' => 'saveCode',
                    'icon' => ThButton::ICON_CHECK,
                    'type' => ThButton::TYPE_SUCCESS,
                    'submit' => true,
                    'htmlOptions' => [
                        'name' => 'action',
                        'value' => 'save',
                    ],
                ]);
                ActiveForm::end();

Print from server

        try {
            
            $url = Yii::$app->urlManager->createAbsoluteUrl([
                '/cwstore/pack/print-barcode',
                'id' => $id
            ]);
            if(Yii::$app->bouncerPrinter->print($url)){
                FlashHelper::addSuccess('Etiķete nosūtīta uz izsitēja printera');
            }else{
                FlashHelper::addDanger('Radās kļūda drukājot etiķeti');
            }
        } catch (Exception $e) {
            FlashHelper::processException($e);
        }

SQL Join

SQL for getting code from model record

$sql = 'SELECT
  cwat_pack.cwat_pack,
  d3codes_code_record.full_code
FROM
  cwat_pack
  LEFT OUTER JOIN `d3codes_code_record`
    ON d3codes_code_record.model_id = :modelId
      AND cwat_pack.id = d3codes_code_record.model_record_id
      AND d3codes_code_record.`code_id` = :packCodeId
';
$params = [
   ':modelId' => SysModelsDictionary::getIdByClassName(CwatPack::class),
   ':packCodeId' => D3CodesCodeDictionary::getIdByName(Yii::$app->packAtlCodeRecorder->codeName),
];

Yii2 Query for getting code column

return $this
    ->queryForIndex()
    ->addSelect([
        'packCode' => 'd3codes_code_record.full_code',
    ])
    ->leftJoin(
        'd3codes_code_record',
        'd3codes_code_record.model_id = :modelId
            AND cw_store_pack.id = d3codes_code_record.`model_record_id`
            AND d3codes_code_record.`code_id` = :packCodeId',
        [
            ':modelId' => SysModelsDictionary::getIdByClassName(CwStorePack::class),
            ':packCodeId' => D3CodesCodeDictionary::getIdByName(Yii::$app->packCodeRecorder->codeName),
        ]
    )
    ->andFilterWhere(['LIKE', 'd3codes_code_record.full_code', $this->packCode])
    ;

About

Barcode, qrcodes and etc codes templates, generate code string, attach to Yii2 models and find model by scaned string

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages