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