clean bank
commit
6d385d16e8
|
|
@ -34,7 +34,7 @@ if (keystorePropertiesFile.exists()) {
|
||||||
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 29
|
compileSdkVersion 30
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main.java.srcDirs += 'src/main/kotlin'
|
main.java.srcDirs += 'src/main/kotlin'
|
||||||
|
|
@ -47,7 +47,7 @@ android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "kz.com.aman.kassa"
|
applicationId "kz.com.aman.kassa"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 29
|
targetSdkVersion 30
|
||||||
versionCode flutterVersionCode.toInteger()
|
versionCode flutterVersionCode.toInteger()
|
||||||
versionName flutterVersionName
|
versionName flutterVersionName
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
|
|
@ -63,9 +63,9 @@ android {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
all {
|
// all {
|
||||||
buildConfigField ("String[]", "SUPPORTED_DEVICES", collectSupportedDevicesToArray())
|
// buildConfigField ("String[]", "SUPPORTED_DEVICES", collectSupportedDevicesToArray())
|
||||||
}
|
// }
|
||||||
debug {
|
debug {
|
||||||
shrinkResources false
|
shrinkResources false
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
|
|
@ -116,37 +116,13 @@ dependencies {
|
||||||
|
|
||||||
implementation 'com.android.support:multidex:1.0.3'
|
implementation 'com.android.support:multidex:1.0.3'
|
||||||
//m4bank dependencies
|
//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() {
|
//def collectSupportedDevicesToArray() {
|
||||||
return '{' + rootProject.ext."supportedDevices${getProject().name}".collect {
|
// return '{' + rootProject.ext."supportedDevices${getProject().name}".collect {
|
||||||
"\"${it}\""
|
// "\"${it}\""
|
||||||
}.join(",") + '}'
|
// }.join(",") + '}'
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
|
|
||||||
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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
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<String> deviceList) {
|
|
||||||
Timber.d("onDeviceToConnectSelectionRequested");
|
|
||||||
activity.runOnUiThread(() -> {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose device");
|
|
||||||
|
|
||||||
Spinner deviceListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<String> 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<Reader> deviceList) {
|
|
||||||
Timber.d("onDeviceToUseSelectionRequested");
|
|
||||||
activity.runOnUiThread(() -> {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose device");
|
|
||||||
|
|
||||||
Spinner deviceListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Reader> 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<GoodsData> 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<String, String> 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<PrinterErrorData, PrinterBaseData> 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<String> 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<ApplicationIdConv> list) {
|
|
||||||
Timber.d("onRequiredApplicationSelection");
|
|
||||||
activity.runOnUiThread(() -> {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose application identifier");
|
|
||||||
|
|
||||||
Spinner deviceListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<ApplicationIdConv> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
private final M4BankActivity activity;
|
|
||||||
private CustomKeyBoardDilalog customKeyBoardDilalog;
|
|
||||||
|
|
||||||
public CardReadingCallbackHandlerImpl(M4BankActivity activity) {
|
|
||||||
this.activity = activity;
|
|
||||||
customKeyBoardDilalog = new CustomKeyBoardDilalog();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDeviceToConnectSelectionRequested(List<String> deviceList) {
|
|
||||||
activity.runOnUiThread(() -> {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose device");
|
|
||||||
|
|
||||||
Spinner deviceListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<String> 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<Reader> deviceList) {
|
|
||||||
activity.runOnUiThread(() -> {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose device");
|
|
||||||
|
|
||||||
Spinner deviceListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Reader> 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<ApplicationIdConv> applicationOfList) {
|
|
||||||
// activity.runOnUiThread(() -> {
|
|
||||||
// AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
// builder.setTitle("Choose application identifier");
|
|
||||||
//
|
|
||||||
// Spinner deviceListSpinner = new Spinner(activity);
|
|
||||||
// ArrayAdapter<String> 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();
|
|
||||||
// });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>, GetTransactionsListCallbackHandler<Result> {
|
|
||||||
|
|
||||||
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<Reader> deviceList) {
|
|
||||||
Timber.d("onDeviceToUseSelectionRequested");
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose device");
|
|
||||||
|
|
||||||
Spinner deviceListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Reader> 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<String> deviceList) {
|
|
||||||
Timber.d("onDeviceToConnectSelectionRequested");
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose device");
|
|
||||||
|
|
||||||
Spinner deviceListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<String> 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<ApplicationIdConv> 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<PrinterErrorData, PrinterBaseData> 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<String> 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<Transaction> transactionList) {
|
|
||||||
Timber.d("onTransactionsListReceived");
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
|
|
||||||
Spinner transactionListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Transaction> 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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
|
|
||||||
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<GoodsData> 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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
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<Transaction> transactionList, List<CloseDayResponseInfo> 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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>, GetTransactionsListCallbackHandler<Result> {
|
|
||||||
|
|
||||||
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<Transaction> transactionList) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
|
|
||||||
Spinner transactionListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Transaction> 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<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrinterForRegistrationGettingCompleted() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNoBoundedPrinterFound() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrinterToUseSelectionRequested(List<String> printerList) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>, GetTransactionsListCallbackHandler<Result> {
|
|
||||||
|
|
||||||
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<String> 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<ApplicationIdConv> 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<PrinterErrorData, PrinterBaseData> 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<Reader> 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<Transaction> transactionList) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
|
|
||||||
Spinner transactionListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Transaction> 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<Transaction> 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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>, GetTransactionsListCallbackHandler<Result> {
|
|
||||||
|
|
||||||
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<Transaction> transactionList) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
|
|
||||||
Spinner transactionListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Transaction> 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<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrinterForRegistrationGettingCompleted() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNoBoundedPrinterFound() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrinterToUseSelectionRequested(List<String> printerList) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>, GetTransactionsListCallbackHandler<Result> {
|
|
||||||
|
|
||||||
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<Transaction> transactionList) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
|
|
||||||
Spinner transactionListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Transaction> 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<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrinterForRegistrationGettingCompleted() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNoBoundedPrinterFound() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrinterToUseSelectionRequested(List<String> printerList) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPreviewTransactionDataReceived(TransactionData transactionData) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>, GetTransactionsListCallbackHandler<Result> {
|
|
||||||
|
|
||||||
private final M4BankActivity activity;
|
|
||||||
private Transaction transaction;
|
|
||||||
|
|
||||||
public EasyReversalCallbackHandlerImpl(M4BankActivity activity) {
|
|
||||||
this.activity = activity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTransactionSelectionRequested(List<Transaction> transactionList) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
|
|
||||||
Spinner transactionListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Transaction> 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<Transaction> transactionList) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
|
|
||||||
Spinner transactionListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Transaction> 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<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrinterForRegistrationGettingCompleted() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNoBoundedPrinterFound() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrinterToUseSelectionRequested(List<String> list) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
|
|
||||||
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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Reader> deviceList) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void notAuthorized() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDeviceToConnectSelectionRequested(List<String> 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() {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
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<MerchantUser> 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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>, GetTransactionsListCallbackHandler<Result> {
|
|
||||||
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<Transaction> transactionList) {
|
|
||||||
activity.runOnUiThread(() -> {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
|
|
||||||
Spinner transactionListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Transaction> 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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>, GetTransactionsListCallbackHandler<Result> {
|
|
||||||
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<Transaction> 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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
|
|
||||||
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<String> deviceList) {
|
|
||||||
activity.runOnUiThread(() -> {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose device");
|
|
||||||
|
|
||||||
Spinner deviceListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<String> 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<Reader> deviceList) {
|
|
||||||
activity.runOnUiThread(() -> {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose device");
|
|
||||||
|
|
||||||
Spinner deviceListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Reader> 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();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<OperationType> 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<TerminalKeyType>() {{
|
|
||||||
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<LanguageCore, HashMap<MessageCore, String>>() {{
|
|
||||||
put(LanguageCore.English, new HashMap<MessageCore, String>() {{
|
|
||||||
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<MessageCore, String>() {{
|
|
||||||
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<String, Object> getStyle(String style) {
|
|
||||||
|
|
||||||
HashMap<String, Object> style1 = new HashMap<>();
|
|
||||||
style1.put("TitleBackGroundColor", "#DB3F34");
|
|
||||||
style1.put("VirtualPinPadStyle", 6);
|
|
||||||
style1.put("PatternForAmountAndCurrency", "%s $");
|
|
||||||
style1.put("setBottomBtnText", new String[]{"Cancel", "Clear", "Done"});
|
|
||||||
|
|
||||||
HashMap<String, Object> 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<String> styles = new ArrayList<>();
|
|
||||||
styles.add("Style 1");
|
|
||||||
styles.add("Style 2");
|
|
||||||
runOnUiThread(() ->
|
|
||||||
new SelectElementDialog<>(M4BankActivity.this, styles, new SelectDialogCallback<String>() {
|
|
||||||
@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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result, PrinterResult<PrinterErrorData, PrinterBaseData>> {
|
|
||||||
|
|
||||||
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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Transaction> transactionList, boolean closeDay) {
|
|
||||||
ArrayList<ReconciliationOperationData> reconciliationOperationDataList = new ArrayList<ReconciliationOperationData>();
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>,
|
|
||||||
GetTransactionsListCallbackHandler<Result> {
|
|
||||||
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<Transaction> transactionList) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
|
|
||||||
Spinner transactionListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Transaction> 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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
|
|
||||||
private final M4BankActivity activity;
|
|
||||||
|
|
||||||
public ReversalCallbackHandlerImpl(M4BankActivity activity) {
|
|
||||||
this.activity = activity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTransactionSelectionRequested(List<Transaction> transactionList) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
|
|
||||||
Spinner transactionListSpinner = new Spinner(activity);
|
|
||||||
ArrayAdapter<Transaction> 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<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrinterForRegistrationGettingCompleted() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNoBoundedPrinterFound() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPrinterToUseSelectionRequested(List<String> list) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
|
|
||||||
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<String> 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<Reader> 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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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() {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
package kz.com.aman.kassa.bank;
|
|
||||||
|
|
||||||
public enum TerminalKeyTypeMpos {
|
|
||||||
Tmp, Tpk, Tak
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
|
|
||||||
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<Transaction> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
package kz.com.aman.kassa.bank.gui;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by pppoo on 27.02.2018.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public interface SelectDialogCallback<ElementType> {
|
|
||||||
void onElementSelected(ElementType element);
|
|
||||||
void onCancelSelection();
|
|
||||||
}
|
|
||||||
|
|
@ -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<ElementType> extends Dialog {
|
|
||||||
private Context context;
|
|
||||||
ArrayAdapter<ElementType> listAdapter;
|
|
||||||
private TextView labelTitle;
|
|
||||||
private ListView list;
|
|
||||||
private SelectDialogCallback<ElementType> selectDialogCallback;
|
|
||||||
|
|
||||||
public SelectElementDialog(final Context context, List<ElementType> elements, SelectDialogCallback<ElementType> 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<ElementType> elements) {
|
|
||||||
setContentView(R.layout.custom_dialog_list);
|
|
||||||
labelTitle = findViewById(R.id.labelMessage);
|
|
||||||
list = findViewById(R.id.list);
|
|
||||||
listAdapter = new ArrayAdapter<ElementType>(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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<String> 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<String> 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));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
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<String> 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<String> 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<Reader> 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<Reader> 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<GoodsData> 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<String, String> 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<String> 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<String> 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<CardData> 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<String> 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<PrinterErrorData, PrinterBaseData> 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<String> 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<ApplicationIdConv> 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<ApplicationIdConv> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>, GetTransactionsListCallbackHandler<Result> {
|
|
||||||
|
|
||||||
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<Reader> deviceList) {
|
|
||||||
// Timber.d("onDeviceToUseSelectionRequested");
|
|
||||||
// AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
|
||||||
// builder.setTitle("Choose device");
|
|
||||||
//
|
|
||||||
// Spinner deviceListSpinner = new Spinner(plugin.getActivity());
|
|
||||||
// ArrayAdapter<Reader> 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<String> deviceList) {
|
|
||||||
Timber.d("onDeviceToConnectSelectionRequested");
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
|
||||||
builder.setTitle("Choose device");
|
|
||||||
|
|
||||||
Spinner deviceListSpinner = new Spinner(plugin.getActivity());
|
|
||||||
ArrayAdapter<String> 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<String> 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<ApplicationIdConv> 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<String> 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<CardData> 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<PrinterErrorData, PrinterBaseData> 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<String> 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<Transaction> transactionList) {
|
|
||||||
// Timber.d("onTransactionsListReceived");
|
|
||||||
// AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
|
||||||
// builder.setTitle("Choose transaction");
|
|
||||||
//
|
|
||||||
// Spinner transactionListSpinner = new Spinner(plugin.getActivity());
|
|
||||||
// ArrayAdapter<Transaction> 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<String> 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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
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<Transaction> transactionList, List<CloseDayResponseInfo> list1) {
|
|
||||||
plugin.getActivity().runOnUiThread(() -> {
|
|
||||||
AmanDao<TransactionDao> 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<String> 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();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<String> 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<String> dao = new AmanDao<>();
|
|
||||||
dao.setSuccess(false);
|
|
||||||
dao.setMsg("error");
|
|
||||||
this.result.success(gson.toJson(dao));
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result> {
|
|
||||||
|
|
||||||
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<String> 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<Reader> 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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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<Result>, GetTransactionsListCallbackHandler<Result> {
|
|
||||||
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<Transaction> transactionList) {
|
|
||||||
plugin.getActivity().runOnUiThread(() -> {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
|
||||||
builder.setTitle("Choose transaction");
|
|
||||||
Spinner transactionListSpinner = new Spinner(plugin.getActivity());
|
|
||||||
ArrayAdapter<Transaction> 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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -11,32 +11,9 @@ import io.flutter.plugin.common.MethodCall;
|
||||||
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
|
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
|
||||||
import io.flutter.plugin.common.MethodChannel.Result;
|
import io.flutter.plugin.common.MethodChannel.Result;
|
||||||
import kz.com.aman.kassa.MainActivity;
|
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 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 {
|
public class BankNfcPlugins implements MethodCallHandler {
|
||||||
|
|
@ -46,24 +23,6 @@ public class BankNfcPlugins implements MethodCallHandler {
|
||||||
//main activity
|
//main activity
|
||||||
private MainActivity 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() {
|
public MainActivity getActivity() {
|
||||||
return this.activity;
|
return this.activity;
|
||||||
|
|
@ -141,36 +100,36 @@ public class BankNfcPlugins implements MethodCallHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void permissions(Result result) {
|
private void permissions(Result result) {
|
||||||
try {
|
// try {
|
||||||
PermissionsManager.PermissionsCheckResultHandler permissionsCheckResultHandler =
|
// PermissionsManager.PermissionsCheckResultHandler permissionsCheckResultHandler =
|
||||||
new PermissionsManager.PermissionsCheckResultHandler() {
|
// new PermissionsManager.PermissionsCheckResultHandler() {
|
||||||
@Override
|
// @Override
|
||||||
public void onPermissionsGranted() {
|
// public void onPermissionsGranted() {
|
||||||
activity.runOnUiThread(() -> {
|
// activity.runOnUiThread(() -> {
|
||||||
AmanDao<String> dao = new AmanDao<>();
|
// AmanDao<String> dao = new AmanDao<>();
|
||||||
dao.setSuccess(true);
|
// dao.setSuccess(true);
|
||||||
dao.setMsg("OK");
|
// dao.setMsg("OK");
|
||||||
result.success(gson.toJson(dao));
|
// result.success(gson.toJson(dao));
|
||||||
}
|
// }
|
||||||
);
|
// );
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public void onPermissionsDeclined() {
|
// public void onPermissionsDeclined() {
|
||||||
AmanDao<String> dao = new AmanDao<>();
|
// AmanDao<String> dao = new AmanDao<>();
|
||||||
dao.setSuccess(false);
|
// dao.setSuccess(false);
|
||||||
dao.setMsg("decline");
|
// dao.setMsg("decline");
|
||||||
result.success(gson.toJson(dao));
|
// result.success(gson.toJson(dao));
|
||||||
}
|
// }
|
||||||
};
|
// };
|
||||||
permissionsManager = new PermissionsManagerImpl(this.activity);
|
// permissionsManager = new PermissionsManagerImpl(this.activity);
|
||||||
permissionsManager.checkPermissions(permissionsCheckResultHandler);
|
// permissionsManager.checkPermissions(permissionsCheckResultHandler);
|
||||||
|
//
|
||||||
|
//
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
result.error("1", e.getMessage(), e.getLocalizedMessage());
|
// result.error("1", e.getMessage(), e.getLocalizedMessage());
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -186,171 +145,152 @@ public class BankNfcPlugins implements MethodCallHandler {
|
||||||
|
|
||||||
//start after all permissions granted
|
//start after all permissions granted
|
||||||
private void start(String serverUrl) {
|
private void start(String serverUrl) {
|
||||||
clientInterface = M4BankMposClient.getInstance(
|
// clientInterface = M4BankMposClient.getInstance(
|
||||||
new M4BankMposParameters(
|
// new M4BankMposParameters(
|
||||||
Format.JSON,
|
// Format.JSON,
|
||||||
"rus",
|
// "rus",
|
||||||
null,
|
// null,
|
||||||
this.activity,
|
// this.activity,
|
||||||
new SessionExpiringCallbackHandlerImpl(),
|
// new SessionExpiringCallbackHandlerImpl(),
|
||||||
"appName",
|
// "appName",
|
||||||
ServerChoose.API_5_0,
|
// ServerChoose.API_5_0,
|
||||||
new ConfigurationSettings
|
// new ConfigurationSettings
|
||||||
.Builder()
|
// .Builder()
|
||||||
.printerUsed(true)
|
// .printerUsed(true)
|
||||||
.umkaEnabled(true)
|
// .umkaEnabled(true)
|
||||||
.networkConfiguration(createNetworkConfiguration(serverUrl))
|
// .networkConfiguration(createNetworkConfiguration(serverUrl))
|
||||||
.terminalConfiguration(createTerminalConfiguration())
|
// .terminalConfiguration(createTerminalConfiguration())
|
||||||
.build())
|
// .build())
|
||||||
);
|
// );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void connection(Result result) {
|
private void connection(Result result) {
|
||||||
clientInterface.getConfigurationManager()
|
// clientInterface.getConfigurationManager()
|
||||||
.checkConnection(
|
// .checkConnection(
|
||||||
new ConnectionCheckHandlerImpl(this.activity, result));
|
// new ConnectionCheckHandlerImpl(this.activity, result));
|
||||||
}
|
}
|
||||||
private void currency(Result result) {
|
private void currency(Result result) {
|
||||||
CurrencyDataHolder dataHolder = clientInterface.getConfigurationManager()
|
// CurrencyDataHolder dataHolder = clientInterface.getConfigurationManager()
|
||||||
.getCurrencyDataHolder();
|
// .getCurrencyDataHolder();
|
||||||
Currency currentCurrency = dataHolder.getCurrency();
|
// Currency currentCurrency = dataHolder.getCurrency();
|
||||||
if(currentCurrency!=null){
|
// if(currentCurrency!=null){
|
||||||
System.out.println(currentCurrency.getName());
|
// System.out.println(currentCurrency.getName());
|
||||||
System.out.println(currentCurrency.getCurrency3DigitCode());
|
// System.out.println(currentCurrency.getCurrency3DigitCode());
|
||||||
} else {
|
// } else {
|
||||||
System.out.println("currentCurrency is null");
|
// System.out.println("currentCurrency is null");
|
||||||
}
|
// }
|
||||||
System.out.println("===========================");
|
// System.out.println("===========================");
|
||||||
if(currentCurrency == null || !"398".equalsIgnoreCase(currentCurrency.getCurrency3DigitCode()) ){
|
// if(currentCurrency == null || !"398".equalsIgnoreCase(currentCurrency.getCurrency3DigitCode()) ){
|
||||||
List<Currency> currencies = dataHolder.getCurrencyList();
|
// List<Currency> currencies = dataHolder.getCurrencyList();
|
||||||
boolean changed = false;
|
// boolean changed = false;
|
||||||
for(Currency currency : currencies ){
|
// for(Currency currency : currencies ){
|
||||||
System.out.println(currency.getName());
|
// System.out.println(currency.getName());
|
||||||
System.out.println(currency.getLetterCode());
|
// System.out.println(currency.getLetterCode());
|
||||||
System.out.println(currency.getCurrency3DigitCode());
|
// System.out.println(currency.getCurrency3DigitCode());
|
||||||
if("398".equalsIgnoreCase(currency.getCurrency3DigitCode())){
|
// if("398".equalsIgnoreCase(currency.getCurrency3DigitCode())){
|
||||||
dataHolder.setCurrency(currency);
|
// dataHolder.setCurrency(currency);
|
||||||
changed = true;
|
// changed = true;
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
AmanDao<String> dao = new AmanDao<>();
|
// AmanDao<String> dao = new AmanDao<>();
|
||||||
dao.setSuccess(changed);
|
// dao.setSuccess(changed);
|
||||||
dao.setMsg("current currency " + (currentCurrency!=null ? currentCurrency.getLetterCode() : "NULL"));
|
// dao.setMsg("current currency " + (currentCurrency!=null ? currentCurrency.getLetterCode() : "NULL"));
|
||||||
result.success(gson.toJson(dao));
|
// result.success(gson.toJson(dao));
|
||||||
} else {
|
// } else {
|
||||||
AmanDao<String> dao = new AmanDao<>();
|
// AmanDao<String> dao = new AmanDao<>();
|
||||||
dao.setSuccess(true);
|
// dao.setSuccess(true);
|
||||||
dao.setMsg("exist");
|
// dao.setMsg("exist");
|
||||||
result.success(gson.toJson(dao));
|
// result.success(gson.toJson(dao));
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void authentication(MethodCall call, Result result) {
|
private void authentication(MethodCall call, Result result) {
|
||||||
String login = call.argument("login");
|
// String login = call.argument("login");
|
||||||
String password = call.argument("password");
|
// String password = call.argument("password");
|
||||||
clientInterface.getAuthorizationManager().authorize(new AuthorizationHandlerImpl(this, result, login, password) );
|
// clientInterface.getAuthorizationManager().authorize(new AuthorizationHandlerImpl(this, result, login, password) );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void pay(MethodCall call, Result result) {
|
private void pay(MethodCall call, Result result) {
|
||||||
try {
|
// try {
|
||||||
Integer value = call.argument("amount");
|
// Integer value = call.argument("amount");
|
||||||
long amount = value.longValue();
|
// long amount = value.longValue();
|
||||||
clientInterface.cancel();
|
// clientInterface.cancel();
|
||||||
clientInterface.getTransactionManager().makeCardPayment(new CardPaymentHandlerImpl(this, result, amount, TransactionTypeConv.PAYMENT));
|
// clientInterface.getTransactionManager().makeCardPayment(new CardPaymentHandlerImpl(this, result, amount, TransactionTypeConv.PAYMENT));
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
System.out.println("=============>ERROR:"+e.getMessage());
|
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private void findTransaction(MethodCall call, Result result) {
|
private void findTransaction(MethodCall call, Result result) {
|
||||||
try {
|
// try {
|
||||||
Integer transactionNumber = call.argument("transactionNumber");
|
// Integer transactionNumber = call.argument("transactionNumber");
|
||||||
String authorizationCode = call.argument("authorizationCode");
|
// String authorizationCode = call.argument("authorizationCode");
|
||||||
clientInterface.getTransactionManager()
|
// clientInterface.getTransactionManager()
|
||||||
.getTransactionsList(new CardRefundAmanHandlerImpl(this, result, transactionNumber, authorizationCode , transaction), 1000,
|
// .getTransactionsList(new CardRefundAmanHandlerImpl(this, result, transactionNumber, authorizationCode , transaction), 1000,
|
||||||
0, GetOperationType.SHOW, null);
|
// 0, GetOperationType.SHOW, null);
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
System.out.println("=============>ERROR:"+e.getMessage());
|
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refund(MethodCall call, Result result) {
|
private void refund(MethodCall call, Result result) {
|
||||||
try {
|
// try {
|
||||||
clientInterface.getTransactionManager()
|
// clientInterface.getTransactionManager()
|
||||||
.makeCardRefund(new CardRefundAmanHandlerImpl(this, result, null, null, transaction));
|
// .makeCardRefund(new CardRefundAmanHandlerImpl(this, result, null, null, transaction));
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
System.out.println("=============>ERROR:"+e.getMessage());
|
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private void closeDay(MethodCall call, Result result) {
|
private void closeDay(MethodCall call, Result result) {
|
||||||
try {
|
// try {
|
||||||
clientInterface.cancel();
|
// clientInterface.cancel();
|
||||||
clientInterface.getTransactionManager().closeDay(new CloseDayHandlerImpl(this, result));
|
// clientInterface.getTransactionManager().closeDay(new CloseDayHandlerImpl(this, result));
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
System.out.println("=============>ERROR:"+e.getMessage());
|
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showTransaction(MethodCall call, Result result){
|
private void showTransaction(MethodCall call, Result result){
|
||||||
clientInterface.getTransactionManager()
|
// clientInterface.getTransactionManager()
|
||||||
.getTransactionsList(
|
// .getTransactionsList(
|
||||||
new TransactionDetailsHandlerImpl(this),
|
// new TransactionDetailsHandlerImpl(this),
|
||||||
20, 0,
|
// 20, 0,
|
||||||
GetOperationType.SHOW,
|
// GetOperationType.SHOW,
|
||||||
null);
|
// null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancel(MethodCall call, Result result) {
|
private void cancel(MethodCall call, Result result) {
|
||||||
try {
|
// try {
|
||||||
clientInterface.cancel();
|
// clientInterface.cancel();
|
||||||
AmanDao<String> dao = new AmanDao<>();
|
// AmanDao<String> dao = new AmanDao<>();
|
||||||
dao.setSuccess(true);
|
// dao.setSuccess(true);
|
||||||
dao.setMsg("OK");
|
// dao.setMsg("OK");
|
||||||
result.success(gson.toJson(dao));
|
// result.success(gson.toJson(dao));
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
System.out.println("=============>ERROR:"+e.getMessage());
|
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private void shutdown(MethodCall call, Result result) {
|
private void shutdown(MethodCall call, Result result) {
|
||||||
try {
|
// try {
|
||||||
clientInterface.shutdown();
|
// clientInterface.shutdown();
|
||||||
AmanDao<String> dao = new AmanDao<>();
|
// AmanDao<String> dao = new AmanDao<>();
|
||||||
dao.setSuccess(true);
|
// dao.setSuccess(true);
|
||||||
dao.setMsg("OK");
|
// dao.setMsg("OK");
|
||||||
result.success(gson.toJson(dao));
|
// result.success(gson.toJson(dao));
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
System.out.println("=============>ERROR:"+e.getMessage());
|
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
// 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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -11,124 +11,11 @@ buildscript {
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
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 {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
maven {
|
|
||||||
url currentRepository
|
|
||||||
content {
|
|
||||||
includeGroupByRegex "external.*"
|
|
||||||
includeGroupByRegex "m4bank.*"
|
|
||||||
includeGroupByRegex "roamlib.*"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
|
|
@ -34,6 +34,7 @@ class SimpleLogPrinter extends LogPrinter {
|
||||||
}
|
}
|
||||||
|
|
||||||
String formatStackTrace(StackTrace stackTrace, int methodPosition) {
|
String formatStackTrace(StackTrace stackTrace, int methodPosition) {
|
||||||
|
|
||||||
var lines = stackTrace.toString()?.split('\n');
|
var lines = stackTrace.toString()?.split('\n');
|
||||||
var formatted = <String>[];
|
var formatted = <String>[];
|
||||||
var count = 0;
|
var count = 0;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
class CheckImageModal {
|
||||||
|
final String base64Data;
|
||||||
|
final String textData;
|
||||||
|
CheckImageModal({this.base64Data, this.textData});
|
||||||
|
|
||||||
|
static CheckImageModal fromJson(Map<String, dynamic> json) {
|
||||||
|
return CheckImageModal(
|
||||||
|
base64Data: json['base64Data'],
|
||||||
|
textData: json['textData']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Map<String, dynamic> toJson() =>
|
||||||
|
{
|
||||||
|
'base64Data': base64Data,
|
||||||
|
'textData': textData
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -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<String, dynamic> 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']);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
class SettingModel {
|
||||||
|
const SettingModel({this.name, this.type, this.address});
|
||||||
|
final String type;
|
||||||
|
final String name;
|
||||||
|
final String address;
|
||||||
|
}
|
||||||
|
|
@ -6,7 +6,14 @@ const String PaymentViewRoute = "PaymentView";
|
||||||
const String PaymentNfcViewRoute = "PaymentNfcViewRoute";
|
const String PaymentNfcViewRoute = "PaymentNfcViewRoute";
|
||||||
const String HistoryViewRoute = "HistoryView";
|
const String HistoryViewRoute = "HistoryView";
|
||||||
const String InfoKkmViewRoute = "InfoKkmViewRoute";
|
const String InfoKkmViewRoute = "InfoKkmViewRoute";
|
||||||
|
const String SettingsViewRoute = "SettingsViewRoute";
|
||||||
const String QrViewRoute = "QrViewRoute";
|
const String QrViewRoute = "QrViewRoute";
|
||||||
const String BankViewRoute = "BankViewRoute";
|
const String BankViewRoute = "BankViewRoute";
|
||||||
const String BankSettingViewRoute = "BankSettingViewRoute";
|
const String BankSettingViewRoute = "BankSettingViewRoute";
|
||||||
|
|
||||||
|
|
||||||
|
const String SettingsPrinterRoute = "SettingsPrinterRoute";
|
||||||
|
const String SettingsPrinterBTRoute = "SettingsPrinterBTRoute";
|
||||||
|
const String SettingsPrinterEncodingRoute = "SettingsPrinterEncodingRoute";
|
||||||
|
const String SettingsPrinterPaperRoute = "SettingsPrinterPaperRoute";
|
||||||
// Generate the views here
|
// Generate the views here
|
||||||
|
|
|
||||||
|
|
@ -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/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_setting/bank_setting_view.dart';
|
||||||
import 'package:aman_kassa_flutter/views/bank_view/bank_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/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/close_day_view/close_day_show_container.dart';
|
||||||
import 'package:aman_kassa_flutter/views/history/history_view.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/info_kkm/info_kkm_view.dart';
|
||||||
import 'package:aman_kassa_flutter/views/payment/payment_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/payment_nfc/payment_nfc_view.dart';
|
||||||
import 'package:aman_kassa_flutter/views/qr_view/qr_view.dart';
|
import 'package:aman_kassa_flutter/views/qr_view/qr_view.dart';
|
||||||
|
import 'package:aman_kassa_flutter/views/settings/printer/views/PrinterSelect.dart';
|
||||||
import './route_names.dart';
|
import 'package:aman_kassa_flutter/views/settings/settings_view.dart';
|
||||||
import 'package:aman_kassa_flutter/views/home/home_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:aman_kassa_flutter/views/login/login_view.dart';
|
||||||
import 'package:flutter/material.dart';
|
import './route_names.dart';
|
||||||
|
|
||||||
|
|
||||||
Route<dynamic> generateRoute(RouteSettings settings) {
|
Route<dynamic> generateRoute(RouteSettings settings) {
|
||||||
switch (settings.name) {
|
switch (settings.name) {
|
||||||
|
|
@ -51,6 +56,11 @@ Route<dynamic> generateRoute(RouteSettings settings) {
|
||||||
routeName: settings.name,
|
routeName: settings.name,
|
||||||
viewToShow: InfoKkmView(),
|
viewToShow: InfoKkmView(),
|
||||||
);
|
);
|
||||||
|
case SettingsViewRoute:
|
||||||
|
return _getPageRoute(
|
||||||
|
routeName: settings.name,
|
||||||
|
viewToShow: SettingView(),
|
||||||
|
);
|
||||||
case BankViewRoute:
|
case BankViewRoute:
|
||||||
return _getPageRoute(
|
return _getPageRoute(
|
||||||
routeName: settings.name,
|
routeName: settings.name,
|
||||||
|
|
@ -74,6 +84,26 @@ Route<dynamic> generateRoute(RouteSettings settings) {
|
||||||
routeName: settings.name,
|
routeName: settings.name,
|
||||||
viewToShow: ImageShowContainer(data),
|
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:
|
case CloseDayShowRoute:
|
||||||
CloseDayData data = settings.arguments as CloseDayData;
|
CloseDayData data = settings.arguments as CloseDayData;
|
||||||
return _getPageRoute(
|
return _getPageRoute(
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:aman_kassa_flutter/core/base/base_service.dart';
|
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/state/user_state.dart';
|
||||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||||
import 'package:aman_kassa_flutter/views/login/login_view.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;
|
import 'package:http/http.dart' as http;
|
||||||
|
|
||||||
/// The service responsible for networking requests
|
/// The service responsible fworking requests
|
||||||
class ApiService extends BaseService {
|
class ApiService extends BaseService {
|
||||||
static const test_host = 'https://kassa-test.aman.com.kz';
|
static const test_host = 'https://kassa-test.aman.com.kz';
|
||||||
static const test_endpoint = '$test_host/ru/api/v2';
|
static const test_endpoint = '$test_host/ru/api/v2';
|
||||||
static const host = 'https://kassa.aman.com.kz';
|
static const host = 'https://kassa.aman.com.kz';
|
||||||
static const endpoint = '$host/ru/api/v2';
|
static const endpoint = '$host/ru/api/v2';
|
||||||
|
|
||||||
|
static const pos_endpoint = '$test_host/api';
|
||||||
final NavigatorService _navigatorService = locator<NavigatorService>();
|
final NavigatorService _navigatorService = locator<NavigatorService>();
|
||||||
final DialogService _dialogService = locator<DialogService>();
|
final DialogService _dialogService = locator<DialogService>();
|
||||||
|
|
||||||
|
|
@ -63,6 +66,12 @@ class ApiService extends BaseService {
|
||||||
return Response.fromJsonDynamic(json.decode(response));
|
return Response.fromJsonDynamic(json.decode(response));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<HalykPosSession> halykPosToken(String token, login, password) async {
|
||||||
|
Map<String, String> requestBody = <String, String>{'login': login, 'password': password};
|
||||||
|
var response = await requestFormData('/getpostoken', requestBody, bodyEntry: true, posEndPoint: true, statusCheck: false);
|
||||||
|
return HalykPosSession.fromJson(jsonDecode(response));
|
||||||
|
}
|
||||||
|
|
||||||
Future<Response<dynamic>> money(String token) async {
|
Future<Response<dynamic>> money(String token) async {
|
||||||
Map<String, String> requestBody = <String, String>{'api_token': token};
|
Map<String, String> requestBody = <String, String>{'api_token': token};
|
||||||
var response = await requestFormData('/money', requestBody);
|
var response = await requestFormData('/money', requestBody);
|
||||||
|
|
@ -124,15 +133,17 @@ class ApiService extends BaseService {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Future<String> requestFormData(String point, Map<String, String> requestBody, { bool statusCheck = true } ) async {
|
Future<String> requestFormData(String point, Map<String, dynamic> requestBody, { bool statusCheck = true, bool bodyEntry = false, bool posEndPoint= false } ) async {
|
||||||
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
|
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
|
||||||
|
|
||||||
|
|
||||||
Map<String, String> headers = <String, String>{
|
Map<String, String> headers = <String, String>{
|
||||||
HttpHeaders.contentTypeHeader: "multipart/form-data",
|
HttpHeaders.contentTypeHeader: bodyEntry ? "application/json" : "multipart/form-data",
|
||||||
HttpHeaders.cacheControlHeader: "no-cache"
|
HttpHeaders.cacheControlHeader: "no-cache"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(Platform.isAndroid) {
|
if(Platform.isAndroid) {
|
||||||
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
|
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
|
||||||
headers.addAll(<String, String>{
|
headers.addAll(<String, String>{
|
||||||
|
|
@ -152,15 +163,27 @@ class ApiService extends BaseService {
|
||||||
String url = '$endpoint$point';
|
String url = '$endpoint$point';
|
||||||
if(this._test) {
|
if(this._test) {
|
||||||
url = '$test_endpoint$point';
|
url = '$test_endpoint$point';
|
||||||
|
if(posEndPoint){
|
||||||
|
url = '$pos_endpoint$point';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var uri = Uri.parse(url);
|
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) { //Проверка на авторизованный запрос, необязательный параметр
|
if(statusCheck) { //Проверка на авторизованный запрос, необязательный параметр
|
||||||
Response check = Response.fromJsonDynamic(json.decode(body));
|
Response check = Response.fromJsonDynamic(json.decode(body));
|
||||||
if (!check.operation && ( [401,402,403,412].contains(check.status) ) ) {
|
if (!check.operation && ( [401,402,403,412].contains(check.status) ) ) {
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,17 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'package:aman_kassa_flutter/core/base/base_service.dart';
|
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/aman_dao.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/close_day_data.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/models/transaction_item.dart';
|
||||||
|
import 'package:aman_kassa_flutter/core/services/ApiService.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
class BankService extends BaseService {
|
class BankService extends BaseService {
|
||||||
|
final ApiService _api = locator<ApiService>();
|
||||||
static const String _url = 'http://195.200.74.83:5000';
|
static const String _url = 'http://195.200.74.83:5000';
|
||||||
final MethodChannel _channel = MethodChannel('channel:com.amanKassa/bank');
|
final MethodChannel _channel = MethodChannel('channel:com.amanKassa/bank');
|
||||||
|
|
||||||
|
|
@ -23,18 +28,18 @@ class BankService extends BaseService {
|
||||||
return int.parse(result) ?? 0;
|
return int.parse(result) ?? 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String> imei() async {
|
Future<HalykPosSession> renewToken({String token, String login, String password}) async {
|
||||||
String result;
|
HalykPosSession result;
|
||||||
try {
|
try {
|
||||||
result = await _channel.invokeMethod('imei');
|
result = await _api.halykPosToken(token, login, password);
|
||||||
} catch (e, stack) {
|
} catch (e, stack) {
|
||||||
log.e("BankService", e, stack);
|
log.e("BankService", e, stack);
|
||||||
result = '0';
|
|
||||||
}
|
}
|
||||||
log.i(result);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Future<bool> init() async {
|
Future<bool> init() async {
|
||||||
try {
|
try {
|
||||||
String response = await _channel.invokeMethod('init', <String, dynamic>{
|
String response = await _channel.invokeMethod('init', <String, dynamic>{
|
||||||
|
|
|
||||||
|
|
@ -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/calc_model.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/card_data.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_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/check_item.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/product_dao.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/models/response.dart';
|
||||||
|
|
@ -206,17 +207,26 @@ class DataService extends BaseService {
|
||||||
// log.i('response operation: ${response.operation}');
|
// log.i('response operation: ${response.operation}');
|
||||||
if (response.status == 200 && response.operation == true) {
|
if (response.status == 200 && response.operation == true) {
|
||||||
User user = Redux.store.state.userState.user;
|
User user = Redux.store.state.userState.user;
|
||||||
|
//check compare
|
||||||
|
|
||||||
String check = response?.body['check'];
|
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'];
|
dynamic journal = response?.body['journal'];
|
||||||
String url = response?.body['link'];
|
|
||||||
int checkNum = journal['check_num'];
|
int checkNum = journal['check_num'];
|
||||||
var summ = journal['summ'];
|
var summ = journal['summ'];
|
||||||
|
// short url
|
||||||
|
String url = response?.body['link'];
|
||||||
|
// total
|
||||||
double total = summ != null ? double.parse(summ.toString()) : 0.0;
|
double total = summ != null ? double.parse(summ.toString()) : 0.0;
|
||||||
|
|
||||||
|
//insert data to db
|
||||||
this.insertVoucher(
|
this.insertVoucher(
|
||||||
user: user,
|
user: user,
|
||||||
name: 'Чек №$checkNum',
|
name: 'Чек №$checkNum',
|
||||||
data: data,
|
data: data,
|
||||||
base64Data: check,
|
base64Data: jsonEncode(imageModal.toJson()),
|
||||||
total: total,
|
total: total,
|
||||||
url: url,
|
url: url,
|
||||||
type: operationType == OperationTypeReturn
|
type: operationType == OperationTypeReturn
|
||||||
|
|
|
||||||
|
|
@ -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:aman_kassa_flutter/redux/state/bank_state.dart';
|
||||||
import 'package:meta/meta.dart';
|
import 'package:meta/meta.dart';
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
|
|
@ -17,3 +18,9 @@ ThunkAction<AppState> saveData(String login, String password) {
|
||||||
store.dispatch(SetBankStateAction(BankState(login: login, password: password)));
|
store.dispatch(SetBankStateAction(BankState(login: login, password: password)));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ThunkAction<AppState> setHalykSession(HalykPosSession session) {
|
||||||
|
return (Store<AppState> store) async {
|
||||||
|
store.dispatch(SetBankStateAction(BankState(session: session)));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import 'package:aman_kassa_flutter/redux/state/setting_state.dart';
|
||||||
import 'package:meta/meta.dart';
|
import 'package:meta/meta.dart';
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
import 'package:redux_thunk/redux_thunk.dart';
|
import 'package:redux_thunk/redux_thunk.dart';
|
||||||
|
import 'package:flutter_bluetooth_basic/src/bluetooth_device.dart';
|
||||||
import '../store.dart';
|
import '../store.dart';
|
||||||
|
|
||||||
@immutable
|
@immutable
|
||||||
|
|
@ -24,3 +24,39 @@ ThunkAction<AppState> changeTradeTypeFromSetting(String tradeType) {
|
||||||
store.dispatch(SetSettingStateAction(SettingState(tradeType: tradeType )));
|
store.dispatch(SetSettingStateAction(SettingState(tradeType: tradeType )));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ThunkAction<AppState> changePinCodeFromSetting(String pinCode) {
|
||||||
|
return (Store<AppState> store) async {
|
||||||
|
store.dispatch(SetSettingStateAction(SettingState(pinCode: pinCode)));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
ThunkAction<AppState> changePinLockedFromSetting(bool locked) {
|
||||||
|
return (Store<AppState> store) async {
|
||||||
|
store.dispatch(SetSettingStateAction(SettingState(pinLocked: locked)));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
ThunkAction<AppState> changePinSkipFromSetting(bool skip) {
|
||||||
|
return (Store<AppState> store) async {
|
||||||
|
store.dispatch(SetSettingStateAction(SettingState(pinSkip: skip)));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
ThunkAction<AppState> selectPrinterFromSetting(BluetoothDevice device) {
|
||||||
|
return (Store<AppState> store) async {
|
||||||
|
store.dispatch(SetSettingStateAction(SettingState(printerBT: device )));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
ThunkAction<AppState> selectPrinterEncodingFromSetting(String encoding) {
|
||||||
|
return (Store<AppState> store) async {
|
||||||
|
store.dispatch(SetSettingStateAction(SettingState(printerEncoding: encoding )));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
ThunkAction<AppState> selectPrinterPaperSizeFromSetting(String paperSize) {
|
||||||
|
return (Store<AppState> store) async {
|
||||||
|
store.dispatch(SetSettingStateAction(SettingState(printerPaperSize: paperSize )));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -72,7 +72,7 @@ Future<void> logoutAction(Store<AppState> store) async {
|
||||||
UserState(
|
UserState(
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
isAuthenticated: false,
|
isAuthenticated: false,
|
||||||
user: User(),
|
user: User()
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -4,3 +4,16 @@ const String SettingModeCalc = 'calcMode';
|
||||||
|
|
||||||
const String SettingTradeTypeGood = 'g';
|
const String SettingTradeTypeGood = 'g';
|
||||||
const String SettingTradeTypeService = 's';
|
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';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,5 +3,5 @@ import 'package:aman_kassa_flutter/redux/state/bank_state.dart';
|
||||||
|
|
||||||
bankReducer(BankState prevState, SetBankStateAction action) {
|
bankReducer(BankState prevState, SetBankStateAction action) {
|
||||||
final payload = action.bankState;
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,12 @@ settingReducer(SettingState prevState, SetSettingStateAction action) {
|
||||||
final payload = action.settingState;
|
final payload = action.settingState;
|
||||||
return prevState.copyWith(
|
return prevState.copyWith(
|
||||||
mode: payload.mode,
|
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,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||||
import 'package:meta/meta.dart';
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
|
|
@ -5,24 +6,29 @@ import 'package:meta/meta.dart';
|
||||||
class BankState {
|
class BankState {
|
||||||
final String login;
|
final String login;
|
||||||
final String password;
|
final String password;
|
||||||
|
final HalykPosSession session;
|
||||||
|
|
||||||
BankState({this.login, this.password});
|
BankState({this.login, this.password, this.session,});
|
||||||
|
|
||||||
//read hive
|
//read hive
|
||||||
factory BankState.initial(BankState payload) {
|
factory BankState.initial(BankState payload) {
|
||||||
return BankState(
|
return BankState(
|
||||||
login: payload?.login,
|
login: payload?.login,
|
||||||
password: payload?.password);
|
password: payload?.password,
|
||||||
|
session: payload?.session
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//write hive
|
//write hive
|
||||||
BankState copyWith({
|
BankState copyWith({
|
||||||
@required login,
|
@required login,
|
||||||
@required password,
|
@required password,
|
||||||
|
@required session,
|
||||||
}) {
|
}) {
|
||||||
return BankState(
|
return BankState(
|
||||||
login: login ?? this.login,
|
login: login ?? this.login,
|
||||||
password: password ?? this.password,
|
password: password ?? this.password,
|
||||||
|
session: session ?? this.session
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,58 @@
|
||||||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||||
import 'package:meta/meta.dart';
|
import 'package:meta/meta.dart';
|
||||||
|
import 'package:flutter_bluetooth_basic/src/bluetooth_device.dart';
|
||||||
|
|
||||||
@immutable
|
@immutable
|
||||||
class SettingState {
|
class SettingState {
|
||||||
final String mode;
|
final String mode;
|
||||||
final String tradeType;
|
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
|
//read hive
|
||||||
factory SettingState.initial(SettingState payload) {
|
factory SettingState.initial(SettingState payload) {
|
||||||
return SettingState(
|
return SettingState(
|
||||||
mode: payload?.mode ?? SettingModeKassa,
|
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
|
//write hive
|
||||||
SettingState copyWith({
|
SettingState copyWith({
|
||||||
@required mode,
|
@required mode,
|
||||||
@required tradeType,
|
@required tradeType,
|
||||||
|
@required pinCode,
|
||||||
|
@required pinLocked,
|
||||||
|
@required pinSkip,
|
||||||
|
@required printerBT,
|
||||||
|
@required printerEncoding,
|
||||||
|
@required printerPaperSize,
|
||||||
}) {
|
}) {
|
||||||
return SettingState(
|
return SettingState(
|
||||||
mode: mode ?? this.mode,
|
mode: mode ?? this.mode,
|
||||||
tradeType: tradeType ?? this.tradeType,
|
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(
|
? SettingState(
|
||||||
tradeType: json['tradeType'],
|
tradeType: json['tradeType'],
|
||||||
mode: json['mode'],
|
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;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamic toJson() {
|
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,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ class UserState {
|
||||||
final Smena smena;
|
final Smena smena;
|
||||||
final Money money;
|
final Money money;
|
||||||
|
|
||||||
|
|
||||||
UserState(
|
UserState(
|
||||||
{this.isError,
|
{this.isError,
|
||||||
this.isLoading,
|
this.isLoading,
|
||||||
|
|
@ -26,7 +27,8 @@ class UserState {
|
||||||
this.user,
|
this.user,
|
||||||
this.loginFormMessage,
|
this.loginFormMessage,
|
||||||
this.smena,
|
this.smena,
|
||||||
this.money});
|
this.money,
|
||||||
|
});
|
||||||
|
|
||||||
factory UserState.initial(UserState payload) => UserState(
|
factory UserState.initial(UserState payload) => UserState(
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
|
|
@ -73,7 +75,8 @@ class UserState {
|
||||||
user: User.fromJson(json['user']),
|
user: User.fromJson(json['user']),
|
||||||
authenticateType: json['authenticateType'],
|
authenticateType: json['authenticateType'],
|
||||||
login: json['login'],
|
login: json['login'],
|
||||||
password: json['password'])
|
password: json['password'],
|
||||||
|
)
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
|
import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
|
||||||
import 'package:aman_kassa_flutter/core/locator.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/aman_dao.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/card_data.dart';
|
import 'package:aman_kassa_flutter/core/models/card_data.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/dialog_models.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/BankService.dart';
|
||||||
import 'package:aman_kassa_flutter/core/services/dialog_service.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/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/app_colors.dart';
|
||||||
import 'package:aman_kassa_flutter/shared/ui_helpers.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/views/payment/payment_view.dart';
|
||||||
import 'package:aman_kassa_flutter/widgets/fields/busy_button_icon.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/material.dart';
|
||||||
|
import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
|
||||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||||
import 'package:esys_flutter_share/esys_flutter_share.dart';
|
import 'package:esys_flutter_share/esys_flutter_share.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
class ImageShowContainer extends StatelessWidget {
|
class ImageShowContainer extends StatefulWidget {
|
||||||
final ImageShowModel data;
|
final ImageShowModel showModel;
|
||||||
|
|
||||||
ImageShowContainer(this.data);
|
ImageShowContainer(this.showModel);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ImageShowContainerState createState() => _ImageShowContainerState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ImageShowContainerState extends State<ImageShowContainer> {
|
||||||
|
final PrinterBluetoothManager printerManager = PrinterBluetoothManager();
|
||||||
|
final DialogService _dialogService = locator<DialogService>();
|
||||||
|
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
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
//backgroundColor: fillColor,
|
//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<Color>(
|
||||||
|
whiteColor),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
else
|
||||||
|
IconButton(icon: Icon(Icons.print), onPressed: _print)
|
||||||
|
],
|
||||||
),
|
),
|
||||||
body: ListView(
|
body: ListView(
|
||||||
children: <Widget>[imageFromBase64String(data.data)],
|
children: <Widget>[imageFromBase64String(widget.showModel.data.base64Data)],
|
||||||
),
|
),
|
||||||
floatingActionButton: MyFloatingActionButton(data),
|
floatingActionButton: MyFloatingActionButton(widget.showModel),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -46,7 +125,7 @@ Padding imageFromBase64String(String base64String) {
|
||||||
}
|
}
|
||||||
|
|
||||||
class ImageShowModel {
|
class ImageShowModel {
|
||||||
final String data;
|
final CheckImageModal data;
|
||||||
final String title;
|
final String title;
|
||||||
final String url;
|
final String url;
|
||||||
final CardData cardData;
|
final CardData cardData;
|
||||||
|
|
@ -68,93 +147,71 @@ class _MyFloatingActionButtonState extends State<MyFloatingActionButton> {
|
||||||
NavigatorService _navigatorService = locator<NavigatorService>();
|
NavigatorService _navigatorService = locator<NavigatorService>();
|
||||||
|
|
||||||
|
|
||||||
|
double sheetHeight = 260;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
if (showFab) {
|
|
||||||
return Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
return showFab
|
||||||
children: [
|
? FloatingActionButton(
|
||||||
if (widget.data.cardData != null && widget.data.cardData.transactionType == "payment") FloatingActionButton(
|
child: Icon(Icons.share),
|
||||||
backgroundColor: redColor,
|
onPressed: () {
|
||||||
child: Icon(
|
var bottomSheetController = showBottomSheet(
|
||||||
Icons.settings_backup_restore,
|
context: context,
|
||||||
color: whiteColor,
|
builder: (bottomSheetContext) => Container(
|
||||||
),
|
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
||||||
onPressed: () {
|
decoration: BoxDecoration(
|
||||||
_navigatorService.replace(HomeViewRoute);
|
color: Colors.white,
|
||||||
PaymentModel model = new PaymentModel(voucher: widget.data.voucher, cardData: widget.data.cardData);
|
borderRadius: BorderRadius.all(Radius.circular(15)),
|
||||||
_navigatorService.push(PaymentNfcViewRoute,
|
boxShadow: [
|
||||||
arguments: model);
|
BoxShadow(
|
||||||
},
|
blurRadius: 10,
|
||||||
heroTag: null,
|
color: Colors.grey[300],
|
||||||
) else SizedBox(
|
spreadRadius: 5)
|
||||||
height: 0,
|
]),
|
||||||
),
|
height: sheetHeight,
|
||||||
SizedBox(
|
child: Column(
|
||||||
height: 10,
|
children: <Widget>[
|
||||||
),
|
verticalSpaceSmall,
|
||||||
FloatingActionButton(
|
BusyButtonIcon(
|
||||||
child: Icon(Icons.share),
|
title: 'WhatsApp',
|
||||||
onPressed: () {
|
onPressed: callWhatsApp,
|
||||||
var bottomSheetController = showBottomSheet(
|
mainColor: greenColor,
|
||||||
context: context,
|
icon: MdiIcons.whatsapp,
|
||||||
builder: (bottomSheetContext) => Container(
|
enabled: widget.data.url != null,
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
),
|
||||||
decoration: BoxDecoration(
|
verticalSpaceSmall,
|
||||||
color: Colors.white,
|
BusyButtonIcon(
|
||||||
borderRadius: BorderRadius.all(Radius.circular(15)),
|
title: 'QR-код чека',
|
||||||
boxShadow: [
|
onPressed: qrGenerate,
|
||||||
BoxShadow(
|
mainColor: primaryColor,
|
||||||
blurRadius: 10,
|
icon: MdiIcons.qrcode,
|
||||||
color: Colors.grey[300],
|
enabled: widget.data.url != null,
|
||||||
spreadRadius: 5)
|
),
|
||||||
]),
|
verticalSpaceSmall,
|
||||||
height: 260,
|
BusyButtonIcon(
|
||||||
child: Column(
|
title: 'Поделиться',
|
||||||
children: <Widget>[
|
onPressed: shareFile,
|
||||||
verticalSpaceSmall,
|
mainColor: redColor,
|
||||||
BusyButtonIcon(
|
icon: Icons.share,
|
||||||
title: 'WhatsApp',
|
),
|
||||||
onPressed: callWhatsApp,
|
],
|
||||||
mainColor: greenColor,
|
)));
|
||||||
icon: MdiIcons.whatsapp,
|
bottomSheetController.closed.then((value) {
|
||||||
enabled: widget.data.url != null,
|
showFloatingActionButton(true);
|
||||||
),
|
});
|
||||||
verticalSpaceSmall,
|
},
|
||||||
BusyButtonIcon(
|
)
|
||||||
title: 'QR-код чека',
|
: Container();
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void shareFile() async {
|
void shareFile() async {
|
||||||
try {
|
try {
|
||||||
await Share.file('Aman Kassa', 'aman_kassa_check.png',
|
await Share.file('Aman Kassa', 'aman_kassa_check.png',
|
||||||
base64Decode(widget.data.data), 'image/png');
|
base64Decode(widget.data.data.base64Data), 'image/png');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print('error: $e');
|
print('error: $e');
|
||||||
}
|
}
|
||||||
|
|
@ -163,7 +220,7 @@ class _MyFloatingActionButtonState extends State<MyFloatingActionButton> {
|
||||||
void qrGenerate() async {
|
void qrGenerate() async {
|
||||||
_navigatorService.push(QrViewRoute,
|
_navigatorService.push(QrViewRoute,
|
||||||
arguments:
|
arguments:
|
||||||
ImageShowModel(data: widget.data.url, title: 'Спасибо за покупку'));
|
ImageShowModel(url: widget.data.url, title: 'Спасибо за покупку'));
|
||||||
}
|
}
|
||||||
|
|
||||||
void callWhatsApp() async {
|
void callWhatsApp() async {
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
||||||
|
|
||||||
import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
|
import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
|
||||||
import 'package:aman_kassa_flutter/core/locator.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/card_data.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/check_data.dart';
|
import 'package:aman_kassa_flutter/core/models/check_data.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/close_day_data.dart';
|
import 'package:aman_kassa_flutter/core/models/close_day_data.dart';
|
||||||
|
|
@ -76,7 +77,13 @@ class _HistoryViewState extends State<HistoryView> {
|
||||||
cardData = checkData.cardData;
|
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(
|
return ListTile(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
|
|
||||||
|
|
@ -86,7 +93,7 @@ class _HistoryViewState extends State<HistoryView> {
|
||||||
} else {
|
} else {
|
||||||
_navigatorService.push(ImageShowRoute,
|
_navigatorService.push(ImageShowRoute,
|
||||||
arguments: ImageShowModel(
|
arguments: ImageShowModel(
|
||||||
data: voucher.base64Data,
|
data: checkImageData,
|
||||||
title: voucher.name,
|
title: voucher.name,
|
||||||
url: voucher.url,
|
url: voucher.url,
|
||||||
cardData: cardData,
|
cardData: cardData,
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,8 @@ class _PopupMenuState extends State<PopupMenu> {
|
||||||
// const Choice(title: 'Bank', icon: Icons.text_fields, command: 'bank'),
|
// const Choice(title: 'Bank', icon: Icons.text_fields, command: 'bank'),
|
||||||
if (version >= 24 )
|
if (version >= 24 )
|
||||||
const Choice(title: 'Настройка HalykPos', icon: Icons.phonelink_lock_outlined, command: 'tap2phone'),
|
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')
|
const Choice(title: 'Выйти', icon: Icons.exit_to_app, command: 'exit')
|
||||||
];
|
];
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|
|
||||||
|
|
@ -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/ApiService.dart';
|
||||||
import 'package:aman_kassa_flutter/core/services/DataService.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/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/actions/user_actions.dart';
|
||||||
import 'package:aman_kassa_flutter/redux/constants/setting_const.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/state/setting_state.dart';
|
||||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||||
import 'package:aman_kassa_flutter/shared/app_colors.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/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:aman_kassa_flutter/widgets/loader/Dialogs.dart';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_redux/flutter_redux.dart';
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
import 'package:logger/logger.dart';
|
import 'package:logger/logger.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
import './tabs/KassaTab.dart';
|
import './tabs/KassaTab.dart';
|
||||||
import './tabs/AdditionalTab.dart';
|
import './tabs/AdditionalTab.dart';
|
||||||
import './tabs/CalculatorTab.dart';
|
import './tabs/CalculatorTab.dart';
|
||||||
|
|
||||||
import './components/popup_menu.dart';
|
import './components/popup_menu.dart';
|
||||||
import 'components/bottom_bar.dart';
|
import './components/bottom_bar.dart';
|
||||||
|
|
||||||
class HomeView extends StatefulWidget {
|
class HomeView extends StatefulWidget {
|
||||||
@override
|
@override
|
||||||
_HomeViewState createState() => _HomeViewState();
|
_HomeViewState createState() => _HomeViewState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _HomeViewState extends State<HomeView> {
|
class _HomeViewState extends State<HomeView> with WidgetsBindingObserver {
|
||||||
Logger log = getLogger('HomeView');
|
Logger log = getLogger('HomeView');
|
||||||
PageController pageController;
|
PageController pageController;
|
||||||
int selectedTabIndex;
|
int selectedTabIndex;
|
||||||
|
|
@ -39,17 +41,101 @@ class _HomeViewState extends State<HomeView> {
|
||||||
NavigatorService _navigatorService = locator<NavigatorService>();
|
NavigatorService _navigatorService = locator<NavigatorService>();
|
||||||
final GlobalKey<State> _keyLoader = new GlobalKey<State>();
|
final GlobalKey<State> _keyLoader = new GlobalKey<State>();
|
||||||
|
|
||||||
|
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
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
WidgetsBinding.instance.addObserver(this);
|
||||||
selectedTabIndex = 0;
|
selectedTabIndex = 0;
|
||||||
pageController = new PageController(initialPage: selectedTabIndex);
|
pageController = new PageController(initialPage: selectedTabIndex);
|
||||||
Redux.store.dispatch(checkSmena);
|
Redux.store.dispatch(checkSmena);
|
||||||
_dataService.checkDbFill(Redux.store.state.userState.user);
|
_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
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
|
WidgetsBinding.instance.removeObserver(this);
|
||||||
pageController.dispose();
|
pageController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
@ -65,6 +151,10 @@ class _HomeViewState extends State<HomeView> {
|
||||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||||
} else if (choice.command == 'infokkm') {
|
} else if (choice.command == 'infokkm') {
|
||||||
_navigatorService.push(InfoKkmViewRoute);
|
_navigatorService.push(InfoKkmViewRoute);
|
||||||
|
} else if (choice.command == 'settings') {
|
||||||
|
_navigatorService.push(SettingsViewRoute);
|
||||||
|
} else if (choice.command == 'print') {
|
||||||
|
_navigatorService.push(SettingsPrinterRoute);
|
||||||
} else if (choice.command == 'bank') {
|
} else if (choice.command == 'bank') {
|
||||||
_navigatorService.push(BankViewRoute);
|
_navigatorService.push(BankViewRoute);
|
||||||
} else if (choice.command == 'tap2phone') {
|
} else if (choice.command == 'tap2phone') {
|
||||||
|
|
@ -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/dialog_service.dart';
|
||||||
import 'package:aman_kassa_flutter/core/services/navigator_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/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/operation_const.dart';
|
||||||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||||
import 'package:aman_kassa_flutter/redux/state/kassa_state.dart';
|
import 'package:aman_kassa_flutter/redux/state/kassa_state.dart';
|
||||||
|
|
@ -183,6 +184,7 @@ class KassaTab extends StatelessWidget {
|
||||||
|
|
||||||
Future<void> scan() async {
|
Future<void> scan() async {
|
||||||
try {
|
try {
|
||||||
|
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
||||||
var options = ScanOptions(strings: {
|
var options = ScanOptions(strings: {
|
||||||
"cancel": 'Отмена',
|
"cancel": 'Отмена',
|
||||||
"flash_on": 'Вкл фонарик',
|
"flash_on": 'Вкл фонарик',
|
||||||
|
|
@ -217,7 +219,7 @@ class KassaTab extends StatelessWidget {
|
||||||
List<Good> goods =
|
List<Good> goods =
|
||||||
await _dataService.getGoodsByBarcode(barcode: barcode);
|
await _dataService.getGoodsByBarcode(barcode: barcode);
|
||||||
if (goods != null && goods.isNotEmpty) {
|
if (goods != null && goods.isNotEmpty) {
|
||||||
Redux.store.dispatch(addProductToKassaItems(goods.first, dataMatrix));
|
await Redux.store.dispatch(addProductToKassaItems(goods.first, dataMatrix));
|
||||||
} else {
|
} else {
|
||||||
_dialogService.showDialog(
|
_dialogService.showDialog(
|
||||||
description: 'Товар не найден: $barcode');
|
description: 'Товар не найден: $barcode');
|
||||||
|
|
@ -238,6 +240,8 @@ class KassaTab extends StatelessWidget {
|
||||||
result.rawContent = 'Unknown error: $e';
|
result.rawContent = 'Unknown error: $e';
|
||||||
_dialogService.showDialog(description: 'Неизвестная ошибка: $e');
|
_dialogService.showDialog(description: 'Неизвестная ошибка: $e');
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
await Redux.store.dispatch(changePinSkipFromSetting(false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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<PassCodeScreen> {
|
||||||
|
// bool isFingerprint = false;
|
||||||
|
NavigatorService _navigatorService = locator<NavigatorService>();
|
||||||
|
final backgroundedTimeKey = 'backgroundedTimeKey';
|
||||||
|
|
||||||
|
|
||||||
|
// Future<Null> 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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
|
import 'dart:convert';
|
||||||
import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
|
import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
|
||||||
|
|
||||||
import 'package:aman_kassa_flutter/core/locator.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/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/card_data.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/product_dao.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/models/response.dart';
|
||||||
|
|
@ -281,6 +284,7 @@ class _PaymentViewState extends State<PaymentView> {
|
||||||
if (response.operation) {
|
if (response.operation) {
|
||||||
String message = response.body['message'];
|
String message = response.body['message'];
|
||||||
String check = response.body['check'];
|
String check = response.body['check'];
|
||||||
|
var checkText = response.body['check_text'];
|
||||||
String url = response?.body['link'];
|
String url = response?.body['link'];
|
||||||
print('url : $url');
|
print('url : $url');
|
||||||
if (_mode == SettingModeCalc) {
|
if (_mode == SettingModeCalc) {
|
||||||
|
|
@ -293,9 +297,8 @@ class _PaymentViewState extends State<PaymentView> {
|
||||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||||
_navigatorService.pop();
|
_navigatorService.pop();
|
||||||
_navigatorService.push(ImageShowRoute,
|
_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 &&
|
} else if (!response.operation && ![401, 402, 403, 412, 500].contains(response.status)) {
|
||||||
![401, 402, 403, 412, 500].contains(response.status)) {
|
|
||||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||||
_dialogService.showDialog(description: response.body['message']);
|
_dialogService.showDialog(description: response.body['message']);
|
||||||
} else if(!response.operation && response.body['message'] != null) {
|
} else if(!response.operation && response.body['message'] != null) {
|
||||||
|
|
|
||||||
|
|
@ -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/calc_model.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/card_data.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_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/product_dao.dart';
|
||||||
import 'package:aman_kassa_flutter/core/models/response.dart';
|
import 'package:aman_kassa_flutter/core/models/response.dart';
|
||||||
import 'package:aman_kassa_flutter/core/route_names.dart';
|
import 'package:aman_kassa_flutter/core/route_names.dart';
|
||||||
|
|
@ -70,6 +72,19 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
||||||
|
|
||||||
void start() async {
|
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();
|
bool success = await _bankService.permissions();
|
||||||
|
|
@ -114,8 +129,7 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//Авторизация
|
|
||||||
BankState bankState = Redux.store.state.bankState;
|
|
||||||
AmanDao authDao = await _bankService.auth(
|
AmanDao authDao = await _bankService.auth(
|
||||||
login: bankState.login, password: bankState.password);
|
login: bankState.login, password: bankState.password);
|
||||||
if (!authDao.success) {
|
if (!authDao.success) {
|
||||||
|
|
@ -276,6 +290,7 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
||||||
if (response.operation) {
|
if (response.operation) {
|
||||||
String message = response.body['message'];
|
String message = response.body['message'];
|
||||||
String check = response.body['check'];
|
String check = response.body['check'];
|
||||||
|
var checkText = response.body['check_text'];
|
||||||
String url = response?.body['link'];
|
String url = response?.body['link'];
|
||||||
print('url : $url');
|
print('url : $url');
|
||||||
if (_mode == SettingModeCalc) {
|
if (_mode == SettingModeCalc) {
|
||||||
|
|
@ -288,11 +303,11 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
||||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||||
_navigatorService.replace(HomeViewRoute);
|
_navigatorService.replace(HomeViewRoute);
|
||||||
_navigatorService.push(ImageShowRoute,
|
_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 &&
|
} else if (!response.operation &&
|
||||||
![401, 402, 403, 412, 500].contains(response.status)) {
|
![401, 402, 403, 412, 500].contains(response.status)) {
|
||||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||||
_dialogService.showDialog(description: response.body['message']);
|
_dialogService.showDialog(description: response.body['message']);
|
||||||
} else {
|
} else {
|
||||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||||
}
|
}
|
||||||
|
|
@ -332,6 +347,7 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
||||||
if (response.operation) {
|
if (response.operation) {
|
||||||
String message = response.body['message'];
|
String message = response.body['message'];
|
||||||
String check = response.body['check'];
|
String check = response.body['check'];
|
||||||
|
var checkText = response.body['check_text'];
|
||||||
String url = response?.body['link'];
|
String url = response?.body['link'];
|
||||||
print('url : $url');
|
print('url : $url');
|
||||||
Redux.store.dispatch(checkMoney);
|
Redux.store.dispatch(checkMoney);
|
||||||
|
|
@ -339,7 +355,7 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
||||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||||
_navigatorService.replace(HomeViewRoute);
|
_navigatorService.replace(HomeViewRoute);
|
||||||
_navigatorService.push(ImageShowRoute,
|
_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 &&
|
} else if (!response.operation &&
|
||||||
![401, 402, 403, 412, 500].contains(response.status)) {
|
![401, 402, 403, 412, 500].contains(response.status)) {
|
||||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ class _QrViewState extends State<QrView> {
|
||||||
body: Container(
|
body: Container(
|
||||||
child: Center(
|
child: Center(
|
||||||
child: QrImage(
|
child: QrImage(
|
||||||
data: widget.data.data,
|
data: widget.data.url,
|
||||||
version: QrVersions.auto,
|
version: QrVersions.auto,
|
||||||
size: 220.0,
|
size: 220.0,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -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<SettingItem> {
|
||||||
|
@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: <TextSpan>[
|
||||||
|
if(widget.value !=null)
|
||||||
|
TextSpan(text: ' ${widget.value}', style: TextStyle(fontStyle: FontStyle.italic)),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
),
|
||||||
|
trailing: Icon(Icons.chevron_right),
|
||||||
|
onTap: widget.onTap,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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<Ticket> 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<int> 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<Ticket> 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<Ticket> 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<Ticket> 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<dynamic> 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<int> 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;
|
||||||
|
}
|
||||||
|
|
@ -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 мм"
|
||||||
|
};
|
||||||
|
|
@ -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"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -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<PrinterEncodingView> {
|
||||||
|
|
||||||
|
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: <Widget>[
|
||||||
|
Container(
|
||||||
|
height: 60,
|
||||||
|
padding: EdgeInsets.only(left: 10),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Icon(Icons.sort_by_alpha_outlined),
|
||||||
|
SizedBox(width: 10),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Text(encoding.values.elementAt(index) ?? ''),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Divider(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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<PrinterPaperView> {
|
||||||
|
|
||||||
|
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: <Widget>[
|
||||||
|
Container(
|
||||||
|
height: 60,
|
||||||
|
padding: EdgeInsets.only(left: 10),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Icon(Icons.sort_by_alpha_outlined),
|
||||||
|
SizedBox(width: 10),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Text(paperSize.values.elementAt(index) ?? ''),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Divider(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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<PrinterSelectView> {
|
||||||
|
PrinterBluetoothManager printerManager = PrinterBluetoothManager();
|
||||||
|
List<PrinterBluetooth> _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<Ticket> 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: <Widget>[
|
||||||
|
Container(
|
||||||
|
height: 60,
|
||||||
|
padding: EdgeInsets.only(left: 10),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Icon(Icons.print),
|
||||||
|
SizedBox(width: 10),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
Text(_devices[index].name ?? ''),
|
||||||
|
Text(_devices[index].address),
|
||||||
|
Text(
|
||||||
|
'Click to print a test receipt',
|
||||||
|
style: TextStyle(color: Colors.grey[700]),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Divider(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
floatingActionButton: StreamBuilder<bool>(
|
||||||
|
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,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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<SettingPrinterView> {
|
||||||
|
NavigatorService _navigatorService = locator<NavigatorService>();
|
||||||
|
final DialogService _dialogService = locator<DialogService>();
|
||||||
|
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<AppState, SettingState>(
|
||||||
|
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();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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<SettingView> {
|
||||||
|
TextEditingController _pinController;
|
||||||
|
final DialogService _dialogService = locator<DialogService>();
|
||||||
|
|
||||||
|
@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: <Widget>[
|
||||||
|
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),
|
||||||
|
),
|
||||||
|
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
175
pubspec.lock
175
pubspec.lock
|
|
@ -1,13 +1,27 @@
|
||||||
# Generated by pub
|
# Generated by pub
|
||||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||||
packages:
|
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:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: async
|
name: async
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.0-nullsafety.1"
|
version: "2.5.0"
|
||||||
auto_size_text:
|
auto_size_text:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -28,35 +42,42 @@ packages:
|
||||||
name: boolean_selector
|
name: boolean_selector
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0-nullsafety.1"
|
version: "2.1.0"
|
||||||
characters:
|
characters:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: characters
|
name: characters
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0-nullsafety.3"
|
version: "1.1.0"
|
||||||
charcode:
|
charcode:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: charcode
|
name: charcode
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
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:
|
clock:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: clock
|
name: clock
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0-nullsafety.1"
|
version: "1.1.0"
|
||||||
collection:
|
collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: collection
|
name: collection
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.15.0-nullsafety.3"
|
version: "1.15.0"
|
||||||
convert:
|
convert:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -71,6 +92,13 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.5"
|
version: "2.1.5"
|
||||||
|
csslib:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: csslib
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.16.2"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -99,6 +127,20 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.5"
|
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:
|
esys_flutter_share:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -112,7 +154,7 @@ packages:
|
||||||
name: fake_async
|
name: fake_async
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0-nullsafety.1"
|
version: "1.2.0"
|
||||||
ffi:
|
ffi:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -139,6 +181,27 @@ packages:
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
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:
|
flutter_redux:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -163,6 +226,13 @@ packages:
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
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:
|
get_it:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -177,6 +247,20 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
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:
|
http:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -191,6 +275,13 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.4"
|
version: "3.1.4"
|
||||||
|
image:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.19"
|
||||||
intl:
|
intl:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -198,6 +289,27 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.16.1"
|
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:
|
logger:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -218,7 +330,7 @@ packages:
|
||||||
name: matcher
|
name: matcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.10-nullsafety.1"
|
version: "0.12.10"
|
||||||
material_design_icons_flutter:
|
material_design_icons_flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -232,7 +344,7 @@ packages:
|
||||||
name: meta
|
name: meta
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0-nullsafety.3"
|
version: "1.3.0"
|
||||||
nested:
|
nested:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -246,7 +358,7 @@ packages:
|
||||||
name: path
|
name: path
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.0-nullsafety.1"
|
version: "1.8.0"
|
||||||
path_provider:
|
path_provider:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -289,6 +401,13 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.2"
|
version: "1.9.2"
|
||||||
|
petitparser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: petitparser
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.0"
|
||||||
platform:
|
platform:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -373,8 +492,15 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.0"
|
version: "0.3.0"
|
||||||
shared_preferences:
|
rxdart:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: rxdart
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.23.1"
|
||||||
|
shared_preferences:
|
||||||
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: shared_preferences
|
name: shared_preferences
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
|
|
@ -426,7 +552,7 @@ packages:
|
||||||
name: source_span
|
name: source_span
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.0-nullsafety.2"
|
version: "1.8.0"
|
||||||
sqflite:
|
sqflite:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -447,21 +573,21 @@ packages:
|
||||||
name: stack_trace
|
name: stack_trace
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.10.0-nullsafety.1"
|
version: "1.10.0"
|
||||||
stream_channel:
|
stream_channel:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: stream_channel
|
name: stream_channel
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0-nullsafety.1"
|
version: "2.1.0"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: string_scanner
|
name: string_scanner
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0-nullsafety.1"
|
version: "1.1.0"
|
||||||
synchronized:
|
synchronized:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -475,21 +601,21 @@ packages:
|
||||||
name: term_glyph
|
name: term_glyph
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0-nullsafety.1"
|
version: "1.2.0"
|
||||||
test_api:
|
test_api:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.19-nullsafety.2"
|
version: "0.2.19"
|
||||||
typed_data:
|
typed_data:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: typed_data
|
name: typed_data
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0-nullsafety.3"
|
version: "1.3.0"
|
||||||
url_launcher:
|
url_launcher:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -538,7 +664,7 @@ packages:
|
||||||
name: vector_math
|
name: vector_math
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0-nullsafety.3"
|
version: "2.1.0"
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
@ -553,6 +679,13 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.2"
|
version: "0.1.2"
|
||||||
|
xml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: xml
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.5.1"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.10.2 <2.11.0"
|
dart: ">=2.12.0-0.0 <3.0.0"
|
||||||
flutter: ">=1.22.2 <2.0.0"
|
flutter: ">=1.22.2"
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,13 @@ dependencies:
|
||||||
qr_flutter: ^3.2.0
|
qr_flutter: ^3.2.0
|
||||||
mask_text_input_formatter: ^1.2.1
|
mask_text_input_formatter: ^1.2.1
|
||||||
flutter_screenutil: ^4.0.2+5
|
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:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue