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
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.
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'
],
]
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
$paletBarCode = \Yii::$app->palletCodeRecorder->createNewRecord($palletModelId); $palletModel = \Yii::$app->palletCodeRecorder->codeReader($barcodeReadedByBarCodeScaner); Yii::$app->packCodeRecorder->assignCodeToOtherRecord($outPackId, $packCode);- 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);
}
}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),
];
}
],
];
}
}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(); 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 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])
;