diff --git a/app/release/app-release.apk b/app/release/app-release.apk index 0f35c23..d43c4b9 100644 Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ diff --git a/app/release/baselineProfiles/0/app-release.dm b/app/release/baselineProfiles/0/app-release.dm index 4f9b8dc..cfa7757 100644 Binary files a/app/release/baselineProfiles/0/app-release.dm and b/app/release/baselineProfiles/0/app-release.dm differ diff --git a/app/release/baselineProfiles/1/app-release.dm b/app/release/baselineProfiles/1/app-release.dm index dcd2ed9..964d2f4 100644 Binary files a/app/release/baselineProfiles/1/app-release.dm and b/app/release/baselineProfiles/1/app-release.dm differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index c0d72e6..b57f258 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -4,15 +4,15 @@ "type": "APK", "kind": "Directory" }, - "applicationId": "com.utsmm.kbz.mpu", + "applicationId": "com.utsmm.kbz", "variantName": "release", "elements": [ { "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 8, - "versionName": "1.08", + "versionCode": 10, + "versionName": "1.10", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/java/com/utsmm/kbz/ui/SettingsFragment.java b/app/src/main/java/com/utsmm/kbz/ui/SettingsFragment.java index 09bc43d..e3c0284 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/SettingsFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/SettingsFragment.java @@ -144,10 +144,10 @@ public class SettingsFragment extends DataBindingFragment { private void updateDemoSettings() { boolean isDemo = SystemParamsOperation.getInstance().getDemoStatus(); -// binding.demoSwitch.setChecked(isDemo); -// binding.demoSummary.setText(isDemo ? -// "Demo mode active - Test transactions without real processing" : -// "Simulator mode active - Real transaction processing"); + binding.demoSwitch.setChecked(isDemo); + binding.demoSummary.setText(isDemo ? + "Demo mode active - Test transactions without real processing" : + "Simulator mode active - Real transaction processing"); } private void updateAlertSoundSettings() { diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java index 6f1df0b..f22453c 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java @@ -9,7 +9,9 @@ import androidx.annotation.Nullable; import androidx.navigation.NavController; import androidx.navigation.NavDestination; +import com.utsmm.kbz.util.tms.TMSUtil; import com.utsmyanmar.baselib.fragment.DataBindingFragment; +import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptCardRequest; import com.utsmyanmar.baselib.util.DataBindingConfig; import com.utsmyanmar.baselib.util.TimeoutCallback; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; @@ -25,6 +27,8 @@ import com.utsmm.kbz.util.ecr.CoreUtils; import com.utsmyanmar.paylibs.utils.LogUtil; +import java.text.DecimalFormat; + public class ProcessingFragment extends DataBindingFragment { private static final String TAG = ProcessingFragment.class.getSimpleName(); @@ -248,11 +252,22 @@ public class ProcessingFragment extends DataBindingFragment { private void observeData(ProcessingTransaction processingTransaction) { + + + + processingTransaction.getTransStatus().observe(getViewLifecycleOwner(), transResultStatus -> { LogUtil.d(TAG,"Transaction RESULT :"+transResultStatus); + PayDetail payDetail = isEmvTrans() + ? emvTransactionProcessViewModel.payDetailResult.getValue() + : transProcessViewModel.payDetailResult.getValue(); + LogUtil.d(TAG, "PayDetail from VM: " + payDetail); + switch (transResultStatus) { case FAIL: + sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, false, "FAILED")); case SUCCESS: + sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, "SUCCESS")); case OFFLINE_SUCCESS: if(SystemParamsOperation.getInstance().getDemoStatus()) { delayFunctionCall(()->{ @@ -365,4 +380,108 @@ public class ProcessingFragment extends DataBindingFragment { }); } + + private String mapDE3ToShortCode(String de3) { + if (de3 == null) return "UNK"; + + switch (de3) { + case "000000": return "S"; // Sale + case "020000": return "V"; // Void + case "200000": return "R"; // Refund + case "030000": return "P"; // Preauth + case "310000": return "PC"; // Preauth Complete + } + return "UNK"; // Unknown + } + + public static String mapTransactionType(int type) { + switch (type) { + case 1: // SALE + return "S"; + + case 2: // VOID SALE + return "V"; + + case 4: // REFUND + return "R"; + + case 5: // PRE-AUTH + return "P"; + + case 6: // PRE-AUTH VOID + return "PV"; + + case 7: // PRE-AUTH COMPLETE + return "PC"; + + case 8: // PRE-AUTH COMPLETE VOID + return "PCV"; + + case 9: // CASH OUT + return "CAV"; + + case 18: // TIP ADJUST + return "TA"; + + case 20: // QR PAYMENT + return "QR"; + + case 34: // QR REFUND + return "QRV"; + + default: + return "UNK"; + } + } + private String mapCurrency(String currency) { + if (currency == null) return "MMK"; + + switch (currency) { + case "104": return "MMK"; + case "840": return "USD"; + case "764": return "THB"; + case "702": return "SGD"; + case "978": return "EUR"; + default: return currency; // Already alphabetic? return as-is + } + } + private EReceiptCardRequest buildEReceiptCardReceipt(PayDetail payDetail, boolean isSuccess, String reason){ + //current timestamp + String currentTimestamp = new java.text.SimpleDateFormat( + "MMddHHmmss", java.util.Locale.getDefault() + ).format(new java.util.Date()); + + //DeviceInfo + String serial = TMSUtil.getInstance().getSerialNumber(); + String appId = requireActivity().getPackageName(); + + //TerminalInfo + String terminalId = SystemParamsOperation.getInstance().getTerminalId(); + String merchantId = SystemParamsOperation.getInstance().getMerchantId(); + + double realAmount = payDetail.getAmount() / 100.0; + DecimalFormat df = new DecimalFormat("0.00"); + String amount = df.format(realAmount); + + EReceiptCardRequest request = new EReceiptCardRequest(); + request.setDE2(payDetail.getCardNo()); + request.setDE3(mapDE3ToShortCode(payDetail.getProcessCode())); + request.setDE4(amount); + request.setDE7(currentTimestamp); + request.setDE11(payDetail.getVoucherNo()); + request.setDE22(mapTransactionType(payDetail.getTransactionType())); + request.setDE37(payDetail.getReferNo()); + request.setDE38(payDetail.getAuthNo()); + request.setDE39(isSuccess ? "A" : "E"); + request.setDE41(terminalId); + request.setDE42(merchantId); + request.setDE49(mapCurrency(payDetail.getCurrencyCode())); + request.setSerial(serial); + request.setInvoiceNumber(payDetail.getInvoiceNo()); + request.setAppId(appId); + request.setDescription(reason); + + return request; + } + } diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java index b58c0a7..dd0651f 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java @@ -425,6 +425,7 @@ public class SharedViewModel extends ViewModel { public void pushReceipt(Object body){ + Log.d("push receipt", new Gson().toJson(body)); repository.sendReceipt(body) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) diff --git a/app/src/main/java/com/utsmm/kbz/ui/kpay/QRRefundFragment.java b/app/src/main/java/com/utsmm/kbz/ui/kpay/QRRefundFragment.java index f0a9f8d..a3ddb6e 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/kpay/QRRefundFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/kpay/QRRefundFragment.java @@ -11,8 +11,10 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.utsmm.kbz.util.tms.TMSUtil; import com.utsmyanmar.baselib.fragment.DataBindingFragment; import com.utsmyanmar.baselib.network.model.KPayRefund; +import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptQRRequest; import com.utsmyanmar.baselib.util.DataBindingConfig; import com.utsmyanmar.paylibs.model.PayDetail; import com.utsmyanmar.paylibs.model.TradeData; @@ -34,6 +36,8 @@ import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; import com.utsmyanmar.paylibs.utils.LogUtil; +import java.text.DecimalFormat; + public class QRRefundFragment extends DataBindingFragment { private SharedViewModel sharedViewModel; @@ -196,6 +200,8 @@ public class QRRefundFragment extends DataBindingFragment { payDetail.setReferNo(referenceNo); payDetail.setIsCanceled(true); +// sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, true, "Refund success")); + retrievedUpdatePayDetail(referenceNo); } else { @@ -210,6 +216,8 @@ public class QRRefundFragment extends DataBindingFragment { } payDetail.setTradeResultDes(errorMsg); +// sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, true, "RESP CODE [68]\n Refund Failed")); + sharedViewModel.payDetail.setValue(payDetail); navigateToNext(); } @@ -328,4 +336,6 @@ public class QRRefundFragment extends DataBindingFragment { } } } + + } diff --git a/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java b/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java index 9958ed4..bc8d8ea 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java @@ -315,29 +315,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi retrievedUpdatePayDetail(refLabel, payDetail,false); - double realAmount = payDetail.getAmount() / 100.0; - DecimalFormat df = new DecimalFormat("0.00"); - String amount = df.format(realAmount); - - String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault()) - .format(new java.util.Date()); - String serial = TMSUtil.getInstance().getSerialNumber(); - String packageName = getActivity().getPackageName(); - EReceiptQRRequest request = new EReceiptQRRequest(); - request.setDE3("QR"); - request.setDE4(amount); - request.setDE7(currentTimeStamp); - request.setDE37(payDetail.getReferNo()); - request.setDE39("A"); - request.setDE49("MMK"); - request.setSerial(serial); - request.setAppId(packageName); - request.setDE41(terminalId); - request.setDE42(merchantId); - request.setInvoiceNumber(payDetail.getInvoiceNo()); - request.setDE11(payDetail.getVoucherNo()); - request.setDescription("qr pay success"); - sharedViewModel.pushReceipt(request); + sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, true, "QR Pay Success")); return; } @@ -348,26 +326,6 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi payDetail.setQrTransStatus(2); } - String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault()) - .format(new java.util.Date()); - String serial = SystemParamsOperation.getInstance().getCurrentSerialNum(); - String packageName = getActivity().getPackageName(); - EReceiptQRRequest request = new EReceiptQRRequest(); - request.setDE3("QR"); - request.setDE4("0"); - request.setDE7(currentTimeStamp); - request.setDE37(payDetail.getReferNo()); - request.setDE39("D"); - request.setDE49("MMK"); - request.setSerial(serial); - request.setAppId(packageName); - request.setDE41(terminalId); - request.setDE42(merchantId); - request.setInvoiceNumber(payDetail.getInvoiceNo()); - request.setDE11(payDetail.getVoucherNo()); - request.setDescription("qr timeout"); - sharedViewModel.pushReceipt(request); - sharedViewModel.payDetail.postValue(payDetail); safeNavigateToRouteId(); @@ -376,25 +334,6 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi } catch (Exception e) { LogUtil.d(TAG, "On Exception::"); e.printStackTrace(); - String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault()) - .format(new java.util.Date()); - String serial = SystemParamsOperation.getInstance().getCurrentSerialNum(); - String packageName = getActivity().getPackageName(); - EReceiptQRRequest request = new EReceiptQRRequest(); - request.setDE3("QR"); - request.setDE4("0"); - request.setDE7(currentTimeStamp); - request.setDE37(payDetail.getReferNo()); - request.setDE39("D"); - request.setDE49("MMK"); - request.setSerial(serial); - request.setAppId(packageName); - request.setDE41(terminalId); - request.setDE42(merchantId); - request.setInvoiceNumber(payDetail.getInvoiceNo()); - request.setDE11(payDetail.getVoucherNo()); - request.setDescription("qr failed"); - sharedViewModel.pushReceipt(request); if (count == totalCount) { if(payDetail.getQrTransStatus() != -1) { @@ -487,4 +426,58 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi }); } + private String mapCurrency(String currency) { + if (currency == null) return "MMK"; + + switch (currency) { + case "104": return "MMK"; + case "840": return "USD"; + case "764": return "THB"; + case "702": return "SGD"; + case "978": return "EUR"; + default: return currency; // Already alphabetic? return as-is + } + } + + + private EReceiptQRRequest buildEReceiptQRReceipt(PayDetail payDetail, boolean isSuccess, String reason) { + + // Timestamp (MMddHHmmss) + String currentTimestamp = new java.text.SimpleDateFormat( + "MMddHHmmss", java.util.Locale.getDefault() + ).format(new java.util.Date()); + + // Device Info + String serial = TMSUtil.getInstance().getSerialNumber(); + String appId = requireActivity().getPackageName(); + + // Terminal Info +// String terminalId = SystemParamsOperation.getInstance().getTerminalId(); +// String merchantId = SystemParamsOperation.getInstance().getMerchantId(); + + + // Amount convert (long cents → double → 0.00) + double realAmount = payDetail.getAmount() / 100.0; + DecimalFormat df = new DecimalFormat("0.00"); + String amount = df.format(realAmount); + + EReceiptQRRequest request = new EReceiptQRRequest(); + request.setDE3("QR"); // QR Process Code + request.setDE4(amount); // Amount + request.setDE7(currentTimestamp); // Timestamp + request.setDE37(payDetail.getReferNo()); // Reference No + request.setDE39(isSuccess ? "A" : "E"); // A=Approved, D=Declined/Timeout + request.setDE41(terminalId); + request.setDE42(merchantId); + request.setDE49(mapCurrency(payDetail.getCurrencyCode())); // Currency + request.setSerial(serial); + request.setInvoiceNumber(payDetail.getInvoiceNo()); + request.setDE11(payDetail.getVoucherNo()); // STAN + request.setAppId(appId); + request.setDescription(reason); // Anything: success / timeout / error message + + return request; + } + + } diff --git a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java index f2e680e..efd5222 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java @@ -14,14 +14,18 @@ import com.utsmm.kbz.ui.kpay.KPayViewModel; import com.utsmm.kbz.ui.kpay.QRRefundFragment; import com.utsmm.kbz.util.TransactionUtil; import com.utsmm.kbz.util.ecr.CoreUtils; +import com.utsmm.kbz.util.tms.TMSUtil; import com.utsmyanmar.baselib.fragment.DataBindingFragment; import com.utsmyanmar.baselib.network.model.KPayRefund; +import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptQRRequest; import com.utsmyanmar.baselib.util.DataBindingConfig; import com.utsmyanmar.paylibs.model.PayDetail; import com.utsmyanmar.paylibs.system.SystemDateTime; import com.utsmyanmar.paylibs.utils.LogUtil; import com.utsmyanmar.paylibs.utils.POSUtil; +import java.text.DecimalFormat; + import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.Disposable; @@ -140,10 +144,13 @@ public class QRRefundProcessFragment extends DataBindingFragment { payDetail.setReferNo(referenceNo); payDetail.setIsCanceled(true); + sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, true, "Refund success")); + retrievedUpdatePayDetail(referenceNo); } else { LogUtil.d(TAG, "Refund failed!"); + payDetail.setQrTransStatus(-1); payDetail.setQrReferNo(referenceNo); payDetail.setReferNo(referenceNo); @@ -212,4 +219,58 @@ public class QRRefundProcessFragment extends DataBindingFragment { } } } + + private String mapCurrency(String currency) { + if (currency == null) return "MMK"; + + switch (currency) { + case "104": return "MMK"; + case "840": return "USD"; + case "764": return "THB"; + case "702": return "SGD"; + case "978": return "EUR"; + default: return currency; // Already alphabetic? return as-is + } + } + + private EReceiptQRRequest buildEReceiptQRReceipt(PayDetail payDetail, boolean isSuccess, String reason) { + + // Timestamp (MMddHHmmss) + String currentTimestamp = new java.text.SimpleDateFormat( + "MMddHHmmss", java.util.Locale.getDefault() + ).format(new java.util.Date()); + + // Device Info + String serial = TMSUtil.getInstance().getSerialNumber(); + String appId = requireActivity().getPackageName(); + + + // Terminal Info +// String terminalId = SystemParamsOperation.getInstance().getTerminalId(); +// String merchantId = SystemParamsOperation.getInstance().getMerchantId(); + String terminalId = TransactionUtil.getInstance().getQRTerminalId(); + String merchantId = TransactionUtil.getInstance().getQRMerchantId(); + + // Amount convert (long cents → double → 0.00) + double realAmount = payDetail.getAmount() / 100.0; + DecimalFormat df = new DecimalFormat("0.00"); + String amount = df.format(realAmount); + + EReceiptQRRequest request = new EReceiptQRRequest(); + request.setDE3("QRV"); // QR Process Code(fix later with get from config) + request.setDE4(amount); // Amount + request.setDE7(currentTimestamp); // Timestamp + request.setDE37(payDetail.getReferNo()); // Reference No + request.setDE39(isSuccess ? "A" : "E"); // A=Approved, E=Error/Declined/Timeout + request.setDE41(terminalId); + request.setDE42(merchantId); + request.setDE49(mapCurrency(payDetail.getCurrencyCode())); // Currency(fix later with get from config) + request.setSerial(serial); + request.setInvoiceNumber(payDetail.getInvoiceNo()); + request.setDE11(payDetail.getVoucherNo()); // STAN + request.setAppId(appId); + request.setDescription(reason); // Anything: success / timeout / error message + + return request; + } } diff --git a/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java b/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java index 04de3e6..cc2b651 100644 --- a/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java +++ b/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java @@ -233,11 +233,11 @@ public class TMSUtil { String secHostIp = SystemParamsOperation.getInstance().getSecIpAddress(); String keyIndex = SystemParamsOperation.getInstance().getTMKIndex(); - if(tid.length() == 8 && mid.length() == 15 && !hostIp.isEmpty() && !keyIndex.isEmpty()) { + if(tid.length() == 8 && (mid.length() == 11 || mid.length() == 15) && !hostIp.isEmpty() && !keyIndex.isEmpty()) { tmsValidity = new TMSValidity(ValidityStatus.SUCCESS,"Success"); } else if(tid.length() != 8) { tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Tid is invalid!"); - } else if(mid.length() != 15) { + } else if(mid.length() != 15 && mid.length() != 11 ) { tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Mid is invalid!"); } else if(hostIp.isEmpty()) { tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Pri-Ip is invalid!"); diff --git a/app/src/main/res/layout/fragment_settings_modern.xml b/app/src/main/res/layout/fragment_settings_modern.xml index 6323c42..43c7570 100644 --- a/app/src/main/res/layout/fragment_settings_modern.xml +++ b/app/src/main/res/layout/fragment_settings_modern.xml @@ -316,82 +316,82 @@ - - - - - - - - - - - + - - - - - - + - - - - - - - + - - - - - - + - + - - - - - + - - - - - - - - - + - - - - - - - - - - + - + - - - - - - - + - + - + diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptCardRequest.java b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptCardRequest.java new file mode 100644 index 0000000..8d8fd39 --- /dev/null +++ b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptCardRequest.java @@ -0,0 +1,135 @@ +package com.utsmyanmar.baselib.network.model.e_receipt; + +public class EReceiptCardRequest { + + private String DE2; + private String DE22; + private String DE3; + private String DE39; + private String DE41; + private String DE42; + private String serial; + private String DE49; + private String DE37; + private String DE7; + private String DE4; + private String appId; + private String invoiceNumber; + private String DE11; + private String description; + private String DE38; + + public EReceiptCardRequest() {} + + // GETTERS + public String getDE3() { + return DE3; + } + + public String getDE39() { + return DE39; + } + + public String getDE41() { + return DE41; + } + + public String getDE42() { + return DE42; + } + + public String getSerial() { + return serial; + } + + public String getDE49() { + return DE49; + } + + public String getDE37() { + return DE37; + } + + public String getDE7() { + return DE7; + } + + public String getDE4() { + return DE4; + } + + public String getAppId(){ + return appId; + } + + public String getInvoiceNumber(){ + return invoiceNumber; + } + public String getDE11(){ + return DE11; + } + + public String getDescription(){ + return description; + } + public String getDE2(){ return DE2; } + public String getDE38(){ return DE38; } + public String getDE22(){ return DE22; } + // SETTERS + public void setDE3(String DE3) { + this.DE3 = DE3; + } + + public void setDE39(String DE39) { + this.DE39 = DE39; + } + + public void setDE41(String DE41) { + this.DE41 = DE41; + } + + public void setDE42(String DE42) { + this.DE42 = DE42; + } + + public void setSerial(String serial) { + this.serial = serial; + } + + public void setDE49(String DE49) { + this.DE49 = DE49; + } + + public void setDE37(String DE37) { + this.DE37 = DE37; + } + + public void setDE7(String DE7) { + this.DE7 = DE7; + } + + public void setDE4(String DE4) { + this.DE4 = DE4; + } + + public void setAppId(String appId){ + this.appId = appId; + } + + public void setInvoiceNumber(String invoiceNumber){ + this.invoiceNumber = invoiceNumber; + } + + public void setDE11(String DE11){ + this.DE11 = DE11; + } + + public void setDescription(String description){ + this.description = description; + } + + public void setDE2(String DE2){ this.DE2 = DE2; } + + public void setDE38(String DE38){ this.DE38 = DE38; } + public void setDE22(String DE22){ this.DE22 = DE22; } +}