Created
January 19, 2022 09:30
-
-
Save mkhoudary/1ec463844fff50b34e95f78e96edfadd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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