import AI01weightDecoder from './AI01weightDecoder';
|
import NotFoundException from '../../../../NotFoundException';
|
import StringBuilder from '../../../../util/StringBuilder';
|
export default class AI013x0x1xDecoder extends AI01weightDecoder {
|
constructor(information, firstAIdigits, dateCode) {
|
super(information);
|
this.dateCode = dateCode;
|
this.firstAIdigits = firstAIdigits;
|
}
|
parseInformation() {
|
if (this.getInformation().getSize() !==
|
AI013x0x1xDecoder.HEADER_SIZE +
|
AI013x0x1xDecoder.GTIN_SIZE +
|
AI013x0x1xDecoder.WEIGHT_SIZE +
|
AI013x0x1xDecoder.DATE_SIZE) {
|
throw new NotFoundException();
|
}
|
let buf = new StringBuilder();
|
this.encodeCompressedGtin(buf, AI013x0x1xDecoder.HEADER_SIZE);
|
this.encodeCompressedWeight(buf, AI013x0x1xDecoder.HEADER_SIZE + AI013x0x1xDecoder.GTIN_SIZE, AI013x0x1xDecoder.WEIGHT_SIZE);
|
this.encodeCompressedDate(buf, AI013x0x1xDecoder.HEADER_SIZE +
|
AI013x0x1xDecoder.GTIN_SIZE +
|
AI013x0x1xDecoder.WEIGHT_SIZE);
|
return buf.toString();
|
}
|
encodeCompressedDate(buf, currentPos) {
|
let numericDate = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos, AI013x0x1xDecoder.DATE_SIZE);
|
if (numericDate === 38400) {
|
return;
|
}
|
buf.append('(');
|
buf.append(this.dateCode);
|
buf.append(')');
|
let day = numericDate % 32;
|
numericDate /= 32;
|
let month = (numericDate % 12) + 1;
|
numericDate /= 12;
|
let year = numericDate;
|
if (year / 10 === 0) {
|
buf.append('0');
|
}
|
buf.append(year);
|
if (month / 10 === 0) {
|
buf.append('0');
|
}
|
buf.append(month);
|
if (day / 10 === 0) {
|
buf.append('0');
|
}
|
buf.append(day);
|
}
|
addWeightCode(buf, weight) {
|
buf.append('(');
|
buf.append(this.firstAIdigits);
|
buf.append(weight / 100000);
|
buf.append(')');
|
}
|
checkWeight(weight) {
|
return weight % 100000;
|
}
|
}
|
AI013x0x1xDecoder.HEADER_SIZE = 7 + 1;
|
AI013x0x1xDecoder.WEIGHT_SIZE = 20;
|
AI013x0x1xDecoder.DATE_SIZE = 16;
|