diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 563dbd6..20d3c46 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 08537ea..9c64e11 100644 Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ diff --git a/app/build.gradle b/app/build.gradle index 6cc6d03..9d1cf90 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -96,9 +96,10 @@ dependencies { exclude group: 'com.braintreepayments.api', module: 'braintree' } implementation('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') { - transitive = true; + transitive = true } + implementation(name:'datatrans_payment_v3.5.1', ext:'aar') api 'com.google.guava:guava:26.0-android' testImplementation 'junit:junit:4.12' } diff --git a/app/libs/datatrans_payment_v3.5.1.aar b/app/libs/datatrans_payment_v3.5.1.aar new file mode 100644 index 0000000..2f7b28f Binary files /dev/null and b/app/libs/datatrans_payment_v3.5.1.aar differ diff --git a/app/src/main/java/ch/pizzaleu/android/activity/CreateOrderActivity.java b/app/src/main/java/ch/pizzaleu/android/activity/CreateOrderActivity.java index 710351f..8e3276d 100644 --- a/app/src/main/java/ch/pizzaleu/android/activity/CreateOrderActivity.java +++ b/app/src/main/java/ch/pizzaleu/android/activity/CreateOrderActivity.java @@ -3,6 +3,9 @@ package ch.pizzaleu.android.activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentManager; +import android.support.v7.widget.CardView; +import android.view.View; +import android.widget.FrameLayout; import com.badoualy.stepperindicator.StepperIndicator; import com.braintreepayments.api.dropin.utils.PaymentMethodType; @@ -27,6 +30,8 @@ import ch.pizzaleu.android.model.cart.CartInfoModel; public class CreateOrderActivity extends BaseActivity { + @BindView(R.id.createOrderCardView) CardView createOrderCardView; + @BindView(R.id.paymentContainerLayout) FrameLayout paymentContainerLayout; @BindView(R.id.stepperIndicator) StepperIndicator stepperIndicator; private FragmentManager fragmentManager; @@ -235,6 +240,22 @@ public class CreateOrderActivity extends BaseActivity { return orderNote; } + public void setPaymentLayoutVisibility(final boolean show){ + runOnUiThread(new Runnable() { + @Override + public void run() { + if(show){ + createOrderCardView.setVisibility(View.GONE); + paymentContainerLayout.setVisibility(View.VISIBLE); + } + else { + createOrderCardView.setVisibility(View.VISIBLE); + paymentContainerLayout.setVisibility(View.GONE); + } + } + }); + } + public void setOrderNote(String orderNote){ this.orderNote = orderNote; } @@ -266,4 +287,8 @@ public class CreateOrderActivity extends BaseActivity { public void setPaymentMethodList(ArrayList paymentMethodList) { this.paymentMethodList = paymentMethodList; } + + public FrameLayout getPaymentContainerLayout() { + return paymentContainerLayout; + } } diff --git a/app/src/main/java/ch/pizzaleu/android/api/ApiConstants.java b/app/src/main/java/ch/pizzaleu/android/api/ApiConstants.java index e0c4195..9d4d5c2 100644 --- a/app/src/main/java/ch/pizzaleu/android/api/ApiConstants.java +++ b/app/src/main/java/ch/pizzaleu/android/api/ApiConstants.java @@ -21,9 +21,15 @@ public class ApiConstants { public static final String PAYMENT_METHOD_CODE_TRANSFER = "bank_transfer"; // Kreditkarten-Kartenzahlung public static final String PAYMENT_METHOD_CODE_TWINT = "twintcw_twint"; // TWINT public static final String PAYMENT_METHOD_CODE_PAYPAL = "pp_standard"; + public static final String PAYMENT_METHOD_CODE_POST_FINANCE_CARD = "postfinancecw_postfinancecard"; public static final String PAYMENT_METHOD_CODE_ANDROID_PAY = "android_pay"; public static final String PAYMENT_METHOD_CODE_APPLE_PAY = "apple_pay"; + public static final String DATATRANS_MERCHANT_ID_TEST = "1100004450"; // Taken from Datatrans sample app + //public static final String DATATRANS_MERCHANT_ID_TEST = "1100020808"; // taken from Datatrans sandbox Demo Pusula Media GmbH + public static final String DATATRANS_REFERENCE_NUMBER_TEST = "968927"; // Taken from Datatrans sample app + public static final String DATATRANS_SIGNATURE_TEST = "30916165706580013"; // Taken from Datatrans sample app + public static final String SHIPPING_METHOD_CODE_PICK_UP_FROM_STORE = "pickup.pickup"; public static final String CART_SUBTOTAL = "zwischensumme"; diff --git a/app/src/main/java/ch/pizzaleu/android/api/ApiEndPoints.java b/app/src/main/java/ch/pizzaleu/android/api/ApiEndPoints.java index 9389875..9e5f062 100644 --- a/app/src/main/java/ch/pizzaleu/android/api/ApiEndPoints.java +++ b/app/src/main/java/ch/pizzaleu/android/api/ApiEndPoints.java @@ -45,9 +45,11 @@ public class ApiEndPoints { public static final String API_REMOVE_RPODUCT_FORM_CART = PREFIX + "removeProductFromBasket" + SUFFIX + "&token="; public static final String API_GET_ORDER_PRODUCT_LIST = PREFIX + "getOrderProducts" + SUFFIX + "&token="; public static final String API_CHECK_COUPON = PREFIX + "checkCoupon" + SUFFIX + "&token="; - public static final String API_CREATE_PAYMENT = PREFIX + "checkBrainTreePayment" + SUFFIX + "&token="; + public static final String API_CREATE_BRAINTREE_PAYMENT = PREFIX + "checkBrainTreePayment" + SUFFIX + "&token="; public static final String API_REPEAT_ORDER = PREFIX + "reOrder" + SUFFIX + "&token="; public static final String API_CHECK_ORDER_PRICE = PREFIX + "checkOrderPrice" + SUFFIX + "&token="; - public static final String API_CREATE_PAYMENT_TOKEN = PREFIX + "createPaymentToken" + SUFFIX + "&token="; + public static final String API_CREATE_BRAINTREE_PAYMENT_TOKEN = PREFIX + "createBraintreePaymentToken" + SUFFIX + "&token="; + public static final String API_GET_DATATRANS_INFO = PREFIX + "getDatatransInfo" + SUFFIX + "&token="; + public static final String API_CREATE_DATATRANS_PAYMENT = PREFIX + "checkDatatransPayment" + SUFFIX + "&token="; } diff --git a/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java b/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java index 7968fd6..effa400 100644 --- a/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java +++ b/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java @@ -10,6 +10,7 @@ import ch.pizzaleu.android.model.CampaignBannerModel; import ch.pizzaleu.android.model.CampaignModel; import ch.pizzaleu.android.model.CheckCouponModel; import ch.pizzaleu.android.model.CountryModel; +import ch.pizzaleu.android.model.DatatransInitInfoModel; import ch.pizzaleu.android.model.DeleteAddressResponseModel; import ch.pizzaleu.android.model.PaymentMethodsResponseModel; import ch.pizzaleu.android.model.PaymentTokenModel; @@ -212,8 +213,13 @@ public interface ApiInterface { @FormUrlEncoded @POST - Call createPayment(@Url String url, - @FieldMap HashMap body); + Call createBraintreePayment(@Url String url, + @FieldMap HashMap body); + + @FormUrlEncoded + @POST + Call createDatatransPayment(@Url String url, + @FieldMap HashMap body); @FormUrlEncoded @POST @@ -232,7 +238,10 @@ public interface ApiInterface { @FieldMap HashMap body); @GET - Call> createPaymentToken(@Url String url); + Call> createBraintreePaymentToken(@Url String url); + + @GET + Call> getDatatransInitInfoModel(@Url String url); @GET(ApiEndPoints.API_GET_CAMPAIGN_BANNERS) Call> getCampaignBanners(); diff --git a/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/CreateOrderSummaryFragment.java b/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/CreateOrderSummaryFragment.java index d176a56..27c904a 100644 --- a/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/CreateOrderSummaryFragment.java +++ b/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/CreateOrderSummaryFragment.java @@ -27,11 +27,21 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; +import java.util.Random; import butterknife.BindString; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import ch.datatrans.payment.AliasPaymentMethod; +import ch.datatrans.payment.BusinessException; +import ch.datatrans.payment.Payment; +import ch.datatrans.payment.PaymentMethod; +import ch.datatrans.payment.PaymentMethodType; +import ch.datatrans.payment.android.DisplayContext; +import ch.datatrans.payment.android.IPaymentProcessStateListener; +import ch.datatrans.payment.android.PaymentProcessAndroid; +import ch.datatrans.payment.android.ResourceProvider; import ch.pizzaleu.android.R; import ch.pizzaleu.android.activity.BaseActivity; import ch.pizzaleu.android.activity.CreateOrderActivity; @@ -46,6 +56,7 @@ import ch.pizzaleu.android.helper.DialogHelper; import ch.pizzaleu.android.helper.PriceHelper; import ch.pizzaleu.android.helper.SessionHelper; import ch.pizzaleu.android.helper.SharedPrefsHelper; +import ch.pizzaleu.android.model.DatatransInitInfoModel; import ch.pizzaleu.android.model.PaymentMethodModel; import ch.pizzaleu.android.model.PaymentTokenModel; import ch.pizzaleu.android.model.StoreShiftModel; @@ -61,7 +72,7 @@ import retrofit2.Response; * Created by cimenmus on 17/10/2017. */ -public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { +public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implements IPaymentProcessStateListener { @BindView(R.id.orderPersonFullnamePizzalinkInfoLayout) AppInfoView orderPersonFullnamePizzalinkInfoLayout; @BindView(R.id.orderShippingMethodPizzalinkInfoLayout) AppInfoView orderShippingMethodPizzalinkInfoLayout; @@ -98,6 +109,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { private ProductOnOrderSummaryRecyclerAdapter productOnOrderSummaryRecyclerAdapter; private StoreShiftModel storeShiftModel; private PaymentTokenModel braintreePaymentTokenModel; + private DatatransInitInfoModel datatransInitInfoModel; public CreateOrderSummaryFragment() {} @@ -359,7 +371,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { } else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) { DialogHelper.hideLoadingDialog(); - startTwintPayment(); + startDatatransPayment(); } else { DialogHelper.hideLoadingDialog(); @@ -535,22 +547,21 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TRANSFER){ createOrder(null); } - /* - else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) { + else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT || + createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.POST_FINANCE_CARD) { DialogHelper.hideLoadingDialog(); - startTwintPayment(); + startDatatransPayment(); } - */ else { DialogHelper.hideLoadingDialog(); startBraintreePayment(); } } - private void createOrder(String paymentMethodNonce){ + private void createOrder(HashMap params){ DialogHelper.showLoadingDialog(); Call> call = ApiService.apiInterface.createOrder( - "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_ORDER + SessionHelper.getCustomerToken().getToken(), getCreateOrderParams(paymentMethodNonce)); + "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_ORDER + SessionHelper.getCustomerToken().getToken(), params); call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { @@ -571,6 +582,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { }); } + // for braintree payment private HashMap getCreateOrderParams(String paymentMethodNonce){ HashMap params = new HashMap<>(); params.put("customer_id", SessionHelper.getUser().getId()); @@ -596,6 +608,34 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { return params; } + // for datatrans payment + private HashMap getCreateOrderParams(String datatransTransactionId, String datatransPaymentMethodName){ + HashMap params = new HashMap<>(); + params.put("customer_id", SessionHelper.getUser().getId()); + params.put("shipping_method_title", createOrderActivity.getSelectedShippingMethod().getTitle()); + params.put("shipping_method_code", createOrderActivity.getSelectedShippingMethod().getCode()); + params.put("address_id", createOrderActivity.getSelectedShippingAddress().getId()); + params.put("payment_method_title", createOrderActivity.getSelectedPaymentMethod().getTitle()); + params.put("payment_method_code", createOrderActivity.getSelectedPaymentMethod().getCode()); + params.put("comment", createOrderNote()); + params.put("is_pizza_pass_campaign", createOrderActivity.getCartInfo().isPizzapassCampaignUsed()); + params.put("is_kebap_pass_campaign", createOrderActivity.getCartInfo().isKebappassCampaignUsed()); + params.put("application_id", ApiConstants.APP_TYPE_ID_ANDROID); + params.put("datatrans_merchant_id", datatransInitInfoModel.getMerchantId()); + params.put("datatrans_ref_no", datatransInitInfoModel.getReferenceNumber()); + params.put("datatrans_transaction_id", datatransTransactionId); + params.put("datatrans_payment_method_name", datatransPaymentMethodName); + + if(SessionHelper.getSelectedCoupon() != null){ + params.put("coupon", SessionHelper.getSelectedCoupon().getCode()); + } + if(dateOfOrderString != null && !dateOfOrderString.isEmpty() && + timeOfOrder != null && !timeOfOrder.isEmpty()){ + params.put("delivery_date", dateOfOrderString + " " + timeOfOrder); + } + return params; + } + private String createOrderNote(){ CreateOrderActivity createOrderActivity = (CreateOrderActivity) BaseActivity.currentActivity; @@ -729,7 +769,8 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { cartTotalList.clear(); cartTotalList.addAll(cartInfoModel.getTotalsList()); orderPriceRecyclerAdapter.notifyDataSetChanged(); - createPaymentToken(); + createBraintreePaymentToken(); + getDatatransInitInfoModel(); } else { DialogHelper.hideLoadingDialog(); @@ -745,10 +786,10 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { }); } - private void createPaymentToken(){ + private void createBraintreePaymentToken(){ - Call> call = ApiService.apiInterface.createPaymentToken( - "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_PAYMENT_TOKEN + SessionHelper.getCustomerToken().getToken()); + Call> call = ApiService.apiInterface.createBraintreePaymentToken( + "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_BRAINTREE_PAYMENT_TOKEN + SessionHelper.getCustomerToken().getToken()); call.enqueue(new Callback>() { @Override @@ -773,6 +814,34 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { }); } + private void getDatatransInitInfoModel(){ + + Call> call = ApiService.apiInterface.getDatatransInitInfoModel( + "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_GET_DATATRANS_INFO + SessionHelper.getCustomerToken().getToken()); + + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess()){ + datatransInitInfoModel = response.body().getData(); + Log.i("fuhrfuhruhfr", "fhurhfurfhurfh"); + } + else { + ApiErrorUtils.parseError(response); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.hideLoadingDialog(); + DialogHelper.showFailedDialog(); + } + }); + } + private void startBraintreePayment(){ // CVV kodu default olarak gozukmuyor. @@ -820,14 +889,130 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { startActivityForResult(paymentRequest.getIntent(BaseActivity.currentActivity), REQUEST_CODE_BRAINTREE_PAYMENT); } - private void startTwintPayment(){ + private void startDatatransPayment(){ + if(datatransInitInfoModel == null || + datatransInitInfoModel.getMerchantId().isEmpty() || + datatransInitInfoModel.getReferenceNumber().isEmpty()){ + /* + datatransInitInfoModel = new DatatransInitInfoModel( + ApiConstants.DATATRANS_MERCHANT_ID_TEST, + String.valueOf(Integer.valueOf(ApiConstants.DATATRANS_REFERENCE_NUMBER_TEST) + new Random().nextInt(1000))); + */ + DialogHelper.showAlertDialog(BaseActivity.currentActivity, getString(R.string.something_went_wrong)); + return; + } + + String currencyCode = "CHF"; + String amountString = PriceHelper.removeCurrencyFromPrice(cartTotalList.get(cartTotalList.size() - 1).getText()); + double amountDouble; + int amountInt; + try { + amountDouble = Double.valueOf(amountString); + amountDouble *= 100; // we have to multiply amount with 100 -> e.g. if amout is CHF 10, you have to send 10*100 = 1000 + amountInt = (int) amountDouble; + }catch (Exception e){ + e.printStackTrace(); + return; + } + String signature = null; + //DisplayContext displayContext = new DisplayContext(new ResourceProvider(), createOrderActivity); + DisplayContext displayContext = new DisplayContext(new ResourceProvider(), createOrderActivity.getPaymentContainerLayout()); + + // Payment method selection/input by library (standard mode) + Payment payment = new Payment(datatransInitInfoModel.getMerchantId(), datatransInitInfoModel.getReferenceNumber(), currencyCode, amountInt, signature); + ArrayList datatransPaymentMethods = new ArrayList<>(); + /* + datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.VISA)); + datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.MASTERCARD)); + datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.AMEX)); + datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.DINERS)); + datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.JCB)); + datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.PAYPAL)); + */ + + + if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT){ + datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.TWINT)); + } + else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.POST_FINANCE_CARD){ + datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.PFCARD)); + } + else { + return; + } + + PaymentProcessAndroid datatransPaymentProcess = new PaymentProcessAndroid(displayContext, payment, datatransPaymentMethods); + + /* + //Payment method preselected by app, input by library + PaymentMethodType selectedPaymentMethodType; + if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT){ + selectedPaymentMethodType = PaymentMethodType.TWINT; + } + else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.POST_FINANCE_CARD){ + selectedPaymentMethodType = PaymentMethodType.PFCARD; + } + else { + return; + } + AliasRequest aliasRequest = new AliasRequest(merchantId, currencyCode, new PaymentMethod(selectedPaymentMethodType)); + PaymentProcessAndroid datatransPaymentProcess = new PaymentProcessAndroid(displayContext, aliasRequest); + */ + + // common part + datatransPaymentProcess.setTestingEnabled(true); + datatransPaymentProcess.addStateListener(this); + datatransPaymentProcess.start(); + } + + @Override + public void paymentProcessStateChanged(PaymentProcessAndroid datatransPaymentProcess) { + switch (datatransPaymentProcess.getState()) { + + case STARTED: + createOrderActivity.setPaymentLayoutVisibility(true); + break; + + case NOT_STARTED: + createOrderActivity.setPaymentLayoutVisibility(false); + break; + + case COMPLETED: + createOrderActivity.setPaymentLayoutVisibility(false); + String transcationId = datatransPaymentProcess.getTransactionId(); + String paymentMethodName = datatransPaymentProcess.getPaymentMethodType().getName(); + AliasPaymentMethod aliasPaymentMethod = datatransPaymentProcess.getAliasPaymentMethod(); + if (aliasPaymentMethod != null) { + String json = aliasPaymentMethod.toJson(); + Log.i("dgyef", "vryf"); + // serialize and securely store aliasPaymentMethod for reuse + } + createDatatransPayment(transcationId, paymentMethodName); + break; + case CANCELED: + createOrderActivity.setPaymentLayoutVisibility(false); + DialogHelper.showAlertDialog(BaseActivity.currentActivity, paymentCanceledText); + break; + case ERROR: + createOrderActivity.setPaymentLayoutVisibility(false); + Exception e = datatransPaymentProcess.getException(); + if (e instanceof BusinessException) { + BusinessException be = (BusinessException)e; + int errorCode = be.getErrorCode();// Datatrans error code if needed + // display some error message + } else { + // unexpected technical exception, either fatal TechnicalException or // javax.net.ssl.SSLException (certificate error) + } + DialogHelper.showAlertDialog(BaseActivity.currentActivity, e.getMessage()); + break; + } } private void createBraintreePayment(final DropInResult dropInResult){ DialogHelper.showLoadingDialog(); - Call call = ApiService.apiInterface.createPayment( - "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_PAYMENT + SessionHelper.getCustomerToken().getToken(), + Call call = ApiService.apiInterface.createBraintreePayment( + "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_BRAINTREE_PAYMENT + SessionHelper.getCustomerToken().getToken(), getBraintreePaymentParams(dropInResult)); call.enqueue(new Callback() { @Override @@ -836,14 +1021,44 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { if(response.isSuccessful() && response.body().getData() != null && response.body().isSuccess()){ - createOrder(dropInResult.getPaymentMethodNonce().getNonce()); + createOrder(getCreateOrderParams(dropInResult.getPaymentMethodNonce().getNonce())); + } + else { + ApiErrorUtils.parseError(response); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + DialogHelper.hideLoadingDialog(); + DialogHelper.showFailedDialog(); + } + }); + } + + private void createDatatransPayment(final String transactionId, final String datatransPaymentMethodName){ + DialogHelper.showLoadingDialog(); + + HashMap params = new HashMap<>(); + params.put("merchant_id", datatransInitInfoModel.getMerchantId()); + params.put("ref_no", datatransInitInfoModel.getReferenceNumber()); + params.put("transaction_id", transactionId); + params.put("datatrans_payment_method_name", datatransPaymentMethodName); + params.put("amount", PriceHelper.removeCurrencyFromPrice(createOrderActivity.getCartInfo().getCartTotalModel().getText())); + + Call call = ApiService.apiInterface.createDatatransPayment( + "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_DATATRANS_PAYMENT + SessionHelper.getCustomerToken().getToken(), params); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, final Response response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess()){ + createOrder(getCreateOrderParams(transactionId, datatransPaymentMethodName)); } else { ApiErrorUtils.parseError(response); - /* - // dummy // - createOrder(dropInResult.getPaymentMethodNonce().getNonce()); - */ } } @@ -1129,5 +1344,4 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { return endTime; } } - } diff --git a/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/PaymentMethodFragment.java b/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/PaymentMethodFragment.java index 57d7579..6fc8a0d 100644 --- a/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/PaymentMethodFragment.java +++ b/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/PaymentMethodFragment.java @@ -160,13 +160,6 @@ public class PaymentMethodFragment extends CreateOrderBaseFragment { } } - for(PaymentMethodModel paymentMethodModel : paymentMethodModels){ - if(paymentMethodModel.getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT){ - paymentMethodModels.remove(paymentMethodModel); - break; - } - } - /* // dummy // diff --git a/app/src/main/java/ch/pizzaleu/android/model/DatatransInitInfoModel.java b/app/src/main/java/ch/pizzaleu/android/model/DatatransInitInfoModel.java new file mode 100644 index 0000000..f5c3c79 --- /dev/null +++ b/app/src/main/java/ch/pizzaleu/android/model/DatatransInitInfoModel.java @@ -0,0 +1,31 @@ +package ch.pizzaleu.android.model; + +import com.google.gson.annotations.SerializedName; + +public class DatatransInitInfoModel { + + @SerializedName("merchant_id") + private String merchantId; + + @SerializedName("ref_no") + private String referenceNumber; + + public DatatransInitInfoModel(String merchantId, String referenceNumber) { + this.merchantId = merchantId; + this.referenceNumber = referenceNumber; + } + + public String getMerchantId() { + if(merchantId == null){ + merchantId = ""; + } + return merchantId; + } + + public String getReferenceNumber() { + if(referenceNumber == null){ + referenceNumber = ""; + } + return referenceNumber; + } +} diff --git a/app/src/main/java/ch/pizzaleu/android/model/PaymentMethodModel.java b/app/src/main/java/ch/pizzaleu/android/model/PaymentMethodModel.java index e916305..106a161 100644 --- a/app/src/main/java/ch/pizzaleu/android/model/PaymentMethodModel.java +++ b/app/src/main/java/ch/pizzaleu/android/model/PaymentMethodModel.java @@ -29,6 +29,7 @@ public class PaymentMethodModel { TRANSFER, PAYPAL, TWINT, + POST_FINANCE_CARD, ANDROID_PAY, APPLE_PAY, UNKNOWN @@ -77,6 +78,8 @@ public class PaymentMethodModel { return PaymentMethodType.PAYPAL; case ApiConstants.PAYMENT_METHOD_CODE_TWINT: return PaymentMethodType.TWINT; + case ApiConstants.PAYMENT_METHOD_CODE_POST_FINANCE_CARD: + return PaymentMethodType.POST_FINANCE_CARD; case ApiConstants.PAYMENT_METHOD_CODE_ANDROID_PAY: return PaymentMethodType.ANDROID_PAY; case ApiConstants.PAYMENT_METHOD_CODE_APPLE_PAY: diff --git a/app/src/main/res/layout/activity_create_order.xml b/app/src/main/res/layout/activity_create_order.xml index 3755014..e155df6 100644 --- a/app/src/main/res/layout/activity_create_order.xml +++ b/app/src/main/res/layout/activity_create_order.xml @@ -31,6 +31,7 @@ android:src="@drawable/background_wood" /> + + diff --git a/build.gradle b/build.gradle index f35705c..14bef31 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,9 @@ allprojects { maven { url 'https://jitpack.io' } maven { url "https://maven.google.com" } google() + flatDir { + dirs 'libs' + } } } diff --git a/datatrans_android_library.zip b/datatrans_android_library.zip new file mode 100644 index 0000000..dc32efc Binary files /dev/null and b/datatrans_android_library.zip differ