m4bank test-app inited
parent
f8f646279f
commit
e5f6cad039
|
|
@ -46,7 +46,7 @@ android {
|
|||
|
||||
defaultConfig {
|
||||
applicationId "com.example.aman_kassa_flutter"
|
||||
minSdkVersion 18
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 28
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
|
|
@ -80,38 +80,49 @@ dependencies {
|
|||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test:runner:1.1.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
||||
//m4bank dependencies
|
||||
//implementation (group: 'm4bank', name: 'zlibrary', version: '2093', ext: 'aar')
|
||||
implementation("m4bank:zlibrary:2093@aar")
|
||||
implementation (group: 'm4bank', name: 'cardreaderlib', version: '725')
|
||||
implementation (group: 'm4bank', name: 'connectionreaders', version: '725')
|
||||
//implementation deps.okhttp.core
|
||||
//implementation deps.okhttp.logger
|
||||
implementation("com.squareup.okhttp3:okhttp:4.7.2")
|
||||
implementation("com.squareup.okhttp3:logging-interceptor:4.7.2")
|
||||
|
||||
//implementation deps.retrofit.core
|
||||
//implementation deps.retrofit.converterGson
|
||||
//implementation deps.retrofit.rxjava2Adapter
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
|
||||
//implementation deps.rx.core
|
||||
//implementation deps.rx.android
|
||||
//implementation deps.logback.core
|
||||
//implementation(deps.logback.classic) {
|
||||
// exclude group: 'com.google.android', module: 'android'
|
||||
//}
|
||||
implementation 'ch.qos.logback:logback-core:1.2.3'
|
||||
implementation ('ch.qos.logback:logback-classic:1.2.3') {
|
||||
//m4bank dependencies
|
||||
implementation deps.zlibrary
|
||||
implementation deps.hardware.terminalCommon.values()
|
||||
implementation deps.hardware.aisino.aisino_common
|
||||
implementation deps.hardware.aisino.vm20.values()
|
||||
implementation deps.hardware.wangpos.values()
|
||||
implementation deps.hardware.roam.values()
|
||||
implementation deps.hardware.spirelib
|
||||
implementation deps.hardware.icmp.values()
|
||||
implementation deps.hardware.atol.values()
|
||||
// if (buildType.buildType == 'NFC') {
|
||||
// implementation deps.hardware.softpos.softpaylibrary
|
||||
// implementation deps.hardware.softpos.softpay_dependencies
|
||||
// } else {
|
||||
// implementation deps.hardware.aisino.a90.values()
|
||||
// }
|
||||
//implementation deps.hardware.softpos.softpaylibrary
|
||||
//implementation deps.hardware.softpos.softpay_dependencies
|
||||
implementation deps.hardware.aisino.a90.values()
|
||||
|
||||
implementation deps.hardware.shtrih.values()
|
||||
implementation deps.hardware.redlib
|
||||
implementation deps.hardware.sunmi
|
||||
implementation deps.hardware.d200lib
|
||||
|
||||
//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 deps.greendao
|
||||
implementation 'org.greenrobot:greendao:3.3.0'
|
||||
//implementation deps.timber
|
||||
implementation 'com.jakewharton.timber:timber:4.7.1'
|
||||
//implementation deps.paperdb
|
||||
implementation 'io.paperdb:paperdb:2.6'
|
||||
//implementation deps.retro_stream
|
||||
implementation 'net.sourceforge.streamsupport:android-retrostreams:1.7.2'
|
||||
//useWebsockets = true
|
||||
//implementation deps.websockets
|
||||
//Implementation other libraries
|
||||
implementation deps.timber
|
||||
implementation deps.paperdb
|
||||
implementation deps.greendao
|
||||
|
||||
implementation deps.retro_stream
|
||||
|
||||
implementation deps.websockets // Only for useWebsockets parameter
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.example.aman_kassa_flutter">
|
||||
<!--
|
||||
io.flutter.app.FlutterApplication is an android.app.Application that
|
||||
|
|
@ -14,12 +15,14 @@
|
|||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<application
|
||||
tools:replace="android:label"
|
||||
android:name="io.flutter.app.FlutterApplication"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="Аман Касса"
|
||||
android:roundIcon="@mipmap/ic_launcher_rounded"
|
||||
android:usesCleartextTraffic="true">
|
||||
<activity android:name=".bank.BankActivity" android:theme="@android:style/Theme.Black.NoTitleBar"></activity>
|
||||
<activity android:name=".bank.M4BankActivity" android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar"></activity>
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,65 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,175 @@
|
|||
package com.example.aman_kassa_flutter.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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,465 @@
|
|||
package com.example.aman_kassa_flutter.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.example.aman_kassa_flutter.bank.gui.CustomKeyBoardDilalog;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,217 @@
|
|||
package com.example.aman_kassa_flutter.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.example.aman_kassa_flutter.bank.gui.CustomKeyBoardDilalog;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
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();
|
||||
// });
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,336 @@
|
|||
package com.example.aman_kassa_flutter.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.example.aman_kassa_flutter.bank.gui.CustomKeyBoardDilalog;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,187 @@
|
|||
package com.example.aman_kassa_flutter.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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
package com.example.aman_kassa_flutter.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package com.example.aman_kassa_flutter.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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
package com.example.aman_kassa_flutter.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);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
package com.example.aman_kassa_flutter.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();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
package com.example.aman_kassa_flutter.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();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,152 @@
|
|||
package com.example.aman_kassa_flutter.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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,363 @@
|
|||
package com.example.aman_kassa_flutter.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));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,153 @@
|
|||
package com.example.aman_kassa_flutter.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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
package com.example.aman_kassa_flutter.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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,177 @@
|
|||
package com.example.aman_kassa_flutter.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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,174 @@
|
|||
package com.example.aman_kassa_flutter.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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
package com.example.aman_kassa_flutter.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.GetSerialNumberCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.result.GetSNResult;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class GetSerialNumberCallbackHandlerImpl implements GetSerialNumberCallbackHandler {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public GetSerialNumberCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "onNoBoundedDevicesFound", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String s) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean b, String s) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "notAuthorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List list) {
|
||||
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, list);
|
||||
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 onDeviceToUseSelectionRequested(List list) {
|
||||
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<>(list));
|
||||
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 onCompleted(GetSNResult result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getSerialNumber(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "onWrongApiCalled", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
package com.example.aman_kassa_flutter.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();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,814 @@
|
|||
package com.example.aman_kassa_flutter.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 com.example.aman_kassa_flutter.R;
|
||||
import com.example.aman_kassa_flutter.bank.builders.SslConfigurationBuilder;
|
||||
import com.example.aman_kassa_flutter.bank.gui.SelectDialogCallback;
|
||||
import com.example.aman_kassa_flutter.bank.gui.SelectElementDialog;
|
||||
import com.example.aman_kassa_flutter.bank.managing.PreferencesManager;
|
||||
import com.example.aman_kassa_flutter.bank.permissions.PermissionsManager;
|
||||
import com.example.aman_kassa_flutter.bank.permissions.PermissionsManagerImpl;
|
||||
|
||||
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 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.GetSerialNumberCallbackHandler;
|
||||
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 GetSerialNumberCallbackHandler getSerialNumberCallbackHandler;
|
||||
|
||||
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);
|
||||
//слушатель для получения серийного номера
|
||||
getSerialNumberCallbackHandler = new GetSerialNumberCallbackHandlerImpl(this);
|
||||
//слушатель для считывания barcode
|
||||
scanBarCodeCallbackHandler = new ScanBarCodeCallbackHandlerImpl(this);
|
||||
|
||||
initLoginForm();
|
||||
|
||||
initButton(R.id.getSerialNumber, v -> getSerialNumber());
|
||||
|
||||
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());
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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)
|
||||
.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 getSerialNumber() {
|
||||
clientInterface.getCardReaderManager().getCardReaderSerialNumber(getSerialNumberCallbackHandler);
|
||||
}
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
package com.example.aman_kassa_flutter.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
package com.example.aman_kassa_flutter.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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,309 @@
|
|||
package com.example.aman_kassa_flutter.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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
package com.example.aman_kassa_flutter.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() {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.example.aman_kassa_flutter.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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package com.example.aman_kassa_flutter.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!");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.example.aman_kassa_flutter.bank;
|
||||
|
||||
public enum TerminalKeyTypeMpos {
|
||||
Tmp, Tpk, Tak
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
package com.example.aman_kassa_flutter.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package com.example.aman_kassa_flutter.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
package com.example.aman_kassa_flutter.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 com.example.aman_kassa_flutter.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;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
package com.example.aman_kassa_flutter.bank.gui;
|
||||
|
||||
/**
|
||||
* Created by pppoo on 27.02.2018.
|
||||
*/
|
||||
|
||||
public interface SelectDialogCallback<ElementType> {
|
||||
void onElementSelected(ElementType element);
|
||||
void onCancelSelection();
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
package com.example.aman_kassa_flutter.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 com.example.aman_kassa_flutter.R;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
package com.example.aman_kassa_flutter.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);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
package com.example.aman_kassa_flutter.bank.permissions;
|
||||
|
||||
public interface PermissionsManager {
|
||||
void checkPermissions(PermissionsCheckResultHandler handler);
|
||||
void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults);
|
||||
|
||||
interface PermissionsCheckResultHandler {
|
||||
void onPermissionsGranted();
|
||||
void onPermissionsDeclined();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
package com.example.aman_kassa_flutter.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;
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@ package com.example.aman_kassa_flutter
|
|||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import androidx.annotation.NonNull
|
||||
import com.example.aman_kassa_flutter.bank.BankActivity
|
||||
import com.example.aman_kassa_flutter.bank.M4BankActivity
|
||||
import com.example.aman_kassa_flutter.bank.MusicPlugin
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
|
|
@ -25,8 +25,9 @@ class MainActivity: FlutterActivity() {
|
|||
call, result ->
|
||||
if (call.method == "start") {
|
||||
_result = result
|
||||
val intent= Intent(this, BankActivity::class.java)
|
||||
val intent= Intent(this, M4BankActivity::class.java)
|
||||
startActivityForResult(intent, 8989)
|
||||
|
||||
//result.success("ActivityStarted")
|
||||
} else {
|
||||
result.notImplemented()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,476 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
tools:context="com.example.aman_kassa_flutter.bank.M4BankActivity">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingTop="@dimen/activity_vertical_margin">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<Button
|
||||
android:id="@+id/authorize"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/authorize_button" />
|
||||
<EditText
|
||||
android:id="@+id/amountField"
|
||||
android:layout_weight="1"
|
||||
android:inputType="numberDecimal"
|
||||
android:hint="@string/amount_hint"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/login"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="@string/login_hint"
|
||||
android:inputType="text" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/password"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="@string/password_hint"
|
||||
android:inputType="textPassword" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/logout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/logout_button" />
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/changePassword"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="wrap_content"-->
|
||||
<!--android:layout_gravity="center_horizontal"-->
|
||||
<!--android:text="@string/change_password_button" />-->
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<!--<EditText-->
|
||||
<!--android:id="@+id/oldPassword"-->
|
||||
<!--android:layout_width="0dp"-->
|
||||
<!--android:layout_height="wrap_content"-->
|
||||
<!--android:layout_weight="1"-->
|
||||
<!--android:hint="@string/old_password_hint"-->
|
||||
<!--android:inputType="textPassword" />-->
|
||||
|
||||
<!--<EditText-->
|
||||
<!--android:id="@+id/newPassword"-->
|
||||
<!--android:layout_width="0dp"-->
|
||||
<!--android:layout_height="wrap_content"-->
|
||||
<!--android:layout_weight="1"-->
|
||||
<!--android:hint="@string/new_password_hint"-->
|
||||
<!--android:inputType="textPassword" />-->
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/register"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="wrap_content"-->
|
||||
<!--android:text="@string/register_button" />-->
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<!--<EditText-->
|
||||
<!--android:id="@+id/code"-->
|
||||
<!--android:layout_width="0dp"-->
|
||||
<!--android:layout_height="wrap_content"-->
|
||||
<!--android:layout_weight="1"-->
|
||||
<!--android:hint="@string/code_hint"-->
|
||||
<!--android:inputType="number" />-->
|
||||
|
||||
<!--<EditText-->
|
||||
<!--android:id="@+id/pin"-->
|
||||
<!--android:layout_width="0dp"-->
|
||||
<!--android:layout_height="wrap_content"-->
|
||||
<!--android:layout_weight="1"-->
|
||||
<!--android:hint="@string/pin_hint"-->
|
||||
<!--android:inputType="number" />-->
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/checkAccess"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/check_access" />
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/checkAccessSpinner"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:entries="@array/accessTypes" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/getAccesses"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/get_available_operations" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/setLanguage"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:text="@string/set_language" />-->
|
||||
|
||||
<!--<Spinner-->
|
||||
<!--android:id="@+id/setLanguageSpinner"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="wrap_content"-->
|
||||
<!--android:entries="@array/languages" />-->
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<Button
|
||||
android:id="@+id/checkConnection"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/check_connection" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/getLicense"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/get_license" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<Button
|
||||
android:id="@+id/makeCardPayment"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/make_card_payment" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/getCommonCardData"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/get_common_card_data" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<Button
|
||||
android:id="@+id/makeReversalLast"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/make_reversal_last" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/getCurrentTransactionDetails"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/get_current_transaction_details" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/completePayment"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/complete_payment" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/getSerialNumber"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/getSerialNumber" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/makeReversalLastWithCallback"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/make_reversal_last_saved_operation" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/makeCashPayment"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/make_cash_payment" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/makeAlipayPayment"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/make_alipay_payment" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/makeCardRefund"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/make_card_refund" />
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/makeCardRefundWithD200"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:text="@string/make_card_refund_with_d200" />-->
|
||||
|
||||
<Button
|
||||
android:id="@+id/makeCashRefund"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/make_cash_refund" />
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/makeCashRefundWithD200"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:text="@string/make_cash_refund_with_d200" />-->
|
||||
|
||||
<Button
|
||||
android:id="@+id/makeAlipayRefund"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/make_alipay_refund" />
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/makeReversal"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:text="@string/make_reversal" />-->
|
||||
|
||||
<Button
|
||||
android:id="@+id/makeEasyReversal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/make_easy_reversal" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/makeEasyCardReversal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/make_easy_card_reversal" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/makeReconciliation"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:text="@string/make_reconciliation" />-->
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/enterServiceMenu"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:text="@string/enter_service_menu" />-->
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/addAdditionalCardReader"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:text="@string/add_additional_card_reader" />-->
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/getReadersInfo"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:text="@string/get_readers_info" />-->
|
||||
|
||||
<Button
|
||||
android:id="@+id/getMerchantUsers"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/get_merchant_users" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/resendReceipt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/resend_receipt" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/getTransactionDetails"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/get_transaction_details" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/getTransactionListFilter"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/get_filter_list" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/activate"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/activate" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/addPrinter"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/add_new_printer" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/deletePrinter"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/delete_printer" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/printFiscal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/printing_fiscal_check" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/printSlipCheck"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/printing_slip_check" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/printTemplate"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/print_template" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/printReportX"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/printing_x_report" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/printReportZ"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/printing_z_report" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/printFullReport"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/printing_full_report" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/printShortReport"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/printing_short_report" />
|
||||
|
||||
<!--<Button-->
|
||||
<!--android:id="@+id/executeExternalApplication"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:text="@string/call_external_application" />-->
|
||||
|
||||
<Button
|
||||
android:id="@+id/sendRegisterRequest"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/send_register_request" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/cancel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/cancel_interface" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/ecomPayment"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/make_ecom_payment" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/getAccessPaymentInstruments"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/get_access_payment_instruments" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/closeDay"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/close_day" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/writeTerminalKeys"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/write_terminal_keys" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/readBarCode"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/read_barcode" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/updateDictionary"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/update_dictionary" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/white"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/labelMessage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_marginRight="20dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:text="Choose element" />
|
||||
|
||||
<ListView
|
||||
android:id="@+id/list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/labelMessage"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_marginRight="20dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:cacheColorHint="#00000000"
|
||||
android:divider="@android:color/transparent"
|
||||
android:dividerHeight="1dp"
|
||||
android:listSelector="@android:color/transparent" />
|
||||
</RelativeLayout>
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:weightSum="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:text="New Text"
|
||||
android:textSize="30sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/button1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_1" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_2" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_3" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/button4"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_4" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button5"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_5" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button6"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_6" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/button7"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_7" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button8"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_8" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button9"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_9" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="0.36"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/button0"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_0" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttoncan"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/cancel" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonconfirm"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/confirm" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonclean"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/clear" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonstart"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_start" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonexit"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/pin_text_btn_exit" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/itemView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:padding="20dp"
|
||||
android:textColor="@android:color/black" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#3F51B5</color>
|
||||
<color name="colorPrimaryDark">#303F9F</color>
|
||||
<color name="colorAccent">#FF4081</color>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<resources>
|
||||
<!-- Default screen margins, per the Android Design guidelines. -->
|
||||
<dimen name="activity_horizontal_margin">16dp</dimen>
|
||||
<dimen name="activity_vertical_margin">16dp</dimen>
|
||||
</resources>
|
||||
|
|
@ -1 +1,104 @@
|
|||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_name">TestAppM4bank</string>
|
||||
<string name="authorize_button">Authorize</string>
|
||||
<string name="logout_button">Log Out</string>
|
||||
<string name="change_password_button">Change Password</string>
|
||||
<string name="login_hint">Enter Your Login</string>
|
||||
<string name="password_hint">Enter Your Password</string>
|
||||
<string name="old_password_hint">Enter Old Password</string>
|
||||
<string name="new_password_hint">Enter New Password</string>
|
||||
<string name="register_button">Register</string>
|
||||
<string name="code_hint">Enter Reader Code</string>
|
||||
<string name="pin_hint">Enter Reader Pin</string>
|
||||
<string name="serial_hint">Enter Reader Serial Number</string>
|
||||
<string name="default_server_address1">http://10.10.0.245:29978</string>
|
||||
<string name="default_server_address2">http://10.45.49.31:29978</string>
|
||||
<string name="default_server_address_sber_test">http://sbertest.m4bank.ru:21017</string>
|
||||
<!--<string name="default_server_address_mpos_5_0_test">http://217.174.185.218:35997</string>-->
|
||||
<string name="default_server_address_mpos_5_0_test">http://10.31.0.40:5000</string>
|
||||
|
||||
<string name="check_access">Check access</string>
|
||||
<string name="get_available_operations">Get available operations</string>
|
||||
<string name="set_language">Set language</string>
|
||||
<string name="check_connection">Check connection</string>
|
||||
<string name="make_card_payment">Make card payment</string>
|
||||
<string name="get_common_card_data">Get common card data</string>
|
||||
<string name="add_additional_card_reader">Add additional card reader</string>
|
||||
<string name="get_readers_info">Get readers info</string>
|
||||
<string name="make_cash_payment">Make cash payment</string>
|
||||
<string name="make_alipay_payment">Make alipay payment</string>
|
||||
<string name="make_card_refund">Make card refund</string>
|
||||
<string name="make_card_refund_with_d200">Make card refund with D200</string>
|
||||
<string name="make_cash_refund_with_d200">Make easy cash refund</string>
|
||||
<string name="make_alipay_refund">Make alipay refund</string>
|
||||
<string name="make_cash_refund">Make cash refund</string>
|
||||
<string name="make_reversal">Make reversal</string>
|
||||
<string name="make_easy_reversal">Make easy reversal</string>
|
||||
<string name="make_easy_card_reversal">Make easy card reversal</string>
|
||||
<string name="make_reconciliation">Make reconciliation</string>
|
||||
<string name="get_merchant_users">Get merchant users</string>
|
||||
<string name="get_access_payment_instruments">Get access PI</string>
|
||||
<string name="close_day">Close day</string>
|
||||
<string name="write_terminal_keys">Write terminal keys</string>
|
||||
<string name="read_barcode">Read BarCode</string>
|
||||
<string name="update_dictionary">Update Dictionary</string>
|
||||
|
||||
<string-array name="accessTypes">
|
||||
<item>Payment</item>
|
||||
<item>Reversal</item>
|
||||
<item>Refund</item>
|
||||
<item>Cash</item>
|
||||
<item>PartRefund</item>
|
||||
<item>AddReader</item>
|
||||
<item>CloseDay</item>
|
||||
<item>AddPrinter</item>
|
||||
<item>FuncPrinter</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="languages">
|
||||
<item>rus</item>
|
||||
<item>eng</item>
|
||||
</string-array>
|
||||
|
||||
<string name="confirm">confirm</string>
|
||||
<string name="clear">clear</string>
|
||||
<string name="cancel">cancel</string>
|
||||
<string name="resend_receipt">Resend receipt</string>
|
||||
<string name="get_transaction_details">Get transaction details</string>
|
||||
<string name="get_filter_list">Get filter list</string>
|
||||
<string name="activate">Activate</string>
|
||||
<string name="add_new_printer">Add new printer</string>
|
||||
<string name="delete_printer">Delete printer</string>
|
||||
<string name="printing_fiscal_check">Printing fiscal check</string>
|
||||
<string name="printing_slip_check">Printing slip check</string>
|
||||
<string name="print_template">print template</string>
|
||||
<string name="printing_x_report">Printing X report</string>
|
||||
<string name="printing_z_report">Printing Z report</string>
|
||||
<string name="printing_full_report">Printing full report</string>
|
||||
<string name="printing_short_report">Printing short report</string>
|
||||
<string name="call_external_application">Call external application</string>
|
||||
<string name="send_register_request">Send register request</string>
|
||||
<string name="cancel_interface">Cancel interface</string>
|
||||
<string name="make_ecom_payment">Make ecom payment</string>
|
||||
<string name="enter_service_menu">Enter service menu</string>
|
||||
<string name="make_reversal_last_saved_operation">Make reversal last saved operation</string>
|
||||
<string name="getSerialNumber">Get Serial Number</string>
|
||||
|
||||
<string name="pin_text_btn_1">1</string>
|
||||
<string name="pin_text_btn_2">2</string>
|
||||
<string name="pin_text_btn_3">3</string>
|
||||
<string name="pin_text_btn_4">4</string>
|
||||
<string name="pin_text_btn_5">5</string>
|
||||
<string name="pin_text_btn_6">6</string>
|
||||
<string name="pin_text_btn_7">7</string>
|
||||
<string name="pin_text_btn_8">8</string>
|
||||
<string name="pin_text_btn_9">9</string>
|
||||
<string name="pin_text_btn_0">0</string>
|
||||
<string name="pin_text_btn_start">start</string>
|
||||
<string name="pin_text_btn_exit">exit</string>
|
||||
<string name="get_license">Get license</string>
|
||||
<string name="make_reversal_last">Make reversal last</string>
|
||||
<string name="get_current_transaction_details">Get current transaction details</string>
|
||||
<string name="complete_payment">Complete payment</string>
|
||||
<string name="amount_hint">Amount</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -9,10 +9,110 @@ buildscript {
|
|||
classpath 'com.android.tools.build:gradle:3.5.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
|
||||
ext.buildType = [
|
||||
'buildType': ''
|
||||
]
|
||||
|
||||
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 = [
|
||||
'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:750",
|
||||
"connectionreaders": "m4bank:connectionreaders:750",
|
||||
"emv-taglib" : "external:emv-taglib:2.4",
|
||||
],
|
||||
'aisino' : [
|
||||
"aisino_common": "m4bank:aisino_common:138",
|
||||
"vm20" : [
|
||||
"vm20" : "external:vm20sdk:9",
|
||||
"asinalib": "m4bank:asinalib:99"
|
||||
],
|
||||
"a90" : [
|
||||
"aisinoprinterlib": "m4bank:aisinoprinterlib:152",
|
||||
"aisino_a90lib" : "m4bank:aisino_a90lib:422",
|
||||
"aisino_a90deps" : "m4bank:aisino_a90deps:master-1.1.42@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:41@aar",
|
||||
"softpay_dependencies": "m4bank:softpay_dependencies:1.1.1.53@aar",
|
||||
],
|
||||
"sunmi" : "m4bank:sunmiv1printerlibrary:5",
|
||||
"redlib" : "m4bank:redlib:1",
|
||||
"d200lib" : "m4bank:d200lib:9",
|
||||
],
|
||||
"zlibrary" : "m4bank:zlibrary:2134@aar"
|
||||
]
|
||||
|
||||
ext.currentRepository = "http://217.174.185.218:55555/artifactory/gradle-dev"
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
maven {
|
||||
url currentRepository
|
||||
content {
|
||||
includeGroupByRegex "external.*"
|
||||
includeGroupByRegex "m4bank.*"
|
||||
includeGroupByRegex "roamlib.*"
|
||||
}
|
||||
}
|
||||
google()
|
||||
jcenter()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,8 +29,7 @@ class LoginView extends StatefulWidget {
|
|||
}
|
||||
|
||||
class _LoginViewState extends State<LoginView> {
|
||||
|
||||
TextEditingController emailController ;
|
||||
TextEditingController emailController;
|
||||
|
||||
TextEditingController passwordController;
|
||||
|
||||
|
|
@ -45,12 +44,14 @@ class _LoginViewState extends State<LoginView> {
|
|||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
if(widget.loginModel!=null && widget.loginModel.authType == AuthenticateTypeLogin) {
|
||||
if (widget.loginModel != null &&
|
||||
widget.loginModel.authType == AuthenticateTypeLogin) {
|
||||
emailController = TextEditingController(text: widget.loginModel.login);
|
||||
passwordController = TextEditingController(text: widget.loginModel.password);
|
||||
passwordController =
|
||||
TextEditingController(text: widget.loginModel.password);
|
||||
} else {
|
||||
emailController = TextEditingController();
|
||||
passwordController = TextEditingController();
|
||||
passwordController = TextEditingController();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -83,7 +84,14 @@ class _LoginViewState extends State<LoginView> {
|
|||
height: 150,
|
||||
child: Image.asset('assets/images/logo.png'),
|
||||
),
|
||||
Positioned(child: Text('онлайн касса', style: TextStyle(fontWeight: FontWeight.bold),), bottom: 23.0,left: 25.0,),
|
||||
Positioned(
|
||||
child: Text(
|
||||
'онлайн касса',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
bottom: 23.0,
|
||||
left: 25.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
|
|
@ -107,10 +115,13 @@ class _LoginViewState extends State<LoginView> {
|
|||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
BusyButton(
|
||||
title: 'Войти',
|
||||
busy: vm.isLoading,
|
||||
onPressed: _pressBtnEnter,
|
||||
SizedBox(
|
||||
width: 100,
|
||||
child: BusyButton(
|
||||
title: 'Войти',
|
||||
busy: vm.isLoading,
|
||||
onPressed: _pressBtnEnter,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
@ -132,7 +143,8 @@ class _LoginViewState extends State<LoginView> {
|
|||
}
|
||||
|
||||
_pressBtnEnter() async {
|
||||
if(emailController.text!=null && emailController.text.toLowerCase().trim().startsWith('test')){
|
||||
if (emailController.text != null &&
|
||||
emailController.text.toLowerCase().trim().startsWith('test')) {
|
||||
_apiService.test = true;
|
||||
} else {
|
||||
_apiService.test = false;
|
||||
|
|
@ -156,13 +168,13 @@ class _LoginViewState extends State<LoginView> {
|
|||
// .formatNote); // If a unknown format was scanned this field contains a note
|
||||
if (result.type == ResultType.Barcode &&
|
||||
result.rawContent?.length == 60) {
|
||||
if(result.rawContent.toLowerCase().trim().startsWith('test')){
|
||||
_apiService.test = true;
|
||||
} else {
|
||||
_apiService.test = false;
|
||||
}
|
||||
if (result.rawContent.toLowerCase().trim().startsWith('test')) {
|
||||
_apiService.test = true;
|
||||
} else {
|
||||
_apiService.test = false;
|
||||
}
|
||||
Redux.store.dispatch(authenticateToken(result.rawContent));
|
||||
} else if (result.type == ResultType.Error ) {
|
||||
} else if (result.type == ResultType.Error) {
|
||||
_dialogService.showDialog(description: 'Не верный формат QR кода');
|
||||
}
|
||||
} on PlatformException catch (e) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue