From ddf76d2540ce43a656e1fd2666bf81d58567b565 Mon Sep 17 00:00:00 2001 From: riz081 Date: Mon, 30 Jun 2025 22:36:06 +0700 Subject: [PATCH] update ResultTransaction integrasi dengan printer --- .../ResultTransactionActivity.java | 125 +++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/example/bdkipoc/transaction/ResultTransactionActivity.java b/app/src/main/java/com/example/bdkipoc/transaction/ResultTransactionActivity.java index 8e53734..83a386b 100644 --- a/app/src/main/java/com/example/bdkipoc/transaction/ResultTransactionActivity.java +++ b/app/src/main/java/com/example/bdkipoc/transaction/ResultTransactionActivity.java @@ -25,6 +25,11 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import com.sunmi.peripheral.printer.InnerResultCallback; +import android.os.RemoteException; +import com.example.bdkipoc.MyApplication; +import com.sunmi.peripheral.printer.SunmiPrinterService; + /** * ResultTransactionActivity - Enhanced Receipt-style Display using activity_receipt.xml * Shows EMV/Card transaction results using the same layout as QRIS receipts @@ -77,6 +82,35 @@ public class ResultTransactionActivity extends AppCompatActivity { private long taxAmount = 0; private long serviceFeeAmount = 500; // Default service fee private double taxPercentageValue = 0.11; // 11% tax + + private final InnerResultCallback printCallback = new InnerResultCallback() { + @Override + public void onRunResult(boolean isSuccess) throws RemoteException { + runOnUiThread(() -> { + if (isSuccess) { + showToast("Struk berhasil dicetak"); + } else { + showToast("Gagal mencetak struk"); + } + }); + } + + @Override + public void onReturnString(String result) throws RemoteException { + Log.d(TAG, "Print result: " + result); + } + + @Override + public void onRaiseException(int code, String msg) throws RemoteException { + runOnUiThread(() -> showToast("Printer error: " + msg)); + Log.e(TAG, "Printer exception: " + code + " - " + msg); + } + + @Override + public void onPrintResult(int code, String msg) throws RemoteException { + Log.d(TAG, "Print result code: " + code + ", msg: " + msg); + } + }; @Override protected void onCreate(Bundle savedInstanceState) { @@ -589,8 +623,95 @@ public class ResultTransactionActivity extends AppCompatActivity { // Action Methods private void printReceipt() { - Log.d(TAG, "Print receipt requested"); - showToast("Fitur cetak akan segera tersedia"); + try { + // Check if printer service is available + if (com.example.bdkipoc.MyApplication.app.sunmiPrinterService == null) { + showToast("Printer tidak tersedia"); + return; + } + + SunmiPrinterService printerService = com.example.bdkipoc.MyApplication.app.sunmiPrinterService; + + // Get all the data from the views + String merchantNameText = merchantName.getText().toString(); + String merchantLocationText = merchantLocation.getText().toString(); + String midTextValue = midText.getText().toString(); + String tidTextValue = tidText.getText().toString(); + String transactionNumberText = transactionNumber.getText().toString(); + String transactionDateText = transactionDate.getText().toString(); + String paymentMethodText = paymentMethod.getText().toString(); + String cardTypeText = cardType.getText().toString(); + String transactionTotalText = transactionTotal.getText().toString(); + String taxPercentageText = taxPercentage.getText().toString(); + String serviceFeeText = serviceFee.getText().toString(); + String finalTotalText = finalTotal.getText().toString(); + + showToast("Mencetak struk..."); + + try { + // Start printing + printerService.enterPrinterBuffer(true); + + // Set alignment to center + printerService.setAlignment(1, null); + + // Print header + printerService.printText("# Payvora PRO\n\n", null); + + // Set alignment to left + printerService.setAlignment(0, null); + + // Print merchant info + printerService.printText(merchantNameText + "\n", null); + printerService.printText(merchantLocationText + "\n\n", null); + + // Print MID/TID + printerService.printText(midTextValue + " | " + tidTextValue + "\n\n", null); + + // Print transaction details + printerService.printText("Nomor transaksi " + transactionNumberText + "\n", null); + printerService.printText("Tanggal transaksi " + transactionDateText + "\n", null); + printerService.printText("Metode pembayaran " + paymentMethodText + "\n", null); + printerService.printText("Jenis Kartu " + cardTypeText + "\n\n", null); + + // Print amounts + printerService.printText("Total transaksi " + transactionTotalText + "\n", null); + printerService.printText("Pajak (%) " + taxPercentageText + "\n", null); + printerService.printText("Biaya Layanan " + serviceFeeText + "\n\n", null); + + // Print total in bold + printerService.printText("**TOTAL** **" + finalTotalText + "**\n", null); + + // Add EMV specific details if available + // if (emvMode && emvCardholderName != null) { + // printerService.printText("\nDETAIL EMV:\n", null); + // printerService.printText("Cardholder: " + emvCardholderName + "\n", null); + // if (cardNo != null) { + // printerService.printText("Card: " + maskCardNumber(cardNo) + "\n", null); + // } + // if (emvAid != null) { + // printerService.printText("AID: " + emvAid + "\n", null); + // } + // if (emvExpiry != null) { + // printerService.printText("Expiry: " + emvExpiry + "\n", null); + // } + // } + + // Add some line feeds + printerService.lineWrap(4, null); + + // Exit buffer mode + printerService.exitPrinterBuffer(true); + + } catch (RemoteException e) { + e.printStackTrace(); + showToast("Error printer: " + e.getMessage()); + } + + } catch (Exception e) { + Log.e(TAG, "Print error", e); + showToast("Error saat mencetak: " + e.getMessage()); + } } private void emailReceipt() {