Skip to content

Instantly share code, notes, and snippets.

@mkhoudary
Created January 19, 2022 09:30
Show Gist options
  • Save mkhoudary/1ec463844fff50b34e95f78e96edfadd to your computer and use it in GitHub Desktop.
Save mkhoudary/1ec463844fff50b34e95f78e96edfadd to your computer and use it in GitHub Desktop.
import 'dart:convert';
import 'package:alsafi_app/helpers/renderer.dart';
class PrintProvider {
List<int> rightAlign = [27, 97, 2];
List<int> leftAlign = [27, 97, 0];
List<int> centerAlign = [27, 97, 1];
List<int> title = [29, 33, 33];
List<int> heading = [29, 33, 16];
List<int> normalText = [29, 33, 0];
List<int> enableUnderline = [27, 45, 2];
List<int> disableUnderline = [27, 45, 0];
List<int> stars = [];
var lineBreak = 10;
var bluetoothPrinter;
List<int> tableRow(List<int> column1, List<int> column2, List<int> column3,
column4, column1Weight, column2Weight, column3Weight, column4Weight) {
List<int> singleLine = [];
if (column1Weight > 0) {
column1 = List<int>.from(column1);
while (column1.length < column1Weight) {
column1.add(32);
}
singleLine = singleLine..addAll(column1);
}
singleLine.addAll(leftAlign);
if (column2Weight > 0) {
column2 = List<int>.from(column2);
while (column2.length < column2Weight) {
column2.add(32);
}
singleLine = singleLine..addAll(column2);
}
if (column3Weight > 0) {
column3 = List<int>.from(column3);
while (column3.length < column3Weight) {
column3.add(32);
}
singleLine = singleLine..addAll(column3);
}
if (column4Weight > 0) {
column4 = List<int>.from(column4);
while (column4.length < column4Weight) {
column4.add(32);
}
singleLine = singleLine..addAll(column4);
}
singleLine.addAll(rightAlign);
return singleLine;
}
List<int> printInvoice(dynamic invoice) {
List<int> titleText =
printableThermal(invoice['returning'] ? "فاتورة مرجع" : "فاتورة مبيعات");
List<int> headingText =
printableThermalEnglish("No. " + (invoice['invoiceNumber'] == null ? invoice['orderNumber'] : invoice['invoiceNumber']));
List<int> printData = [27, 84, 2, 27, 83, 27, 77, 49, 27, 97, 2, 29, 33, 16];
List<int> text = printableThermal("الاسمع الالمع");
List<int> line = [];
/*line.addAll([27, 36, 0, 1]);
line.addAll(text);*/
line.addAll([27, 36, 0, 0]);
line.addAll(text);
line.add(this.lineBreak);
text = printableThermal("الاحمد english الأسعد 123 الجميل");
line.addAll(text);
line.add(this.lineBreak);
/*line = this.centerAlign..addAll(line);
line = this.title..addAll(line);
line = line..addAll(titleText);
line.add(this.lineBreak);*/
printData = printData..addAll(line);
/*line = [];
List<int> tempCenterAlign = this.centerAlign;
line = this.centerAlign..addAll(line);
this.centerAlign = tempCenterAlign;
line = this.heading..addAll(line);
line = line..addAll(headingText);
line.add(this.lineBreak);
printData = printData..addAll(line);
String numberToUse = invoice['invoiceNumber'] == null ? invoice['orderNumber'] : invoice['invoiceNumber'];
List<int> barcodeCommand = [29, 107, 73, numberToUse.length];
for (var j = 0; j < numberToUse.length; j++) {
barcodeCommand.add(numberToUse[j].codeUnitAt(0));
}*/
//printData = printData..addAll([29, 104, 32]);
//printData = printData..addAll(barcodeCommand);
//printData = printData..addAll(this.normalText);
//printData = printData..addAll(this.stars);
//printData = printData..addAll(this.rightAlign);
/*printData = printData..addAll([27, 36, 50, 50]);
line = this.tableRow(printableThermal("السيد"),
printableThermal(invoice['client']['title']), [], [], 18, 24, 0, 0);
line.add(this.lineBreak);
printData = printData..addAll(line);
line = this.tableRow(
printableThermal("رقم الحساب"),
printableThermal('****'),
[],
[],
18,
24,
0,
0);
line.add(this.lineBreak);
printData = printData..addAll(line);
line = this.tableRow(
printableThermal("العنوان"),
printableThermal(
invoice['client']['location'] == null ? "-" : invoice['client']['location']),
[],
[],
18,
24,
0,
0);
line.add(this.lineBreak);
printData = printData..addAll(line);
line = this.tableRow(printableThermal("الجوال"),
printableThermal("${invoice['client']['mobileNo']}"), [], [], 18, 24, 0, 0);
line.add(this.lineBreak);
printData = printData..addAll(line);
line = this.tableRow(
printableThermal("التاريخ والوقت"),
printableThermal(invoice ['createdDate']),
[],
[],
18,
24,
0,
0);
line.add(this.lineBreak);
line.add(this.lineBreak);
printData = printData..addAll(line);
line = this.tableRow(printableThermal("**********************"), printableThermal("*****"),
printableThermal("*******"), printableThermal("*******"), 23, 5, 7, 7);
line.add(this.lineBreak);
printData = printData..addAll(line);
printData = printData..addAll(this.enableUnderline);
line = this.tableRow(printableThermal("صنف"), printableThermal("كم"),
printableThermal("سعر"), printableThermal("مبلغ"), 23, 5, 7, 7);
line.add(this.lineBreak);
printData = printData..addAll(line);
printData = printData..addAll(this.disableUnderline);
double allAmounts = 0;
double allPrice = 0;
for (var i = 0; i < invoice['items'].length; i++) {
if (i + 1 >= invoice['items'].length) {
printData = printData..addAll(this.enableUnderline);
}
dynamic item = invoice['items'][i];
double quantity = item['quantity'];
double price = item['unitPrice'];
allAmounts += item['quantity'];
allPrice += price * quantity;
line = this.tableRow(
printableThermal(item['item'] + '/' + item['unit']),
printableThermal(item['quantity'].toStringAsFixed(1)),
printableThermal(item['unitPrice'].toStringAsFixed(1)),
printableThermal((price * quantity).toStringAsFixed(1)),
50,
5,
5,
5,
);
line.add(this.lineBreak);
printData = printData..addAll(line);
}
line = this.tableRow(
printableThermal("الإجمالي"),
printableThermal(allAmounts.toStringAsFixed(1)),
[],
printableThermal(allPrice.toStringAsFixed(1)),
23,
5,
7,
7);
line.add(this.lineBreak);
printData = printData..addAll(line);
if (invoice['discountAmount'] != null && invoice['discountAmount'] != 0) {
line = this.tableRow(
printableThermal("خصم مسموح"),
[],
[],
printableThermal(invoice['discountAmount'].toStringAsFixed(1)),
23,
5,
7,
7);
line.add(this.lineBreak);
printData = printData..addAll(line);
}
if (invoice['totalPaidAmount'] != null && invoice['totalPaidAmount'] != 0) {
line = this.tableRow(
printableThermal(invoice['returning'] ? "صرف" : "نقدا"),
[],
[],
printableThermal(invoice['totalPaidAmount'].toStringAsFixed(1)),
23,
5,
7,
7);
line.add(this.lineBreak);
printData = printData..addAll(line);
}
if (invoice['returning']) {
if (invoice['remainingAmount'] > 0) {
line = this.tableRow(
printableThermal("مرجع نقدا"),
[],
[],
printableThermal(invoice['remainingAmount'].toStringAsFixed(1)),
23,
5,
7,
7);
line.add(this.lineBreak);
printData = printData..addAll(line);
}
} else {
if (invoice.totalPrice - invoice.totalPaidAmount > 0) {
line = this.tableRow(
printableThermal("على الحساب"),
[],
[],
printableThermal((invoice.totalPrice -
invoice.totalPaidAmount -
(invoice.discountAmount != null
? invoice.discountAmount
: 0))
.toStringAsFixed(1)),
23,
5,
7,
7);
line.add(this.lineBreak);
printData = printData..addAll(line);
}
}
printData = printData..addAll(this.disableUnderline);
line = [];
line.add(this.lineBreak);
line.add(this.lineBreak);
printData = printData..addAll(line);
line = this
.tableRow([], [], printableThermal("توقيع الزبون"), [], 15, 15, 12, 0);
line.add(this.lineBreak);
line.add(this.lineBreak);
printData = printData..addAll(line);
line = this
.tableRow([], [], printableThermal("____________"), [], 15, 15, 12, 0);
line.add(this.lineBreak);
line.add(this.lineBreak);
printData = printData..addAll(line);
line = [];
line.add(this.lineBreak);
line.add(this.lineBreak);
printData = printData..addAll(line);
printData = printData..addAll(this.stars);*/
return printData;
}
List printableThermal(String inputData) {
List<int> result = Utf8Codec().encode(inputData + '\u200F');
return result;
}
List<int> printableThermalEnglish(String inputData) {
return Utf8Codec().encode(inputData);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment