clean bank
commit
6d385d16e8
|
|
@ -34,7 +34,7 @@ if (keystorePropertiesFile.exists()) {
|
|||
|
||||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
compileSdkVersion 30
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
|
|
@ -47,7 +47,7 @@ android {
|
|||
defaultConfig {
|
||||
applicationId "kz.com.aman.kassa"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 29
|
||||
targetSdkVersion 30
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
multiDexEnabled true
|
||||
|
|
@ -63,9 +63,9 @@ android {
|
|||
}
|
||||
}
|
||||
buildTypes {
|
||||
all {
|
||||
buildConfigField ("String[]", "SUPPORTED_DEVICES", collectSupportedDevicesToArray())
|
||||
}
|
||||
// all {
|
||||
// buildConfigField ("String[]", "SUPPORTED_DEVICES", collectSupportedDevicesToArray())
|
||||
// }
|
||||
debug {
|
||||
shrinkResources false
|
||||
minifyEnabled false
|
||||
|
|
@ -116,37 +116,13 @@ dependencies {
|
|||
|
||||
implementation 'com.android.support:multidex:1.0.3'
|
||||
//m4bank dependencies
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
implementation deps.zlibrary
|
||||
implementation deps.hardware.atol.values() //todo need delete this package
|
||||
implementation deps.hardware.terminalCommon.values()
|
||||
implementation deps.hardware.softpos.softpaylibrary
|
||||
implementation deps.hardware.softpos.softpay_dependencies
|
||||
|
||||
//Implementation okhhtp library
|
||||
implementation deps.okhttp.values()
|
||||
//Implementation retrofit library
|
||||
implementation deps.retrofit.values()
|
||||
//Implementation rxJava library
|
||||
implementation deps.rx.values()
|
||||
//Implementation logback
|
||||
implementation deps.logback.core
|
||||
implementation(deps.logback.classic) {
|
||||
exclude group: 'com.google.android', module: 'android'
|
||||
}
|
||||
//Implementation other libraries
|
||||
implementation deps.timber
|
||||
implementation deps.paperdb
|
||||
implementation deps.greendao
|
||||
|
||||
implementation deps.retro_stream
|
||||
implementation deps.websockets // Only for useWebsockets parameter
|
||||
}
|
||||
|
||||
def collectSupportedDevicesToArray() {
|
||||
return '{' + rootProject.ext."supportedDevices${getProject().name}".collect {
|
||||
"\"${it}\""
|
||||
}.join(",") + '}'
|
||||
}
|
||||
//def collectSupportedDevicesToArray() {
|
||||
// return '{' + rootProject.ext."supportedDevices${getProject().name}".collect {
|
||||
// "\"${it}\""
|
||||
// }.join(",") + '}'
|
||||
//}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,65 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.library.external.authorization.ActivationCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.ActivationType;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class ActivationCallbackHandlerImpl implements ActivationCallbackHandler {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public ActivationCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivationTypeAndInfoRequested() {
|
||||
Timber.i("FIRST STEP STARTED");
|
||||
activity.getClientInterface().getAuthorizationManager().sendActivationFirstStepData(ActivationType.EMAIL, "dm@centercorptech.net");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivationCodeRequested(Integer codeLifetime) {
|
||||
Timber.i("FIRST STEP COMPLETED");
|
||||
Timber.i("SECOND STEP STARTED");
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("ADD activation code:");
|
||||
|
||||
EditText editext = new EditText(activity);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface().getAuthorizationManager().sendActivationCode(editext.getText().toString());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(editext);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivationConfirmRequested() {
|
||||
Timber.i("SECOND STEP COMPLETED");
|
||||
Timber.i("LAST STEP STARTED");
|
||||
activity.getClientInterface().getAuthorizationManager().confirmActivation("1234", null);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
Timber.i("COMPLETED WITH RESULT - " + result.getResultType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
Timber.i("WRONG API CALLED");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,174 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.AlipayPaymentCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.AdditionalTransactionData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.AlipayCodeType;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.IdentityCodeType;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class AlipayPaymentCallbackHandlerImpl implements AlipayPaymentCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public AlipayPaymentCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkFlowDataRequested() {
|
||||
Timber.d("WorkFlow requested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionAmountRequested() {
|
||||
activity.getClientInterface().getTransactionManager().setTransactionAmount(activity.getAmount());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataRequested() {
|
||||
activity.getClientInterface().getTransactionManager().setAdditionalTransactionData(new AdditionalTransactionData.Builder(null).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionBarCodeRequested() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("ADD QRCODE:");
|
||||
|
||||
EditText editext = new EditText(activity);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface().getTransactionManager().setTransactionBarCode(new IdentityCodeType(AlipayCodeType.QRCODE, editext.getText().toString()));
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(editext);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()),
|
||||
Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
activity.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription() == null ? "" : errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.sendTransactionUserData("signature", "phone", "email");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult printerResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List printerList) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
import ru.m4bank.mpos.library.external.authorization.AuthorizationCallbackHandler;
|
||||
import ru.m4bank.mpos.service.authorization.network.AuthorizationResponse;
|
||||
|
||||
|
||||
public class AuthorizationCallbackHandlerImpl implements AuthorizationCallbackHandler {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public AuthorizationCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoginAndPasswordRequested() {
|
||||
activity.getClientInterface().getAuthorizationManager().sendLoginAndPassword(activity.getLogin(), activity.getPassword());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCompleted(ru.m4bank.mpos.service.result.Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()),
|
||||
Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(ru.m4bank.mpos.service.result.Result result, AuthorizationResponse authorizationResponse) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()),
|
||||
Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,463 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import kz.com.aman.kassa.bank.gui.CustomKeyBoardDilalog;
|
||||
import ru.m4bank.mpos.library.external.transactions.CardPaymentCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.data.ResultType;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.AdditionalTransactionData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.GoodsData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.VendorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.AccountingSubject;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.TaxRate;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode;
|
||||
import ru.m4bank.mpos.service.hardware.error.AllError;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.TransactionTypeConv;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.ButtonKeyboardDto;
|
||||
import ru.m4bank.mpos.service.transactions.data.MessageButtonData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.VirtualPinKeyboardData;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class CardPaymentCallbackHandlerImpl implements CardPaymentCallbackHandler<Result> {
|
||||
private final M4BankActivity activity;
|
||||
private CustomKeyBoardDilalog customKeyBoardDilalog;
|
||||
private TransactionTypeConv transactionTypeConv;
|
||||
|
||||
public CardPaymentCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
customKeyBoardDilalog = new CustomKeyBoardDilalog();
|
||||
transactionTypeConv = TransactionTypeConv.UNKNOWN;
|
||||
}
|
||||
|
||||
public CardPaymentCallbackHandlerImpl setTransactionTypeConv(TransactionTypeConv transactionTypeConv) {
|
||||
this.transactionTypeConv = transactionTypeConv;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List<String> deviceList) {
|
||||
Timber.d("onDeviceToConnectSelectionRequested");
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.selectCardReader(deviceListSpinner.getSelectedItem().toString());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
Timber.d("Reader has been received");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
Timber.d("No bounded readers");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List<Reader> deviceList) {
|
||||
Timber.d("onDeviceToUseSelectionRequested");
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Reader> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(deviceList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionAmountRequested() {
|
||||
Timber.d("onTransactionAmountRequested");
|
||||
activity.getClientInterface().getTransactionManager().setTransactionAmount(activity.getAmount());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataRequested() {
|
||||
Timber.d("onTransactionDataRequested");
|
||||
List<GoodsData> goodsDataList = new ArrayList<>();
|
||||
goodsDataList.add(new GoodsData.Builder()
|
||||
.setOriginalPrice(100000L)
|
||||
.setRealPrice(100000L)
|
||||
.setName("Принтер")
|
||||
.setQuantity(1)
|
||||
.setCode("000001")
|
||||
.setUnits("00")
|
||||
.setDiscount(0L)
|
||||
.setTaxRate(TaxRate.Tax_18)
|
||||
.setExponent(2)
|
||||
.setAccountingSubject(AccountingSubject.PRODUCT)
|
||||
.build());
|
||||
goodsDataList.add(new GoodsData.Builder()
|
||||
.setOriginalPrice(30065L)
|
||||
.setRealPrice(30065L)
|
||||
.setName("Услуга")
|
||||
.setQuantity(3)
|
||||
.setCode("000002")
|
||||
.setUnits("00")
|
||||
.setDiscount(0L)
|
||||
.setTaxRate(TaxRate.Tax_18)
|
||||
.setExponent(2)
|
||||
.setAccountingSubject(AccountingSubject.PRODUCT)
|
||||
.build());
|
||||
|
||||
HashMap<String, String> vendorDescription = new HashMap<>();
|
||||
vendorDescription.put("vendor", "description");
|
||||
vendorDescription.put("vendor1", "description1");
|
||||
vendorDescription.put("vendor2", "description2");
|
||||
vendorDescription.put("vendor3", "description3");
|
||||
VendorData vendorData = new VendorData(vendorDescription);
|
||||
|
||||
AdditionalTransactionData additionalTransactionData = new AdditionalTransactionData.Builder(goodsDataList).vendorData(vendorData).build();
|
||||
activity.getClientInterface().getTransactionManager().setAdditionalTransactionData(additionalTransactionData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkFlowDataRequested() {
|
||||
Timber.d("WorkFlow requested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
Timber.d("onCompleted");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
Timber.d("onWrongApiCalled");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) {
|
||||
Timber.d("onReceiveCardData");
|
||||
if (shouldConfirmBeManuallyCalled) {
|
||||
activity.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
//Impossible
|
||||
activity.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
Timber.d("onTransactionExecutionStatusChanged: " + newStatus.name());
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
if (transactionErrorData.getError() != null) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, transactionErrorData.getError().getDescription(), Toast.LENGTH_LONG).show());
|
||||
} else {
|
||||
Timber.d("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription());
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, String.format("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getFinalDescription()), Toast.LENGTH_LONG).show());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
Timber.d("onErrorWithPossibilityToRetry: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription());
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, String.format("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getFinalDescription()), Toast.LENGTH_LONG).show());
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
Timber.d("onTransactionDataReceivedError");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
Timber.d("onUserInformationRequested");
|
||||
if (transactionTypeConv != TransactionTypeConv.CANCEL) {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.sendTransactionUserData("signature", "phone", "vsa@centercorptech.net");
|
||||
} else {
|
||||
onTransactionCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
Timber.d("onTransactionDataReceived");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
Timber.d("onTransactionCompleted");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredHostAddress() {
|
||||
Timber.d("onRequiredHostAddress");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Set Host Address", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
activity.getClientInterface().getTransactionManager().setHostAddress("213.79.122.128", "8011");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) {
|
||||
Timber.d("onDisconnectedEventReceivedOrCanNotEstablishConnection");
|
||||
if (reconnectAvailable) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().tryToReconnectAndRepeatLast());
|
||||
builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String deviceName) {
|
||||
Timber.d("Connecting process started: %s", deviceName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconnectNeededToProcess() {
|
||||
Timber.d("onReconnectNeededToProcess");
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().getTransactionManager().tryToReconnectToCardReader());
|
||||
builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationRequiredToProcess() {
|
||||
Timber.d("onReconciliationRequiredToProcess");
|
||||
Timber.d("Reconciliation required!!!");
|
||||
activity.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationCompleted(Result result) {
|
||||
Timber.d("onReconciliationCompleted");
|
||||
Timber.d("Reconciliation completed!!!");
|
||||
if (result.getResultType() == ResultType.SUCCESSFUL) {
|
||||
activity.getClientInterface().getTransactionManager().continueTransactionAfterReconciliation();
|
||||
} else {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Reconciliation failed " + result.getDescription(), Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
Timber.d("notAuthorized");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "notAuthorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
Timber.d("onTransactionDetailsReceived");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
Timber.d("onSuccessStatusTransaction");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
Timber.d("onErrorStatusTransaction");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
Timber.d("onRepeat");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
Timber.d("onRequestedReportZ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
||||
Timber.d("onCompletedPrinting");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
Timber.d("onStatusFiscalModule");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
Timber.d("onPrinterForRegistrationGettingCompleted");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
Timber.d("onNoBoundedPrinterFound");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List<String> printerList) {
|
||||
Timber.d("onPrinterToUseSelectionRequested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredReversal(String description, ResultCode resultCode) {
|
||||
Timber.d("onRequiredReversal: %s, resultCode: %s", description, resultCode.name());
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage("Revert last of operation?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().getTransactionManager().revertCurrentOperation(new RevertCurrentOperationCallbackHandlerImpl(activity)));
|
||||
builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().getTransactionManager().clearLastTransactionInformation());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredApplicationSelection(List<ApplicationIdConv> list) {
|
||||
Timber.d("onRequiredApplicationSelection");
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose application identifier");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<ApplicationIdConv> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, list);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.setTransactionApplicationIdentifier((ApplicationIdConv) deviceListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivityUpdateUiThread() {
|
||||
Timber.d("onActivityUpdateUiThread");
|
||||
activity.getClientInterface().getTransactionManager().addPinpadClickListener(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreatePinPadButtons() {
|
||||
Timber.d("onCreatePinPadButtons");
|
||||
customKeyBoardDilalog.createDialog(activity);
|
||||
customKeyBoardDilalog.show(activity);
|
||||
ButtonKeyboardDto buttonKeyboardDto = new ButtonKeyboardDto.Build(
|
||||
customKeyBoardDilalog.getBtnb1(),
|
||||
customKeyBoardDilalog.getBtnb2(),
|
||||
customKeyBoardDilalog.getBtnb3(),
|
||||
customKeyBoardDilalog.getBtnb4(),
|
||||
customKeyBoardDilalog.getBtnb5(),
|
||||
customKeyBoardDilalog.getBtnb6(),
|
||||
customKeyBoardDilalog.getBtnb7(),
|
||||
customKeyBoardDilalog.getBtnb8(),
|
||||
customKeyBoardDilalog.getBtnb9(),
|
||||
customKeyBoardDilalog.getBtnb0(),
|
||||
customKeyBoardDilalog.getBtncancel(),
|
||||
customKeyBoardDilalog.getBtnconfirm(),
|
||||
customKeyBoardDilalog.getBtnclean(),
|
||||
activity.getWindowManager().getDefaultDisplay().getRotation()
|
||||
).build();
|
||||
activity.getClientInterface().getTransactionManager().addPinPadButtons(buttonKeyboardDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) {
|
||||
Timber.d("onShowPinPadKeyBoard");
|
||||
customKeyBoardDilalog.setText(messageButtonData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateElementPin(int count) {
|
||||
Timber.d("onUpdateElementPin");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "count = " + count, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCloseKeyboard() {
|
||||
Timber.d("onCloseKeyboard");
|
||||
customKeyBoardDilalog.close(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) {
|
||||
activity.showSelectStyleDialog(additionalData ->
|
||||
activity.getClientInterface().getTransactionManager().addVirtualPinKeyboardData(additionalData));
|
||||
}
|
||||
|
||||
public interface SelectStyleListener {
|
||||
void onSelectStyle(VirtualPinKeyboardData virtualPinKeyboardData);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,215 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import kz.com.aman.kassa.bank.gui.CustomKeyBoardDilalog;
|
||||
import ru.m4bank.mpos.library.external.transactions.CardReadingCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.utils.ArrayUtils;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.SimpleCardTransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class CardReadingCallbackHandlerImpl implements CardReadingCallbackHandler<Result> {
|
||||
private final M4BankActivity activity;
|
||||
private CustomKeyBoardDilalog customKeyBoardDilalog;
|
||||
|
||||
public CardReadingCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
customKeyBoardDilalog = new CustomKeyBoardDilalog();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List<String> deviceList) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.selectCardReader(deviceListSpinner.getSelectedItem().toString());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
Timber.d("Reader has been received");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
Timber.d("No bounded readers");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List<Reader> deviceList) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Reader> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, ArrayUtils.newArrayList(deviceList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + result.getDescription(), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData errorData) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.sendTransactionUserData("signature", "phone", "vsa@centercorptech.net");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) {
|
||||
if (reconnectAvailable) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().tryToReconnectAndRepeatLast());
|
||||
builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String deviceName) {
|
||||
Timber.d("Connecting process started");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconnectNeededToProcess() {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().getTransactionManager().tryToReconnectToCardReader());
|
||||
builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveCommonCardData(SimpleCardTransactionData simpleCardTransactionData) {
|
||||
String pan = simpleCardTransactionData.getCardNumber();
|
||||
String expDate = simpleCardTransactionData.getCardExpiryDate();
|
||||
String cardHolderName = simpleCardTransactionData.getCardHolderName();
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "card data: " + pan + " - " + expDate + " - " + cardHolderName, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredApplicationSelection(List<ApplicationIdConv> applicationOfList) {
|
||||
// activity.runOnUiThread(() -> {
|
||||
// AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
// builder.setTitle("Choose application identifier");
|
||||
//
|
||||
// Spinner deviceListSpinner = new Spinner(activity);
|
||||
// ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, applicationOfList);
|
||||
// adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
// deviceListSpinner.setAdapter(adapter);
|
||||
//
|
||||
// builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
// activity.getClientInterface()
|
||||
// .getTransactionManager()
|
||||
// .setTransactionApplicationIdentifier(deviceListSpinner.getSelectedItem().toString());
|
||||
// dialog.dismiss();
|
||||
// });
|
||||
//
|
||||
// builder.setView(deviceListSpinner);
|
||||
// builder.create().show();
|
||||
// });
|
||||
}
|
||||
}
|
||||
|
|
@ -1,334 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import kz.com.aman.kassa.bank.gui.CustomKeyBoardDilalog;
|
||||
import ru.m4bank.mpos.library.external.transactions.EasyCardRefundCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.transaction.RefundType;
|
||||
import ru.m4bank.mpos.service.hardware.error.AllError;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.ButtonKeyboardDto;
|
||||
import ru.m4bank.mpos.service.transactions.data.MessageButtonData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class CardRefundCallbackHandlerImpl implements EasyCardRefundCallbackHandler<Result>, GetTransactionsListCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
private Transaction transaction;
|
||||
private CustomKeyBoardDilalog customKeyBoardDilalog;
|
||||
|
||||
public CardRefundCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
customKeyBoardDilalog = new CustomKeyBoardDilalog();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
Timber.d("Reader has been received");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
Timber.d("No bounded readers");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List<Reader> deviceList) {
|
||||
Timber.d("onDeviceToUseSelectionRequested");
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Reader> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(deviceList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface().getTransactionManager().setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List<String> deviceList) {
|
||||
Timber.d("onDeviceToConnectSelectionRequested");
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface().getTransactionManager().selectCardReader(deviceListSpinner.getSelectedItem().toString());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
Timber.d("onCompleted");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()),
|
||||
Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
Timber.d("onWrongApiCalled");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) {
|
||||
Timber.d("onReceiveCardData");
|
||||
if (shouldConfirmBeManuallyCalled) {
|
||||
activity.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredReversal(String description, ResultCode resultCode) {
|
||||
Timber.d("onRequiredReversal: %s, resultCode: %s", description, resultCode.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredApplicationSelection(List<ApplicationIdConv> list) {
|
||||
Timber.d("onRequiredApplicationSelection");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
Timber.d("onTransactionExecutionStatusChanged: %s", newStatus.name());
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
Timber.d("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription());
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
Timber.d("onErrorWithPossibilityToRetry: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription());
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
Timber.d("onTransactionDataReceivedError");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
Timber.d("onUserInformationRequested");
|
||||
activity.getClientInterface().getTransactionManager().sendTransactionUserData("signature", "phone", "email");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
Timber.d("onTransactionDataReceived");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
Timber.d("onTransactionCompleted");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) {
|
||||
Timber.d("onDisconnectedEventReceivedOrCanNotEstablishConnection");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String name) {
|
||||
Timber.d("onConnectingProcessStarted: %s", name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconnectNeededToProcess() {
|
||||
Timber.d("onReconnectNeededToProcess");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationRequiredToProcess() {
|
||||
Timber.d("onReconciliationRequiredToProcess");
|
||||
Timber.d("Reconciliation required!!!");
|
||||
activity.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationCompleted(Result result) {
|
||||
Timber.d("onReconciliationCompleted");
|
||||
Timber.d("Reconciliation completed!!!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
Timber.d("notAuthorized");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "notAuthorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
Timber.d("onRepeat");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
Timber.d("onRequestedReportZ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
||||
Timber.d("onCompletedPrinting");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
Timber.d("onStatusFiscalModule");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
Timber.d("onPrinterForRegistrationGettingCompleted");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
Timber.d("onNoBoundedPrinterFound");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List<String> printerList) {
|
||||
Timber.d("onPrinterToUseSelectionRequested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefundDataRequested() {
|
||||
Timber.d("onRefundDataRequested");
|
||||
activity.getClientInterface().getTransactionManager().setRefundData(transaction, transaction.getAmount(), RefundType.General);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
Timber.d("onTransactionsListReceived");
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose transaction");
|
||||
|
||||
Spinner transactionListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
transaction = (Transaction) transactionListSpinner.getSelectedItem();
|
||||
activity.getClientInterface().getTransactionManager().makeCardRefund(this);
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityUpdateUiThread() {
|
||||
Timber.d("onActivityUpdateUiThread");
|
||||
activity.getClientInterface().getTransactionManager().addPinpadClickListener(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreatePinPadButtons() {
|
||||
Timber.d("onCreatePinPadButtons");
|
||||
customKeyBoardDilalog.createDialog(activity);
|
||||
customKeyBoardDilalog.show(activity);
|
||||
ButtonKeyboardDto buttonKeyboardDto = new ButtonKeyboardDto.Build(
|
||||
customKeyBoardDilalog.getBtnb1(),
|
||||
customKeyBoardDilalog.getBtnb2(),
|
||||
customKeyBoardDilalog.getBtnb3(),
|
||||
customKeyBoardDilalog.getBtnb4(),
|
||||
customKeyBoardDilalog.getBtnb5(),
|
||||
customKeyBoardDilalog.getBtnb6(),
|
||||
customKeyBoardDilalog.getBtnb7(),
|
||||
customKeyBoardDilalog.getBtnb8(),
|
||||
customKeyBoardDilalog.getBtnb9(),
|
||||
customKeyBoardDilalog.getBtnb0(),
|
||||
customKeyBoardDilalog.getBtncancel(),
|
||||
customKeyBoardDilalog.getBtnconfirm(),
|
||||
customKeyBoardDilalog.getBtnclean(),
|
||||
activity.getWindowManager().getDefaultDisplay().getRotation()
|
||||
).build();
|
||||
activity.getClientInterface().getTransactionManager().addPinPadButtons(buttonKeyboardDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) {
|
||||
Timber.d("onShowPinPadKeyBoard");
|
||||
customKeyBoardDilalog.setText(messageButtonData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateElementPin(int count) {
|
||||
Timber.d("onUpdateElementPin");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "count = " + count, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCloseKeyboard() {
|
||||
Timber.d("onCloseKeyboard");
|
||||
customKeyBoardDilalog.close(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) {
|
||||
activity.showSelectStyleDialog(additionalData ->
|
||||
activity.getClientInterface().getTransactionManager().addVirtualPinKeyboardData(additionalData));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredHostAddress() {
|
||||
Timber.d("onRequiredHostAddress");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Set Host Address", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
activity.getClientInterface().getTransactionManager().setHostAddress("213.79.122.128", "8011");
|
||||
}
|
||||
}
|
||||
|
|
@ -1,186 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.CashPaymentCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.AdditionalTransactionData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.GoodsData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.AccountingSubject;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.TaxRate;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class CashPaymentCallbackHandlerImpl implements CashPaymentCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public CashPaymentCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkFlowDataRequested() {
|
||||
Timber.d("WorkFlow requested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionAmountRequested() {
|
||||
activity.getClientInterface().getTransactionManager().setTransactionAmount(activity.getAmount());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataRequested() {
|
||||
List<GoodsData> goodsDataList = new ArrayList<>();
|
||||
goodsDataList.add(new GoodsData.Builder()
|
||||
.setOriginalPrice(100000L)
|
||||
.setRealPrice(100000L)
|
||||
.setName("Принтер")
|
||||
.setQuantity(1)
|
||||
.setCode("000001")
|
||||
.setUnits("00")
|
||||
.setDiscount(0L)
|
||||
.setTaxRate(TaxRate.Tax_18)
|
||||
.setExponent(2)
|
||||
.setAccountingSubject(AccountingSubject.PRODUCT)
|
||||
.build());
|
||||
goodsDataList.add(new GoodsData.Builder()
|
||||
.setOriginalPrice(30065L)
|
||||
.setRealPrice(30065L)
|
||||
.setName("Услуга")
|
||||
.setQuantity(3)
|
||||
.setCode("000002")
|
||||
.setUnits("00")
|
||||
.setDiscount(0L)
|
||||
.setTaxRate(TaxRate.Tax_18)
|
||||
.setExponent(2)
|
||||
.setAccountingSubject(AccountingSubject.PRODUCT)
|
||||
.build());
|
||||
|
||||
AdditionalTransactionData additionalTransactionData = new AdditionalTransactionData.Builder(goodsDataList).build();
|
||||
activity.getClientInterface().getTransactionManager().setAdditionalTransactionData(additionalTransactionData);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()),
|
||||
Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
Timber.d("onTransactionInit");
|
||||
activity.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.sendTransactionUserData("signature", "phone", "email");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "notAuthorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult printerResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List printerList) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import ru.m4bank.mpos.library.external.configuration.CheckConnectionCallbackHandler;
|
||||
import ru.m4bank.mpos.service.result.CheckConnectionExternalResult;
|
||||
|
||||
public class CheckConnectionCallbackHandlerImpl implements CheckConnectionCallbackHandler {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public CheckConnectionCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(CheckConnectionExternalResult result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()) + " " + result.isOnlineRegistration(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
//import com.landicorp.uns.result;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.CloseDayCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.handling.result.CloseDayResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.network.closeday.CloseDayResponseInfo;
|
||||
|
||||
|
||||
class CloseDayCallbackHandlerImpl implements CloseDayCallbackHandler<Result> {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
CloseDayCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList, List<CloseDayResponseInfo> list1) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "onTransactionsListReceived - " + transactionList, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(CloseDayResult closeDayResult) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, closeDayResult.getResultType() + " " + (closeDayResult.getDescription() == null ? "" : closeDayResult.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.Application;
|
||||
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
public class CustomApplication extends Application {
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
Thread.setDefaultUncaughtExceptionHandler((thread, ex) -> {
|
||||
Timber.v(ex.getMessage());
|
||||
for (StackTraceElement element : ex.getStackTrace()) {
|
||||
Timber.v(element.toString());
|
||||
}
|
||||
ex.printStackTrace();
|
||||
System.exit(0);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import org.apache.http.conn.scheme.LayeredSocketFactory;
|
||||
import org.apache.http.params.HttpConnectionParams;
|
||||
import org.apache.http.params.HttpParams;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.security.KeyStore;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.SSLSocket;
|
||||
import javax.net.ssl.TrustManager;
|
||||
|
||||
public class CustomSSLSocketFactory implements LayeredSocketFactory {
|
||||
private SSLContext sslcontext = null;
|
||||
private KeyStore keyStore = null;
|
||||
|
||||
public CustomSSLSocketFactory() {
|
||||
}
|
||||
|
||||
public CustomSSLSocketFactory(KeyStore keyStore) {
|
||||
this.keyStore = keyStore;
|
||||
}
|
||||
|
||||
private SSLContext createEasySSLContext() throws IOException {
|
||||
try {
|
||||
SSLContext context = SSLContext.getInstance("TLS");
|
||||
context.init(null, new TrustManager[] { new CustomTrustManager(keyStore) }, null);
|
||||
return context;
|
||||
} catch (Exception e) {
|
||||
throw new IOException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private SSLContext getSSLContext() throws IOException {
|
||||
if (this.sslcontext == null) {
|
||||
this.sslcontext = createEasySSLContext();
|
||||
}
|
||||
return this.sslcontext;
|
||||
}
|
||||
|
||||
public Socket connectSocket(Socket sock, String host, int port,
|
||||
InetAddress localAddress, int localPort, HttpParams params)
|
||||
throws IOException {
|
||||
int connTimeout = HttpConnectionParams.getConnectionTimeout(params);
|
||||
int soTimeout = HttpConnectionParams.getSoTimeout(params);
|
||||
|
||||
InetSocketAddress remoteAddress = new InetSocketAddress(host, port);
|
||||
SSLSocket sslSocket = (SSLSocket) ((sock != null) ? sock : createSocket());
|
||||
|
||||
if ((localAddress != null) || (localPort > 0)) {
|
||||
// we need to bind explicitly
|
||||
if (localPort < 0) {
|
||||
localPort = 0; // indicates "any"
|
||||
}
|
||||
InetSocketAddress isa = new InetSocketAddress(localAddress,
|
||||
localPort);
|
||||
sslSocket.bind(isa);
|
||||
}
|
||||
|
||||
sslSocket.connect(remoteAddress, connTimeout);
|
||||
sslSocket.setSoTimeout(soTimeout);
|
||||
return sslSocket;
|
||||
}
|
||||
|
||||
public Socket createSocket() throws IOException {
|
||||
return getSSLContext().getSocketFactory().createSocket();
|
||||
}
|
||||
|
||||
public boolean isSecure(Socket socket) throws IllegalArgumentException {
|
||||
return true;
|
||||
}
|
||||
|
||||
public Socket createSocket(Socket socket, String host, int port,
|
||||
boolean autoClose) throws IOException {
|
||||
return getSSLContext().getSocketFactory().createSocket(socket, host, port, autoClose);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import java.security.KeyStore;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
|
||||
import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.TrustManagerFactory;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
|
||||
public class CustomTrustManager implements X509TrustManager {
|
||||
private X509TrustManager standardTrustManager;
|
||||
|
||||
public CustomTrustManager(KeyStore keystore) throws NoSuchAlgorithmException, KeyStoreException {
|
||||
super();
|
||||
TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
|
||||
factory.init(keystore);
|
||||
TrustManager[] trustManagers = factory.getTrustManagers();
|
||||
if (trustManagers.length == 0) {
|
||||
throw new NoSuchAlgorithmException("no trust manager found");
|
||||
}
|
||||
standardTrustManager = (X509TrustManager)trustManagers[0];
|
||||
}
|
||||
|
||||
public void checkClientTrusted(X509Certificate[] certificates, String authType) throws CertificateException {
|
||||
standardTrustManager.checkClientTrusted(certificates, authType);
|
||||
}
|
||||
|
||||
public void checkServerTrusted(X509Certificate[] certificates, String authType) throws CertificateException {
|
||||
if ((certificates != null) && (certificates.length == 1)) {
|
||||
certificates[0].checkValidity();
|
||||
}
|
||||
}
|
||||
|
||||
public X509Certificate[] getAcceptedIssuers() {
|
||||
return this.standardTrustManager.getAcceptedIssuers();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,144 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
import ru.m4bank.mpos.service.commons.Lists;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.CurrencyEnum;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.ExternalVerificationType;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.GoodsData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.ProductsAndTransactionData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.TransactionStatus;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.AccountingSubject;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.TaxRate;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.TaxSystem;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.CardTransTypeConv;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.TransactionTypeConv;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.FiscalPrinterMerchantData;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.PrinterInformationCheck;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.TransactionSlipData;
|
||||
import ru.m4bank.mpos.service.transactions.data.AccountingSign;
|
||||
import ru.m4bank.mpos.service.transactions.data.CorrectionType;
|
||||
import ru.m4bank.mpos.service.transactions.data.external.CurrencyAmount;
|
||||
import ru.m4bank.mpos.service.transactions.data.external.ExternalCorrectionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.external.ExternalFiscalData;
|
||||
import ru.m4bank.mpos.service.transactions.data.external.ExternalSlipData;
|
||||
import ru.m4bank.mpos.service.transactions.data.external.ExternalStubData;
|
||||
|
||||
public class DataCreatorUtils {
|
||||
public static ExternalCorrectionData makeCorrectionData() {
|
||||
Calendar date = Calendar.getInstance();
|
||||
date.set(2019, 3, 1);
|
||||
return new ExternalCorrectionData.Builder()
|
||||
.currencyAmount(makeCurrencyAmount())
|
||||
.calculationSign(AccountingSign.INCOMING)
|
||||
.correctionType(CorrectionType.INDEPENDENTLY)
|
||||
.taxRate(TaxRate.Tax_20)
|
||||
.cash(true)
|
||||
.docNumber("ПС345454")
|
||||
.docDate(date)
|
||||
.docDescription(" ")
|
||||
.stubData(makeStubData())
|
||||
.build();
|
||||
}
|
||||
|
||||
public static ExternalFiscalData makeFiscalData() {
|
||||
return new ExternalFiscalData.Builder()
|
||||
.cash(false)
|
||||
.currency("643")
|
||||
.phone("12345678")
|
||||
.informationCheckData(makeInformationCheckData())
|
||||
.productsAndTransactionData(makeProductsAndTransactionData())
|
||||
.externalStubData(makeStubData())
|
||||
.transactionTypeConv(TransactionTypeConv.PAYMENT)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static ExternalSlipData makeSlipData(boolean newCheck) {
|
||||
return new ExternalSlipData.Builder()
|
||||
.currencyAmount(makeCurrencyAmount())
|
||||
.cash(false)
|
||||
.merchantData(makeMerchantData())
|
||||
.newCheck(newCheck)
|
||||
.transactionData(makeTransactionData())
|
||||
.transactionType(TransactionTypeConv.PAYMENT)
|
||||
.cashierName("Петров В.В.")
|
||||
.build();
|
||||
}
|
||||
|
||||
public static CurrencyAmount makeCurrencyAmount() {
|
||||
return new CurrencyAmount.Builder().amount(10000).currencyCode(CurrencyEnum.RUS.getStringCurrency()).build();
|
||||
}
|
||||
|
||||
public static FiscalPrinterMerchantData makeMerchantData() {
|
||||
return new FiscalPrinterMerchantData.Builder()
|
||||
.merchantAddress("улица Твардовского, Москва Россия")
|
||||
.merchantId("1732056")
|
||||
.merchantInn("123456489123")
|
||||
.merchantName("Center of corporate technologies")
|
||||
.build();
|
||||
}
|
||||
|
||||
public static TransactionSlipData makeTransactionData() {
|
||||
return new TransactionSlipData.Builder()
|
||||
.applicationId("A40000100023056")
|
||||
.authCode("447041")
|
||||
.cardHolderName("IVANOV/I")
|
||||
.currencyCode("643")
|
||||
.hostResultCode("00")
|
||||
.interaction(CardTransTypeConv.MAGNETIC_STRIPE)
|
||||
.originalPan("************8888")
|
||||
.pan("************8176")
|
||||
.rrn("123456789")
|
||||
.terminalNumber("00687879")
|
||||
.terminalVerificationResults("00000")
|
||||
.transactionDate(new Date())
|
||||
.transactionStatus(TransactionStatus.APPROVED)
|
||||
.typeCard("Mastercard")
|
||||
.typeVerification(ExternalVerificationType.PIN)
|
||||
.phone("88008008008562")
|
||||
.build();
|
||||
}
|
||||
|
||||
public static ExternalStubData makeStubData() {
|
||||
return new ExternalStubData.Builder()
|
||||
.shiftNumber("0001")
|
||||
.factoryNumberKKT("0000000000")
|
||||
.registerNumberKKT("00000000000000000")
|
||||
.fiscalDocNumber("2780")
|
||||
.fiscalMemoryNumber("9999078900003063")
|
||||
.fiscalSign("32323933373534383633")
|
||||
.formOfTaxation("УСН")
|
||||
.merchantData(makeMerchantData())
|
||||
.phone("12-12-12")
|
||||
.productsAndTransactionData(makeProductsAndTransactionData())
|
||||
.build();
|
||||
}
|
||||
|
||||
private static ProductsAndTransactionData makeProductsAndTransactionData() {
|
||||
return new ProductsAndTransactionData(
|
||||
Lists.newArrayList(new GoodsData.Builder()
|
||||
.setOriginalPrice(1500L)
|
||||
.setRealPrice(1400L)
|
||||
.setName("Товар")
|
||||
.setQuantity(1)
|
||||
.setCode("1")
|
||||
.setUnits("00")
|
||||
.setExponent(2)
|
||||
.setDiscount(100L)
|
||||
.setTaxRate(TaxRate.Tax_10)
|
||||
.setAccountingSubject(AccountingSubject.OTHER)
|
||||
.build()),
|
||||
1400L, 100L, 1, CurrencyEnum.RUS, TaxSystem.Common);
|
||||
}
|
||||
|
||||
public static PrinterInformationCheck makeInformationCheckData() {
|
||||
return new PrinterInformationCheck.Builder()
|
||||
.setCheckNumber("00")
|
||||
.setDocNumber("1")
|
||||
.setPd("00")
|
||||
.setDateAndTime(new Date())
|
||||
.setInn("7777777777")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import kz.com.aman.kassa.BuildConfig;
|
||||
import ru.m4bank.mpos.service.commons.utils.VirtualDeviceUtils;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.DeviceType;
|
||||
|
||||
public class DeviceTypeDefiner {
|
||||
public DeviceType define() {
|
||||
if (VirtualDeviceUtils.isDevice()) {
|
||||
return DeviceType.SMART_POS;
|
||||
}
|
||||
|
||||
String[] supportedDevices = BuildConfig.SUPPORTED_DEVICES;
|
||||
if (containsIgnoreCase(supportedDevices, "SoftPos")) {
|
||||
return DeviceType.SOFT_POS;
|
||||
}
|
||||
|
||||
return DeviceType.PHONE;
|
||||
}
|
||||
|
||||
private boolean containsIgnoreCase(String[] array, String checkValue) {
|
||||
for (String arrayValue : array) {
|
||||
if (arrayValue.equalsIgnoreCase(checkValue)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,152 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.EasyAlipayRefundCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.transaction.RefundType;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
|
||||
public class EasyAlipayRefundCallbackHandlerImpl implements EasyAlipayRefundCallbackHandler<Result>, GetTransactionsListCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
private Transaction transaction;
|
||||
|
||||
public EasyAlipayRefundCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
activity.getClientInterface().getTransactionManager().sendTransactionUserData("signature", "phone", "email");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefundDataRequested() {
|
||||
activity.getClientInterface().getTransactionManager().setRefundData(transaction, transaction.getAmount(), RefundType.General);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose transaction");
|
||||
|
||||
Spinner transactionListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
transaction = (Transaction) transactionListSpinner.getSelectedItem();
|
||||
activity.getClientInterface().getTransactionManager().makeAlipayRefund(this);
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List<String> printerList) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,363 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.EasyReversalCardCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.data.ResultType;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.MessageButtonData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class EasyCardReversalCallbackHandlerImpl implements EasyReversalCardCallbackHandler<Result>, GetTransactionsListCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
private Transaction transaction;
|
||||
|
||||
public EasyCardReversalCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
Timber.d("Reader has been received");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
Timber.d("No bounded readers");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String deviceName) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) {
|
||||
if (reconnectAvailable) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().tryToReconnectAndRepeatLast());
|
||||
builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List deviceList) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.selectCardReader(deviceListSpinner.getSelectedItem().toString());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkFlowDataRequested() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) {
|
||||
if (shouldConfirmBeManuallyCalled) {
|
||||
activity.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredReversal(String description, ResultCode resultCode) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "onRequiredReversal", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredApplicationSelection(List<ApplicationIdConv> list) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "onTransactionDetailsReceived", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "onSuccessStatusTransaction", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "onErrorStatusTransaction", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationRequiredToProcess() {
|
||||
Timber.d("Reconciliation required!!!");
|
||||
activity.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationCompleted(Result result) {
|
||||
Timber.d("Reconciliation completed!!!");
|
||||
if (result.getResultType() == ResultType.SUCCESSFUL) {
|
||||
activity.getClientInterface().getTransactionManager().continueTransactionAfterReconciliation();
|
||||
} else {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Reconciliation failed " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionAmountRequested() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataRequested() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List deviceList) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Reader> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(deviceList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List printerList) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
if (errorHandler.getCode() != null && errorHandler.getDescription() != null) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Error Code: " + errorHandler.getCode() + " error Description: "
|
||||
+ errorHandler.getDescription(), Toast.LENGTH_LONG)
|
||||
.show());
|
||||
} else {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getServerCode() + " "
|
||||
+ errorHandler.getServerDescription(), Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "onTransactionDataReceivedError", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconnectNeededToProcess() {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().getTransactionManager().tryToReconnectToCardReader());
|
||||
builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongTerminal() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSelectTransaction() {
|
||||
activity.getClientInterface().getTransactionManager().selectTransaction(transaction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose transaction");
|
||||
|
||||
Spinner transactionListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
transaction = (Transaction) transactionListSpinner.getSelectedItem();
|
||||
activity.getClientInterface().getTransactionManager().makeCardReversal(this);
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionSelectionRequested(List<Transaction> transactionList) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityUpdateUiThread() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreatePinPadButtons() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateElementPin(int i) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCloseKeyboard() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) {
|
||||
activity.showSelectStyleDialog(additionalData ->
|
||||
activity.getClientInterface().getTransactionManager().addVirtualPinKeyboardData(additionalData));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,152 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.EasyCashRefundCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.transaction.RefundType;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
|
||||
public class EasyCashRefundCallbackHandlerImpl implements EasyCashRefundCallbackHandler<Result>, GetTransactionsListCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
private Transaction transaction;
|
||||
|
||||
public EasyCashRefundCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
activity.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
activity.getClientInterface().getTransactionManager().sendTransactionUserData("signature", "phone", "email");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefundDataRequested() {
|
||||
activity.getClientInterface().getTransactionManager().setRefundData(transaction, transaction.getAmount(), RefundType.General);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose transaction");
|
||||
|
||||
Spinner transactionListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
transaction = (Transaction) transactionListSpinner.getSelectedItem();
|
||||
activity.getClientInterface().getTransactionManager().makeCashRefund(this);
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List<String> printerList) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,157 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.EasyEcomRefundCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.transaction.RefundType;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
|
||||
public class EasyEcomRefundCallbackHandlerImpl implements EasyEcomRefundCallbackHandler<Result>, GetTransactionsListCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
private Transaction transaction;
|
||||
|
||||
public EasyEcomRefundCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
activity.getClientInterface().getTransactionManager().sendTransactionUserData("signature", "phone", "email");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefundDataRequested() {
|
||||
activity.getClientInterface().getTransactionManager().setRefundData(transaction, transaction.getAmount(), RefundType.General);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose transaction");
|
||||
|
||||
Spinner transactionListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
transaction = (Transaction) transactionListSpinner.getSelectedItem();
|
||||
activity.getClientInterface().getTransactionManager().makeEcomRefund(this);
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List<String> printerList) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPreviewTransactionDataReceived(TransactionData transactionData) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,176 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.ReversalCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
|
||||
public class EasyReversalCallbackHandlerImpl implements ReversalCallbackHandler<Result>, GetTransactionsListCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
private Transaction transaction;
|
||||
|
||||
public EasyReversalCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionSelectionRequested(List<Transaction> transactionList) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose transaction");
|
||||
|
||||
Spinner transactionListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface().getTransactionManager().selectTransaction((Transaction) transactionListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardShortPanRequested() {
|
||||
activity.getClientInterface().getTransactionManager().setCardShortPan("0069", 20, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
activity.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
//activity.getClientInterface().getTransactionManager().sendTransactionUserData(null, "phone", "email");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction reversal complete", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSelectTransaction() {
|
||||
activity.getClientInterface().getTransactionManager().selectTransaction(transaction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose transaction");
|
||||
|
||||
Spinner transactionListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
transaction = (Transaction) transactionListSpinner.getSelectedItem();
|
||||
activity.getClientInterface().getTransactionManager().makeEasyReversal(this);
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List<String> list) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.EasyReversalSavedOperationCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
|
||||
public class EasyReversalSavedOperationCallbackHandlerImpl implements EasyReversalSavedOperationCallbackHandler {
|
||||
private M4BankActivity activity;
|
||||
|
||||
public EasyReversalSavedOperationCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionIsNotReversible() {
|
||||
showMessage("onTransactionIsNotReversible");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSelectTransaction() {
|
||||
showMessage("onSelectTransaction");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult result) {
|
||||
showMessage("onCompletedPrinting");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusDatat) {
|
||||
showMessage("onStatusFiscalModule");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionSelectionRequested(List list) {
|
||||
showMessage("onTransactionSelectionRequested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardShortPanRequested() {
|
||||
showMessage("onCardShortPanRequested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
showMessage("notAuthorized");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
showMessage("onCompleted");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
showMessage("onWrongApiCalled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
showMessage("onRequestedReportZ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
showMessage("onTransactionInit");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
showMessage("onTransactionExecutionStatusChanged: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
showMessage("onUserInformationRequested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData errorData) {
|
||||
showMessage("onError");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
showMessage("onErrorWithPossibilityToRetry");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
showMessage("onTransactionDataReceivedError");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
showMessage("onTransactionDataReceived");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
showMessage("onTransactionCompleted");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
showMessage("onRepeat");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
showMessage("onPrinterForRegistrationGettingCompleted");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
showMessage("onNoBoundedPrinterFound");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List printerList) {
|
||||
showMessage("onPrinterToUseSelectionRequested");
|
||||
}
|
||||
|
||||
private void showMessage(String message) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, message, Toast.LENGTH_LONG).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,173 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.EcomPaymentCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.AdditionalTransactionData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.EmailStatus;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class EcomPaymentCallbackHandlerImpl implements EcomPaymentCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public EcomPaymentCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkFlowDataRequested() {
|
||||
Timber.d("WorkFlow requested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionAmountRequested() {
|
||||
activity.getClientInterface().getTransactionManager().setTransactionAmount(activity.getAmount());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataRequested() {
|
||||
activity.getClientInterface().getTransactionManager().setAdditionalTransactionData(new AdditionalTransactionData.Builder(null).build());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
activity.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.sendTransactionUserData("signature", "phone", "email");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFormUrlRequested(String formUrl) {
|
||||
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.sendEcomEmail("qrCode", null, "ap@m4bank.com", EmailStatus.SEND);
|
||||
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "onFormUrlRequested " + formUrl, Toast.LENGTH_LONG)
|
||||
.show());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPreviewTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Preview Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult printerResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List printerList) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.GetCardReaderInformationCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.result.GetCardReaderInformationResult;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class GetCardReaderInformationCallbackHandlerImpl implements GetCardReaderInformationCallbackHandler {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public GetCardReaderInformationCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String deviceName) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List<Reader> deviceList) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List<String> deviceList) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(GetCardReaderInformationResult result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.toString(), Toast.LENGTH_LONG).show());
|
||||
Timber.d("GetCardReaderInformationResult : " + result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import ru.m4bank.mpos.library.external.configuration.GetLicenseCallbackHandler;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
|
||||
public class GetLicenseCallbackHandlerImpl implements GetLicenseCallbackHandler<Result> {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public GetLicenseCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLicenseReceived(String license) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, license, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.authorization.GetMerchantUsersCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.MerchantUser;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
|
||||
public class GetMerchantUsersCallbackHandlerImpl implements GetMerchantUsersCallbackHandler<Result> {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public GetMerchantUsersCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onListOfUsersRequested(List<MerchantUser> userList) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "loaded list of merchant users", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,84 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionDetailsCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
|
||||
class GetTransactionDetailsCallbackHandlerImpl implements GetTransactionDetailsCallbackHandler<Result>, GetTransactionsListCallbackHandler<Result> {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
GetTransactionDetailsCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received: " + transaction, Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose transaction");
|
||||
|
||||
Spinner transactionListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
Transaction transaction = (Transaction) transactionListSpinner.getSelectedItem();
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.getTransactionDetails(this, transaction.getOperationalDayNumber(), transaction
|
||||
.getTransactionNumber(), transaction.getMobileTerminalId());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionDetailsCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
|
||||
class GetTransactionListForRefundCallbackHandlerImpl implements GetTransactionDetailsCallbackHandler<Result>, GetTransactionsListCallbackHandler<Result> {
|
||||
private final M4BankActivity activity;
|
||||
private final CardRefundCallbackHandlerImpl cardRefundCallbackHandler;
|
||||
|
||||
GetTransactionListForRefundCallbackHandlerImpl(M4BankActivity activity, CardRefundCallbackHandlerImpl cardRefundCallbackHandler) {
|
||||
this.cardRefundCallbackHandler = cardRefundCallbackHandler;
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction details received: " + transaction, Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
cardRefundCallbackHandler.onTransactionsListReceived(transactionList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,133 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.LoadTerminalKeysCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode;
|
||||
import ru.m4bank.mpos.service.hardware.network.external.TerminalKeyType;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import timber.log.Timber;
|
||||
|
||||
class LoadTerminalKeysCallbackHandlerImpl implements LoadTerminalKeysCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public LoadTerminalKeysCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
Timber.d("Not authorized");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onKeyLoad(TerminalKeyType terminalKeyType, String description, ResultCode resultCode) {
|
||||
Timber.d("key loaded".concat(terminalKeyType.name()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onKeyReceived(TerminalKeyType terminalKeyType, String description, ResultCode resultCode) {
|
||||
Timber.d("key loaded".concat(terminalKeyType.name()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String description, ResultCode resultCode) {
|
||||
Timber.d("key loaded" + " onError");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
Timber.d("Reader has been received");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List<String> deviceList) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getCardReaderManager()
|
||||
.selectCardReader(deviceListSpinner.getSelectedItem().toString());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List<Reader> deviceList) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Reader> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(deviceList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getCardReaderManager()
|
||||
.setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
Timber.d("No bounded readers");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String deviceName) {
|
||||
Timber.d("onConnectingProcessStarted");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) {
|
||||
if (reconnectAvailable) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().tryToReconnectAndRepeatLast());
|
||||
builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import ru.m4bank.mpos.library.external.authorization.LogOutCallbackHandler;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
|
||||
public class LogOutCallbackHandlerImpl implements LogOutCallbackHandler {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public LogOutCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,833 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.text.format.Formatter;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import ch.qos.logback.classic.LoggerContext;
|
||||
import ch.qos.logback.classic.android.LogcatAppender;
|
||||
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
|
||||
import io.flutter.app.FlutterActivity;
|
||||
import kz.com.aman.kassa.R;
|
||||
import kz.com.aman.kassa.bank.builders.SslConfigurationBuilder;
|
||||
import kz.com.aman.kassa.bank.gui.SelectDialogCallback;
|
||||
import kz.com.aman.kassa.bank.gui.SelectElementDialog;
|
||||
import kz.com.aman.kassa.bank.managing.PreferencesManager;
|
||||
import kz.com.aman.kassa.bank.permissions.PermissionsManager;
|
||||
import kz.com.aman.kassa.bank.permissions.PermissionsManagerImpl;
|
||||
import ru.m4bank.mpos.library.M4BankMposClient;
|
||||
import ru.m4bank.mpos.library.M4BankMposClientInterfaceFacade;
|
||||
import ru.m4bank.mpos.library.M4BankMposParameters;
|
||||
import ru.m4bank.mpos.library.external.authorization.ActivationCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.authorization.AuthorizationCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.authorization.GetMerchantUsersCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.authorization.LogOutCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.configuration.CheckConnectionCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.configuration.GetLicenseCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.CardReadingCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.CashPaymentCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.EasyCardRefundCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.EasyCashRefundCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.EasyReversalSavedOperationCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetCardReaderInformationCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionDetailsCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.LastReversalCardPaymentCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.ResendReceiptCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.ReversalCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.ScanBarCodeCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.XReportCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.data.ConfigurationSettings;
|
||||
import ru.m4bank.mpos.service.commons.data.NetworkConfiguration;
|
||||
import ru.m4bank.mpos.service.commons.data.TerminalConfiguration;
|
||||
import ru.m4bank.mpos.service.configuration.data.RegisterRequestData;
|
||||
import ru.m4bank.mpos.service.data.dictionary.DictionaryCore;
|
||||
import ru.m4bank.mpos.service.data.dictionary.LanguageCore;
|
||||
import ru.m4bank.mpos.service.data.dictionary.MessageCore;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.GetOperationType;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.OperationType;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.PIDataType;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.ScanBarCodeScreenDataInput;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.TransactionFilterData;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.TransactionTypeConv;
|
||||
import ru.m4bank.mpos.service.hardware.network.external.TerminalKeyType;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.PrinterSeries;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.PrintingType;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.enums.SlipType;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.template.Align;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.template.BarcodeCheckObject;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.template.ImageCheckObject;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.template.PrintingTemplate;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.template.QRCodeCheckObject;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.template.StringCheckObject;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.template.StringSpan;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.template.TextStyle;
|
||||
import ru.m4bank.mpos.service.network.Format;
|
||||
import ru.m4bank.mpos.service.network.ServerChoose;
|
||||
import ru.m4bank.mpos.service.transactions.data.VirtualPinKeyboardData;
|
||||
import ru.m4bank.mpos.service.transactions.data.external.ExternalTemplateData;
|
||||
import timber.log.Timber;
|
||||
|
||||
|
||||
public class M4BankActivity extends FlutterActivity {
|
||||
private M4BankMposClientInterfaceFacade clientInterface;
|
||||
|
||||
private AuthorizationCallbackHandler authorizationCallbackHandler;
|
||||
private LogOutCallbackHandler logOutCallbackHandler;
|
||||
private CheckConnectionCallbackHandler checkConnectionCallbackHandler;
|
||||
private CardPaymentCallbackHandlerImpl cardPaymentCallbackHandler;
|
||||
private CardReadingCallbackHandler cardReadingCallbackHandler;
|
||||
private CashPaymentCallbackHandler cashPaymentCallbackHandler;
|
||||
private AlipayPaymentCallbackHandlerImpl alipayPaymentCallbackHandler;
|
||||
private EcomPaymentCallbackHandlerImpl ecomPaymentCallbackHandler;
|
||||
private EasyCardRefundCallbackHandler cardRefundCallbackHandler;
|
||||
private EasyCashRefundCallbackHandler easyCashRefundCallbackHandler;
|
||||
private EasyAlipayRefundCallbackHandlerImpl easyAlipayRefundCallbackHandler;
|
||||
private EasyEcomRefundCallbackHandlerImpl easyEcomRefundCallbackHandler;
|
||||
private ReversalCallbackHandler easyReversalCallbackHandler;
|
||||
private GetMerchantUsersCallbackHandler getMerchantUsersCallbackHandler;
|
||||
private ActivationCallbackHandler activationCallbackHandler;
|
||||
private GetLicenseCallbackHandler getLicenseCallbackHandler;
|
||||
private ResendReceiptCallbackHandler resendReceiptCallbackHandler;
|
||||
private GetTransactionDetailsCallbackHandler getTransactionDetailsCallbackHandler;
|
||||
private PrintingCallbackHandlerImpl printingCallbackHandler;
|
||||
private XReportCallbackHandler xReportCallbackHandler;
|
||||
private LastReversalCardPaymentCallbackHandler revertCurrentOperationCallbackHandler;
|
||||
private GetCardReaderInformationCallbackHandler getCardReaderInformationCallbackHandler;
|
||||
private EasyReversalSavedOperationCallbackHandler easyReversalSavedOperationCallbackHandler;
|
||||
|
||||
private GetTransactionListForRefundCallbackHandlerImpl getTransactionListForRefundCallbackHandler;
|
||||
private SendRegisterRequestCallbackHandlerImpl sendRegisterRequestCallbackHandler;
|
||||
private EasyCardReversalCallbackHandlerImpl easyCardReversalCallbackHandler;
|
||||
private CloseDayCallbackHandlerImpl closeDayCallbackHandler;
|
||||
private LoadTerminalKeysCallbackHandlerImpl loadTerminalKeysCallbackHandler;
|
||||
private ScanBarCodeCallbackHandler scanBarCodeCallbackHandler;
|
||||
|
||||
public M4BankMposClientInterfaceFacade getClientInterface() {
|
||||
return clientInterface;
|
||||
}
|
||||
|
||||
private LogcatAppender appender;
|
||||
|
||||
private String login;
|
||||
private String password;
|
||||
|
||||
private PermissionsManager permissionsManager;
|
||||
|
||||
public String getLogin() {
|
||||
return login;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Timber.plant(new Timber.DebugTree());
|
||||
setContentView(R.layout.activity_main);
|
||||
new Handler();
|
||||
PermissionsManager.PermissionsCheckResultHandler permissionsCheckResultHandler =
|
||||
new PermissionsManager.PermissionsCheckResultHandler() {
|
||||
@Override
|
||||
public void onPermissionsGranted() {
|
||||
init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionsDeclined() {
|
||||
Toast.makeText(M4BankActivity.this,
|
||||
"Application can work incorrectly caused by missing permissions", Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
init();
|
||||
}
|
||||
};
|
||||
permissionsManager = new PermissionsManagerImpl(this);
|
||||
permissionsManager.checkPermissions(permissionsCheckResultHandler);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
|
||||
@NonNull int[] grantResults) {
|
||||
permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
}
|
||||
|
||||
private void init() {
|
||||
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
|
||||
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
|
||||
encoder.setContext(lc);
|
||||
encoder.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
|
||||
encoder.start();
|
||||
appender = new LogcatAppender();
|
||||
appender.setContext(lc);
|
||||
appender.setEncoder(encoder);
|
||||
appender.start();
|
||||
|
||||
|
||||
//слушатель активации
|
||||
activationCallbackHandler = new ActivationCallbackHandlerImpl(this);
|
||||
//слушатель авторизации
|
||||
authorizationCallbackHandler = new AuthorizationCallbackHandlerImpl(this);
|
||||
//слушатель завершения сессии
|
||||
logOutCallbackHandler = new LogOutCallbackHandlerImpl(this);
|
||||
//слушатель проверки коннекта с сервером и получения конфигурационных данных
|
||||
checkConnectionCallbackHandler = new CheckConnectionCallbackHandlerImpl(this);
|
||||
//слушатель получения данных карты
|
||||
cardReadingCallbackHandler = new CardReadingCallbackHandlerImpl(this);
|
||||
|
||||
//слушатели для оплат
|
||||
cardPaymentCallbackHandler = new CardPaymentCallbackHandlerImpl(this);
|
||||
cashPaymentCallbackHandler = new CashPaymentCallbackHandlerImpl(this);
|
||||
alipayPaymentCallbackHandler = new AlipayPaymentCallbackHandlerImpl(this);
|
||||
ecomPaymentCallbackHandler = new EcomPaymentCallbackHandlerImpl(this);
|
||||
|
||||
//слушатели для возвратов
|
||||
cardRefundCallbackHandler = new CardRefundCallbackHandlerImpl(this);
|
||||
getTransactionListForRefundCallbackHandler = new GetTransactionListForRefundCallbackHandlerImpl(this,
|
||||
(CardRefundCallbackHandlerImpl) cardRefundCallbackHandler);
|
||||
easyCashRefundCallbackHandler = new EasyCashRefundCallbackHandlerImpl(this);
|
||||
easyAlipayRefundCallbackHandler = new EasyAlipayRefundCallbackHandlerImpl(this);
|
||||
|
||||
//слушатели для отмен
|
||||
//слушатель для отмены карточной операции без участия ридера
|
||||
easyReversalCallbackHandler = new EasyReversalCallbackHandlerImpl(this);
|
||||
//слушатель для отмены карточной операции с участием ридера
|
||||
easyCardReversalCallbackHandler = new EasyCardReversalCallbackHandlerImpl(this);
|
||||
//слушатель для отмены текущей операции, когда данные по транзакции сохранены в кеше и не производилась очистка или новая операция
|
||||
revertCurrentOperationCallbackHandler = new RevertCurrentOperationCallbackHandlerImpl(this);
|
||||
|
||||
//слушатель для записи на терминал ключей
|
||||
loadTerminalKeysCallbackHandler = new LoadTerminalKeysCallbackHandlerImpl(this);
|
||||
|
||||
//слушатель для получения списка мерчантов
|
||||
getMerchantUsersCallbackHandler = new GetMerchantUsersCallbackHandlerImpl(this);
|
||||
//слушатель получения лицензии
|
||||
getLicenseCallbackHandler = new GetLicenseCallbackHandlerImpl(this);
|
||||
//слушатель повторной отправки чека
|
||||
resendReceiptCallbackHandler = new ResendReceiptCallbackHandlerImpl(this);
|
||||
//слушатель получения информации о транзакциях и детальной информации по конкретной операции
|
||||
getTransactionDetailsCallbackHandler = new GetTransactionDetailsCallbackHandlerImpl(this);
|
||||
//заявка на mpos
|
||||
sendRegisterRequestCallbackHandler = new SendRegisterRequestCallbackHandlerImpl(this);
|
||||
//слушатель закрытия опер дня и сверки с сервером
|
||||
closeDayCallbackHandler = new CloseDayCallbackHandlerImpl(this);
|
||||
//слушатели печати
|
||||
printingCallbackHandler = new PrintingCallbackHandlerImpl(this);
|
||||
//слушатель для получения серийного номера
|
||||
getCardReaderInformationCallbackHandler = new GetCardReaderInformationCallbackHandlerImpl(this);
|
||||
//слушатель для считывания barcode
|
||||
scanBarCodeCallbackHandler = new ScanBarCodeCallbackHandlerImpl(this);
|
||||
// слушатель для отмены неуспешной операции, которая сохранена в холдере
|
||||
easyReversalSavedOperationCallbackHandler = new EasyReversalSavedOperationCallbackHandlerImpl(this);
|
||||
|
||||
initLoginForm();
|
||||
|
||||
initButton(R.id.readerInformation, v -> getReaderInformation());
|
||||
|
||||
initButton(R.id.activate, v -> clientInterface.getAuthorizationManager().activate(activationCallbackHandler));
|
||||
|
||||
initButton(R.id.logout,
|
||||
v -> clientInterface.getAuthorizationManager().logOut(logOutCallbackHandler));
|
||||
|
||||
initButton(R.id.checkConnection, v -> clientInterface.getConfigurationManager()
|
||||
.checkConnection(
|
||||
checkConnectionCallbackHandler));
|
||||
|
||||
initButton(R.id.checkAccess, v -> {
|
||||
String result;
|
||||
if (clientInterface.getConfigurationManager()
|
||||
.isOperationAllowed(
|
||||
OperationType.getByCode(((Spinner) findViewById(R.id.checkAccessSpinner))
|
||||
.getSelectedItem()
|
||||
.toString()))) {
|
||||
result = "YES";
|
||||
} else {
|
||||
result = "NO";
|
||||
}
|
||||
Toast.makeText(this, result, Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
|
||||
initButton(R.id.getAccesses, v -> {
|
||||
StringBuilder result = new StringBuilder();
|
||||
List<OperationType> availableOperations = clientInterface.getConfigurationManager()
|
||||
.getAllowedOperationsList();
|
||||
if (!availableOperations.isEmpty()) {
|
||||
for (OperationType o : availableOperations) {
|
||||
result.append(o.getCode()).append("\n");
|
||||
}
|
||||
} else {
|
||||
result.append("No available operations");
|
||||
}
|
||||
Toast.makeText(this, result.toString(), Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
|
||||
initButton(R.id.getAccessPaymentInstruments, v -> {
|
||||
boolean ecom = clientInterface.getConfigurationManager().isPaymentInstrumentsAllowed(PIDataType.ECOM);
|
||||
boolean alipay =
|
||||
clientInterface.getConfigurationManager().isPaymentInstrumentsAllowed(PIDataType.ALIPAY_STANDARD);
|
||||
boolean card =
|
||||
clientInterface.getConfigurationManager().isPaymentInstrumentsAllowed(PIDataType.CARD_STANDART);
|
||||
boolean cash = clientInterface.getConfigurationManager().isPaymentInstrumentsAllowed(PIDataType.CASH);
|
||||
});
|
||||
|
||||
initButton(R.id.cancel, v -> clientInterface.cancel());
|
||||
|
||||
initButton(R.id.getLicense, v -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getConfigurationManager().getLicense(getLicenseCallbackHandler);
|
||||
});
|
||||
|
||||
findViewById(R.id.getCommonCardData).setOnClickListener(v -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getTransactionManager().getCommonCardData(cardReadingCallbackHandler);
|
||||
});
|
||||
|
||||
//////////// вызовы оплат //////////////
|
||||
initButton(R.id.makeCardPayment, v -> {
|
||||
clientInterface.cancel();
|
||||
cardPaymentCallbackHandler.setTransactionTypeConv(TransactionTypeConv.PAYMENT);
|
||||
clientInterface.getTransactionManager().makeCardPayment(cardPaymentCallbackHandler);
|
||||
});
|
||||
|
||||
initButton(R.id.makeCashPayment, v -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getTransactionManager().makeCashPayment(cashPaymentCallbackHandler);
|
||||
});
|
||||
|
||||
initButton(R.id.ecomPayment, v -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getTransactionManager().makeEcomPayment(ecomPaymentCallbackHandler);
|
||||
});
|
||||
|
||||
initButton(R.id.makeAlipayPayment,
|
||||
v -> clientInterface.getTransactionManager().makeAlipayPayment(alipayPaymentCallbackHandler));
|
||||
|
||||
//////////// вызов подтверждения платежа и дисконнекта устройств//////////////
|
||||
initButton(R.id.completePayment,
|
||||
v -> clientInterface.getTransactionManager().completeTransaction());
|
||||
|
||||
//////////// вызовы отмен - хостовые терминалы//////////////
|
||||
//////////// вызов отмены текущей транзакции с использованием слушателя оплаты (только во время транзакции)//////////////
|
||||
initButton(R.id.makeReversalLast, v -> {
|
||||
cardPaymentCallbackHandler.setTransactionTypeConv(TransactionTypeConv.CANCEL);
|
||||
clientInterface.getTransactionManager().revertCurrentOperation(revertCurrentOperationCallbackHandler);
|
||||
});
|
||||
|
||||
//////////// вызов отмены текущей транзакции с использованием нового слушателя (только во время транзакции) - хостовые терминалы//////////////
|
||||
initButton(R.id.makeReversalLastWithCallback, v -> clientInterface.getTransactionManager()
|
||||
.revertCurrentOperation(
|
||||
revertCurrentOperationCallbackHandler));
|
||||
|
||||
/////////// вызовы отмены по карте//////////////
|
||||
initButton(R.id.makeEasyCardReversal, v -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getTransactionManager()
|
||||
.getTransactionsList(easyCardReversalCallbackHandler, 20, 0, GetOperationType.SHOW, null);
|
||||
});
|
||||
|
||||
/////////// вызовы отмены на сервере//////////////
|
||||
initButton(R.id.makeEasyReversal, v -> clientInterface.getTransactionManager()
|
||||
.getTransactionsList(
|
||||
(GetTransactionsListCallbackHandler) easyReversalCallbackHandler,
|
||||
20, 0, GetOperationType.SHOW,
|
||||
null));
|
||||
|
||||
//////////// вызовы возвратов //////////////
|
||||
initButton(R.id.makeCardRefund, v -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getTransactionManager()
|
||||
.getTransactionsList(getTransactionListForRefundCallbackHandler, 20, 0,
|
||||
GetOperationType.SHOW, null);
|
||||
});
|
||||
|
||||
initButton(R.id.makeCashRefund, v -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getTransactionManager()
|
||||
.getTransactionsList((GetTransactionsListCallbackHandler) easyCashRefundCallbackHandler, 20,
|
||||
0, GetOperationType.SHOW, null);
|
||||
});
|
||||
|
||||
initButton(R.id.makeAlipayRefund, v -> clientInterface.getTransactionManager()
|
||||
.getTransactionsList(
|
||||
(GetTransactionsListCallbackHandler) easyAlipayRefundCallbackHandler,
|
||||
20, 0, GetOperationType.SHOW,
|
||||
null));
|
||||
|
||||
//////////// получение списка мерчантов //////////////
|
||||
initButton(R.id.getMerchantUsers, v -> clientInterface.getAuthorizationManager()
|
||||
.getMerchantUsers(getMerchantUsersCallbackHandler, 1000,
|
||||
0));
|
||||
|
||||
//////////// повторная отправка чека на почту //////////////
|
||||
initButton(R.id.resendReceipt, v -> clientInterface.getTransactionManager()
|
||||
.getTransactionsList(
|
||||
(GetTransactionsListCallbackHandler) resendReceiptCallbackHandler,
|
||||
20, 0, GetOperationType.SHOW,
|
||||
null));
|
||||
|
||||
//////////// получение детальной информации о транзакции //////////////
|
||||
initButton(R.id.getTransactionDetails, v -> clientInterface.getTransactionManager()
|
||||
.getTransactionsList(
|
||||
(GetTransactionsListCallbackHandler) getTransactionDetailsCallbackHandler,
|
||||
20, 0,
|
||||
GetOperationType.SHOW,
|
||||
null));
|
||||
|
||||
//////////// получение детальной информации о текущей транзакции//////////////
|
||||
initButton(R.id.getCurrentTransactionDetails,
|
||||
v -> clientInterface.getTransactionManager().getTransactionDetails(false));
|
||||
|
||||
//////////// получение спика транзакций с использованием фильтра //////////////
|
||||
initButton(R.id.getTransactionListFilter, v -> clientInterface.getTransactionManager()
|
||||
.getTransactionsList(
|
||||
(GetTransactionsListCallbackHandler) getTransactionDetailsCallbackHandler,
|
||||
20, 0, GetOperationType.SEARCH,
|
||||
new TransactionFilterData.Builder().setScanerCode(
|
||||
"6354635635736647656").build()));
|
||||
|
||||
//////////// отправка данных для регистрации mpos - дополнительный функционал при активации//////////////
|
||||
findViewById(R.id.sendRegisterRequest).setOnClickListener(v -> {
|
||||
String url = "https://test.ponkratenko.ru";
|
||||
clientInterface.getConfigurationManager()
|
||||
.sendRegisterRequest(sendRegisterRequestCallbackHandler, getRegisterRequestData(), url);
|
||||
});
|
||||
|
||||
//запись на терминал ключей tmk, tpk
|
||||
findViewById(R.id.writeTerminalKeys).setOnClickListener(v -> {
|
||||
String url = "https://test.ponkratenko.ru";
|
||||
Set keysForDynamicUpdate = new HashSet<TerminalKeyType>() {{
|
||||
add(TerminalKeyType.Tak);
|
||||
add(TerminalKeyType.Tpk);
|
||||
}};
|
||||
clientInterface.getCardReaderManager()
|
||||
.loadTerminalKeys(new LoadTerminalKeysCallbackHandlerImpl(this), keysForDynamicUpdate);
|
||||
});
|
||||
|
||||
//////////// закрытие смены и сверка с сервером //////////////
|
||||
initButton(R.id.closeDay,
|
||||
v -> clientInterface.getTransactionManager().closeDay(closeDayCallbackHandler));
|
||||
|
||||
//////////// добавление принтера в систему с возможностью печати во время транзакций //////////////
|
||||
initButton(R.id.addPrinter, v -> clientInterface.getPrinterManager()
|
||||
.addNewPrinter(printingCallbackHandler,
|
||||
PrinterSeries.NEW_PRINTER));
|
||||
|
||||
//////////// удаление принтера из системы //////////////
|
||||
initButton(R.id.deletePrinter,
|
||||
v -> clientInterface.getPrinterManager().clearSavedPrinterName());
|
||||
|
||||
initButton(R.id.printFiscal, v -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getPrinterManager()
|
||||
.printFiscalTransactionCheck(printingCallbackHandler, DataCreatorUtils.makeFiscalData());
|
||||
});
|
||||
|
||||
initButton(R.id.printSlipCheck, v -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getPrinterManager()
|
||||
.printFirstSlipTransactionCheck(printingCallbackHandler, DataCreatorUtils.makeSlipData(true),
|
||||
SlipType.ERROR);
|
||||
});
|
||||
|
||||
initButton(R.id.printReportX, v1 -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getPrinterManager().printReport(printingCallbackHandler, PrintingType.X_REPORT);
|
||||
});
|
||||
initButton(R.id.printReportZ, v2 -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getPrinterManager().printReport(printingCallbackHandler, PrintingType.Z_REPORT);
|
||||
});
|
||||
initButton(R.id.printFullReport, v1 -> {
|
||||
clientInterface.cancel();
|
||||
xReportCallbackHandler =
|
||||
new XReportCallbackHandlerImpl(clientInterface, PrintingType.RECONCILIATION_FULL_REPORT, this);
|
||||
clientInterface.getPrinterManager().xReport(xReportCallbackHandler);
|
||||
});
|
||||
initButton(R.id.printShortReport, v2 -> {
|
||||
clientInterface.cancel();
|
||||
xReportCallbackHandler =
|
||||
new XReportCallbackHandlerImpl(clientInterface, PrintingType.RECONCILIATION_SHORT_REPORT, this);
|
||||
clientInterface.getPrinterManager().xReport(xReportCallbackHandler);
|
||||
});
|
||||
|
||||
initButton(R.id.printTemplate, v -> {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getPrinterManager().printTemplate(printingCallbackHandler,
|
||||
new ExternalTemplateData.Builder().printingTemplate(buildPrintingTemplate()).build());
|
||||
});
|
||||
|
||||
initButton(R.id.readBarCode, v2 -> showDialogScanner());
|
||||
|
||||
findViewById(R.id.versionStore).setOnClickListener(v -> {
|
||||
String result = clientInterface.getExternalApiManager().getExternalStoreVersion();
|
||||
Toast.makeText(this, result + "", Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
|
||||
findViewById(R.id.versionTracker).setOnClickListener(v -> {
|
||||
String result = clientInterface.getExternalApiManager().getExternalTrackerVersion();
|
||||
Toast.makeText(this, result + "", Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
|
||||
String savedServerUrl = PreferencesManager.loadStringField(this, PreferencesManager.Field.SERVER_URL,
|
||||
getString(R.string.default_server_address_mpos_5_0_test));
|
||||
String serverUrl;
|
||||
if (savedServerUrl != null) {
|
||||
serverUrl = savedServerUrl;
|
||||
} else {
|
||||
serverUrl = getString(R.string.default_server_address_mpos_5_0_test);
|
||||
}
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle("Choose server");
|
||||
|
||||
EditText serverAddressForm = new EditText(this);
|
||||
serverAddressForm.setText(serverUrl);
|
||||
|
||||
builder.setView(serverAddressForm);
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
String model1 = Build.MODEL;
|
||||
String brand2 = Build.BRAND;
|
||||
String serverAddress = serverAddressForm.getText().toString();
|
||||
PreferencesManager.saveStringField(M4BankActivity.this, PreferencesManager.Field.SERVER_URL, serverAddress);
|
||||
|
||||
clientInterface = M4BankMposClient.getInstance(
|
||||
new M4BankMposParameters(
|
||||
Format.JSON,
|
||||
"rus",
|
||||
null,
|
||||
this,
|
||||
new SessionExpiringCallbackHandlerImpl(),
|
||||
"appName",
|
||||
ServerChoose.API_5_0,
|
||||
new ConfigurationSettings
|
||||
.Builder()
|
||||
.printerUsed(true)
|
||||
.umkaEnabled(true)
|
||||
.networkConfiguration(createNetworkConfiguration(serverAddress))
|
||||
.terminalConfiguration(createTerminalConfiguration())
|
||||
.build())
|
||||
);
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.create().show();
|
||||
|
||||
//Создание словаря
|
||||
DictionaryCore aisinoDictionary =
|
||||
new DictionaryCore(new HashMap<LanguageCore, HashMap<MessageCore, String>>() {{
|
||||
put(LanguageCore.English, new HashMap<MessageCore, String>() {{
|
||||
put(MessageCore.AisinoA90OfflinePin, "Please enter offline PIN");
|
||||
put(MessageCore.AisinoA90OfflinePinRemain1, "Please enter offline PIN (Last try)");
|
||||
put(MessageCore.AisinoA90OfflinePinRemain2, "Please enter offline PIN (Remain: 2)");
|
||||
put(MessageCore.AisinoA90OfflinePinRemain3, "Please enter offline PIN (Remain: 3)");
|
||||
put(MessageCore.AisinoA90OfflinePinRemain4, "Please enter offline PIN (Remain: 4)");
|
||||
put(MessageCore.AisinoA90OnlinePin, "Please enter online PIN");
|
||||
put(MessageCore.AisinoA90CompletingTransaction, "");
|
||||
put(MessageCore.AisinoA90ContactlessMessage, "Please tap card");
|
||||
put(MessageCore.AisinoA90ContactMessage, "Please insert card");
|
||||
put(MessageCore.AisinoA90ReadSuccess, "PROCESSING");
|
||||
put(MessageCore.AisinoA90InputPWD, "enter pin");
|
||||
put(MessageCore.AisinoA90DefaultBottomButtonsText, "Cancel Clear Done");
|
||||
put(MessageCore.AisinoPinpadCompleted, "COMPLETED");
|
||||
put(MessageCore.AisinoPinpadDeclined, "DECLINED");
|
||||
put(MessageCore.AisinoPinpadAmountHint, "");
|
||||
put(MessageCore.KztCurrency, "KZT");
|
||||
put(MessageCore.BynCurrency, "BYN");
|
||||
put(MessageCore.EurCurrency, "EUR");
|
||||
put(MessageCore.GelCurrency, "GEL");
|
||||
put(MessageCore.JpyCurrency, "JPY");
|
||||
put(MessageCore.KwdCurrency, "KWD");
|
||||
put(MessageCore.RubCurrency, "RUB");
|
||||
put(MessageCore.UsdCurrency, "USD");
|
||||
put(MessageCore.AisinoPinpadScanning, "Text for test");
|
||||
put(MessageCore.AisinoPinpadScanningCompleted, "Success for test");
|
||||
}});
|
||||
put(LanguageCore.Russian, new HashMap<MessageCore, String>() {{
|
||||
put(MessageCore.AisinoA90OfflinePin, "Введите ПИН");
|
||||
put(MessageCore.AisinoA90OfflinePinRemain1, "ПИН (Последняя попытка)");
|
||||
put(MessageCore.AisinoA90OfflinePinRemain2, "ПИН (Осталось попыток: 2)");
|
||||
put(MessageCore.AisinoA90OfflinePinRemain3, "ПИН (Осталось попыток: 3)");
|
||||
put(MessageCore.AisinoA90OfflinePinRemain4, "ПИН (Осталось попыток: 4)");
|
||||
put(MessageCore.AisinoA90OnlinePin, "Введите ПИН");
|
||||
put(MessageCore.AisinoA90CompletingTransaction, "");
|
||||
put(MessageCore.AisinoA90ContactlessMessage, "Предъявите карту");
|
||||
put(MessageCore.AisinoA90ContactMessage, "Предъявите карту");
|
||||
put(MessageCore.AisinoA90ReadSuccess, "ОБРАБОТКА");
|
||||
put(MessageCore.AisinoA90InputPWD, "введите пин");
|
||||
put(MessageCore.AisinoA90DefaultBottomButtonsText, "Отмена Очистить Готово");
|
||||
put(MessageCore.AisinoPinpadCompleted, "ОДОБРЕНО");
|
||||
put(MessageCore.AisinoPinpadDeclined, "ОТКЛОНЕНО");
|
||||
put(MessageCore.AisinoPinpadAmountHint, "");
|
||||
put(MessageCore.KztCurrency, "KZT");
|
||||
put(MessageCore.BynCurrency, "BYN");
|
||||
put(MessageCore.EurCurrency, "EUR");
|
||||
put(MessageCore.GelCurrency, "GEL");
|
||||
put(MessageCore.JpyCurrency, "JPY");
|
||||
put(MessageCore.KwdCurrency, "KWD");
|
||||
put(MessageCore.RubCurrency, "RUB");
|
||||
put(MessageCore.UsdCurrency, "USD");
|
||||
put(MessageCore.AisinoPinpadScanning, "Скан...");
|
||||
put(MessageCore.AisinoPinpadScanningCompleted, "Успешно");
|
||||
}});
|
||||
}});
|
||||
|
||||
//обновление словаря в библиотеке ридера
|
||||
initButton(R.id.updateDictionary, v -> updateDictionary(aisinoDictionary));
|
||||
|
||||
// отмена неуспешной операции, которая сохранена в холдере
|
||||
initButton(R.id.makeReversalSavedUnsuccessfulOperation, v ->
|
||||
clientInterface.getTransactionManager()
|
||||
.makeReversalSavedUnsuccessfulOperation(easyReversalSavedOperationCallbackHandler));
|
||||
}
|
||||
|
||||
private void initButton(int id, View.OnClickListener onClickListener) {
|
||||
findViewById(id).setOnClickListener(onClickListener);
|
||||
}
|
||||
|
||||
private void initLoginForm() {
|
||||
EditText loginField = findViewById(R.id.login);
|
||||
EditText passwordField = findViewById(R.id.password);
|
||||
loginField.setText(
|
||||
PreferencesManager.loadStringField(M4BankActivity.this, PreferencesManager.Field.LOGIN, login));
|
||||
passwordField.setText(
|
||||
PreferencesManager.loadStringField(M4BankActivity.this, PreferencesManager.Field.PASSWORD, password));
|
||||
initButton(R.id.authorize, v -> {
|
||||
login = loginField.getText().toString();
|
||||
password = passwordField.getText().toString();
|
||||
PreferencesManager.saveStringField(M4BankActivity.this, PreferencesManager.Field.LOGIN, login);
|
||||
PreferencesManager.saveStringField(M4BankActivity.this, PreferencesManager.Field.PASSWORD, password);
|
||||
clientInterface.getAuthorizationManager().authorize(authorizationCallbackHandler);
|
||||
});
|
||||
}
|
||||
|
||||
private TerminalConfiguration createTerminalConfiguration() {
|
||||
return new TerminalConfiguration.Builder()
|
||||
.energySaverModeTime(150)
|
||||
.pinLengthsArray(new byte[]{4, 6})
|
||||
.shutDownModeTime(300)
|
||||
.deviceType(new DeviceTypeDefiner().define())
|
||||
.build();
|
||||
}
|
||||
|
||||
private NetworkConfiguration createNetworkConfiguration(String serverUrl) {
|
||||
return new NetworkConfiguration.Builder()
|
||||
.sslConfiguration(SslConfigurationBuilder.buildAllTrustConfiguration(serverUrl))
|
||||
.serverUrl(serverUrl)
|
||||
.build();
|
||||
}
|
||||
|
||||
private void showDialogScanner() {
|
||||
String[] listItems = {"custom", "default"};
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(M4BankActivity.this);
|
||||
builder.setTitle("Choose scanner:");
|
||||
builder.setItems(listItems, (dialog, which) -> showScanner(which));
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
private void showScanner(int which) {
|
||||
boolean isCustom;
|
||||
if (which == 0) {
|
||||
isCustom = true;
|
||||
} else {
|
||||
isCustom = false;
|
||||
}
|
||||
clientInterface.getCardReaderManager().scanBarCode(scanBarCodeCallbackHandler,
|
||||
new ScanBarCodeScreenDataInput.Builder()
|
||||
.setShowCustom(isCustom)
|
||||
.setShowNextButton("true")
|
||||
.setNextButtonText("Next button")
|
||||
.setNextButtonTextColor("#999888")
|
||||
.setNextButtonTextSize("20")
|
||||
.setTitleBarText("Qr Scanner")
|
||||
.setTitleTextSize("20")
|
||||
.setTitleTextColor("#123456")
|
||||
.setTitleColor("#987123")
|
||||
.setDescriptionText("Описание")
|
||||
.setDescriptionTextColor("#564637")
|
||||
.setDescriptionTextSize("20")
|
||||
.setScanHeight("200")
|
||||
.setScanWidth("600")
|
||||
.setSummText("2000")
|
||||
.setSummColor("#666777")
|
||||
.setSummSize("20")
|
||||
.build());
|
||||
}
|
||||
|
||||
private void updateDictionary(DictionaryCore dictionaryCore) {
|
||||
clientInterface.getConfigurationManager().updateDictionary(dictionaryCore);
|
||||
}
|
||||
|
||||
private void getReaderInformation() {
|
||||
clientInterface.getCardReaderManager().getCardReaderInformation(getCardReaderInformationCallbackHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
//
|
||||
// ((EditText) findViewById(R.id.code)).setText("roam");
|
||||
//// ((EditText) findViewById(R.id.code)).setText("201");
|
||||
// ((EditText) findViewById(R.id.pin)).setText("1111");
|
||||
//// ((EditText) findViewById(R.id.login)).setText("61");
|
||||
//// ((EditText) findViewById(R.id.login)).setText("test2");
|
||||
//// ((EditText) findViewById(R.id.login)).setText("dm@centercorptech.net");
|
||||
// ((EditText) findViewById(R.id.login)).setText("ap@m4bank.com");
|
||||
//// ((EditText) findViewById(R.id.password)).setText("qwer");
|
||||
// ((EditText) findViewById(R.id.password)).setText("1111");
|
||||
//// ((EditText) findViewById(R.id.password)).setText("1111");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
Timber.d("Shutdown");
|
||||
if (clientInterface != null) {
|
||||
clientInterface.shutdown();
|
||||
}
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private RegisterRequestData getRegisterRequestData() {
|
||||
String code = "1" + (int) (Math.random() * 1000) + "" + (int) (Math.random() * 1000) + "" +
|
||||
(int) (Math.random() * 1000);
|
||||
String date = new SimpleDateFormat("yyyy-MM-dd H:m:s").format(new Date());
|
||||
String acquiringType = "mPOS";
|
||||
String ip = "169.254.10.10";
|
||||
try {
|
||||
WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
|
||||
ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
RegisterRequestData result = new RegisterRequestData(code, date, acquiringType, ip);
|
||||
|
||||
result.setWebSite("http://fgfdgsfgsd.ru");
|
||||
result.setRegion("г. Москва");
|
||||
result.setCity("Moscow");
|
||||
result.setOrganizationName("AlexCorp");
|
||||
result.setInn("5785678");
|
||||
result.setIndustry("dghdfgh");
|
||||
result.setCellPointsCount("44");
|
||||
result.setContactName("Alex");
|
||||
result.setEmail("Alex@alex.com");
|
||||
result.setPhone("+79859999999");
|
||||
result.setUsingCard(true);
|
||||
result.setAgreement(true);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public long getAmount() {
|
||||
long amount;
|
||||
try {
|
||||
amount = Long.parseLong(((EditText) findViewById(R.id.amountField)).getText().toString());
|
||||
} catch (Exception any) {
|
||||
amount = 1;
|
||||
}
|
||||
return amount;
|
||||
}
|
||||
|
||||
public HashMap<String, Object> getStyle(String style) {
|
||||
|
||||
HashMap<String, Object> style1 = new HashMap<>();
|
||||
style1.put("TitleBackGroundColor", "#DB3F34");
|
||||
style1.put("VirtualPinPadStyle", 6);
|
||||
style1.put("PatternForAmountAndCurrency", "%s $");
|
||||
style1.put("setBottomBtnText", new String[]{"Cancel", "Clear", "Done"});
|
||||
|
||||
HashMap<String, Object> style2 = new HashMap<>();
|
||||
style2.put("TitleBackGroundColor", "#909090");
|
||||
style2.put("VirtualPinPadStyle", 7);
|
||||
style2.put("PatternForAmountAndCurrency", "$ %s");
|
||||
style2.put("setBottomBtnText", new String[]{"Отмена", "Очистить", "Готово"});
|
||||
style2.put("amountTextSize", 32);
|
||||
style2.put("amountTextColor", "#333111");
|
||||
style2.put("amountTextFont", "sans_serif_bold_italic");
|
||||
style2.put("messageTextSize", 18);
|
||||
style2.put("messageTextColor", "#333aaa");
|
||||
style2.put("messageTextFont", "sans_serif_bold_italic");
|
||||
style2.put("keyboardNumbersTextColor", "#111ccc");
|
||||
style2.put("keyboardNumbersTextSize", 24);
|
||||
style2.put("keyboardNumbersTextFont", "sans_serif_bold_italic");
|
||||
style2.put("bottomButtonsTextSize", 14);
|
||||
style2.put("bottomButtonsTextColor", "#ccc666");
|
||||
style2.put("bottomButtonsTextFont", "sans_serif_bold_italic");
|
||||
|
||||
switch (style) {
|
||||
case "Style 1":
|
||||
return style1;
|
||||
case "Style 2":
|
||||
return style2;
|
||||
default:
|
||||
return style1;
|
||||
}
|
||||
}
|
||||
|
||||
public void showSelectStyleDialog(CardPaymentCallbackHandlerImpl.SelectStyleListener selectStyleListener) {
|
||||
ArrayList<String> styles = new ArrayList<>();
|
||||
styles.add("Style 1");
|
||||
styles.add("Style 2");
|
||||
runOnUiThread(() ->
|
||||
new SelectElementDialog<>(M4BankActivity.this, styles, new SelectDialogCallback<String>() {
|
||||
@Override
|
||||
public void onElementSelected(String element) {
|
||||
VirtualPinKeyboardData virtualPinKeyboardData =
|
||||
new VirtualPinKeyboardData.Builder(getStyle(element)).build();
|
||||
selectStyleListener.onSelectStyle(virtualPinKeyboardData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancelSelection() {
|
||||
|
||||
}
|
||||
}).show()
|
||||
);
|
||||
}
|
||||
|
||||
private PrintingTemplate buildPrintingTemplate() {
|
||||
return new PrintingTemplate.Builder()
|
||||
.append(new BarcodeCheckObject(Align.Center, 100, 300, true, "Hello kitty"))
|
||||
.append(new StringCheckObject(new StringSpan.Builder("Test short simple string").build()))
|
||||
.append(new StringCheckObject(new StringSpan.Builder(
|
||||
"Test long simple string. It's a pretty long string for being more that check with.").build()))
|
||||
.append(new StringCheckObject(new StringSpan.Builder("Test short italic center string.")
|
||||
.alignment(Align.Center)
|
||||
.textStyle(TextStyle.Italic)
|
||||
.build()))
|
||||
.append(new StringCheckObject(new StringSpan.Builder("Test bold italic right large font string.")
|
||||
.alignment(Align.Right)
|
||||
.fontSize(30)
|
||||
.textStyle(TextStyle.ItalicBold)
|
||||
.build()))
|
||||
.append(new StringCheckObject(new StringSpan.Builder("Test gray left small string.")
|
||||
.graylevel(5)
|
||||
.fontSize(15)
|
||||
.build()))
|
||||
.append(new QRCodeCheckObject(Align.Center, 100, "Hello kitty"))
|
||||
.append(new ImageCheckObject(
|
||||
BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_call)))
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.PrintingCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.PrintingType;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class PrintingCallbackHandlerImpl implements PrintingCallbackHandler<Result, PrinterResult<PrinterErrorData, PrinterBaseData>> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public PrintingCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
Timber.i("onRequestedReportZ");
|
||||
activity.getClientInterface().getPrinterManager().printReport(this, PrintingType.Z_REPORT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult printerResult) {
|
||||
Timber.i("onCompletedPrinting = " + printerResult);
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "onCompletedPrinting = " + printerResult, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
Timber.i("onPrinterForRegistrationGettingCompleted");
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Saved printer - " + activity.getClientInterface().getPrinterManager().isSavedPrinterName(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
Timber.i("onNoBoundedPrinterFound");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List printerList) {
|
||||
Timber.i("printerList = " + printerList);
|
||||
activity.getClientInterface().getPrinterManager().selectPrinter(printerList.get(0).toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
Timber.i("onCompleted = " + result.getResultType().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
Timber.i("onWrongApiCalled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
Timber.i("onRepeat");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.CurrencyEnum;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.ReconciliationData;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.ReconciliationOperationData;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.TransactionType;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionMoneyInteractionType;
|
||||
|
||||
|
||||
public class ReconciliationPrinterDataBuilder {
|
||||
|
||||
public ReconciliationData build(List<Transaction> transactionList, boolean closeDay) {
|
||||
ArrayList<ReconciliationOperationData> reconciliationOperationDataList = new ArrayList<ReconciliationOperationData>();
|
||||
if (transactionList == null) return null;
|
||||
for (Transaction transaction : transactionList) {
|
||||
if (!isErrorStatus(transaction)) {
|
||||
reconciliationOperationDataList.add(buildOneElement(transaction));
|
||||
}
|
||||
}
|
||||
return new ReconciliationData(reconciliationOperationDataList, closeDay);
|
||||
}
|
||||
|
||||
private ReconciliationOperationData buildOneElement(Transaction transaction) {
|
||||
return new ReconciliationOperationData.Builder(
|
||||
transaction.getAmount(),
|
||||
transaction.getMaskedPan(),
|
||||
CurrencyEnum.getCurrencyEnum(Integer.parseInt(transaction.getCurrency3DigitCode())),
|
||||
getPrinterOperationType(transaction.getTransactionType()),
|
||||
transaction.getExternalTerminalId(), transaction.getPiDataType().getTypePIData().equals(TransactionMoneyInteractionType.CASH.toString()))
|
||||
.cardType(transaction.getCardType())
|
||||
.date(transaction.getTransactionDate())
|
||||
.checkId(transaction.getCheck())
|
||||
.externalMerchantId(transaction.getExternalMerchantId())
|
||||
.externalMerchantName(transaction.getExternalMerchantName())
|
||||
.externalMerchantAdress(transaction.getExternalMerchantAddress())
|
||||
.authorizationCode(transaction.getAuthorizationCode())
|
||||
.refNumber(transaction.getRrn())
|
||||
.time(transaction.getTransactionTime())
|
||||
.build();
|
||||
}
|
||||
|
||||
private TransactionType getPrinterOperationType(String type) {
|
||||
if (type == null) return null;
|
||||
switch (type.toUpperCase()) {
|
||||
case "PAYMENT":
|
||||
return TransactionType.INCOMING;
|
||||
case "REFUND":
|
||||
return TransactionType.INCOMING_REFUND;
|
||||
case "REVERSAL":
|
||||
return TransactionType.REVERSAL;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isErrorStatus(Transaction transaction) {
|
||||
if (transaction == null || transaction.getOperationStatus() == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (transaction.getOperationStatus()) {
|
||||
case COMPLETED:
|
||||
case REVERSED:
|
||||
case READER_TIMEOUT:
|
||||
return false;
|
||||
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.ResendReceiptCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
|
||||
class ResendReceiptCallbackHandlerImpl implements ResendReceiptCallbackHandler<Result>,
|
||||
GetTransactionsListCallbackHandler<Result> {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
ResendReceiptCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose transaction");
|
||||
|
||||
Spinner transactionListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
Transaction transaction = (Transaction) transactionListSpinner.getSelectedItem();
|
||||
activity.getClientInterface().getTransactionManager().resendReceipt(this, transaction, "vsa@centercorptech.net", null);
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,153 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.ReversalCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
|
||||
public class ReversalCallbackHandlerImpl implements ReversalCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public ReversalCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionSelectionRequested(List<Transaction> transactionList) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose transaction");
|
||||
|
||||
Spinner transactionListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface().getTransactionManager().selectTransaction((Transaction) transactionListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardShortPanRequested() {
|
||||
activity.getClientInterface().getTransactionManager().setCardShortPan("0069", 20, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, newStatus.name(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
activity.getClientInterface().getTransactionManager().sendTransactionUserData(null, "phone", "email");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSelectTransaction() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List<String> list) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,308 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.LastReversalCardPaymentCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.data.ResultType;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.MessageButtonData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class RevertCurrentOperationCallbackHandlerImpl implements LastReversalCardPaymentCallbackHandler<Result> {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public RevertCurrentOperationCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String deviceName) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) {
|
||||
if (reconnectAvailable) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().tryToReconnectAndRepeatLast());
|
||||
builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List deviceList) {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, deviceList);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.selectCardReader(deviceListSpinner.getSelectedItem().toString());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkFlowDataRequested() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredReversal(String description, ResultCode resultCode) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredApplicationSelection(List applicationOfList) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult printerResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationRequiredToProcess() {
|
||||
Timber.d("Reconciliation required!!!");
|
||||
activity.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationCompleted(Result result) {
|
||||
Timber.d("Reconciliation completed!!!");
|
||||
if (result.getResultType() == ResultType.SUCCESSFUL) {
|
||||
activity.getClientInterface().getTransactionManager().continueTransactionAfterReconciliation();
|
||||
} else {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Reconciliation failed " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionAmountRequested() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataRequested() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List deviceList) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(activity);
|
||||
ArrayAdapter<Reader> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item, new ArrayList<>(deviceList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
activity.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
activity.runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List printerList) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
activity.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconnectNeededToProcess() {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> activity.getClientInterface().getTransactionManager().tryToReconnectToCardReader());
|
||||
builder.setNegativeButton("No", (dialog, which) -> activity.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongTerminal() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityUpdateUiThread() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreatePinPadButtons() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateElementPin(int i) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCloseKeyboard() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.external.transactions.ScanBarCodeCallbackHandler;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
|
||||
public class ScanBarCodeCallbackHandlerImpl implements ScanBarCodeCallbackHandler {
|
||||
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public ScanBarCodeCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleteBarCode(String result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String s) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean b, String s) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List list) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List list) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import ru.m4bank.mpos.library.external.configuration.SendRegisterRequestCallbackHandler;
|
||||
import ru.m4bank.mpos.service.result.SendRegisterRequestExternalResult;
|
||||
|
||||
public class SendRegisterRequestCallbackHandlerImpl implements SendRegisterRequestCallbackHandler {
|
||||
private final M4BankActivity activity;
|
||||
|
||||
public SendRegisterRequestCallbackHandlerImpl(M4BankActivity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(SendRegisterRequestExternalResult result) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, result.getResultType() + " " + result.getRequestCode() + " " + result.getStatus(), Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import ru.m4bank.mpos.library.external.SessionExpiringCallbackHandler;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class SessionExpiringCallbackHandlerImpl implements SessionExpiringCallbackHandler {
|
||||
@Override
|
||||
public void onSessionExpired() {
|
||||
Timber.w("SESSION EXPIRED!");
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
public enum TerminalKeyTypeMpos {
|
||||
Tmp, Tpk, Tak
|
||||
}
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
package kz.com.aman.kassa.bank;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ru.m4bank.mpos.library.M4BankMposClientInterfaceFacade;
|
||||
import ru.m4bank.mpos.library.external.transactions.XReportCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.data.ResultType;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.hardware.printer.dto.data.PrintingType;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.external.ExternalReconciliationData;
|
||||
|
||||
public class XReportCallbackHandlerImpl implements XReportCallbackHandler<Result> {
|
||||
|
||||
private PrintingType reportType;
|
||||
private M4BankActivity activity;
|
||||
private M4BankMposClientInterfaceFacade clientInterface;
|
||||
|
||||
public XReportCallbackHandlerImpl(M4BankMposClientInterfaceFacade clientInterface, PrintingType reportType, M4BankActivity activity) {
|
||||
this.reportType = reportType;
|
||||
this.activity = activity;
|
||||
this.clientInterface = clientInterface;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> list) {
|
||||
if(list == null || list.isEmpty()) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "list of transaction is empty", Toast.LENGTH_SHORT).show());
|
||||
} else {
|
||||
ExternalReconciliationData data = new ExternalReconciliationData.Builder()
|
||||
.reconciliationData(new ReconciliationPrinterDataBuilder().build(list, false))
|
||||
.build();
|
||||
printReport(clientInterface, reportType, data);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
if(result == null || result.getResultType() != ResultType.SUCCESSFUL) {
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}else if(result.getResultType() == ResultType.SUCCESSFUL){
|
||||
// if code is successful and list is empty -> reconciliation is already done
|
||||
activity.runOnUiThread(() -> Toast.makeText(activity, "list of transaction is empty", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int i) {
|
||||
|
||||
}
|
||||
|
||||
private void printReport(M4BankMposClientInterfaceFacade clientInterface, PrintingType reportType, ExternalReconciliationData data) {
|
||||
clientInterface.cancel();
|
||||
if(reportType == PrintingType.RECONCILIATION_FULL_REPORT) {
|
||||
clientInterface.getPrinterManager().printReconciliationReportFull(new PrintingCallbackHandlerImpl(activity), data);
|
||||
} else {
|
||||
clientInterface.getPrinterManager().printReconciliationReportShort(new PrintingCallbackHandlerImpl(activity), data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,50 +0,0 @@
|
|||
package kz.com.aman.kassa.bank.builders;
|
||||
|
||||
import javax.net.ssl.HostnameVerifier;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.SSLSocketFactory;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
|
||||
import ru.m4bank.mpos.service.network.retrofit.SSLConfiguration;
|
||||
|
||||
public class SslConfigurationBuilder {
|
||||
public static SSLConfiguration buildAllTrustConfiguration(String serverAddress) {
|
||||
X509TrustManager[] trustManager = getTrustManagers();
|
||||
return new SSLConfiguration.Builder()
|
||||
.trustManager(trustManager[0])
|
||||
.hostnameVerifier(getHostnameVerifier(serverAddress))
|
||||
.socketFactory(getSSLSocketFactory(trustManager))
|
||||
.build();
|
||||
}
|
||||
|
||||
private static HostnameVerifier getHostnameVerifier(String serverUrl) {
|
||||
return (hostname, session) -> true;
|
||||
}
|
||||
|
||||
private static X509TrustManager[] getTrustManagers() {
|
||||
return new X509TrustManager[]{new X509TrustManager() {
|
||||
@Override
|
||||
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
|
||||
return new java.security.cert.X509Certificate[]{};
|
||||
}
|
||||
}};
|
||||
}
|
||||
|
||||
private static SSLSocketFactory getSSLSocketFactory(X509TrustManager[] trustManager) {
|
||||
try {
|
||||
final SSLContext sslContext = SSLContext.getInstance("SSL");
|
||||
sslContext.init(null, trustManager, new java.security.SecureRandom());
|
||||
return sslContext.getSocketFactory();
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,128 +0,0 @@
|
|||
package kz.com.aman.kassa.bank.gui;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Button;
|
||||
|
||||
import kz.com.aman.kassa.R;
|
||||
import ru.m4bank.mpos.service.transactions.data.MessageButtonData;
|
||||
|
||||
|
||||
public class CustomKeyBoardDilalog {
|
||||
|
||||
Button btnb1, btnb2, btnb3, btnb4, btnb5, btnb6, btnb7, btnb8, btnb9, btnb0,
|
||||
btncancel, btnconfirm, btnclean;
|
||||
View view;
|
||||
Dialog dialog;
|
||||
|
||||
public void createDialog(Context context) {
|
||||
|
||||
dialog = new Dialog(context);
|
||||
view = LayoutInflater.from(context).inflate(R.layout.layout_pin, null);
|
||||
btnb1 = (Button) view.findViewById(R.id.button1);
|
||||
btnb2 = (Button) view.findViewById(R.id.button2);
|
||||
btnb3 = (Button) view.findViewById(R.id.button3);
|
||||
btnb4 = (Button) view.findViewById(R.id.button4);
|
||||
btnb5 = (Button) view.findViewById(R.id.button5);
|
||||
btnb6 = (Button) view.findViewById(R.id.button6);
|
||||
btnb7 = (Button) view.findViewById(R.id.button7);
|
||||
btnb8 = (Button) view.findViewById(R.id.button8);
|
||||
btnb9 = (Button) view.findViewById(R.id.button9);
|
||||
btnb0 = (Button) view.findViewById(R.id.button0);
|
||||
btncancel = (Button) view.findViewById(R.id.buttoncan);
|
||||
btnconfirm = (Button) view.findViewById(R.id.buttonconfirm);
|
||||
btnclean = (Button) view.findViewById(R.id.buttonclean);
|
||||
Window dialogWindow = dialog.getWindow();
|
||||
dialogWindow.setGravity( Gravity.BOTTOM);
|
||||
|
||||
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
|
||||
lp.x = 0;
|
||||
lp.y = 0;
|
||||
view.measure(0, 0);
|
||||
lp.height = view.getMeasuredHeight();
|
||||
lp.alpha = 9f;
|
||||
dialogWindow.setAttributes(lp);
|
||||
dialog.setContentView(view);
|
||||
}
|
||||
|
||||
public void show(Activity activity) {
|
||||
if (!activity.isFinishing())
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
public void close(Activity activity) {
|
||||
if (!activity.isFinishing() && dialog != null && dialog.isShowing())
|
||||
dialog.dismiss();
|
||||
}
|
||||
|
||||
public void setText(MessageButtonData messageButtonData) {
|
||||
btnb1.setText("" + messageButtonData.getBtnb1());
|
||||
btnb2.setText("" + messageButtonData.getBtnb2());
|
||||
btnb3.setText("" + messageButtonData.getBtnb3());
|
||||
btnb4.setText("" + messageButtonData.getBtnb4());
|
||||
btnb5.setText("" + messageButtonData.getBtnb5());
|
||||
btnb6.setText("" + messageButtonData.getBtnb6());
|
||||
btnb7.setText("" + messageButtonData.getBtnb7());
|
||||
btnb8.setText("" + messageButtonData.getBtnb8());
|
||||
btnb9.setText("" + messageButtonData.getBtnb9());
|
||||
btnb0.setText("" + messageButtonData.getBtnb0());
|
||||
}
|
||||
|
||||
public Button getBtnb1() {
|
||||
return btnb1;
|
||||
}
|
||||
|
||||
public Button getBtnb2() {
|
||||
return btnb2;
|
||||
}
|
||||
|
||||
public Button getBtnb3() {
|
||||
return btnb3;
|
||||
}
|
||||
|
||||
public Button getBtnb4() {
|
||||
return btnb4;
|
||||
}
|
||||
|
||||
public Button getBtnb5() {
|
||||
return btnb5;
|
||||
}
|
||||
|
||||
public Button getBtnb6() {
|
||||
return btnb6;
|
||||
}
|
||||
|
||||
public Button getBtnb7() {
|
||||
return btnb7;
|
||||
}
|
||||
|
||||
public Button getBtnb8() {
|
||||
return btnb8;
|
||||
}
|
||||
|
||||
public Button getBtnb9() {
|
||||
return btnb9;
|
||||
}
|
||||
|
||||
public Button getBtnb0() {
|
||||
return btnb0;
|
||||
}
|
||||
|
||||
public Button getBtncancel() {
|
||||
return btncancel;
|
||||
}
|
||||
|
||||
public Button getBtnconfirm() {
|
||||
return btnconfirm;
|
||||
}
|
||||
|
||||
public Button getBtnclean() {
|
||||
return btnclean;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
package kz.com.aman.kassa.bank.gui;
|
||||
|
||||
/**
|
||||
* Created by pppoo on 27.02.2018.
|
||||
*/
|
||||
|
||||
public interface SelectDialogCallback<ElementType> {
|
||||
void onElementSelected(ElementType element);
|
||||
void onCancelSelection();
|
||||
}
|
||||
|
|
@ -1,66 +0,0 @@
|
|||
package kz.com.aman.kassa.bank.gui;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.view.ViewGroup.LayoutParams;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import kz.com.aman.kassa.R;
|
||||
|
||||
|
||||
public class SelectElementDialog<ElementType> extends Dialog {
|
||||
private Context context;
|
||||
ArrayAdapter<ElementType> listAdapter;
|
||||
private TextView labelTitle;
|
||||
private ListView list;
|
||||
private SelectDialogCallback<ElementType> selectDialogCallback;
|
||||
|
||||
public SelectElementDialog(final Context context, List<ElementType> elements, SelectDialogCallback<ElementType> selectDialogCallback) {
|
||||
super(context);
|
||||
this.context = context;
|
||||
this.selectDialogCallback = selectDialogCallback;
|
||||
setCancelable(false);
|
||||
setCanceledOnTouchOutside(false);
|
||||
init(elements);
|
||||
list.setAdapter(listAdapter);
|
||||
getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
|
||||
|
||||
list.setOnItemClickListener((arg0, arg1, arg2, arg3) -> {
|
||||
ElementType element = (ElementType) arg0.getItemAtPosition(arg2);
|
||||
selectDialogCallback.onElementSelected(element);
|
||||
((Activity) context).runOnUiThread(this::dismiss);
|
||||
});
|
||||
}
|
||||
|
||||
private void init(List<ElementType> elements) {
|
||||
setContentView(R.layout.custom_dialog_list);
|
||||
labelTitle = findViewById(R.id.labelMessage);
|
||||
list = findViewById(R.id.list);
|
||||
listAdapter = new ArrayAdapter<ElementType>(context, R.layout.list_item, R.id.itemView, elements);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
public void setTitle(String text) {
|
||||
if (null != labelTitle)
|
||||
labelTitle.setText(text);
|
||||
}
|
||||
|
||||
public static void showError(Context context, String message) {
|
||||
try {
|
||||
Dialog dialog = new Dialog(context);
|
||||
dialog.setTitle(message);
|
||||
dialog.show();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
package kz.com.aman.kassa.bank.managing;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import static android.content.Context.MODE_PRIVATE;
|
||||
|
||||
public class PreferencesManager {
|
||||
public enum Field {
|
||||
LOGIN("Login"), PASSWORD("Password"), SERVER_URL("ServerUrl");
|
||||
|
||||
private String code;
|
||||
|
||||
Field(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
public static void saveStringField(Context context, Field field, String value) {
|
||||
SharedPreferences preferences = context.getSharedPreferences("preferences", MODE_PRIVATE);
|
||||
SharedPreferences.Editor editor = preferences.edit();
|
||||
editor.putString(field.getCode(), value).apply();
|
||||
}
|
||||
|
||||
public static String loadStringField(Context context, Field field) {
|
||||
return loadStringField(context, field, null);
|
||||
}
|
||||
|
||||
public static String loadStringField(Context context, Field field, String defaultValue) {
|
||||
SharedPreferences preferences = context.getSharedPreferences("preferences", MODE_PRIVATE);
|
||||
return preferences.getString(field.getCode(), defaultValue);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
package kz.com.aman.kassa.bank.permissions;
|
||||
|
||||
public interface PermissionsManager {
|
||||
void checkPermissions(PermissionsCheckResultHandler handler);
|
||||
void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults);
|
||||
|
||||
interface PermissionsCheckResultHandler {
|
||||
void onPermissionsGranted();
|
||||
void onPermissionsDeclined();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
package kz.com.aman.kassa.bank.permissions;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.pm.PackageManager;
|
||||
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
public class PermissionsManagerImpl implements PermissionsManager {
|
||||
private static final int MY_PERMISSIONS_REQUEST = 107;
|
||||
private static final String[] PERMISSIONS_LIST = new String[]{
|
||||
Manifest.permission.READ_PHONE_STATE,
|
||||
Manifest.permission.ACCESS_FINE_LOCATION,
|
||||
Manifest.permission.ACCESS_COARSE_LOCATION,
|
||||
Manifest.permission.CAMERA,
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||
};
|
||||
|
||||
private final Activity activity;
|
||||
private PermissionsCheckResultHandler permissionsCheckResultHandler;
|
||||
|
||||
public PermissionsManagerImpl(Activity activity) {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkPermissions(PermissionsCheckResultHandler permissionsCheckResultHandler) {
|
||||
for (String permission : PERMISSIONS_LIST) {
|
||||
if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
|
||||
this.permissionsCheckResultHandler = permissionsCheckResultHandler;
|
||||
ActivityCompat.requestPermissions(activity, PERMISSIONS_LIST, MY_PERMISSIONS_REQUEST);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
permissionsCheckResultHandler.onPermissionsGranted();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode,
|
||||
String permissions[], int[] grantResults) {
|
||||
switch (requestCode) {
|
||||
case MY_PERMISSIONS_REQUEST: {
|
||||
if (grantResults.length == PERMISSIONS_LIST.length) {
|
||||
if (arePermissionsGranted(grantResults)) {
|
||||
permissionsCheckResultHandler.onPermissionsGranted();
|
||||
} else {
|
||||
permissionsCheckResultHandler.onPermissionsDeclined();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean arePermissionsGranted(int[] grantResults) {
|
||||
boolean access = true;
|
||||
for (int grantResult : grantResults) {
|
||||
if (grantResult != PackageManager.PERMISSION_GRANTED)
|
||||
access = false;
|
||||
}
|
||||
return access;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
package kz.com.aman.kassa.handler;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import kz.com.aman.kassa.MainActivity;
|
||||
import kz.com.aman.kassa.bank.M4BankActivity;
|
||||
import kz.com.aman.kassa.model.AmanDao;
|
||||
import kz.com.aman.kassa.plugins.BankNfcPlugins;
|
||||
import ru.m4bank.mpos.library.external.authorization.AuthorizationCallbackHandler;
|
||||
import ru.m4bank.mpos.service.authorization.network.AuthorizationResponse;
|
||||
import ru.m4bank.mpos.service.commons.data.ResultType;
|
||||
|
||||
|
||||
public class AuthorizationHandlerImpl implements AuthorizationCallbackHandler {
|
||||
private final BankNfcPlugins plugin;
|
||||
private final String login;
|
||||
private final String password;
|
||||
private final MethodChannel.Result result;
|
||||
private final Gson gson = new Gson();
|
||||
|
||||
public AuthorizationHandlerImpl(BankNfcPlugins plugin, MethodChannel.Result result, String login, String password) {
|
||||
this.plugin = plugin;
|
||||
this.login = login;
|
||||
this.password = password;
|
||||
this.result =result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoginAndPasswordRequested() {
|
||||
plugin.getClientInterface().getAuthorizationManager().sendLoginAndPassword(this.login, this.password);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCompleted(ru.m4bank.mpos.service.result.Result result) {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
//Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT).show();
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(ResultType.SUCCESSFUL.equals(result.getResultType()));
|
||||
dao.setMsg(result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()));
|
||||
this.result.success(gson.toJson(dao));
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(ru.m4bank.mpos.service.result.Result result, AuthorizationResponse authorizationResponse) {
|
||||
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
//Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT).show();
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(ResultType.SUCCESSFUL.equals(result.getResultType()));
|
||||
dao.setMsg(result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()));
|
||||
this.result.success(gson.toJson(dao));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1,526 +0,0 @@
|
|||
package kz.com.aman.kassa.handler;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import kz.com.aman.kassa.bank.gui.CustomKeyBoardDilalog;
|
||||
import kz.com.aman.kassa.model.AmanDao;
|
||||
import kz.com.aman.kassa.model.CardData;
|
||||
import kz.com.aman.kassa.plugins.BankNfcPlugins;
|
||||
import ru.m4bank.mpos.library.external.transactions.CardPaymentCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.data.ResultType;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.AdditionalTransactionData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.GoodsData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.VendorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.AccountingSubject;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.printer.enums.TaxRate;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode;
|
||||
import ru.m4bank.mpos.service.hardware.error.AllError;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.TransactionTypeConv;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.ButtonKeyboardDto;
|
||||
import ru.m4bank.mpos.service.transactions.data.MessageButtonData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.VirtualPinKeyboardData;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class CardPaymentHandlerImpl implements CardPaymentCallbackHandler<Result> {
|
||||
private final BankNfcPlugins plugin;
|
||||
private final MethodChannel.Result result;
|
||||
private final Long amount;
|
||||
private CustomKeyBoardDilalog customKeyBoardDilalog;
|
||||
private TransactionTypeConv transactionTypeConv;
|
||||
private final Gson gson = new Gson();
|
||||
|
||||
public CardPaymentHandlerImpl(BankNfcPlugins plugin, MethodChannel.Result result, long amount, TransactionTypeConv type) {
|
||||
this.result = result;
|
||||
this.plugin = plugin;
|
||||
this.amount = amount;
|
||||
customKeyBoardDilalog = new CustomKeyBoardDilalog();
|
||||
transactionTypeConv = type;
|
||||
}
|
||||
|
||||
public CardPaymentHandlerImpl setTransactionTypeConv(TransactionTypeConv transactionTypeConv) {
|
||||
this.transactionTypeConv = transactionTypeConv;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List<String> deviceList) {
|
||||
System.out.println("----->---->---->onDeviceToConnectSelectionRequested");
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(plugin.getActivity());
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, deviceList);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
plugin.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.selectCardReader(deviceListSpinner.getSelectedItem().toString());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
System.out.println("----->---->---->Reader has been received");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
System.out.println("----->---->---->No bounded readers");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List<Reader> deviceList) {
|
||||
System.out.println("----->---->---->onDeviceToUseSelectionRequested");
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
// AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
// builder.setTitle("Choose device");
|
||||
//
|
||||
// Spinner deviceListSpinner = new Spinner(plugin.getActivity());
|
||||
// ArrayAdapter<Reader> adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, new ArrayList<>(deviceList));
|
||||
// adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
// deviceListSpinner.setAdapter(adapter);
|
||||
//
|
||||
// builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
// plugin.getClientInterface()
|
||||
// .getTransactionManager()
|
||||
// .setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem());
|
||||
// dialog.dismiss();
|
||||
// });
|
||||
//
|
||||
// builder.setView(deviceListSpinner);
|
||||
// builder.create().show();
|
||||
|
||||
if (deviceList != null && !deviceList.isEmpty()) {
|
||||
for (Reader reader : deviceList) {
|
||||
String name = reader.toString();
|
||||
System.out.println("name: " + name);
|
||||
if (name.contains("SOFT")) {
|
||||
plugin.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.setCardReaderToUse(reader);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionAmountRequested() {
|
||||
System.out.println("----->---->---->onTransactionAmountRequested");
|
||||
plugin.getClientInterface().getTransactionManager().setTransactionAmount(this.amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataRequested() {
|
||||
System.out.println("----->---->---->onTransactionDataRequested");
|
||||
List<GoodsData> goodsDataList = new ArrayList<>();
|
||||
goodsDataList.add(new GoodsData.Builder()
|
||||
.setOriginalPrice(100000L)
|
||||
.setRealPrice(100000L)
|
||||
.setName("Принтер")
|
||||
.setQuantity(1)
|
||||
.setCode("000001")
|
||||
.setUnits("00")
|
||||
.setDiscount(0L)
|
||||
.setTaxRate(TaxRate.Tax_18)
|
||||
.setExponent(2)
|
||||
.setAccountingSubject(AccountingSubject.PRODUCT)
|
||||
.build());
|
||||
goodsDataList.add(new GoodsData.Builder()
|
||||
.setOriginalPrice(30065L)
|
||||
.setRealPrice(30065L)
|
||||
.setName("Услуга")
|
||||
.setQuantity(3)
|
||||
.setCode("000002")
|
||||
.setUnits("00")
|
||||
.setDiscount(0L)
|
||||
.setTaxRate(TaxRate.Tax_18)
|
||||
.setExponent(2)
|
||||
.setAccountingSubject(AccountingSubject.PRODUCT)
|
||||
.build());
|
||||
|
||||
HashMap<String, String> vendorDescription = new HashMap<>();
|
||||
vendorDescription.put("vendor", "description");
|
||||
vendorDescription.put("vendor1", "description1");
|
||||
vendorDescription.put("vendor2", "description2");
|
||||
vendorDescription.put("vendor3", "description3");
|
||||
VendorData vendorData = new VendorData(vendorDescription);
|
||||
|
||||
AdditionalTransactionData additionalTransactionData = new AdditionalTransactionData.Builder(goodsDataList).vendorData(vendorData).build();
|
||||
plugin.getClientInterface().getTransactionManager().setAdditionalTransactionData(additionalTransactionData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkFlowDataRequested() {
|
||||
System.out.println("----->---->---->WorkFlow requested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
System.out.println("----->---->---->onCompleted");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
System.out.println("----->---->---->onWrongApiCalled");
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
//Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show();
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(false);
|
||||
dao.setMsg("onWrongApiCalled");
|
||||
this.result.success(gson.toJson(dao));
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) {
|
||||
System.out.println("----->---->---->onReceiveCardData");
|
||||
if (shouldConfirmBeManuallyCalled) {
|
||||
plugin.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
//Impossible
|
||||
plugin.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
System.out.println("----->---->---->onTransactionExecutionStatusChanged: " + newStatus.name());
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
if(newStatus!=null && newStatus.equals(TransactionExecutionStatus.TAP_CARD)) {
|
||||
Toast.makeText(plugin.getActivity(), "Приложите карту", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
if (transactionErrorData.getError() != null) {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), transactionErrorData.getError().getDescription(), Toast.LENGTH_LONG).show());
|
||||
} else {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(false);
|
||||
dao.setMsg(String.format("%s", errorHandler.getFinalDescription()));
|
||||
this.result.success(gson.toJson(dao));
|
||||
//Toast.makeText(plugin.getActivity(), String.format("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getFinalDescription()), Toast.LENGTH_LONG).show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
System.out.printf("----->---->---->onErrorWithPossibilityToRetry: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription());
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), String.format("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getFinalDescription()), Toast.LENGTH_LONG).show());
|
||||
plugin.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
System.out.println("----->---->---->onTransactionDataReceivedError");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
System.out.println("----->---->---->onUserInformationRequested");
|
||||
if (transactionTypeConv != TransactionTypeConv.CANCEL) {
|
||||
plugin.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.sendTransactionUserData("signature", "phone", "vsa@centercorptech.net");
|
||||
} else {
|
||||
onTransactionCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
System.out.println("----->---->---->onTransactionDataReceived");
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
CardData cardData = new CardData();
|
||||
cardData.setCardExpiryDate(data.getCardExpiryDate());
|
||||
cardData.setCardNumber(data.getCardNumber());
|
||||
cardData.setCardPaymentSystemType(data.getCardPaymentSystemType());
|
||||
cardData.setTransactionNumber(data.getTransactionNumber());
|
||||
cardData.setTransactionType(data.getTransactionType().getCode());
|
||||
cardData.setAuthorizationCode(data.getAuthorizationCode());
|
||||
AmanDao<CardData> dao = new AmanDao<>();
|
||||
dao.setSuccess(true);
|
||||
dao.setData(cardData);
|
||||
this.result.success(gson.toJson(dao));
|
||||
Toast.makeText(plugin.getActivity(), "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
System.out.println("----->---->---->onTransactionCompleted");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredHostAddress() {
|
||||
System.out.println("----->---->---->onRequiredHostAddress");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Set Host Address", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
plugin.getClientInterface().getTransactionManager().setHostAddress("213.79.122.128", "8011");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) {
|
||||
System.out.println("----->---->---->onDisconnectedEventReceivedOrCanNotEstablishConnection");
|
||||
if (reconnectAvailable) {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> plugin.getClientInterface().tryToReconnectAndRepeatLast());
|
||||
builder.setNegativeButton("No", (dialog, which) -> plugin.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String deviceName) {
|
||||
System.out.printf("----->---->---->Connecting process started: %s\n", deviceName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconnectNeededToProcess() {
|
||||
System.out.println("----->---->---->onReconnectNeededToProcess");
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> plugin.getClientInterface().getTransactionManager().tryToReconnectToCardReader());
|
||||
builder.setNegativeButton("No", (dialog, which) -> plugin.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationRequiredToProcess() {
|
||||
System.out.println("----->---->---->onReconciliationRequiredToProcess");
|
||||
System.out.println("----->---->---->Reconciliation required!!!");
|
||||
plugin.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationCompleted(Result result) {
|
||||
System.out.println("----->---->---->onReconciliationCompleted");
|
||||
System.out.println("----->---->---->Reconciliation completed!!!");
|
||||
if (result.getResultType() == ResultType.SUCCESSFUL) {
|
||||
plugin.getClientInterface().getTransactionManager().continueTransactionAfterReconciliation();
|
||||
} else {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Reconciliation failed " + result.getDescription(), Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
System.out.println("----->---->---->notAuthorized");
|
||||
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(false);
|
||||
dao.setMsg("notAuthorized");
|
||||
this.result.success(gson.toJson(dao));
|
||||
Toast.makeText(plugin.getActivity(), "notAuthorized", Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
System.out.println("----->---->---->onTransactionDetailsReceived");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Transaction details received", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
System.out.println("----->---->---->onSuccessStatusTransaction");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
System.out.println("----->---->---->onErrorStatusTransaction");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
System.out.println("----->---->---->onRepeat");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
System.out.println("----->---->---->onRequestedReportZ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
||||
System.out.println("----->---->---->onCompletedPrinting");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
System.out.println("----->---->---->onStatusFiscalModule");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
System.out.println("----->---->---->onPrinterForRegistrationGettingCompleted");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
System.out.println("----->---->---->onNoBoundedPrinterFound");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List<String> printerList) {
|
||||
System.out.println("----->---->---->onPrinterToUseSelectionRequested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredReversal(String description, ResultCode resultCode) {
|
||||
System.out.printf("----->---->---->onRequiredReversal: %s, resultCode: %s\n", description, resultCode.name());
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setMessage("Revert last of operation?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> plugin.getClientInterface().getTransactionManager().revertCurrentOperation(new RevertCurrentOperationHandlerImpl(plugin)));
|
||||
builder.setNegativeButton("No", (dialog, which) -> plugin.getClientInterface().getTransactionManager().clearLastTransactionInformation());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredApplicationSelection(List<ApplicationIdConv> list) {
|
||||
System.out.println("----->---->---->onRequiredApplicationSelection");
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setTitle("Choose application identifier");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(plugin.getActivity());
|
||||
ArrayAdapter<ApplicationIdConv> adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, list);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
plugin.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.setTransactionApplicationIdentifier((ApplicationIdConv) deviceListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivityUpdateUiThread() {
|
||||
System.out.println("----->---->---->onActivityUpdateUiThread");
|
||||
plugin.getClientInterface().getTransactionManager().addPinpadClickListener(plugin.getActivity());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreatePinPadButtons() {
|
||||
System.out.println("----->---->---->onCreatePinPadButtons");
|
||||
customKeyBoardDilalog.createDialog(plugin.getActivity());
|
||||
customKeyBoardDilalog.show(plugin.getActivity());
|
||||
ButtonKeyboardDto buttonKeyboardDto = new ButtonKeyboardDto.Build(
|
||||
customKeyBoardDilalog.getBtnb1(),
|
||||
customKeyBoardDilalog.getBtnb2(),
|
||||
customKeyBoardDilalog.getBtnb3(),
|
||||
customKeyBoardDilalog.getBtnb4(),
|
||||
customKeyBoardDilalog.getBtnb5(),
|
||||
customKeyBoardDilalog.getBtnb6(),
|
||||
customKeyBoardDilalog.getBtnb7(),
|
||||
customKeyBoardDilalog.getBtnb8(),
|
||||
customKeyBoardDilalog.getBtnb9(),
|
||||
customKeyBoardDilalog.getBtnb0(),
|
||||
customKeyBoardDilalog.getBtncancel(),
|
||||
customKeyBoardDilalog.getBtnconfirm(),
|
||||
customKeyBoardDilalog.getBtnclean(),
|
||||
plugin.getActivity().getWindowManager().getDefaultDisplay().getRotation()
|
||||
).build();
|
||||
plugin.getClientInterface().getTransactionManager().addPinPadButtons(buttonKeyboardDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) {
|
||||
System.out.println("----->---->---->onShowPinPadKeyBoard");
|
||||
customKeyBoardDilalog.setText(messageButtonData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateElementPin(int count) {
|
||||
System.out.println("----->---->---->onUpdateElementPin");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "count = " + count, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCloseKeyboard() {
|
||||
System.out.println("----->---->---->onCloseKeyboard");
|
||||
customKeyBoardDilalog.close(plugin.getActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) {
|
||||
//TODO FIX
|
||||
// plugin.getActivity().showSelectStyleDialog(additionalData ->
|
||||
// plugin.getClientInterface().getTransactionManager().addVirtualPinKeyboardData(additionalData));
|
||||
}
|
||||
|
||||
public interface SelectStyleListener {
|
||||
void onSelectStyle(VirtualPinKeyboardData virtualPinKeyboardData);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,431 +0,0 @@
|
|||
package kz.com.aman.kassa.handler;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import kz.com.aman.kassa.MainActivity;
|
||||
import kz.com.aman.kassa.bank.M4BankActivity;
|
||||
import kz.com.aman.kassa.bank.gui.CustomKeyBoardDilalog;
|
||||
import kz.com.aman.kassa.model.AmanDao;
|
||||
import kz.com.aman.kassa.model.CardData;
|
||||
import kz.com.aman.kassa.plugins.BankNfcPlugins;
|
||||
import ru.m4bank.mpos.library.external.transactions.EasyCardRefundCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.data.ResultType;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.PrinterBaseData;
|
||||
import ru.m4bank.mpos.service.data.PrinterErrorData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.transaction.RefundType;
|
||||
import ru.m4bank.mpos.service.hardware.error.AllError;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.ApplicationIdConv;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.ButtonKeyboardDto;
|
||||
import ru.m4bank.mpos.service.transactions.data.MessageButtonData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class CardRefundAmanHandlerImpl implements EasyCardRefundCallbackHandler<Result>, GetTransactionsListCallbackHandler<Result> {
|
||||
|
||||
private final BankNfcPlugins plugin;
|
||||
private final MethodChannel.Result result;
|
||||
private final Integer transactionNumber;
|
||||
private String authorizationCode;
|
||||
private final Gson gson = new Gson();
|
||||
private Transaction transaction;
|
||||
|
||||
private CustomKeyBoardDilalog customKeyBoardDilalog;
|
||||
|
||||
public CardRefundAmanHandlerImpl(BankNfcPlugins plugin , MethodChannel.Result result, Integer transactionNumber, String authorizationCode,Transaction transaction) {
|
||||
this.plugin = plugin;
|
||||
this.result = result;
|
||||
this.transactionNumber = transactionNumber;
|
||||
this.authorizationCode = authorizationCode;
|
||||
this.transaction = transaction;
|
||||
customKeyBoardDilalog = new CustomKeyBoardDilalog();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
Timber.d("Reader has been received");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
Timber.d("No bounded readers");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List<Reader> deviceList) {
|
||||
// Timber.d("onDeviceToUseSelectionRequested");
|
||||
// AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
// builder.setTitle("Choose device");
|
||||
//
|
||||
// Spinner deviceListSpinner = new Spinner(plugin.getActivity());
|
||||
// ArrayAdapter<Reader> adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, new ArrayList<>(deviceList));
|
||||
// adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
// deviceListSpinner.setAdapter(adapter);
|
||||
//
|
||||
// builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
// plugin.getClientInterface().getTransactionManager().setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem());
|
||||
// dialog.dismiss();
|
||||
// });
|
||||
//
|
||||
// builder.setView(deviceListSpinner);
|
||||
// plugin.getActivity().runOnUiThread(() -> builder.create().show());
|
||||
|
||||
System.out.println("----->---->---->onDeviceToUseSelectionRequested");
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
if (deviceList != null && !deviceList.isEmpty()) {
|
||||
for (Reader reader : deviceList) {
|
||||
String name = reader.toString();
|
||||
System.out.println("name: " + name);
|
||||
if (name.contains("SOFT")) {
|
||||
plugin.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.setCardReaderToUse(reader);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List<String> deviceList) {
|
||||
Timber.d("onDeviceToConnectSelectionRequested");
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(plugin.getActivity());
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, deviceList);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
plugin.getClientInterface().getTransactionManager().selectCardReader(deviceListSpinner.getSelectedItem().toString());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
plugin.getActivity().runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
Timber.d("onCompleted");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()),
|
||||
Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
System.out.println("----->---->---->onWrongApiCalled");
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
//Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show();
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(false);
|
||||
dao.setMsg("Данная транзакция уже отменена или ее невозможно отменить через данный функционал");
|
||||
this.result.success(gson.toJson(dao));
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) {
|
||||
System.out.println("----->---->---->onReceiveCardData");
|
||||
if (shouldConfirmBeManuallyCalled) {
|
||||
plugin.getClientInterface().getTransactionManager().processOnlineTransaction(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredReversal(String description, ResultCode resultCode) {
|
||||
Timber.d("onRequiredReversal: %s, resultCode: %s", description, resultCode.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredApplicationSelection(List<ApplicationIdConv> list) {
|
||||
Timber.d("onRequiredApplicationSelection");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
System.out.println("----->---->---->onTransactionExecutionStatusChanged: " + newStatus.name());
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
if(newStatus!=null && newStatus.equals(TransactionExecutionStatus.TAP_CARD)) {
|
||||
Toast.makeText(plugin.getActivity(), "Приложите карту", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
if (transactionErrorData.getError() != null) {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), transactionErrorData.getError().getDescription(), Toast.LENGTH_LONG).show());
|
||||
} else {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(false);
|
||||
dao.setMsg(String.format("%s", errorHandler.getFinalDescription()));
|
||||
this.result.success(gson.toJson(dao));
|
||||
//Toast.makeText(plugin.getActivity(), String.format("onError: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getFinalDescription()), Toast.LENGTH_LONG).show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
Timber.d("onErrorWithPossibilityToRetry: %s, description: %s", ((AllError) errorHandler).name(), errorHandler.getDescription());
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), errorHandler.getFinalDescription(), Toast.LENGTH_LONG).show());
|
||||
plugin.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
Timber.d("onTransactionDataReceivedError");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
Timber.d("onUserInformationRequested");
|
||||
plugin.getClientInterface().getTransactionManager().sendTransactionUserData("signature", "phone", "email");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
System.out.println("----->---->---->onTransactionDataReceived");
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
CardData cardData = new CardData();
|
||||
cardData.setCardExpiryDate(data.getCardExpiryDate());
|
||||
cardData.setCardNumber(data.getCardNumber());
|
||||
cardData.setCardPaymentSystemType(data.getCardPaymentSystemType());
|
||||
cardData.setTransactionNumber(data.getTransactionNumber());
|
||||
cardData.setTransactionType(data.getTransactionType().getCode());
|
||||
AmanDao<CardData> dao = new AmanDao<>();
|
||||
dao.setSuccess(true);
|
||||
dao.setData(cardData);
|
||||
this.result.success(gson.toJson(dao));
|
||||
Toast.makeText(plugin.getActivity(), "Transaction data has been received", Toast.LENGTH_LONG)
|
||||
.show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
Timber.d("onTransactionCompleted");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Operation has been successfully completed", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) {
|
||||
Timber.d("onDisconnectedEventReceivedOrCanNotEstablishConnection");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String name) {
|
||||
Timber.d("onConnectingProcessStarted: %s", name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconnectNeededToProcess() {
|
||||
Timber.d("onReconnectNeededToProcess");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationRequiredToProcess() {
|
||||
Timber.d("onReconciliationRequiredToProcess");
|
||||
Timber.d("Reconciliation required!!!");
|
||||
plugin.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationCompleted(Result result) {
|
||||
Timber.d("onReconciliationCompleted");
|
||||
Timber.d("Reconciliation completed!!!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
Timber.d("notAuthorized");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "notAuthorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
Timber.d("onRepeat");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
Timber.d("onRequestedReportZ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult<PrinterErrorData, PrinterBaseData> printerErrorDataPrinterBaseDataPrinterResult) {
|
||||
Timber.d("onCompletedPrinting");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
Timber.d("onStatusFiscalModule");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
Timber.d("onPrinterForRegistrationGettingCompleted");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
Timber.d("onNoBoundedPrinterFound");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List<String> printerList) {
|
||||
Timber.d("onPrinterToUseSelectionRequested");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefundDataRequested() {
|
||||
Timber.d("onRefundDataRequested");
|
||||
plugin.getClientInterface().getTransactionManager().setRefundData(transaction, transaction.getAmount(), RefundType.General);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
// Timber.d("onTransactionsListReceived");
|
||||
// AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
// builder.setTitle("Choose transaction");
|
||||
//
|
||||
// Spinner transactionListSpinner = new Spinner(plugin.getActivity());
|
||||
// ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
// adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
// transactionListSpinner.setAdapter(adapter);
|
||||
//
|
||||
// builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
// transaction = (Transaction) transactionListSpinner.getSelectedItem();
|
||||
// plugin.getClientInterface().getTransactionManager().makeCardRefund(this);
|
||||
// dialog.dismiss();
|
||||
// });
|
||||
//
|
||||
// builder.setView(transactionListSpinner);
|
||||
// plugin.getActivity().runOnUiThread(() -> builder.create().show());
|
||||
this.transaction = null;
|
||||
this.plugin.setTransaction(null);
|
||||
for(Transaction transaction : transactionList){
|
||||
if(this.authorizationCode.equalsIgnoreCase(transaction.getAuthorizationCode())
|
||||
&& transactionNumber.equals(transaction.getTransactionNumber())
|
||||
&& transaction.getTransactionType().equalsIgnoreCase("PAYMENT")) {
|
||||
// System.out.println("getCheck:"+ transaction.getCheck());
|
||||
// System.out.println("getCheckNumber:"+ transaction.getCheckNumber());
|
||||
// System.out.println("getAmount:"+ transaction.getAmount());
|
||||
// System.out.println("getCardHolderName:"+ transaction.getCardHolderName());
|
||||
// System.out.println("getCardType:"+ transaction.getCardType());
|
||||
// System.out.println("getPrinterCheckNumber:"+ transaction.getPrinterCheckNumber());
|
||||
// System.out.println("getTransactionNumber:"+ transaction.getTransactionNumber());
|
||||
// System.out.println("getAdditionalAuthorizationCode:"+ transaction.getAdditionalAuthorizationCode());
|
||||
// System.out.println("getAuthorizationCode:"+ transaction.getAuthorizationCode());
|
||||
// System.out.println("getCardExpiryDate:"+ transaction.getCardExpiryDate());
|
||||
// System.out.println("getTransactionType:"+ transaction.getTransactionType());
|
||||
// System.out.println("getTransactionDate:"+ transaction.getTransactionDate());
|
||||
this.transaction = transaction;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(this.transaction !=null );
|
||||
this.plugin.setTransaction(this.transaction);
|
||||
dao.setMsg(this.transaction == null ? "Транзакция не может быть отозвана т.к. все операции оп ней закрыты" : null);
|
||||
this.result.success(gson.toJson(dao));
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityUpdateUiThread() {
|
||||
Timber.d("onActivityUpdateUiThread");
|
||||
plugin.getClientInterface().getTransactionManager().addPinpadClickListener(plugin.getActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreatePinPadButtons() {
|
||||
Timber.d("onCreatePinPadButtons");
|
||||
customKeyBoardDilalog.createDialog(plugin.getActivity());
|
||||
customKeyBoardDilalog.show(plugin.getActivity());
|
||||
ButtonKeyboardDto buttonKeyboardDto = new ButtonKeyboardDto.Build(
|
||||
customKeyBoardDilalog.getBtnb1(),
|
||||
customKeyBoardDilalog.getBtnb2(),
|
||||
customKeyBoardDilalog.getBtnb3(),
|
||||
customKeyBoardDilalog.getBtnb4(),
|
||||
customKeyBoardDilalog.getBtnb5(),
|
||||
customKeyBoardDilalog.getBtnb6(),
|
||||
customKeyBoardDilalog.getBtnb7(),
|
||||
customKeyBoardDilalog.getBtnb8(),
|
||||
customKeyBoardDilalog.getBtnb9(),
|
||||
customKeyBoardDilalog.getBtnb0(),
|
||||
customKeyBoardDilalog.getBtncancel(),
|
||||
customKeyBoardDilalog.getBtnconfirm(),
|
||||
customKeyBoardDilalog.getBtnclean(),
|
||||
plugin.getActivity().getWindowManager().getDefaultDisplay().getRotation()
|
||||
).build();
|
||||
plugin.getClientInterface().getTransactionManager().addPinPadButtons(buttonKeyboardDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) {
|
||||
Timber.d("onShowPinPadKeyBoard");
|
||||
customKeyBoardDilalog.setText(messageButtonData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateElementPin(int count) {
|
||||
Timber.d("onUpdateElementPin");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "count = " + count, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCloseKeyboard() {
|
||||
Timber.d("onCloseKeyboard");
|
||||
customKeyBoardDilalog.close(plugin.getActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) {
|
||||
// activity.showSelectStyleDialog(additionalData ->
|
||||
// plugin.getClientInterface().getTransactionManager().addVirtualPinKeyboardData(additionalData));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredHostAddress() {
|
||||
Timber.d("onRequiredHostAddress");
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Set Host Address", Toast.LENGTH_LONG)
|
||||
.show());
|
||||
plugin.getClientInterface().getTransactionManager().setHostAddress("213.79.122.128", "8011");
|
||||
}
|
||||
}
|
||||
|
|
@ -1,90 +0,0 @@
|
|||
package kz.com.aman.kassa.handler;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.List;
|
||||
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import kz.com.aman.kassa.bank.M4BankActivity;
|
||||
import kz.com.aman.kassa.model.AmanDao;
|
||||
import kz.com.aman.kassa.model.TransactionDao;
|
||||
import kz.com.aman.kassa.plugins.BankNfcPlugins;
|
||||
import ru.m4bank.mpos.library.external.transactions.CloseDayCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.data.ResultType;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.handling.result.CloseDayResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.network.closeday.CloseDayResponseInfo;
|
||||
|
||||
//import com.landicorp.uns.result;
|
||||
|
||||
|
||||
public class CloseDayHandlerImpl implements CloseDayCallbackHandler<Result> {
|
||||
private final BankNfcPlugins plugin;
|
||||
private final MethodChannel.Result result;
|
||||
private final Gson gson = new Gson();
|
||||
final SimpleDateFormat sdfDart = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
public CloseDayHandlerImpl(BankNfcPlugins plugin, MethodChannel.Result result) {
|
||||
this.plugin = plugin;
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList, List<CloseDayResponseInfo> list1) {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AmanDao<TransactionDao> dao = new AmanDao<>();
|
||||
dao.setSuccess(true);
|
||||
dao.setMsg("list");
|
||||
for(Transaction transaction: transactionList){
|
||||
TransactionDao transactionDao = new TransactionDao();
|
||||
transactionDao.setAmount(transaction.getAmount());
|
||||
transactionDao.setCardExpireDate(transaction.getCardExpiryDate());
|
||||
transactionDao.setCardNumber(transaction.getMaskedPan());
|
||||
transactionDao.setCardType(transaction.getCardType());
|
||||
transactionDao.setTransactionType(transaction.getTransactionType());
|
||||
transactionDao.setDate(sdfDart.format(transaction.getDate()));
|
||||
dao.getRows().add(transactionDao);
|
||||
}
|
||||
this.result.success(gson.toJson(dao));
|
||||
// Toast.makeText(plugin.getActivity(), "На закрытие дня: - " + transactionList, Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(CloseDayResult closeDayResult) {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(ResultType.SUCCESSFUL.equals(closeDayResult.getResultType()));
|
||||
dao.setMsg((closeDayResult.getDescription() == null ? "null" : closeDayResult.getDescription()));
|
||||
this.result.success(gson.toJson(dao));
|
||||
Toast.makeText(plugin.getActivity(), closeDayResult.getResultType() + " " + (closeDayResult.getDescription() == null ? "" : closeDayResult.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
package kz.com.aman.kassa.handler;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import io.flutter.plugin.common.MethodChannel;
|
||||
import kz.com.aman.kassa.MainActivity;
|
||||
import kz.com.aman.kassa.model.AmanDao;
|
||||
import ru.m4bank.mpos.library.external.configuration.CheckConnectionCallbackHandler;
|
||||
import ru.m4bank.mpos.service.result.CheckConnectionExternalResult;
|
||||
|
||||
public class ConnectionCheckHandlerImpl implements CheckConnectionCallbackHandler {
|
||||
private final Gson gson = new Gson();
|
||||
private final MainActivity activity;
|
||||
private final MethodChannel.Result result;
|
||||
|
||||
public ConnectionCheckHandlerImpl(MainActivity activity, MethodChannel.Result result) {
|
||||
this.activity = activity;
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(CheckConnectionExternalResult result) {
|
||||
activity.runOnUiThread(() -> {
|
||||
//Toast.makeText(activity, result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()) + " " + result.isOnlineRegistration(), Toast.LENGTH_SHORT).show();
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(true);
|
||||
dao.setMsg("OK");
|
||||
this.result.success(gson.toJson(dao));
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
activity.runOnUiThread(() -> {
|
||||
//Toast.makeText(activity, "Wrong method has been called", Toast.LENGTH_SHORT).show();
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(false);
|
||||
dao.setMsg("error");
|
||||
this.result.success(gson.toJson(dao));
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,311 +0,0 @@
|
|||
package kz.com.aman.kassa.handler;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import kz.com.aman.kassa.MainActivity;
|
||||
import kz.com.aman.kassa.bank.M4BankActivity;
|
||||
import kz.com.aman.kassa.plugins.BankNfcPlugins;
|
||||
import ru.m4bank.mpos.library.external.transactions.LastReversalCardPaymentCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.data.ResultType;
|
||||
import ru.m4bank.mpos.service.data.FiscalStatusData;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Reader;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.result.ResultCode;
|
||||
import ru.m4bank.mpos.service.hardware.error.ErrorHandler;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.VirtualKeyboardStyleTypeConv;
|
||||
import ru.m4bank.mpos.service.result.PrinterResult;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
import ru.m4bank.mpos.service.transactions.data.MessageButtonData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionData;
|
||||
import ru.m4bank.mpos.service.transactions.data.TransactionExecutionStatus;
|
||||
import ru.m4bank.mpos.service.transactions.data.error.TransactionErrorData;
|
||||
import ru.m4bank.mpos.service.transactions.dto.OnlineCardDataDto;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class RevertCurrentOperationHandlerImpl implements LastReversalCardPaymentCallbackHandler<Result> {
|
||||
|
||||
private final BankNfcPlugins plugin;
|
||||
|
||||
public RevertCurrentOperationHandlerImpl(BankNfcPlugins plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCardReaderForTransactionGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedDevicesFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectingProcessStarted(String deviceName) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnectedEventReceivedOrCanNotEstablishConnection(boolean reconnectAvailable, String description) {
|
||||
if (reconnectAvailable) {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and repeat last operation?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> plugin.getClientInterface().tryToReconnectAndRepeatLast());
|
||||
builder.setNegativeButton("No", (dialog, which) -> plugin.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToConnectSelectionRequested(List deviceList) {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(plugin.getActivity());
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, deviceList);
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
plugin.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.selectCardReader(deviceListSpinner.getSelectedItem().toString());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkFlowDataRequested() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveCardData(OnlineCardDataDto data, boolean shouldConfirmBeManuallyCalled) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredReversal(String description, ResultCode resultCode) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredApplicationSelection(List applicationOfList) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterForRegistrationGettingCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNoBoundedPrinterFound() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedReportZ() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletedPrinting(PrinterResult printerResult) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusFiscalModule(FiscalStatusData fiscalStatusData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationRequiredToProcess() {
|
||||
Timber.d("Reconciliation required!!!");
|
||||
plugin.getClientInterface().getTransactionManager().makeReconciliationDuringTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconciliationCompleted(Result result) {
|
||||
Timber.d("Reconciliation completed!!!");
|
||||
if (result.getResultType() == ResultType.SUCCESSFUL) {
|
||||
plugin.getClientInterface().getTransactionManager().continueTransactionAfterReconciliation();
|
||||
} else {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Reconciliation failed " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_LONG)
|
||||
.show());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionAmountRequested() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataRequested() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceToUseSelectionRequested(List deviceList) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setTitle("Choose device");
|
||||
|
||||
Spinner deviceListSpinner = new Spinner(plugin.getActivity());
|
||||
ArrayAdapter<Reader> adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, new ArrayList<>(deviceList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
deviceListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
plugin.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.setCardReaderToUse((Reader) deviceListSpinner.getSelectedItem());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(deviceListSpinner);
|
||||
plugin.getActivity().runOnUiThread(() -> builder.create().show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrinterToUseSelectionRequested(List printerList) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionInit() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionExecutionStatusChanged(TransactionExecutionStatus newStatus) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserInformationRequested(boolean signNeeded) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(ErrorHandler errorHandler, TransactionErrorData transactionErrorData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorWithPossibilityToRetry(ErrorHandler errorHandler) {
|
||||
plugin.getClientInterface().getTransactionManager().tryToRepeatExecuteLastRequestInTransaction();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceivedError(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDataReceived(TransactionData data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionCompleted() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconnectNeededToProcess() {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setMessage("Connection to cardreader has been lost, try to reconnect and continue?");
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton("Yes", (dialog, which) -> plugin.getClientInterface().getTransactionManager().tryToReconnectToCardReader());
|
||||
builder.setNegativeButton("No", (dialog, which) -> plugin.getClientInterface().cancel());
|
||||
builder.create().show();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongTerminal() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityUpdateUiThread() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreatePinPadButtons() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPinPadKeyBoard(MessageButtonData messageButtonData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateElementPin(int i) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCloseKeyboard() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredAdditionalVirtualKeyboardSettings(VirtualKeyboardStyleTypeConv virtualKeyboardStyleTypeConv) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,101 +0,0 @@
|
|||
package kz.com.aman.kassa.handler;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import kz.com.aman.kassa.bank.M4BankActivity;
|
||||
import kz.com.aman.kassa.plugins.BankNfcPlugins;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionDetailsCallbackHandler;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.result.Result;
|
||||
|
||||
public class TransactionDetailsHandlerImpl implements GetTransactionDetailsCallbackHandler<Result>, GetTransactionsListCallbackHandler<Result> {
|
||||
private final BankNfcPlugins plugin;
|
||||
|
||||
public TransactionDetailsHandlerImpl(BankNfcPlugins plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionDetailsReceived(Transaction transaction) {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
System.out.println("getCheck:"+ transaction.getCheck());
|
||||
System.out.println("getCheckNumber:"+ transaction.getCheckNumber());
|
||||
System.out.println("getAmount:"+ transaction.getAmount());
|
||||
System.out.println("getCardHolderName:"+ transaction.getCardHolderName());
|
||||
System.out.println("getCardType:"+ transaction.getCardType());
|
||||
System.out.println("getPrinterCheckNumber:"+ transaction.getPrinterCheckNumber());
|
||||
System.out.println("getTransactionNumber:"+ transaction.getTransactionNumber());
|
||||
System.out.println("getAdditionalAuthorizationCode:"+ transaction.getAdditionalAuthorizationCode());
|
||||
System.out.println("getAuthorizationCode:"+ transaction.getAuthorizationCode());
|
||||
System.out.println("getCardExpiryDate:"+ transaction.getCardExpiryDate());
|
||||
System.out.println("getTransactionType:"+ transaction.getTransactionType());
|
||||
System.out.println("getTransactionDate:"+ transaction.getTransactionDate());
|
||||
Toast.makeText(plugin.getActivity(), "Transaction details received: " + transaction, Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccessStatusTransaction(Transaction transaction) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onErrorStatusTransaction() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransactionsListReceived(List<Transaction> transactionList) {
|
||||
plugin.getActivity().runOnUiThread(() -> {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(plugin.getActivity());
|
||||
builder.setTitle("Choose transaction");
|
||||
Spinner transactionListSpinner = new Spinner(plugin.getActivity());
|
||||
ArrayAdapter<Transaction> adapter = new ArrayAdapter<>(plugin.getActivity(), android.R.layout.simple_spinner_item, new ArrayList<>(transactionList));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
transactionListSpinner.setAdapter(adapter);
|
||||
|
||||
builder.setPositiveButton("OK", (dialog, which) -> {
|
||||
Transaction transaction = (Transaction) transactionListSpinner.getSelectedItem();
|
||||
plugin.getClientInterface()
|
||||
.getTransactionManager()
|
||||
.getTransactionDetails(this, transaction.getOperationalDayNumber(), transaction
|
||||
.getTransactionNumber(), transaction.getMobileTerminalId());
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setView(transactionListSpinner);
|
||||
builder.create().show();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notAuthorized() {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Not authorized", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompleted(Result result) {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), result.getResultType() + " " + (result.getDescription() == null ? "" : result.getDescription()), Toast.LENGTH_SHORT)
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWrongApiCalled() {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Wrong method has been called", Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeat(int attemptNumber) {
|
||||
plugin.getActivity().runOnUiThread(() -> Toast.makeText(plugin.getActivity(), "Repeat attempt number " + attemptNumber, Toast.LENGTH_SHORT).show());
|
||||
}
|
||||
}
|
||||
|
|
@ -11,32 +11,9 @@ import io.flutter.plugin.common.MethodCall;
|
|||
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
|
||||
import io.flutter.plugin.common.MethodChannel.Result;
|
||||
import kz.com.aman.kassa.MainActivity;
|
||||
import kz.com.aman.kassa.bank.DeviceTypeDefiner;
|
||||
import kz.com.aman.kassa.bank.SessionExpiringCallbackHandlerImpl;
|
||||
import kz.com.aman.kassa.bank.builders.SslConfigurationBuilder;
|
||||
import kz.com.aman.kassa.bank.permissions.PermissionsManager;
|
||||
import kz.com.aman.kassa.bank.permissions.PermissionsManagerImpl;
|
||||
import kz.com.aman.kassa.handler.AuthorizationHandlerImpl;
|
||||
import kz.com.aman.kassa.handler.CardPaymentHandlerImpl;
|
||||
import kz.com.aman.kassa.handler.CardRefundAmanHandlerImpl;
|
||||
import kz.com.aman.kassa.handler.ConnectionCheckHandlerImpl;
|
||||
import kz.com.aman.kassa.handler.TransactionDetailsHandlerImpl;
|
||||
import kz.com.aman.kassa.handler.CloseDayHandlerImpl;
|
||||
|
||||
import kz.com.aman.kassa.model.AmanDao;
|
||||
import ru.m4bank.mpos.library.M4BankMposClient;
|
||||
import ru.m4bank.mpos.library.M4BankMposClientInterfaceFacade;
|
||||
import ru.m4bank.mpos.library.M4BankMposParameters;
|
||||
import ru.m4bank.mpos.library.external.transactions.GetTransactionsListCallbackHandler;
|
||||
import ru.m4bank.mpos.service.commons.data.ConfigurationSettings;
|
||||
import ru.m4bank.mpos.service.commons.data.NetworkConfiguration;
|
||||
import ru.m4bank.mpos.service.commons.data.TerminalConfiguration;
|
||||
import ru.m4bank.mpos.service.data.dynamic.CurrencyDataHolder;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Currency;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.GetOperationType;
|
||||
import ru.m4bank.mpos.service.data.dynamic.objects.Transaction;
|
||||
import ru.m4bank.mpos.service.hardware.external.cardreaderlib.data.enums.TransactionTypeConv;
|
||||
import ru.m4bank.mpos.service.network.Format;
|
||||
import ru.m4bank.mpos.service.network.ServerChoose;
|
||||
|
||||
|
||||
|
||||
public class BankNfcPlugins implements MethodCallHandler {
|
||||
|
|
@ -46,24 +23,6 @@ public class BankNfcPlugins implements MethodCallHandler {
|
|||
//main activity
|
||||
private MainActivity activity;
|
||||
|
||||
private Transaction transaction;
|
||||
|
||||
public Transaction getTransaction() {
|
||||
return transaction;
|
||||
}
|
||||
|
||||
public void setTransaction(Transaction transaction) {
|
||||
this.transaction = transaction;
|
||||
}
|
||||
|
||||
//main client all work with him
|
||||
private M4BankMposClientInterfaceFacade clientInterface;
|
||||
//permissions
|
||||
private PermissionsManager permissionsManager;
|
||||
|
||||
public M4BankMposClientInterfaceFacade getClientInterface() {
|
||||
return this.clientInterface;
|
||||
}
|
||||
|
||||
public MainActivity getActivity() {
|
||||
return this.activity;
|
||||
|
|
@ -141,36 +100,36 @@ public class BankNfcPlugins implements MethodCallHandler {
|
|||
}
|
||||
|
||||
private void permissions(Result result) {
|
||||
try {
|
||||
PermissionsManager.PermissionsCheckResultHandler permissionsCheckResultHandler =
|
||||
new PermissionsManager.PermissionsCheckResultHandler() {
|
||||
@Override
|
||||
public void onPermissionsGranted() {
|
||||
activity.runOnUiThread(() -> {
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(true);
|
||||
dao.setMsg("OK");
|
||||
result.success(gson.toJson(dao));
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionsDeclined() {
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(false);
|
||||
dao.setMsg("decline");
|
||||
result.success(gson.toJson(dao));
|
||||
}
|
||||
};
|
||||
permissionsManager = new PermissionsManagerImpl(this.activity);
|
||||
permissionsManager.checkPermissions(permissionsCheckResultHandler);
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
result.error("1", e.getMessage(), e.getLocalizedMessage());
|
||||
}
|
||||
// try {
|
||||
// PermissionsManager.PermissionsCheckResultHandler permissionsCheckResultHandler =
|
||||
// new PermissionsManager.PermissionsCheckResultHandler() {
|
||||
// @Override
|
||||
// public void onPermissionsGranted() {
|
||||
// activity.runOnUiThread(() -> {
|
||||
// AmanDao<String> dao = new AmanDao<>();
|
||||
// dao.setSuccess(true);
|
||||
// dao.setMsg("OK");
|
||||
// result.success(gson.toJson(dao));
|
||||
// }
|
||||
// );
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onPermissionsDeclined() {
|
||||
// AmanDao<String> dao = new AmanDao<>();
|
||||
// dao.setSuccess(false);
|
||||
// dao.setMsg("decline");
|
||||
// result.success(gson.toJson(dao));
|
||||
// }
|
||||
// };
|
||||
// permissionsManager = new PermissionsManagerImpl(this.activity);
|
||||
// permissionsManager.checkPermissions(permissionsCheckResultHandler);
|
||||
//
|
||||
//
|
||||
// } catch (Exception e) {
|
||||
// result.error("1", e.getMessage(), e.getLocalizedMessage());
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -186,171 +145,152 @@ public class BankNfcPlugins implements MethodCallHandler {
|
|||
|
||||
//start after all permissions granted
|
||||
private void start(String serverUrl) {
|
||||
clientInterface = M4BankMposClient.getInstance(
|
||||
new M4BankMposParameters(
|
||||
Format.JSON,
|
||||
"rus",
|
||||
null,
|
||||
this.activity,
|
||||
new SessionExpiringCallbackHandlerImpl(),
|
||||
"appName",
|
||||
ServerChoose.API_5_0,
|
||||
new ConfigurationSettings
|
||||
.Builder()
|
||||
.printerUsed(true)
|
||||
.umkaEnabled(true)
|
||||
.networkConfiguration(createNetworkConfiguration(serverUrl))
|
||||
.terminalConfiguration(createTerminalConfiguration())
|
||||
.build())
|
||||
);
|
||||
// clientInterface = M4BankMposClient.getInstance(
|
||||
// new M4BankMposParameters(
|
||||
// Format.JSON,
|
||||
// "rus",
|
||||
// null,
|
||||
// this.activity,
|
||||
// new SessionExpiringCallbackHandlerImpl(),
|
||||
// "appName",
|
||||
// ServerChoose.API_5_0,
|
||||
// new ConfigurationSettings
|
||||
// .Builder()
|
||||
// .printerUsed(true)
|
||||
// .umkaEnabled(true)
|
||||
// .networkConfiguration(createNetworkConfiguration(serverUrl))
|
||||
// .terminalConfiguration(createTerminalConfiguration())
|
||||
// .build())
|
||||
// );
|
||||
}
|
||||
|
||||
private void connection(Result result) {
|
||||
clientInterface.getConfigurationManager()
|
||||
.checkConnection(
|
||||
new ConnectionCheckHandlerImpl(this.activity, result));
|
||||
// clientInterface.getConfigurationManager()
|
||||
// .checkConnection(
|
||||
// new ConnectionCheckHandlerImpl(this.activity, result));
|
||||
}
|
||||
private void currency(Result result) {
|
||||
CurrencyDataHolder dataHolder = clientInterface.getConfigurationManager()
|
||||
.getCurrencyDataHolder();
|
||||
Currency currentCurrency = dataHolder.getCurrency();
|
||||
if(currentCurrency!=null){
|
||||
System.out.println(currentCurrency.getName());
|
||||
System.out.println(currentCurrency.getCurrency3DigitCode());
|
||||
} else {
|
||||
System.out.println("currentCurrency is null");
|
||||
}
|
||||
System.out.println("===========================");
|
||||
if(currentCurrency == null || !"398".equalsIgnoreCase(currentCurrency.getCurrency3DigitCode()) ){
|
||||
List<Currency> currencies = dataHolder.getCurrencyList();
|
||||
boolean changed = false;
|
||||
for(Currency currency : currencies ){
|
||||
System.out.println(currency.getName());
|
||||
System.out.println(currency.getLetterCode());
|
||||
System.out.println(currency.getCurrency3DigitCode());
|
||||
if("398".equalsIgnoreCase(currency.getCurrency3DigitCode())){
|
||||
dataHolder.setCurrency(currency);
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(changed);
|
||||
dao.setMsg("current currency " + (currentCurrency!=null ? currentCurrency.getLetterCode() : "NULL"));
|
||||
result.success(gson.toJson(dao));
|
||||
} else {
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(true);
|
||||
dao.setMsg("exist");
|
||||
result.success(gson.toJson(dao));
|
||||
}
|
||||
// CurrencyDataHolder dataHolder = clientInterface.getConfigurationManager()
|
||||
// .getCurrencyDataHolder();
|
||||
// Currency currentCurrency = dataHolder.getCurrency();
|
||||
// if(currentCurrency!=null){
|
||||
// System.out.println(currentCurrency.getName());
|
||||
// System.out.println(currentCurrency.getCurrency3DigitCode());
|
||||
// } else {
|
||||
// System.out.println("currentCurrency is null");
|
||||
// }
|
||||
// System.out.println("===========================");
|
||||
// if(currentCurrency == null || !"398".equalsIgnoreCase(currentCurrency.getCurrency3DigitCode()) ){
|
||||
// List<Currency> currencies = dataHolder.getCurrencyList();
|
||||
// boolean changed = false;
|
||||
// for(Currency currency : currencies ){
|
||||
// System.out.println(currency.getName());
|
||||
// System.out.println(currency.getLetterCode());
|
||||
// System.out.println(currency.getCurrency3DigitCode());
|
||||
// if("398".equalsIgnoreCase(currency.getCurrency3DigitCode())){
|
||||
// dataHolder.setCurrency(currency);
|
||||
// changed = true;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// AmanDao<String> dao = new AmanDao<>();
|
||||
// dao.setSuccess(changed);
|
||||
// dao.setMsg("current currency " + (currentCurrency!=null ? currentCurrency.getLetterCode() : "NULL"));
|
||||
// result.success(gson.toJson(dao));
|
||||
// } else {
|
||||
// AmanDao<String> dao = new AmanDao<>();
|
||||
// dao.setSuccess(true);
|
||||
// dao.setMsg("exist");
|
||||
// result.success(gson.toJson(dao));
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void authentication(MethodCall call, Result result) {
|
||||
String login = call.argument("login");
|
||||
String password = call.argument("password");
|
||||
clientInterface.getAuthorizationManager().authorize(new AuthorizationHandlerImpl(this, result, login, password) );
|
||||
// String login = call.argument("login");
|
||||
// String password = call.argument("password");
|
||||
// clientInterface.getAuthorizationManager().authorize(new AuthorizationHandlerImpl(this, result, login, password) );
|
||||
}
|
||||
|
||||
private void pay(MethodCall call, Result result) {
|
||||
try {
|
||||
Integer value = call.argument("amount");
|
||||
long amount = value.longValue();
|
||||
clientInterface.cancel();
|
||||
clientInterface.getTransactionManager().makeCardPayment(new CardPaymentHandlerImpl(this, result, amount, TransactionTypeConv.PAYMENT));
|
||||
} catch (Exception e) {
|
||||
System.out.println("=============>ERROR:"+e.getMessage());
|
||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
}
|
||||
// try {
|
||||
// Integer value = call.argument("amount");
|
||||
// long amount = value.longValue();
|
||||
// clientInterface.cancel();
|
||||
// clientInterface.getTransactionManager().makeCardPayment(new CardPaymentHandlerImpl(this, result, amount, TransactionTypeConv.PAYMENT));
|
||||
// } catch (Exception e) {
|
||||
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
// }
|
||||
}
|
||||
|
||||
private void findTransaction(MethodCall call, Result result) {
|
||||
try {
|
||||
Integer transactionNumber = call.argument("transactionNumber");
|
||||
String authorizationCode = call.argument("authorizationCode");
|
||||
clientInterface.getTransactionManager()
|
||||
.getTransactionsList(new CardRefundAmanHandlerImpl(this, result, transactionNumber, authorizationCode , transaction), 1000,
|
||||
0, GetOperationType.SHOW, null);
|
||||
} catch (Exception e) {
|
||||
System.out.println("=============>ERROR:"+e.getMessage());
|
||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
}
|
||||
// try {
|
||||
// Integer transactionNumber = call.argument("transactionNumber");
|
||||
// String authorizationCode = call.argument("authorizationCode");
|
||||
// clientInterface.getTransactionManager()
|
||||
// .getTransactionsList(new CardRefundAmanHandlerImpl(this, result, transactionNumber, authorizationCode , transaction), 1000,
|
||||
// 0, GetOperationType.SHOW, null);
|
||||
// } catch (Exception e) {
|
||||
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
// }
|
||||
}
|
||||
|
||||
private void refund(MethodCall call, Result result) {
|
||||
try {
|
||||
clientInterface.getTransactionManager()
|
||||
.makeCardRefund(new CardRefundAmanHandlerImpl(this, result, null, null, transaction));
|
||||
} catch (Exception e) {
|
||||
System.out.println("=============>ERROR:"+e.getMessage());
|
||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
}
|
||||
// try {
|
||||
// clientInterface.getTransactionManager()
|
||||
// .makeCardRefund(new CardRefundAmanHandlerImpl(this, result, null, null, transaction));
|
||||
// } catch (Exception e) {
|
||||
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
// }
|
||||
}
|
||||
|
||||
private void closeDay(MethodCall call, Result result) {
|
||||
try {
|
||||
clientInterface.cancel();
|
||||
clientInterface.getTransactionManager().closeDay(new CloseDayHandlerImpl(this, result));
|
||||
} catch (Exception e) {
|
||||
System.out.println("=============>ERROR:"+e.getMessage());
|
||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
}
|
||||
// try {
|
||||
// clientInterface.cancel();
|
||||
// clientInterface.getTransactionManager().closeDay(new CloseDayHandlerImpl(this, result));
|
||||
// } catch (Exception e) {
|
||||
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
// }
|
||||
}
|
||||
|
||||
private void showTransaction(MethodCall call, Result result){
|
||||
clientInterface.getTransactionManager()
|
||||
.getTransactionsList(
|
||||
new TransactionDetailsHandlerImpl(this),
|
||||
20, 0,
|
||||
GetOperationType.SHOW,
|
||||
null);
|
||||
// clientInterface.getTransactionManager()
|
||||
// .getTransactionsList(
|
||||
// new TransactionDetailsHandlerImpl(this),
|
||||
// 20, 0,
|
||||
// GetOperationType.SHOW,
|
||||
// null);
|
||||
}
|
||||
|
||||
private void cancel(MethodCall call, Result result) {
|
||||
try {
|
||||
clientInterface.cancel();
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(true);
|
||||
dao.setMsg("OK");
|
||||
result.success(gson.toJson(dao));
|
||||
} catch (Exception e) {
|
||||
System.out.println("=============>ERROR:"+e.getMessage());
|
||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
}
|
||||
// try {
|
||||
// clientInterface.cancel();
|
||||
// AmanDao<String> dao = new AmanDao<>();
|
||||
// dao.setSuccess(true);
|
||||
// dao.setMsg("OK");
|
||||
// result.success(gson.toJson(dao));
|
||||
// } catch (Exception e) {
|
||||
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
// }
|
||||
}
|
||||
|
||||
private void shutdown(MethodCall call, Result result) {
|
||||
try {
|
||||
clientInterface.shutdown();
|
||||
AmanDao<String> dao = new AmanDao<>();
|
||||
dao.setSuccess(true);
|
||||
dao.setMsg("OK");
|
||||
result.success(gson.toJson(dao));
|
||||
} catch (Exception e) {
|
||||
System.out.println("=============>ERROR:"+e.getMessage());
|
||||
result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
//terminal config
|
||||
private TerminalConfiguration createTerminalConfiguration() {
|
||||
System.out.println("=============>createTerminalConfiguration:"+new DeviceTypeDefiner().define());
|
||||
return new TerminalConfiguration.Builder()
|
||||
.energySaverModeTime(150)
|
||||
.pinLengthsArray(new byte[]{4, 6})
|
||||
.shutDownModeTime(300)
|
||||
.deviceType(new DeviceTypeDefiner().define())
|
||||
.build();
|
||||
}
|
||||
|
||||
//network config
|
||||
private NetworkConfiguration createNetworkConfiguration(String serverUrl) {
|
||||
return new NetworkConfiguration.Builder()
|
||||
.sslConfiguration(SslConfigurationBuilder.buildAllTrustConfiguration(serverUrl))
|
||||
.serverUrl(serverUrl)
|
||||
.build();
|
||||
// try {
|
||||
// clientInterface.shutdown();
|
||||
// AmanDao<String> dao = new AmanDao<>();
|
||||
// dao.setSuccess(true);
|
||||
// dao.setMsg("OK");
|
||||
// result.success(gson.toJson(dao));
|
||||
// } catch (Exception e) {
|
||||
// System.out.println("=============>ERROR:"+e.getMessage());
|
||||
// result.error("2", e.getMessage(), e.getLocalizedMessage());
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
package kz.com.aman.kassa.activities;
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import kz.com.aman.kassa.R
|
||||
|
||||
import io.flutter.app.FlutterActivity
|
||||
|
||||
|
||||
class BankActivity : FlutterActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
Log.i("BankActivity","onCreate")
|
||||
setContentView(R.layout.activity_bank)
|
||||
}
|
||||
|
||||
fun myClickHandler(view: View) {
|
||||
Log.i("BankActivity","closed")
|
||||
val returnIntent = Intent()
|
||||
returnIntent.putExtra("result", "abrakadabra")
|
||||
setResult(Activity.RESULT_OK, returnIntent)
|
||||
finish()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
val returnIntent = Intent()
|
||||
returnIntent.putExtra("result", "abrakadabra")
|
||||
setResult(Activity.RESULT_CANCELED, returnIntent)
|
||||
super.onDestroy()
|
||||
}
|
||||
}
|
||||
|
|
@ -11,124 +11,11 @@ buildscript {
|
|||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
|
||||
ext.buildType = [
|
||||
'buildType': 'NFC'
|
||||
]
|
||||
|
||||
ext.versions = [
|
||||
'supportLibrary': '28.0.0',
|
||||
'okhttp' : '3.8.1',
|
||||
'retrofit' : '2.3.0',
|
||||
'multidex' : '1.0.2',
|
||||
'logback' : '1.1.1-6'
|
||||
]
|
||||
|
||||
ext.deps = [
|
||||
'support' : [
|
||||
'appcompatV7': "com.android.support:appcompat-v7:${versions.supportLibrary}",
|
||||
'multidex' : "com.android.support:multidex:${versions.multidex}",
|
||||
],
|
||||
'okhttp' : [
|
||||
'core' : "com.squareup.okhttp3:okhttp:${versions.okhttp}",
|
||||
'logger': "com.squareup.okhttp3:logging-interceptor:${versions.okhttp}",
|
||||
],
|
||||
'retrofit' : [
|
||||
'core' : "com.squareup.retrofit2:retrofit:${versions.retrofit}",
|
||||
'converterGson' : "com.squareup.retrofit2:converter-gson:${versions.retrofit}",
|
||||
'rxjava2Adapter': 'com.squareup.retrofit2:adapter-rxjava2:2.3.0',
|
||||
],
|
||||
'rx' : [
|
||||
'core' : 'io.reactivex.rxjava2:rxjava:2.1.7',
|
||||
'android': 'io.reactivex.rxjava2:rxandroid:2.0.1',
|
||||
],
|
||||
'logback' : [
|
||||
'core' : "com.github.tony19:logback-android-core:${versions.logback}",
|
||||
'classic': "com.github.tony19:logback-android-classic:${versions.logback}",
|
||||
],
|
||||
'timber' : 'com.jakewharton.timber:timber:4.5.1',
|
||||
'paperdb' : 'io.paperdb:paperdb:2.1',
|
||||
'sdpAndroid' : 'com.intuit.sdp:sdp-android:1.0.4',
|
||||
'slf4jApi' : 'org.slf4j:slf4j-api:1.7.21',
|
||||
'greendao' : 'org.greenrobot:greendao:3.2.2',
|
||||
'websockets' : 'org.java-websocket:Java-WebSocket:1.4.0',
|
||||
'retro_stream': 'net.sourceforge.streamsupport:android-retrostreams:1.6.3',
|
||||
'hardware' : [
|
||||
"terminalCommon": [
|
||||
"cardreaderlib" : "m4bank:cardreaderlib:759",
|
||||
"connectionreaders": "m4bank:connectionreaders:759",
|
||||
"emv_taglib" : "external:emv-taglib:2.5",
|
||||
],
|
||||
'aisino' : [
|
||||
"aisino_common": "m4bank:aisino_common:140",
|
||||
"vm20" : [
|
||||
"vm20" : "external:vm20sdk:9",
|
||||
"asinalib": "m4bank:asinalib:100"
|
||||
],
|
||||
"a90" : [
|
||||
"aisinoprinterlib": "m4bank:aisinoprinterlib:153",
|
||||
"aisino_a90lib" : "m4bank:aisino_a90lib:437",
|
||||
"aisino_a90deps" : "m4bank:aisino_a90deps:master-1.1.43@aar",
|
||||
],
|
||||
],
|
||||
'wangpos' : [
|
||||
"wangposlib" : "m4bank:wangposlib:53",
|
||||
"wangposprinterlibrary": "m4bank:wangposprinterlibrary:35",
|
||||
"SDK4BaseBinder" : "external:SDK4BaseBinder:2.1.5",
|
||||
"SDK4EmvBinder" : "external:SDK4EmvBinder:2.1.5",
|
||||
"SDK4KeyManagerBinder" : "external:SDK4KeyManagerBinder:2.1.5"
|
||||
],
|
||||
'atol' : [
|
||||
"fiscalprinterlibrary": "m4bank:fiscalprinterlibrary:93",
|
||||
"atol_core" : "external:atol_core:1@aar"
|
||||
],
|
||||
'shtrih' : [
|
||||
"FptrServiceAndroid": "m4bank:FptrServiceAndroid:3",
|
||||
"shtrih_core" : "external:shtrihjpos:1"
|
||||
],
|
||||
"icmp" : [
|
||||
"icmplibrary" : "m4bank:icmplibrary:16",
|
||||
"icmp_dependencies": "m4bank:icmp_dependencies:1.1.1.2@aar"
|
||||
],
|
||||
"roam" : [
|
||||
"roamlib" : "roamlib:roamlib2:207",
|
||||
"roamreaderAAR": "external:roamreaderunifiedapiAAR:1@aar"
|
||||
],
|
||||
"spirelib" : "m4bank:spirelib:138",
|
||||
"softpos" : [
|
||||
"softpaylibrary" : "m4bank:softpaylibrary:52@aar",
|
||||
"softpay_dependencies": "m4bank:softpay_dependencies:1.1.4.62@aar",
|
||||
],
|
||||
"sunmi" : "m4bank:sunmiv1printerlibrary:5",
|
||||
"redlib" : "m4bank:redlib:1",
|
||||
"d200lib" : "m4bank:d200lib:9",
|
||||
],
|
||||
"zlibrary" : "m4bank:zlibrary:2159@aar"
|
||||
]
|
||||
|
||||
//TODO: 20.09.2019 for future refactoring: add gradle properties parameter to set supported device remotely
|
||||
if (ext.buildType.buildType == 'NFC') {
|
||||
//ext.supportedDevicesapp = ['SoftPos', 'Shtrih', 'Atol']
|
||||
ext.supportedDevicesapp = ['SoftPos']
|
||||
} else {
|
||||
ext.supportedDevicesapp = ['Deftun', 'Singular', 'CctRed', 'RoamData', 'Rp350n', 'WisePad', 'RoamPad',
|
||||
'Qpos', 'Icmp', 'Spire', 'D200', 'RoamPadNfc', 'IcmpUpos', 'WangPos',
|
||||
'OrangeRoamPad', 'FakeReader', 'Aisino', 'AisinoA90',
|
||||
'Shtrih', 'Sunmi', 'Atol', 'AisinoA70']
|
||||
}
|
||||
|
||||
ext.currentRepository = "http://217.174.185.218:55555/artifactory/gradle-dev"
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
maven {
|
||||
url currentRepository
|
||||
content {
|
||||
includeGroupByRegex "external.*"
|
||||
includeGroupByRegex "m4bank.*"
|
||||
includeGroupByRegex "roamlib.*"
|
||||
}
|
||||
}
|
||||
google()
|
||||
jcenter()
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
|
|
@ -34,6 +34,7 @@ class SimpleLogPrinter extends LogPrinter {
|
|||
}
|
||||
|
||||
String formatStackTrace(StackTrace stackTrace, int methodPosition) {
|
||||
|
||||
var lines = stackTrace.toString()?.split('\n');
|
||||
var formatted = <String>[];
|
||||
var count = 0;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
class CheckImageModal {
|
||||
final String base64Data;
|
||||
final String textData;
|
||||
CheckImageModal({this.base64Data, this.textData});
|
||||
|
||||
static CheckImageModal fromJson(Map<String, dynamic> json) {
|
||||
return CheckImageModal(
|
||||
base64Data: json['base64Data'],
|
||||
textData: json['textData']
|
||||
);
|
||||
}
|
||||
Map<String, dynamic> toJson() =>
|
||||
{
|
||||
'base64Data': base64Data,
|
||||
'textData': textData
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
import 'package:intl/intl.dart';
|
||||
|
||||
class HalykPosSession {
|
||||
const HalykPosSession(
|
||||
{this.login, this.token, this.serverTime, this.tokenTimeout});
|
||||
|
||||
final String login;
|
||||
final String token;
|
||||
final DateTime serverTime;
|
||||
final int tokenTimeout;
|
||||
|
||||
static HalykPosSession fromJson(Map<String, dynamic> data) => HalykPosSession(
|
||||
login: data['login'],
|
||||
token: data['token'],
|
||||
serverTime: data['ServerTime'] != null
|
||||
? new DateFormat("dd.MM.yyyy HH:mm:ss ZZZ").parse(data['ServerTime'])
|
||||
: null,
|
||||
tokenTimeout: data['TokenTimeout']);
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
class SettingModel {
|
||||
const SettingModel({this.name, this.type, this.address});
|
||||
final String type;
|
||||
final String name;
|
||||
final String address;
|
||||
}
|
||||
|
|
@ -6,7 +6,14 @@ const String PaymentViewRoute = "PaymentView";
|
|||
const String PaymentNfcViewRoute = "PaymentNfcViewRoute";
|
||||
const String HistoryViewRoute = "HistoryView";
|
||||
const String InfoKkmViewRoute = "InfoKkmViewRoute";
|
||||
const String SettingsViewRoute = "SettingsViewRoute";
|
||||
const String QrViewRoute = "QrViewRoute";
|
||||
const String BankViewRoute = "BankViewRoute";
|
||||
const String BankSettingViewRoute = "BankSettingViewRoute";
|
||||
|
||||
|
||||
const String SettingsPrinterRoute = "SettingsPrinterRoute";
|
||||
const String SettingsPrinterBTRoute = "SettingsPrinterBTRoute";
|
||||
const String SettingsPrinterEncodingRoute = "SettingsPrinterEncodingRoute";
|
||||
const String SettingsPrinterPaperRoute = "SettingsPrinterPaperRoute";
|
||||
// Generate the views here
|
||||
|
|
|
|||
|
|
@ -1,18 +1,23 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/close_day_data.dart';
|
||||
import 'package:aman_kassa_flutter/views/bank_setting/bank_setting_view.dart';
|
||||
import 'package:aman_kassa_flutter/views/bank_view/bank_view.dart';
|
||||
import 'package:aman_kassa_flutter/views/check/image_show_container.dart';
|
||||
import "package:aman_kassa_flutter/views/home/home_view_m.dart";
|
||||
import 'package:aman_kassa_flutter/views/close_day_view/close_day_show_container.dart';
|
||||
import 'package:aman_kassa_flutter/views/history/history_view.dart';
|
||||
import 'package:aman_kassa_flutter/views/info_kkm/info_kkm_view.dart';
|
||||
import 'package:aman_kassa_flutter/views/payment/payment_view.dart';
|
||||
import 'package:aman_kassa_flutter/views/payment_nfc/payment_nfc_view.dart';
|
||||
import 'package:aman_kassa_flutter/views/qr_view/qr_view.dart';
|
||||
|
||||
import './route_names.dart';
|
||||
import 'package:aman_kassa_flutter/views/home/home_view.dart';
|
||||
import 'package:aman_kassa_flutter/views/settings/printer/views/PrinterSelect.dart';
|
||||
import 'package:aman_kassa_flutter/views/settings/settings_view.dart';
|
||||
import 'package:aman_kassa_flutter/views/settings/printer/views/PrinterEncoding.dart';
|
||||
import 'package:aman_kassa_flutter/views/settings/printer/views/PrinterPaperSize.dart';
|
||||
import 'package:aman_kassa_flutter/views/settings/setting_printer_view.dart';
|
||||
import 'package:aman_kassa_flutter/views/login/login_view.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import './route_names.dart';
|
||||
|
||||
|
||||
Route<dynamic> generateRoute(RouteSettings settings) {
|
||||
switch (settings.name) {
|
||||
|
|
@ -51,6 +56,11 @@ Route<dynamic> generateRoute(RouteSettings settings) {
|
|||
routeName: settings.name,
|
||||
viewToShow: InfoKkmView(),
|
||||
);
|
||||
case SettingsViewRoute:
|
||||
return _getPageRoute(
|
||||
routeName: settings.name,
|
||||
viewToShow: SettingView(),
|
||||
);
|
||||
case BankViewRoute:
|
||||
return _getPageRoute(
|
||||
routeName: settings.name,
|
||||
|
|
@ -74,6 +84,26 @@ Route<dynamic> generateRoute(RouteSettings settings) {
|
|||
routeName: settings.name,
|
||||
viewToShow: ImageShowContainer(data),
|
||||
);
|
||||
case SettingsPrinterRoute:
|
||||
return _getPageRoute(
|
||||
routeName: settings.name,
|
||||
viewToShow: SettingPrinterView(),
|
||||
);
|
||||
case SettingsPrinterBTRoute:
|
||||
return _getPageRoute(
|
||||
routeName: settings.name,
|
||||
viewToShow: PrinterSelectView(),
|
||||
);
|
||||
case SettingsPrinterEncodingRoute:
|
||||
return _getPageRoute(
|
||||
routeName: settings.name,
|
||||
viewToShow: PrinterEncodingView(),
|
||||
);
|
||||
case SettingsPrinterPaperRoute:
|
||||
return _getPageRoute(
|
||||
routeName: settings.name,
|
||||
viewToShow: PrinterPaperView(),
|
||||
);
|
||||
case CloseDayShowRoute:
|
||||
CloseDayData data = settings.arguments as CloseDayData;
|
||||
return _getPageRoute(
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:aman_kassa_flutter/core/base/base_service.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/redux/state/user_state.dart';
|
||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||
import 'package:aman_kassa_flutter/views/login/login_view.dart';
|
||||
|
|
@ -17,12 +18,14 @@ import '../models/auth_response.dart';
|
|||
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
/// The service responsible for networking requests
|
||||
/// The service responsible fworking requests
|
||||
class ApiService extends BaseService {
|
||||
static const test_host = 'https://kassa-test.aman.com.kz';
|
||||
static const test_endpoint = '$test_host/ru/api/v2';
|
||||
static const host = 'https://kassa.aman.com.kz';
|
||||
static const endpoint = '$host/ru/api/v2';
|
||||
|
||||
static const pos_endpoint = '$test_host/api';
|
||||
final NavigatorService _navigatorService = locator<NavigatorService>();
|
||||
final DialogService _dialogService = locator<DialogService>();
|
||||
|
||||
|
|
@ -63,6 +66,12 @@ class ApiService extends BaseService {
|
|||
return Response.fromJsonDynamic(json.decode(response));
|
||||
}
|
||||
|
||||
Future<HalykPosSession> halykPosToken(String token, login, password) async {
|
||||
Map<String, String> requestBody = <String, String>{'login': login, 'password': password};
|
||||
var response = await requestFormData('/getpostoken', requestBody, bodyEntry: true, posEndPoint: true, statusCheck: false);
|
||||
return HalykPosSession.fromJson(jsonDecode(response));
|
||||
}
|
||||
|
||||
Future<Response<dynamic>> money(String token) async {
|
||||
Map<String, String> requestBody = <String, String>{'api_token': token};
|
||||
var response = await requestFormData('/money', requestBody);
|
||||
|
|
@ -124,15 +133,17 @@ class ApiService extends BaseService {
|
|||
}
|
||||
|
||||
|
||||
Future<String> requestFormData(String point, Map<String, String> requestBody, { bool statusCheck = true } ) async {
|
||||
Future<String> requestFormData(String point, Map<String, dynamic> requestBody, { bool statusCheck = true, bool bodyEntry = false, bool posEndPoint= false } ) async {
|
||||
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
|
||||
|
||||
|
||||
Map<String, String> headers = <String, String>{
|
||||
HttpHeaders.contentTypeHeader: "multipart/form-data",
|
||||
HttpHeaders.contentTypeHeader: bodyEntry ? "application/json" : "multipart/form-data",
|
||||
HttpHeaders.cacheControlHeader: "no-cache"
|
||||
};
|
||||
|
||||
|
||||
|
||||
if(Platform.isAndroid) {
|
||||
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
|
||||
headers.addAll(<String, String>{
|
||||
|
|
@ -152,15 +163,27 @@ class ApiService extends BaseService {
|
|||
String url = '$endpoint$point';
|
||||
if(this._test) {
|
||||
url = '$test_endpoint$point';
|
||||
if(posEndPoint){
|
||||
url = '$pos_endpoint$point';
|
||||
}
|
||||
}
|
||||
var uri = Uri.parse(url);
|
||||
var request = http.MultipartRequest('POST', uri)
|
||||
..headers.addAll(headers)
|
||||
..fields.addAll(requestBody);
|
||||
|
||||
var response = await request.send();
|
||||
String body;
|
||||
|
||||
if(bodyEntry) {
|
||||
http.Response res = await http.post(uri, body: jsonEncode(requestBody), headers: headers );
|
||||
body = res.body;
|
||||
} else {
|
||||
var request = http.MultipartRequest('POST', uri)
|
||||
..headers.addAll(headers)
|
||||
..fields.addAll(requestBody);
|
||||
var response = await request.send();
|
||||
body = await response.stream.bytesToString();
|
||||
}
|
||||
|
||||
|
||||
|
||||
String body = await response.stream.bytesToString();
|
||||
if(statusCheck) { //Проверка на авторизованный запрос, необязательный параметр
|
||||
Response check = Response.fromJsonDynamic(json.decode(body));
|
||||
if (!check.operation && ( [401,402,403,412].contains(check.status) ) ) {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,17 @@
|
|||
import 'dart:convert';
|
||||
import 'package:aman_kassa_flutter/core/base/base_service.dart';
|
||||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/aman_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/close_day_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/response.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/transaction_item.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/ApiService.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
class BankService extends BaseService {
|
||||
final ApiService _api = locator<ApiService>();
|
||||
static const String _url = 'http://195.200.74.83:5000';
|
||||
final MethodChannel _channel = MethodChannel('channel:com.amanKassa/bank');
|
||||
|
||||
|
|
@ -23,18 +28,18 @@ class BankService extends BaseService {
|
|||
return int.parse(result) ?? 0;
|
||||
}
|
||||
|
||||
Future<String> imei() async {
|
||||
String result;
|
||||
Future<HalykPosSession> renewToken({String token, String login, String password}) async {
|
||||
HalykPosSession result;
|
||||
try {
|
||||
result = await _channel.invokeMethod('imei');
|
||||
result = await _api.halykPosToken(token, login, password);
|
||||
} catch (e, stack) {
|
||||
log.e("BankService", e, stack);
|
||||
result = '0';
|
||||
}
|
||||
log.i(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Future<bool> init() async {
|
||||
try {
|
||||
String response = await _channel.invokeMethod('init', <String, dynamic>{
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import 'package:aman_kassa_flutter/core/locator.dart';
|
|||
import 'package:aman_kassa_flutter/core/models/calc_model.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/card_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_image_modal.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_item.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/product_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/response.dart';
|
||||
|
|
@ -206,17 +207,26 @@ class DataService extends BaseService {
|
|||
// log.i('response operation: ${response.operation}');
|
||||
if (response.status == 200 && response.operation == true) {
|
||||
User user = Redux.store.state.userState.user;
|
||||
//check compare
|
||||
|
||||
String check = response?.body['check'];
|
||||
var checkText = response?.body['check_text'];
|
||||
CheckImageModal imageModal = new CheckImageModal( base64Data: check, textData: checkText !=null ? jsonEncode(checkText) : null );
|
||||
// journal analyze
|
||||
dynamic journal = response?.body['journal'];
|
||||
String url = response?.body['link'];
|
||||
int checkNum = journal['check_num'];
|
||||
var summ = journal['summ'];
|
||||
// short url
|
||||
String url = response?.body['link'];
|
||||
// total
|
||||
double total = summ != null ? double.parse(summ.toString()) : 0.0;
|
||||
|
||||
//insert data to db
|
||||
this.insertVoucher(
|
||||
user: user,
|
||||
name: 'Чек №$checkNum',
|
||||
data: data,
|
||||
base64Data: check,
|
||||
base64Data: jsonEncode(imageModal.toJson()),
|
||||
total: total,
|
||||
url: url,
|
||||
type: operationType == OperationTypeReturn
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
|
||||
import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/redux/state/bank_state.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
|
|
@ -17,3 +18,9 @@ ThunkAction<AppState> saveData(String login, String password) {
|
|||
store.dispatch(SetBankStateAction(BankState(login: login, password: password)));
|
||||
};
|
||||
}
|
||||
|
||||
ThunkAction<AppState> setHalykSession(HalykPosSession session) {
|
||||
return (Store<AppState> store) async {
|
||||
store.dispatch(SetBankStateAction(BankState(session: session)));
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import 'package:aman_kassa_flutter/redux/state/setting_state.dart';
|
|||
import 'package:meta/meta.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
import 'package:redux_thunk/redux_thunk.dart';
|
||||
|
||||
import 'package:flutter_bluetooth_basic/src/bluetooth_device.dart';
|
||||
import '../store.dart';
|
||||
|
||||
@immutable
|
||||
|
|
@ -23,4 +23,40 @@ ThunkAction<AppState> changeTradeTypeFromSetting(String tradeType) {
|
|||
return (Store<AppState> store) async {
|
||||
store.dispatch(SetSettingStateAction(SettingState(tradeType: tradeType )));
|
||||
};
|
||||
}
|
||||
|
||||
ThunkAction<AppState> changePinCodeFromSetting(String pinCode) {
|
||||
return (Store<AppState> store) async {
|
||||
store.dispatch(SetSettingStateAction(SettingState(pinCode: pinCode)));
|
||||
};
|
||||
}
|
||||
|
||||
ThunkAction<AppState> changePinLockedFromSetting(bool locked) {
|
||||
return (Store<AppState> store) async {
|
||||
store.dispatch(SetSettingStateAction(SettingState(pinLocked: locked)));
|
||||
};
|
||||
}
|
||||
|
||||
ThunkAction<AppState> changePinSkipFromSetting(bool skip) {
|
||||
return (Store<AppState> store) async {
|
||||
store.dispatch(SetSettingStateAction(SettingState(pinSkip: skip)));
|
||||
};
|
||||
}
|
||||
|
||||
ThunkAction<AppState> selectPrinterFromSetting(BluetoothDevice device) {
|
||||
return (Store<AppState> store) async {
|
||||
store.dispatch(SetSettingStateAction(SettingState(printerBT: device )));
|
||||
};
|
||||
}
|
||||
|
||||
ThunkAction<AppState> selectPrinterEncodingFromSetting(String encoding) {
|
||||
return (Store<AppState> store) async {
|
||||
store.dispatch(SetSettingStateAction(SettingState(printerEncoding: encoding )));
|
||||
};
|
||||
}
|
||||
|
||||
ThunkAction<AppState> selectPrinterPaperSizeFromSetting(String paperSize) {
|
||||
return (Store<AppState> store) async {
|
||||
store.dispatch(SetSettingStateAction(SettingState(printerPaperSize: paperSize )));
|
||||
};
|
||||
}
|
||||
|
|
@ -72,7 +72,7 @@ Future<void> logoutAction(Store<AppState> store) async {
|
|||
UserState(
|
||||
isLoading: false,
|
||||
isAuthenticated: false,
|
||||
user: User(),
|
||||
user: User()
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -3,4 +3,17 @@ const String SettingModeCalc = 'calcMode';
|
|||
|
||||
|
||||
const String SettingTradeTypeGood = 'g';
|
||||
const String SettingTradeTypeService = 's';
|
||||
const String SettingTradeTypeService = 's';
|
||||
|
||||
|
||||
const String SettingPrinterEncodingCp866 = 'cp866';
|
||||
const String SettingPrinterEncodingWin1251 = 'windows-1251';
|
||||
const String SettingPrinterEncodingImage = 'image';
|
||||
|
||||
const String SettingPrinterPaperM58 = '58mm';
|
||||
const String SettingPrinterPaperM80 = '80mm';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3,5 +3,5 @@ import 'package:aman_kassa_flutter/redux/state/bank_state.dart';
|
|||
|
||||
bankReducer(BankState prevState, SetBankStateAction action) {
|
||||
final payload = action.bankState;
|
||||
return prevState.copyWith(login: payload.login, password: payload.password);
|
||||
return prevState.copyWith(login: payload.login, password: payload.password, session: payload.session);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,12 @@ settingReducer(SettingState prevState, SetSettingStateAction action) {
|
|||
final payload = action.settingState;
|
||||
return prevState.copyWith(
|
||||
mode: payload.mode,
|
||||
tradeType: payload.tradeType
|
||||
tradeType: payload.tradeType,
|
||||
pinCode: payload.pinCode,
|
||||
pinLocked: payload.pinLocked,
|
||||
pinSkip: payload.pinSkip,
|
||||
printerBT: payload.printerBT,
|
||||
printerEncoding: payload.printerEncoding,
|
||||
printerPaperSize: payload.printerPaperSize,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
|
|
@ -5,24 +6,29 @@ import 'package:meta/meta.dart';
|
|||
class BankState {
|
||||
final String login;
|
||||
final String password;
|
||||
final HalykPosSession session;
|
||||
|
||||
BankState({this.login, this.password});
|
||||
BankState({this.login, this.password, this.session,});
|
||||
|
||||
//read hive
|
||||
factory BankState.initial(BankState payload) {
|
||||
return BankState(
|
||||
login: payload?.login,
|
||||
password: payload?.password);
|
||||
password: payload?.password,
|
||||
session: payload?.session
|
||||
);
|
||||
}
|
||||
|
||||
//write hive
|
||||
BankState copyWith({
|
||||
@required login,
|
||||
@required password,
|
||||
@required session,
|
||||
}) {
|
||||
return BankState(
|
||||
login: login ?? this.login,
|
||||
password: password ?? this.password,
|
||||
session: session ?? this.session
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,28 +1,58 @@
|
|||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:flutter_bluetooth_basic/src/bluetooth_device.dart';
|
||||
|
||||
@immutable
|
||||
class SettingState {
|
||||
final String mode;
|
||||
final String tradeType;
|
||||
final String pinCode;
|
||||
final bool pinLocked;
|
||||
final bool pinSkip;
|
||||
final BluetoothDevice printerBT;
|
||||
final String printerEncoding;
|
||||
final String printerPaperSize;
|
||||
|
||||
SettingState({this.mode, this.tradeType});
|
||||
|
||||
SettingState({this.mode, this.tradeType, this.pinCode, this.pinLocked, this.pinSkip, this.printerBT,
|
||||
this.printerEncoding,
|
||||
this.printerPaperSize});
|
||||
|
||||
//read hive
|
||||
factory SettingState.initial(SettingState payload) {
|
||||
return SettingState(
|
||||
mode: payload?.mode ?? SettingModeKassa,
|
||||
tradeType: payload?.tradeType ?? SettingTradeTypeGood);
|
||||
tradeType: payload?.tradeType ?? SettingTradeTypeGood,
|
||||
pinCode: payload?.pinCode ?? null,
|
||||
pinLocked: true,
|
||||
pinSkip: false,
|
||||
printerBT: payload?.printerBT ?? null,
|
||||
printerEncoding:
|
||||
payload?.printerEncoding ?? SettingPrinterEncodingCp866,
|
||||
printerPaperSize: payload?.printerPaperSize ?? SettingPrinterPaperM58
|
||||
);
|
||||
}
|
||||
|
||||
//write hive
|
||||
SettingState copyWith({
|
||||
@required mode,
|
||||
@required tradeType,
|
||||
@required pinCode,
|
||||
@required pinLocked,
|
||||
@required pinSkip,
|
||||
@required printerBT,
|
||||
@required printerEncoding,
|
||||
@required printerPaperSize,
|
||||
}) {
|
||||
return SettingState(
|
||||
mode: mode ?? this.mode,
|
||||
tradeType: tradeType ?? this.tradeType,
|
||||
pinCode: pinCode ?? this.pinCode,
|
||||
pinLocked: pinLocked ?? this.pinLocked,
|
||||
pinSkip: pinSkip ?? this.pinSkip,
|
||||
printerBT: printerBT ?? this.printerBT,
|
||||
printerEncoding: printerEncoding ?? this.printerEncoding,
|
||||
printerPaperSize: printerPaperSize ?? this.printerPaperSize
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -31,11 +61,28 @@ class SettingState {
|
|||
? SettingState(
|
||||
tradeType: json['tradeType'],
|
||||
mode: json['mode'],
|
||||
pinCode: json['pinCode'],
|
||||
pinLocked: json['pinLocked'],
|
||||
pinSkip: json['pinSkip'],
|
||||
printerEncoding: json['printerEncoding'],
|
||||
printerPaperSize: json['printerPaperSize'],
|
||||
printerBT: json['printerBT'] != null
|
||||
? BluetoothDevice.fromJson(json['printerBT'])
|
||||
: null,
|
||||
)
|
||||
: null;
|
||||
}
|
||||
|
||||
dynamic toJson() {
|
||||
return {"tradeType": tradeType, "mode": mode};
|
||||
return {
|
||||
"tradeType": tradeType,
|
||||
"mode": mode,
|
||||
"pinCode": pinCode,
|
||||
"pinLocked" : pinLocked,
|
||||
"pinSkip" : pinSkip,
|
||||
"printerBT": printerBT != null ? printerBT.toJson() : null,
|
||||
"printerEncoding": printerEncoding,
|
||||
"printerPaperSize": printerPaperSize,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ class UserState {
|
|||
final Smena smena;
|
||||
final Money money;
|
||||
|
||||
|
||||
UserState(
|
||||
{this.isError,
|
||||
this.isLoading,
|
||||
|
|
@ -26,7 +27,8 @@ class UserState {
|
|||
this.user,
|
||||
this.loginFormMessage,
|
||||
this.smena,
|
||||
this.money});
|
||||
this.money,
|
||||
});
|
||||
|
||||
factory UserState.initial(UserState payload) => UserState(
|
||||
isLoading: false,
|
||||
|
|
@ -73,7 +75,8 @@ class UserState {
|
|||
user: User.fromJson(json['user']),
|
||||
authenticateType: json['authenticateType'],
|
||||
login: json['login'],
|
||||
password: json['password'])
|
||||
password: json['password'],
|
||||
)
|
||||
: null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
|||
import 'dart:io';
|
||||
import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
|
||||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_image_modal.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/aman_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/card_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/dialog_models.dart';
|
||||
|
|
@ -9,31 +10,109 @@ import 'package:aman_kassa_flutter/core/route_names.dart';
|
|||
import 'package:aman_kassa_flutter/core/services/BankService.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/dialog_service.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/navigator_service.dart';
|
||||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||
import 'package:aman_kassa_flutter/redux/state/setting_state.dart';
|
||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||
import 'package:aman_kassa_flutter/shared/app_colors.dart';
|
||||
import 'package:aman_kassa_flutter/shared/ui_helpers.dart';
|
||||
import 'package:aman_kassa_flutter/views/settings/printer/PrinterTest.dart';
|
||||
import 'package:aman_kassa_flutter/views/payment/payment_view.dart';
|
||||
import 'package:aman_kassa_flutter/widgets/fields/busy_button_icon.dart';
|
||||
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
|
||||
import 'package:esc_pos_utils/esc_pos_utils.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
|
||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||
import 'package:esys_flutter_share/esys_flutter_share.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
class ImageShowContainer extends StatelessWidget {
|
||||
final ImageShowModel data;
|
||||
class ImageShowContainer extends StatefulWidget {
|
||||
final ImageShowModel showModel;
|
||||
|
||||
ImageShowContainer(this.data);
|
||||
ImageShowContainer(this.showModel);
|
||||
|
||||
@override
|
||||
_ImageShowContainerState createState() => _ImageShowContainerState();
|
||||
}
|
||||
|
||||
class _ImageShowContainerState extends State<ImageShowContainer> {
|
||||
final PrinterBluetoothManager printerManager = PrinterBluetoothManager();
|
||||
final DialogService _dialogService = locator<DialogService>();
|
||||
final BluetoothDevice printerBtDevice = Redux.store.state.settingState.printerBT;
|
||||
|
||||
bool _printing = false;
|
||||
|
||||
void _print() async {
|
||||
final SettingState state = Redux.store.state.settingState;
|
||||
if(state.printerBT == null) {
|
||||
_dialogService.showDialog(description: 'Укажите в настройках принтер для печати чеков');
|
||||
return;
|
||||
}
|
||||
|
||||
setState(() {
|
||||
_printing = true;
|
||||
});
|
||||
try {
|
||||
printerManager.selectPrinter(PrinterBluetooth(state.printerBT));
|
||||
PaperSize paper = state.printerPaperSize == SettingPrinterPaperM80
|
||||
? PaperSize.mm80
|
||||
: PaperSize.mm58;
|
||||
if (SettingPrinterEncodingImage == state.printerEncoding) {
|
||||
final PosPrintResult res = await printerManager.printTicket(
|
||||
await printImageCheck(paper, widget.showModel.data.base64Data),
|
||||
chunkSizeBytes: 3096,
|
||||
queueSleepTimeMs: 50);
|
||||
if (res.value != 1) {
|
||||
_dialogService.showDialog(description: res.msg);
|
||||
}
|
||||
} else {
|
||||
final PosPrintResult res = await printerManager.printTicket(
|
||||
await printTextCheck(
|
||||
paper, state.printerEncoding,
|
||||
jsonDecode(widget.showModel.data.textData)),
|
||||
chunkSizeBytes: 3096,
|
||||
queueSleepTimeMs: 50);
|
||||
if (res.value != 1) {
|
||||
_dialogService.showDialog(description: res.msg);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
setState(() {
|
||||
_printing = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
//backgroundColor: fillColor,
|
||||
title: Text(data.title),
|
||||
title: Text(widget.showModel.title),
|
||||
actions: [
|
||||
if(_printing)
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(right: 8.0),
|
||||
child: SizedBox(
|
||||
width: 36.0,
|
||||
child: Center(
|
||||
child: CircularProgressIndicator(
|
||||
strokeWidth: 2,
|
||||
valueColor: new AlwaysStoppedAnimation<Color>(
|
||||
whiteColor),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
else
|
||||
IconButton(icon: Icon(Icons.print), onPressed: _print)
|
||||
],
|
||||
),
|
||||
body: ListView(
|
||||
children: <Widget>[imageFromBase64String(data.data)],
|
||||
children: <Widget>[imageFromBase64String(widget.showModel.data.base64Data)],
|
||||
),
|
||||
floatingActionButton: MyFloatingActionButton(data),
|
||||
floatingActionButton: MyFloatingActionButton(widget.showModel),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -46,7 +125,7 @@ Padding imageFromBase64String(String base64String) {
|
|||
}
|
||||
|
||||
class ImageShowModel {
|
||||
final String data;
|
||||
final CheckImageModal data;
|
||||
final String title;
|
||||
final String url;
|
||||
final CardData cardData;
|
||||
|
|
@ -68,93 +147,71 @@ class _MyFloatingActionButtonState extends State<MyFloatingActionButton> {
|
|||
NavigatorService _navigatorService = locator<NavigatorService>();
|
||||
|
||||
|
||||
double sheetHeight = 260;
|
||||
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (showFab) {
|
||||
return Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
if (widget.data.cardData != null && widget.data.cardData.transactionType == "payment") FloatingActionButton(
|
||||
backgroundColor: redColor,
|
||||
child: Icon(
|
||||
Icons.settings_backup_restore,
|
||||
color: whiteColor,
|
||||
),
|
||||
onPressed: () {
|
||||
_navigatorService.replace(HomeViewRoute);
|
||||
PaymentModel model = new PaymentModel(voucher: widget.data.voucher, cardData: widget.data.cardData);
|
||||
_navigatorService.push(PaymentNfcViewRoute,
|
||||
arguments: model);
|
||||
},
|
||||
heroTag: null,
|
||||
) else SizedBox(
|
||||
height: 0,
|
||||
),
|
||||
SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
FloatingActionButton(
|
||||
child: Icon(Icons.share),
|
||||
onPressed: () {
|
||||
var bottomSheetController = showBottomSheet(
|
||||
context: context,
|
||||
builder: (bottomSheetContext) => Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(15)),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
blurRadius: 10,
|
||||
color: Colors.grey[300],
|
||||
spreadRadius: 5)
|
||||
]),
|
||||
height: 260,
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
verticalSpaceSmall,
|
||||
BusyButtonIcon(
|
||||
title: 'WhatsApp',
|
||||
onPressed: callWhatsApp,
|
||||
mainColor: greenColor,
|
||||
icon: MdiIcons.whatsapp,
|
||||
enabled: widget.data.url != null,
|
||||
),
|
||||
verticalSpaceSmall,
|
||||
BusyButtonIcon(
|
||||
title: 'QR-код чека',
|
||||
onPressed: qrGenerate,
|
||||
mainColor: primaryColor,
|
||||
icon: MdiIcons.qrcode,
|
||||
enabled: widget.data.url != null,
|
||||
),
|
||||
verticalSpaceSmall,
|
||||
BusyButtonIcon(
|
||||
title: 'Поделиться',
|
||||
onPressed: shareFile,
|
||||
mainColor: yellowColor,
|
||||
icon: Icons.share,
|
||||
),
|
||||
],
|
||||
)));
|
||||
showFloatingActionButton(false);
|
||||
bottomSheetController.closed.then((value) {
|
||||
showFloatingActionButton(true);
|
||||
});
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
} else {
|
||||
return Container();
|
||||
}
|
||||
|
||||
|
||||
return showFab
|
||||
? FloatingActionButton(
|
||||
child: Icon(Icons.share),
|
||||
onPressed: () {
|
||||
var bottomSheetController = showBottomSheet(
|
||||
context: context,
|
||||
builder: (bottomSheetContext) => Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(15)),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
blurRadius: 10,
|
||||
color: Colors.grey[300],
|
||||
spreadRadius: 5)
|
||||
]),
|
||||
height: sheetHeight,
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
verticalSpaceSmall,
|
||||
BusyButtonIcon(
|
||||
title: 'WhatsApp',
|
||||
onPressed: callWhatsApp,
|
||||
mainColor: greenColor,
|
||||
icon: MdiIcons.whatsapp,
|
||||
enabled: widget.data.url != null,
|
||||
),
|
||||
verticalSpaceSmall,
|
||||
BusyButtonIcon(
|
||||
title: 'QR-код чека',
|
||||
onPressed: qrGenerate,
|
||||
mainColor: primaryColor,
|
||||
icon: MdiIcons.qrcode,
|
||||
enabled: widget.data.url != null,
|
||||
),
|
||||
verticalSpaceSmall,
|
||||
BusyButtonIcon(
|
||||
title: 'Поделиться',
|
||||
onPressed: shareFile,
|
||||
mainColor: redColor,
|
||||
icon: Icons.share,
|
||||
),
|
||||
],
|
||||
)));
|
||||
bottomSheetController.closed.then((value) {
|
||||
showFloatingActionButton(true);
|
||||
});
|
||||
},
|
||||
)
|
||||
: Container();
|
||||
}
|
||||
|
||||
void shareFile() async {
|
||||
try {
|
||||
await Share.file('Aman Kassa', 'aman_kassa_check.png',
|
||||
base64Decode(widget.data.data), 'image/png');
|
||||
base64Decode(widget.data.data.base64Data), 'image/png');
|
||||
} catch (e) {
|
||||
print('error: $e');
|
||||
}
|
||||
|
|
@ -163,7 +220,7 @@ class _MyFloatingActionButtonState extends State<MyFloatingActionButton> {
|
|||
void qrGenerate() async {
|
||||
_navigatorService.push(QrViewRoute,
|
||||
arguments:
|
||||
ImageShowModel(data: widget.data.url, title: 'Спасибо за покупку'));
|
||||
ImageShowModel(url: widget.data.url, title: 'Спасибо за покупку'));
|
||||
}
|
||||
|
||||
void callWhatsApp() async {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
|||
|
||||
import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
|
||||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_image_modal.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/card_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/close_day_data.dart';
|
||||
|
|
@ -76,7 +77,13 @@ class _HistoryViewState extends State<HistoryView> {
|
|||
cardData = checkData.cardData;
|
||||
}
|
||||
|
||||
|
||||
String base64Data = voucher.base64Data;
|
||||
CheckImageModal checkImageData;
|
||||
if(base64Data !=null && base64Data.startsWith('{')){
|
||||
checkImageData = CheckImageModal.fromJson(jsonDecode(base64Data));
|
||||
} else {
|
||||
checkImageData = new CheckImageModal(base64Data: base64Data);
|
||||
}
|
||||
return ListTile(
|
||||
onTap: () {
|
||||
|
||||
|
|
@ -86,7 +93,7 @@ class _HistoryViewState extends State<HistoryView> {
|
|||
} else {
|
||||
_navigatorService.push(ImageShowRoute,
|
||||
arguments: ImageShowModel(
|
||||
data: voucher.base64Data,
|
||||
data: checkImageData,
|
||||
title: voucher.name,
|
||||
url: voucher.url,
|
||||
cardData: cardData,
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ class _PopupMenuState extends State<PopupMenu> {
|
|||
// const Choice(title: 'Bank', icon: Icons.text_fields, command: 'bank'),
|
||||
if (version >= 24 )
|
||||
const Choice(title: 'Настройка HalykPos', icon: Icons.phonelink_lock_outlined, command: 'tap2phone'),
|
||||
const Choice(title: 'Настройки', icon: Icons.settings, command: 'settings'),
|
||||
const Choice(title: 'Принтер', icon: Icons.print, command: 'print'),
|
||||
const Choice(title: 'Выйти', icon: Icons.exit_to_app, command: 'exit')
|
||||
];
|
||||
setState(() {
|
||||
|
|
|
|||
|
|
@ -6,31 +6,33 @@ import 'package:aman_kassa_flutter/core/route_names.dart';
|
|||
import 'package:aman_kassa_flutter/core/services/ApiService.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/DataService.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/navigator_service.dart';
|
||||
import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart';
|
||||
import 'package:aman_kassa_flutter/redux/actions/user_actions.dart';
|
||||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||
import 'package:aman_kassa_flutter/redux/state/setting_state.dart';
|
||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||
import 'package:aman_kassa_flutter/shared/app_colors.dart';
|
||||
import 'package:aman_kassa_flutter/views/home/components/header_title.dart';
|
||||
import 'package:aman_kassa_flutter/views/lockscreen/passcodescreen.dart';
|
||||
import 'package:aman_kassa_flutter/widgets/loader/Dialogs.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import './tabs/KassaTab.dart';
|
||||
import './tabs/AdditionalTab.dart';
|
||||
import './tabs/CalculatorTab.dart';
|
||||
|
||||
import './components/popup_menu.dart';
|
||||
import 'components/bottom_bar.dart';
|
||||
import './components/bottom_bar.dart';
|
||||
|
||||
class HomeView extends StatefulWidget {
|
||||
@override
|
||||
_HomeViewState createState() => _HomeViewState();
|
||||
}
|
||||
|
||||
class _HomeViewState extends State<HomeView> {
|
||||
class _HomeViewState extends State<HomeView> with WidgetsBindingObserver {
|
||||
Logger log = getLogger('HomeView');
|
||||
PageController pageController;
|
||||
int selectedTabIndex;
|
||||
|
|
@ -39,17 +41,101 @@ class _HomeViewState extends State<HomeView> {
|
|||
NavigatorService _navigatorService = locator<NavigatorService>();
|
||||
final GlobalKey<State> _keyLoader = new GlobalKey<State>();
|
||||
|
||||
final lastKnownStateKey = 'lastKnownStateKey';
|
||||
final backgroundedTimeKey = 'backgroundedTimeKey';
|
||||
final pinLockMillis = 2000; // 2 seconds
|
||||
|
||||
Future _paused() async {
|
||||
final sp = await SharedPreferences.getInstance();
|
||||
sp.setInt(lastKnownStateKey, AppLifecycleState.paused.index);
|
||||
}
|
||||
|
||||
Future _inactive() async {
|
||||
final sp = await SharedPreferences.getInstance();
|
||||
final prevState = sp.getInt(lastKnownStateKey);
|
||||
final prevStateIsNotPaused = prevState != null &&
|
||||
AppLifecycleState.values[prevState] != AppLifecycleState.paused;
|
||||
final bool pinIsExist = Redux.store.state.settingState?.pinCode?.isNotEmpty;
|
||||
final bool pinSkipped = Redux.store.state.settingState.pinSkip;
|
||||
print('prevStateIsNotPaused=$prevStateIsNotPaused, pinIsExist=$pinIsExist, pinSkipped=$pinSkipped');
|
||||
if(prevStateIsNotPaused && pinSkipped == false && pinIsExist == true) {
|
||||
// save App backgrounded time to Shared preferences
|
||||
sp.setInt(backgroundedTimeKey, DateTime.now().millisecondsSinceEpoch);
|
||||
}
|
||||
// update previous state as inactive
|
||||
sp.setInt(lastKnownStateKey, AppLifecycleState.inactive.index);
|
||||
}
|
||||
|
||||
Future _resumed() async {
|
||||
final sp = await SharedPreferences.getInstance();
|
||||
final bgTime = sp.getInt(backgroundedTimeKey) ?? 0;
|
||||
final allowedBackgroundTime = bgTime + pinLockMillis;
|
||||
final shouldShowPIN = DateTime.now().millisecondsSinceEpoch > allowedBackgroundTime;
|
||||
if(shouldShowPIN && bgTime > 0) {
|
||||
await Redux.store.dispatch(changePinLockedFromSetting(true));
|
||||
pushToLockScreen();
|
||||
}
|
||||
sp.remove(backgroundedTimeKey); // clean
|
||||
sp.setInt(lastKnownStateKey, AppLifecycleState.resumed.index);// previous state
|
||||
}
|
||||
|
||||
void pushToLockScreen() {
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (_) =>
|
||||
WillPopScope(
|
||||
onWillPop: () async {
|
||||
return false;
|
||||
},
|
||||
child: PassCodeScreen( title: 'Безопасность',)
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
_checkLockPin () async {
|
||||
final bool pinIsExist = Redux.store.state.settingState?.pinCode?.isNotEmpty;
|
||||
final bool pinLocked = Redux.store.state.settingState?.pinLocked;
|
||||
final sp = await SharedPreferences.getInstance();
|
||||
sp.remove(backgroundedTimeKey);
|
||||
sp.setInt(lastKnownStateKey, AppLifecycleState.resumed.index);// previous state
|
||||
if ( pinIsExist == true && pinLocked == true ) {
|
||||
await Future.delayed(Duration(milliseconds: 50));
|
||||
pushToLockScreen();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addObserver(this);
|
||||
selectedTabIndex = 0;
|
||||
pageController = new PageController(initialPage: selectedTabIndex);
|
||||
Redux.store.dispatch(checkSmena);
|
||||
_dataService.checkDbFill(Redux.store.state.userState.user);
|
||||
_checkLockPin();
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeAppLifecycleState(AppLifecycleState state) {
|
||||
super.didChangeAppLifecycleState(state);
|
||||
print('state = $state');
|
||||
switch(state) {
|
||||
case AppLifecycleState.resumed:
|
||||
_resumed();
|
||||
break;
|
||||
case AppLifecycleState.paused:
|
||||
_paused();
|
||||
break;
|
||||
case AppLifecycleState.inactive:
|
||||
_inactive();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
WidgetsBinding.instance.removeObserver(this);
|
||||
pageController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
|
@ -65,6 +151,10 @@ class _HomeViewState extends State<HomeView> {
|
|||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||
} else if (choice.command == 'infokkm') {
|
||||
_navigatorService.push(InfoKkmViewRoute);
|
||||
} else if (choice.command == 'settings') {
|
||||
_navigatorService.push(SettingsViewRoute);
|
||||
} else if (choice.command == 'print') {
|
||||
_navigatorService.push(SettingsPrinterRoute);
|
||||
} else if (choice.command == 'bank') {
|
||||
_navigatorService.push(BankViewRoute);
|
||||
} else if (choice.command == 'tap2phone') {
|
||||
|
|
@ -6,6 +6,7 @@ import 'package:aman_kassa_flutter/core/services/DataService.dart';
|
|||
import 'package:aman_kassa_flutter/core/services/dialog_service.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/navigator_service.dart';
|
||||
import 'package:aman_kassa_flutter/redux/actions/kassa_actions.dart';
|
||||
import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart';
|
||||
import 'package:aman_kassa_flutter/redux/constants/operation_const.dart';
|
||||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||
import 'package:aman_kassa_flutter/redux/state/kassa_state.dart';
|
||||
|
|
@ -183,6 +184,7 @@ class KassaTab extends StatelessWidget {
|
|||
|
||||
Future<void> scan() async {
|
||||
try {
|
||||
await Redux.store.dispatch(changePinSkipFromSetting(true));
|
||||
var options = ScanOptions(strings: {
|
||||
"cancel": 'Отмена',
|
||||
"flash_on": 'Вкл фонарик',
|
||||
|
|
@ -217,7 +219,7 @@ class KassaTab extends StatelessWidget {
|
|||
List<Good> goods =
|
||||
await _dataService.getGoodsByBarcode(barcode: barcode);
|
||||
if (goods != null && goods.isNotEmpty) {
|
||||
Redux.store.dispatch(addProductToKassaItems(goods.first, dataMatrix));
|
||||
await Redux.store.dispatch(addProductToKassaItems(goods.first, dataMatrix));
|
||||
} else {
|
||||
_dialogService.showDialog(
|
||||
description: 'Товар не найден: $barcode');
|
||||
|
|
@ -238,6 +240,8 @@ class KassaTab extends StatelessWidget {
|
|||
result.rawContent = 'Unknown error: $e';
|
||||
_dialogService.showDialog(description: 'Неизвестная ошибка: $e');
|
||||
}
|
||||
} finally {
|
||||
await Redux.store.dispatch(changePinSkipFromSetting(false));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,79 @@
|
|||
import 'package:aman_kassa_flutter/core/route_names.dart';
|
||||
import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart';
|
||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_lock_screen/flutter_lock_screen.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/navigator_service.dart';
|
||||
|
||||
class PassCodeScreen extends StatefulWidget {
|
||||
PassCodeScreen({Key key, this.title}) : super(key: key);
|
||||
|
||||
final String title;
|
||||
|
||||
@override
|
||||
_PassCodeScreenState createState() => new _PassCodeScreenState();
|
||||
}
|
||||
|
||||
class _PassCodeScreenState extends State<PassCodeScreen> {
|
||||
// bool isFingerprint = false;
|
||||
NavigatorService _navigatorService = locator<NavigatorService>();
|
||||
final backgroundedTimeKey = 'backgroundedTimeKey';
|
||||
|
||||
|
||||
// Future<Null> biometrics() async {
|
||||
// final LocalAuthentication auth = new LocalAuthentication();
|
||||
// bool authenticated = false;
|
||||
//
|
||||
// try {
|
||||
// authenticated = await auth.authenticateWithBiometrics(
|
||||
// localizedReason: 'Scan your fingerprint to authenticate',
|
||||
// useErrorDialogs: true,
|
||||
// stickyAuth: false);
|
||||
// } on PlatformException catch (e) {
|
||||
// print(e);
|
||||
// }
|
||||
// if (!mounted) return;
|
||||
// if (authenticated) {
|
||||
// setState(() {
|
||||
// isFingerprint = true;
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var myPass = [];
|
||||
String _pinCode = Redux.store.state.settingState.pinCode;
|
||||
for (var i = 0; i < _pinCode.length; i++) {
|
||||
myPass.add(int.parse(_pinCode[i]));
|
||||
}
|
||||
return LockScreen(
|
||||
title: "Введите ПИН-код",
|
||||
passLength: myPass.length,
|
||||
bgImage: "assets/images/secBg.jpg",
|
||||
// fingerPrintImage: "assets/images/finger.png",
|
||||
// showFingerPass: true,
|
||||
// fingerFunction: biometrics,
|
||||
// fingerVerify: isFingerprint,
|
||||
borderColor: Colors.white,
|
||||
showWrongPassDialog: true,
|
||||
wrongPassContent: "Неверный код, повторите попытку",
|
||||
wrongPassTitle: "Aman Kassa",
|
||||
wrongPassCancelButtonText: "Отмена",
|
||||
passCodeVerify: (passcode) async {
|
||||
for (int i = 0; i < myPass.length; i++) {
|
||||
if (passcode[i] != myPass[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
onSuccess: () {
|
||||
Redux.store.dispatch(changePinLockedFromSetting(false));
|
||||
_navigatorService.replace(HomeViewRoute);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,9 @@
|
|||
import 'dart:convert';
|
||||
import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
|
||||
|
||||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/calc_model.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_image_modal.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/card_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/product_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/response.dart';
|
||||
|
|
@ -281,6 +284,7 @@ class _PaymentViewState extends State<PaymentView> {
|
|||
if (response.operation) {
|
||||
String message = response.body['message'];
|
||||
String check = response.body['check'];
|
||||
var checkText = response.body['check_text'];
|
||||
String url = response?.body['link'];
|
||||
print('url : $url');
|
||||
if (_mode == SettingModeCalc) {
|
||||
|
|
@ -293,9 +297,8 @@ class _PaymentViewState extends State<PaymentView> {
|
|||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||
_navigatorService.pop();
|
||||
_navigatorService.push(ImageShowRoute,
|
||||
arguments: ImageShowModel(data: check, title: message, url: url));
|
||||
} else if (!response.operation &&
|
||||
![401, 402, 403, 412, 500].contains(response.status)) {
|
||||
arguments: ImageShowModel(data:new CheckImageModal(base64Data: check, textData: checkText !=null ? jsonEncode(checkText) : null ), title: message, url: url ));
|
||||
} else if (!response.operation && ![401, 402, 403, 412, 500].contains(response.status)) {
|
||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||
_dialogService.showDialog(description: response.body['message']);
|
||||
} else if(!response.operation && response.body['message'] != null) {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import 'package:aman_kassa_flutter/core/models/aman_dao.dart';
|
|||
import 'package:aman_kassa_flutter/core/models/calc_model.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/card_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_data.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/check_image_modal.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/halyk_post_session.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/product_dao.dart';
|
||||
import 'package:aman_kassa_flutter/core/models/response.dart';
|
||||
import 'package:aman_kassa_flutter/core/route_names.dart';
|
||||
|
|
@ -70,6 +72,19 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
|||
|
||||
void start() async {
|
||||
|
||||
//Авторизация
|
||||
String token = Redux.store.state.userState.user.token;
|
||||
BankState bankState = Redux.store.state.bankState;
|
||||
//права доступа
|
||||
HalykPosSession session = await _bankService.renewToken(token: token, login: bankState.login, password: bankState.password);
|
||||
log.i(session);
|
||||
if ('1' == '1') {
|
||||
setState(() {
|
||||
status = 4;
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//права доступа
|
||||
bool success = await _bankService.permissions();
|
||||
|
|
@ -114,8 +129,7 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
|||
});
|
||||
return;
|
||||
}
|
||||
//Авторизация
|
||||
BankState bankState = Redux.store.state.bankState;
|
||||
|
||||
AmanDao authDao = await _bankService.auth(
|
||||
login: bankState.login, password: bankState.password);
|
||||
if (!authDao.success) {
|
||||
|
|
@ -276,6 +290,7 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
|||
if (response.operation) {
|
||||
String message = response.body['message'];
|
||||
String check = response.body['check'];
|
||||
var checkText = response.body['check_text'];
|
||||
String url = response?.body['link'];
|
||||
print('url : $url');
|
||||
if (_mode == SettingModeCalc) {
|
||||
|
|
@ -288,11 +303,11 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
|||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||
_navigatorService.replace(HomeViewRoute);
|
||||
_navigatorService.push(ImageShowRoute,
|
||||
arguments: ImageShowModel(data: check, title: message, url: url));
|
||||
arguments: ImageShowModel(data: new CheckImageModal(base64Data: check, textData: checkText !=null ? jsonEncode(checkText) : null ), title: message, url: url));
|
||||
} else if (!response.operation &&
|
||||
![401, 402, 403, 412, 500].contains(response.status)) {
|
||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||
_dialogService.showDialog(description: response.body['message']);
|
||||
_dialogService.showDialog(description: response.body['message']);
|
||||
} else {
|
||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||
}
|
||||
|
|
@ -332,6 +347,7 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
|||
if (response.operation) {
|
||||
String message = response.body['message'];
|
||||
String check = response.body['check'];
|
||||
var checkText = response.body['check_text'];
|
||||
String url = response?.body['link'];
|
||||
print('url : $url');
|
||||
Redux.store.dispatch(checkMoney);
|
||||
|
|
@ -339,7 +355,7 @@ class _PaymentNfcViewState extends State<PaymentNfcView> {
|
|||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||
_navigatorService.replace(HomeViewRoute);
|
||||
_navigatorService.push(ImageShowRoute,
|
||||
arguments: ImageShowModel(data: check, title: message, url: url));
|
||||
arguments: ImageShowModel(data: new CheckImageModal(base64Data: check, textData: checkText !=null ? jsonEncode(checkText) : null ), title: message, url: url));
|
||||
} else if (!response.operation &&
|
||||
![401, 402, 403, 412, 500].contains(response.status)) {
|
||||
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class _QrViewState extends State<QrView> {
|
|||
body: Container(
|
||||
child: Center(
|
||||
child: QrImage(
|
||||
data: widget.data.data,
|
||||
data: widget.data.url,
|
||||
version: QrVersions.auto,
|
||||
size: 220.0,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,37 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
class SettingItem extends StatefulWidget {
|
||||
|
||||
final String name;
|
||||
final String value;
|
||||
final String title;
|
||||
final Function onTap;
|
||||
|
||||
SettingItem({Key key, this.name, this.value, this.onTap, this.title }) : super(key: key);
|
||||
|
||||
@override
|
||||
_SettingItemState createState() => _SettingItemState();
|
||||
}
|
||||
|
||||
class _SettingItemState extends State<SettingItem> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Card(
|
||||
child: ListTile(
|
||||
title: Text(widget.title),
|
||||
subtitle: Text.rich(
|
||||
TextSpan(
|
||||
text: widget.name,
|
||||
style: TextStyle(fontWeight: FontWeight.w500),
|
||||
children: <TextSpan>[
|
||||
if(widget.value !=null)
|
||||
TextSpan(text: ' ${widget.value}', style: TextStyle(fontStyle: FontStyle.italic)),
|
||||
],
|
||||
)
|
||||
),
|
||||
trailing: Icon(Icons.chevron_right),
|
||||
onTap: widget.onTap,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,229 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||
import 'package:charset_converter/charset_converter.dart';
|
||||
import 'package:esc_pos_utils/esc_pos_utils.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:image/image.dart' as Im;
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:qr_flutter/qr_flutter.dart';
|
||||
|
||||
Future<Ticket> testTicket(PaperSize paper) async {
|
||||
final Ticket ticket = Ticket(paper);
|
||||
|
||||
//Uint8List encTxt11 = await CharsetConverter.encode("cp866", "Russian: Привет Мир!");
|
||||
//ticket.textEncoded(encTxt11, styles: PosStyles(codeTable: PosCodeTable.pc866_2));
|
||||
//ticket.textEncoded(encTxt11);
|
||||
|
||||
// ticket.text('Special 1: àÀ', styles: PosStyles(codeTable: PosCodeTable.westEur)); //А
|
||||
// ticket.text('Special 1: á'.toUpperCase(), styles: PosStyles(codeTable: PosCodeTable.westEur));// Б
|
||||
// ticket.text('Special 1: â', styles: PosStyles(codeTable: PosCodeTable.westEur)); //В
|
||||
// ticket.text('Special 1: ã', styles: PosStyles(codeTable: PosCodeTable.westEur));// Г
|
||||
// ticket.text('Special 1: äÄ', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Д
|
||||
// ticket.text('Special 1: å', styles: PosStyles(codeTable: PosCodeTable.westEur));// Е
|
||||
// ticket.text('Special 1: æÆ', styles: PosStyles(codeTable: PosCodeTable.westEur));// Ж
|
||||
// ticket.text('Special 1: ç', styles: PosStyles(codeTable: PosCodeTable.westEur));//З
|
||||
// ticket.text('Special 1: èÈ', styles: PosStyles(codeTable: PosCodeTable.westEur)); // И
|
||||
// ticket.text('Special 1: éÉ', styles: PosStyles(codeTable: PosCodeTable.westEur)); // Й
|
||||
// ticket.text('Special 1: ê', styles: PosStyles(codeTable: PosCodeTable.westEur));//К
|
||||
// ticket.text('Special 1: ëË', styles: PosStyles(codeTable: PosCodeTable.westEur)); // Л
|
||||
// ticket.text('Special 1: ìÌ', styles: PosStyles(codeTable: PosCodeTable.westEur));// M
|
||||
// ticket.text('Special 1: íÍ', styles: PosStyles(codeTable: PosCodeTable.westEur)); // Н
|
||||
// ticket.text('Special 1: î', styles: PosStyles(codeTable: PosCodeTable.westEur));// О
|
||||
// ticket.text('Special 1: ï', styles: PosStyles(codeTable: PosCodeTable.westEur)); // П
|
||||
// ticket.text('Special 1: ð', styles: PosStyles(codeTable: PosCodeTable.westEur));// Р
|
||||
// ticket.text('Special 1: ñ', styles: PosStyles(codeTable: PosCodeTable.westEur));// С
|
||||
// ticket.text('Special 1: ò', styles: PosStyles(codeTable: PosCodeTable.westEur)); // Т
|
||||
// ticket.text('Special 1: óÓ', styles: PosStyles(codeTable: PosCodeTable.westEur)); //У
|
||||
// ticket.text('Special 1: ô', styles: PosStyles(codeTable: PosCodeTable.westEur));// Ф
|
||||
// ticket.text('Special 1: õÕ', styles: PosStyles(codeTable: PosCodeTable.westEur));// Х
|
||||
// ticket.text('Special 1: ö', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Ц
|
||||
// ticket.text('Special 1: ÷', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Ч
|
||||
// ticket.text('Special 1: ø', styles: PosStyles(codeTable: PosCodeTable.westEur));//Ш
|
||||
// ticket.text('Special 1: ù', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Щ
|
||||
// ticket.text('Special 1: ú', styles: PosStyles(codeTable: PosCodeTable.westEur));//Ъ
|
||||
// ticket.text('Special 1: û', styles: PosStyles(codeTable: PosCodeTable.westEur));//Ы
|
||||
// ticket.text('Special 1: üÜ', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Ь
|
||||
// ticket.text('Special 1: ý', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Э
|
||||
// ticket.text('Special 1: þ', styles: PosStyles(codeTable: PosCodeTable.westEur)); // ю
|
||||
// ticket.text('Special 1: ÿß', styles: PosStyles(codeTable: PosCodeTable.westEur)); //Я
|
||||
|
||||
// Uint8List encTxt11 = await CharsetConverter.encode("cp866", "Russian: Привет Мир!");
|
||||
// //ticket.textEncoded(encTxt11, styles: PosStyles(codeTable: PosCodeTable.pc866_2));
|
||||
// ticket.textEncoded(encTxt11);
|
||||
|
||||
ticket.text(
|
||||
'Regular: aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ');
|
||||
//ticket.text('Special 1: àÀ èÈ éÉ ûÛ üÜ çÇ ôÔ', styles: PosStyles(codeTable: PosCodeTable.westEur));
|
||||
//ticket.text('Special 2: blåbærgrød', styles: PosStyles(codeTable: PosCodeTable.westEur));
|
||||
|
||||
ticket.text('Bold text', styles: PosStyles(bold: true));
|
||||
ticket.text('Reverse text', styles: PosStyles(reverse: true));
|
||||
ticket.text('Underlined text',
|
||||
styles: PosStyles(underline: true), linesAfter: 1);
|
||||
ticket.text('Align left', styles: PosStyles(align: PosAlign.left));
|
||||
ticket.text('Align center', styles: PosStyles(align: PosAlign.center));
|
||||
ticket.text('Align right',
|
||||
styles: PosStyles(align: PosAlign.right), linesAfter: 1);
|
||||
|
||||
ticket.row([
|
||||
PosColumn(
|
||||
text: 'col3',
|
||||
width: 3,
|
||||
styles: PosStyles(align: PosAlign.center, underline: true),
|
||||
),
|
||||
PosColumn(
|
||||
text: 'col6',
|
||||
width: 6,
|
||||
styles: PosStyles(align: PosAlign.center, underline: true),
|
||||
),
|
||||
PosColumn(
|
||||
text: 'col3',
|
||||
width: 3,
|
||||
styles: PosStyles(align: PosAlign.center, underline: true),
|
||||
),
|
||||
]);
|
||||
|
||||
ticket.text('Text size 200%',
|
||||
styles: PosStyles(
|
||||
height: PosTextSize.size2,
|
||||
width: PosTextSize.size2,
|
||||
));
|
||||
|
||||
// Print image
|
||||
//final ByteData data = await rootBundle.load('assets/images/logo.png');
|
||||
//final Uint8List bytes = data.buffer.asUint8List();
|
||||
// Print image using alternative commands
|
||||
// ticket.imageRaster(image);
|
||||
// ticket.imageRaster(image, imageFn: PosImageFn.graphics);
|
||||
|
||||
// Print barcode
|
||||
final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
|
||||
ticket.barcode(Barcode.upcA(barData));
|
||||
|
||||
|
||||
|
||||
ticket.feed(2);
|
||||
|
||||
ticket.cut();
|
||||
return ticket;
|
||||
}
|
||||
|
||||
Future<Ticket> testTicketImage(PaperSize paper) async {
|
||||
final Ticket ticket = Ticket(paper);
|
||||
|
||||
// Print image
|
||||
final ByteData byteData = await rootBundle.load('assets/images/check.png');
|
||||
final Uint8List bytes = byteData.buffer.asUint8List();
|
||||
final Im.Image imagea = Im.decodeImage(bytes);
|
||||
// Using `ESC *`
|
||||
//ticket.image(imagea);
|
||||
// Using `GS v 0` (obsolete)
|
||||
//ticket.imageRaster(imagea);
|
||||
// Using `GS ( L`
|
||||
ticket.imageRaster(imagea, imageFn: PosImageFn.bitImageRaster);
|
||||
|
||||
|
||||
|
||||
ticket.feed(2);
|
||||
|
||||
ticket.cut();
|
||||
return ticket;
|
||||
}
|
||||
|
||||
Future<Ticket> printImageCheck(PaperSize paper, String base64Src) async {
|
||||
final Ticket ticket = Ticket(paper);
|
||||
final Uint8List bytes = base64Decode(base64Src);
|
||||
final Im.Image image = Im.decodeImage(bytes);
|
||||
//ticket.imageRaster(image, imageFn: PosImageFn.bitImageRaster);
|
||||
ticket.image(image);
|
||||
ticket.feed(2);
|
||||
ticket.cut();
|
||||
return ticket;
|
||||
}
|
||||
|
||||
|
||||
Future<Ticket> printTextCheck(PaperSize paper, String encoding, var data ) async {
|
||||
final Ticket ticket = Ticket(paper);
|
||||
|
||||
|
||||
|
||||
PosCodeTable codeTable;
|
||||
if(encoding == SettingPrinterEncodingCp866) {
|
||||
codeTable = PosCodeTable.pc866_2;
|
||||
} else if(encoding == SettingPrinterEncodingWin1251) {
|
||||
codeTable = PosCodeTable.wpc1251;
|
||||
}
|
||||
|
||||
ticket.setGlobalCodeTable(codeTable);
|
||||
ticket.setGlobalFont(PosFontType.fontB);
|
||||
|
||||
|
||||
String qr = data['qr'];
|
||||
|
||||
|
||||
List<dynamic> rows = data['rows'] as List;
|
||||
for(dynamic element in rows) {
|
||||
var text = element['text'];
|
||||
int size = element['size'] as int;
|
||||
bool center = element['center'] !=null ? element['center'] as bool : false;
|
||||
if(text is List) {
|
||||
Uint8List firstCol = await CharsetConverter.encode(encoding, (text).first as String);
|
||||
Uint8List lastCol = await CharsetConverter.encode(encoding, (text).last as String);
|
||||
ticket.row([
|
||||
PosColumn(
|
||||
textEncoded: firstCol,
|
||||
width: 6,
|
||||
styles: PosStyles(align: PosAlign.left),
|
||||
),
|
||||
PosColumn(
|
||||
textEncoded: lastCol,
|
||||
width: 6,
|
||||
styles: PosStyles(align: PosAlign.right),
|
||||
),
|
||||
]);
|
||||
} else {
|
||||
String line = text as String;
|
||||
if(line == 'breakline') {
|
||||
ticket.hr();
|
||||
} else if(line == 'br') {
|
||||
ticket.emptyLines(1);
|
||||
} else {
|
||||
Uint8List encTxt11 = await CharsetConverter.encode(encoding, line);
|
||||
ticket.textEncoded( encTxt11, styles: PosStyles( align: center ? PosAlign.center : PosAlign.left ));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Print barcode
|
||||
//final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
|
||||
//ticket.barcode(Barcode.upcA(barData));
|
||||
//ticket.qrcode(qr, align: PosAlign.center);
|
||||
ticket.emptyLines(1);
|
||||
const double qrSize = 200;
|
||||
try {
|
||||
final uiImg = await QrPainter(
|
||||
data: qr,
|
||||
version: QrVersions.auto,
|
||||
gapless: false,
|
||||
).toImageData(qrSize);
|
||||
final dir = await getTemporaryDirectory();
|
||||
final pathName = '${dir.path}/qr_tmp.png';
|
||||
final qrFile = File(pathName);
|
||||
final imgFile = await qrFile.writeAsBytes(uiImg.buffer.asUint8List());
|
||||
final img = Im.decodeImage(imgFile.readAsBytesSync());
|
||||
|
||||
ticket.image(img);
|
||||
} catch (e) {
|
||||
print(e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
ticket.feed(2);
|
||||
|
||||
ticket.cut();
|
||||
return ticket;
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||
|
||||
var encoding = {
|
||||
SettingPrinterEncodingCp866: "CP-866",
|
||||
SettingPrinterEncodingWin1251: "Windows-1251",
|
||||
SettingPrinterEncodingImage: "Big-Encoding",
|
||||
};
|
||||
|
||||
var paperSize = {
|
||||
SettingPrinterPaperM58: "58 мм",
|
||||
SettingPrinterPaperM80: "80 мм"
|
||||
};
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
var exampleJson = {
|
||||
"check_text": {
|
||||
"rows": [
|
||||
{"size": 14, "text": "", "center": true},
|
||||
{"size": 15, "text": "breakline", "center": true},
|
||||
{"size": 14, "text": "ТОО «Aman Systems»"},
|
||||
{"size": 14, "text": "ИИН/БИН: 180640018960"},
|
||||
{"size": 14, "text": "Сер. номер ККМ: TEST00000005"},
|
||||
{"size": 14, "text": "Регистрационный номер: 123132132323"},
|
||||
{"size": 14, "text": "Коргальджинское шоссе, д.19 оф.308"},
|
||||
{"size": 15, "text": "breakline", "center": true},
|
||||
{"size": 14, "text": "Продажа,Наличные, ", "center": true},
|
||||
{"size": 15, "text": "ФИСКАЛЬНЫЙ ЧЕК №16580", "center": true},
|
||||
{"size": 15, "text": "ФП 471369529060", "center": true},
|
||||
{"size": 15, "text": "Дата: 03.03.2021 23:16", "center": true},
|
||||
{"size": 15, "text": "breakline", "center": true},
|
||||
{"size": 14, "text": "Кассир: Амантай ИХ"},
|
||||
{"size": 14, "text": "Касса: Касса 1"},
|
||||
{"size": 15, "text": "breakline", "center": true},
|
||||
{"size": 15, "text": "br"},
|
||||
{"size": 14, "text": "1. test"},
|
||||
{"size": 14, "text": "200,00 x 1 = 200,00"},
|
||||
{"size": 10, "text": "br"},
|
||||
{"size": 15, "text": "breakline"},
|
||||
{
|
||||
"size": 17,
|
||||
"text": ["ИТОГО:", "200,00"]
|
||||
},
|
||||
{
|
||||
"size": 14,
|
||||
"text": ["Наличные", "200,00"]
|
||||
},
|
||||
{"size": 15, "text": "breakline"},
|
||||
{"size": 17, "text": "В том числе НДС:"},
|
||||
{
|
||||
"size": 14,
|
||||
"text": ["12 %", "21,43"]
|
||||
},
|
||||
{"size": 14, "text": ""},
|
||||
{"size": 15, "text": "breakline"},
|
||||
{"size": 15, "text": "ОФД АО \"Транстелеком\"", "center": true},
|
||||
{"size": 15, "text": "ofd1.kz", "center": true},
|
||||
{"size": 14, "text": ""},
|
||||
{"size": 15, "text": "breakline"},
|
||||
{"size": 14, "text": "", "center": true},
|
||||
{"size": 13, "text": "порядковый номер чека:19800", "center": true},
|
||||
{"size": 14, "text": "Онлайн касса Aman", "center": true},
|
||||
{"size": 14, "text": "kassa.aman.com.kz", "center": true}
|
||||
],
|
||||
"qr":
|
||||
"87.255.215.94:4000/t/?i=471369529060&f=123132132323&s=200.0&t=20210303T231651"
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
import 'dart:async';
|
||||
import 'dart:typed_data';
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
import 'package:aman_kassa_flutter/core/logger.dart';
|
||||
import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart';
|
||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||
|
||||
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
|
||||
import 'package:esc_pos_utils/esc_pos_utils.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart' hide Image;
|
||||
import 'package:flutter/rendering.dart';
|
||||
|
||||
|
||||
import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
|
||||
import '../data/settings_envi.dart';
|
||||
|
||||
|
||||
class PrinterEncodingView extends StatefulWidget {
|
||||
PrinterEncodingView({Key key, this.title}) : super(key: key);
|
||||
final String title;
|
||||
|
||||
@override
|
||||
_PrinterEncodingViewState createState() => _PrinterEncodingViewState();
|
||||
|
||||
}
|
||||
|
||||
class _PrinterEncodingViewState extends State<PrinterEncodingView> {
|
||||
|
||||
Logger _logger = getLogger('PrinterEncodingView');
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void _selectPrinter(String encoding, BuildContext context, ) async {
|
||||
_logger.i(encoding);
|
||||
await Redux.store.dispatch(selectPrinterEncodingFromSetting(encoding));
|
||||
Navigator.of(context).pop(false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Выберите кодировку'),
|
||||
),
|
||||
body: ListView.builder(
|
||||
itemCount: encoding.keys.length,
|
||||
itemBuilder: (BuildContext _, int index) {
|
||||
return InkWell(
|
||||
onTap: () => _selectPrinter(encoding.keys.elementAt(index), context),
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Container(
|
||||
height: 60,
|
||||
padding: EdgeInsets.only(left: 10),
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Icon(Icons.sort_by_alpha_outlined),
|
||||
SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(encoding.values.elementAt(index) ?? ''),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
Divider(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
import 'dart:async';
|
||||
import 'dart:typed_data';
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
import 'package:aman_kassa_flutter/core/logger.dart';
|
||||
import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart';
|
||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||
|
||||
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
|
||||
import 'package:esc_pos_utils/esc_pos_utils.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart' hide Image;
|
||||
import 'package:flutter/rendering.dart';
|
||||
|
||||
|
||||
import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
|
||||
import '../data/settings_envi.dart';
|
||||
|
||||
|
||||
class PrinterPaperView extends StatefulWidget {
|
||||
PrinterPaperView({Key key, this.title}) : super(key: key);
|
||||
final String title;
|
||||
|
||||
@override
|
||||
_PrinterEncodingViewState createState() => _PrinterEncodingViewState();
|
||||
|
||||
}
|
||||
|
||||
class _PrinterEncodingViewState extends State<PrinterPaperView> {
|
||||
|
||||
Logger _logger = getLogger('PrinterEncodingView');
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void _selectPaper(String paperSize, BuildContext context, ) async {
|
||||
_logger.i(encoding);
|
||||
await Redux.store.dispatch(selectPrinterPaperSizeFromSetting(paperSize));
|
||||
Navigator.of(context).pop(false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Выберите ширину ленты'),
|
||||
),
|
||||
body: ListView.builder(
|
||||
itemCount: paperSize.keys.length,
|
||||
itemBuilder: (BuildContext _, int index) {
|
||||
return InkWell(
|
||||
onTap: () => _selectPaper(paperSize.keys.elementAt(index), context),
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Container(
|
||||
height: 60,
|
||||
padding: EdgeInsets.only(left: 10),
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Icon(Icons.sort_by_alpha_outlined),
|
||||
SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(paperSize.values.elementAt(index) ?? ''),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
Divider(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,324 @@
|
|||
import 'dart:async';
|
||||
import 'dart:typed_data';
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
import 'package:aman_kassa_flutter/core/logger.dart';
|
||||
import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart';
|
||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||
|
||||
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
|
||||
import 'package:esc_pos_utils/esc_pos_utils.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart' hide Image;
|
||||
import 'package:flutter/rendering.dart';
|
||||
|
||||
|
||||
import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
|
||||
import '../PrinterTest.dart';
|
||||
|
||||
|
||||
class PrinterSelectView extends StatefulWidget {
|
||||
PrinterSelectView({Key key, this.title}) : super(key: key);
|
||||
final String title;
|
||||
|
||||
@override
|
||||
_PrinterSelectViewState createState() => _PrinterSelectViewState();
|
||||
|
||||
}
|
||||
|
||||
class _PrinterSelectViewState extends State<PrinterSelectView> {
|
||||
PrinterBluetoothManager printerManager = PrinterBluetoothManager();
|
||||
List<PrinterBluetooth> _devices = [];
|
||||
Logger _logger = getLogger('PrinterSelectView');
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
printerManager.scanResults.listen((devices) async {
|
||||
// print('UI: Devices found ${devices.length}');
|
||||
setState(() {
|
||||
_devices = devices;
|
||||
});
|
||||
});
|
||||
_startScanDevices();
|
||||
}
|
||||
|
||||
void _startScanDevices() {
|
||||
setState(() {
|
||||
_devices = [];
|
||||
});
|
||||
printerManager.startScan(Duration(seconds: 4));
|
||||
}
|
||||
|
||||
void _stopScanDevices() {
|
||||
printerManager.stopScan();
|
||||
}
|
||||
|
||||
Future<Ticket> demoReceipt(PaperSize paper) async {
|
||||
final Ticket ticket = Ticket(paper, );
|
||||
|
||||
// Print image
|
||||
// final ByteData data = await rootBundle.load('assets/images/aman_kassa_check.png');
|
||||
// final Uint8List bytes = data.buffer.asUint8List();
|
||||
// final Im.Image image = Im.decodeImage(bytes);
|
||||
// Im.Image thumbnail = Im.copyResize(image, width: 270);
|
||||
// ticket.image(thumbnail, align: PosAlign.center);
|
||||
|
||||
//ticket.imageRaster(image, align: PosAlign.center);
|
||||
|
||||
ticket.text('AMAN-SATU',
|
||||
styles: PosStyles(
|
||||
align: PosAlign.center,
|
||||
height: PosTextSize.size2,
|
||||
width: PosTextSize.size2,
|
||||
),
|
||||
linesAfter: 1);
|
||||
|
||||
ticket.text('889 Watson Lane', styles: PosStyles(align: PosAlign.center));
|
||||
ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, codeTable: PosCodeTable.westEur), containsChinese: true);
|
||||
ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, fontType: PosFontType.fontA), containsChinese: true);
|
||||
ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, fontType: PosFontType.fontB), containsChinese: true);
|
||||
ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, height: PosTextSize.size1), containsChinese: true);
|
||||
ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, width: PosTextSize.size2), containsChinese: true);
|
||||
ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, width: PosTextSize.size3), containsChinese: true);
|
||||
ticket.text('Русский язык', styles: PosStyles(align: PosAlign.center, width: PosTextSize.size4), containsChinese: true);
|
||||
ticket.text('Tel: 830-221-1234', styles: PosStyles(align: PosAlign.center));
|
||||
ticket.text('Web: www.example.com',
|
||||
styles: PosStyles(align: PosAlign.center), linesAfter: 1);
|
||||
|
||||
ticket.hr();
|
||||
ticket.row([
|
||||
PosColumn(text: 'Qty', width: 1),
|
||||
PosColumn(text: 'Item', width: 7),
|
||||
PosColumn(
|
||||
text: 'Price', width: 2, styles: PosStyles(align: PosAlign.right)),
|
||||
PosColumn(
|
||||
text: 'Total', width: 2, styles: PosStyles(align: PosAlign.right)),
|
||||
]);
|
||||
|
||||
ticket.row([
|
||||
PosColumn(text: '2', width: 1),
|
||||
PosColumn(text: 'ONION RINGS', width: 7),
|
||||
PosColumn(
|
||||
text: '0.99', width: 2, styles: PosStyles(align: PosAlign.right)),
|
||||
PosColumn(
|
||||
text: '1.98', width: 2, styles: PosStyles(align: PosAlign.right)),
|
||||
]);
|
||||
ticket.row([
|
||||
PosColumn(text: '1', width: 1),
|
||||
PosColumn(text: 'PIZZA', width: 7),
|
||||
PosColumn(
|
||||
text: '3.45', width: 2, styles: PosStyles(align: PosAlign.right)),
|
||||
PosColumn(
|
||||
text: '3.45', width: 2, styles: PosStyles(align: PosAlign.right)),
|
||||
]);
|
||||
ticket.row([
|
||||
PosColumn(text: '1', width: 1),
|
||||
PosColumn(text: 'SPRING ROLLS', width: 7),
|
||||
PosColumn(
|
||||
text: '2.99', width: 2, styles: PosStyles(align: PosAlign.right)),
|
||||
PosColumn(
|
||||
text: '2.99', width: 2, styles: PosStyles(align: PosAlign.right)),
|
||||
]);
|
||||
ticket.row([
|
||||
PosColumn(text: '3', width: 1),
|
||||
PosColumn(text: 'CRUNCHY STICKS', width: 7),
|
||||
PosColumn(
|
||||
text: '0.85', width: 2, styles: PosStyles(align: PosAlign.right)),
|
||||
PosColumn(
|
||||
text: '2.55', width: 2, styles: PosStyles(align: PosAlign.right)),
|
||||
]);
|
||||
ticket.hr();
|
||||
|
||||
ticket.row([
|
||||
PosColumn(
|
||||
text: 'TOTAL',
|
||||
width: 6,
|
||||
styles: PosStyles(
|
||||
height: PosTextSize.size2,
|
||||
width: PosTextSize.size2,
|
||||
)),
|
||||
PosColumn(
|
||||
text: '\$10.97',
|
||||
width: 6,
|
||||
styles: PosStyles(
|
||||
align: PosAlign.right,
|
||||
height: PosTextSize.size2,
|
||||
width: PosTextSize.size2,
|
||||
)),
|
||||
]);
|
||||
|
||||
ticket.hr(ch: '=', linesAfter: 1);
|
||||
|
||||
ticket.row([
|
||||
PosColumn(
|
||||
text: 'Cash',
|
||||
width: 7,
|
||||
styles: PosStyles(align: PosAlign.right, width: PosTextSize.size2)),
|
||||
PosColumn(
|
||||
text: '\$15.00',
|
||||
width: 5,
|
||||
styles: PosStyles(align: PosAlign.right, width: PosTextSize.size2)),
|
||||
]);
|
||||
ticket.row([
|
||||
PosColumn(
|
||||
text: 'Change',
|
||||
width: 7,
|
||||
styles: PosStyles(align: PosAlign.right, width: PosTextSize.size2)),
|
||||
PosColumn(
|
||||
text: '\$4.03',
|
||||
width: 5,
|
||||
styles: PosStyles(align: PosAlign.right, width: PosTextSize.size2)),
|
||||
]);
|
||||
|
||||
ticket.feed(2);
|
||||
ticket.text('Thank you!',
|
||||
styles: PosStyles(align: PosAlign.center, bold: true));
|
||||
|
||||
final now = DateTime.now();
|
||||
final formatter = DateFormat('MM/dd/yyyy H:m');
|
||||
final String timestamp = formatter.format(now);
|
||||
ticket.text(timestamp,
|
||||
styles: PosStyles(align: PosAlign.center), linesAfter: 2);
|
||||
|
||||
// Print QR Code from image
|
||||
// try {
|
||||
// const String qrData = 'example.com';
|
||||
// const double qrSize = 200;
|
||||
// final uiImg = await QrPainter(
|
||||
// data: qrData,
|
||||
// version: QrVersions.auto,
|
||||
// gapless: false,
|
||||
// ).toImageData(qrSize);
|
||||
// final dir = await getTemporaryDirectory();
|
||||
// final pathName = '${dir.path}/qr_tmp.png';
|
||||
// final qrFile = File(pathName);
|
||||
// final imgFile = await qrFile.writeAsBytes(uiImg.buffer.asUint8List());
|
||||
// final img = decodeImage(imgFile.readAsBytesSync());
|
||||
|
||||
// ticket.image(img);
|
||||
// } catch (e) {
|
||||
// print(e);
|
||||
// }
|
||||
|
||||
// Print QR Code using native function
|
||||
// ticket.qrcode('example.com');
|
||||
|
||||
ticket.feed(2);
|
||||
ticket.cut();
|
||||
return ticket;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _selectPrinter(PrinterBluetooth printer, BuildContext context, ) async {
|
||||
printerManager.selectPrinter(printer);
|
||||
_logger.i(printer.name);
|
||||
_logger.i(printer.address);
|
||||
|
||||
BluetoothDevice device = new BluetoothDevice()
|
||||
..address = printer.address
|
||||
..name=printer.name
|
||||
..type=printer.type;
|
||||
|
||||
await Redux.store.dispatch(selectPrinterFromSetting(device));
|
||||
Navigator.of(context).pop(false);
|
||||
}
|
||||
|
||||
void _testPrint(PrinterBluetooth printer) async {
|
||||
printerManager.selectPrinter(printer);
|
||||
|
||||
// TODO Don't forget to choose printer's paper
|
||||
const PaperSize paper = PaperSize.mm58;
|
||||
|
||||
// TEST PRINT
|
||||
// final PosPrintResult res =
|
||||
// await printerManager.printTicket(await testTicket(paper), queueSleepTimeMs: 50);
|
||||
|
||||
final PosPrintResult res =
|
||||
await printerManager.printTicket(
|
||||
await testTicketImage(paper),
|
||||
chunkSizeBytes: 1024,
|
||||
queueSleepTimeMs: 50
|
||||
);
|
||||
|
||||
// DEMO RECEIPT
|
||||
// final PosPrintResult res =
|
||||
// await printerManager.printTicket(await demoReceipt(paper) , queueSleepTimeMs: 50);
|
||||
|
||||
}
|
||||
|
||||
final key = GlobalKey();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return RepaintBoundary(
|
||||
key: key,
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Выберите принтер'),
|
||||
),
|
||||
body: ListView.builder(
|
||||
itemCount: _devices.length,
|
||||
itemBuilder: (BuildContext _, int index) {
|
||||
return InkWell(
|
||||
onTap: () => _selectPrinter(_devices[index], context),
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Container(
|
||||
height: 60,
|
||||
padding: EdgeInsets.only(left: 10),
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Icon(Icons.print),
|
||||
SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(_devices[index].name ?? ''),
|
||||
Text(_devices[index].address),
|
||||
Text(
|
||||
'Click to print a test receipt',
|
||||
style: TextStyle(color: Colors.grey[700]),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
Divider(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}),
|
||||
floatingActionButton: StreamBuilder<bool>(
|
||||
stream: printerManager.isScanningStream,
|
||||
initialData: false,
|
||||
builder: (c, snapshot) {
|
||||
if (snapshot.data) {
|
||||
return FloatingActionButton(
|
||||
child: Icon(Icons.stop),
|
||||
onPressed: _stopScanDevices,
|
||||
backgroundColor: Colors.red,
|
||||
);
|
||||
} else {
|
||||
return FloatingActionButton(
|
||||
child: Icon(Icons.search),
|
||||
onPressed: _startScanDevices,
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
import 'dart:typed_data';
|
||||
|
||||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
import 'package:aman_kassa_flutter/core/route_names.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/dialog_service.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/navigator_service.dart';
|
||||
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
|
||||
import 'package:aman_kassa_flutter/redux/state/setting_state.dart';
|
||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||
import 'package:aman_kassa_flutter/shared/app_colors.dart';
|
||||
import 'package:aman_kassa_flutter/widgets/fields/aman_icon_button_horizontal.dart';
|
||||
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
|
||||
import 'package:esc_pos_utils/esc_pos_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:aman_kassa_flutter/views/settings/printer/PrinterTest.dart';
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
|
||||
import 'component/setting_item.dart';
|
||||
import './printer/data/settings_envi.dart';
|
||||
import './printer/example/check_test.dart';
|
||||
|
||||
class SettingPrinterView extends StatefulWidget {
|
||||
@override
|
||||
_SettingPrinterViewState createState() => _SettingPrinterViewState();
|
||||
}
|
||||
|
||||
class _SettingPrinterViewState extends State<SettingPrinterView> {
|
||||
NavigatorService _navigatorService = locator<NavigatorService>();
|
||||
final DialogService _dialogService = locator<DialogService>();
|
||||
PrinterBluetoothManager printerManager = PrinterBluetoothManager();
|
||||
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
|
||||
void _testPrint() async {
|
||||
final SettingState state = Redux.store.state.settingState;
|
||||
printerManager.selectPrinter(PrinterBluetooth(state.printerBT));
|
||||
// TODO Don't forget to choose printer's paper
|
||||
PaperSize paper = state.printerPaperSize == SettingPrinterPaperM80 ? PaperSize.mm80 : PaperSize.mm58;
|
||||
if(SettingPrinterEncodingImage == state.printerEncoding) {
|
||||
final PosPrintResult res = await printerManager.printTicket(
|
||||
await testTicketImage(paper),
|
||||
chunkSizeBytes: 3096,
|
||||
queueSleepTimeMs: 50
|
||||
);
|
||||
_dialogService.showDialog(description: res.msg);
|
||||
} else {
|
||||
final PosPrintResult res = await printerManager.printTicket(
|
||||
await printTextCheck(paper, state.printerEncoding, exampleJson['check_text']),
|
||||
chunkSizeBytes: 3096,
|
||||
queueSleepTimeMs: 50
|
||||
);
|
||||
_dialogService.showDialog(description: res.msg);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Настройка принтера'),
|
||||
),
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
||||
child: StoreConnector<AppState, SettingState>(
|
||||
converter: (store) => store.state.settingState,
|
||||
builder: (context, vm) {
|
||||
return Column(
|
||||
children: [
|
||||
SettingItem(
|
||||
title: 'Принтер',
|
||||
name: vm.printerBT?.name,
|
||||
value: vm.printerBT != null
|
||||
? 'BT: ${vm.printerBT.address} '
|
||||
: 'не выбран',
|
||||
onTap: () {
|
||||
_navigatorService.push(SettingsPrinterBTRoute);
|
||||
}),
|
||||
SettingItem(
|
||||
title: 'Кодировка',
|
||||
name: vm.printerEncoding != null ? encoding[vm.printerEncoding] : null ,
|
||||
onTap: () {
|
||||
_navigatorService.push(SettingsPrinterEncodingRoute);
|
||||
}),
|
||||
SettingItem(
|
||||
title: 'Ширина ленты',
|
||||
name: vm.printerPaperSize != null ? paperSize[vm.printerPaperSize] : null ,
|
||||
onTap: () {
|
||||
_navigatorService.push(SettingsPrinterPaperRoute);
|
||||
}),
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(bottom: 24.0),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
AmanIconButtonHorizontal(
|
||||
icon: Icons.local_printshop_outlined,
|
||||
title: 'Напечатать тестовую страницу',
|
||||
activeColor: primaryColor,
|
||||
selected: vm.printerBT != null,
|
||||
onPressed: () {
|
||||
_testPrint();
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
import 'package:aman_kassa_flutter/core/locator.dart';
|
||||
import 'package:aman_kassa_flutter/core/services/dialog_service.dart';
|
||||
import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart';
|
||||
import 'package:aman_kassa_flutter/redux/state/setting_state.dart';
|
||||
import 'package:aman_kassa_flutter/redux/store.dart';
|
||||
import 'package:aman_kassa_flutter/shared/app_colors.dart';
|
||||
import 'package:aman_kassa_flutter/shared/ui_helpers.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class SettingView extends StatefulWidget {
|
||||
SettingView();
|
||||
|
||||
@override
|
||||
_SettingViewState createState() => _SettingViewState();
|
||||
}
|
||||
|
||||
class _SettingViewState extends State<SettingView> {
|
||||
TextEditingController _pinController;
|
||||
final DialogService _dialogService = locator<DialogService>();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
SettingState state = Redux.store.state.settingState;
|
||||
_pinController = new TextEditingController(text: state.pinCode);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_pinController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _setPinCode(BuildContext _context) async {
|
||||
FocusScope.of(_context).unfocus();
|
||||
var value = _pinController.text;
|
||||
if(value.isNotEmpty && value.length !=4){
|
||||
_dialogService.showDialog(description: 'Необходимо указать 4-х значный числовой код');
|
||||
} else {
|
||||
await Redux.store.dispatch(changePinCodeFromSetting(_pinController.text));
|
||||
_dialogService.showDialog(description: 'Данные успешно сохранены');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
centerTitle: true,
|
||||
title: Text('Настройка приложения'),
|
||||
),
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
margin: const EdgeInsets.symmetric(horizontal: 14.0),
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
verticalSpaceTiny,
|
||||
Text(
|
||||
'Для блокировки приложения пин-кодом, укажите 4-х значный числовой код',
|
||||
style: TextStyle(fontSize: 15.0),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
verticalSpaceTiny,
|
||||
TextField(
|
||||
controller: _pinController,
|
||||
maxLength: 4,
|
||||
obscureText: true,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'Пин-код', hintText: "Укажите пин-код"),
|
||||
keyboardType: TextInputType.number,
|
||||
),
|
||||
verticalSpaceMedium,
|
||||
RaisedButton(
|
||||
onPressed: () => this._setPinCode(context),
|
||||
child: Text(
|
||||
'Cохранить настройки',
|
||||
style: TextStyle(color: whiteColor, fontSize: 20.0),
|
||||
),
|
||||
color: primaryColor,
|
||||
padding:
|
||||
const EdgeInsets.symmetric(vertical: 5.0, horizontal: 20.0),
|
||||
),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
175
pubspec.lock
175
pubspec.lock
|
|
@ -1,13 +1,27 @@
|
|||
# Generated by pub
|
||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||
packages:
|
||||
archive:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: archive
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.13"
|
||||
args:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: args
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.6.0"
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.5.0-nullsafety.1"
|
||||
version: "2.5.0"
|
||||
auto_size_text:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -28,35 +42,42 @@ packages:
|
|||
name: boolean_selector
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.1"
|
||||
version: "2.1.0"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: characters
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.3"
|
||||
version: "1.1.0"
|
||||
charcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: charcode
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0"
|
||||
charset_converter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: charset_converter
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
clock:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: clock
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.1"
|
||||
version: "1.1.0"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: collection
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.15.0-nullsafety.3"
|
||||
version: "1.15.0"
|
||||
convert:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -71,6 +92,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.5"
|
||||
csslib:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: csslib
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.16.2"
|
||||
cupertino_icons:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -99,6 +127,20 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.5"
|
||||
esc_pos_bluetooth:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: esc_pos_bluetooth
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.8"
|
||||
esc_pos_utils:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: esc_pos_utils
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.6"
|
||||
esys_flutter_share:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -112,7 +154,7 @@ packages:
|
|||
name: fake_async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0"
|
||||
ffi:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -139,6 +181,27 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_bluetooth_basic:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_bluetooth_basic
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.5"
|
||||
flutter_lock_screen:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_lock_screen
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.8"
|
||||
flutter_plugin_android_lifecycle:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_plugin_android_lifecycle
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.11"
|
||||
flutter_redux:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -163,6 +226,13 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
gbk_codec:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: gbk_codec
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.2"
|
||||
get_it:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -177,6 +247,20 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
hex:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: hex
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.2"
|
||||
html:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: html
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.14.0+4"
|
||||
http:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -191,6 +275,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.1.4"
|
||||
image:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.19"
|
||||
intl:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -198,6 +289,27 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.16.1"
|
||||
js:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.6.3"
|
||||
json_annotation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: json_annotation
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.1.1"
|
||||
local_auth:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: local_auth
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.6.3+4"
|
||||
logger:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -218,7 +330,7 @@ packages:
|
|||
name: matcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.10-nullsafety.1"
|
||||
version: "0.12.10"
|
||||
material_design_icons_flutter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -232,7 +344,7 @@ packages:
|
|||
name: meta
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.3"
|
||||
version: "1.3.0"
|
||||
nested:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -246,7 +358,7 @@ packages:
|
|||
name: path
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0-nullsafety.1"
|
||||
version: "1.8.0"
|
||||
path_provider:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -289,6 +401,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.9.2"
|
||||
petitparser:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: petitparser
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.1.0"
|
||||
platform:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -373,8 +492,15 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.0"
|
||||
shared_preferences:
|
||||
rxdart:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: rxdart
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.23.1"
|
||||
shared_preferences:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: shared_preferences
|
||||
url: "https://pub.dartlang.org"
|
||||
|
|
@ -426,7 +552,7 @@ packages:
|
|||
name: source_span
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0-nullsafety.2"
|
||||
version: "1.8.0"
|
||||
sqflite:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -447,21 +573,21 @@ packages:
|
|||
name: stack_trace
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.10.0-nullsafety.1"
|
||||
version: "1.10.0"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.1"
|
||||
version: "2.1.0"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.1"
|
||||
version: "1.1.0"
|
||||
synchronized:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -475,21 +601,21 @@ packages:
|
|||
name: term_glyph
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.1"
|
||||
version: "1.2.0"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.19-nullsafety.2"
|
||||
version: "0.2.19"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: typed_data
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.3"
|
||||
version: "1.3.0"
|
||||
url_launcher:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -538,7 +664,7 @@ packages:
|
|||
name: vector_math
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.3"
|
||||
version: "2.1.0"
|
||||
win32:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -553,6 +679,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.2"
|
||||
xml:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: xml
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.5.1"
|
||||
sdks:
|
||||
dart: ">=2.10.2 <2.11.0"
|
||||
flutter: ">=1.22.2 <2.0.0"
|
||||
dart: ">=2.12.0-0.0 <3.0.0"
|
||||
flutter: ">=1.22.2"
|
||||
|
|
|
|||
|
|
@ -31,6 +31,13 @@ dependencies:
|
|||
qr_flutter: ^3.2.0
|
||||
mask_text_input_formatter: ^1.2.1
|
||||
flutter_screenutil: ^4.0.2+5
|
||||
shared_preferences: ^0.5.12+4
|
||||
flutter_lock_screen: ^1.0.8
|
||||
local_auth: ^0.6.3+4
|
||||
esc_pos_bluetooth: ^0.2.8
|
||||
flutter_bluetooth_basic: ^0.1.5
|
||||
esc_pos_utils: ^0.3.6 # no edit for esc_pos_bluetooth: ^0.2.8
|
||||
charset_converter: ^1.0.3
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
|
|
|
|||
Loading…
Reference in New Issue