diff --git a/android/app/build.gradle b/android/app/build.gradle index cdbbd2a..16b6b08 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -34,7 +34,7 @@ if (keystorePropertiesFile.exists()) { android { - compileSdkVersion 29 + compileSdkVersion 30 sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -47,7 +47,7 @@ android { defaultConfig { applicationId "kz.com.aman.kassa" minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true @@ -63,9 +63,9 @@ android { } } buildTypes { - all { - buildConfigField ("String[]", "SUPPORTED_DEVICES", collectSupportedDevicesToArray()) - } +// all { +// buildConfigField ("String[]", "SUPPORTED_DEVICES", collectSupportedDevicesToArray()) +// } debug { shrinkResources false minifyEnabled false @@ -116,37 +116,13 @@ dependencies { implementation 'com.android.support:multidex:1.0.3' //m4bank dependencies - implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation deps.zlibrary - implementation deps.hardware.atol.values() //todo need delete this package - implementation deps.hardware.terminalCommon.values() - implementation deps.hardware.softpos.softpaylibrary - implementation deps.hardware.softpos.softpay_dependencies - //Implementation okhhtp library - implementation deps.okhttp.values() - //Implementation retrofit library - implementation deps.retrofit.values() - //Implementation rxJava library - implementation deps.rx.values() - //Implementation logback - implementation deps.logback.core - implementation(deps.logback.classic) { - exclude group: 'com.google.android', module: 'android' - } - //Implementation other libraries - implementation deps.timber - implementation deps.paperdb - implementation deps.greendao - - implementation deps.retro_stream - implementation deps.websockets // Only for useWebsockets parameter } -def collectSupportedDevicesToArray() { - return '{' + rootProject.ext."supportedDevices${getProject().name}".collect { - "\"${it}\"" - }.join(",") + '}' -} +//def collectSupportedDevicesToArray() { +// return '{' + rootProject.ext."supportedDevices${getProject().name}".collect { +// "\"${it}\"" +// }.join(",") + '}' +//} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/ActivationCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/ActivationCallbackHandlerImpl.java deleted file mode 100644 index f28a468..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/ActivationCallbackHandlerImpl.java +++ /dev/null @@ -1,65 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.EditText; -import android.widget.Toast; - -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.library.external.authorization.ActivationCallbackHandler; -import ru.m4bank.mpos.service.data.dynamic.objects.ActivationType; -import timber.log.Timber; - -public class ActivationCallbackHandlerImpl implements ActivationCallbackHandler { - private final M4BankActivity activity; - - public ActivationCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onActivationTypeAndInfoRequested() { - Timber.i("FIRST STEP STARTED"); - activity.getClientInterface().getAuthorizationManager().sendActivationFirstStepData(ActivationType.EMAIL, "dm@centercorptech.net"); - } - - @Override - public void onActivationCodeRequested(Integer codeLifetime) { - Timber.i("FIRST STEP COMPLETED"); - Timber.i("SECOND STEP STARTED"); - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("ADD activation code:"); - - EditText editext = new EditText(activity); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface().getAuthorizationManager().sendActivationCode(editext.getText().toString()); - dialog.dismiss(); - }); - - builder.setView(editext); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onActivationConfirmRequested() { - Timber.i("SECOND STEP COMPLETED"); - Timber.i("LAST STEP STARTED"); - activity.getClientInterface().getAuthorizationManager().confirmActivation("1234", null); - } - - - @Override - public void onCompleted(Result result) { - Timber.i("COMPLETED WITH RESULT - " + result.getResultType()); - } - - @Override - public void onWrongApiCalled() { - Timber.i("WRONG API CALLED"); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/AlipayPaymentCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/AlipayPaymentCallbackHandlerImpl.java deleted file mode 100644 index c2a7e6d..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/AlipayPaymentCallbackHandlerImpl.java +++ /dev/null @@ -1,174 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.EditText; -import android.widget.Toast; - -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.AlipayPaymentCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.dynamic.objects.AdditionalTransactionData; -import ru.m4bank.mpos.service.data.dynamic.objects.AlipayCodeType; -import ru.m4bank.mpos.service.data.dynamic.objects.IdentityCodeType; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import timber.log.Timber; - -public class AlipayPaymentCallbackHandlerImpl implements AlipayPaymentCallbackHandler { - - private final M4BankActivity activity; - - public AlipayPaymentCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onWorkFlowDataRequested() { - Timber.d("WorkFlow requested"); - } - - @Override - public void onTransactionAmountRequested() { - activity.getClientInterface().getTransactionManager().setTransactionAmount(activity.getAmount()); - } - - @Override - public void onTransactionDataRequested() { - activity.getClientInterface().getTransactionManager().setAdditionalTransactionData(new AdditionalTransactionData.Builder(null).build()); - } - - @Override - public void onTransactionBarCodeRequested() { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("ADD QRCODE:"); - - EditText editext = new EditText(activity); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface().getTransactionManager().setTransactionBarCode(new IdentityCodeType(AlipayCodeType.QRCODE, editext.getText().toString())); - dialog.dismiss(); - }); - - builder.setView(editext); - activity.runOnUiThread(() -> builder.create().show()); - } - - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), - Toast.LENGTH_SHORT).show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionInit() { - activity.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription() == null ? "" : errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - activity.getClientInterface() - .getTransactionManager() - .sendTransactionUserData("signature", "phone", "email"); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void notAuthorized() { - - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - - } - - @Override - public void onErrorStatusTransaction() { - - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/AuthorizationCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/AuthorizationCallbackHandlerImpl.java deleted file mode 100644 index 1d7cfd7..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/AuthorizationCallbackHandlerImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; -import ru.m4bank.mpos.library.external.authorization.AuthorizationCallbackHandler; -import ru.m4bank.mpos.service.authorization.network.AuthorizationResponse; - - -public class AuthorizationCallbackHandlerImpl implements AuthorizationCallbackHandler { - private final M4BankActivity activity; - - public AuthorizationCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onLoginAndPasswordRequested() { - activity.getClientInterface().getAuthorizationManager().sendLoginAndPassword(activity.getLogin(), activity.getPassword()); - } - - - @Override - public void onCompleted(ru.m4bank.mpos.service.result.Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), - Toast.LENGTH_SHORT).show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(ru.m4bank.mpos.service.result.Result result, AuthorizationResponse authorizationResponse) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), - Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/CardPaymentCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/CardPaymentCallbackHandlerImpl.java deleted file mode 100644 index f27abcb..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/CardPaymentCallbackHandlerImpl.java +++ /dev/null @@ -1,463 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import kz.com.aman.kassa.bank.gui.CustomKeyBoardDilalog; -import ru.m4bank.mpos.library.external.transactions.CardPaymentCallbackHandler; -import ru.m4bank.mpos.service.commons.data.ResultType; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.data.dynamic.objects.AdditionalTransactionData; -import ru.m4bank.mpos.service.data.dynamic.objects.GoodsData; -import ru.m4bank.mpos.service.data.dynamic.objects.Reader; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.VendorData; -import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.AccountingSubject; -import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.TaxRate; -import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode; -import ru.m4bank.mpos.service.hardware.error.AllError; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.TransactionTypeConv; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.ButtonKeyboardDto; -import ru.m4bank.mpos.service.transactions.data.MessageButtonData; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.VirtualPinKeyboardData; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto; -import timber.log.Timber; - -public class CardPaymentCallbackHandlerImpl implements CardPaymentCallbackHandler { - private final M4BankActivity activity; - private CustomKeyBoardDilalog customKeyBoardDilalog; - private TransactionTypeConv transactionTypeConv; - - public CardPaymentCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - customKeyBoardDilalog = new CustomKeyBoardDilalog(); - transactionTypeConv = TransactionTypeConv.UNKNOWN; - } - - public CardPaymentCallbackHandlerImpl setTransactionTypeConv(TransactionTypeConv transactionTypeConv) { - this.transactionTypeConv = transactionTypeConv; - return this; - } - - @Override - public void onDeviceToConnectSelectionRequested(List deviceList) { - Timber.d("onDeviceToConnectSelectionRequested"); - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getTransactionManager() - .selectCardReader(deviceListSpinner.getSelectedItem().toString()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - Timber.d("Reader has been received"); - } - - @Override - public void onNoBoundedDevicesFound() { - Timber.d("No bounded readers"); - } - - @Override - public void onDeviceToUseSelectionRequested(List deviceList) { - Timber.d("onDeviceToUseSelectionRequested"); - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(deviceList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getTransactionManager() - .setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - @Override - public void onTransactionAmountRequested() { - Timber.d("onTransactionAmountRequested"); - activity.getClientInterface().getTransactionManager().setTransactionAmount(activity.getAmount()); - } - - @Override - public void onTransactionDataRequested() { - Timber.d("onTransactionDataRequested"); - List goodsDataList = new ArrayList<>(); - goodsDataList.add(new GoodsData.Builder() - .setOriginalPrice(100000L) - .setRealPrice(100000L) - .setName("Принтер") - .setQuantity(1) - .setCode("000001") - .setUnits("00") - .setDiscount(0L) - .setTaxRate(TaxRate.Tax_18) - .setExponent(2) - .setAccountingSubject(AccountingSubject.PRODUCT) - .build()); - goodsDataList.add(new GoodsData.Builder() - .setOriginalPrice(30065L) - .setRealPrice(30065L) - .setName("Услуга") - .setQuantity(3) - .setCode("000002") - .setUnits("00") - .setDiscount(0L) - .setTaxRate(TaxRate.Tax_18) - .setExponent(2) - .setAccountingSubject(AccountingSubject.PRODUCT) - .build()); - - HashMap vendorDescription = new HashMap<>(); - vendorDescription.put("vendor", "description"); - vendorDescription.put("vendor1", "description1"); - vendorDescription.put("vendor2", "description2"); - vendorDescription.put("vendor3", "description3"); - VendorData vendorData = new VendorData(vendorDescription); - - AdditionalTransactionData additionalTransactionData = new AdditionalTransactionData.Builder(goodsDataList).vendorData(vendorData).build(); - activity.getClientInterface().getTransactionManager().setAdditionalTransactionData(additionalTransactionData); - } - - @Override - public void onWorkFlowDataRequested() { - Timber.d("WorkFlow requested"); - } - - @Override - public void onCompleted(Result result) { - Timber.d("onCompleted"); - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - Timber.d("onWrongApiCalled"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) { - Timber.d("onReceiveCardData"); - if (shouldConfirmBeManuallyCalled) { - activity.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - } - - @Override - public void onTransactionInit() { - //Impossible - activity.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - Timber.d("onTransactionExecutionStatusChanged: " + newStatus.name()); - activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - if (transactionErrorData.getError() != null) { - activity.runOnUiThread(() -> Toast.makeText(activity, transactionErrorData.getError().getDescription(), Toast.LENGTH_LONG).show()); - } else { - Timber.d("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription()); - activity.runOnUiThread(() -> Toast.makeText(activity, String.format("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getFinalDescription()), Toast.LENGTH_LONG).show()); - } - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - Timber.d("onErrorWithPossibilityToRetry: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription()); - activity.runOnUiThread(() -> Toast.makeText(activity, String.format("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getFinalDescription()), Toast.LENGTH_LONG).show()); - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - Timber.d("onTransactionDataReceivedError"); - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - Timber.d("onUserInformationRequested"); - if (transactionTypeConv != TransactionTypeConv.CANCEL) { - activity.getClientInterface() - .getTransactionManager() - .sendTransactionUserData("signature", "phone", "vsa@centercorptech.net"); - } else { - onTransactionCompleted(); - } - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - Timber.d("onTransactionDataReceived"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - Timber.d("onTransactionCompleted"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onRequiredHostAddress() { - Timber.d("onRequiredHostAddress"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Set Host Address", Toast.LENGTH_LONG) - .show()); - activity.getClientInterface().getTransactionManager().setHostAddress("213.79.122.128", "8011"); - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) { - Timber.d("onDisconnectedEventReceivedOrCanNotEstablishConnection"); - if (reconnectAvailable) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().tryToReconnectAndRepeatLast()); - builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel()); - builder.create().show(); - }); - } - } - - @Override - public void onConnectingProcessStarted(String deviceName) { - Timber.d("Connecting process started: %s", deviceName); - } - - @Override - public void onReconnectNeededToProcess() { - Timber.d("onReconnectNeededToProcess"); - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().getTransactionManager().tryToReconnectToCardReader()); - builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel()); - builder.create().show(); - }); - } - - @Override - public void onReconciliationRequiredToProcess() { - Timber.d("onReconciliationRequiredToProcess"); - Timber.d("Reconciliation required!!!"); - activity.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction(); - } - - @Override - public void onReconciliationCompleted(Result result) { - Timber.d("onReconciliationCompleted"); - Timber.d("Reconciliation completed!!!"); - if (result.getResultType() == ResultType.SUCCESSFUL) { - activity.getClientInterface().getTransactionManager().continueTransactionAfterReconciliation(); - } else { - activity.runOnUiThread(() -> Toast.makeText(activity, "Reconciliation failed " + result.getDescription(), Toast.LENGTH_LONG) - .show()); - } - } - - @Override - public void notAuthorized() { - Timber.d("notAuthorized"); - activity.runOnUiThread(() -> Toast.makeText(activity, "notAuthorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - Timber.d("onTransactionDetailsReceived"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - Timber.d("onSuccessStatusTransaction"); - } - - @Override - public void onErrorStatusTransaction() { - Timber.d("onErrorStatusTransaction"); - } - - @Override - public void onRepeat(int attemptNumber) { - Timber.d("onRepeat"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequestedReportZ() { - Timber.d("onRequestedReportZ"); - } - - @Override - public void onCompletedPrinting(PrinterResult printerErrorDataPrinterBaseDataPrinterResult) { - Timber.d("onCompletedPrinting"); - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - Timber.d("onStatusFiscalModule"); - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - Timber.d("onPrinterForRegistrationGettingCompleted"); - } - - @Override - public void onNoBoundedPrinterFound() { - Timber.d("onNoBoundedPrinterFound"); - - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - Timber.d("onPrinterToUseSelectionRequested"); - } - - @Override - public void onRequiredReversal(String description, ResultCode resultCode) { - Timber.d("onRequiredReversal: %s, resultCode: %s", description, resultCode.name()); - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setMessage("Revert last of operation?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().getTransactionManager().revertCurrentOperation(new RevertCurrentOperationCallbackHandlerImpl(activity))); - builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().getTransactionManager().clearLastTransactionInformation()); - builder.create().show(); - }); - } - - @Override - public void onRequiredApplicationSelection(List list) { - Timber.d("onRequiredApplicationSelection"); - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose application identifier"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, list); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getTransactionManager() - .setTransactionApplicationIdentifier((ApplicationIdConv) deviceListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - - @Override - public void onActivityUpdateUiThread() { - Timber.d("onActivityUpdateUiThread"); - activity.getClientInterface().getTransactionManager().addPinpadClickListener(activity); - } - - @Override - public void onCreatePinPadButtons() { - Timber.d("onCreatePinPadButtons"); - customKeyBoardDilalog.createDialog(activity); - customKeyBoardDilalog.show(activity); - ButtonKeyboardDto buttonKeyboardDto = new ButtonKeyboardDto.Build( - customKeyBoardDilalog.getBtnb1(), - customKeyBoardDilalog.getBtnb2(), - customKeyBoardDilalog.getBtnb3(), - customKeyBoardDilalog.getBtnb4(), - customKeyBoardDilalog.getBtnb5(), - customKeyBoardDilalog.getBtnb6(), - customKeyBoardDilalog.getBtnb7(), - customKeyBoardDilalog.getBtnb8(), - customKeyBoardDilalog.getBtnb9(), - customKeyBoardDilalog.getBtnb0(), - customKeyBoardDilalog.getBtncancel(), - customKeyBoardDilalog.getBtnconfirm(), - customKeyBoardDilalog.getBtnclean(), - activity.getWindowManager().getDefaultDisplay().getRotation() - ).build(); - activity.getClientInterface().getTransactionManager().addPinPadButtons(buttonKeyboardDto); - } - - @Override - public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) { - Timber.d("onShowPinPadKeyBoard"); - customKeyBoardDilalog.setText(messageButtonData); - } - - @Override - public void onUpdateElementPin(int count) { - Timber.d("onUpdateElementPin"); - activity.runOnUiThread(() -> Toast.makeText(activity, "count = " + count, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCloseKeyboard() { - Timber.d("onCloseKeyboard"); - customKeyBoardDilalog.close(activity); - } - - @Override - public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) { - activity.showSelectStyleDialog(additionalData -> - activity.getClientInterface().getTransactionManager().addVirtualPinKeyboardData(additionalData)); - } - - public interface SelectStyleListener { - void onSelectStyle(VirtualPinKeyboardData virtualPinKeyboardData); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/CardReadingCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/CardReadingCallbackHandlerImpl.java deleted file mode 100644 index 5bf2734..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/CardReadingCallbackHandlerImpl.java +++ /dev/null @@ -1,215 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.List; - -import kz.com.aman.kassa.bank.gui.CustomKeyBoardDilalog; -import ru.m4bank.mpos.library.external.transactions.CardReadingCallbackHandler; -import ru.m4bank.mpos.service.commons.utils.ArrayUtils; -import ru.m4bank.mpos.service.data.dynamic.objects.Reader; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.SimpleCardTransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import timber.log.Timber; - -public class CardReadingCallbackHandlerImpl implements CardReadingCallbackHandler { - private final M4BankActivity activity; - private CustomKeyBoardDilalog customKeyBoardDilalog; - - public CardReadingCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - customKeyBoardDilalog = new CustomKeyBoardDilalog(); - } - - @Override - public void onDeviceToConnectSelectionRequested(List deviceList) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getTransactionManager() - .selectCardReader(deviceListSpinner.getSelectedItem().toString()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - Timber.d("Reader has been received"); - } - - @Override - public void onNoBoundedDevicesFound() { - Timber.d("No bounded readers"); - } - - @Override - public void onDeviceToUseSelectionRequested(List deviceList) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, ArrayUtils.newArrayList(deviceList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getTransactionManager() - .setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + result.getDescription(), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionInit() { - - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData errorData) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - activity.getClientInterface() - .getTransactionManager() - .sendTransactionUserData("signature", "phone", "vsa@centercorptech.net"); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) { - if (reconnectAvailable) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().tryToReconnectAndRepeatLast()); - builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel()); - builder.create().show(); - }); - } - } - - @Override - public void onConnectingProcessStarted(String deviceName) { - Timber.d("Connecting process started"); - } - - @Override - public void onReconnectNeededToProcess() { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().getTransactionManager().tryToReconnectToCardReader()); - builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel()); - builder.create().show(); - }); - } - - @Override - public void notAuthorized() { - - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onReceiveCommonCardData(SimpleCardTransactionData simpleCardTransactionData) { - String pan = simpleCardTransactionData.getCardNumber(); - String expDate = simpleCardTransactionData.getCardExpiryDate(); - String cardHolderName = simpleCardTransactionData.getCardHolderName(); - activity.runOnUiThread(() -> Toast.makeText(activity, "card data: " + pan + " - " + expDate + " - " + cardHolderName, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequiredApplicationSelection(List applicationOfList) { - // activity.runOnUiThread(() -> { - // AlertDialog.Builder builder = new AlertDialog.Builder(activity); - // builder.setTitle("Choose application identifier"); - // - // Spinner deviceListSpinner = new Spinner(activity); - // ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, applicationOfList); - // adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - // deviceListSpinner.setAdapter(adapter); - // - // builder.setPositiveButton("OK", (dialog, which) -> { - // activity.getClientInterface() - // .getTransactionManager() - // .setTransactionApplicationIdentifier(deviceListSpinner.getSelectedItem().toString()); - // dialog.dismiss(); - // }); - // - // builder.setView(deviceListSpinner); - // builder.create().show(); - // }); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/CardRefundCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/CardRefundCallbackHandlerImpl.java deleted file mode 100644 index c7dbfb0..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/CardRefundCallbackHandlerImpl.java +++ /dev/null @@ -1,334 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import kz.com.aman.kassa.bank.gui.CustomKeyBoardDilalog; -import ru.m4bank.mpos.library.external.transactions.EasyCardRefundCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.data.dynamic.objects.Reader; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode; -import ru.m4bank.mpos.service.data.dynamic.objects.transaction.RefundType; -import ru.m4bank.mpos.service.hardware.error.AllError; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.ButtonKeyboardDto; -import ru.m4bank.mpos.service.transactions.data.MessageButtonData; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto; -import timber.log.Timber; - -public class CardRefundCallbackHandlerImpl implements EasyCardRefundCallbackHandler, GetTransactionsListCallbackHandler { - - private final M4BankActivity activity; - private Transaction transaction; - private CustomKeyBoardDilalog customKeyBoardDilalog; - - public CardRefundCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - customKeyBoardDilalog = new CustomKeyBoardDilalog(); - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - Timber.d("Reader has been received"); - } - - @Override - public void onNoBoundedDevicesFound() { - Timber.d("No bounded readers"); - } - - @Override - public void onDeviceToUseSelectionRequested(List deviceList) { - Timber.d("onDeviceToUseSelectionRequested"); - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(deviceList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface().getTransactionManager().setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onDeviceToConnectSelectionRequested(List deviceList) { - Timber.d("onDeviceToConnectSelectionRequested"); - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface().getTransactionManager().selectCardReader(deviceListSpinner.getSelectedItem().toString()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onCompleted(Result result) { - Timber.d("onCompleted"); - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), - Toast.LENGTH_SHORT).show()); - } - - @Override - public void onWrongApiCalled() { - Timber.d("onWrongApiCalled"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) { - Timber.d("onReceiveCardData"); - if (shouldConfirmBeManuallyCalled) { - activity.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - } - - @Override - public void onRequiredReversal(String description, ResultCode resultCode) { - Timber.d("onRequiredReversal: %s, resultCode: %s", description, resultCode.name()); - } - - @Override - public void onRequiredApplicationSelection(List list) { - Timber.d("onRequiredApplicationSelection"); - } - - @Override - public void onTransactionInit() { - - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - Timber.d("onTransactionExecutionStatusChanged: %s", newStatus.name()); - activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - Timber.d("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription()); - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - Timber.d("onErrorWithPossibilityToRetry: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription()); - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - Timber.d("onTransactionDataReceivedError"); - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - Timber.d("onUserInformationRequested"); - activity.getClientInterface().getTransactionManager().sendTransactionUserData("signature", "phone", "email"); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - Timber.d("onTransactionDataReceived"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - Timber.d("onTransactionCompleted"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) { - Timber.d("onDisconnectedEventReceivedOrCanNotEstablishConnection"); - } - - @Override - public void onConnectingProcessStarted(String name) { - Timber.d("onConnectingProcessStarted: %s", name); - } - - @Override - public void onReconnectNeededToProcess() { - Timber.d("onReconnectNeededToProcess"); - } - - @Override - public void onReconciliationRequiredToProcess() { - Timber.d("onReconciliationRequiredToProcess"); - Timber.d("Reconciliation required!!!"); - activity.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction(); - } - - @Override - public void onReconciliationCompleted(Result result) { - Timber.d("onReconciliationCompleted"); - Timber.d("Reconciliation completed!!!"); - } - - @Override - public void notAuthorized() { - Timber.d("notAuthorized"); - activity.runOnUiThread(() -> Toast.makeText(activity, "notAuthorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - Timber.d("onRepeat"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequestedReportZ() { - Timber.d("onRequestedReportZ"); - } - - @Override - public void onCompletedPrinting(PrinterResult printerErrorDataPrinterBaseDataPrinterResult) { - Timber.d("onCompletedPrinting"); - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - Timber.d("onStatusFiscalModule"); - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - Timber.d("onPrinterForRegistrationGettingCompleted"); - } - - @Override - public void onNoBoundedPrinterFound() { - Timber.d("onNoBoundedPrinterFound"); - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - Timber.d("onPrinterToUseSelectionRequested"); - } - - @Override - public void onRefundDataRequested() { - Timber.d("onRefundDataRequested"); - activity.getClientInterface().getTransactionManager().setRefundData(transaction, transaction.getAmount(), RefundType.General); - } - - @Override - public void onTransactionsListReceived(List transactionList) { - Timber.d("onTransactionsListReceived"); - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose transaction"); - - Spinner transactionListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - transaction = (Transaction) transactionListSpinner.getSelectedItem(); - activity.getClientInterface().getTransactionManager().makeCardRefund(this); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onActivityUpdateUiThread() { - Timber.d("onActivityUpdateUiThread"); - activity.getClientInterface().getTransactionManager().addPinpadClickListener(activity); - } - - @Override - public void onCreatePinPadButtons() { - Timber.d("onCreatePinPadButtons"); - customKeyBoardDilalog.createDialog(activity); - customKeyBoardDilalog.show(activity); - ButtonKeyboardDto buttonKeyboardDto = new ButtonKeyboardDto.Build( - customKeyBoardDilalog.getBtnb1(), - customKeyBoardDilalog.getBtnb2(), - customKeyBoardDilalog.getBtnb3(), - customKeyBoardDilalog.getBtnb4(), - customKeyBoardDilalog.getBtnb5(), - customKeyBoardDilalog.getBtnb6(), - customKeyBoardDilalog.getBtnb7(), - customKeyBoardDilalog.getBtnb8(), - customKeyBoardDilalog.getBtnb9(), - customKeyBoardDilalog.getBtnb0(), - customKeyBoardDilalog.getBtncancel(), - customKeyBoardDilalog.getBtnconfirm(), - customKeyBoardDilalog.getBtnclean(), - activity.getWindowManager().getDefaultDisplay().getRotation() - ).build(); - activity.getClientInterface().getTransactionManager().addPinPadButtons(buttonKeyboardDto); - } - - @Override - public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) { - Timber.d("onShowPinPadKeyBoard"); - customKeyBoardDilalog.setText(messageButtonData); - } - - @Override - public void onUpdateElementPin(int count) { - Timber.d("onUpdateElementPin"); - activity.runOnUiThread(() -> Toast.makeText(activity, "count = " + count, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCloseKeyboard() { - Timber.d("onCloseKeyboard"); - customKeyBoardDilalog.close(activity); - } - - @Override - public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) { - activity.showSelectStyleDialog(additionalData -> - activity.getClientInterface().getTransactionManager().addVirtualPinKeyboardData(additionalData)); - } - - @Override - public void onRequiredHostAddress() { - Timber.d("onRequiredHostAddress"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Set Host Address", Toast.LENGTH_LONG) - .show()); - activity.getClientInterface().getTransactionManager().setHostAddress("213.79.122.128", "8011"); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/CashPaymentCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/CashPaymentCallbackHandlerImpl.java deleted file mode 100644 index cb99bc0..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/CashPaymentCallbackHandlerImpl.java +++ /dev/null @@ -1,186 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.CashPaymentCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.dynamic.objects.AdditionalTransactionData; -import ru.m4bank.mpos.service.data.dynamic.objects.GoodsData; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.AccountingSubject; -import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.TaxRate; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import timber.log.Timber; - -public class CashPaymentCallbackHandlerImpl implements CashPaymentCallbackHandler { - - private final M4BankActivity activity; - - public CashPaymentCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onWorkFlowDataRequested() { - Timber.d("WorkFlow requested"); - } - - @Override - public void onTransactionAmountRequested() { - activity.getClientInterface().getTransactionManager().setTransactionAmount(activity.getAmount()); - } - - @Override - public void onTransactionDataRequested() { - List goodsDataList = new ArrayList<>(); - goodsDataList.add(new GoodsData.Builder() - .setOriginalPrice(100000L) - .setRealPrice(100000L) - .setName("Принтер") - .setQuantity(1) - .setCode("000001") - .setUnits("00") - .setDiscount(0L) - .setTaxRate(TaxRate.Tax_18) - .setExponent(2) - .setAccountingSubject(AccountingSubject.PRODUCT) - .build()); - goodsDataList.add(new GoodsData.Builder() - .setOriginalPrice(30065L) - .setRealPrice(30065L) - .setName("Услуга") - .setQuantity(3) - .setCode("000002") - .setUnits("00") - .setDiscount(0L) - .setTaxRate(TaxRate.Tax_18) - .setExponent(2) - .setAccountingSubject(AccountingSubject.PRODUCT) - .build()); - - AdditionalTransactionData additionalTransactionData = new AdditionalTransactionData.Builder(goodsDataList).build(); - activity.getClientInterface().getTransactionManager().setAdditionalTransactionData(additionalTransactionData); - } - - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), - Toast.LENGTH_SHORT).show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionInit() { - Timber.d("onTransactionInit"); - activity.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - activity.getClientInterface() - .getTransactionManager() - .sendTransactionUserData("signature", "phone", "email"); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "notAuthorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - - } - - @Override - public void onErrorStatusTransaction() { - - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/CheckConnectionCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/CheckConnectionCallbackHandlerImpl.java deleted file mode 100644 index 1b76a15..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/CheckConnectionCallbackHandlerImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import ru.m4bank.mpos.library.external.configuration.CheckConnectionCallbackHandler; -import ru.m4bank.mpos.service.result.CheckConnectionExternalResult; - -public class CheckConnectionCallbackHandlerImpl implements CheckConnectionCallbackHandler { - private final M4BankActivity activity; - - public CheckConnectionCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onCompleted(CheckConnectionExternalResult result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()) + " " + result.isOnlineRegistration(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/CloseDayCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/CloseDayCallbackHandlerImpl.java deleted file mode 100644 index 67b5a7a..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/CloseDayCallbackHandlerImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -//import com.landicorp.uns.result; - -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.CloseDayCallbackHandler; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.handling.result.CloseDayResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.network.closeday.CloseDayResponseInfo; - - -class CloseDayCallbackHandlerImpl implements CloseDayCallbackHandler { - private final M4BankActivity activity; - - CloseDayCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionsListReceived(List transactionList, List list1) { - activity.runOnUiThread(() -> Toast.makeText(activity, "onTransactionsListReceived - " + transactionList, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(CloseDayResult closeDayResult) { - activity.runOnUiThread(() -> Toast.makeText(activity, closeDayResult.getResultType() + " " + (closeDayResult.getDescription() == null ? "" : closeDayResult.getDescription()), Toast.LENGTH_SHORT) - .show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/CustomApplication.java b/android/app/src/main/java/kz/com/aman/kassa/bank/CustomApplication.java deleted file mode 100644 index 7ba15f2..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/CustomApplication.java +++ /dev/null @@ -1,21 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.Application; - - -import timber.log.Timber; - -public class CustomApplication extends Application { - @Override - public void onCreate() { - super.onCreate(); - Thread.setDefaultUncaughtExceptionHandler((thread, ex) -> { - Timber.v(ex.getMessage()); - for (StackTraceElement element : ex.getStackTrace()) { - Timber.v(element.toString()); - } - ex.printStackTrace(); - System.exit(0); - }); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/CustomSSLSocketFactory.java b/android/app/src/main/java/kz/com/aman/kassa/bank/CustomSSLSocketFactory.java deleted file mode 100644 index df1654b..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/CustomSSLSocketFactory.java +++ /dev/null @@ -1,81 +0,0 @@ -package kz.com.aman.kassa.bank; - -import org.apache.http.conn.scheme.LayeredSocketFactory; -import org.apache.http.params.HttpConnectionParams; -import org.apache.http.params.HttpParams; - -import java.io.IOException; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.security.KeyStore; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocket; -import javax.net.ssl.TrustManager; - -public class CustomSSLSocketFactory implements LayeredSocketFactory { - private SSLContext sslcontext = null; - private KeyStore keyStore = null; - - public CustomSSLSocketFactory() { - } - - public CustomSSLSocketFactory(KeyStore keyStore) { - this.keyStore = keyStore; - } - - private SSLContext createEasySSLContext() throws IOException { - try { - SSLContext context = SSLContext.getInstance("TLS"); - context.init(null, new TrustManager[] { new CustomTrustManager(keyStore) }, null); - return context; - } catch (Exception e) { - throw new IOException(e.getMessage()); - } - } - - private SSLContext getSSLContext() throws IOException { - if (this.sslcontext == null) { - this.sslcontext = createEasySSLContext(); - } - return this.sslcontext; - } - - public Socket connectSocket(Socket sock, String host, int port, - InetAddress localAddress, int localPort, HttpParams params) - throws IOException { - int connTimeout = HttpConnectionParams.getConnectionTimeout(params); - int soTimeout = HttpConnectionParams.getSoTimeout(params); - - InetSocketAddress remoteAddress = new InetSocketAddress(host, port); - SSLSocket sslSocket = (SSLSocket) ((sock != null) ? sock : createSocket()); - - if ((localAddress != null) || (localPort > 0)) { - // we need to bind explicitly - if (localPort < 0) { - localPort = 0; // indicates "any" - } - InetSocketAddress isa = new InetSocketAddress(localAddress, - localPort); - sslSocket.bind(isa); - } - - sslSocket.connect(remoteAddress, connTimeout); - sslSocket.setSoTimeout(soTimeout); - return sslSocket; - } - - public Socket createSocket() throws IOException { - return getSSLContext().getSocketFactory().createSocket(); - } - - public boolean isSecure(Socket socket) throws IllegalArgumentException { - return true; - } - - public Socket createSocket(Socket socket, String host, int port, - boolean autoClose) throws IOException { - return getSSLContext().getSocketFactory().createSocket(socket, host, port, autoClose); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/CustomTrustManager.java b/android/app/src/main/java/kz/com/aman/kassa/bank/CustomTrustManager.java deleted file mode 100644 index e419d65..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/CustomTrustManager.java +++ /dev/null @@ -1,40 +0,0 @@ -package kz.com.aman.kassa.bank; - -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; - -import javax.net.ssl.TrustManager; -import javax.net.ssl.TrustManagerFactory; -import javax.net.ssl.X509TrustManager; - -public class CustomTrustManager implements X509TrustManager { - private X509TrustManager standardTrustManager; - - public CustomTrustManager(KeyStore keystore) throws NoSuchAlgorithmException, KeyStoreException { - super(); - TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - factory.init(keystore); - TrustManager[] trustManagers = factory.getTrustManagers(); - if (trustManagers.length == 0) { - throw new NoSuchAlgorithmException("no trust manager found"); - } - standardTrustManager = (X509TrustManager)trustManagers[0]; - } - - public void checkClientTrusted(X509Certificate[] certificates, String authType) throws CertificateException { - standardTrustManager.checkClientTrusted(certificates, authType); - } - - public void checkServerTrusted(X509Certificate[] certificates, String authType) throws CertificateException { - if ((certificates != null) && (certificates.length == 1)) { - certificates[0].checkValidity(); - } - } - - public X509Certificate[] getAcceptedIssuers() { - return this.standardTrustManager.getAcceptedIssuers(); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/DataCreatorUtils.java b/android/app/src/main/java/kz/com/aman/kassa/bank/DataCreatorUtils.java deleted file mode 100644 index 59b1f88..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/DataCreatorUtils.java +++ /dev/null @@ -1,144 +0,0 @@ -package kz.com.aman.kassa.bank; - -import java.util.Calendar; -import java.util.Date; - -import ru.m4bank.mpos.service.commons.Lists; -import ru.m4bank.mpos.service.data.dynamic.objects.CurrencyEnum; -import ru.m4bank.mpos.service.data.dynamic.objects.ExternalVerificationType; -import ru.m4bank.mpos.service.data.dynamic.objects.GoodsData; -import ru.m4bank.mpos.service.data.dynamic.objects.ProductsAndTransactionData; -import ru.m4bank.mpos.service.data.dynamic.objects.TransactionStatus; -import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.AccountingSubject; -import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.TaxRate; -import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.TaxSystem; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.CardTransTypeConv; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.TransactionTypeConv; -import ru.m4bank.mpos.service.hardware.printer.dto.data.FiscalPrinterMerchantData; -import ru.m4bank.mpos.service.hardware.printer.dto.data.PrinterInformationCheck; -import ru.m4bank.mpos.service.hardware.printer.dto.data.TransactionSlipData; -import ru.m4bank.mpos.service.transactions.data.AccountingSign; -import ru.m4bank.mpos.service.transactions.data.CorrectionType; -import ru.m4bank.mpos.service.transactions.data.external.CurrencyAmount; -import ru.m4bank.mpos.service.transactions.data.external.ExternalCorrectionData; -import ru.m4bank.mpos.service.transactions.data.external.ExternalFiscalData; -import ru.m4bank.mpos.service.transactions.data.external.ExternalSlipData; -import ru.m4bank.mpos.service.transactions.data.external.ExternalStubData; - -public class DataCreatorUtils { - public static ExternalCorrectionData makeCorrectionData() { - Calendar date = Calendar.getInstance(); - date.set(2019, 3, 1); - return new ExternalCorrectionData.Builder() - .currencyAmount(makeCurrencyAmount()) - .calculationSign(AccountingSign.INCOMING) - .correctionType(CorrectionType.INDEPENDENTLY) - .taxRate(TaxRate.Tax_20) - .cash(true) - .docNumber("ПС345454") - .docDate(date) - .docDescription(" ") - .stubData(makeStubData()) - .build(); - } - - public static ExternalFiscalData makeFiscalData() { - return new ExternalFiscalData.Builder() - .cash(false) - .currency("643") - .phone("12345678") - .informationCheckData(makeInformationCheckData()) - .productsAndTransactionData(makeProductsAndTransactionData()) - .externalStubData(makeStubData()) - .transactionTypeConv(TransactionTypeConv.PAYMENT) - .build(); - } - - public static ExternalSlipData makeSlipData(boolean newCheck) { - return new ExternalSlipData.Builder() - .currencyAmount(makeCurrencyAmount()) - .cash(false) - .merchantData(makeMerchantData()) - .newCheck(newCheck) - .transactionData(makeTransactionData()) - .transactionType(TransactionTypeConv.PAYMENT) - .cashierName("Петров В.В.") - .build(); - } - - public static CurrencyAmount makeCurrencyAmount() { - return new CurrencyAmount.Builder().amount(10000).currencyCode(CurrencyEnum.RUS.getStringCurrency()).build(); - } - - public static FiscalPrinterMerchantData makeMerchantData() { - return new FiscalPrinterMerchantData.Builder() - .merchantAddress("улица Твардовского, Москва Россия") - .merchantId("1732056") - .merchantInn("123456489123") - .merchantName("Center of corporate technologies") - .build(); - } - - public static TransactionSlipData makeTransactionData() { - return new TransactionSlipData.Builder() - .applicationId("A40000100023056") - .authCode("447041") - .cardHolderName("IVANOV/I") - .currencyCode("643") - .hostResultCode("00") - .interaction(CardTransTypeConv.MAGNETIC_STRIPE) - .originalPan("************8888") - .pan("************8176") - .rrn("123456789") - .terminalNumber("00687879") - .terminalVerificationResults("00000") - .transactionDate(new Date()) - .transactionStatus(TransactionStatus.APPROVED) - .typeCard("Mastercard") - .typeVerification(ExternalVerificationType.PIN) - .phone("88008008008562") - .build(); - } - - public static ExternalStubData makeStubData() { - return new ExternalStubData.Builder() - .shiftNumber("0001") - .factoryNumberKKT("0000000000") - .registerNumberKKT("00000000000000000") - .fiscalDocNumber("2780") - .fiscalMemoryNumber("9999078900003063") - .fiscalSign("32323933373534383633") - .formOfTaxation("УСН") - .merchantData(makeMerchantData()) - .phone("12-12-12") - .productsAndTransactionData(makeProductsAndTransactionData()) - .build(); - } - - private static ProductsAndTransactionData makeProductsAndTransactionData() { - return new ProductsAndTransactionData( - Lists.newArrayList(new GoodsData.Builder() - .setOriginalPrice(1500L) - .setRealPrice(1400L) - .setName("Товар") - .setQuantity(1) - .setCode("1") - .setUnits("00") - .setExponent(2) - .setDiscount(100L) - .setTaxRate(TaxRate.Tax_10) - .setAccountingSubject(AccountingSubject.OTHER) - .build()), - 1400L, 100L, 1, CurrencyEnum.RUS, TaxSystem.Common); - } - - public static PrinterInformationCheck makeInformationCheckData() { - return new PrinterInformationCheck.Builder() - .setCheckNumber("00") - .setDocNumber("1") - .setPd("00") - .setDateAndTime(new Date()) - .setInn("7777777777") - .build(); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/DeviceTypeDefiner.java b/android/app/src/main/java/kz/com/aman/kassa/bank/DeviceTypeDefiner.java deleted file mode 100644 index c21c059..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/DeviceTypeDefiner.java +++ /dev/null @@ -1,29 +0,0 @@ -package kz.com.aman.kassa.bank; - -import kz.com.aman.kassa.BuildConfig; -import ru.m4bank.mpos.service.commons.utils.VirtualDeviceUtils; -import ru.m4bank.mpos.service.data.dynamic.objects.DeviceType; - -public class DeviceTypeDefiner { - public DeviceType define() { - if (VirtualDeviceUtils.isDevice()) { - return DeviceType.SMART_POS; - } - - String[] supportedDevices = BuildConfig.SUPPORTED_DEVICES; - if (containsIgnoreCase(supportedDevices, "SoftPos")) { - return DeviceType.SOFT_POS; - } - - return DeviceType.PHONE; - } - - private boolean containsIgnoreCase(String[] array, String checkValue) { - for (String arrayValue : array) { - if (arrayValue.equalsIgnoreCase(checkValue)) { - return true; - } - } - return false; - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyAlipayRefundCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/EasyAlipayRefundCallbackHandlerImpl.java deleted file mode 100644 index 322ade3..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyAlipayRefundCallbackHandlerImpl.java +++ /dev/null @@ -1,152 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.EasyAlipayRefundCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.transaction.RefundType; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; - -public class EasyAlipayRefundCallbackHandlerImpl implements EasyAlipayRefundCallbackHandler, GetTransactionsListCallbackHandler { - - private final M4BankActivity activity; - private Transaction transaction; - - public EasyAlipayRefundCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionInit() { - - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - activity.getClientInterface().getTransactionManager().sendTransactionUserData("signature", "phone", "email"); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onRefundDataRequested() { - activity.getClientInterface().getTransactionManager().setRefundData(transaction, transaction.getAmount(), RefundType.General); - } - - @Override - public void onTransactionsListReceived(List transactionList) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose transaction"); - - Spinner transactionListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - transaction = (Transaction) transactionListSpinner.getSelectedItem(); - activity.getClientInterface().getTransactionManager().makeAlipayRefund(this); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerErrorDataPrinterBaseDataPrinterResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyCardReversalCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/EasyCardReversalCallbackHandlerImpl.java deleted file mode 100644 index dbd8e1d..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyCardReversalCallbackHandlerImpl.java +++ /dev/null @@ -1,363 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.EasyReversalCardCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.service.commons.data.ResultType; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.data.dynamic.objects.Reader; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.MessageButtonData; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto; -import timber.log.Timber; - -public class EasyCardReversalCallbackHandlerImpl implements EasyReversalCardCallbackHandler, GetTransactionsListCallbackHandler { - - private final M4BankActivity activity; - private Transaction transaction; - - public EasyCardReversalCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - Timber.d("Reader has been received"); - } - - @Override - public void onNoBoundedDevicesFound() { - Timber.d("No bounded readers"); - } - - @Override - public void onConnectingProcessStarted(String deviceName) { - - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) { - if (reconnectAvailable) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().tryToReconnectAndRepeatLast()); - builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel()); - builder.create().show(); - }); - } - } - - @Override - public void onDeviceToConnectSelectionRequested(List deviceList) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getTransactionManager() - .selectCardReader(deviceListSpinner.getSelectedItem().toString()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - @Override - public void onWorkFlowDataRequested() { - - } - - @Override - public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) { - if (shouldConfirmBeManuallyCalled) { - activity.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - } - - @Override - public void onRequiredReversal(String description, ResultCode resultCode) { - activity.runOnUiThread(() -> Toast.makeText(activity, "onRequiredReversal", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onRequiredApplicationSelection(List list) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - activity.runOnUiThread(() -> Toast.makeText(activity, "onTransactionDetailsReceived", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - activity.runOnUiThread(() -> Toast.makeText(activity, "onSuccessStatusTransaction", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onErrorStatusTransaction() { - activity.runOnUiThread(() -> Toast.makeText(activity, "onErrorStatusTransaction", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerErrorDataPrinterBaseDataPrinterResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onReconciliationRequiredToProcess() { - Timber.d("Reconciliation required!!!"); - activity.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction(); - } - - @Override - public void onReconciliationCompleted(Result result) { - Timber.d("Reconciliation completed!!!"); - if (result.getResultType() == ResultType.SUCCESSFUL) { - activity.getClientInterface().getTransactionManager().continueTransactionAfterReconciliation(); - } else { - activity.runOnUiThread(() -> Toast.makeText(activity, "Reconciliation failed " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_LONG) - .show()); - } - } - - @Override - public void onRepeat(int attemptNumber) { - - } - - @Override - public void onTransactionAmountRequested() { - - } - - @Override - public void onTransactionDataRequested() { - - } - - @Override - public void onDeviceToUseSelectionRequested(List deviceList) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(deviceList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getTransactionManager() - .setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - }); - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - - } - - @Override - public void onTransactionInit() { - - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - if (errorHandler.getCode() != null && errorHandler.getDescription() != null) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Error Code: " + errorHandler.getCode() + " error Description: " - + errorHandler.getDescription(), Toast.LENGTH_LONG) - .show()); - } else { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getServerCode() + " " - + errorHandler.getServerDescription(), Toast.LENGTH_LONG) - .show()); - } - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "onTransactionDataReceivedError", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onReconnectNeededToProcess() { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().getTransactionManager().tryToReconnectToCardReader()); - builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel()); - builder.create().show(); - }); - } - - @Override - public void onWrongTerminal() { - - } - - @Override - public void onSelectTransaction() { - activity.getClientInterface().getTransactionManager().selectTransaction(transaction); - } - - @Override - public void onTransactionsListReceived(List transactionList) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose transaction"); - - Spinner transactionListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - transaction = (Transaction) transactionListSpinner.getSelectedItem(); - activity.getClientInterface().getTransactionManager().makeCardReversal(this); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onTransactionSelectionRequested(List transactionList) { - - } - - @Override - public void onActivityUpdateUiThread() { - - } - - @Override - public void onCreatePinPadButtons() { - - } - - @Override - public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) { - - } - - @Override - public void onUpdateElementPin(int i) { - - } - - @Override - public void onCloseKeyboard() { - - } - - @Override - public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) { - activity.showSelectStyleDialog(additionalData -> - activity.getClientInterface().getTransactionManager().addVirtualPinKeyboardData(additionalData)); - } -} \ No newline at end of file diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyCashRefundCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/EasyCashRefundCallbackHandlerImpl.java deleted file mode 100644 index e06a9d2..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyCashRefundCallbackHandlerImpl.java +++ /dev/null @@ -1,152 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.EasyCashRefundCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.transaction.RefundType; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; - -public class EasyCashRefundCallbackHandlerImpl implements EasyCashRefundCallbackHandler, GetTransactionsListCallbackHandler { - - private final M4BankActivity activity; - private Transaction transaction; - - public EasyCashRefundCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionInit() { - activity.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - activity.getClientInterface().getTransactionManager().sendTransactionUserData("signature", "phone", "email"); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onRefundDataRequested() { - activity.getClientInterface().getTransactionManager().setRefundData(transaction, transaction.getAmount(), RefundType.General); - } - - @Override - public void onTransactionsListReceived(List transactionList) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose transaction"); - - Spinner transactionListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - transaction = (Transaction) transactionListSpinner.getSelectedItem(); - activity.getClientInterface().getTransactionManager().makeCashRefund(this); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerErrorDataPrinterBaseDataPrinterResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyEcomRefundCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/EasyEcomRefundCallbackHandlerImpl.java deleted file mode 100644 index aa6513e..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyEcomRefundCallbackHandlerImpl.java +++ /dev/null @@ -1,157 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.EasyEcomRefundCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.transaction.RefundType; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; - -public class EasyEcomRefundCallbackHandlerImpl implements EasyEcomRefundCallbackHandler, GetTransactionsListCallbackHandler { - - private final M4BankActivity activity; - private Transaction transaction; - - public EasyEcomRefundCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionInit() { - - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - activity.getClientInterface().getTransactionManager().sendTransactionUserData("signature", "phone", "email"); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onRefundDataRequested() { - activity.getClientInterface().getTransactionManager().setRefundData(transaction, transaction.getAmount(), RefundType.General); - } - - @Override - public void onTransactionsListReceived(List transactionList) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose transaction"); - - Spinner transactionListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - transaction = (Transaction) transactionListSpinner.getSelectedItem(); - activity.getClientInterface().getTransactionManager().makeEcomRefund(this); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerErrorDataPrinterBaseDataPrinterResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - - } - - @Override - public void onPreviewTransactionDataReceived(TransactionData transactionData) { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyReversalCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/EasyReversalCallbackHandlerImpl.java deleted file mode 100644 index 5adceff..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyReversalCallbackHandlerImpl.java +++ /dev/null @@ -1,176 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.ReversalCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; - -public class EasyReversalCallbackHandlerImpl implements ReversalCallbackHandler, GetTransactionsListCallbackHandler { - - private final M4BankActivity activity; - private Transaction transaction; - - public EasyReversalCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onTransactionSelectionRequested(List transactionList) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose transaction"); - - Spinner transactionListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface().getTransactionManager().selectTransaction((Transaction) transactionListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onCardShortPanRequested() { - activity.getClientInterface().getTransactionManager().setCardShortPan("0069", 20, 0); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionInit() { - activity.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - //activity.getClientInterface().getTransactionManager().sendTransactionUserData(null, "phone", "email"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction reversal complete", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onSelectTransaction() { - activity.getClientInterface().getTransactionManager().selectTransaction(transaction); - } - - @Override - public void onTransactionsListReceived(List transactionList) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose transaction"); - - Spinner transactionListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - transaction = (Transaction) transactionListSpinner.getSelectedItem(); - activity.getClientInterface().getTransactionManager().makeEasyReversal(this); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerErrorDataPrinterBaseDataPrinterResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onPrinterToUseSelectionRequested(List list) { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyReversalSavedOperationCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/EasyReversalSavedOperationCallbackHandlerImpl.java deleted file mode 100644 index 406738b..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/EasyReversalSavedOperationCallbackHandlerImpl.java +++ /dev/null @@ -1,136 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.EasyReversalSavedOperationCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; - -public class EasyReversalSavedOperationCallbackHandlerImpl implements EasyReversalSavedOperationCallbackHandler { - private M4BankActivity activity; - - public EasyReversalSavedOperationCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onTransactionIsNotReversible() { - showMessage("onTransactionIsNotReversible"); - } - - @Override - public void onSelectTransaction() { - showMessage("onSelectTransaction"); - } - - @Override - public void onCompletedPrinting(PrinterResult result) { - showMessage("onCompletedPrinting"); - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusDatat) { - showMessage("onStatusFiscalModule"); - } - - @Override - public void onTransactionSelectionRequested(List list) { - showMessage("onTransactionSelectionRequested"); - } - - @Override - public void onCardShortPanRequested() { - showMessage("onCardShortPanRequested"); - } - - @Override - public void notAuthorized() { - showMessage("notAuthorized"); - } - - @Override - public void onCompleted(Result result) { - showMessage("onCompleted"); - } - - @Override - public void onWrongApiCalled() { - showMessage("onWrongApiCalled"); - } - - @Override - public void onRequestedReportZ() { - showMessage("onRequestedReportZ"); - } - - @Override - public void onTransactionInit() { - showMessage("onTransactionInit"); - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - showMessage("onTransactionExecutionStatusChanged: "); - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - showMessage("onUserInformationRequested"); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData errorData) { - showMessage("onError"); - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - showMessage("onErrorWithPossibilityToRetry"); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - showMessage("onTransactionDataReceivedError"); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - showMessage("onTransactionDataReceived"); - } - - @Override - public void onTransactionCompleted() { - showMessage("onTransactionCompleted"); - } - - @Override - public void onRepeat(int attemptNumber) { - showMessage("onRepeat"); - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - showMessage("onPrinterForRegistrationGettingCompleted"); - } - - @Override - public void onNoBoundedPrinterFound() { - showMessage("onNoBoundedPrinterFound"); - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - showMessage("onPrinterToUseSelectionRequested"); - } - - private void showMessage(String message) { - activity.runOnUiThread(() -> Toast.makeText(activity, message, Toast.LENGTH_LONG).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/EcomPaymentCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/EcomPaymentCallbackHandlerImpl.java deleted file mode 100644 index b5a853c..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/EcomPaymentCallbackHandlerImpl.java +++ /dev/null @@ -1,173 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.EcomPaymentCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.dynamic.objects.AdditionalTransactionData; -import ru.m4bank.mpos.service.data.dynamic.objects.EmailStatus; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import timber.log.Timber; - -public class EcomPaymentCallbackHandlerImpl implements EcomPaymentCallbackHandler { - - private final M4BankActivity activity; - - public EcomPaymentCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onWorkFlowDataRequested() { - Timber.d("WorkFlow requested"); - } - - @Override - public void onTransactionAmountRequested() { - activity.getClientInterface().getTransactionManager().setTransactionAmount(activity.getAmount()); - } - - @Override - public void onTransactionDataRequested() { - activity.getClientInterface().getTransactionManager().setAdditionalTransactionData(new AdditionalTransactionData.Builder(null).build()); - } - - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionInit() { - activity.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - activity.getClientInterface() - .getTransactionManager() - .sendTransactionUserData("signature", "phone", "email"); - } - - @Override - public void onFormUrlRequested(String formUrl) { - - activity.getClientInterface() - .getTransactionManager() - .sendEcomEmail("qrCode", null, "ap@m4bank.com", EmailStatus.SEND); - - activity.runOnUiThread(() -> Toast.makeText(activity, "onFormUrlRequested " + formUrl, Toast.LENGTH_LONG) - .show()); - - } - - @Override - public void onPreviewTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Preview Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - - } - - @Override - public void onErrorStatusTransaction() { - - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/GetCardReaderInformationCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/GetCardReaderInformationCallbackHandlerImpl.java deleted file mode 100644 index 60aff3f..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/GetCardReaderInformationCallbackHandlerImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.GetCardReaderInformationCallbackHandler; -import ru.m4bank.mpos.service.data.dynamic.objects.Reader; -import ru.m4bank.mpos.service.result.GetCardReaderInformationResult; -import timber.log.Timber; - -public class GetCardReaderInformationCallbackHandlerImpl implements GetCardReaderInformationCallbackHandler { - private final M4BankActivity activity; - - public GetCardReaderInformationCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - - } - - @Override - public void onNoBoundedDevicesFound() { - - } - - @Override - public void onConnectingProcessStarted(String deviceName) { - - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) { - - } - - @Override - public void onDeviceToUseSelectionRequested(List deviceList) { - - } - - @Override - public void notAuthorized() { - - } - - @Override - public void onDeviceToConnectSelectionRequested(List deviceList) { - - } - - @Override - public void onCompleted(GetCardReaderInformationResult result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.toString(), Toast.LENGTH_LONG).show()); - Timber.d("GetCardReaderInformationResult : " + result); - } - - @Override - public void onWrongApiCalled() { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/GetLicenseCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/GetLicenseCallbackHandlerImpl.java deleted file mode 100644 index a828867..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/GetLicenseCallbackHandlerImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import ru.m4bank.mpos.library.external.configuration.GetLicenseCallbackHandler; -import ru.m4bank.mpos.service.result.Result; - -public class GetLicenseCallbackHandlerImpl implements GetLicenseCallbackHandler { - private final M4BankActivity activity; - - public GetLicenseCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onLicenseReceived(String license) { - activity.runOnUiThread(() -> Toast.makeText(activity, license, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/GetMerchantUsersCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/GetMerchantUsersCallbackHandlerImpl.java deleted file mode 100644 index 8945a3f..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/GetMerchantUsersCallbackHandlerImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import java.util.List; - -import ru.m4bank.mpos.library.external.authorization.GetMerchantUsersCallbackHandler; -import ru.m4bank.mpos.service.data.dynamic.objects.MerchantUser; -import ru.m4bank.mpos.service.result.Result; - -public class GetMerchantUsersCallbackHandlerImpl implements GetMerchantUsersCallbackHandler { - private final M4BankActivity activity; - - public GetMerchantUsersCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onListOfUsersRequested(List userList) { - activity.runOnUiThread(() -> Toast.makeText(activity, "loaded list of merchant users", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/GetTransactionDetailsCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/GetTransactionDetailsCallbackHandlerImpl.java deleted file mode 100644 index 6360623..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/GetTransactionDetailsCallbackHandlerImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.GetTransactionDetailsCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.result.Result; - -class GetTransactionDetailsCallbackHandlerImpl implements GetTransactionDetailsCallbackHandler, GetTransactionsListCallbackHandler { - private final M4BankActivity activity; - - GetTransactionDetailsCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received: " + transaction, Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - - } - - @Override - public void onErrorStatusTransaction() { - - } - - @Override - public void onTransactionsListReceived(List transactionList) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose transaction"); - - Spinner transactionListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - Transaction transaction = (Transaction) transactionListSpinner.getSelectedItem(); - activity.getClientInterface() - .getTransactionManager() - .getTransactionDetails(this, transaction.getOperationalDayNumber(), transaction - .getTransactionNumber(), transaction.getMobileTerminalId()); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - builder.create().show(); - }); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/GetTransactionListForRefundCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/GetTransactionListForRefundCallbackHandlerImpl.java deleted file mode 100644 index 2547e82..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/GetTransactionListForRefundCallbackHandlerImpl.java +++ /dev/null @@ -1,62 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.GetTransactionDetailsCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.result.Result; - -class GetTransactionListForRefundCallbackHandlerImpl implements GetTransactionDetailsCallbackHandler, GetTransactionsListCallbackHandler { - private final M4BankActivity activity; - private final CardRefundCallbackHandlerImpl cardRefundCallbackHandler; - - GetTransactionListForRefundCallbackHandlerImpl(M4BankActivity activity, CardRefundCallbackHandlerImpl cardRefundCallbackHandler) { - this.cardRefundCallbackHandler = cardRefundCallbackHandler; - this.activity = activity; - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received: " + transaction, Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - - } - - @Override - public void onErrorStatusTransaction() { - - } - - @Override - public void onTransactionsListReceived(List transactionList) { - cardRefundCallbackHandler.onTransactionsListReceived(transactionList); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/LoadTerminalKeysCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/LoadTerminalKeysCallbackHandlerImpl.java deleted file mode 100644 index 01098c6..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/LoadTerminalKeysCallbackHandlerImpl.java +++ /dev/null @@ -1,133 +0,0 @@ -package kz.com.aman.kassa.bank; - - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.LoadTerminalKeysCallbackHandler; -import ru.m4bank.mpos.service.data.dynamic.objects.Reader; -import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode; -import ru.m4bank.mpos.service.hardware.network.external.TerminalKeyType; -import ru.m4bank.mpos.service.result.Result; -import timber.log.Timber; - -class LoadTerminalKeysCallbackHandlerImpl implements LoadTerminalKeysCallbackHandler { - - private final M4BankActivity activity; - - public LoadTerminalKeysCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void notAuthorized() { - Timber.d("Not authorized"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onKeyLoad(TerminalKeyType terminalKeyType, String description, ResultCode resultCode) { - Timber.d("key loaded".concat(terminalKeyType.name())); - } - - @Override - public void onKeyReceived(TerminalKeyType terminalKeyType, String description, ResultCode resultCode) { - Timber.d("key loaded".concat(terminalKeyType.name())); - } - - @Override - public void onError(String description, ResultCode resultCode) { - Timber.d("key loaded" + " onError"); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - Timber.d("Reader has been received"); - } - - @Override - public void onDeviceToConnectSelectionRequested(List deviceList) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getCardReaderManager() - .selectCardReader(deviceListSpinner.getSelectedItem().toString()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - @Override - public void onDeviceToUseSelectionRequested(List deviceList) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(deviceList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getCardReaderManager() - .setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - @Override - public void onNoBoundedDevicesFound() { - Timber.d("No bounded readers"); - } - - @Override - public void onConnectingProcessStarted(String deviceName) { - Timber.d("onConnectingProcessStarted"); - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) { - if (reconnectAvailable) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().tryToReconnectAndRepeatLast()); - builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel()); - builder.create().show(); - }); - } - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/LogOutCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/LogOutCallbackHandlerImpl.java deleted file mode 100644 index 17ea1cc..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/LogOutCallbackHandlerImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import ru.m4bank.mpos.library.external.authorization.LogOutCallbackHandler; -import ru.m4bank.mpos.service.result.Result; - -public class LogOutCallbackHandlerImpl implements LogOutCallbackHandler { - private final M4BankActivity activity; - - public LogOutCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/M4BankActivity.java b/android/app/src/main/java/kz/com/aman/kassa/bank/M4BankActivity.java deleted file mode 100644 index 2eedec7..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/M4BankActivity.java +++ /dev/null @@ -1,833 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.graphics.BitmapFactory; -import android.net.wifi.WifiManager; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.text.format.Formatter; -import android.view.View; -import android.widget.EditText; -import android.widget.Spinner; -import android.widget.Toast; - -import androidx.annotation.NonNull; - -import org.slf4j.LoggerFactory; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.android.LogcatAppender; -import ch.qos.logback.classic.encoder.PatternLayoutEncoder; -import io.flutter.app.FlutterActivity; -import kz.com.aman.kassa.R; -import kz.com.aman.kassa.bank.builders.SslConfigurationBuilder; -import kz.com.aman.kassa.bank.gui.SelectDialogCallback; -import kz.com.aman.kassa.bank.gui.SelectElementDialog; -import kz.com.aman.kassa.bank.managing.PreferencesManager; -import kz.com.aman.kassa.bank.permissions.PermissionsManager; -import kz.com.aman.kassa.bank.permissions.PermissionsManagerImpl; -import ru.m4bank.mpos.library.M4BankMposClient; -import ru.m4bank.mpos.library.M4BankMposClientInterfaceFacade; -import ru.m4bank.mpos.library.M4BankMposParameters; -import ru.m4bank.mpos.library.external.authorization.ActivationCallbackHandler; -import ru.m4bank.mpos.library.external.authorization.AuthorizationCallbackHandler; -import ru.m4bank.mpos.library.external.authorization.GetMerchantUsersCallbackHandler; -import ru.m4bank.mpos.library.external.authorization.LogOutCallbackHandler; -import ru.m4bank.mpos.library.external.configuration.CheckConnectionCallbackHandler; -import ru.m4bank.mpos.library.external.configuration.GetLicenseCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.CardReadingCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.CashPaymentCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.EasyCardRefundCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.EasyCashRefundCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.EasyReversalSavedOperationCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetCardReaderInformationCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionDetailsCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.LastReversalCardPaymentCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.ResendReceiptCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.ReversalCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.ScanBarCodeCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.XReportCallbackHandler; -import ru.m4bank.mpos.service.commons.data.ConfigurationSettings; -import ru.m4bank.mpos.service.commons.data.NetworkConfiguration; -import ru.m4bank.mpos.service.commons.data.TerminalConfiguration; -import ru.m4bank.mpos.service.configuration.data.RegisterRequestData; -import ru.m4bank.mpos.service.data.dictionary.DictionaryCore; -import ru.m4bank.mpos.service.data.dictionary.LanguageCore; -import ru.m4bank.mpos.service.data.dictionary.MessageCore; -import ru.m4bank.mpos.service.data.dynamic.objects.GetOperationType; -import ru.m4bank.mpos.service.data.dynamic.objects.OperationType; -import ru.m4bank.mpos.service.data.dynamic.objects.PIDataType; -import ru.m4bank.mpos.service.data.dynamic.objects.ScanBarCodeScreenDataInput; -import ru.m4bank.mpos.service.data.dynamic.objects.TransactionFilterData; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.TransactionTypeConv; -import ru.m4bank.mpos.service.hardware.network.external.TerminalKeyType; -import ru.m4bank.mpos.service.hardware.printer.dto.data.PrinterSeries; -import ru.m4bank.mpos.service.hardware.printer.dto.data.PrintingType; -import ru.m4bank.mpos.service.hardware.printer.dto.data.enums.SlipType; -import ru.m4bank.mpos.service.hardware.printer.dto.template.Align; -import ru.m4bank.mpos.service.hardware.printer.dto.template.BarcodeCheckObject; -import ru.m4bank.mpos.service.hardware.printer.dto.template.ImageCheckObject; -import ru.m4bank.mpos.service.hardware.printer.dto.template.PrintingTemplate; -import ru.m4bank.mpos.service.hardware.printer.dto.template.QRCodeCheckObject; -import ru.m4bank.mpos.service.hardware.printer.dto.template.StringCheckObject; -import ru.m4bank.mpos.service.hardware.printer.dto.template.StringSpan; -import ru.m4bank.mpos.service.hardware.printer.dto.template.TextStyle; -import ru.m4bank.mpos.service.network.Format; -import ru.m4bank.mpos.service.network.ServerChoose; -import ru.m4bank.mpos.service.transactions.data.VirtualPinKeyboardData; -import ru.m4bank.mpos.service.transactions.data.external.ExternalTemplateData; -import timber.log.Timber; - - -public class M4BankActivity extends FlutterActivity { - private M4BankMposClientInterfaceFacade clientInterface; - - private AuthorizationCallbackHandler authorizationCallbackHandler; - private LogOutCallbackHandler logOutCallbackHandler; - private CheckConnectionCallbackHandler checkConnectionCallbackHandler; - private CardPaymentCallbackHandlerImpl cardPaymentCallbackHandler; - private CardReadingCallbackHandler cardReadingCallbackHandler; - private CashPaymentCallbackHandler cashPaymentCallbackHandler; - private AlipayPaymentCallbackHandlerImpl alipayPaymentCallbackHandler; - private EcomPaymentCallbackHandlerImpl ecomPaymentCallbackHandler; - private EasyCardRefundCallbackHandler cardRefundCallbackHandler; - private EasyCashRefundCallbackHandler easyCashRefundCallbackHandler; - private EasyAlipayRefundCallbackHandlerImpl easyAlipayRefundCallbackHandler; - private EasyEcomRefundCallbackHandlerImpl easyEcomRefundCallbackHandler; - private ReversalCallbackHandler easyReversalCallbackHandler; - private GetMerchantUsersCallbackHandler getMerchantUsersCallbackHandler; - private ActivationCallbackHandler activationCallbackHandler; - private GetLicenseCallbackHandler getLicenseCallbackHandler; - private ResendReceiptCallbackHandler resendReceiptCallbackHandler; - private GetTransactionDetailsCallbackHandler getTransactionDetailsCallbackHandler; - private PrintingCallbackHandlerImpl printingCallbackHandler; - private XReportCallbackHandler xReportCallbackHandler; - private LastReversalCardPaymentCallbackHandler revertCurrentOperationCallbackHandler; - private GetCardReaderInformationCallbackHandler getCardReaderInformationCallbackHandler; - private EasyReversalSavedOperationCallbackHandler easyReversalSavedOperationCallbackHandler; - - private GetTransactionListForRefundCallbackHandlerImpl getTransactionListForRefundCallbackHandler; - private SendRegisterRequestCallbackHandlerImpl sendRegisterRequestCallbackHandler; - private EasyCardReversalCallbackHandlerImpl easyCardReversalCallbackHandler; - private CloseDayCallbackHandlerImpl closeDayCallbackHandler; - private LoadTerminalKeysCallbackHandlerImpl loadTerminalKeysCallbackHandler; - private ScanBarCodeCallbackHandler scanBarCodeCallbackHandler; - - public M4BankMposClientInterfaceFacade getClientInterface() { - return clientInterface; - } - - private LogcatAppender appender; - - private String login; - private String password; - - private PermissionsManager permissionsManager; - - public String getLogin() { - return login; - } - - public String getPassword() { - return password; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - Timber.plant(new Timber.DebugTree()); - setContentView(R.layout.activity_main); - new Handler(); - PermissionsManager.PermissionsCheckResultHandler permissionsCheckResultHandler = - new PermissionsManager.PermissionsCheckResultHandler() { - @Override - public void onPermissionsGranted() { - init(); - } - - @Override - public void onPermissionsDeclined() { - Toast.makeText(M4BankActivity.this, - "Application can work incorrectly caused by missing permissions", Toast.LENGTH_SHORT) - .show(); - init(); - } - }; - permissionsManager = new PermissionsManagerImpl(this); - permissionsManager.checkPermissions(permissionsCheckResultHandler); - - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], - @NonNull int[] grantResults) { - permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults); - } - - private void init() { - LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); - PatternLayoutEncoder encoder = new PatternLayoutEncoder(); - encoder.setContext(lc); - encoder.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"); - encoder.start(); - appender = new LogcatAppender(); - appender.setContext(lc); - appender.setEncoder(encoder); - appender.start(); - - - //слушатель активации - activationCallbackHandler = new ActivationCallbackHandlerImpl(this); - //слушатель авторизации - authorizationCallbackHandler = new AuthorizationCallbackHandlerImpl(this); - //слушатель завершения сессии - logOutCallbackHandler = new LogOutCallbackHandlerImpl(this); - //слушатель проверки коннекта с сервером и получения конфигурационных данных - checkConnectionCallbackHandler = new CheckConnectionCallbackHandlerImpl(this); - //слушатель получения данных карты - cardReadingCallbackHandler = new CardReadingCallbackHandlerImpl(this); - - //слушатели для оплат - cardPaymentCallbackHandler = new CardPaymentCallbackHandlerImpl(this); - cashPaymentCallbackHandler = new CashPaymentCallbackHandlerImpl(this); - alipayPaymentCallbackHandler = new AlipayPaymentCallbackHandlerImpl(this); - ecomPaymentCallbackHandler = new EcomPaymentCallbackHandlerImpl(this); - - //слушатели для возвратов - cardRefundCallbackHandler = new CardRefundCallbackHandlerImpl(this); - getTransactionListForRefundCallbackHandler = new GetTransactionListForRefundCallbackHandlerImpl(this, - (CardRefundCallbackHandlerImpl) cardRefundCallbackHandler); - easyCashRefundCallbackHandler = new EasyCashRefundCallbackHandlerImpl(this); - easyAlipayRefundCallbackHandler = new EasyAlipayRefundCallbackHandlerImpl(this); - - //слушатели для отмен - //слушатель для отмены карточной операции без участия ридера - easyReversalCallbackHandler = new EasyReversalCallbackHandlerImpl(this); - //слушатель для отмены карточной операции с участием ридера - easyCardReversalCallbackHandler = new EasyCardReversalCallbackHandlerImpl(this); - //слушатель для отмены текущей операции, когда данные по транзакции сохранены в кеше и не производилась очистка или новая операция - revertCurrentOperationCallbackHandler = new RevertCurrentOperationCallbackHandlerImpl(this); - - //слушатель для записи на терминал ключей - loadTerminalKeysCallbackHandler = new LoadTerminalKeysCallbackHandlerImpl(this); - - //слушатель для получения списка мерчантов - getMerchantUsersCallbackHandler = new GetMerchantUsersCallbackHandlerImpl(this); - //слушатель получения лицензии - getLicenseCallbackHandler = new GetLicenseCallbackHandlerImpl(this); - //слушатель повторной отправки чека - resendReceiptCallbackHandler = new ResendReceiptCallbackHandlerImpl(this); - //слушатель получения информации о транзакциях и детальной информации по конкретной операции - getTransactionDetailsCallbackHandler = new GetTransactionDetailsCallbackHandlerImpl(this); - //заявка на mpos - sendRegisterRequestCallbackHandler = new SendRegisterRequestCallbackHandlerImpl(this); - //слушатель закрытия опер дня и сверки с сервером - closeDayCallbackHandler = new CloseDayCallbackHandlerImpl(this); - //слушатели печати - printingCallbackHandler = new PrintingCallbackHandlerImpl(this); - //слушатель для получения серийного номера - getCardReaderInformationCallbackHandler = new GetCardReaderInformationCallbackHandlerImpl(this); - //слушатель для считывания barcode - scanBarCodeCallbackHandler = new ScanBarCodeCallbackHandlerImpl(this); - // слушатель для отмены неуспешной операции, которая сохранена в холдере - easyReversalSavedOperationCallbackHandler = new EasyReversalSavedOperationCallbackHandlerImpl(this); - - initLoginForm(); - - initButton(R.id.readerInformation, v -> getReaderInformation()); - - initButton(R.id.activate, v -> clientInterface.getAuthorizationManager().activate(activationCallbackHandler)); - - initButton(R.id.logout, - v -> clientInterface.getAuthorizationManager().logOut(logOutCallbackHandler)); - - initButton(R.id.checkConnection, v -> clientInterface.getConfigurationManager() - .checkConnection( - checkConnectionCallbackHandler)); - - initButton(R.id.checkAccess, v -> { - String result; - if (clientInterface.getConfigurationManager() - .isOperationAllowed( - OperationType.getByCode(((Spinner) findViewById(R.id.checkAccessSpinner)) - .getSelectedItem() - .toString()))) { - result = "YES"; - } else { - result = "NO"; - } - Toast.makeText(this, result, Toast.LENGTH_SHORT).show(); - }); - - initButton(R.id.getAccesses, v -> { - StringBuilder result = new StringBuilder(); - List availableOperations = clientInterface.getConfigurationManager() - .getAllowedOperationsList(); - if (!availableOperations.isEmpty()) { - for (OperationType o : availableOperations) { - result.append(o.getCode()).append("\n"); - } - } else { - result.append("No available operations"); - } - Toast.makeText(this, result.toString(), Toast.LENGTH_SHORT).show(); - }); - - initButton(R.id.getAccessPaymentInstruments, v -> { - boolean ecom = clientInterface.getConfigurationManager().isPaymentInstrumentsAllowed(PIDataType.ECOM); - boolean alipay = - clientInterface.getConfigurationManager().isPaymentInstrumentsAllowed(PIDataType.ALIPAY_STANDARD); - boolean card = - clientInterface.getConfigurationManager().isPaymentInstrumentsAllowed(PIDataType.CARD_STANDART); - boolean cash = clientInterface.getConfigurationManager().isPaymentInstrumentsAllowed(PIDataType.CASH); - }); - - initButton(R.id.cancel, v -> clientInterface.cancel()); - - initButton(R.id.getLicense, v -> { - clientInterface.cancel(); - clientInterface.getConfigurationManager().getLicense(getLicenseCallbackHandler); - }); - - findViewById(R.id.getCommonCardData).setOnClickListener(v -> { - clientInterface.cancel(); - clientInterface.getTransactionManager().getCommonCardData(cardReadingCallbackHandler); - }); - - //////////// вызовы оплат ////////////// - initButton(R.id.makeCardPayment, v -> { - clientInterface.cancel(); - cardPaymentCallbackHandler.setTransactionTypeConv(TransactionTypeConv.PAYMENT); - clientInterface.getTransactionManager().makeCardPayment(cardPaymentCallbackHandler); - }); - - initButton(R.id.makeCashPayment, v -> { - clientInterface.cancel(); - clientInterface.getTransactionManager().makeCashPayment(cashPaymentCallbackHandler); - }); - - initButton(R.id.ecomPayment, v -> { - clientInterface.cancel(); - clientInterface.getTransactionManager().makeEcomPayment(ecomPaymentCallbackHandler); - }); - - initButton(R.id.makeAlipayPayment, - v -> clientInterface.getTransactionManager().makeAlipayPayment(alipayPaymentCallbackHandler)); - - //////////// вызов подтверждения платежа и дисконнекта устройств////////////// - initButton(R.id.completePayment, - v -> clientInterface.getTransactionManager().completeTransaction()); - - //////////// вызовы отмен - хостовые терминалы////////////// - //////////// вызов отмены текущей транзакции с использованием слушателя оплаты (только во время транзакции)////////////// - initButton(R.id.makeReversalLast, v -> { - cardPaymentCallbackHandler.setTransactionTypeConv(TransactionTypeConv.CANCEL); - clientInterface.getTransactionManager().revertCurrentOperation(revertCurrentOperationCallbackHandler); - }); - - //////////// вызов отмены текущей транзакции с использованием нового слушателя (только во время транзакции) - хостовые терминалы////////////// - initButton(R.id.makeReversalLastWithCallback, v -> clientInterface.getTransactionManager() - .revertCurrentOperation( - revertCurrentOperationCallbackHandler)); - - /////////// вызовы отмены по карте////////////// - initButton(R.id.makeEasyCardReversal, v -> { - clientInterface.cancel(); - clientInterface.getTransactionManager() - .getTransactionsList(easyCardReversalCallbackHandler, 20, 0, GetOperationType.SHOW, null); - }); - - /////////// вызовы отмены на сервере////////////// - initButton(R.id.makeEasyReversal, v -> clientInterface.getTransactionManager() - .getTransactionsList( - (GetTransactionsListCallbackHandler) easyReversalCallbackHandler, - 20, 0, GetOperationType.SHOW, - null)); - - //////////// вызовы возвратов ////////////// - initButton(R.id.makeCardRefund, v -> { - clientInterface.cancel(); - clientInterface.getTransactionManager() - .getTransactionsList(getTransactionListForRefundCallbackHandler, 20, 0, - GetOperationType.SHOW, null); - }); - - initButton(R.id.makeCashRefund, v -> { - clientInterface.cancel(); - clientInterface.getTransactionManager() - .getTransactionsList((GetTransactionsListCallbackHandler) easyCashRefundCallbackHandler, 20, - 0, GetOperationType.SHOW, null); - }); - - initButton(R.id.makeAlipayRefund, v -> clientInterface.getTransactionManager() - .getTransactionsList( - (GetTransactionsListCallbackHandler) easyAlipayRefundCallbackHandler, - 20, 0, GetOperationType.SHOW, - null)); - - //////////// получение списка мерчантов ////////////// - initButton(R.id.getMerchantUsers, v -> clientInterface.getAuthorizationManager() - .getMerchantUsers(getMerchantUsersCallbackHandler, 1000, - 0)); - - //////////// повторная отправка чека на почту ////////////// - initButton(R.id.resendReceipt, v -> clientInterface.getTransactionManager() - .getTransactionsList( - (GetTransactionsListCallbackHandler) resendReceiptCallbackHandler, - 20, 0, GetOperationType.SHOW, - null)); - - //////////// получение детальной информации о транзакции ////////////// - initButton(R.id.getTransactionDetails, v -> clientInterface.getTransactionManager() - .getTransactionsList( - (GetTransactionsListCallbackHandler) getTransactionDetailsCallbackHandler, - 20, 0, - GetOperationType.SHOW, - null)); - - //////////// получение детальной информации о текущей транзакции////////////// - initButton(R.id.getCurrentTransactionDetails, - v -> clientInterface.getTransactionManager().getTransactionDetails(false)); - - //////////// получение спика транзакций с использованием фильтра ////////////// - initButton(R.id.getTransactionListFilter, v -> clientInterface.getTransactionManager() - .getTransactionsList( - (GetTransactionsListCallbackHandler) getTransactionDetailsCallbackHandler, - 20, 0, GetOperationType.SEARCH, - new TransactionFilterData.Builder().setScanerCode( - "6354635635736647656").build())); - - //////////// отправка данных для регистрации mpos - дополнительный функционал при активации////////////// - findViewById(R.id.sendRegisterRequest).setOnClickListener(v -> { - String url = "https://test.ponkratenko.ru"; - clientInterface.getConfigurationManager() - .sendRegisterRequest(sendRegisterRequestCallbackHandler, getRegisterRequestData(), url); - }); - - //запись на терминал ключей tmk, tpk - findViewById(R.id.writeTerminalKeys).setOnClickListener(v -> { - String url = "https://test.ponkratenko.ru"; - Set keysForDynamicUpdate = new HashSet() {{ - add(TerminalKeyType.Tak); - add(TerminalKeyType.Tpk); - }}; - clientInterface.getCardReaderManager() - .loadTerminalKeys(new LoadTerminalKeysCallbackHandlerImpl(this), keysForDynamicUpdate); - }); - - //////////// закрытие смены и сверка с сервером ////////////// - initButton(R.id.closeDay, - v -> clientInterface.getTransactionManager().closeDay(closeDayCallbackHandler)); - - //////////// добавление принтера в систему с возможностью печати во время транзакций ////////////// - initButton(R.id.addPrinter, v -> clientInterface.getPrinterManager() - .addNewPrinter(printingCallbackHandler, - PrinterSeries.NEW_PRINTER)); - - //////////// удаление принтера из системы ////////////// - initButton(R.id.deletePrinter, - v -> clientInterface.getPrinterManager().clearSavedPrinterName()); - - initButton(R.id.printFiscal, v -> { - clientInterface.cancel(); - clientInterface.getPrinterManager() - .printFiscalTransactionCheck(printingCallbackHandler, DataCreatorUtils.makeFiscalData()); - }); - - initButton(R.id.printSlipCheck, v -> { - clientInterface.cancel(); - clientInterface.getPrinterManager() - .printFirstSlipTransactionCheck(printingCallbackHandler, DataCreatorUtils.makeSlipData(true), - SlipType.ERROR); - }); - - initButton(R.id.printReportX, v1 -> { - clientInterface.cancel(); - clientInterface.getPrinterManager().printReport(printingCallbackHandler, PrintingType.X_REPORT); - }); - initButton(R.id.printReportZ, v2 -> { - clientInterface.cancel(); - clientInterface.getPrinterManager().printReport(printingCallbackHandler, PrintingType.Z_REPORT); - }); - initButton(R.id.printFullReport, v1 -> { - clientInterface.cancel(); - xReportCallbackHandler = - new XReportCallbackHandlerImpl(clientInterface, PrintingType.RECONCILIATION_FULL_REPORT, this); - clientInterface.getPrinterManager().xReport(xReportCallbackHandler); - }); - initButton(R.id.printShortReport, v2 -> { - clientInterface.cancel(); - xReportCallbackHandler = - new XReportCallbackHandlerImpl(clientInterface, PrintingType.RECONCILIATION_SHORT_REPORT, this); - clientInterface.getPrinterManager().xReport(xReportCallbackHandler); - }); - - initButton(R.id.printTemplate, v -> { - clientInterface.cancel(); - clientInterface.getPrinterManager().printTemplate(printingCallbackHandler, - new ExternalTemplateData.Builder().printingTemplate(buildPrintingTemplate()).build()); - }); - - initButton(R.id.readBarCode, v2 -> showDialogScanner()); - - findViewById(R.id.versionStore).setOnClickListener(v -> { - String result = clientInterface.getExternalApiManager().getExternalStoreVersion(); - Toast.makeText(this, result + "", Toast.LENGTH_SHORT).show(); - }); - - findViewById(R.id.versionTracker).setOnClickListener(v -> { - String result = clientInterface.getExternalApiManager().getExternalTrackerVersion(); - Toast.makeText(this, result + "", Toast.LENGTH_SHORT).show(); - }); - - String savedServerUrl = PreferencesManager.loadStringField(this, PreferencesManager.Field.SERVER_URL, - getString(R.string.default_server_address_mpos_5_0_test)); - String serverUrl; - if (savedServerUrl != null) { - serverUrl = savedServerUrl; - } else { - serverUrl = getString(R.string.default_server_address_mpos_5_0_test); - } - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle("Choose server"); - - EditText serverAddressForm = new EditText(this); - serverAddressForm.setText(serverUrl); - - builder.setView(serverAddressForm); - builder.setPositiveButton("OK", (dialog, which) -> { - String model1 = Build.MODEL; - String brand2 = Build.BRAND; - String serverAddress = serverAddressForm.getText().toString(); - PreferencesManager.saveStringField(M4BankActivity.this, PreferencesManager.Field.SERVER_URL, serverAddress); - - clientInterface = M4BankMposClient.getInstance( - new M4BankMposParameters( - Format.JSON, - "rus", - null, - this, - new SessionExpiringCallbackHandlerImpl(), - "appName", - ServerChoose.API_5_0, - new ConfigurationSettings - .Builder() - .printerUsed(true) - .umkaEnabled(true) - .networkConfiguration(createNetworkConfiguration(serverAddress)) - .terminalConfiguration(createTerminalConfiguration()) - .build()) - ); - dialog.dismiss(); - }); - - builder.create().show(); - - //Создание словаря - DictionaryCore aisinoDictionary = - new DictionaryCore(new HashMap>() {{ - put(LanguageCore.English, new HashMap() {{ - put(MessageCore.AisinoA90OfflinePin, "Please enter offline PIN"); - put(MessageCore.AisinoA90OfflinePinRemain1, "Please enter offline PIN (Last try)"); - put(MessageCore.AisinoA90OfflinePinRemain2, "Please enter offline PIN (Remain: 2)"); - put(MessageCore.AisinoA90OfflinePinRemain3, "Please enter offline PIN (Remain: 3)"); - put(MessageCore.AisinoA90OfflinePinRemain4, "Please enter offline PIN (Remain: 4)"); - put(MessageCore.AisinoA90OnlinePin, "Please enter online PIN"); - put(MessageCore.AisinoA90CompletingTransaction, ""); - put(MessageCore.AisinoA90ContactlessMessage, "Please tap card"); - put(MessageCore.AisinoA90ContactMessage, "Please insert card"); - put(MessageCore.AisinoA90ReadSuccess, "PROCESSING"); - put(MessageCore.AisinoA90InputPWD, "enter pin"); - put(MessageCore.AisinoA90DefaultBottomButtonsText, "Cancel Clear Done"); - put(MessageCore.AisinoPinpadCompleted, "COMPLETED"); - put(MessageCore.AisinoPinpadDeclined, "DECLINED"); - put(MessageCore.AisinoPinpadAmountHint, ""); - put(MessageCore.KztCurrency, "KZT"); - put(MessageCore.BynCurrency, "BYN"); - put(MessageCore.EurCurrency, "EUR"); - put(MessageCore.GelCurrency, "GEL"); - put(MessageCore.JpyCurrency, "JPY"); - put(MessageCore.KwdCurrency, "KWD"); - put(MessageCore.RubCurrency, "RUB"); - put(MessageCore.UsdCurrency, "USD"); - put(MessageCore.AisinoPinpadScanning, "Text for test"); - put(MessageCore.AisinoPinpadScanningCompleted, "Success for test"); - }}); - put(LanguageCore.Russian, new HashMap() {{ - put(MessageCore.AisinoA90OfflinePin, "Введите ПИН"); - put(MessageCore.AisinoA90OfflinePinRemain1, "ПИН (Последняя попытка)"); - put(MessageCore.AisinoA90OfflinePinRemain2, "ПИН (Осталось попыток: 2)"); - put(MessageCore.AisinoA90OfflinePinRemain3, "ПИН (Осталось попыток: 3)"); - put(MessageCore.AisinoA90OfflinePinRemain4, "ПИН (Осталось попыток: 4)"); - put(MessageCore.AisinoA90OnlinePin, "Введите ПИН"); - put(MessageCore.AisinoA90CompletingTransaction, ""); - put(MessageCore.AisinoA90ContactlessMessage, "Предъявите карту"); - put(MessageCore.AisinoA90ContactMessage, "Предъявите карту"); - put(MessageCore.AisinoA90ReadSuccess, "ОБРАБОТКА"); - put(MessageCore.AisinoA90InputPWD, "введите пин"); - put(MessageCore.AisinoA90DefaultBottomButtonsText, "Отмена Очистить Готово"); - put(MessageCore.AisinoPinpadCompleted, "ОДОБРЕНО"); - put(MessageCore.AisinoPinpadDeclined, "ОТКЛОНЕНО"); - put(MessageCore.AisinoPinpadAmountHint, ""); - put(MessageCore.KztCurrency, "KZT"); - put(MessageCore.BynCurrency, "BYN"); - put(MessageCore.EurCurrency, "EUR"); - put(MessageCore.GelCurrency, "GEL"); - put(MessageCore.JpyCurrency, "JPY"); - put(MessageCore.KwdCurrency, "KWD"); - put(MessageCore.RubCurrency, "RUB"); - put(MessageCore.UsdCurrency, "USD"); - put(MessageCore.AisinoPinpadScanning, "Скан..."); - put(MessageCore.AisinoPinpadScanningCompleted, "Успешно"); - }}); - }}); - - //обновление словаря в библиотеке ридера - initButton(R.id.updateDictionary, v -> updateDictionary(aisinoDictionary)); - - // отмена неуспешной операции, которая сохранена в холдере - initButton(R.id.makeReversalSavedUnsuccessfulOperation, v -> - clientInterface.getTransactionManager() - .makeReversalSavedUnsuccessfulOperation(easyReversalSavedOperationCallbackHandler)); - } - - private void initButton(int id, View.OnClickListener onClickListener) { - findViewById(id).setOnClickListener(onClickListener); - } - - private void initLoginForm() { - EditText loginField = findViewById(R.id.login); - EditText passwordField = findViewById(R.id.password); - loginField.setText( - PreferencesManager.loadStringField(M4BankActivity.this, PreferencesManager.Field.LOGIN, login)); - passwordField.setText( - PreferencesManager.loadStringField(M4BankActivity.this, PreferencesManager.Field.PASSWORD, password)); - initButton(R.id.authorize, v -> { - login = loginField.getText().toString(); - password = passwordField.getText().toString(); - PreferencesManager.saveStringField(M4BankActivity.this, PreferencesManager.Field.LOGIN, login); - PreferencesManager.saveStringField(M4BankActivity.this, PreferencesManager.Field.PASSWORD, password); - clientInterface.getAuthorizationManager().authorize(authorizationCallbackHandler); - }); - } - - private TerminalConfiguration createTerminalConfiguration() { - return new TerminalConfiguration.Builder() - .energySaverModeTime(150) - .pinLengthsArray(new byte[]{4, 6}) - .shutDownModeTime(300) - .deviceType(new DeviceTypeDefiner().define()) - .build(); - } - - private NetworkConfiguration createNetworkConfiguration(String serverUrl) { - return new NetworkConfiguration.Builder() - .sslConfiguration(SslConfigurationBuilder.buildAllTrustConfiguration(serverUrl)) - .serverUrl(serverUrl) - .build(); - } - - private void showDialogScanner() { - String[] listItems = {"custom", "default"}; - AlertDialog.Builder builder = new AlertDialog.Builder(M4BankActivity.this); - builder.setTitle("Choose scanner:"); - builder.setItems(listItems, (dialog, which) -> showScanner(which)); - AlertDialog dialog = builder.create(); - dialog.show(); - } - - private void showScanner(int which) { - boolean isCustom; - if (which == 0) { - isCustom = true; - } else { - isCustom = false; - } - clientInterface.getCardReaderManager().scanBarCode(scanBarCodeCallbackHandler, - new ScanBarCodeScreenDataInput.Builder() - .setShowCustom(isCustom) - .setShowNextButton("true") - .setNextButtonText("Next button") - .setNextButtonTextColor("#999888") - .setNextButtonTextSize("20") - .setTitleBarText("Qr Scanner") - .setTitleTextSize("20") - .setTitleTextColor("#123456") - .setTitleColor("#987123") - .setDescriptionText("Описание") - .setDescriptionTextColor("#564637") - .setDescriptionTextSize("20") - .setScanHeight("200") - .setScanWidth("600") - .setSummText("2000") - .setSummColor("#666777") - .setSummSize("20") - .build()); - } - - private void updateDictionary(DictionaryCore dictionaryCore) { - clientInterface.getConfigurationManager().updateDictionary(dictionaryCore); - } - - private void getReaderInformation() { - clientInterface.getCardReaderManager().getCardReaderInformation(getCardReaderInformationCallbackHandler); - } - - @Override - protected void onStart() { - super.onStart(); - // - // ((EditText) findViewById(R.id.code)).setText("roam"); - //// ((EditText) findViewById(R.id.code)).setText("201"); - // ((EditText) findViewById(R.id.pin)).setText("1111"); - //// ((EditText) findViewById(R.id.login)).setText("61"); - //// ((EditText) findViewById(R.id.login)).setText("test2"); - //// ((EditText) findViewById(R.id.login)).setText("dm@centercorptech.net"); - // ((EditText) findViewById(R.id.login)).setText("ap@m4bank.com"); - //// ((EditText) findViewById(R.id.password)).setText("qwer"); - // ((EditText) findViewById(R.id.password)).setText("1111"); - //// ((EditText) findViewById(R.id.password)).setText("1111"); - } - - @Override - protected void onDestroy() { - Timber.d("Shutdown"); - if (clientInterface != null) { - clientInterface.shutdown(); - } - super.onDestroy(); - } - - private RegisterRequestData getRegisterRequestData() { - String code = "1" + (int) (Math.random() * 1000) + "" + (int) (Math.random() * 1000) + "" + - (int) (Math.random() * 1000); - String date = new SimpleDateFormat("yyyy-MM-dd H:m:s").format(new Date()); - String acquiringType = "mPOS"; - String ip = "169.254.10.10"; - try { - WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); - ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress()); - } catch (Exception e) { - e.printStackTrace(); - } - RegisterRequestData result = new RegisterRequestData(code, date, acquiringType, ip); - - result.setWebSite("http://fgfdgsfgsd.ru"); - result.setRegion("г. Москва"); - result.setCity("Moscow"); - result.setOrganizationName("AlexCorp"); - result.setInn("5785678"); - result.setIndustry("dghdfgh"); - result.setCellPointsCount("44"); - result.setContactName("Alex"); - result.setEmail("Alex@alex.com"); - result.setPhone("+79859999999"); - result.setUsingCard(true); - result.setAgreement(true); - - return result; - } - - public long getAmount() { - long amount; - try { - amount = Long.parseLong(((EditText) findViewById(R.id.amountField)).getText().toString()); - } catch (Exception any) { - amount = 1; - } - return amount; - } - - public HashMap getStyle(String style) { - - HashMap style1 = new HashMap<>(); - style1.put("TitleBackGroundColor", "#DB3F34"); - style1.put("VirtualPinPadStyle", 6); - style1.put("PatternForAmountAndCurrency", "%s $"); - style1.put("setBottomBtnText", new String[]{"Cancel", "Clear", "Done"}); - - HashMap style2 = new HashMap<>(); - style2.put("TitleBackGroundColor", "#909090"); - style2.put("VirtualPinPadStyle", 7); - style2.put("PatternForAmountAndCurrency", "$ %s"); - style2.put("setBottomBtnText", new String[]{"Отмена", "Очистить", "Готово"}); - style2.put("amountTextSize", 32); - style2.put("amountTextColor", "#333111"); - style2.put("amountTextFont", "sans_serif_bold_italic"); - style2.put("messageTextSize", 18); - style2.put("messageTextColor", "#333aaa"); - style2.put("messageTextFont", "sans_serif_bold_italic"); - style2.put("keyboardNumbersTextColor", "#111ccc"); - style2.put("keyboardNumbersTextSize", 24); - style2.put("keyboardNumbersTextFont", "sans_serif_bold_italic"); - style2.put("bottomButtonsTextSize", 14); - style2.put("bottomButtonsTextColor", "#ccc666"); - style2.put("bottomButtonsTextFont", "sans_serif_bold_italic"); - - switch (style) { - case "Style 1": - return style1; - case "Style 2": - return style2; - default: - return style1; - } - } - - public void showSelectStyleDialog(CardPaymentCallbackHandlerImpl.SelectStyleListener selectStyleListener) { - ArrayList styles = new ArrayList<>(); - styles.add("Style 1"); - styles.add("Style 2"); - runOnUiThread(() -> - new SelectElementDialog<>(M4BankActivity.this, styles, new SelectDialogCallback() { - @Override - public void onElementSelected(String element) { - VirtualPinKeyboardData virtualPinKeyboardData = - new VirtualPinKeyboardData.Builder(getStyle(element)).build(); - selectStyleListener.onSelectStyle(virtualPinKeyboardData); - } - - @Override - public void onCancelSelection() { - - } - }).show() - ); - } - - private PrintingTemplate buildPrintingTemplate() { - return new PrintingTemplate.Builder() - .append(new BarcodeCheckObject(Align.Center, 100, 300, true, "Hello kitty")) - .append(new StringCheckObject(new StringSpan.Builder("Test short simple string").build())) - .append(new StringCheckObject(new StringSpan.Builder( - "Test long simple string. It's a pretty long string for being more that check with.").build())) - .append(new StringCheckObject(new StringSpan.Builder("Test short italic center string.") - .alignment(Align.Center) - .textStyle(TextStyle.Italic) - .build())) - .append(new StringCheckObject(new StringSpan.Builder("Test bold italic right large font string.") - .alignment(Align.Right) - .fontSize(30) - .textStyle(TextStyle.ItalicBold) - .build())) - .append(new StringCheckObject(new StringSpan.Builder("Test gray left small string.") - .graylevel(5) - .fontSize(15) - .build())) - .append(new QRCodeCheckObject(Align.Center, 100, "Hello kitty")) - .append(new ImageCheckObject( - BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_call))) - .build(); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/PrintingCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/PrintingCallbackHandlerImpl.java deleted file mode 100644 index ecd9f07..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/PrintingCallbackHandlerImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.PrintingCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.hardware.printer.dto.data.PrintingType; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import timber.log.Timber; - -public class PrintingCallbackHandlerImpl implements PrintingCallbackHandler> { - - private final M4BankActivity activity; - - public PrintingCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onRequestedReportZ() { - Timber.i("onRequestedReportZ"); - activity.getClientInterface().getPrinterManager().printReport(this, PrintingType.Z_REPORT); - } - - @Override - public void onCompletedPrinting(PrinterResult printerResult) { - Timber.i("onCompletedPrinting = " + printerResult); - activity.runOnUiThread(() -> Toast.makeText(activity, "onCompletedPrinting = " + printerResult, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - Timber.i("onPrinterForRegistrationGettingCompleted"); - activity.runOnUiThread(() -> Toast.makeText(activity, "Saved printer - " + activity.getClientInterface().getPrinterManager().isSavedPrinterName(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onNoBoundedPrinterFound() { - Timber.i("onNoBoundedPrinterFound"); - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - Timber.i("printerList = " + printerList); - activity.getClientInterface().getPrinterManager().selectPrinter(printerList.get(0).toString()); - } - - @Override - public void onCompleted(Result result) { - Timber.i("onCompleted = " + result.getResultType().toString()); - } - - @Override - public void onWrongApiCalled() { - Timber.i("onWrongApiCalled"); - } - - @Override - public void onRepeat(int attemptNumber) { - Timber.i("onRepeat"); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/ReconciliationPrinterDataBuilder.java b/android/app/src/main/java/kz/com/aman/kassa/bank/ReconciliationPrinterDataBuilder.java deleted file mode 100644 index 3663741..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/ReconciliationPrinterDataBuilder.java +++ /dev/null @@ -1,73 +0,0 @@ -package kz.com.aman.kassa.bank; - -import java.util.ArrayList; -import java.util.List; -import ru.m4bank.mpos.service.data.dynamic.objects.CurrencyEnum; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.hardware.printer.dto.data.ReconciliationData; -import ru.m4bank.mpos.service.hardware.printer.dto.data.ReconciliationOperationData; -import ru.m4bank.mpos.service.hardware.printer.dto.data.TransactionType; -import ru.m4bank.mpos.service.transactions.data.TransactionMoneyInteractionType; - - -public class ReconciliationPrinterDataBuilder { - - public ReconciliationData build(List transactionList, boolean closeDay) { - ArrayList reconciliationOperationDataList = new ArrayList(); - if (transactionList == null) return null; - for (Transaction transaction : transactionList) { - if (!isErrorStatus(transaction)) { - reconciliationOperationDataList.add(buildOneElement(transaction)); - } - } - return new ReconciliationData(reconciliationOperationDataList, closeDay); - } - - private ReconciliationOperationData buildOneElement(Transaction transaction) { - return new ReconciliationOperationData.Builder( - transaction.getAmount(), - transaction.getMaskedPan(), - CurrencyEnum.getCurrencyEnum(Integer.parseInt(transaction.getCurrency3DigitCode())), - getPrinterOperationType(transaction.getTransactionType()), - transaction.getExternalTerminalId(), transaction.getPiDataType().getTypePIData().equals(TransactionMoneyInteractionType.CASH.toString())) - .cardType(transaction.getCardType()) - .date(transaction.getTransactionDate()) - .checkId(transaction.getCheck()) - .externalMerchantId(transaction.getExternalMerchantId()) - .externalMerchantName(transaction.getExternalMerchantName()) - .externalMerchantAdress(transaction.getExternalMerchantAddress()) - .authorizationCode(transaction.getAuthorizationCode()) - .refNumber(transaction.getRrn()) - .time(transaction.getTransactionTime()) - .build(); - } - - private TransactionType getPrinterOperationType(String type) { - if (type == null) return null; - switch (type.toUpperCase()) { - case "PAYMENT": - return TransactionType.INCOMING; - case "REFUND": - return TransactionType.INCOMING_REFUND; - case "REVERSAL": - return TransactionType.REVERSAL; - } - return null; - } - - public static boolean isErrorStatus(Transaction transaction) { - if (transaction == null || transaction.getOperationStatus() == null) { - return true; - } - - switch (transaction.getOperationStatus()) { - case COMPLETED: - case REVERSED: - case READER_TIMEOUT: - return false; - - default: - return true; - } - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/ResendReceiptCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/ResendReceiptCallbackHandlerImpl.java deleted file mode 100644 index 83990c3..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/ResendReceiptCallbackHandlerImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.ResendReceiptCallbackHandler; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.result.Result; - -class ResendReceiptCallbackHandlerImpl implements ResendReceiptCallbackHandler, - GetTransactionsListCallbackHandler { - private final M4BankActivity activity; - - ResendReceiptCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionsListReceived(List transactionList) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose transaction"); - - Spinner transactionListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - Transaction transaction = (Transaction) transactionListSpinner.getSelectedItem(); - activity.getClientInterface().getTransactionManager().resendReceipt(this, transaction, "vsa@centercorptech.net", null); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/ReversalCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/ReversalCallbackHandlerImpl.java deleted file mode 100644 index adee544..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/ReversalCallbackHandlerImpl.java +++ /dev/null @@ -1,153 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.ReversalCallbackHandler; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; - -public class ReversalCallbackHandlerImpl implements ReversalCallbackHandler { - - private final M4BankActivity activity; - - public ReversalCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onTransactionSelectionRequested(List transactionList) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose transaction"); - - Spinner transactionListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface().getTransactionManager().selectTransaction((Transaction) transactionListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onCardShortPanRequested() { - activity.getClientInterface().getTransactionManager().setCardShortPan("0069", 20, 0); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionInit() { - - } - - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - activity.getClientInterface().getTransactionManager().sendTransactionUserData(null, "phone", "email"); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onTransactionCompleted() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onSelectTransaction() { - - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerErrorDataPrinterBaseDataPrinterResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onPrinterToUseSelectionRequested(List list) { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/RevertCurrentOperationCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/RevertCurrentOperationCallbackHandlerImpl.java deleted file mode 100644 index c4a0e0d..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/RevertCurrentOperationCallbackHandlerImpl.java +++ /dev/null @@ -1,308 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.LastReversalCardPaymentCallbackHandler; -import ru.m4bank.mpos.service.commons.data.ResultType; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.dynamic.objects.Reader; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.MessageButtonData; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto; -import timber.log.Timber; - -public class RevertCurrentOperationCallbackHandlerImpl implements LastReversalCardPaymentCallbackHandler { - - private final M4BankActivity activity; - - public RevertCurrentOperationCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - - } - - @Override - public void onNoBoundedDevicesFound() { - - } - - @Override - public void onConnectingProcessStarted(String deviceName) { - - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) { - if (reconnectAvailable) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().tryToReconnectAndRepeatLast()); - builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel()); - builder.create().show(); - }); - } - } - - @Override - public void onDeviceToConnectSelectionRequested(List deviceList) { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getTransactionManager() - .selectCardReader(deviceListSpinner.getSelectedItem().toString()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - @Override - public void onWorkFlowDataRequested() { - - } - - @Override - public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) { - - } - - @Override - public void onRequiredReversal(String description, ResultCode resultCode) { - - } - - @Override - public void onRequiredApplicationSelection(List applicationOfList) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - - } - - @Override - public void onErrorStatusTransaction() { - - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onReconciliationRequiredToProcess() { - Timber.d("Reconciliation required!!!"); - activity.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction(); - } - - @Override - public void onReconciliationCompleted(Result result) { - Timber.d("Reconciliation completed!!!"); - if (result.getResultType() == ResultType.SUCCESSFUL) { - activity.getClientInterface().getTransactionManager().continueTransactionAfterReconciliation(); - } else { - activity.runOnUiThread(() -> Toast.makeText(activity, "Reconciliation failed " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_LONG) - .show()); - } - } - - @Override - public void onRepeat(int attemptNumber) { - - } - - @Override - public void onTransactionAmountRequested() { - - } - - @Override - public void onTransactionDataRequested() { - - } - - @Override - public void onDeviceToUseSelectionRequested(List deviceList) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(activity); - ArrayAdapter adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(deviceList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - activity.getClientInterface() - .getTransactionManager() - .setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - activity.runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - - } - - @Override - public void onTransactionInit() { - - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - - } - - @Override - public void onTransactionCompleted() { - - } - - @Override - public void onReconnectNeededToProcess() { - activity.runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().getTransactionManager().tryToReconnectToCardReader()); - builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel()); - builder.create().show(); - }); - } - - @Override - public void onWrongTerminal() { - - } - - @Override - public void onActivityUpdateUiThread() { - - } - - @Override - public void onCreatePinPadButtons() { - - } - - @Override - public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) { - - } - - @Override - public void onUpdateElementPin(int i) { - - } - - @Override - public void onCloseKeyboard() { - - } - - @Override - public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/ScanBarCodeCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/ScanBarCodeCallbackHandlerImpl.java deleted file mode 100644 index db96133..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/ScanBarCodeCallbackHandlerImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import java.util.List; - -import ru.m4bank.mpos.library.external.transactions.ScanBarCodeCallbackHandler; -import ru.m4bank.mpos.service.result.Result; - -public class ScanBarCodeCallbackHandlerImpl implements ScanBarCodeCallbackHandler { - - private final M4BankActivity activity; - - public ScanBarCodeCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onCompleteBarCode(String result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onError(String result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - - } - - @Override - public void onNoBoundedDevicesFound() { - - } - - @Override - public void onConnectingProcessStarted(String s) { - - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean b, String s) { - - } - - @Override - public void onDeviceToUseSelectionRequested(List list) { - - } - - @Override - public void notAuthorized() { - - } - - @Override - public void onDeviceToConnectSelectionRequested(List list) { - - } - - @Override - public void onCompleted(Result result) { - activity.runOnUiThread(() -> Toast.makeText(activity, (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onWrongApiCalled() { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/SendRegisterRequestCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/SendRegisterRequestCallbackHandlerImpl.java deleted file mode 100644 index 1fea624..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/SendRegisterRequestCallbackHandlerImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import ru.m4bank.mpos.library.external.configuration.SendRegisterRequestCallbackHandler; -import ru.m4bank.mpos.service.result.SendRegisterRequestExternalResult; - -public class SendRegisterRequestCallbackHandlerImpl implements SendRegisterRequestCallbackHandler { - private final M4BankActivity activity; - - public SendRegisterRequestCallbackHandlerImpl(M4BankActivity activity) { - this.activity = activity; - } - - @Override - public void onCompleted(SendRegisterRequestExternalResult result) { - activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + result.getRequestCode() + " " + result.getStatus(), Toast.LENGTH_SHORT).show()); - } - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/SessionExpiringCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/SessionExpiringCallbackHandlerImpl.java deleted file mode 100644 index 4c49899..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/SessionExpiringCallbackHandlerImpl.java +++ /dev/null @@ -1,11 +0,0 @@ -package kz.com.aman.kassa.bank; - -import ru.m4bank.mpos.library.external.SessionExpiringCallbackHandler; -import timber.log.Timber; - -public class SessionExpiringCallbackHandlerImpl implements SessionExpiringCallbackHandler { - @Override - public void onSessionExpired() { - Timber.w("SESSION EXPIRED!"); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/TerminalKeyTypeMpos.java b/android/app/src/main/java/kz/com/aman/kassa/bank/TerminalKeyTypeMpos.java deleted file mode 100644 index f2ca89c..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/TerminalKeyTypeMpos.java +++ /dev/null @@ -1,5 +0,0 @@ -package kz.com.aman.kassa.bank; - -public enum TerminalKeyTypeMpos { - Tmp, Tpk, Tak -} \ No newline at end of file diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/XReportCallbackHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/XReportCallbackHandlerImpl.java deleted file mode 100644 index 366b578..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/XReportCallbackHandlerImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -package kz.com.aman.kassa.bank; - -import android.widget.Toast; - -import java.util.List; - -import ru.m4bank.mpos.library.M4BankMposClientInterfaceFacade; -import ru.m4bank.mpos.library.external.transactions.XReportCallbackHandler; -import ru.m4bank.mpos.service.commons.data.ResultType; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.hardware.printer.dto.data.PrintingType; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.external.ExternalReconciliationData; - -public class XReportCallbackHandlerImpl implements XReportCallbackHandler { - - private PrintingType reportType; - private M4BankActivity activity; - private M4BankMposClientInterfaceFacade clientInterface; - - public XReportCallbackHandlerImpl(M4BankMposClientInterfaceFacade clientInterface, PrintingType reportType, M4BankActivity activity) { - this.reportType = reportType; - this.activity = activity; - this.clientInterface = clientInterface; - } - - @Override - public void onTransactionsListReceived(List list) { - if(list == null || list.isEmpty()) { - activity.runOnUiThread(() -> Toast.makeText(activity, "list of transaction is empty", Toast.LENGTH_SHORT).show()); - } else { - ExternalReconciliationData data = new ExternalReconciliationData.Builder() - .reconciliationData(new ReconciliationPrinterDataBuilder().build(list, false)) - .build(); - printReport(clientInterface, reportType, data); - } - } - - @Override - public void notAuthorized() { - activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - if(result == null || result.getResultType() != ResultType.SUCCESSFUL) { - activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show()); - }else if(result.getResultType() == ResultType.SUCCESSFUL){ - // if code is successful and list is empty -> reconciliation is already done - activity.runOnUiThread(() -> Toast.makeText(activity, "list of transaction is empty", Toast.LENGTH_SHORT).show()); - } - } - - @Override - public void onWrongApiCalled() { - - } - - @Override - public void onRepeat(int i) { - - } - - private void printReport(M4BankMposClientInterfaceFacade clientInterface, PrintingType reportType, ExternalReconciliationData data) { - clientInterface.cancel(); - if(reportType == PrintingType.RECONCILIATION_FULL_REPORT) { - clientInterface.getPrinterManager().printReconciliationReportFull(new PrintingCallbackHandlerImpl(activity), data); - } else { - clientInterface.getPrinterManager().printReconciliationReportShort(new PrintingCallbackHandlerImpl(activity), data); - } - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/builders/SslConfigurationBuilder.java b/android/app/src/main/java/kz/com/aman/kassa/bank/builders/SslConfigurationBuilder.java deleted file mode 100644 index ca167c6..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/builders/SslConfigurationBuilder.java +++ /dev/null @@ -1,50 +0,0 @@ -package kz.com.aman.kassa.bank.builders; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.X509TrustManager; - -import ru.m4bank.mpos.service.network.retrofit.SSLConfiguration; - -public class SslConfigurationBuilder { - public static SSLConfiguration buildAllTrustConfiguration(String serverAddress) { - X509TrustManager[] trustManager = getTrustManagers(); - return new SSLConfiguration.Builder() - .trustManager(trustManager[0]) - .hostnameVerifier(getHostnameVerifier(serverAddress)) - .socketFactory(getSSLSocketFactory(trustManager)) - .build(); - } - - private static HostnameVerifier getHostnameVerifier(String serverUrl) { - return (hostname, session) -> true; - } - - private static X509TrustManager[] getTrustManagers() { - return new X509TrustManager[]{new X509TrustManager() { - @Override - public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { - } - - @Override - public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { - } - - @Override - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return new java.security.cert.X509Certificate[]{}; - } - }}; - } - - private static SSLSocketFactory getSSLSocketFactory(X509TrustManager[] trustManager) { - try { - final SSLContext sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, trustManager, new java.security.SecureRandom()); - return sslContext.getSocketFactory(); - } catch (Exception e) { - return null; - } - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/gui/CustomKeyBoardDilalog.java b/android/app/src/main/java/kz/com/aman/kassa/bank/gui/CustomKeyBoardDilalog.java deleted file mode 100644 index fefee59..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/gui/CustomKeyBoardDilalog.java +++ /dev/null @@ -1,128 +0,0 @@ -package kz.com.aman.kassa.bank.gui; - -import android.app.Activity; -import android.app.Dialog; -import android.content.Context; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.Window; -import android.view.WindowManager; -import android.widget.Button; - -import kz.com.aman.kassa.R; -import ru.m4bank.mpos.service.transactions.data.MessageButtonData; - - -public class CustomKeyBoardDilalog { - - Button btnb1, btnb2, btnb3, btnb4, btnb5, btnb6, btnb7, btnb8, btnb9, btnb0, - btncancel, btnconfirm, btnclean; - View view; - Dialog dialog; - - public void createDialog(Context context) { - - dialog = new Dialog(context); - view = LayoutInflater.from(context).inflate(R.layout.layout_pin, null); - btnb1 = (Button) view.findViewById(R.id.button1); - btnb2 = (Button) view.findViewById(R.id.button2); - btnb3 = (Button) view.findViewById(R.id.button3); - btnb4 = (Button) view.findViewById(R.id.button4); - btnb5 = (Button) view.findViewById(R.id.button5); - btnb6 = (Button) view.findViewById(R.id.button6); - btnb7 = (Button) view.findViewById(R.id.button7); - btnb8 = (Button) view.findViewById(R.id.button8); - btnb9 = (Button) view.findViewById(R.id.button9); - btnb0 = (Button) view.findViewById(R.id.button0); - btncancel = (Button) view.findViewById(R.id.buttoncan); - btnconfirm = (Button) view.findViewById(R.id.buttonconfirm); - btnclean = (Button) view.findViewById(R.id.buttonclean); - Window dialogWindow = dialog.getWindow(); - dialogWindow.setGravity( Gravity.BOTTOM); - - WindowManager.LayoutParams lp = dialogWindow.getAttributes(); - lp.x = 0; - lp.y = 0; - view.measure(0, 0); - lp.height = view.getMeasuredHeight(); - lp.alpha = 9f; - dialogWindow.setAttributes(lp); - dialog.setContentView(view); - } - - public void show(Activity activity) { - if (!activity.isFinishing()) - dialog.show(); - } - - public void close(Activity activity) { - if (!activity.isFinishing() && dialog != null && dialog.isShowing()) - dialog.dismiss(); - } - - public void setText(MessageButtonData messageButtonData) { - btnb1.setText("" + messageButtonData.getBtnb1()); - btnb2.setText("" + messageButtonData.getBtnb2()); - btnb3.setText("" + messageButtonData.getBtnb3()); - btnb4.setText("" + messageButtonData.getBtnb4()); - btnb5.setText("" + messageButtonData.getBtnb5()); - btnb6.setText("" + messageButtonData.getBtnb6()); - btnb7.setText("" + messageButtonData.getBtnb7()); - btnb8.setText("" + messageButtonData.getBtnb8()); - btnb9.setText("" + messageButtonData.getBtnb9()); - btnb0.setText("" + messageButtonData.getBtnb0()); - } - - public Button getBtnb1() { - return btnb1; - } - - public Button getBtnb2() { - return btnb2; - } - - public Button getBtnb3() { - return btnb3; - } - - public Button getBtnb4() { - return btnb4; - } - - public Button getBtnb5() { - return btnb5; - } - - public Button getBtnb6() { - return btnb6; - } - - public Button getBtnb7() { - return btnb7; - } - - public Button getBtnb8() { - return btnb8; - } - - public Button getBtnb9() { - return btnb9; - } - - public Button getBtnb0() { - return btnb0; - } - - public Button getBtncancel() { - return btncancel; - } - - public Button getBtnconfirm() { - return btnconfirm; - } - - public Button getBtnclean() { - return btnclean; - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/gui/SelectDialogCallback.java b/android/app/src/main/java/kz/com/aman/kassa/bank/gui/SelectDialogCallback.java deleted file mode 100644 index e203b25..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/gui/SelectDialogCallback.java +++ /dev/null @@ -1,10 +0,0 @@ -package kz.com.aman.kassa.bank.gui; - -/** - * Created by pppoo on 27.02.2018. - */ - -public interface SelectDialogCallback { - void onElementSelected(ElementType element); - void onCancelSelection(); -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/gui/SelectElementDialog.java b/android/app/src/main/java/kz/com/aman/kassa/bank/gui/SelectElementDialog.java deleted file mode 100644 index 607a0be..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/gui/SelectElementDialog.java +++ /dev/null @@ -1,66 +0,0 @@ -package kz.com.aman.kassa.bank.gui; - -import android.app.Activity; -import android.app.Dialog; -import android.content.Context; -import android.view.ViewGroup.LayoutParams; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.TextView; - -import java.util.List; - -import kz.com.aman.kassa.R; - - -public class SelectElementDialog extends Dialog { - private Context context; - ArrayAdapter listAdapter; - private TextView labelTitle; - private ListView list; - private SelectDialogCallback selectDialogCallback; - - public SelectElementDialog(final Context context, List elements, SelectDialogCallback selectDialogCallback) { - super(context); - this.context = context; - this.selectDialogCallback = selectDialogCallback; - setCancelable(false); - setCanceledOnTouchOutside(false); - init(elements); - list.setAdapter(listAdapter); - getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); - - list.setOnItemClickListener((arg0, arg1, arg2, arg3) -> { - ElementType element = (ElementType) arg0.getItemAtPosition(arg2); - selectDialogCallback.onElementSelected(element); - ((Activity) context).runOnUiThread(this::dismiss); - }); - } - - private void init(List elements) { - setContentView(R.layout.custom_dialog_list); - labelTitle = findViewById(R.id.labelMessage); - list = findViewById(R.id.list); - listAdapter = new ArrayAdapter(context, R.layout.list_item, R.id.itemView, elements); - } - - @Override - public void onBackPressed() { - super.onBackPressed(); - } - - public void setTitle(String text) { - if (null != labelTitle) - labelTitle.setText(text); - } - - public static void showError(Context context, String message) { - try { - Dialog dialog = new Dialog(context); - dialog.setTitle(message); - dialog.show(); - } catch (Exception e) { - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/managing/PreferencesManager.java b/android/app/src/main/java/kz/com/aman/kassa/bank/managing/PreferencesManager.java deleted file mode 100644 index 0943c5a..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/managing/PreferencesManager.java +++ /dev/null @@ -1,37 +0,0 @@ -package kz.com.aman.kassa.bank.managing; - -import android.content.Context; -import android.content.SharedPreferences; - -import static android.content.Context.MODE_PRIVATE; - -public class PreferencesManager { - public enum Field { - LOGIN("Login"), PASSWORD("Password"), SERVER_URL("ServerUrl"); - - private String code; - - Field(String code) { - this.code = code; - } - - public String getCode() { - return code; - } - } - - public static void saveStringField(Context context, Field field, String value) { - SharedPreferences preferences = context.getSharedPreferences("preferences", MODE_PRIVATE); - SharedPreferences.Editor editor = preferences.edit(); - editor.putString(field.getCode(), value).apply(); - } - - public static String loadStringField(Context context, Field field) { - return loadStringField(context, field, null); - } - - public static String loadStringField(Context context, Field field, String defaultValue) { - SharedPreferences preferences = context.getSharedPreferences("preferences", MODE_PRIVATE); - return preferences.getString(field.getCode(), defaultValue); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/permissions/PermissionsManager.java b/android/app/src/main/java/kz/com/aman/kassa/bank/permissions/PermissionsManager.java deleted file mode 100644 index 4b04714..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/permissions/PermissionsManager.java +++ /dev/null @@ -1,11 +0,0 @@ -package kz.com.aman.kassa.bank.permissions; - -public interface PermissionsManager { - void checkPermissions(PermissionsCheckResultHandler handler); - void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults); - - interface PermissionsCheckResultHandler { - void onPermissionsGranted(); - void onPermissionsDeclined(); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/bank/permissions/PermissionsManagerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/bank/permissions/PermissionsManagerImpl.java deleted file mode 100644 index 9bbe419..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/bank/permissions/PermissionsManagerImpl.java +++ /dev/null @@ -1,65 +0,0 @@ -package kz.com.aman.kassa.bank.permissions; - -import android.Manifest; -import android.app.Activity; -import android.content.pm.PackageManager; - -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; - -public class PermissionsManagerImpl implements PermissionsManager { - private static final int MY_PERMISSIONS_REQUEST = 107; - private static final String[] PERMISSIONS_LIST = new String[]{ - Manifest.permission.READ_PHONE_STATE, - Manifest.permission.ACCESS_FINE_LOCATION, - Manifest.permission.ACCESS_COARSE_LOCATION, - Manifest.permission.CAMERA, - Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE - }; - - private final Activity activity; - private PermissionsCheckResultHandler permissionsCheckResultHandler; - - public PermissionsManagerImpl(Activity activity) { - this.activity = activity; - } - - @Override - public void checkPermissions(PermissionsCheckResultHandler permissionsCheckResultHandler) { - for (String permission : PERMISSIONS_LIST) { - if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) { - this.permissionsCheckResultHandler = permissionsCheckResultHandler; - ActivityCompat.requestPermissions(activity, PERMISSIONS_LIST, MY_PERMISSIONS_REQUEST); - return; - } - } - - permissionsCheckResultHandler.onPermissionsGranted(); - } - - @Override - public void onRequestPermissionsResult(int requestCode, - String permissions[], int[] grantResults) { - switch (requestCode) { - case MY_PERMISSIONS_REQUEST: { - if (grantResults.length == PERMISSIONS_LIST.length) { - if (arePermissionsGranted(grantResults)) { - permissionsCheckResultHandler.onPermissionsGranted(); - } else { - permissionsCheckResultHandler.onPermissionsDeclined(); - } - } - } - } - } - - private boolean arePermissionsGranted(int[] grantResults) { - boolean access = true; - for (int grantResult : grantResults) { - if (grantResult != PackageManager.PERMISSION_GRANTED) - access = false; - } - return access; - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/handler/AuthorizationHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/handler/AuthorizationHandlerImpl.java deleted file mode 100644 index 58922d7..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/handler/AuthorizationHandlerImpl.java +++ /dev/null @@ -1,71 +0,0 @@ -package kz.com.aman.kassa.handler; - -import android.widget.Toast; - -import com.google.gson.Gson; - -import io.flutter.plugin.common.MethodChannel; -import kz.com.aman.kassa.MainActivity; -import kz.com.aman.kassa.bank.M4BankActivity; -import kz.com.aman.kassa.model.AmanDao; -import kz.com.aman.kassa.plugins.BankNfcPlugins; -import ru.m4bank.mpos.library.external.authorization.AuthorizationCallbackHandler; -import ru.m4bank.mpos.service.authorization.network.AuthorizationResponse; -import ru.m4bank.mpos.service.commons.data.ResultType; - - -public class AuthorizationHandlerImpl implements AuthorizationCallbackHandler { - private final BankNfcPlugins plugin; - private final String login; - private final String password; - private final MethodChannel.Result result; - private final Gson gson = new Gson(); - - public AuthorizationHandlerImpl(BankNfcPlugins plugin, MethodChannel.Result result, String login, String password) { - this.plugin = plugin; - this.login = login; - this.password = password; - this.result =result; - } - - @Override - public void onLoginAndPasswordRequested() { - plugin.getClientInterface().getAuthorizationManager().sendLoginAndPassword(this.login, this.password); - } - - - @Override - public void onCompleted(ru.m4bank.mpos.service.result.Result result) { - plugin.getActivity().runOnUiThread(() -> { - //Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT).show(); - AmanDao dao = new AmanDao<>(); - dao.setSuccess(ResultType.SUCCESSFUL.equals(result.getResultType())); - dao.setMsg(result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription())); - this.result.success(gson.toJson(dao)); - }); - } - - @Override - public void onWrongApiCalled() { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(ru.m4bank.mpos.service.result.Result result, AuthorizationResponse authorizationResponse) { - - plugin.getActivity().runOnUiThread(() -> { - //Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT).show(); - AmanDao dao = new AmanDao<>(); - dao.setSuccess(ResultType.SUCCESSFUL.equals(result.getResultType())); - dao.setMsg(result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription())); - this.result.success(gson.toJson(dao)); - }); - } -} - - diff --git a/android/app/src/main/java/kz/com/aman/kassa/handler/CardPaymentHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/handler/CardPaymentHandlerImpl.java deleted file mode 100644 index 4d144d6..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/handler/CardPaymentHandlerImpl.java +++ /dev/null @@ -1,526 +0,0 @@ -package kz.com.aman.kassa.handler; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import com.google.gson.Gson; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import io.flutter.plugin.common.MethodChannel; -import kz.com.aman.kassa.bank.gui.CustomKeyBoardDilalog; -import kz.com.aman.kassa.model.AmanDao; -import kz.com.aman.kassa.model.CardData; -import kz.com.aman.kassa.plugins.BankNfcPlugins; -import ru.m4bank.mpos.library.external.transactions.CardPaymentCallbackHandler; -import ru.m4bank.mpos.service.commons.data.ResultType; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.data.dynamic.objects.AdditionalTransactionData; -import ru.m4bank.mpos.service.data.dynamic.objects.GoodsData; -import ru.m4bank.mpos.service.data.dynamic.objects.Reader; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.VendorData; -import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.AccountingSubject; -import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.TaxRate; -import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode; -import ru.m4bank.mpos.service.hardware.error.AllError; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.TransactionTypeConv; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.ButtonKeyboardDto; -import ru.m4bank.mpos.service.transactions.data.MessageButtonData; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.VirtualPinKeyboardData; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto; -import timber.log.Timber; - -public class CardPaymentHandlerImpl implements CardPaymentCallbackHandler { - private final BankNfcPlugins plugin; - private final MethodChannel.Result result; - private final Long amount; - private CustomKeyBoardDilalog customKeyBoardDilalog; - private TransactionTypeConv transactionTypeConv; - private final Gson gson = new Gson(); - - public CardPaymentHandlerImpl(BankNfcPlugins plugin, MethodChannel.Result result, long amount, TransactionTypeConv type) { - this.result = result; - this.plugin = plugin; - this.amount = amount; - customKeyBoardDilalog = new CustomKeyBoardDilalog(); - transactionTypeConv = type; - } - - public CardPaymentHandlerImpl setTransactionTypeConv(TransactionTypeConv transactionTypeConv) { - this.transactionTypeConv = transactionTypeConv; - return this; - } - - @Override - public void onDeviceToConnectSelectionRequested(List deviceList) { - System.out.println("----->---->---->onDeviceToConnectSelectionRequested"); - plugin.getActivity().runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(plugin.getActivity()); - ArrayAdapter adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, deviceList); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - plugin.getClientInterface() - .getTransactionManager() - .selectCardReader(deviceListSpinner.getSelectedItem().toString()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - System.out.println("----->---->---->Reader has been received"); - } - - @Override - public void onNoBoundedDevicesFound() { - System.out.println("----->---->---->No bounded readers"); - } - - @Override - public void onDeviceToUseSelectionRequested(List deviceList) { - System.out.println("----->---->---->onDeviceToUseSelectionRequested"); - plugin.getActivity().runOnUiThread(() -> { -// AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); -// builder.setTitle("Choose device"); -// -// Spinner deviceListSpinner = new Spinner(plugin.getActivity()); -// ArrayAdapter adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, new ArrayList<>(deviceList)); -// adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); -// deviceListSpinner.setAdapter(adapter); -// -// builder.setPositiveButton("OK", (dialog, which) -> { -// plugin.getClientInterface() -// .getTransactionManager() -// .setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem()); -// dialog.dismiss(); -// }); -// -// builder.setView(deviceListSpinner); -// builder.create().show(); - - if (deviceList != null && !deviceList.isEmpty()) { - for (Reader reader : deviceList) { - String name = reader.toString(); - System.out.println("name: " + name); - if (name.contains("SOFT")) { - plugin.getClientInterface() - .getTransactionManager() - .setCardReaderToUse(reader); - break; - } - } - } - }); - - - } - - @Override - public void onTransactionAmountRequested() { - System.out.println("----->---->---->onTransactionAmountRequested"); - plugin.getClientInterface().getTransactionManager().setTransactionAmount(this.amount); - } - - @Override - public void onTransactionDataRequested() { - System.out.println("----->---->---->onTransactionDataRequested"); - List goodsDataList = new ArrayList<>(); - goodsDataList.add(new GoodsData.Builder() - .setOriginalPrice(100000L) - .setRealPrice(100000L) - .setName("Принтер") - .setQuantity(1) - .setCode("000001") - .setUnits("00") - .setDiscount(0L) - .setTaxRate(TaxRate.Tax_18) - .setExponent(2) - .setAccountingSubject(AccountingSubject.PRODUCT) - .build()); - goodsDataList.add(new GoodsData.Builder() - .setOriginalPrice(30065L) - .setRealPrice(30065L) - .setName("Услуга") - .setQuantity(3) - .setCode("000002") - .setUnits("00") - .setDiscount(0L) - .setTaxRate(TaxRate.Tax_18) - .setExponent(2) - .setAccountingSubject(AccountingSubject.PRODUCT) - .build()); - - HashMap vendorDescription = new HashMap<>(); - vendorDescription.put("vendor", "description"); - vendorDescription.put("vendor1", "description1"); - vendorDescription.put("vendor2", "description2"); - vendorDescription.put("vendor3", "description3"); - VendorData vendorData = new VendorData(vendorDescription); - - AdditionalTransactionData additionalTransactionData = new AdditionalTransactionData.Builder(goodsDataList).vendorData(vendorData).build(); - plugin.getClientInterface().getTransactionManager().setAdditionalTransactionData(additionalTransactionData); - } - - @Override - public void onWorkFlowDataRequested() { - System.out.println("----->---->---->WorkFlow requested"); - } - - @Override - public void onCompleted(Result result) { - System.out.println("----->---->---->onCompleted"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - System.out.println("----->---->---->onWrongApiCalled"); - plugin.getActivity().runOnUiThread(() -> { - //Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show(); - AmanDao dao = new AmanDao<>(); - dao.setSuccess(false); - dao.setMsg("onWrongApiCalled"); - this.result.success(gson.toJson(dao)); - }); - } - - @Override - public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) { - System.out.println("----->---->---->onReceiveCardData"); - if (shouldConfirmBeManuallyCalled) { - plugin.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - } - - @Override - public void onTransactionInit() { - //Impossible - plugin.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - System.out.println("----->---->---->onTransactionExecutionStatusChanged: " + newStatus.name()); - plugin.getActivity().runOnUiThread(() -> { - if(newStatus!=null && newStatus.equals(TransactionExecutionStatus.TAP_CARD)) { - Toast.makeText(plugin.getActivity(), "Приложите карту", Toast.LENGTH_SHORT).show(); - } - }); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - if (transactionErrorData.getError() != null) { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), transactionErrorData.getError().getDescription(), Toast.LENGTH_LONG).show()); - } else { - plugin.getActivity().runOnUiThread(() -> { - AmanDao dao = new AmanDao<>(); - dao.setSuccess(false); - dao.setMsg(String.format("%s", errorHandler.getFinalDescription())); - this.result.success(gson.toJson(dao)); - //Toast.makeText(plugin.getActivity(), String.format("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getFinalDescription()), Toast.LENGTH_LONG).show(); - }); - } - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - System.out.printf("----->---->---->onErrorWithPossibilityToRetry: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription()); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), String.format("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getFinalDescription()), Toast.LENGTH_LONG).show()); - plugin.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - System.out.println("----->---->---->onTransactionDataReceivedError"); - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - System.out.println("----->---->---->onUserInformationRequested"); - if (transactionTypeConv != TransactionTypeConv.CANCEL) { - plugin.getClientInterface() - .getTransactionManager() - .sendTransactionUserData("signature", "phone", "vsa@centercorptech.net"); - } else { - onTransactionCompleted(); - } - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - System.out.println("----->---->---->onTransactionDataReceived"); - plugin.getActivity().runOnUiThread(() -> { - CardData cardData = new CardData(); - cardData.setCardExpiryDate(data.getCardExpiryDate()); - cardData.setCardNumber(data.getCardNumber()); - cardData.setCardPaymentSystemType(data.getCardPaymentSystemType()); - cardData.setTransactionNumber(data.getTransactionNumber()); - cardData.setTransactionType(data.getTransactionType().getCode()); - cardData.setAuthorizationCode(data.getAuthorizationCode()); - AmanDao dao = new AmanDao<>(); - dao.setSuccess(true); - dao.setData(cardData); - this.result.success(gson.toJson(dao)); - Toast.makeText(plugin.getActivity(), "Transaction data has been received", Toast.LENGTH_LONG) - .show(); - }); - } - - @Override - public void onTransactionCompleted() { - System.out.println("----->---->---->onTransactionCompleted"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onRequiredHostAddress() { - System.out.println("----->---->---->onRequiredHostAddress"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Set Host Address", Toast.LENGTH_LONG) - .show()); - plugin.getClientInterface().getTransactionManager().setHostAddress("213.79.122.128", "8011"); - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) { - System.out.println("----->---->---->onDisconnectedEventReceivedOrCanNotEstablishConnection"); - if (reconnectAvailable) { - plugin.getActivity().runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> plugin.getClientInterface().tryToReconnectAndRepeatLast()); - builder.setNegativeButton("No", (dialog, which) -> plugin.getClientInterface().cancel()); - builder.create().show(); - }); - } - } - - @Override - public void onConnectingProcessStarted(String deviceName) { - System.out.printf("----->---->---->Connecting process started: %s\n", deviceName); - } - - @Override - public void onReconnectNeededToProcess() { - System.out.println("----->---->---->onReconnectNeededToProcess"); - plugin.getActivity().runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> plugin.getClientInterface().getTransactionManager().tryToReconnectToCardReader()); - builder.setNegativeButton("No", (dialog, which) -> plugin.getClientInterface().cancel()); - builder.create().show(); - }); - } - - @Override - public void onReconciliationRequiredToProcess() { - System.out.println("----->---->---->onReconciliationRequiredToProcess"); - System.out.println("----->---->---->Reconciliation required!!!"); - plugin.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction(); - } - - @Override - public void onReconciliationCompleted(Result result) { - System.out.println("----->---->---->onReconciliationCompleted"); - System.out.println("----->---->---->Reconciliation completed!!!"); - if (result.getResultType() == ResultType.SUCCESSFUL) { - plugin.getClientInterface().getTransactionManager().continueTransactionAfterReconciliation(); - } else { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Reconciliation failed " + result.getDescription(), Toast.LENGTH_LONG) - .show()); - } - } - - @Override - public void notAuthorized() { - System.out.println("----->---->---->notAuthorized"); - - plugin.getActivity().runOnUiThread(() -> { - AmanDao dao = new AmanDao<>(); - dao.setSuccess(false); - dao.setMsg("notAuthorized"); - this.result.success(gson.toJson(dao)); - Toast.makeText(plugin.getActivity(), "notAuthorized", Toast.LENGTH_SHORT).show(); - }); - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - System.out.println("----->---->---->onTransactionDetailsReceived"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Transaction details received", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - System.out.println("----->---->---->onSuccessStatusTransaction"); - } - - @Override - public void onErrorStatusTransaction() { - System.out.println("----->---->---->onErrorStatusTransaction"); - } - - @Override - public void onRepeat(int attemptNumber) { - System.out.println("----->---->---->onRepeat"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequestedReportZ() { - System.out.println("----->---->---->onRequestedReportZ"); - } - - @Override - public void onCompletedPrinting(PrinterResult printerErrorDataPrinterBaseDataPrinterResult) { - System.out.println("----->---->---->onCompletedPrinting"); - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - System.out.println("----->---->---->onStatusFiscalModule"); - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - System.out.println("----->---->---->onPrinterForRegistrationGettingCompleted"); - } - - @Override - public void onNoBoundedPrinterFound() { - System.out.println("----->---->---->onNoBoundedPrinterFound"); - - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - System.out.println("----->---->---->onPrinterToUseSelectionRequested"); - } - - @Override - public void onRequiredReversal(String description, ResultCode resultCode) { - System.out.printf("----->---->---->onRequiredReversal: %s, resultCode: %s\n", description, resultCode.name()); - plugin.getActivity().runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setMessage("Revert last of operation?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> plugin.getClientInterface().getTransactionManager().revertCurrentOperation(new RevertCurrentOperationHandlerImpl(plugin))); - builder.setNegativeButton("No", (dialog, which) -> plugin.getClientInterface().getTransactionManager().clearLastTransactionInformation()); - builder.create().show(); - }); - } - - @Override - public void onRequiredApplicationSelection(List list) { - System.out.println("----->---->---->onRequiredApplicationSelection"); - plugin.getActivity().runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setTitle("Choose application identifier"); - - Spinner deviceListSpinner = new Spinner(plugin.getActivity()); - ArrayAdapter adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, list); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - plugin.getClientInterface() - .getTransactionManager() - .setTransactionApplicationIdentifier((ApplicationIdConv) deviceListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - - @Override - public void onActivityUpdateUiThread() { - System.out.println("----->---->---->onActivityUpdateUiThread"); - plugin.getClientInterface().getTransactionManager().addPinpadClickListener(plugin.getActivity()); - } - - - @Override - public void onCreatePinPadButtons() { - System.out.println("----->---->---->onCreatePinPadButtons"); - customKeyBoardDilalog.createDialog(plugin.getActivity()); - customKeyBoardDilalog.show(plugin.getActivity()); - ButtonKeyboardDto buttonKeyboardDto = new ButtonKeyboardDto.Build( - customKeyBoardDilalog.getBtnb1(), - customKeyBoardDilalog.getBtnb2(), - customKeyBoardDilalog.getBtnb3(), - customKeyBoardDilalog.getBtnb4(), - customKeyBoardDilalog.getBtnb5(), - customKeyBoardDilalog.getBtnb6(), - customKeyBoardDilalog.getBtnb7(), - customKeyBoardDilalog.getBtnb8(), - customKeyBoardDilalog.getBtnb9(), - customKeyBoardDilalog.getBtnb0(), - customKeyBoardDilalog.getBtncancel(), - customKeyBoardDilalog.getBtnconfirm(), - customKeyBoardDilalog.getBtnclean(), - plugin.getActivity().getWindowManager().getDefaultDisplay().getRotation() - ).build(); - plugin.getClientInterface().getTransactionManager().addPinPadButtons(buttonKeyboardDto); - } - - @Override - public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) { - System.out.println("----->---->---->onShowPinPadKeyBoard"); - customKeyBoardDilalog.setText(messageButtonData); - } - - @Override - public void onUpdateElementPin(int count) { - System.out.println("----->---->---->onUpdateElementPin"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "count = " + count, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCloseKeyboard() { - System.out.println("----->---->---->onCloseKeyboard"); - customKeyBoardDilalog.close(plugin.getActivity()); - } - - @Override - public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) { - //TODO FIX -// plugin.getActivity().showSelectStyleDialog(additionalData -> -// plugin.getClientInterface().getTransactionManager().addVirtualPinKeyboardData(additionalData)); - } - - public interface SelectStyleListener { - void onSelectStyle(VirtualPinKeyboardData virtualPinKeyboardData); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/handler/CardRefundAmanHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/handler/CardRefundAmanHandlerImpl.java deleted file mode 100644 index 913b9b6..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/handler/CardRefundAmanHandlerImpl.java +++ /dev/null @@ -1,431 +0,0 @@ -package kz.com.aman.kassa.handler; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import com.google.gson.Gson; - -import java.util.ArrayList; -import java.util.List; - -import io.flutter.plugin.common.MethodChannel; -import kz.com.aman.kassa.MainActivity; -import kz.com.aman.kassa.bank.M4BankActivity; -import kz.com.aman.kassa.bank.gui.CustomKeyBoardDilalog; -import kz.com.aman.kassa.model.AmanDao; -import kz.com.aman.kassa.model.CardData; -import kz.com.aman.kassa.plugins.BankNfcPlugins; -import ru.m4bank.mpos.library.external.transactions.EasyCardRefundCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.service.commons.data.ResultType; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.PrinterBaseData; -import ru.m4bank.mpos.service.data.PrinterErrorData; -import ru.m4bank.mpos.service.data.dynamic.objects.Reader; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode; -import ru.m4bank.mpos.service.data.dynamic.objects.transaction.RefundType; -import ru.m4bank.mpos.service.hardware.error.AllError; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.ButtonKeyboardDto; -import ru.m4bank.mpos.service.transactions.data.MessageButtonData; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto; -import timber.log.Timber; - -public class CardRefundAmanHandlerImpl implements EasyCardRefundCallbackHandler, GetTransactionsListCallbackHandler { - - private final BankNfcPlugins plugin; - private final MethodChannel.Result result; - private final Integer transactionNumber; - private String authorizationCode; - private final Gson gson = new Gson(); - private Transaction transaction; - - private CustomKeyBoardDilalog customKeyBoardDilalog; - - public CardRefundAmanHandlerImpl(BankNfcPlugins plugin , MethodChannel.Result result, Integer transactionNumber, String authorizationCode,Transaction transaction) { - this.plugin = plugin; - this.result = result; - this.transactionNumber = transactionNumber; - this.authorizationCode = authorizationCode; - this.transaction = transaction; - customKeyBoardDilalog = new CustomKeyBoardDilalog(); - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - Timber.d("Reader has been received"); - } - - @Override - public void onNoBoundedDevicesFound() { - Timber.d("No bounded readers"); - } - - @Override - public void onDeviceToUseSelectionRequested(List deviceList) { -// Timber.d("onDeviceToUseSelectionRequested"); -// AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); -// builder.setTitle("Choose device"); -// -// Spinner deviceListSpinner = new Spinner(plugin.getActivity()); -// ArrayAdapter adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, new ArrayList<>(deviceList)); -// adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); -// deviceListSpinner.setAdapter(adapter); -// -// builder.setPositiveButton("OK", (dialog, which) -> { -// plugin.getClientInterface().getTransactionManager().setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem()); -// dialog.dismiss(); -// }); -// -// builder.setView(deviceListSpinner); -// plugin.getActivity().runOnUiThread(() -> builder.create().show()); - - System.out.println("----->---->---->onDeviceToUseSelectionRequested"); - plugin.getActivity().runOnUiThread(() -> { - if (deviceList != null && !deviceList.isEmpty()) { - for (Reader reader : deviceList) { - String name = reader.toString(); - System.out.println("name: " + name); - if (name.contains("SOFT")) { - plugin.getClientInterface() - .getTransactionManager() - .setCardReaderToUse(reader); - break; - } - } - } - }); - } - - @Override - public void onDeviceToConnectSelectionRequested(List deviceList) { - Timber.d("onDeviceToConnectSelectionRequested"); - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(plugin.getActivity()); - ArrayAdapter adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, deviceList); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - plugin.getClientInterface().getTransactionManager().selectCardReader(deviceListSpinner.getSelectedItem().toString()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - plugin.getActivity().runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onCompleted(Result result) { - Timber.d("onCompleted"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), - Toast.LENGTH_SHORT).show()); - } - - @Override - public void onWrongApiCalled() { - System.out.println("----->---->---->onWrongApiCalled"); - plugin.getActivity().runOnUiThread(() -> { - //Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show(); - AmanDao dao = new AmanDao<>(); - dao.setSuccess(false); - dao.setMsg("Данная транзакция уже отменена или ее невозможно отменить через данный функционал"); - this.result.success(gson.toJson(dao)); - }); - } - - @Override - public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) { - System.out.println("----->---->---->onReceiveCardData"); - if (shouldConfirmBeManuallyCalled) { - plugin.getClientInterface().getTransactionManager().processOnlineTransaction(false); - } - } - - @Override - public void onRequiredReversal(String description, ResultCode resultCode) { - Timber.d("onRequiredReversal: %s, resultCode: %s", description, resultCode.name()); - } - - @Override - public void onRequiredApplicationSelection(List list) { - Timber.d("onRequiredApplicationSelection"); - } - - @Override - public void onTransactionInit() { - - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - System.out.println("----->---->---->onTransactionExecutionStatusChanged: " + newStatus.name()); - plugin.getActivity().runOnUiThread(() -> { - if(newStatus!=null && newStatus.equals(TransactionExecutionStatus.TAP_CARD)) { - Toast.makeText(plugin.getActivity(), "Приложите карту", Toast.LENGTH_SHORT).show(); - } - }); - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - if (transactionErrorData.getError() != null) { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), transactionErrorData.getError().getDescription(), Toast.LENGTH_LONG).show()); - } else { - plugin.getActivity().runOnUiThread(() -> { - AmanDao dao = new AmanDao<>(); - dao.setSuccess(false); - dao.setMsg(String.format("%s", errorHandler.getFinalDescription())); - this.result.success(gson.toJson(dao)); - //Toast.makeText(plugin.getActivity(), String.format("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getFinalDescription()), Toast.LENGTH_LONG).show(); - }); - } - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - Timber.d("onErrorWithPossibilityToRetry: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription()); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show()); - plugin.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - Timber.d("onTransactionDataReceivedError"); - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - Timber.d("onUserInformationRequested"); - plugin.getClientInterface().getTransactionManager().sendTransactionUserData("signature", "phone", "email"); - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - System.out.println("----->---->---->onTransactionDataReceived"); - plugin.getActivity().runOnUiThread(() -> { - CardData cardData = new CardData(); - cardData.setCardExpiryDate(data.getCardExpiryDate()); - cardData.setCardNumber(data.getCardNumber()); - cardData.setCardPaymentSystemType(data.getCardPaymentSystemType()); - cardData.setTransactionNumber(data.getTransactionNumber()); - cardData.setTransactionType(data.getTransactionType().getCode()); - AmanDao dao = new AmanDao<>(); - dao.setSuccess(true); - dao.setData(cardData); - this.result.success(gson.toJson(dao)); - Toast.makeText(plugin.getActivity(), "Transaction data has been received", Toast.LENGTH_LONG) - .show(); - }); - } - - @Override - public void onTransactionCompleted() { - Timber.d("onTransactionCompleted"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Operation has been successfully completed", Toast.LENGTH_LONG) - .show()); - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) { - Timber.d("onDisconnectedEventReceivedOrCanNotEstablishConnection"); - } - - @Override - public void onConnectingProcessStarted(String name) { - Timber.d("onConnectingProcessStarted: %s", name); - } - - @Override - public void onReconnectNeededToProcess() { - Timber.d("onReconnectNeededToProcess"); - } - - @Override - public void onReconciliationRequiredToProcess() { - Timber.d("onReconciliationRequiredToProcess"); - Timber.d("Reconciliation required!!!"); - plugin.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction(); - } - - @Override - public void onReconciliationCompleted(Result result) { - Timber.d("onReconciliationCompleted"); - Timber.d("Reconciliation completed!!!"); - } - - @Override - public void notAuthorized() { - Timber.d("notAuthorized"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "notAuthorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - Timber.d("onRepeat"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRequestedReportZ() { - Timber.d("onRequestedReportZ"); - } - - @Override - public void onCompletedPrinting(PrinterResult printerErrorDataPrinterBaseDataPrinterResult) { - Timber.d("onCompletedPrinting"); - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - Timber.d("onStatusFiscalModule"); - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - Timber.d("onPrinterForRegistrationGettingCompleted"); - } - - @Override - public void onNoBoundedPrinterFound() { - Timber.d("onNoBoundedPrinterFound"); - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - Timber.d("onPrinterToUseSelectionRequested"); - } - - @Override - public void onRefundDataRequested() { - Timber.d("onRefundDataRequested"); - plugin.getClientInterface().getTransactionManager().setRefundData(transaction, transaction.getAmount(), RefundType.General); - } - - @Override - public void onTransactionsListReceived(List transactionList) { -// Timber.d("onTransactionsListReceived"); -// AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); -// builder.setTitle("Choose transaction"); -// -// Spinner transactionListSpinner = new Spinner(plugin.getActivity()); -// ArrayAdapter adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); -// adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); -// transactionListSpinner.setAdapter(adapter); -// -// builder.setPositiveButton("OK", (dialog, which) -> { -// transaction = (Transaction) transactionListSpinner.getSelectedItem(); -// plugin.getClientInterface().getTransactionManager().makeCardRefund(this); -// dialog.dismiss(); -// }); -// -// builder.setView(transactionListSpinner); -// plugin.getActivity().runOnUiThread(() -> builder.create().show()); - this.transaction = null; - this.plugin.setTransaction(null); - for(Transaction transaction : transactionList){ - if(this.authorizationCode.equalsIgnoreCase(transaction.getAuthorizationCode()) - && transactionNumber.equals(transaction.getTransactionNumber()) - && transaction.getTransactionType().equalsIgnoreCase("PAYMENT")) { -// System.out.println("getCheck:"+ transaction.getCheck()); -// System.out.println("getCheckNumber:"+ transaction.getCheckNumber()); -// System.out.println("getAmount:"+ transaction.getAmount()); -// System.out.println("getCardHolderName:"+ transaction.getCardHolderName()); -// System.out.println("getCardType:"+ transaction.getCardType()); -// System.out.println("getPrinterCheckNumber:"+ transaction.getPrinterCheckNumber()); -// System.out.println("getTransactionNumber:"+ transaction.getTransactionNumber()); -// System.out.println("getAdditionalAuthorizationCode:"+ transaction.getAdditionalAuthorizationCode()); -// System.out.println("getAuthorizationCode:"+ transaction.getAuthorizationCode()); -// System.out.println("getCardExpiryDate:"+ transaction.getCardExpiryDate()); -// System.out.println("getTransactionType:"+ transaction.getTransactionType()); -// System.out.println("getTransactionDate:"+ transaction.getTransactionDate()); - this.transaction = transaction; - break; - } - } - - plugin.getActivity().runOnUiThread(() -> { - AmanDao dao = new AmanDao<>(); - dao.setSuccess(this.transaction !=null ); - this.plugin.setTransaction(this.transaction); - dao.setMsg(this.transaction == null ? "Транзакция не может быть отозвана т.к. все операции оп ней закрыты" : null); - this.result.success(gson.toJson(dao)); - }); - - - } - - @Override - public void onActivityUpdateUiThread() { - Timber.d("onActivityUpdateUiThread"); - plugin.getClientInterface().getTransactionManager().addPinpadClickListener(plugin.getActivity()); - } - - @Override - public void onCreatePinPadButtons() { - Timber.d("onCreatePinPadButtons"); - customKeyBoardDilalog.createDialog(plugin.getActivity()); - customKeyBoardDilalog.show(plugin.getActivity()); - ButtonKeyboardDto buttonKeyboardDto = new ButtonKeyboardDto.Build( - customKeyBoardDilalog.getBtnb1(), - customKeyBoardDilalog.getBtnb2(), - customKeyBoardDilalog.getBtnb3(), - customKeyBoardDilalog.getBtnb4(), - customKeyBoardDilalog.getBtnb5(), - customKeyBoardDilalog.getBtnb6(), - customKeyBoardDilalog.getBtnb7(), - customKeyBoardDilalog.getBtnb8(), - customKeyBoardDilalog.getBtnb9(), - customKeyBoardDilalog.getBtnb0(), - customKeyBoardDilalog.getBtncancel(), - customKeyBoardDilalog.getBtnconfirm(), - customKeyBoardDilalog.getBtnclean(), - plugin.getActivity().getWindowManager().getDefaultDisplay().getRotation() - ).build(); - plugin.getClientInterface().getTransactionManager().addPinPadButtons(buttonKeyboardDto); - } - - @Override - public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) { - Timber.d("onShowPinPadKeyBoard"); - customKeyBoardDilalog.setText(messageButtonData); - } - - @Override - public void onUpdateElementPin(int count) { - Timber.d("onUpdateElementPin"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "count = " + count, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCloseKeyboard() { - Timber.d("onCloseKeyboard"); - customKeyBoardDilalog.close(plugin.getActivity()); - } - - @Override - public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) { -// activity.showSelectStyleDialog(additionalData -> -// plugin.getClientInterface().getTransactionManager().addVirtualPinKeyboardData(additionalData)); - } - - @Override - public void onRequiredHostAddress() { - Timber.d("onRequiredHostAddress"); - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Set Host Address", Toast.LENGTH_LONG) - .show()); - plugin.getClientInterface().getTransactionManager().setHostAddress("213.79.122.128", "8011"); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/handler/CloseDayHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/handler/CloseDayHandlerImpl.java deleted file mode 100644 index c783699..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/handler/CloseDayHandlerImpl.java +++ /dev/null @@ -1,90 +0,0 @@ -package kz.com.aman.kassa.handler; - -import android.widget.Toast; - -import com.google.gson.Gson; - -import java.sql.Timestamp; -import java.text.SimpleDateFormat; -import java.util.List; - -import io.flutter.plugin.common.MethodChannel; -import kz.com.aman.kassa.bank.M4BankActivity; -import kz.com.aman.kassa.model.AmanDao; -import kz.com.aman.kassa.model.TransactionDao; -import kz.com.aman.kassa.plugins.BankNfcPlugins; -import ru.m4bank.mpos.library.external.transactions.CloseDayCallbackHandler; -import ru.m4bank.mpos.service.commons.data.ResultType; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.handling.result.CloseDayResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.network.closeday.CloseDayResponseInfo; - -//import com.landicorp.uns.result; - - -public class CloseDayHandlerImpl implements CloseDayCallbackHandler { - private final BankNfcPlugins plugin; - private final MethodChannel.Result result; - private final Gson gson = new Gson(); - final SimpleDateFormat sdfDart = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - public CloseDayHandlerImpl(BankNfcPlugins plugin, MethodChannel.Result result) { - this.plugin = plugin; - this.result = result; - } - - @Override - public void notAuthorized() { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } - - @Override - public void onTransactionsListReceived(List transactionList, List list1) { - plugin.getActivity().runOnUiThread(() -> { - AmanDao dao = new AmanDao<>(); - dao.setSuccess(true); - dao.setMsg("list"); - for(Transaction transaction: transactionList){ - TransactionDao transactionDao = new TransactionDao(); - transactionDao.setAmount(transaction.getAmount()); - transactionDao.setCardExpireDate(transaction.getCardExpiryDate()); - transactionDao.setCardNumber(transaction.getMaskedPan()); - transactionDao.setCardType(transaction.getCardType()); - transactionDao.setTransactionType(transaction.getTransactionType()); - transactionDao.setDate(sdfDart.format(transaction.getDate())); - dao.getRows().add(transactionDao); - } - this.result.success(gson.toJson(dao)); - // Toast.makeText(plugin.getActivity(), "На закрытие дня: - " + transactionList, Toast.LENGTH_SHORT).show(); - }); - } - - @Override - public void onCompleted(CloseDayResult closeDayResult) { - plugin.getActivity().runOnUiThread(() -> { - AmanDao dao = new AmanDao<>(); - dao.setSuccess(ResultType.SUCCESSFUL.equals(closeDayResult.getResultType())); - dao.setMsg((closeDayResult.getDescription() == null ? "null" : closeDayResult.getDescription())); - this.result.success(gson.toJson(dao)); - Toast.makeText(plugin.getActivity(), closeDayResult.getResultType() + " " + (closeDayResult.getDescription() == null ? "" : closeDayResult.getDescription()), Toast.LENGTH_SHORT) - .show(); - }); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/handler/ConnectionCheckHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/handler/ConnectionCheckHandlerImpl.java deleted file mode 100644 index cb33100..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/handler/ConnectionCheckHandlerImpl.java +++ /dev/null @@ -1,47 +0,0 @@ -package kz.com.aman.kassa.handler; - -import android.widget.Toast; - -import com.google.gson.Gson; - -import io.flutter.plugin.common.MethodChannel; -import kz.com.aman.kassa.MainActivity; -import kz.com.aman.kassa.model.AmanDao; -import ru.m4bank.mpos.library.external.configuration.CheckConnectionCallbackHandler; -import ru.m4bank.mpos.service.result.CheckConnectionExternalResult; - -public class ConnectionCheckHandlerImpl implements CheckConnectionCallbackHandler { - private final Gson gson = new Gson(); - private final MainActivity activity; - private final MethodChannel.Result result; - - public ConnectionCheckHandlerImpl(MainActivity activity, MethodChannel.Result result) { - this.activity = activity; - this.result = result; - } - - @Override - public void onCompleted(CheckConnectionExternalResult result) { - activity.runOnUiThread(() -> { - //Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()) + " " + result.isOnlineRegistration(), Toast.LENGTH_SHORT).show(); - AmanDao dao = new AmanDao<>(); - dao.setSuccess(true); - dao.setMsg("OK"); - this.result.success(gson.toJson(dao)); - } - ); - } - - - @Override - public void onWrongApiCalled() { - activity.runOnUiThread(() -> { - //Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show(); - AmanDao dao = new AmanDao<>(); - dao.setSuccess(false); - dao.setMsg("error"); - this.result.success(gson.toJson(dao)); - - }); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/handler/RevertCurrentOperationHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/handler/RevertCurrentOperationHandlerImpl.java deleted file mode 100644 index 486aca9..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/handler/RevertCurrentOperationHandlerImpl.java +++ /dev/null @@ -1,311 +0,0 @@ -package kz.com.aman.kassa.handler; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import kz.com.aman.kassa.MainActivity; -import kz.com.aman.kassa.bank.M4BankActivity; -import kz.com.aman.kassa.plugins.BankNfcPlugins; -import ru.m4bank.mpos.library.external.transactions.LastReversalCardPaymentCallbackHandler; -import ru.m4bank.mpos.service.commons.data.ResultType; -import ru.m4bank.mpos.service.data.FiscalStatusData; -import ru.m4bank.mpos.service.data.dynamic.objects.Reader; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode; -import ru.m4bank.mpos.service.hardware.error.ErrorHandler; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv; -import ru.m4bank.mpos.service.result.PrinterResult; -import ru.m4bank.mpos.service.result.Result; -import ru.m4bank.mpos.service.transactions.data.MessageButtonData; -import ru.m4bank.mpos.service.transactions.data.TransactionData; -import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus; -import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData; -import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto; -import timber.log.Timber; - -public class RevertCurrentOperationHandlerImpl implements LastReversalCardPaymentCallbackHandler { - - private final BankNfcPlugins plugin; - - public RevertCurrentOperationHandlerImpl(BankNfcPlugins plugin) { - this.plugin = plugin; - } - - @Override - public void notAuthorized() { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCardReaderForTransactionGettingCompleted() { - - } - - @Override - public void onNoBoundedDevicesFound() { - - } - - @Override - public void onConnectingProcessStarted(String deviceName) { - - } - - @Override - public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) { - if (reconnectAvailable) { - plugin.getActivity().runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> plugin.getClientInterface().tryToReconnectAndRepeatLast()); - builder.setNegativeButton("No", (dialog, which) -> plugin.getClientInterface().cancel()); - builder.create().show(); - }); - } - } - - @Override - public void onDeviceToConnectSelectionRequested(List deviceList) { - plugin.getActivity().runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(plugin.getActivity()); - ArrayAdapter adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, deviceList); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - plugin.getClientInterface() - .getTransactionManager() - .selectCardReader(deviceListSpinner.getSelectedItem().toString()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - builder.create().show(); - }); - } - - @Override - public void onWorkFlowDataRequested() { - - } - - @Override - public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) { - - } - - @Override - public void onRequiredReversal(String description, ResultCode resultCode) { - - } - - @Override - public void onRequiredApplicationSelection(List applicationOfList) { - - } - - @Override - public void onPrinterForRegistrationGettingCompleted() { - - } - - @Override - public void onNoBoundedPrinterFound() { - - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - - } - - @Override - public void onErrorStatusTransaction() { - - } - - @Override - public void onRequestedReportZ() { - - } - - @Override - public void onCompletedPrinting(PrinterResult printerResult) { - - } - - @Override - public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) { - - } - - @Override - public void onReconciliationRequiredToProcess() { - Timber.d("Reconciliation required!!!"); - plugin.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction(); - } - - @Override - public void onReconciliationCompleted(Result result) { - Timber.d("Reconciliation completed!!!"); - if (result.getResultType() == ResultType.SUCCESSFUL) { - plugin.getClientInterface().getTransactionManager().continueTransactionAfterReconciliation(); - } else { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Reconciliation failed " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_LONG) - .show()); - } - } - - @Override - public void onRepeat(int attemptNumber) { - - } - - @Override - public void onTransactionAmountRequested() { - - } - - @Override - public void onTransactionDataRequested() { - - } - - @Override - public void onDeviceToUseSelectionRequested(List deviceList) { - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setTitle("Choose device"); - - Spinner deviceListSpinner = new Spinner(plugin.getActivity()); - ArrayAdapter adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, new ArrayList<>(deviceList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - deviceListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - plugin.getClientInterface() - .getTransactionManager() - .setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem()); - dialog.dismiss(); - }); - - builder.setView(deviceListSpinner); - plugin.getActivity().runOnUiThread(() -> builder.create().show()); - } - - @Override - public void onPrinterToUseSelectionRequested(List printerList) { - - } - - @Override - public void onTransactionInit() { - - } - - @Override - public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) { - - } - - @Override - public void onUserInformationRequested(boolean signNeeded) { - - } - - @Override - public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) { - - } - - @Override - public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) { - plugin.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction(); - } - - @Override - public void onTransactionDataReceivedError(TransactionData data) { - - } - - @Override - public void onTransactionDataReceived(TransactionData data) { - - } - - @Override - public void onTransactionCompleted() { - - } - - @Override - public void onReconnectNeededToProcess() { - plugin.getActivity().runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?"); - builder.setCancelable(false); - builder.setPositiveButton("Yes", (dialog, which) -> plugin.getClientInterface().getTransactionManager().tryToReconnectToCardReader()); - builder.setNegativeButton("No", (dialog, which) -> plugin.getClientInterface().cancel()); - builder.create().show(); - }); - } - - @Override - public void onWrongTerminal() { - - } - - @Override - public void onActivityUpdateUiThread() { - - } - - @Override - public void onCreatePinPadButtons() { - - } - - @Override - public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) { - - } - - @Override - public void onUpdateElementPin(int i) { - - } - - @Override - public void onCloseKeyboard() { - - } - - @Override - public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) { - - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/handler/TransactionDetailsHandlerImpl.java b/android/app/src/main/java/kz/com/aman/kassa/handler/TransactionDetailsHandlerImpl.java deleted file mode 100644 index a3e06d9..0000000 --- a/android/app/src/main/java/kz/com/aman/kassa/handler/TransactionDetailsHandlerImpl.java +++ /dev/null @@ -1,101 +0,0 @@ -package kz.com.aman.kassa.handler; - -import android.app.AlertDialog; -import android.widget.ArrayAdapter; -import android.widget.Spinner; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import kz.com.aman.kassa.bank.M4BankActivity; -import kz.com.aman.kassa.plugins.BankNfcPlugins; -import ru.m4bank.mpos.library.external.transactions.GetTransactionDetailsCallbackHandler; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.result.Result; - -public class TransactionDetailsHandlerImpl implements GetTransactionDetailsCallbackHandler, GetTransactionsListCallbackHandler { - private final BankNfcPlugins plugin; - - public TransactionDetailsHandlerImpl(BankNfcPlugins plugin) { - this.plugin = plugin; - } - - @Override - public void onTransactionDetailsReceived(Transaction transaction) { - plugin.getActivity().runOnUiThread(() -> { - System.out.println("getCheck:"+ transaction.getCheck()); - System.out.println("getCheckNumber:"+ transaction.getCheckNumber()); - System.out.println("getAmount:"+ transaction.getAmount()); - System.out.println("getCardHolderName:"+ transaction.getCardHolderName()); - System.out.println("getCardType:"+ transaction.getCardType()); - System.out.println("getPrinterCheckNumber:"+ transaction.getPrinterCheckNumber()); - System.out.println("getTransactionNumber:"+ transaction.getTransactionNumber()); - System.out.println("getAdditionalAuthorizationCode:"+ transaction.getAdditionalAuthorizationCode()); - System.out.println("getAuthorizationCode:"+ transaction.getAuthorizationCode()); - System.out.println("getCardExpiryDate:"+ transaction.getCardExpiryDate()); - System.out.println("getTransactionType:"+ transaction.getTransactionType()); - System.out.println("getTransactionDate:"+ transaction.getTransactionDate()); - Toast.makeText(plugin.getActivity(), "Transaction details received: " + transaction, Toast.LENGTH_SHORT) - .show(); - }); - - } - - @Override - public void onSuccessStatusTransaction(Transaction transaction) { - - } - - @Override - public void onErrorStatusTransaction() { - - } - - @Override - public void onTransactionsListReceived(List transactionList) { - plugin.getActivity().runOnUiThread(() -> { - AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity()); - builder.setTitle("Choose transaction"); - Spinner transactionListSpinner = new Spinner(plugin.getActivity()); - ArrayAdapter adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, new ArrayList<>(transactionList)); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - transactionListSpinner.setAdapter(adapter); - - builder.setPositiveButton("OK", (dialog, which) -> { - Transaction transaction = (Transaction) transactionListSpinner.getSelectedItem(); - plugin.getClientInterface() - .getTransactionManager() - .getTransactionDetails(this, transaction.getOperationalDayNumber(), transaction - .getTransactionNumber(), transaction.getMobileTerminalId()); - dialog.dismiss(); - }); - - builder.setView(transactionListSpinner); - builder.create().show(); - }); - - } - - @Override - public void notAuthorized() { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Not authorized", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCompleted(Result result) { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT) - .show()); - } - - @Override - public void onWrongApiCalled() { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onRepeat(int attemptNumber) { - plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show()); - } -} diff --git a/android/app/src/main/java/kz/com/aman/kassa/plugins/BankNfcPlugins.java b/android/app/src/main/java/kz/com/aman/kassa/plugins/BankNfcPlugins.java index 1be52b3..d5ec181 100644 --- a/android/app/src/main/java/kz/com/aman/kassa/plugins/BankNfcPlugins.java +++ b/android/app/src/main/java/kz/com/aman/kassa/plugins/BankNfcPlugins.java @@ -11,32 +11,9 @@ import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; import kz.com.aman.kassa.MainActivity; -import kz.com.aman.kassa.bank.DeviceTypeDefiner; -import kz.com.aman.kassa.bank.SessionExpiringCallbackHandlerImpl; -import kz.com.aman.kassa.bank.builders.SslConfigurationBuilder; -import kz.com.aman.kassa.bank.permissions.PermissionsManager; -import kz.com.aman.kassa.bank.permissions.PermissionsManagerImpl; -import kz.com.aman.kassa.handler.AuthorizationHandlerImpl; -import kz.com.aman.kassa.handler.CardPaymentHandlerImpl; -import kz.com.aman.kassa.handler.CardRefundAmanHandlerImpl; -import kz.com.aman.kassa.handler.ConnectionCheckHandlerImpl; -import kz.com.aman.kassa.handler.TransactionDetailsHandlerImpl; -import kz.com.aman.kassa.handler.CloseDayHandlerImpl; + import kz.com.aman.kassa.model.AmanDao; -import ru.m4bank.mpos.library.M4BankMposClient; -import ru.m4bank.mpos.library.M4BankMposClientInterfaceFacade; -import ru.m4bank.mpos.library.M4BankMposParameters; -import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler; -import ru.m4bank.mpos.service.commons.data.ConfigurationSettings; -import ru.m4bank.mpos.service.commons.data.NetworkConfiguration; -import ru.m4bank.mpos.service.commons.data.TerminalConfiguration; -import ru.m4bank.mpos.service.data.dynamic.CurrencyDataHolder; -import ru.m4bank.mpos.service.data.dynamic.objects.Currency; -import ru.m4bank.mpos.service.data.dynamic.objects.GetOperationType; -import ru.m4bank.mpos.service.data.dynamic.objects.Transaction; -import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.TransactionTypeConv; -import ru.m4bank.mpos.service.network.Format; -import ru.m4bank.mpos.service.network.ServerChoose; + public class BankNfcPlugins implements MethodCallHandler { @@ -46,24 +23,6 @@ public class BankNfcPlugins implements MethodCallHandler { //main activity private MainActivity activity; - private Transaction transaction; - - public Transaction getTransaction() { - return transaction; - } - - public void setTransaction(Transaction transaction) { - this.transaction = transaction; - } - - //main client all work with him - private M4BankMposClientInterfaceFacade clientInterface; - //permissions - private PermissionsManager permissionsManager; - - public M4BankMposClientInterfaceFacade getClientInterface() { - return this.clientInterface; - } public MainActivity getActivity() { return this.activity; @@ -141,36 +100,36 @@ public class BankNfcPlugins implements MethodCallHandler { } private void permissions(Result result) { - try { - PermissionsManager.PermissionsCheckResultHandler permissionsCheckResultHandler = - new PermissionsManager.PermissionsCheckResultHandler() { - @Override - public void onPermissionsGranted() { - activity.runOnUiThread(() -> { - AmanDao dao = new AmanDao<>(); - dao.setSuccess(true); - dao.setMsg("OK"); - result.success(gson.toJson(dao)); - } - ); - - } - - @Override - public void onPermissionsDeclined() { - AmanDao dao = new AmanDao<>(); - dao.setSuccess(false); - dao.setMsg("decline"); - result.success(gson.toJson(dao)); - } - }; - permissionsManager = new PermissionsManagerImpl(this.activity); - permissionsManager.checkPermissions(permissionsCheckResultHandler); - - - } catch (Exception e) { - result.error("1", e.getMessage(), e.getLocalizedMessage()); - } +// try { +// PermissionsManager.PermissionsCheckResultHandler permissionsCheckResultHandler = +// new PermissionsManager.PermissionsCheckResultHandler() { +// @Override +// public void onPermissionsGranted() { +// activity.runOnUiThread(() -> { +// AmanDao dao = new AmanDao<>(); +// dao.setSuccess(true); +// dao.setMsg("OK"); +// result.success(gson.toJson(dao)); +// } +// ); +// +// } +// +// @Override +// public void onPermissionsDeclined() { +// AmanDao dao = new AmanDao<>(); +// dao.setSuccess(false); +// dao.setMsg("decline"); +// result.success(gson.toJson(dao)); +// } +// }; +// permissionsManager = new PermissionsManagerImpl(this.activity); +// permissionsManager.checkPermissions(permissionsCheckResultHandler); +// +// +// } catch (Exception e) { +// result.error("1", e.getMessage(), e.getLocalizedMessage()); +// } } @@ -186,171 +145,152 @@ public class BankNfcPlugins implements MethodCallHandler { //start after all permissions granted private void start(String serverUrl) { - clientInterface = M4BankMposClient.getInstance( - new M4BankMposParameters( - Format.JSON, - "rus", - null, - this.activity, - new SessionExpiringCallbackHandlerImpl(), - "appName", - ServerChoose.API_5_0, - new ConfigurationSettings - .Builder() - .printerUsed(true) - .umkaEnabled(true) - .networkConfiguration(createNetworkConfiguration(serverUrl)) - .terminalConfiguration(createTerminalConfiguration()) - .build()) - ); +// clientInterface = M4BankMposClient.getInstance( +// new M4BankMposParameters( +// Format.JSON, +// "rus", +// null, +// this.activity, +// new SessionExpiringCallbackHandlerImpl(), +// "appName", +// ServerChoose.API_5_0, +// new ConfigurationSettings +// .Builder() +// .printerUsed(true) +// .umkaEnabled(true) +// .networkConfiguration(createNetworkConfiguration(serverUrl)) +// .terminalConfiguration(createTerminalConfiguration()) +// .build()) +// ); } private void connection(Result result) { - clientInterface.getConfigurationManager() - .checkConnection( - new ConnectionCheckHandlerImpl(this.activity, result)); +// clientInterface.getConfigurationManager() +// .checkConnection( +// new ConnectionCheckHandlerImpl(this.activity, result)); } private void currency(Result result) { - CurrencyDataHolder dataHolder = clientInterface.getConfigurationManager() - .getCurrencyDataHolder(); - Currency currentCurrency = dataHolder.getCurrency(); - if(currentCurrency!=null){ - System.out.println(currentCurrency.getName()); - System.out.println(currentCurrency.getCurrency3DigitCode()); - } else { - System.out.println("currentCurrency is null"); - } - System.out.println("==========================="); - if(currentCurrency == null || !"398".equalsIgnoreCase(currentCurrency.getCurrency3DigitCode()) ){ - List currencies = dataHolder.getCurrencyList(); - boolean changed = false; - for(Currency currency : currencies ){ - System.out.println(currency.getName()); - System.out.println(currency.getLetterCode()); - System.out.println(currency.getCurrency3DigitCode()); - if("398".equalsIgnoreCase(currency.getCurrency3DigitCode())){ - dataHolder.setCurrency(currency); - changed = true; - break; - } - } - AmanDao dao = new AmanDao<>(); - dao.setSuccess(changed); - dao.setMsg("current currency " + (currentCurrency!=null ? currentCurrency.getLetterCode() : "NULL")); - result.success(gson.toJson(dao)); - } else { - AmanDao dao = new AmanDao<>(); - dao.setSuccess(true); - dao.setMsg("exist"); - result.success(gson.toJson(dao)); - } +// CurrencyDataHolder dataHolder = clientInterface.getConfigurationManager() +// .getCurrencyDataHolder(); +// Currency currentCurrency = dataHolder.getCurrency(); +// if(currentCurrency!=null){ +// System.out.println(currentCurrency.getName()); +// System.out.println(currentCurrency.getCurrency3DigitCode()); +// } else { +// System.out.println("currentCurrency is null"); +// } +// System.out.println("==========================="); +// if(currentCurrency == null || !"398".equalsIgnoreCase(currentCurrency.getCurrency3DigitCode()) ){ +// List currencies = dataHolder.getCurrencyList(); +// boolean changed = false; +// for(Currency currency : currencies ){ +// System.out.println(currency.getName()); +// System.out.println(currency.getLetterCode()); +// System.out.println(currency.getCurrency3DigitCode()); +// if("398".equalsIgnoreCase(currency.getCurrency3DigitCode())){ +// dataHolder.setCurrency(currency); +// changed = true; +// break; +// } +// } +// AmanDao dao = new AmanDao<>(); +// dao.setSuccess(changed); +// dao.setMsg("current currency " + (currentCurrency!=null ? currentCurrency.getLetterCode() : "NULL")); +// result.success(gson.toJson(dao)); +// } else { +// AmanDao dao = new AmanDao<>(); +// dao.setSuccess(true); +// dao.setMsg("exist"); +// result.success(gson.toJson(dao)); +// } } private void authentication(MethodCall call, Result result) { - String login = call.argument("login"); - String password = call.argument("password"); - clientInterface.getAuthorizationManager().authorize(new AuthorizationHandlerImpl(this, result, login, password) ); +// String login = call.argument("login"); +// String password = call.argument("password"); +// clientInterface.getAuthorizationManager().authorize(new AuthorizationHandlerImpl(this, result, login, password) ); } private void pay(MethodCall call, Result result) { - try { - Integer value = call.argument("amount"); - long amount = value.longValue(); - clientInterface.cancel(); - clientInterface.getTransactionManager().makeCardPayment(new CardPaymentHandlerImpl(this, result, amount, TransactionTypeConv.PAYMENT)); - } catch (Exception e) { - System.out.println("=============>ERROR:"+e.getMessage()); - result.error("2", e.getMessage(), e.getLocalizedMessage()); - } +// try { +// Integer value = call.argument("amount"); +// long amount = value.longValue(); +// clientInterface.cancel(); +// clientInterface.getTransactionManager().makeCardPayment(new CardPaymentHandlerImpl(this, result, amount, TransactionTypeConv.PAYMENT)); +// } catch (Exception e) { +// System.out.println("=============>ERROR:"+e.getMessage()); +// result.error("2", e.getMessage(), e.getLocalizedMessage()); +// } } private void findTransaction(MethodCall call, Result result) { - try { - Integer transactionNumber = call.argument("transactionNumber"); - String authorizationCode = call.argument("authorizationCode"); - clientInterface.getTransactionManager() - .getTransactionsList(new CardRefundAmanHandlerImpl(this, result, transactionNumber, authorizationCode , transaction), 1000, - 0, GetOperationType.SHOW, null); - } catch (Exception e) { - System.out.println("=============>ERROR:"+e.getMessage()); - result.error("2", e.getMessage(), e.getLocalizedMessage()); - } +// try { +// Integer transactionNumber = call.argument("transactionNumber"); +// String authorizationCode = call.argument("authorizationCode"); +// clientInterface.getTransactionManager() +// .getTransactionsList(new CardRefundAmanHandlerImpl(this, result, transactionNumber, authorizationCode , transaction), 1000, +// 0, GetOperationType.SHOW, null); +// } catch (Exception e) { +// System.out.println("=============>ERROR:"+e.getMessage()); +// result.error("2", e.getMessage(), e.getLocalizedMessage()); +// } } private void refund(MethodCall call, Result result) { - try { - clientInterface.getTransactionManager() - .makeCardRefund(new CardRefundAmanHandlerImpl(this, result, null, null, transaction)); - } catch (Exception e) { - System.out.println("=============>ERROR:"+e.getMessage()); - result.error("2", e.getMessage(), e.getLocalizedMessage()); - } +// try { +// clientInterface.getTransactionManager() +// .makeCardRefund(new CardRefundAmanHandlerImpl(this, result, null, null, transaction)); +// } catch (Exception e) { +// System.out.println("=============>ERROR:"+e.getMessage()); +// result.error("2", e.getMessage(), e.getLocalizedMessage()); +// } } private void closeDay(MethodCall call, Result result) { - try { - clientInterface.cancel(); - clientInterface.getTransactionManager().closeDay(new CloseDayHandlerImpl(this, result)); - } catch (Exception e) { - System.out.println("=============>ERROR:"+e.getMessage()); - result.error("2", e.getMessage(), e.getLocalizedMessage()); - } +// try { +// clientInterface.cancel(); +// clientInterface.getTransactionManager().closeDay(new CloseDayHandlerImpl(this, result)); +// } catch (Exception e) { +// System.out.println("=============>ERROR:"+e.getMessage()); +// result.error("2", e.getMessage(), e.getLocalizedMessage()); +// } } private void showTransaction(MethodCall call, Result result){ - clientInterface.getTransactionManager() - .getTransactionsList( - new TransactionDetailsHandlerImpl(this), - 20, 0, - GetOperationType.SHOW, - null); +// clientInterface.getTransactionManager() +// .getTransactionsList( +// new TransactionDetailsHandlerImpl(this), +// 20, 0, +// GetOperationType.SHOW, +// null); } private void cancel(MethodCall call, Result result) { - try { - clientInterface.cancel(); - AmanDao dao = new AmanDao<>(); - dao.setSuccess(true); - dao.setMsg("OK"); - result.success(gson.toJson(dao)); - } catch (Exception e) { - System.out.println("=============>ERROR:"+e.getMessage()); - result.error("2", e.getMessage(), e.getLocalizedMessage()); - } +// try { +// clientInterface.cancel(); +// AmanDao dao = new AmanDao<>(); +// dao.setSuccess(true); +// dao.setMsg("OK"); +// result.success(gson.toJson(dao)); +// } catch (Exception e) { +// System.out.println("=============>ERROR:"+e.getMessage()); +// result.error("2", e.getMessage(), e.getLocalizedMessage()); +// } } private void shutdown(MethodCall call, Result result) { - try { - clientInterface.shutdown(); - AmanDao dao = new AmanDao<>(); - dao.setSuccess(true); - dao.setMsg("OK"); - result.success(gson.toJson(dao)); - } catch (Exception e) { - System.out.println("=============>ERROR:"+e.getMessage()); - result.error("2", e.getMessage(), e.getLocalizedMessage()); - } - } - - //terminal config - private TerminalConfiguration createTerminalConfiguration() { - System.out.println("=============>createTerminalConfiguration:"+new DeviceTypeDefiner().define()); - return new TerminalConfiguration.Builder() - .energySaverModeTime(150) - .pinLengthsArray(new byte[]{4, 6}) - .shutDownModeTime(300) - .deviceType(new DeviceTypeDefiner().define()) - .build(); - } - - //network config - private NetworkConfiguration createNetworkConfiguration(String serverUrl) { - return new NetworkConfiguration.Builder() - .sslConfiguration(SslConfigurationBuilder.buildAllTrustConfiguration(serverUrl)) - .serverUrl(serverUrl) - .build(); +// try { +// clientInterface.shutdown(); +// AmanDao dao = new AmanDao<>(); +// dao.setSuccess(true); +// dao.setMsg("OK"); +// result.success(gson.toJson(dao)); +// } catch (Exception e) { +// System.out.println("=============>ERROR:"+e.getMessage()); +// result.error("2", e.getMessage(), e.getLocalizedMessage()); +// } } diff --git a/android/app/src/main/kotlin/kz/com/aman/kassa/activities/BankActivity.kt b/android/app/src/main/kotlin/kz/com/aman/kassa/activities/BankActivity.kt deleted file mode 100644 index 97c7989..0000000 --- a/android/app/src/main/kotlin/kz/com/aman/kassa/activities/BankActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -package kz.com.aman.kassa.activities; - -import android.app.Activity -import android.content.Intent -import android.os.Bundle -import android.util.Log -import android.view.View -import kz.com.aman.kassa.R - -import io.flutter.app.FlutterActivity - - -class BankActivity : FlutterActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - Log.i("BankActivity","onCreate") - setContentView(R.layout.activity_bank) - } - - fun myClickHandler(view: View) { - Log.i("BankActivity","closed") - val returnIntent = Intent() - returnIntent.putExtra("result", "abrakadabra") - setResult(Activity.RESULT_OK, returnIntent) - finish() - } - - override fun onDestroy() { - val returnIntent = Intent() - returnIntent.putExtra("result", "abrakadabra") - setResult(Activity.RESULT_CANCELED, returnIntent) - super.onDestroy() - } -} \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index d9ad62b..88944ab 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -11,124 +11,11 @@ buildscript { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } - ext.buildType = [ - 'buildType': 'NFC' - ] - ext.versions = [ - 'supportLibrary': '28.0.0', - 'okhttp' : '3.8.1', - 'retrofit' : '2.3.0', - 'multidex' : '1.0.2', - 'logback' : '1.1.1-6' - ] - - ext.deps = [ - 'support' : [ - 'appcompatV7': "com.android.support:appcompat-v7:${versions.supportLibrary}", - 'multidex' : "com.android.support:multidex:${versions.multidex}", - ], - 'okhttp' : [ - 'core' : "com.squareup.okhttp3:okhttp:${versions.okhttp}", - 'logger': "com.squareup.okhttp3:logging-interceptor:${versions.okhttp}", - ], - 'retrofit' : [ - 'core' : "com.squareup.retrofit2:retrofit:${versions.retrofit}", - 'converterGson' : "com.squareup.retrofit2:converter-gson:${versions.retrofit}", - 'rxjava2Adapter': 'com.squareup.retrofit2:adapter-rxjava2:2.3.0', - ], - 'rx' : [ - 'core' : 'io.reactivex.rxjava2:rxjava:2.1.7', - 'android': 'io.reactivex.rxjava2:rxandroid:2.0.1', - ], - 'logback' : [ - 'core' : "com.github.tony19:logback-android-core:${versions.logback}", - 'classic': "com.github.tony19:logback-android-classic:${versions.logback}", - ], - 'timber' : 'com.jakewharton.timber:timber:4.5.1', - 'paperdb' : 'io.paperdb:paperdb:2.1', - 'sdpAndroid' : 'com.intuit.sdp:sdp-android:1.0.4', - 'slf4jApi' : 'org.slf4j:slf4j-api:1.7.21', - 'greendao' : 'org.greenrobot:greendao:3.2.2', - 'websockets' : 'org.java-websocket:Java-WebSocket:1.4.0', - 'retro_stream': 'net.sourceforge.streamsupport:android-retrostreams:1.6.3', - 'hardware' : [ - "terminalCommon": [ - "cardreaderlib" : "m4bank:cardreaderlib:759", - "connectionreaders": "m4bank:connectionreaders:759", - "emv_taglib" : "external:emv-taglib:2.5", - ], - 'aisino' : [ - "aisino_common": "m4bank:aisino_common:140", - "vm20" : [ - "vm20" : "external:vm20sdk:9", - "asinalib": "m4bank:asinalib:100" - ], - "a90" : [ - "aisinoprinterlib": "m4bank:aisinoprinterlib:153", - "aisino_a90lib" : "m4bank:aisino_a90lib:437", - "aisino_a90deps" : "m4bank:aisino_a90deps:master-1.1.43@aar", - ], - ], - 'wangpos' : [ - "wangposlib" : "m4bank:wangposlib:53", - "wangposprinterlibrary": "m4bank:wangposprinterlibrary:35", - "SDK4BaseBinder" : "external:SDK4BaseBinder:2.1.5", - "SDK4EmvBinder" : "external:SDK4EmvBinder:2.1.5", - "SDK4KeyManagerBinder" : "external:SDK4KeyManagerBinder:2.1.5" - ], - 'atol' : [ - "fiscalprinterlibrary": "m4bank:fiscalprinterlibrary:93", - "atol_core" : "external:atol_core:1@aar" - ], - 'shtrih' : [ - "FptrServiceAndroid": "m4bank:FptrServiceAndroid:3", - "shtrih_core" : "external:shtrihjpos:1" - ], - "icmp" : [ - "icmplibrary" : "m4bank:icmplibrary:16", - "icmp_dependencies": "m4bank:icmp_dependencies:1.1.1.2@aar" - ], - "roam" : [ - "roamlib" : "roamlib:roamlib2:207", - "roamreaderAAR": "external:roamreaderunifiedapiAAR:1@aar" - ], - "spirelib" : "m4bank:spirelib:138", - "softpos" : [ - "softpaylibrary" : "m4bank:softpaylibrary:52@aar", - "softpay_dependencies": "m4bank:softpay_dependencies:1.1.4.62@aar", - ], - "sunmi" : "m4bank:sunmiv1printerlibrary:5", - "redlib" : "m4bank:redlib:1", - "d200lib" : "m4bank:d200lib:9", - ], - "zlibrary" : "m4bank:zlibrary:2159@aar" - ] - - //TODO: 20.09.2019 for future refactoring: add gradle properties parameter to set supported device remotely - if (ext.buildType.buildType == 'NFC') { - //ext.supportedDevicesapp = ['SoftPos', 'Shtrih', 'Atol'] - ext.supportedDevicesapp = ['SoftPos'] - } else { - ext.supportedDevicesapp = ['Deftun', 'Singular', 'CctRed', 'RoamData', 'Rp350n', 'WisePad', 'RoamPad', - 'Qpos', 'Icmp', 'Spire', 'D200', 'RoamPadNfc', 'IcmpUpos', 'WangPos', - 'OrangeRoamPad', 'FakeReader', 'Aisino', 'AisinoA90', - 'Shtrih', 'Sunmi', 'Atol', 'AisinoA70'] - } - - ext.currentRepository = "http://217.174.185.218:55555/artifactory/gradle-dev" } allprojects { repositories { - maven { - url currentRepository - content { - includeGroupByRegex "external.*" - includeGroupByRegex "m4bank.*" - includeGroupByRegex "roamlib.*" - } - } google() jcenter() } diff --git a/assets/images/check.png b/assets/images/check.png new file mode 100644 index 0000000..49b46d4 Binary files /dev/null and b/assets/images/check.png differ diff --git a/assets/images/finger.png b/assets/images/finger.png new file mode 100644 index 0000000..5f07100 Binary files /dev/null and b/assets/images/finger.png differ diff --git a/assets/images/secBg.jpg b/assets/images/secBg.jpg new file mode 100644 index 0000000..975493f Binary files /dev/null and b/assets/images/secBg.jpg differ diff --git a/lib/core/logger.dart b/lib/core/logger.dart index fc9ffc6..e1d0334 100644 --- a/lib/core/logger.dart +++ b/lib/core/logger.dart @@ -34,6 +34,7 @@ class SimpleLogPrinter extends LogPrinter { } String formatStackTrace(StackTrace stackTrace, int methodPosition) { + var lines = stackTrace.toString()?.split('\n'); var formatted = []; var count = 0; diff --git a/lib/core/models/check_image_modal.dart b/lib/core/models/check_image_modal.dart new file mode 100644 index 0000000..9ff93be --- /dev/null +++ b/lib/core/models/check_image_modal.dart @@ -0,0 +1,17 @@ +class CheckImageModal { + final String base64Data; + final String textData; + CheckImageModal({this.base64Data, this.textData}); + + static CheckImageModal fromJson(Map json) { + return CheckImageModal( + base64Data: json['base64Data'], + textData: json['textData'] + ); + } + Map toJson() => + { + 'base64Data': base64Data, + 'textData': textData + }; +} \ No newline at end of file diff --git a/lib/core/models/halyk_post_session.dart b/lib/core/models/halyk_post_session.dart new file mode 100644 index 0000000..6554eb1 --- /dev/null +++ b/lib/core/models/halyk_post_session.dart @@ -0,0 +1,19 @@ +import 'package:intl/intl.dart'; + +class HalykPosSession { + const HalykPosSession( + {this.login, this.token, this.serverTime, this.tokenTimeout}); + + final String login; + final String token; + final DateTime serverTime; + final int tokenTimeout; + + static HalykPosSession fromJson(Map data) => HalykPosSession( + login: data['login'], + token: data['token'], + serverTime: data['ServerTime'] != null + ? new DateFormat("dd.MM.yyyy HH:mm:ss ZZZ").parse(data['ServerTime']) + : null, + tokenTimeout: data['TokenTimeout']); +} diff --git a/lib/core/models/setting_model.dart b/lib/core/models/setting_model.dart new file mode 100644 index 0000000..6c4dd1e --- /dev/null +++ b/lib/core/models/setting_model.dart @@ -0,0 +1,6 @@ +class SettingModel { + const SettingModel({this.name, this.type, this.address}); + final String type; + final String name; + final String address; +} \ No newline at end of file diff --git a/lib/core/route_names.dart b/lib/core/route_names.dart index dd2469b..4ea3704 100644 --- a/lib/core/route_names.dart +++ b/lib/core/route_names.dart @@ -6,7 +6,14 @@ const String PaymentViewRoute = "PaymentView"; const String PaymentNfcViewRoute = "PaymentNfcViewRoute"; const String HistoryViewRoute = "HistoryView"; const String InfoKkmViewRoute = "InfoKkmViewRoute"; +const String SettingsViewRoute = "SettingsViewRoute"; const String QrViewRoute = "QrViewRoute"; const String BankViewRoute = "BankViewRoute"; const String BankSettingViewRoute = "BankSettingViewRoute"; + + +const String SettingsPrinterRoute = "SettingsPrinterRoute"; +const String SettingsPrinterBTRoute = "SettingsPrinterBTRoute"; +const String SettingsPrinterEncodingRoute = "SettingsPrinterEncodingRoute"; +const String SettingsPrinterPaperRoute = "SettingsPrinterPaperRoute"; // Generate the views here diff --git a/lib/core/router.dart b/lib/core/router.dart index ba822a2..dffa6c9 100644 --- a/lib/core/router.dart +++ b/lib/core/router.dart @@ -1,18 +1,23 @@ +import 'package:flutter/material.dart'; import 'package:aman_kassa_flutter/core/models/close_day_data.dart'; import 'package:aman_kassa_flutter/views/bank_setting/bank_setting_view.dart'; import 'package:aman_kassa_flutter/views/bank_view/bank_view.dart'; import 'package:aman_kassa_flutter/views/check/image_show_container.dart'; +import "package:aman_kassa_flutter/views/home/home_view_m.dart"; import 'package:aman_kassa_flutter/views/close_day_view/close_day_show_container.dart'; import 'package:aman_kassa_flutter/views/history/history_view.dart'; import 'package:aman_kassa_flutter/views/info_kkm/info_kkm_view.dart'; import 'package:aman_kassa_flutter/views/payment/payment_view.dart'; import 'package:aman_kassa_flutter/views/payment_nfc/payment_nfc_view.dart'; import 'package:aman_kassa_flutter/views/qr_view/qr_view.dart'; - -import './route_names.dart'; -import 'package:aman_kassa_flutter/views/home/home_view.dart'; +import 'package:aman_kassa_flutter/views/settings/printer/views/PrinterSelect.dart'; +import 'package:aman_kassa_flutter/views/settings/settings_view.dart'; +import 'package:aman_kassa_flutter/views/settings/printer/views/PrinterEncoding.dart'; +import 'package:aman_kassa_flutter/views/settings/printer/views/PrinterPaperSize.dart'; +import 'package:aman_kassa_flutter/views/settings/setting_printer_view.dart'; import 'package:aman_kassa_flutter/views/login/login_view.dart'; -import 'package:flutter/material.dart'; +import './route_names.dart'; + Route generateRoute(RouteSettings settings) { switch (settings.name) { @@ -51,6 +56,11 @@ Route generateRoute(RouteSettings settings) { routeName: settings.name, viewToShow: InfoKkmView(), ); + case SettingsViewRoute: + return _getPageRoute( + routeName: settings.name, + viewToShow: SettingView(), + ); case BankViewRoute: return _getPageRoute( routeName: settings.name, @@ -74,6 +84,26 @@ Route generateRoute(RouteSettings settings) { routeName: settings.name, viewToShow: ImageShowContainer(data), ); + case SettingsPrinterRoute: + return _getPageRoute( + routeName: settings.name, + viewToShow: SettingPrinterView(), + ); + case SettingsPrinterBTRoute: + return _getPageRoute( + routeName: settings.name, + viewToShow: PrinterSelectView(), + ); + case SettingsPrinterEncodingRoute: + return _getPageRoute( + routeName: settings.name, + viewToShow: PrinterEncodingView(), + ); + case SettingsPrinterPaperRoute: + return _getPageRoute( + routeName: settings.name, + viewToShow: PrinterPaperView(), + ); case CloseDayShowRoute: CloseDayData data = settings.arguments as CloseDayData; return _getPageRoute( diff --git a/lib/core/services/ApiService.dart b/lib/core/services/ApiService.dart index 2d67aa9..e88c0ab 100644 --- a/lib/core/services/ApiService.dart +++ b/lib/core/services/ApiService.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:aman_kassa_flutter/core/base/base_service.dart'; +import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart'; import 'package:aman_kassa_flutter/redux/state/user_state.dart'; import 'package:aman_kassa_flutter/redux/store.dart'; import 'package:aman_kassa_flutter/views/login/login_view.dart'; @@ -17,12 +18,14 @@ import '../models/auth_response.dart'; import 'package:http/http.dart' as http; -/// The service responsible for networking requests +/// The service responsible fworking requests class ApiService extends BaseService { static const test_host = 'https://kassa-test.aman.com.kz'; static const test_endpoint = '$test_host/ru/api/v2'; static const host = 'https://kassa.aman.com.kz'; static const endpoint = '$host/ru/api/v2'; + + static const pos_endpoint = '$test_host/api'; final NavigatorService _navigatorService = locator(); final DialogService _dialogService = locator(); @@ -63,6 +66,12 @@ class ApiService extends BaseService { return Response.fromJsonDynamic(json.decode(response)); } + Future halykPosToken(String token, login, password) async { + Map requestBody = {'login': login, 'password': password}; + var response = await requestFormData('/getpostoken', requestBody, bodyEntry: true, posEndPoint: true, statusCheck: false); + return HalykPosSession.fromJson(jsonDecode(response)); + } + Future> money(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/money', requestBody); @@ -124,15 +133,17 @@ class ApiService extends BaseService { } - Future requestFormData(String point, Map requestBody, { bool statusCheck = true } ) async { + Future requestFormData(String point, Map requestBody, { bool statusCheck = true, bool bodyEntry = false, bool posEndPoint= false } ) async { DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); Map headers = { - HttpHeaders.contentTypeHeader: "multipart/form-data", + HttpHeaders.contentTypeHeader: bodyEntry ? "application/json" : "multipart/form-data", HttpHeaders.cacheControlHeader: "no-cache" }; + + if(Platform.isAndroid) { AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; headers.addAll({ @@ -152,15 +163,27 @@ class ApiService extends BaseService { String url = '$endpoint$point'; if(this._test) { url = '$test_endpoint$point'; + if(posEndPoint){ + url = '$pos_endpoint$point'; + } } var uri = Uri.parse(url); - var request = http.MultipartRequest('POST', uri) - ..headers.addAll(headers) - ..fields.addAll(requestBody); - var response = await request.send(); + String body; + + if(bodyEntry) { + http.Response res = await http.post(uri, body: jsonEncode(requestBody), headers: headers ); + body = res.body; + } else { + var request = http.MultipartRequest('POST', uri) + ..headers.addAll(headers) + ..fields.addAll(requestBody); + var response = await request.send(); + body = await response.stream.bytesToString(); + } + + - String body = await response.stream.bytesToString(); if(statusCheck) { //Проверка на авторизованный запрос, необязательный параметр Response check = Response.fromJsonDynamic(json.decode(body)); if (!check.operation && ( [401,402,403,412].contains(check.status) ) ) { diff --git a/lib/core/services/BankService.dart b/lib/core/services/BankService.dart index dea5551..8816f27 100644 --- a/lib/core/services/BankService.dart +++ b/lib/core/services/BankService.dart @@ -1,12 +1,17 @@ import 'dart:convert'; import 'package:aman_kassa_flutter/core/base/base_service.dart'; +import 'package:aman_kassa_flutter/core/locator.dart'; import 'package:aman_kassa_flutter/core/models/aman_dao.dart'; import 'package:aman_kassa_flutter/core/models/close_day_data.dart'; +import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart'; +import 'package:aman_kassa_flutter/core/models/response.dart'; import 'package:aman_kassa_flutter/core/models/transaction_item.dart'; +import 'package:aman_kassa_flutter/core/services/ApiService.dart'; import 'package:flutter/services.dart'; import 'package:intl/intl.dart'; class BankService extends BaseService { + final ApiService _api = locator(); static const String _url = 'http://195.200.74.83:5000'; final MethodChannel _channel = MethodChannel('channel:com.amanKassa/bank'); @@ -23,18 +28,18 @@ class BankService extends BaseService { return int.parse(result) ?? 0; } - Future imei() async { - String result; + Future renewToken({String token, String login, String password}) async { + HalykPosSession result; try { - result = await _channel.invokeMethod('imei'); + result = await _api.halykPosToken(token, login, password); } catch (e, stack) { log.e("BankService", e, stack); - result = '0'; } - log.i(result); return result; } + + Future init() async { try { String response = await _channel.invokeMethod('init', { diff --git a/lib/core/services/DataService.dart b/lib/core/services/DataService.dart index c1c8e27..85f286e 100644 --- a/lib/core/services/DataService.dart +++ b/lib/core/services/DataService.dart @@ -9,6 +9,7 @@ import 'package:aman_kassa_flutter/core/locator.dart'; import 'package:aman_kassa_flutter/core/models/calc_model.dart'; import 'package:aman_kassa_flutter/core/models/card_data.dart'; import 'package:aman_kassa_flutter/core/models/check_data.dart'; +import 'package:aman_kassa_flutter/core/models/check_image_modal.dart'; import 'package:aman_kassa_flutter/core/models/check_item.dart'; import 'package:aman_kassa_flutter/core/models/product_dao.dart'; import 'package:aman_kassa_flutter/core/models/response.dart'; @@ -206,17 +207,26 @@ class DataService extends BaseService { // log.i('response operation: ${response.operation}'); if (response.status == 200 && response.operation == true) { User user = Redux.store.state.userState.user; + //check compare + String check = response?.body['check']; + var checkText = response?.body['check_text']; + CheckImageModal imageModal = new CheckImageModal( base64Data: check, textData: checkText !=null ? jsonEncode(checkText) : null ); + // journal analyze dynamic journal = response?.body['journal']; - String url = response?.body['link']; int checkNum = journal['check_num']; var summ = journal['summ']; + // short url + String url = response?.body['link']; + // total double total = summ != null ? double.parse(summ.toString()) : 0.0; + + //insert data to db this.insertVoucher( user: user, name: 'Чек №$checkNum', data: data, - base64Data: check, + base64Data: jsonEncode(imageModal.toJson()), total: total, url: url, type: operationType == OperationTypeReturn diff --git a/lib/redux/actions/bank_actions.dart b/lib/redux/actions/bank_actions.dart index b27c1cf..705bc4f 100644 --- a/lib/redux/actions/bank_actions.dart +++ b/lib/redux/actions/bank_actions.dart @@ -1,4 +1,5 @@ +import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart'; import 'package:aman_kassa_flutter/redux/state/bank_state.dart'; import 'package:meta/meta.dart'; import 'package:redux/redux.dart'; @@ -17,3 +18,9 @@ ThunkAction saveData(String login, String password) { store.dispatch(SetBankStateAction(BankState(login: login, password: password))); }; } + +ThunkAction setHalykSession(HalykPosSession session) { + return (Store store) async { + store.dispatch(SetBankStateAction(BankState(session: session))); + }; +} diff --git a/lib/redux/actions/setting_actions.dart b/lib/redux/actions/setting_actions.dart index da4953b..2a003fe 100644 --- a/lib/redux/actions/setting_actions.dart +++ b/lib/redux/actions/setting_actions.dart @@ -3,7 +3,7 @@ import 'package:aman_kassa_flutter/redux/state/setting_state.dart'; import 'package:meta/meta.dart'; import 'package:redux/redux.dart'; import 'package:redux_thunk/redux_thunk.dart'; - +import 'package:flutter_bluetooth_basic/src/bluetooth_device.dart'; import '../store.dart'; @immutable @@ -23,4 +23,40 @@ ThunkAction changeTradeTypeFromSetting(String tradeType) { return (Store store) async { store.dispatch(SetSettingStateAction(SettingState(tradeType: tradeType ))); }; +} + +ThunkAction changePinCodeFromSetting(String pinCode) { + return (Store store) async { + store.dispatch(SetSettingStateAction(SettingState(pinCode: pinCode))); + }; +} + +ThunkAction changePinLockedFromSetting(bool locked) { + return (Store store) async { + store.dispatch(SetSettingStateAction(SettingState(pinLocked: locked))); + }; +} + +ThunkAction changePinSkipFromSetting(bool skip) { + return (Store store) async { + store.dispatch(SetSettingStateAction(SettingState(pinSkip: skip))); + }; +} + +ThunkAction selectPrinterFromSetting(BluetoothDevice device) { + return (Store store) async { + store.dispatch(SetSettingStateAction(SettingState(printerBT: device ))); + }; +} + +ThunkAction selectPrinterEncodingFromSetting(String encoding) { + return (Store store) async { + store.dispatch(SetSettingStateAction(SettingState(printerEncoding: encoding ))); + }; +} + +ThunkAction selectPrinterPaperSizeFromSetting(String paperSize) { + return (Store store) async { + store.dispatch(SetSettingStateAction(SettingState(printerPaperSize: paperSize ))); + }; } \ No newline at end of file diff --git a/lib/redux/actions/user_actions.dart b/lib/redux/actions/user_actions.dart index 048b49d..72194e3 100644 --- a/lib/redux/actions/user_actions.dart +++ b/lib/redux/actions/user_actions.dart @@ -72,7 +72,7 @@ Future logoutAction(Store store) async { UserState( isLoading: false, isAuthenticated: false, - user: User(), + user: User() ), ), ); diff --git a/lib/redux/constants/setting_const.dart b/lib/redux/constants/setting_const.dart index 787527a..ac922ea 100644 --- a/lib/redux/constants/setting_const.dart +++ b/lib/redux/constants/setting_const.dart @@ -3,4 +3,17 @@ const String SettingModeCalc = 'calcMode'; const String SettingTradeTypeGood = 'g'; -const String SettingTradeTypeService = 's'; \ No newline at end of file +const String SettingTradeTypeService = 's'; + + +const String SettingPrinterEncodingCp866 = 'cp866'; +const String SettingPrinterEncodingWin1251 = 'windows-1251'; +const String SettingPrinterEncodingImage = 'image'; + +const String SettingPrinterPaperM58 = '58mm'; +const String SettingPrinterPaperM80 = '80mm'; + + + + + diff --git a/lib/redux/reducers/bank_reducer.dart b/lib/redux/reducers/bank_reducer.dart index 174c126..c881809 100644 --- a/lib/redux/reducers/bank_reducer.dart +++ b/lib/redux/reducers/bank_reducer.dart @@ -3,5 +3,5 @@ import 'package:aman_kassa_flutter/redux/state/bank_state.dart'; bankReducer(BankState prevState, SetBankStateAction action) { final payload = action.bankState; - return prevState.copyWith(login: payload.login, password: payload.password); + return prevState.copyWith(login: payload.login, password: payload.password, session: payload.session); } diff --git a/lib/redux/reducers/setting_reducer.dart b/lib/redux/reducers/setting_reducer.dart index 5e76b10..b9f81ad 100644 --- a/lib/redux/reducers/setting_reducer.dart +++ b/lib/redux/reducers/setting_reducer.dart @@ -5,6 +5,12 @@ settingReducer(SettingState prevState, SetSettingStateAction action) { final payload = action.settingState; return prevState.copyWith( mode: payload.mode, - tradeType: payload.tradeType + tradeType: payload.tradeType, + pinCode: payload.pinCode, + pinLocked: payload.pinLocked, + pinSkip: payload.pinSkip, + printerBT: payload.printerBT, + printerEncoding: payload.printerEncoding, + printerPaperSize: payload.printerPaperSize, ); } diff --git a/lib/redux/state/bank_state.dart b/lib/redux/state/bank_state.dart index c7efeb0..ad8ad3d 100644 --- a/lib/redux/state/bank_state.dart +++ b/lib/redux/state/bank_state.dart @@ -1,3 +1,4 @@ +import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart'; import 'package:aman_kassa_flutter/redux/constants/setting_const.dart'; import 'package:meta/meta.dart'; @@ -5,24 +6,29 @@ import 'package:meta/meta.dart'; class BankState { final String login; final String password; + final HalykPosSession session; - BankState({this.login, this.password}); + BankState({this.login, this.password, this.session,}); //read hive factory BankState.initial(BankState payload) { return BankState( login: payload?.login, - password: payload?.password); + password: payload?.password, + session: payload?.session + ); } //write hive BankState copyWith({ @required login, @required password, + @required session, }) { return BankState( login: login ?? this.login, password: password ?? this.password, + session: session ?? this.session ); } diff --git a/lib/redux/state/setting_state.dart b/lib/redux/state/setting_state.dart index dd5bb1a..91a9edb 100644 --- a/lib/redux/state/setting_state.dart +++ b/lib/redux/state/setting_state.dart @@ -1,28 +1,58 @@ import 'package:aman_kassa_flutter/redux/constants/setting_const.dart'; import 'package:meta/meta.dart'; +import 'package:flutter_bluetooth_basic/src/bluetooth_device.dart'; @immutable class SettingState { final String mode; final String tradeType; + final String pinCode; + final bool pinLocked; + final bool pinSkip; + final BluetoothDevice printerBT; + final String printerEncoding; + final String printerPaperSize; - SettingState({this.mode, this.tradeType}); + + SettingState({this.mode, this.tradeType, this.pinCode, this.pinLocked, this.pinSkip, this.printerBT, + this.printerEncoding, + this.printerPaperSize}); //read hive factory SettingState.initial(SettingState payload) { return SettingState( mode: payload?.mode ?? SettingModeKassa, - tradeType: payload?.tradeType ?? SettingTradeTypeGood); + tradeType: payload?.tradeType ?? SettingTradeTypeGood, + pinCode: payload?.pinCode ?? null, + pinLocked: true, + pinSkip: false, + printerBT: payload?.printerBT ?? null, + printerEncoding: + payload?.printerEncoding ?? SettingPrinterEncodingCp866, + printerPaperSize: payload?.printerPaperSize ?? SettingPrinterPaperM58 + ); } //write hive SettingState copyWith({ @required mode, @required tradeType, + @required pinCode, + @required pinLocked, + @required pinSkip, + @required printerBT, + @required printerEncoding, + @required printerPaperSize, }) { return SettingState( mode: mode ?? this.mode, tradeType: tradeType ?? this.tradeType, + pinCode: pinCode ?? this.pinCode, + pinLocked: pinLocked ?? this.pinLocked, + pinSkip: pinSkip ?? this.pinSkip, + printerBT: printerBT ?? this.printerBT, + printerEncoding: printerEncoding ?? this.printerEncoding, + printerPaperSize: printerPaperSize ?? this.printerPaperSize ); } @@ -31,11 +61,28 @@ class SettingState { ? SettingState( tradeType: json['tradeType'], mode: json['mode'], + pinCode: json['pinCode'], + pinLocked: json['pinLocked'], + pinSkip: json['pinSkip'], + printerEncoding: json['printerEncoding'], + printerPaperSize: json['printerPaperSize'], + printerBT: json['printerBT'] != null + ? BluetoothDevice.fromJson(json['printerBT']) + : null, ) : null; } dynamic toJson() { - return {"tradeType": tradeType, "mode": mode}; + return { + "tradeType": tradeType, + "mode": mode, + "pinCode": pinCode, + "pinLocked" : pinLocked, + "pinSkip" : pinSkip, + "printerBT": printerBT != null ? printerBT.toJson() : null, + "printerEncoding": printerEncoding, + "printerPaperSize": printerPaperSize, + }; } } diff --git a/lib/redux/state/user_state.dart b/lib/redux/state/user_state.dart index d7a1a85..6dbf02e 100644 --- a/lib/redux/state/user_state.dart +++ b/lib/redux/state/user_state.dart @@ -16,6 +16,7 @@ class UserState { final Smena smena; final Money money; + UserState( {this.isError, this.isLoading, @@ -26,7 +27,8 @@ class UserState { this.user, this.loginFormMessage, this.smena, - this.money}); + this.money, + }); factory UserState.initial(UserState payload) => UserState( isLoading: false, @@ -73,7 +75,8 @@ class UserState { user: User.fromJson(json['user']), authenticateType: json['authenticateType'], login: json['login'], - password: json['password']) + password: json['password'], + ) : null; } diff --git a/lib/views/check/image_show_container.dart b/lib/views/check/image_show_container.dart index 9a58721..de281d5 100644 --- a/lib/views/check/image_show_container.dart +++ b/lib/views/check/image_show_container.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:aman_kassa_flutter/core/entity/Voucher.dart'; import 'package:aman_kassa_flutter/core/locator.dart'; +import 'package:aman_kassa_flutter/core/models/check_image_modal.dart'; import 'package:aman_kassa_flutter/core/models/aman_dao.dart'; import 'package:aman_kassa_flutter/core/models/card_data.dart'; import 'package:aman_kassa_flutter/core/models/dialog_models.dart'; @@ -9,31 +10,109 @@ import 'package:aman_kassa_flutter/core/route_names.dart'; import 'package:aman_kassa_flutter/core/services/BankService.dart'; import 'package:aman_kassa_flutter/core/services/dialog_service.dart'; import 'package:aman_kassa_flutter/core/services/navigator_service.dart'; +import 'package:aman_kassa_flutter/redux/constants/setting_const.dart'; +import 'package:aman_kassa_flutter/redux/state/setting_state.dart'; +import 'package:aman_kassa_flutter/redux/store.dart'; import 'package:aman_kassa_flutter/shared/app_colors.dart'; import 'package:aman_kassa_flutter/shared/ui_helpers.dart'; +import 'package:aman_kassa_flutter/views/settings/printer/PrinterTest.dart'; import 'package:aman_kassa_flutter/views/payment/payment_view.dart'; import 'package:aman_kassa_flutter/widgets/fields/busy_button_icon.dart'; +import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart'; +import 'package:esc_pos_utils/esc_pos_utils.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:esys_flutter_share/esys_flutter_share.dart'; import 'package:url_launcher/url_launcher.dart'; -class ImageShowContainer extends StatelessWidget { - final ImageShowModel data; +class ImageShowContainer extends StatefulWidget { + final ImageShowModel showModel; - ImageShowContainer(this.data); + ImageShowContainer(this.showModel); + + @override + _ImageShowContainerState createState() => _ImageShowContainerState(); +} + +class _ImageShowContainerState extends State { + final PrinterBluetoothManager printerManager = PrinterBluetoothManager(); + final DialogService _dialogService = locator(); + final BluetoothDevice printerBtDevice = Redux.store.state.settingState.printerBT; + + bool _printing = false; + + void _print() async { + final SettingState state = Redux.store.state.settingState; + if(state.printerBT == null) { + _dialogService.showDialog(description: 'Укажите в настройках принтер для печати чеков'); + return; + } + + setState(() { + _printing = true; + }); + try { + printerManager.selectPrinter(PrinterBluetooth(state.printerBT)); + PaperSize paper = state.printerPaperSize == SettingPrinterPaperM80 + ? PaperSize.mm80 + : PaperSize.mm58; + if (SettingPrinterEncodingImage == state.printerEncoding) { + final PosPrintResult res = await printerManager.printTicket( + await printImageCheck(paper, widget.showModel.data.base64Data), + chunkSizeBytes: 3096, + queueSleepTimeMs: 50); + if (res.value != 1) { + _dialogService.showDialog(description: res.msg); + } + } else { + final PosPrintResult res = await printerManager.printTicket( + await printTextCheck( + paper, state.printerEncoding, + jsonDecode(widget.showModel.data.textData)), + chunkSizeBytes: 3096, + queueSleepTimeMs: 50); + if (res.value != 1) { + _dialogService.showDialog(description: res.msg); + } + } + } finally { + setState(() { + _printing = false; + }); + } + } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( //backgroundColor: fillColor, - title: Text(data.title), + title: Text(widget.showModel.title), + actions: [ + if(_printing) + Padding( + padding: const EdgeInsets.only(right: 8.0), + child: SizedBox( + width: 36.0, + child: Center( + child: CircularProgressIndicator( + strokeWidth: 2, + valueColor: new AlwaysStoppedAnimation( + whiteColor), + ), + ), + ), + ) + else + IconButton(icon: Icon(Icons.print), onPressed: _print) + ], ), body: ListView( - children: [imageFromBase64String(data.data)], + children: [imageFromBase64String(widget.showModel.data.base64Data)], ), - floatingActionButton: MyFloatingActionButton(data), + floatingActionButton: MyFloatingActionButton(widget.showModel), ); } } @@ -46,7 +125,7 @@ Padding imageFromBase64String(String base64String) { } class ImageShowModel { - final String data; + final CheckImageModal data; final String title; final String url; final CardData cardData; @@ -68,93 +147,71 @@ class _MyFloatingActionButtonState extends State { NavigatorService _navigatorService = locator(); + double sheetHeight = 260; + + @override Widget build(BuildContext context) { - if (showFab) { - return Column( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - if (widget.data.cardData != null && widget.data.cardData.transactionType == "payment") FloatingActionButton( - backgroundColor: redColor, - child: Icon( - Icons.settings_backup_restore, - color: whiteColor, - ), - onPressed: () { - _navigatorService.replace(HomeViewRoute); - PaymentModel model = new PaymentModel(voucher: widget.data.voucher, cardData: widget.data.cardData); - _navigatorService.push(PaymentNfcViewRoute, - arguments: model); - }, - heroTag: null, - ) else SizedBox( - height: 0, - ), - SizedBox( - height: 10, - ), - FloatingActionButton( - child: Icon(Icons.share), - onPressed: () { - var bottomSheetController = showBottomSheet( - context: context, - builder: (bottomSheetContext) => Container( - padding: const EdgeInsets.symmetric(horizontal: 10.0), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.all(Radius.circular(15)), - boxShadow: [ - BoxShadow( - blurRadius: 10, - color: Colors.grey[300], - spreadRadius: 5) - ]), - height: 260, - child: Column( - children: [ - verticalSpaceSmall, - BusyButtonIcon( - title: 'WhatsApp', - onPressed: callWhatsApp, - mainColor: greenColor, - icon: MdiIcons.whatsapp, - enabled: widget.data.url != null, - ), - verticalSpaceSmall, - BusyButtonIcon( - title: 'QR-код чека', - onPressed: qrGenerate, - mainColor: primaryColor, - icon: MdiIcons.qrcode, - enabled: widget.data.url != null, - ), - verticalSpaceSmall, - BusyButtonIcon( - title: 'Поделиться', - onPressed: shareFile, - mainColor: yellowColor, - icon: Icons.share, - ), - ], - ))); - showFloatingActionButton(false); - bottomSheetController.closed.then((value) { - showFloatingActionButton(true); - }); - }, - ), - ], - ); - } else { - return Container(); - } + + + return showFab + ? FloatingActionButton( + child: Icon(Icons.share), + onPressed: () { + var bottomSheetController = showBottomSheet( + context: context, + builder: (bottomSheetContext) => Container( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(15)), + boxShadow: [ + BoxShadow( + blurRadius: 10, + color: Colors.grey[300], + spreadRadius: 5) + ]), + height: sheetHeight, + child: Column( + children: [ + verticalSpaceSmall, + BusyButtonIcon( + title: 'WhatsApp', + onPressed: callWhatsApp, + mainColor: greenColor, + icon: MdiIcons.whatsapp, + enabled: widget.data.url != null, + ), + verticalSpaceSmall, + BusyButtonIcon( + title: 'QR-код чека', + onPressed: qrGenerate, + mainColor: primaryColor, + icon: MdiIcons.qrcode, + enabled: widget.data.url != null, + ), + verticalSpaceSmall, + BusyButtonIcon( + title: 'Поделиться', + onPressed: shareFile, + mainColor: redColor, + icon: Icons.share, + ), + ], + ))); + bottomSheetController.closed.then((value) { + showFloatingActionButton(true); + }); + }, + ) + : Container(); } void shareFile() async { try { await Share.file('Aman Kassa', 'aman_kassa_check.png', - base64Decode(widget.data.data), 'image/png'); + base64Decode(widget.data.data.base64Data), 'image/png'); } catch (e) { print('error: $e'); } @@ -163,7 +220,7 @@ class _MyFloatingActionButtonState extends State { void qrGenerate() async { _navigatorService.push(QrViewRoute, arguments: - ImageShowModel(data: widget.data.url, title: 'Спасибо за покупку')); + ImageShowModel(url: widget.data.url, title: 'Спасибо за покупку')); } void callWhatsApp() async { diff --git a/lib/views/history/history_view.dart b/lib/views/history/history_view.dart index 7e5d6dd..7f0467c 100644 --- a/lib/views/history/history_view.dart +++ b/lib/views/history/history_view.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:aman_kassa_flutter/core/entity/Voucher.dart'; import 'package:aman_kassa_flutter/core/locator.dart'; +import 'package:aman_kassa_flutter/core/models/check_image_modal.dart'; import 'package:aman_kassa_flutter/core/models/card_data.dart'; import 'package:aman_kassa_flutter/core/models/check_data.dart'; import 'package:aman_kassa_flutter/core/models/close_day_data.dart'; @@ -76,7 +77,13 @@ class _HistoryViewState extends State { cardData = checkData.cardData; } - + String base64Data = voucher.base64Data; + CheckImageModal checkImageData; + if(base64Data !=null && base64Data.startsWith('{')){ + checkImageData = CheckImageModal.fromJson(jsonDecode(base64Data)); + } else { + checkImageData = new CheckImageModal(base64Data: base64Data); + } return ListTile( onTap: () { @@ -86,7 +93,7 @@ class _HistoryViewState extends State { } else { _navigatorService.push(ImageShowRoute, arguments: ImageShowModel( - data: voucher.base64Data, + data: checkImageData, title: voucher.name, url: voucher.url, cardData: cardData, diff --git a/lib/views/home/components/popup_menu.dart b/lib/views/home/components/popup_menu.dart index 9b68189..89baea3 100644 --- a/lib/views/home/components/popup_menu.dart +++ b/lib/views/home/components/popup_menu.dart @@ -34,6 +34,8 @@ class _PopupMenuState extends State { // const Choice(title: 'Bank', icon: Icons.text_fields, command: 'bank'), if (version >= 24 ) const Choice(title: 'Настройка HalykPos', icon: Icons.phonelink_lock_outlined, command: 'tap2phone'), + const Choice(title: 'Настройки', icon: Icons.settings, command: 'settings'), + const Choice(title: 'Принтер', icon: Icons.print, command: 'print'), const Choice(title: 'Выйти', icon: Icons.exit_to_app, command: 'exit') ]; setState(() { diff --git a/lib/views/home/home_view.dart b/lib/views/home/home_view_m.dart similarity index 51% rename from lib/views/home/home_view.dart rename to lib/views/home/home_view_m.dart index ec2fbcd..c2b7baa 100644 --- a/lib/views/home/home_view.dart +++ b/lib/views/home/home_view_m.dart @@ -6,31 +6,33 @@ import 'package:aman_kassa_flutter/core/route_names.dart'; import 'package:aman_kassa_flutter/core/services/ApiService.dart'; import 'package:aman_kassa_flutter/core/services/DataService.dart'; import 'package:aman_kassa_flutter/core/services/navigator_service.dart'; +import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart'; import 'package:aman_kassa_flutter/redux/actions/user_actions.dart'; import 'package:aman_kassa_flutter/redux/constants/setting_const.dart'; import 'package:aman_kassa_flutter/redux/state/setting_state.dart'; import 'package:aman_kassa_flutter/redux/store.dart'; import 'package:aman_kassa_flutter/shared/app_colors.dart'; import 'package:aman_kassa_flutter/views/home/components/header_title.dart'; +import 'package:aman_kassa_flutter/views/lockscreen/passcodescreen.dart'; import 'package:aman_kassa_flutter/widgets/loader/Dialogs.dart'; - import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:logger/logger.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import './tabs/KassaTab.dart'; import './tabs/AdditionalTab.dart'; import './tabs/CalculatorTab.dart'; import './components/popup_menu.dart'; -import 'components/bottom_bar.dart'; +import './components/bottom_bar.dart'; class HomeView extends StatefulWidget { @override _HomeViewState createState() => _HomeViewState(); } -class _HomeViewState extends State { +class _HomeViewState extends State with WidgetsBindingObserver { Logger log = getLogger('HomeView'); PageController pageController; int selectedTabIndex; @@ -39,17 +41,101 @@ class _HomeViewState extends State { NavigatorService _navigatorService = locator(); final GlobalKey _keyLoader = new GlobalKey(); + final lastKnownStateKey = 'lastKnownStateKey'; + final backgroundedTimeKey = 'backgroundedTimeKey'; + final pinLockMillis = 2000; // 2 seconds + + Future _paused() async { + final sp = await SharedPreferences.getInstance(); + sp.setInt(lastKnownStateKey, AppLifecycleState.paused.index); + } + + Future _inactive() async { + final sp = await SharedPreferences.getInstance(); + final prevState = sp.getInt(lastKnownStateKey); + final prevStateIsNotPaused = prevState != null && + AppLifecycleState.values[prevState] != AppLifecycleState.paused; + final bool pinIsExist = Redux.store.state.settingState?.pinCode?.isNotEmpty; + final bool pinSkipped = Redux.store.state.settingState.pinSkip; + print('prevStateIsNotPaused=$prevStateIsNotPaused, pinIsExist=$pinIsExist, pinSkipped=$pinSkipped'); + if(prevStateIsNotPaused && pinSkipped == false && pinIsExist == true) { + // save App backgrounded time to Shared preferences + sp.setInt(backgroundedTimeKey, DateTime.now().millisecondsSinceEpoch); + } +// update previous state as inactive + sp.setInt(lastKnownStateKey, AppLifecycleState.inactive.index); + } + + Future _resumed() async { + final sp = await SharedPreferences.getInstance(); + final bgTime = sp.getInt(backgroundedTimeKey) ?? 0; + final allowedBackgroundTime = bgTime + pinLockMillis; + final shouldShowPIN = DateTime.now().millisecondsSinceEpoch > allowedBackgroundTime; + if(shouldShowPIN && bgTime > 0) { + await Redux.store.dispatch(changePinLockedFromSetting(true)); + pushToLockScreen(); + } + sp.remove(backgroundedTimeKey); // clean + sp.setInt(lastKnownStateKey, AppLifecycleState.resumed.index);// previous state + } + + void pushToLockScreen() { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => + WillPopScope( + onWillPop: () async { + return false; + }, + child: PassCodeScreen( title: 'Безопасность',) + ) + )); + } + + _checkLockPin () async { + final bool pinIsExist = Redux.store.state.settingState?.pinCode?.isNotEmpty; + final bool pinLocked = Redux.store.state.settingState?.pinLocked; + final sp = await SharedPreferences.getInstance(); + sp.remove(backgroundedTimeKey); + sp.setInt(lastKnownStateKey, AppLifecycleState.resumed.index);// previous state + if ( pinIsExist == true && pinLocked == true ) { + await Future.delayed(Duration(milliseconds: 50)); + pushToLockScreen(); + } + } + @override void initState() { super.initState(); + WidgetsBinding.instance.addObserver(this); selectedTabIndex = 0; pageController = new PageController(initialPage: selectedTabIndex); Redux.store.dispatch(checkSmena); _dataService.checkDbFill(Redux.store.state.userState.user); + _checkLockPin(); + } + + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + super.didChangeAppLifecycleState(state); + print('state = $state'); + switch(state) { + case AppLifecycleState.resumed: + _resumed(); + break; + case AppLifecycleState.paused: + _paused(); + break; + case AppLifecycleState.inactive: + _inactive(); + break; + default: + break; + } } @override void dispose() { + WidgetsBinding.instance.removeObserver(this); pageController.dispose(); super.dispose(); } @@ -65,6 +151,10 @@ class _HomeViewState extends State { Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); } else if (choice.command == 'infokkm') { _navigatorService.push(InfoKkmViewRoute); + } else if (choice.command == 'settings') { + _navigatorService.push(SettingsViewRoute); + } else if (choice.command == 'print') { + _navigatorService.push(SettingsPrinterRoute); } else if (choice.command == 'bank') { _navigatorService.push(BankViewRoute); } else if (choice.command == 'tap2phone') { diff --git a/lib/views/home/tabs/KassaTab.dart b/lib/views/home/tabs/KassaTab.dart index 096c09d..d4075ba 100644 --- a/lib/views/home/tabs/KassaTab.dart +++ b/lib/views/home/tabs/KassaTab.dart @@ -6,6 +6,7 @@ import 'package:aman_kassa_flutter/core/services/DataService.dart'; import 'package:aman_kassa_flutter/core/services/dialog_service.dart'; import 'package:aman_kassa_flutter/core/services/navigator_service.dart'; import 'package:aman_kassa_flutter/redux/actions/kassa_actions.dart'; +import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart'; import 'package:aman_kassa_flutter/redux/constants/operation_const.dart'; import 'package:aman_kassa_flutter/redux/constants/setting_const.dart'; import 'package:aman_kassa_flutter/redux/state/kassa_state.dart'; @@ -183,6 +184,7 @@ class KassaTab extends StatelessWidget { Future scan() async { try { + await Redux.store.dispatch(changePinSkipFromSetting(true)); var options = ScanOptions(strings: { "cancel": 'Отмена', "flash_on": 'Вкл фонарик', @@ -217,7 +219,7 @@ class KassaTab extends StatelessWidget { List goods = await _dataService.getGoodsByBarcode(barcode: barcode); if (goods != null && goods.isNotEmpty) { - Redux.store.dispatch(addProductToKassaItems(goods.first, dataMatrix)); + await Redux.store.dispatch(addProductToKassaItems(goods.first, dataMatrix)); } else { _dialogService.showDialog( description: 'Товар не найден: $barcode'); @@ -238,6 +240,8 @@ class KassaTab extends StatelessWidget { result.rawContent = 'Unknown error: $e'; _dialogService.showDialog(description: 'Неизвестная ошибка: $e'); } + } finally { + await Redux.store.dispatch(changePinSkipFromSetting(false)); } } diff --git a/lib/views/lockscreen/passcodescreen.dart b/lib/views/lockscreen/passcodescreen.dart new file mode 100644 index 0000000..b75234d --- /dev/null +++ b/lib/views/lockscreen/passcodescreen.dart @@ -0,0 +1,79 @@ +import 'package:aman_kassa_flutter/core/route_names.dart'; +import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart'; +import 'package:aman_kassa_flutter/redux/store.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_lock_screen/flutter_lock_screen.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:aman_kassa_flutter/core/locator.dart'; +import 'package:aman_kassa_flutter/core/services/navigator_service.dart'; + +class PassCodeScreen extends StatefulWidget { + PassCodeScreen({Key key, this.title}) : super(key: key); + + final String title; + + @override + _PassCodeScreenState createState() => new _PassCodeScreenState(); +} + +class _PassCodeScreenState extends State { + // bool isFingerprint = false; + NavigatorService _navigatorService = locator(); + final backgroundedTimeKey = 'backgroundedTimeKey'; + + + // Future biometrics() async { + // final LocalAuthentication auth = new LocalAuthentication(); + // bool authenticated = false; + // + // try { + // authenticated = await auth.authenticateWithBiometrics( + // localizedReason: 'Scan your fingerprint to authenticate', + // useErrorDialogs: true, + // stickyAuth: false); + // } on PlatformException catch (e) { + // print(e); + // } + // if (!mounted) return; + // if (authenticated) { + // setState(() { + // isFingerprint = true; + // }); + // } + // } + + @override + Widget build(BuildContext context) { + var myPass = []; + String _pinCode = Redux.store.state.settingState.pinCode; + for (var i = 0; i < _pinCode.length; i++) { + myPass.add(int.parse(_pinCode[i])); + } + return LockScreen( + title: "Введите ПИН-код", + passLength: myPass.length, + bgImage: "assets/images/secBg.jpg", + // fingerPrintImage: "assets/images/finger.png", + // showFingerPass: true, + // fingerFunction: biometrics, + // fingerVerify: isFingerprint, + borderColor: Colors.white, + showWrongPassDialog: true, + wrongPassContent: "Неверный код, повторите попытку", + wrongPassTitle: "Aman Kassa", + wrongPassCancelButtonText: "Отмена", + passCodeVerify: (passcode) async { + for (int i = 0; i < myPass.length; i++) { + if (passcode[i] != myPass[i]) { + return false; + } + } + + return true; + }, + onSuccess: () { + Redux.store.dispatch(changePinLockedFromSetting(false)); + _navigatorService.replace(HomeViewRoute); + }); + } +} \ No newline at end of file diff --git a/lib/views/payment/payment_view.dart b/lib/views/payment/payment_view.dart index c4edfb0..70b6c8f 100644 --- a/lib/views/payment/payment_view.dart +++ b/lib/views/payment/payment_view.dart @@ -1,6 +1,9 @@ +import 'dart:convert'; import 'package:aman_kassa_flutter/core/entity/Voucher.dart'; + import 'package:aman_kassa_flutter/core/locator.dart'; import 'package:aman_kassa_flutter/core/models/calc_model.dart'; +import 'package:aman_kassa_flutter/core/models/check_image_modal.dart'; import 'package:aman_kassa_flutter/core/models/card_data.dart'; import 'package:aman_kassa_flutter/core/models/product_dao.dart'; import 'package:aman_kassa_flutter/core/models/response.dart'; @@ -281,6 +284,7 @@ class _PaymentViewState extends State { if (response.operation) { String message = response.body['message']; String check = response.body['check']; + var checkText = response.body['check_text']; String url = response?.body['link']; print('url : $url'); if (_mode == SettingModeCalc) { @@ -293,9 +297,8 @@ class _PaymentViewState extends State { Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); _navigatorService.pop(); _navigatorService.push(ImageShowRoute, - arguments: ImageShowModel(data: check, title: message, url: url)); - } else if (!response.operation && - ![401, 402, 403, 412, 500].contains(response.status)) { + arguments: ImageShowModel(data:new CheckImageModal(base64Data: check, textData: checkText !=null ? jsonEncode(checkText) : null ), title: message, url: url )); + } else if (!response.operation && ![401, 402, 403, 412, 500].contains(response.status)) { Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); _dialogService.showDialog(description: response.body['message']); } else if(!response.operation && response.body['message'] != null) { diff --git a/lib/views/payment_nfc/payment_nfc_view.dart b/lib/views/payment_nfc/payment_nfc_view.dart index 55eca12..01ecd3d 100644 --- a/lib/views/payment_nfc/payment_nfc_view.dart +++ b/lib/views/payment_nfc/payment_nfc_view.dart @@ -7,6 +7,8 @@ import 'package:aman_kassa_flutter/core/models/aman_dao.dart'; import 'package:aman_kassa_flutter/core/models/calc_model.dart'; import 'package:aman_kassa_flutter/core/models/card_data.dart'; import 'package:aman_kassa_flutter/core/models/check_data.dart'; +import 'package:aman_kassa_flutter/core/models/check_image_modal.dart'; +import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart'; import 'package:aman_kassa_flutter/core/models/product_dao.dart'; import 'package:aman_kassa_flutter/core/models/response.dart'; import 'package:aman_kassa_flutter/core/route_names.dart'; @@ -70,6 +72,19 @@ class _PaymentNfcViewState extends State { void start() async { + //Авторизация + String token = Redux.store.state.userState.user.token; + BankState bankState = Redux.store.state.bankState; + //права доступа + HalykPosSession session = await _bankService.renewToken(token: token, login: bankState.login, password: bankState.password); + log.i(session); + if ('1' == '1') { + setState(() { + status = 4; + }); + return; + } + //права доступа bool success = await _bankService.permissions(); @@ -114,8 +129,7 @@ class _PaymentNfcViewState extends State { }); return; } - //Авторизация - BankState bankState = Redux.store.state.bankState; + AmanDao authDao = await _bankService.auth( login: bankState.login, password: bankState.password); if (!authDao.success) { @@ -276,6 +290,7 @@ class _PaymentNfcViewState extends State { if (response.operation) { String message = response.body['message']; String check = response.body['check']; + var checkText = response.body['check_text']; String url = response?.body['link']; print('url : $url'); if (_mode == SettingModeCalc) { @@ -288,11 +303,11 @@ class _PaymentNfcViewState extends State { Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); _navigatorService.replace(HomeViewRoute); _navigatorService.push(ImageShowRoute, - arguments: ImageShowModel(data: check, title: message, url: url)); + arguments: ImageShowModel(data: new CheckImageModal(base64Data: check, textData: checkText !=null ? jsonEncode(checkText) : null ), title: message, url: url)); } else if (!response.operation && ![401, 402, 403, 412, 500].contains(response.status)) { Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); - _dialogService.showDialog(description: response.body['message']); + _dialogService.showDialog(description: response.body['message']); } else { Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); } @@ -332,6 +347,7 @@ class _PaymentNfcViewState extends State { if (response.operation) { String message = response.body['message']; String check = response.body['check']; + var checkText = response.body['check_text']; String url = response?.body['link']; print('url : $url'); Redux.store.dispatch(checkMoney); @@ -339,7 +355,7 @@ class _PaymentNfcViewState extends State { Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); _navigatorService.replace(HomeViewRoute); _navigatorService.push(ImageShowRoute, - arguments: ImageShowModel(data: check, title: message, url: url)); + arguments: ImageShowModel(data: new CheckImageModal(base64Data: check, textData: checkText !=null ? jsonEncode(checkText) : null ), title: message, url: url)); } else if (!response.operation && ![401, 402, 403, 412, 500].contains(response.status)) { Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); diff --git a/lib/views/qr_view/qr_view.dart b/lib/views/qr_view/qr_view.dart index de6157e..ae73426 100644 --- a/lib/views/qr_view/qr_view.dart +++ b/lib/views/qr_view/qr_view.dart @@ -27,7 +27,7 @@ class _QrViewState extends State { body: Container( child: Center( child: QrImage( - data: widget.data.data, + data: widget.data.url, version: QrVersions.auto, size: 220.0, ), diff --git a/lib/views/settings/component/setting_item.dart b/lib/views/settings/component/setting_item.dart new file mode 100644 index 0000000..7f81896 --- /dev/null +++ b/lib/views/settings/component/setting_item.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; + +class SettingItem extends StatefulWidget { + + final String name; + final String value; + final String title; + final Function onTap; + + SettingItem({Key key, this.name, this.value, this.onTap, this.title }) : super(key: key); + + @override + _SettingItemState createState() => _SettingItemState(); +} + +class _SettingItemState extends State { + @override + Widget build(BuildContext context) { + return Card( + child: ListTile( + title: Text(widget.title), + subtitle: Text.rich( + TextSpan( + text: widget.name, + style: TextStyle(fontWeight: FontWeight.w500), + children: [ + if(widget.value !=null) + TextSpan(text: ' ${widget.value}', style: TextStyle(fontStyle: FontStyle.italic)), + ], + ) + ), + trailing: Icon(Icons.chevron_right), + onTap: widget.onTap, + ), + ); + } +} \ No newline at end of file diff --git a/lib/views/settings/printer/PrinterTest.dart b/lib/views/settings/printer/PrinterTest.dart new file mode 100644 index 0000000..b3bfdff --- /dev/null +++ b/lib/views/settings/printer/PrinterTest.dart @@ -0,0 +1,229 @@ +import 'dart:convert'; +import 'dart:io'; +import 'dart:typed_data'; + +import 'package:aman_kassa_flutter/redux/constants/setting_const.dart'; +import 'package:charset_converter/charset_converter.dart'; +import 'package:esc_pos_utils/esc_pos_utils.dart'; +import 'package:flutter/services.dart'; +import 'package:image/image.dart' as Im; +import 'package:path_provider/path_provider.dart'; +import 'package:qr_flutter/qr_flutter.dart'; + +Future testTicket(PaperSize paper) async { + final Ticket ticket = Ticket(paper); + + //Uint8List encTxt11 = await CharsetConverter.encode("cp866", "Russian: Привет Мир!"); + //ticket.textEncoded(encTxt11, styles: PosStyles(codeTable: PosCodeTable.pc866_2)); + //ticket.textEncoded(encTxt11); + + // ticket.text('Special 1: àÀ', styles: PosStyles(codeTable: PosCodeTable.westEur)); //А + // ticket.text('Special 1: á'.toUpperCase(), styles: PosStyles(codeTable: PosCodeTable.westEur));// Б + // ticket.text('Special 1: â', styles: PosStyles(codeTable: PosCodeTable.westEur)); //В + // ticket.text('Special 1: ã', styles: PosStyles(codeTable: PosCodeTable.westEur));// Г + // ticket.text('Special 1: äÄ', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Д + // ticket.text('Special 1: å', styles: PosStyles(codeTable: PosCodeTable.westEur));// Е + // ticket.text('Special 1: æÆ', styles: PosStyles(codeTable: PosCodeTable.westEur));// Ж + // ticket.text('Special 1: ç', styles: PosStyles(codeTable: PosCodeTable.westEur));//З + // ticket.text('Special 1: èÈ', styles: PosStyles(codeTable: PosCodeTable.westEur)); // И + // ticket.text('Special 1: éÉ', styles: PosStyles(codeTable: PosCodeTable.westEur)); // Й + // ticket.text('Special 1: ê', styles: PosStyles(codeTable: PosCodeTable.westEur));//К + // ticket.text('Special 1: ëË', styles: PosStyles(codeTable: PosCodeTable.westEur)); // Л + // ticket.text('Special 1: ìÌ', styles: PosStyles(codeTable: PosCodeTable.westEur));// M + // ticket.text('Special 1: íÍ', styles: PosStyles(codeTable: PosCodeTable.westEur)); // Н + // ticket.text('Special 1: î', styles: PosStyles(codeTable: PosCodeTable.westEur));// О + // ticket.text('Special 1: ï', styles: PosStyles(codeTable: PosCodeTable.westEur)); // П + // ticket.text('Special 1: ð', styles: PosStyles(codeTable: PosCodeTable.westEur));// Р + // ticket.text('Special 1: ñ', styles: PosStyles(codeTable: PosCodeTable.westEur));// С + // ticket.text('Special 1: ò', styles: PosStyles(codeTable: PosCodeTable.westEur)); // Т + // ticket.text('Special 1: óÓ', styles: PosStyles(codeTable: PosCodeTable.westEur)); //У + // ticket.text('Special 1: ô', styles: PosStyles(codeTable: PosCodeTable.westEur));// Ф + // ticket.text('Special 1: õÕ', styles: PosStyles(codeTable: PosCodeTable.westEur));// Х + // ticket.text('Special 1: ö', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Ц + // ticket.text('Special 1: ÷', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Ч + // ticket.text('Special 1: ø', styles: PosStyles(codeTable: PosCodeTable.westEur));//Ш + // ticket.text('Special 1: ù', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Щ + // ticket.text('Special 1: ú', styles: PosStyles(codeTable: PosCodeTable.westEur));//Ъ + // ticket.text('Special 1: û', styles: PosStyles(codeTable: PosCodeTable.westEur));//Ы + // ticket.text('Special 1: üÜ', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Ь + // ticket.text('Special 1: ý', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Э + // ticket.text('Special 1: þ', styles: PosStyles(codeTable: PosCodeTable.westEur)); // ю + // ticket.text('Special 1: ÿß', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Я + + // Uint8List encTxt11 = await CharsetConverter.encode("cp866", "Russian: Привет Мир!"); + // //ticket.textEncoded(encTxt11, styles: PosStyles(codeTable: PosCodeTable.pc866_2)); + // ticket.textEncoded(encTxt11); + + ticket.text( + 'Regular: aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ'); + //ticket.text('Special 1: àÀ èÈ éÉ ûÛ üÜ çÇ ôÔ', styles: PosStyles(codeTable: PosCodeTable.westEur)); + //ticket.text('Special 2: blåbærgrød', styles: PosStyles(codeTable: PosCodeTable.westEur)); + + ticket.text('Bold text', styles: PosStyles(bold: true)); + ticket.text('Reverse text', styles: PosStyles(reverse: true)); + ticket.text('Underlined text', + styles: PosStyles(underline: true), linesAfter: 1); + ticket.text('Align left', styles: PosStyles(align: PosAlign.left)); + ticket.text('Align center', styles: PosStyles(align: PosAlign.center)); + ticket.text('Align right', + styles: PosStyles(align: PosAlign.right), linesAfter: 1); + + ticket.row([ + PosColumn( + text: 'col3', + width: 3, + styles: PosStyles(align: PosAlign.center, underline: true), + ), + PosColumn( + text: 'col6', + width: 6, + styles: PosStyles(align: PosAlign.center, underline: true), + ), + PosColumn( + text: 'col3', + width: 3, + styles: PosStyles(align: PosAlign.center, underline: true), + ), + ]); + + ticket.text('Text size 200%', + styles: PosStyles( + height: PosTextSize.size2, + width: PosTextSize.size2, + )); + + // Print image + //final ByteData data = await rootBundle.load('assets/images/logo.png'); + //final Uint8List bytes = data.buffer.asUint8List(); + // Print image using alternative commands + // ticket.imageRaster(image); + // ticket.imageRaster(image, imageFn: PosImageFn.graphics); + + // Print barcode + final List barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4]; + ticket.barcode(Barcode.upcA(barData)); + + + + ticket.feed(2); + + ticket.cut(); + return ticket; +} + +Future testTicketImage(PaperSize paper) async { + final Ticket ticket = Ticket(paper); + + // Print image + final ByteData byteData = await rootBundle.load('assets/images/check.png'); + final Uint8List bytes = byteData.buffer.asUint8List(); + final Im.Image imagea = Im.decodeImage(bytes); + // Using `ESC *` + //ticket.image(imagea); + // Using `GS v 0` (obsolete) + //ticket.imageRaster(imagea); + // Using `GS ( L` + ticket.imageRaster(imagea, imageFn: PosImageFn.bitImageRaster); + + + + ticket.feed(2); + + ticket.cut(); + return ticket; +} + +Future printImageCheck(PaperSize paper, String base64Src) async { + final Ticket ticket = Ticket(paper); + final Uint8List bytes = base64Decode(base64Src); + final Im.Image image = Im.decodeImage(bytes); + //ticket.imageRaster(image, imageFn: PosImageFn.bitImageRaster); + ticket.image(image); + ticket.feed(2); + ticket.cut(); + return ticket; +} + + +Future printTextCheck(PaperSize paper, String encoding, var data ) async { + final Ticket ticket = Ticket(paper); + + + + PosCodeTable codeTable; + if(encoding == SettingPrinterEncodingCp866) { + codeTable = PosCodeTable.pc866_2; + } else if(encoding == SettingPrinterEncodingWin1251) { + codeTable = PosCodeTable.wpc1251; + } + + ticket.setGlobalCodeTable(codeTable); + ticket.setGlobalFont(PosFontType.fontB); + + + String qr = data['qr']; + + + List rows = data['rows'] as List; + for(dynamic element in rows) { + var text = element['text']; + int size = element['size'] as int; + bool center = element['center'] !=null ? element['center'] as bool : false; + if(text is List) { + Uint8List firstCol = await CharsetConverter.encode(encoding, (text).first as String); + Uint8List lastCol = await CharsetConverter.encode(encoding, (text).last as String); + ticket.row([ + PosColumn( + textEncoded: firstCol, + width: 6, + styles: PosStyles(align: PosAlign.left), + ), + PosColumn( + textEncoded: lastCol, + width: 6, + styles: PosStyles(align: PosAlign.right), + ), + ]); + } else { + String line = text as String; + if(line == 'breakline') { + ticket.hr(); + } else if(line == 'br') { + ticket.emptyLines(1); + } else { + Uint8List encTxt11 = await CharsetConverter.encode(encoding, line); + ticket.textEncoded( encTxt11, styles: PosStyles( align: center ? PosAlign.center : PosAlign.left )); + } + } + } + + // Print barcode + //final List barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4]; + //ticket.barcode(Barcode.upcA(barData)); + //ticket.qrcode(qr, align: PosAlign.center); + ticket.emptyLines(1); + const double qrSize = 200; + try { + final uiImg = await QrPainter( + data: qr, + version: QrVersions.auto, + gapless: false, + ).toImageData(qrSize); + final dir = await getTemporaryDirectory(); + final pathName = '${dir.path}/qr_tmp.png'; + final qrFile = File(pathName); + final imgFile = await qrFile.writeAsBytes(uiImg.buffer.asUint8List()); + final img = Im.decodeImage(imgFile.readAsBytesSync()); + + ticket.image(img); + } catch (e) { + print(e); + } + + + + ticket.feed(2); + + ticket.cut(); + return ticket; +} \ No newline at end of file diff --git a/lib/views/settings/printer/data/settings_envi.dart b/lib/views/settings/printer/data/settings_envi.dart new file mode 100644 index 0000000..dc55d35 --- /dev/null +++ b/lib/views/settings/printer/data/settings_envi.dart @@ -0,0 +1,12 @@ +import 'package:aman_kassa_flutter/redux/constants/setting_const.dart'; + +var encoding = { + SettingPrinterEncodingCp866: "CP-866", + SettingPrinterEncodingWin1251: "Windows-1251", + SettingPrinterEncodingImage: "Big-Encoding", +}; + +var paperSize = { + SettingPrinterPaperM58: "58 мм", + SettingPrinterPaperM80: "80 мм" +}; diff --git a/lib/views/settings/printer/example/check_test.dart b/lib/views/settings/printer/example/check_test.dart new file mode 100644 index 0000000..6d0c74f --- /dev/null +++ b/lib/views/settings/printer/example/check_test.dart @@ -0,0 +1,53 @@ +var exampleJson = { + "check_text": { + "rows": [ + {"size": 14, "text": "", "center": true}, + {"size": 15, "text": "breakline", "center": true}, + {"size": 14, "text": "ТОО «Aman Systems»"}, + {"size": 14, "text": "ИИН/БИН: 180640018960"}, + {"size": 14, "text": "Сер. номер ККМ: TEST00000005"}, + {"size": 14, "text": "Регистрационный номер: 123132132323"}, + {"size": 14, "text": "Коргальджинское шоссе, д.19 оф.308"}, + {"size": 15, "text": "breakline", "center": true}, + {"size": 14, "text": "Продажа,Наличные, ", "center": true}, + {"size": 15, "text": "ФИСКАЛЬНЫЙ ЧЕК №16580", "center": true}, + {"size": 15, "text": "ФП 471369529060", "center": true}, + {"size": 15, "text": "Дата: 03.03.2021 23:16", "center": true}, + {"size": 15, "text": "breakline", "center": true}, + {"size": 14, "text": "Кассир: Амантай ИХ"}, + {"size": 14, "text": "Касса: Касса 1"}, + {"size": 15, "text": "breakline", "center": true}, + {"size": 15, "text": "br"}, + {"size": 14, "text": "1. test"}, + {"size": 14, "text": "200,00 x 1 = 200,00"}, + {"size": 10, "text": "br"}, + {"size": 15, "text": "breakline"}, + { + "size": 17, + "text": ["ИТОГО:", "200,00"] + }, + { + "size": 14, + "text": ["Наличные", "200,00"] + }, + {"size": 15, "text": "breakline"}, + {"size": 17, "text": "В том числе НДС:"}, + { + "size": 14, + "text": ["12 %", "21,43"] + }, + {"size": 14, "text": ""}, + {"size": 15, "text": "breakline"}, + {"size": 15, "text": "ОФД АО \"Транстелеком\"", "center": true}, + {"size": 15, "text": "ofd1.kz", "center": true}, + {"size": 14, "text": ""}, + {"size": 15, "text": "breakline"}, + {"size": 14, "text": "", "center": true}, + {"size": 13, "text": "порядковый номер чека:19800", "center": true}, + {"size": 14, "text": "Онлайн касса Aman", "center": true}, + {"size": 14, "text": "kassa.aman.com.kz", "center": true} + ], + "qr": + "87.255.215.94:4000/t/?i=471369529060&f=123132132323&s=200.0&t=20210303T231651" + } +}; diff --git a/lib/views/settings/printer/views/PrinterEncoding.dart b/lib/views/settings/printer/views/PrinterEncoding.dart new file mode 100644 index 0000000..8f45bac --- /dev/null +++ b/lib/views/settings/printer/views/PrinterEncoding.dart @@ -0,0 +1,94 @@ +import 'dart:async'; +import 'dart:typed_data'; +import 'dart:ui' as ui; + +import 'package:aman_kassa_flutter/core/logger.dart'; +import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart'; +import 'package:aman_kassa_flutter/redux/store.dart'; + +import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart'; +import 'package:esc_pos_utils/esc_pos_utils.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart' hide Image; +import 'package:flutter/rendering.dart'; + + +import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart'; +import 'package:intl/intl.dart'; +import 'package:logger/logger.dart'; + +import '../data/settings_envi.dart'; + + +class PrinterEncodingView extends StatefulWidget { + PrinterEncodingView({Key key, this.title}) : super(key: key); + final String title; + + @override + _PrinterEncodingViewState createState() => _PrinterEncodingViewState(); + +} + +class _PrinterEncodingViewState extends State { + + Logger _logger = getLogger('PrinterEncodingView'); + + @override + void initState() { + super.initState(); + } + + + + + + void _selectPrinter(String encoding, BuildContext context, ) async { + _logger.i(encoding); + await Redux.store.dispatch(selectPrinterEncodingFromSetting(encoding)); + Navigator.of(context).pop(false); + } + + + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Выберите кодировку'), + ), + body: ListView.builder( + itemCount: encoding.keys.length, + itemBuilder: (BuildContext _, int index) { + return InkWell( + onTap: () => _selectPrinter(encoding.keys.elementAt(index), context), + child: Column( + children: [ + Container( + height: 60, + padding: EdgeInsets.only(left: 10), + alignment: Alignment.centerLeft, + child: Row( + children: [ + Icon(Icons.sort_by_alpha_outlined), + SizedBox(width: 10), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(encoding.values.elementAt(index) ?? ''), + ], + ), + ) + ], + ), + ), + Divider(), + ], + ), + ); + }), + ); + } + +} \ No newline at end of file diff --git a/lib/views/settings/printer/views/PrinterPaperSize.dart b/lib/views/settings/printer/views/PrinterPaperSize.dart new file mode 100644 index 0000000..b028c84 --- /dev/null +++ b/lib/views/settings/printer/views/PrinterPaperSize.dart @@ -0,0 +1,94 @@ +import 'dart:async'; +import 'dart:typed_data'; +import 'dart:ui' as ui; + +import 'package:aman_kassa_flutter/core/logger.dart'; +import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart'; +import 'package:aman_kassa_flutter/redux/store.dart'; + +import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart'; +import 'package:esc_pos_utils/esc_pos_utils.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart' hide Image; +import 'package:flutter/rendering.dart'; + + +import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart'; +import 'package:intl/intl.dart'; +import 'package:logger/logger.dart'; + +import '../data/settings_envi.dart'; + + +class PrinterPaperView extends StatefulWidget { + PrinterPaperView({Key key, this.title}) : super(key: key); + final String title; + + @override + _PrinterEncodingViewState createState() => _PrinterEncodingViewState(); + +} + +class _PrinterEncodingViewState extends State { + + Logger _logger = getLogger('PrinterEncodingView'); + + @override + void initState() { + super.initState(); + } + + + + + + void _selectPaper(String paperSize, BuildContext context, ) async { + _logger.i(encoding); + await Redux.store.dispatch(selectPrinterPaperSizeFromSetting(paperSize)); + Navigator.of(context).pop(false); + } + + + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Выберите ширину ленты'), + ), + body: ListView.builder( + itemCount: paperSize.keys.length, + itemBuilder: (BuildContext _, int index) { + return InkWell( + onTap: () => _selectPaper(paperSize.keys.elementAt(index), context), + child: Column( + children: [ + Container( + height: 60, + padding: EdgeInsets.only(left: 10), + alignment: Alignment.centerLeft, + child: Row( + children: [ + Icon(Icons.sort_by_alpha_outlined), + SizedBox(width: 10), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(paperSize.values.elementAt(index) ?? ''), + ], + ), + ) + ], + ), + ), + Divider(), + ], + ), + ); + }), + ); + } + +} \ No newline at end of file diff --git a/lib/views/settings/printer/views/PrinterSelect.dart b/lib/views/settings/printer/views/PrinterSelect.dart new file mode 100644 index 0000000..f28b03c --- /dev/null +++ b/lib/views/settings/printer/views/PrinterSelect.dart @@ -0,0 +1,324 @@ +import 'dart:async'; +import 'dart:typed_data'; +import 'dart:ui' as ui; + +import 'package:aman_kassa_flutter/core/logger.dart'; +import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart'; +import 'package:aman_kassa_flutter/redux/store.dart'; + +import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart'; +import 'package:esc_pos_utils/esc_pos_utils.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart' hide Image; +import 'package:flutter/rendering.dart'; + + +import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart'; +import 'package:intl/intl.dart'; +import 'package:logger/logger.dart'; + +import '../PrinterTest.dart'; + + +class PrinterSelectView extends StatefulWidget { + PrinterSelectView({Key key, this.title}) : super(key: key); + final String title; + + @override + _PrinterSelectViewState createState() => _PrinterSelectViewState(); + +} + +class _PrinterSelectViewState extends State { + PrinterBluetoothManager printerManager = PrinterBluetoothManager(); + List _devices = []; + Logger _logger = getLogger('PrinterSelectView'); + + @override + void initState() { + super.initState(); + + printerManager.scanResults.listen((devices) async { + // print('UI: Devices found ${devices.length}'); + setState(() { + _devices = devices; + }); + }); + _startScanDevices(); + } + + void _startScanDevices() { + setState(() { + _devices = []; + }); + printerManager.startScan(Duration(seconds: 4)); + } + + void _stopScanDevices() { + printerManager.stopScan(); + } + + Future demoReceipt(PaperSize paper) async { + final Ticket ticket = Ticket(paper, ); + + // Print image + // final ByteData data = await rootBundle.load('assets/images/aman_kassa_check.png'); + // final Uint8List bytes = data.buffer.asUint8List(); + // final Im.Image image = Im.decodeImage(bytes); + // Im.Image thumbnail = Im.copyResize(image, width: 270); + // ticket.image(thumbnail, align: PosAlign.center); + + //ticket.imageRaster(image, align: PosAlign.center); + + ticket.text('AMAN-SATU', + styles: PosStyles( + align: PosAlign.center, + height: PosTextSize.size2, + width: PosTextSize.size2, + ), + linesAfter: 1); + + ticket.text('889 Watson Lane', styles: PosStyles(align: PosAlign.center)); + ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, codeTable: PosCodeTable.westEur), containsChinese: true); + ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, fontType: PosFontType.fontA), containsChinese: true); + ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, fontType: PosFontType.fontB), containsChinese: true); + ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, height: PosTextSize.size1), containsChinese: true); + ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, width: PosTextSize.size2), containsChinese: true); + ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, width: PosTextSize.size3), containsChinese: true); + ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, width: PosTextSize.size4), containsChinese: true); + ticket.text('Tel: 830-221-1234', styles: PosStyles(align: PosAlign.center)); + ticket.text('Web: www.example.com', + styles: PosStyles(align: PosAlign.center), linesAfter: 1); + + ticket.hr(); + ticket.row([ + PosColumn(text: 'Qty', width: 1), + PosColumn(text: 'Item', width: 7), + PosColumn( + text: 'Price', width: 2, styles: PosStyles(align: PosAlign.right)), + PosColumn( + text: 'Total', width: 2, styles: PosStyles(align: PosAlign.right)), + ]); + + ticket.row([ + PosColumn(text: '2', width: 1), + PosColumn(text: 'ONION RINGS', width: 7), + PosColumn( + text: '0.99', width: 2, styles: PosStyles(align: PosAlign.right)), + PosColumn( + text: '1.98', width: 2, styles: PosStyles(align: PosAlign.right)), + ]); + ticket.row([ + PosColumn(text: '1', width: 1), + PosColumn(text: 'PIZZA', width: 7), + PosColumn( + text: '3.45', width: 2, styles: PosStyles(align: PosAlign.right)), + PosColumn( + text: '3.45', width: 2, styles: PosStyles(align: PosAlign.right)), + ]); + ticket.row([ + PosColumn(text: '1', width: 1), + PosColumn(text: 'SPRING ROLLS', width: 7), + PosColumn( + text: '2.99', width: 2, styles: PosStyles(align: PosAlign.right)), + PosColumn( + text: '2.99', width: 2, styles: PosStyles(align: PosAlign.right)), + ]); + ticket.row([ + PosColumn(text: '3', width: 1), + PosColumn(text: 'CRUNCHY STICKS', width: 7), + PosColumn( + text: '0.85', width: 2, styles: PosStyles(align: PosAlign.right)), + PosColumn( + text: '2.55', width: 2, styles: PosStyles(align: PosAlign.right)), + ]); + ticket.hr(); + + ticket.row([ + PosColumn( + text: 'TOTAL', + width: 6, + styles: PosStyles( + height: PosTextSize.size2, + width: PosTextSize.size2, + )), + PosColumn( + text: '\$10.97', + width: 6, + styles: PosStyles( + align: PosAlign.right, + height: PosTextSize.size2, + width: PosTextSize.size2, + )), + ]); + + ticket.hr(ch: '=', linesAfter: 1); + + ticket.row([ + PosColumn( + text: 'Cash', + width: 7, + styles: PosStyles(align: PosAlign.right, width: PosTextSize.size2)), + PosColumn( + text: '\$15.00', + width: 5, + styles: PosStyles(align: PosAlign.right, width: PosTextSize.size2)), + ]); + ticket.row([ + PosColumn( + text: 'Change', + width: 7, + styles: PosStyles(align: PosAlign.right, width: PosTextSize.size2)), + PosColumn( + text: '\$4.03', + width: 5, + styles: PosStyles(align: PosAlign.right, width: PosTextSize.size2)), + ]); + + ticket.feed(2); + ticket.text('Thank you!', + styles: PosStyles(align: PosAlign.center, bold: true)); + + final now = DateTime.now(); + final formatter = DateFormat('MM/dd/yyyy H:m'); + final String timestamp = formatter.format(now); + ticket.text(timestamp, + styles: PosStyles(align: PosAlign.center), linesAfter: 2); + + // Print QR Code from image + // try { + // const String qrData = 'example.com'; + // const double qrSize = 200; + // final uiImg = await QrPainter( + // data: qrData, + // version: QrVersions.auto, + // gapless: false, + // ).toImageData(qrSize); + // final dir = await getTemporaryDirectory(); + // final pathName = '${dir.path}/qr_tmp.png'; + // final qrFile = File(pathName); + // final imgFile = await qrFile.writeAsBytes(uiImg.buffer.asUint8List()); + // final img = decodeImage(imgFile.readAsBytesSync()); + + // ticket.image(img); + // } catch (e) { + // print(e); + // } + + // Print QR Code using native function + // ticket.qrcode('example.com'); + + ticket.feed(2); + ticket.cut(); + return ticket; + } + + + + void _selectPrinter(PrinterBluetooth printer, BuildContext context, ) async { + printerManager.selectPrinter(printer); + _logger.i(printer.name); + _logger.i(printer.address); + + BluetoothDevice device = new BluetoothDevice() + ..address = printer.address + ..name=printer.name + ..type=printer.type; + + await Redux.store.dispatch(selectPrinterFromSetting(device)); + Navigator.of(context).pop(false); + } + + void _testPrint(PrinterBluetooth printer) async { + printerManager.selectPrinter(printer); + + // TODO Don't forget to choose printer's paper + const PaperSize paper = PaperSize.mm58; + + // TEST PRINT + // final PosPrintResult res = + // await printerManager.printTicket(await testTicket(paper), queueSleepTimeMs: 50); + + final PosPrintResult res = + await printerManager.printTicket( + await testTicketImage(paper), + chunkSizeBytes: 1024, + queueSleepTimeMs: 50 + ); + + // DEMO RECEIPT + // final PosPrintResult res = + // await printerManager.printTicket(await demoReceipt(paper) , queueSleepTimeMs: 50); + + } + + final key = GlobalKey(); + + @override + Widget build(BuildContext context) { + return RepaintBoundary( + key: key, + child: Scaffold( + appBar: AppBar( + title: Text('Выберите принтер'), + ), + body: ListView.builder( + itemCount: _devices.length, + itemBuilder: (BuildContext _, int index) { + return InkWell( + onTap: () => _selectPrinter(_devices[index], context), + child: Column( + children: [ + Container( + height: 60, + padding: EdgeInsets.only(left: 10), + alignment: Alignment.centerLeft, + child: Row( + children: [ + Icon(Icons.print), + SizedBox(width: 10), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(_devices[index].name ?? ''), + Text(_devices[index].address), + Text( + 'Click to print a test receipt', + style: TextStyle(color: Colors.grey[700]), + ), + ], + ), + ) + ], + ), + ), + Divider(), + ], + ), + ); + }), + floatingActionButton: StreamBuilder( + stream: printerManager.isScanningStream, + initialData: false, + builder: (c, snapshot) { + if (snapshot.data) { + return FloatingActionButton( + child: Icon(Icons.stop), + onPressed: _stopScanDevices, + backgroundColor: Colors.red, + ); + } else { + return FloatingActionButton( + child: Icon(Icons.search), + onPressed: _startScanDevices, + ); + } + }, + ), + ), + ); + } + +} \ No newline at end of file diff --git a/lib/views/settings/setting_printer_view.dart b/lib/views/settings/setting_printer_view.dart new file mode 100644 index 0000000..f255309 --- /dev/null +++ b/lib/views/settings/setting_printer_view.dart @@ -0,0 +1,121 @@ +import 'dart:typed_data'; + +import 'package:aman_kassa_flutter/core/locator.dart'; +import 'package:aman_kassa_flutter/core/route_names.dart'; +import 'package:aman_kassa_flutter/core/services/dialog_service.dart'; +import 'package:aman_kassa_flutter/core/services/navigator_service.dart'; +import 'package:aman_kassa_flutter/redux/constants/setting_const.dart'; +import 'package:aman_kassa_flutter/redux/state/setting_state.dart'; +import 'package:aman_kassa_flutter/redux/store.dart'; +import 'package:aman_kassa_flutter/shared/app_colors.dart'; +import 'package:aman_kassa_flutter/widgets/fields/aman_icon_button_horizontal.dart'; +import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart'; +import 'package:esc_pos_utils/esc_pos_utils.dart'; +import 'package:flutter/material.dart'; +import 'package:aman_kassa_flutter/views/settings/printer/PrinterTest.dart'; +import 'package:flutter_redux/flutter_redux.dart'; + +import 'component/setting_item.dart'; +import './printer/data/settings_envi.dart'; +import './printer/example/check_test.dart'; + +class SettingPrinterView extends StatefulWidget { + @override + _SettingPrinterViewState createState() => _SettingPrinterViewState(); +} + +class _SettingPrinterViewState extends State { + NavigatorService _navigatorService = locator(); + final DialogService _dialogService = locator(); + PrinterBluetoothManager printerManager = PrinterBluetoothManager(); + + + @override + void initState() { + super.initState(); + } + + + void _testPrint() async { + final SettingState state = Redux.store.state.settingState; + printerManager.selectPrinter(PrinterBluetooth(state.printerBT)); + // TODO Don't forget to choose printer's paper + PaperSize paper = state.printerPaperSize == SettingPrinterPaperM80 ? PaperSize.mm80 : PaperSize.mm58; + if(SettingPrinterEncodingImage == state.printerEncoding) { + final PosPrintResult res = await printerManager.printTicket( + await testTicketImage(paper), + chunkSizeBytes: 3096, + queueSleepTimeMs: 50 + ); + _dialogService.showDialog(description: res.msg); + } else { + final PosPrintResult res = await printerManager.printTicket( + await printTextCheck(paper, state.printerEncoding, exampleJson['check_text']), + chunkSizeBytes: 3096, + queueSleepTimeMs: 50 + ); + _dialogService.showDialog(description: res.msg); + } + + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Настройка принтера'), + ), + body: Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: StoreConnector( + converter: (store) => store.state.settingState, + builder: (context, vm) { + return Column( + children: [ + SettingItem( + title: 'Принтер', + name: vm.printerBT?.name, + value: vm.printerBT != null + ? 'BT: ${vm.printerBT.address} ' + : 'не выбран', + onTap: () { + _navigatorService.push(SettingsPrinterBTRoute); + }), + SettingItem( + title: 'Кодировка', + name: vm.printerEncoding != null ? encoding[vm.printerEncoding] : null , + onTap: () { + _navigatorService.push(SettingsPrinterEncodingRoute); + }), + SettingItem( + title: 'Ширина ленты', + name: vm.printerPaperSize != null ? paperSize[vm.printerPaperSize] : null , + onTap: () { + _navigatorService.push(SettingsPrinterPaperRoute); + }), + Expanded( + child: Padding( + padding: const EdgeInsets.only(bottom: 24.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + AmanIconButtonHorizontal( + icon: Icons.local_printshop_outlined, + title: 'Напечатать тестовую страницу', + activeColor: primaryColor, + selected: vm.printerBT != null, + onPressed: () { + _testPrint(); + }, + ), + ], + ), + ), + ) + ], + ); + }), + ), + ); + } +} diff --git a/lib/views/settings/settings_view.dart b/lib/views/settings/settings_view.dart new file mode 100644 index 0000000..1b89fea --- /dev/null +++ b/lib/views/settings/settings_view.dart @@ -0,0 +1,96 @@ +import 'package:aman_kassa_flutter/core/locator.dart'; +import 'package:aman_kassa_flutter/core/services/dialog_service.dart'; +import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart'; +import 'package:aman_kassa_flutter/redux/state/setting_state.dart'; +import 'package:aman_kassa_flutter/redux/store.dart'; +import 'package:aman_kassa_flutter/shared/app_colors.dart'; +import 'package:aman_kassa_flutter/shared/ui_helpers.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class SettingView extends StatefulWidget { + SettingView(); + + @override + _SettingViewState createState() => _SettingViewState(); +} + +class _SettingViewState extends State { + TextEditingController _pinController; + final DialogService _dialogService = locator(); + + @override + void initState() { + super.initState(); + SettingState state = Redux.store.state.settingState; + _pinController = new TextEditingController(text: state.pinCode); + } + + + + + @override + void dispose() { + _pinController.dispose(); + super.dispose(); + } + + void _setPinCode(BuildContext _context) async { + FocusScope.of(_context).unfocus(); + var value = _pinController.text; + if(value.isNotEmpty && value.length !=4){ + _dialogService.showDialog(description: 'Необходимо указать 4-х значный числовой код'); + } else { + await Redux.store.dispatch(changePinCodeFromSetting(_pinController.text)); + _dialogService.showDialog(description: 'Данные успешно сохранены'); + } + } + + + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + centerTitle: true, + title: Text('Настройка приложения'), + ), + body: SingleChildScrollView( + child: Container( + margin: const EdgeInsets.symmetric(horizontal: 14.0), + child: Column( + children: [ + verticalSpaceTiny, + Text( + 'Для блокировки приложения пин-кодом, укажите 4-х значный числовой код', + style: TextStyle(fontSize: 15.0), + textAlign: TextAlign.center, + ), + verticalSpaceTiny, + TextField( + controller: _pinController, + maxLength: 4, + obscureText: true, + decoration: InputDecoration( + labelText: 'Пин-код', hintText: "Укажите пин-код"), + keyboardType: TextInputType.number, + ), + verticalSpaceMedium, + RaisedButton( + onPressed: () => this._setPinCode(context), + child: Text( + 'Cохранить настройки', + style: TextStyle(color: whiteColor, fontSize: 20.0), + ), + color: primaryColor, + padding: + const EdgeInsets.symmetric(vertical: 5.0, horizontal: 20.0), + ), + + ], + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index aa6de12..07f1386 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,13 +1,27 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.13" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety.1" + version: "2.5.0" auto_size_text: dependency: "direct main" description: @@ -28,35 +42,42 @@ packages: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.1" + version: "2.1.0" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0" + charset_converter: + dependency: "direct main" + description: + name: charset_converter + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.1" + version: "1.1.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.3" + version: "1.15.0" convert: dependency: transitive description: @@ -71,6 +92,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.5" + csslib: + dependency: transitive + description: + name: csslib + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.2" cupertino_icons: dependency: "direct main" description: @@ -99,6 +127,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.5" + esc_pos_bluetooth: + dependency: "direct main" + description: + name: esc_pos_bluetooth + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.8" + esc_pos_utils: + dependency: "direct main" + description: + name: esc_pos_utils + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.6" esys_flutter_share: dependency: "direct main" description: @@ -112,7 +154,7 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0" ffi: dependency: transitive description: @@ -139,6 +181,27 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_bluetooth_basic: + dependency: "direct main" + description: + name: flutter_bluetooth_basic + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + flutter_lock_screen: + dependency: "direct main" + description: + name: flutter_lock_screen + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.8" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.11" flutter_redux: dependency: "direct main" description: @@ -163,6 +226,13 @@ packages: description: flutter source: sdk version: "0.0.0" + gbk_codec: + dependency: transitive + description: + name: gbk_codec + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.2" get_it: dependency: "direct main" description: @@ -177,6 +247,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.1" + hex: + dependency: transitive + description: + name: hex + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2" + html: + dependency: transitive + description: + name: html + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.0+4" http: dependency: "direct main" description: @@ -191,6 +275,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.1.4" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.19" intl: dependency: "direct main" description: @@ -198,6 +289,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.16.1" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.3" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.1" + local_auth: + dependency: "direct main" + description: + name: local_auth + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.3+4" logger: dependency: "direct main" description: @@ -218,7 +330,7 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety.1" + version: "0.12.10" material_design_icons_flutter: dependency: "direct main" description: @@ -232,7 +344,7 @@ packages: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0" nested: dependency: transitive description: @@ -246,7 +358,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.1" + version: "1.8.0" path_provider: dependency: "direct main" description: @@ -289,6 +401,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.9.2" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" platform: dependency: transitive description: @@ -373,8 +492,15 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.0" - shared_preferences: + rxdart: dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.23.1" + shared_preferences: + dependency: "direct main" description: name: shared_preferences url: "https://pub.dartlang.org" @@ -426,7 +552,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.2" + version: "1.8.0" sqflite: dependency: "direct main" description: @@ -447,21 +573,21 @@ packages: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.1" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.1" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.1" + version: "1.1.0" synchronized: dependency: transitive description: @@ -475,21 +601,21 @@ packages: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety.2" + version: "0.2.19" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0" url_launcher: dependency: "direct main" description: @@ -538,7 +664,7 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0" win32: dependency: transitive description: @@ -553,6 +679,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.2" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "4.5.1" sdks: - dart: ">=2.10.2 <2.11.0" - flutter: ">=1.22.2 <2.0.0" + dart: ">=2.12.0-0.0 <3.0.0" + flutter: ">=1.22.2" diff --git a/pubspec.yaml b/pubspec.yaml index 5419ba6..a2e2383 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,6 +31,13 @@ dependencies: qr_flutter: ^3.2.0 mask_text_input_formatter: ^1.2.1 flutter_screenutil: ^4.0.2+5 + shared_preferences: ^0.5.12+4 + flutter_lock_screen: ^1.0.8 + local_auth: ^0.6.3+4 + esc_pos_bluetooth: ^0.2.8 + flutter_bluetooth_basic: ^0.1.5 + esc_pos_utils: ^0.3.6 # no edit for esc_pos_bluetooth: ^0.2.8 + charset_converter: ^1.0.3 dev_dependencies: flutter_test: sdk: flutter