diff --git a/pos_android_app/src/main/AndroidManifest.xml b/pos_android_app/src/main/AndroidManifest.xml index db992c3..08ccc05 100644 --- a/pos_android_app/src/main/AndroidManifest.xml +++ b/pos_android_app/src/main/AndroidManifest.xml @@ -38,7 +38,7 @@ android:name="BUGLY_APPID" android:value="b2d80aa171" /> - + { + + new Handler(Looper.getMainLooper()).post(() -> + onPaymentRedirected(json.toString())); + }).start(); + break; case "ping": // Handle ping requests @@ -213,6 +221,7 @@ public class BaseAppViewModel extends BaseViewModel implements WebSocketManager. + /** * Handle ping requests from server */ @@ -285,6 +294,11 @@ public class BaseAppViewModel extends BaseViewModel implements WebSocketManager. // Override in child classes for specific update handling } + protected void onPaymentRedirected(String paymentRedirectData) { + Log.d("BaseAppViewModel", "onPaymentUpdated: " + paymentRedirectData); + // Override in child classes for specific update handling + } + // Add a public ViewModel method protected void showLoading() { showDialog(); diff --git a/pos_android_app/src/main/java/com/dspread/pos/ui/cashier/CashierFragment.java b/pos_android_app/src/main/java/com/dspread/pos/ui/cashier/CashierFragment.java new file mode 100644 index 0000000..23e20b9 --- /dev/null +++ b/pos_android_app/src/main/java/com/dspread/pos/ui/cashier/CashierFragment.java @@ -0,0 +1,66 @@ +package com.dspread.pos.ui.cashier; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.lifecycle.viewmodel.CreationExtras; + +import com.dspread.pos.common.base.BaseFragment; +import com.dspread.pos.TitleProviderListener; +import com.dspread.pos.ui.main.MainActivity; +import com.dspread.pos.ui.main.MainViewModel; +import com.dspread.pos.ui.mulberry.MulberryViewModel; +import com.dspread.pos_android_app.R; +import com.dspread.pos_android_app.databinding.FragmentCashierBinding; + +import com.dspread.pos_android_app.BR; + +public class CashierFragment extends BaseFragment + implements TitleProviderListener{ + + @Override + public void initViewObservable() { + // Observe item click events + // Handle fragment navigation + +// Observe payment info LiveData + viewModel.getPaymentInfo().observe(getViewLifecycleOwner(), paymentInfo -> { + if (paymentInfo != null) { + Log.d("CashierFragment", "Payment Info Updated: " + paymentInfo); + } + }); + + // Observe payment status LiveData + viewModel.getPaymentStatus().observe(getViewLifecycleOwner(), paymentStatus -> { + Log.d("CashierFragment", "Payment Status Updated: " + paymentStatus); + }); + + } + + @Override + public String getTitle() { + return "Cashier"; + } + + @Override + public int initContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return R.layout.fragment_cashier; + } + + @Override + public int initVariableId() { + return BR.viewModel; + } + + @NonNull + @Override + public CreationExtras getDefaultViewModelCreationExtras() { + return super.getDefaultViewModelCreationExtras(); + } +} diff --git a/pos_android_app/src/main/java/com/dspread/pos/ui/cashier/CashierViewModel.java b/pos_android_app/src/main/java/com/dspread/pos/ui/cashier/CashierViewModel.java new file mode 100644 index 0000000..c0acde2 --- /dev/null +++ b/pos_android_app/src/main/java/com/dspread/pos/ui/cashier/CashierViewModel.java @@ -0,0 +1,101 @@ +package com.dspread.pos.ui.cashier; + +import android.app.Application; +import android.graphics.Bitmap; +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.databinding.ObservableField; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; + +import com.dspread.pos.common.base.BaseAppViewModel; +import com.dspread.pos.data.local.PreferencesManager; + +import org.json.JSONException; +import org.json.JSONObject; + +public class CashierViewModel extends BaseAppViewModel { + + // Enum to represent payment status + public enum PaymentStatus { + WAITING, SUCCESS, FAILED + } + private static final String TAG = "CashierVM"; + + + // LiveData to hold payment information + private final MutableLiveData paymentInfo = new MutableLiveData<>(); + public LiveData getPaymentInfo() { + return paymentInfo; + } + + public ObservableField amount = new ObservableField<>("0.00"); + public ObservableField currencyCode = new ObservableField<>("RUB"); + + // LiveData to track payment status + private final MutableLiveData paymentStatus = new MutableLiveData<>(PaymentStatus.WAITING); + public LiveData getPaymentStatus() { + return paymentStatus; + } + + public final ObservableField mainLogo = new ObservableField<>(); + public final ObservableField mainLogoBitmap = new ObservableField<>(); + + public CashierViewModel(@NonNull Application application) { + super(application); + } + + public void printReceipt() { + String amountValue = amount.get(); + String currencyCodeValue = currencyCode.get(); + if (amountValue != null && currencyCodeValue != null) { + Log.d(TAG, "Printing Receipt: " + amountValue + " " + currencyCodeValue); + // Simulate printing logic here + // For example, send the payment info to a printer service + } else { + Log.d(TAG, "No payment info to print"); + } + } + + + @Override + protected void onPaymentRedirected(String jsonString) { + Log.d(TAG, "onPaymentRedirected - processing redirect payment"); + Log.d(TAG, "jsonString" + jsonString); + + try { + JSONObject results = new JSONObject(jsonString); + PreferencesManager prefs = PreferencesManager.getInstance(getApplication()); + prefs.saveString("lastPaymentRedirectResults", jsonString); + + // Update amount and currency + amount.set(results.optString("amount", "0.00")); + currencyCode.set(results.optString("currencySymbol", "RUB"));; + + String status = results.optString("status", ""); + switch (status) { + case "success": + Log.d(TAG, "Redirect Payment Success"); + paymentStatus.setValue(PaymentStatus.SUCCESS); + break; + case "failed": + Log.d(TAG, "Redirect Payment Failed"); + paymentStatus.setValue(PaymentStatus.FAILED); + break; + default: + Log.w(TAG, "Unknown JSON type: " + status); + paymentStatus.setValue(PaymentStatus.WAITING); + } + } catch (JSONException e) { + Log.e(TAG, "Error parsing JSON", e); +// paymentStatus.setValue(PaymentStatus.FAILED); + } + + } + + + + + +} diff --git a/pos_android_app/src/main/java/com/dspread/pos/ui/main/MainViewModel.java b/pos_android_app/src/main/java/com/dspread/pos/ui/main/MainViewModel.java index de0dbe6..4933335 100644 --- a/pos_android_app/src/main/java/com/dspread/pos/ui/main/MainViewModel.java +++ b/pos_android_app/src/main/java/com/dspread/pos/ui/main/MainViewModel.java @@ -17,6 +17,7 @@ import com.dspread.pos.common.manager.FragmentCacheManager; import com.dspread.pos.TitleProviderListener; import com.dspread.pos.common.manager.ScreensaverManager; import com.dspread.pos.posAPI.POS; +import com.dspread.pos.ui.cashier.CashierFragment; import com.dspread.pos.ui.home.HomeFragment; import com.dspread.pos.ui.mulberry.MulberryFragment; import com.dspread.pos.ui.printer.PrinterHelperFragment; @@ -148,6 +149,8 @@ public class MainViewModel extends BaseViewModel { return new PrinterHelperFragment(); case R.id.nav_scan: return new ScanFragment(); + case R.id.nav_cashier: + return new CashierFragment(); case R.id.nav_mulberry: return new MulberryFragment(); } diff --git a/pos_android_app/src/main/java/com/dspread/pos/ui/payment/PaymentViewModel.java b/pos_android_app/src/main/java/com/dspread/pos/ui/payment/PaymentViewModel.java index d5fef92..6c5de8d 100644 --- a/pos_android_app/src/main/java/com/dspread/pos/ui/payment/PaymentViewModel.java +++ b/pos_android_app/src/main/java/com/dspread/pos/ui/payment/PaymentViewModel.java @@ -250,6 +250,10 @@ public class PaymentViewModel extends BaseAppViewModel { public BindingCommand continueTxnsCommand = new BindingCommand(new BindingAction() { @Override public void call() { +// paymentData.put("status", "failed"); +// sendWebSocketMessage(paymentData.toString()); + + // titleText.set("Payment"); // stopLoading(); // showPinpad.set(false); @@ -278,7 +282,7 @@ public class PaymentViewModel extends BaseAppViewModel { paymentData.put("amount", amountDouble); paymentData.put("currencySymbol", currencySymbol); paymentData.put("id", "01723060202412010160"); - + paymentData.put("status", "success"); Log.d(TAG, "call: this is M50 maybe"); sendWebSocketMessage(paymentData.toString()); diff --git a/pos_android_app/src/main/res/layout/fragment_cashier.xml b/pos_android_app/src/main/res/layout/fragment_cashier.xml new file mode 100644 index 0000000..dd5609b --- /dev/null +++ b/pos_android_app/src/main/res/layout/fragment_cashier.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + +