d3yii2/d3codes

dev-master 2024-09-16 05:44 UTC

This package is auto-updated.

Last update: 2024-09-16 05:45:42 UTC


README

Yii2

功能

作为Yii2模块创建。实际上生成条形码,同时可以轻松实现二维码功能。

  • 通过前缀和区间定义代码系列
  • 从系列创建代码并分配给活动记录
  • 读取代码并分配给活动记录
  • 标签布局
  • 在Windows服务器上打印标签

数据库模式

DB Schema

安装

安装此扩展的首选方式是通过 composer

运行以下命令

$ composer require d3yii2/d3codes "*"

或在您的 composer.json 文件的 require 部分添加以下内容:

"d3yii2/d3codes": "*"

配置

记录器和读取器

记录器从定义的系列生成新条形码。对于不同类型,定义不同的组件。

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

打印机

用于从Windows服务器直接打印。使用Chrome进行PDF转换,并使用PDFtoPrinter打印 http://www.columbia.edu/~em36/pdftoprinter.html

将存储库添加到composer: 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

用法

为模型创建新条形码

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

通过条形码查找模型

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

将创建的代码分配给其他模型记录

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

将代码作为属性添加到模型中

  • 查找代码,如果代码已附加
  • 创建新代码并附加,如果未附加代码
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);
    }
}

通过打印机打印条形码

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),
                    ];
                }
            ],
        ];
    }
}

在控制器和表单中读取

在表单中使用模型 d3yii2\d3codes\models\CodeReader。

控制器

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 = 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();

从服务器打印

        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连接

$sql = 'SELECT
  cwat_pack.cwat_pack,
  d3codes_code_record.full_code
FROM
  cwat_pack
  LEFT OUTER JOIN `d3codes_code_record`
    ON cwat_pack.id = d3codes_code_record.`model_record_id`
    AND d3codes_code_record.`model_id` = '.\d3system\dictionaries\SysModelsDictionary::getIdByClassName(CwatPack::class).'
    AND d3codes_code_record.`code_id` = '.Yii::$app->packAtlCodeRecorder->codeId
';