Commit 15980423 authored by Alfansyah Fadlian's avatar Alfansyah Fadlian

register state

parents 09c1bc83 572dbee8
......@@ -167,8 +167,17 @@ public class CartActivity extends AppCompatActivity {
@Override
public void onUpdateQuantityPlus(ProductCartModels productCartModels) {
if (!((productCartModels.getQuantity_orders() + 1) > productCartModels.getQuantity_stock() - 1)){
productCartModels.setQuantity_orders(productCartModels.getQuantity_orders() + 1);
modelsCart.updateCart(productCartModels);
}else{
utils.dialog(CartActivity.this,
true,
getLayoutInflater().inflate(R.layout.alert_dialog, null),
"Warning",
"Item stock does not meet").show();
}
}
@Override
......@@ -239,34 +248,7 @@ public class CartActivity extends AppCompatActivity {
paymentsModels.setOrderId(sharedPreferences.getString(ORDER_ID, ""));
paymentsModels.setTransactionStatus("pending");
Log.i("Convert Input", "onChanged: "+utils.convertGson(paymentsModels));
PaymentService paymentService = client.Client(PaymentService.class);
paymentService.postFromCart(paymentsModels).enqueue(new Callback<DataResponse<PaymentsModels<List<VaNumberModels>>>>() {
@Override
public void onResponse(Call<DataResponse<PaymentsModels<List<VaNumberModels>>>> call, Response<DataResponse<PaymentsModels<List<VaNumberModels>>>> response) {
Log.i("Response simpan_cart", "onResponse: "+utils.convertGson(response.body()));
if (response.body() != null){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(ORDER_ID, "");
if (editor.commit()){
startActivity(new Intent(CartActivity.this, MainActivity.class));
finish();
}
}else{
new AlertDialog.Builder(CartActivity.this)
.setCancelable(false)
.setTitle("Save new Order")
.setMessage("Erorr save!").show();
}
}
@Override
public void onFailure(Call<DataResponse<PaymentsModels<List<VaNumberModels>>>> call, Throwable t) {
new AlertDialog.Builder(CartActivity.this)
.setCancelable(false)
.setTitle("Save new Order")
.setMessage("Add new order failed, try again!").show();
}
});
}
});
......
......@@ -61,6 +61,7 @@ public class FormProductActivity extends AppCompatActivity {
MainViewModels mainViewModels;
MaterialSpinner spinner;
List<String> categoryModels;
List<String> str = new ArrayList<>();
private static final int REQUEST_IMAGE_CAPTURE = 1;
private static final int REQUEST_PERMISSIONS = 448;
private boolean isUpdate = false;
......@@ -75,7 +76,7 @@ public class FormProductActivity extends AppCompatActivity {
ProgressDialog progressDialog;
Client client = new Client();
ProductModels productModelsIntent;
List<String> categorySelect = new ArrayList<>();
List<Integer> categorySelect = new ArrayList<>();
FormCategory formCategory;
@RequiresApi(api = Build.VERSION_CODES.N)
......@@ -180,7 +181,8 @@ public class FormProductActivity extends AppCompatActivity {
binding.listCategory.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener() {
@Override
public void onItemSelected(MaterialSpinner view, int position, long id, Object item) {
categorySelect.add(item.toString());
progressDialog.show();
getCategory(item.toString());
}
});
}
......@@ -189,17 +191,15 @@ public class FormProductActivity extends AppCompatActivity {
private void setSpinner(String s) {
progressDialog.show();
HashSet<String> set = new HashSet<>();
List<String> str = new ArrayList<>();
categoryModels = new ArrayList<>();
Log.i("GET_CATEGORY", "setSpinner: "+utils.convertGson(productModelsIntent));
// if (productModelsIntent == null){
// str.add("SELECT CATEGORY");
// }else{
// getCategoryById(productModelsIntent.getIdProduct());
// categoryName = ""
// str.add(categoryName);
// }
if (productModelsIntent == null){
str.add("SELECT CATEGORY");
}else{
getCategoryById(productModelsIntent.getIdProduct());
categorySelect.add(0, productModelsIntent.getCategoryProduct());
}
// str.add("SELECT CATEGORY");
mainViewModels.getCategory().observe(this, listDataResponse -> {
progressDialog.dismiss();
for (CategoryModels cd: listDataResponse.getData()){
......@@ -228,7 +228,7 @@ public class FormProductActivity extends AppCompatActivity {
productModelsSave.setProductName(binding.etName.getText().toString());
productModelsSave.setPriceProduct(Integer.parseInt(binding.etPrice.getText().toString()));
productModelsSave.setStockProduct(Integer.parseInt(binding.etStock.getText().toString()));
productModelsSave.setCategoryProduct(getCategory(categorySelect.get(0)));
productModelsSave.setCategoryProduct(categorySelect.get(0));
if (productModelsIntent == null){
productModelsSave.setImageProduct(productModels.getImageProduct());
}else{
......@@ -346,6 +346,8 @@ public class FormProductActivity extends AppCompatActivity {
Log.i("CHDJHD", "getCategory: "+utils.convertGson(response.body()));
id = response.body().getData().get(0).getIdCategory();
productModels.setCategoryProduct(id);
categorySelect.add(0, id);
progressDialog.dismiss();
}
@Override
......@@ -362,9 +364,7 @@ public class FormProductActivity extends AppCompatActivity {
@Override
public void onResponse(Call<DataResponse<CategoryModels>> call, Response<DataResponse<CategoryModels>> response) {
Log.i("ER", "onResponse: "+utils.convertGson(response.body()));
if (categoryName.isEmpty()){
categoryName = response.body().getData().getNameCategory();
}
str.add(response.body().getData().getNameCategory());
}
@Override
......
package com.yono.messeripos;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
......@@ -40,6 +41,10 @@ public class LoginActivity extends AppCompatActivity {
MaterialButton btnSignin;
MaterialButton btnSignup, btnSignIn;
public static View invalidUser;
public static View activateEmail;
Utils utils;
private String TAG = "MainActivity";
......
......@@ -10,6 +10,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
......@@ -52,8 +53,7 @@ public class LoginState extends BottomSheetDialogFragment {
SharedPreferences sharedPreferences;
Utils utils;
ProgressBar bar;
AlertDialog.Builder builder;
View view;
ProgressDialog dialog;
public LoginState(Context context, MainViewModels mainViewModels) {
......@@ -70,7 +70,7 @@ public class LoginState extends BottomSheetDialogFragment {
dialog = new ProgressDialog(context);
// inflating layout
View view = View.inflate(getContext(), R.layout.login_form, null);
view = View.inflate(getContext(), R.layout.login_form, null);
// bindUI
loginLayout = view.findViewById(R.id.LoginLayout);
......@@ -112,94 +112,130 @@ public class LoginState extends BottomSheetDialogFragment {
}
private void loginAuth(View v) {
if (TextUtils.isEmpty(username.getText().toString()) &&
TextUtils.isEmpty(password.getText().toString())){
username.setError("This field can't empty");
password.setError("This field can't empty");
}else if (TextUtils.isEmpty(username.getText().toString())){
}else if (TextUtils.isEmpty(username.getText().toString()))
{
username.setError("This field can't empty");
}else if (TextUtils.isEmpty(password.getText().toString())){
password.setError("This field can't empty");
}else{
/**
* Jika tombol sign in ditekan
*
* nonaktifkan semua form */
bar.setVisibility(View.VISIBLE);
loginButton.setText("");
sheetDialog.setCancelable(false);
}else {
username.setEnabled(false);
password.setEnabled(false);
loginButton.setEnabled(false);
closeBtn.setEnabled(false);
setAllLayoutToFalse();
// buat checking login
mainViewModels.checkLogin(new UsersModels(username.getText().toString(),
password.getText().toString()))
.observe((LifecycleOwner) context, usersModelsDataResponse -> {
if (usersModelsDataResponse != null) {
/**
* Jika response atau data ada dan cocok
*/
final View customLayout = getLayoutInflater()
.inflate(R.layout.alert_dialog, null);
switch (usersModelsDataResponse.getMessageData().toLowerCase()) {
case "invalid username or password":
setAllLayoutToTrue();
errUserPass(customLayout);
break;
case "please activate your email first":
setAllLayoutToTrue();
activateEmail(customLayout);
default:
break;
}
if (usersModelsDataResponse.getStatusData()) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(SplashScreen.SESSION, true);
sheetDialog.dismiss();
if(editor.commit()){
startActivity(new Intent(context, MainActivity.class));
getActivity().finish();
}
// redirect ke home
setAllLayoutToTrue();
// set progress bar jadi nonaktif
bar.setVisibility(View.GONE);
// munculkan tulisan default di button sign in
}
} else {
bar.setVisibility(View.VISIBLE);
utils.snackBar(v, "Oppss! ログイン中にエラーが発生しました。しばらくしてからもう一度お試しください").show();
}
});
}
loginButton.setText(DEFAULT_LOGIN_NAME);
}
// ubah sheet dialog jadi tidak bisa di slide atau cancel
private void setAllLayoutToTrue() {
bar.setVisibility(View.GONE);
loginButton.setText(DEFAULT_LOGIN_NAME);
sheetDialog.setCancelable(true);
// set form jadi enable
username.setEnabled(true);
password.setEnabled(true);
loginButton.setEnabled(true);
closeBtn.setEnabled(true);
}
} else {
/**
* Jika response atau data tidak cocok
*/
private void setAllLayoutToFalse() {
bar.setVisibility(View.VISIBLE);
loginButton.setText("");
sheetDialog.setCancelable(false);
username.setEnabled(false);
password.setEnabled(false);
loginButton.setEnabled(false);
closeBtn.setEnabled(false);
}
bar.setVisibility(View.GONE);
loginButton.setText(DEFAULT_LOGIN_NAME);
private void activateEmail(View customLayout) {
sheetDialog.setCancelable(true);
utils = new Utils(customLayout);
utils.dialog(context, false, customLayout, "Please Verifiy Email",
"Please verify your email before login",
"close", "verify")
.show();
utils.setListener(new Utils.DialogListener() {
@Override
public void onClickDisimiss(AlertDialog alertDialog) {
alertDialog.dismiss();
}
final View customLayout = getLayoutInflater()
.inflate(R.layout.alert_dialog, null);
@Override
public void onClickLink(AlertDialog alertDialog) {
Intent pm = getActivity().getPackageManager().getLaunchIntentForPackage("com.google.android.gm");
if (pm != null) {
startActivity(pm);
getActivity().finish();
}
}
});
}
private void errUserPass(View customLayout) {
// tampilkan alert dialog
utils = new Utils(customLayout);
utils.dialog(context, false, customLayout, "Wrong Username or Password",
"The username or password is incorrect. Please try again!",
"Try Again")
.show();
utils.setListener(Dialog::dismiss);
username.setEnabled(true);
password.setEnabled(true);
loginButton.setEnabled(true);
closeBtn.setEnabled(true);
}
} else {
bar.setVisibility(View.VISIBLE);
utils.snackBar(v, "Oppss! ログイン中にエラーが発生しました。しばらくしてからもう一度お試しください").show();
utils.setListener(new Utils.DialogListener() {
@Override
public void onClickDisimiss(AlertDialog alertDialog) {
alertDialog.dismiss();
}
});
@Override
public void onClickLink(AlertDialog alertDialog) {
}
loginButton.setText(DEFAULT_LOGIN_NAME);
});
}
}
......@@ -8,6 +8,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.service.controls.actions.ModeAction;
import android.text.Editable;
import android.text.TextWatcher;
......@@ -18,6 +19,8 @@ import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Toast;
import androidx.annotation.NonNull;
......@@ -68,7 +71,7 @@ public class MainActivity extends AppCompatActivity {
CategoryAdapter categoryAdapter;
ProductAdapter productAdapter;
Utils utils = new Utils();
SharedPreferences sharedPreferences;
SharedPreferences sharedPreferences, sharedPreferencesLogin;
public static Boolean status_update = false;
MainViewModelsCart mainViewModelsCart;
public static Boolean cartIsEmpty;
......@@ -108,6 +111,7 @@ public class MainActivity extends AppCompatActivity {
productAdapter = new ProductAdapter();
mainViewModelsCart = new ViewModelProvider(MainActivity.this).get(MainViewModelsCart.class);
sharedPreferences = getSharedPreferences(MY_SHARED_PREFERENCES, Context.MODE_PRIVATE);
sharedPreferencesLogin = getSharedPreferences(SplashScreen.MY_SHARED_PREFERENCES, Context.MODE_PRIVATE);
checkout = sharedPreferences.getBoolean(CHECKOUT,false);
orderId = sharedPreferences.getString(ORDER_ID,"");
progressDialog = new ProgressDialog(MainActivity.this);
......@@ -178,13 +182,25 @@ public class MainActivity extends AppCompatActivity {
startActivity(new Intent(getApplicationContext(), FormProductActivity.class));
}else if (id == R.id.allTransaction){
startActivity(new Intent(getApplicationContext(), TransactionActivity.class));
}else if (id == R.id.logout){
progressDialog.show();
SharedPreferences.Editor editor = sharedPreferencesLogin.edit();
editor.putBoolean(SplashScreen.SESSION, false);
if(editor.commit()){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(MainActivity.this, LoginActivity.class));
finish();
}
}, 700);
}
}
return true;
}
});
}
private void mainViewModelsGettCategory() {
mainViewModels.getCategory().observe(this, new Observer<DataResponse<List<CategoryModels>>>() {
@Override
......@@ -322,7 +338,7 @@ public class MainActivity extends AppCompatActivity {
product.getIdProduct(),
product.getProductName(),
product.getPriceProduct(),
0
product.getStockProduct()
));
// Log.d("order_id_create", "onChanged: "+orderId);
......@@ -534,4 +550,10 @@ public class MainActivity extends AppCompatActivity {
binding.pbLoading.setVisibility(View.GONE);
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
}
\ No newline at end of file
......@@ -138,7 +138,7 @@ public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.MyViewHo
binding.materialBtnAddCart.setVisibility(View.GONE);
}
if (products.getStockProduct() == 0) {
if (products.getStockProduct() <= 1) {
statusProduct = "Not Available";
binding.status.setBackgroundColor(0x55FF0000);
binding.setStatus(statusProduct);
......
......@@ -187,12 +187,8 @@ public class MainViewModels extends ViewModel {
usersService.postRegister(usersModels).enqueue(new Callback<DataResponse<UsersModels>>() {
@Override
public void onResponse(Call<DataResponse<UsersModels>> call, Response<DataResponse<UsersModels>> response) {
Log.i("Check_Registrasi", "onResponse: "+utils.convertGson(response.body()));
if(response.body()!=null){
Log.i("REGISTER", "onResponse: "+utils.convertGson(response.body()));
usersRegister.setValue(response.body());
}else{
usersRegister.setValue(null);
}
}
@Override
......
......@@ -19,6 +19,7 @@ import com.yono.messeripos.api.client.Client;
import com.yono.messeripos.api.service.OrdersService;
import com.yono.messeripos.api.service.PaymentService;
import com.yono.messeripos.repositories.CartRepositories;
import com.yono.messeripos.repositories.PaymentPendingRepositories;
import com.yono.messeripos.response.DataResponse;
import com.yono.messeripos.response.OrdersResponse;
......@@ -36,6 +37,7 @@ public class MainViewModelsCart extends AndroidViewModel {
private Client client;
private CartRepositories cartRepositories;
private PaymentPendingRepositories paymentPendingRepositories;
public void setCart(ProductCartModels product){this.cart.setValue(product);}
......@@ -47,6 +49,7 @@ public class MainViewModelsCart extends AndroidViewModel {
super(application);
cartRepositories = new CartRepositories(application);
paymentPendingRepositories = new PaymentPendingRepositories(application);
productsLive = cartRepositories.getDataCart();
client = new Client();
......
......@@ -20,6 +20,9 @@ public class ProductCartModels implements Parcelable {
@SerializedName("quantity")
private long quantity_orders;
@SerializedName("quantity_stock")
private long quantity_stock;
@SerializedName("product_id")
private int id_product_orders;
......@@ -41,13 +44,13 @@ public class ProductCartModels implements Parcelable {
int id_product_orders,
String product_name_orders,
long price_orders,
int grand_total_orders) {
int quantity_stock) {
this.id_orders = id_orders;
this.quantity_orders = quantity_orders;
this.id_product_orders = id_product_orders;
this.product_name_orders = product_name_orders;
this.price_orders = price_orders;
this.grand_total_orders = grand_total_orders;
this.quantity_stock = quantity_stock;
}
protected ProductCartModels(Parcel in) {
......@@ -143,4 +146,11 @@ public class ProductCartModels implements Parcelable {
this.grand_total_orders = grand_total_orders;
}
public long getQuantity_stock() {
return quantity_stock;
}
public void setQuantity_stock(long quantity_stock) {
this.quantity_stock = quantity_stock;
}
}
......@@ -46,6 +46,7 @@ public class Utils {
public interface DialogListener {
void onClickDisimiss(AlertDialog alertDialog);
void onClickLink(AlertDialog alertDialog);
}
private DialogListener listener;
......@@ -270,16 +271,67 @@ public class Utils {
AlertDialog dialog = builder.create();
dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
btnCard.setOnClickListener(view1 -> listener.onClickDisimiss(dialog));
btCard.setOnClickListener(view1 -> listener.onClickDisimiss(dialog));
return dialog;
}
public AlertDialog dialog(Context context, Boolean cancelable, View view, @Nullable String titles, @Nullable String messages, @Nullable String buttons) {
public AlertDialog dialog(Context context,
Boolean cancelable,
View view,
@Nullable String titles,
@Nullable String messages,
@Nullable String dismiss) {
TextView title = view.findViewById(R.id.alertTitles);
TextView message = view.findViewById(R.id.alertBody);
TextView button2 = view.findViewById(R.id.tvTextBtn2);
CardView btnCard2 = view.findViewById(R.id.cvAlertOnClick2);
// set title and message
if (titles != null){
title.setText(titles);
}
if (message != null){
message.setText(messages);
}
if (button2 != null){
btnCard2.setVisibility(View.VISIBLE);
button2.setText(dismiss);
}
AlertDialog.Builder builder = new AlertDialog.Builder(context)
.setCancelable(cancelable)
.setView(view);
AlertDialog dialog = builder.create();
dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
btnCard2.setOnClickListener(view1 -> listener.onClickDisimiss(dialog));
return dialog;
}
public AlertDialog dialog(Context context,
Boolean cancelable,
View view,
@Nullable String titles,
@Nullable String messages,
@Nullable String dismiss,
@Nullable String link) {
/**
* Button1 untuk dismiss
* Button2 untuk link
*/
TextView title = view.findViewById(R.id.alertTitles);
TextView message = view.findViewById(R.id.alertBody);
TextView button = view.findViewById(R.id.tvTextBtn);
TextView button2 = view.findViewById(R.id.tvTextBtn2);
CardView btnCard = view.findViewById(R.id.cvAlertOnClick);
CardView btnCard2 = view.findViewById(R.id.cvAlertOnClick2);
// set title and message
if (titles != null){
......@@ -291,7 +343,13 @@ public class Utils {
}
if (button != null){
button.setText(buttons);
btnCard.setVisibility(View.VISIBLE);
button.setText(link);
}
if (button2 != null) {
btnCard2.setVisibility(View.VISIBLE);
button2.setText(dismiss);
}
AlertDialog.Builder builder = new AlertDialog.Builder(context)
......@@ -300,7 +358,14 @@ public class Utils {
AlertDialog dialog = builder.create();
dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
btnCard.setOnClickListener(view1 -> listener.onClickDisimiss(dialog));
btnCard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listener.onClickLink(dialog);
}
});
btnCard2.setOnClickListener(view1 -> listener.onClickDisimiss(dialog));
return dialog;
}
......
......@@ -15,7 +15,7 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/divider"
app:layout_constraintBottom_toTopOf="@id/cvAlertDialog"
>
<LinearLayout
......@@ -45,32 +45,67 @@
</com.google.android.material.card.MaterialCardView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@id/cvAlertDialog">
<com.google.android.material.card.MaterialCardView
android:id="@+id/cvAlertOnClick"
app:cardCornerRadius="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:clickable="true"
android:focusable="true">
<View
android:id="@+id/divider"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="1dp"
style="@style/Divider.Horizontal"
app:layout_constraintTop_toBottomOf="@id/cvAlertDialog"/>
style="@style/Divider.Horizontal"/>
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tvTextBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Coba Lagi"
android:textSize="18sp"
android:textColor="#3949AB"
android:textFontWeight="600"
android:paddingVertical="15dp"
android:gravity="center"/>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/cvAlertOnClick"
android:id="@+id/cvAlertOnClick2"
app:cardCornerRadius="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
app:layout_constraintTop_toBottomOf="@id/divider">
android:visibility="gone"
android:focusable="true">
<View
android:id="@+id/divider2"
android:layout_width="match_parent"
android:layout_height="1dp"
style="@style/Divider.Horizontal"/>
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tvTextBtn"
android:id="@+id/tvTextBtn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Coba Lagi"
android:textSize="18sp"
android:textFontWeight="600"
android:paddingVertical="15dp"
android:gravity="center"/>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -20,6 +20,7 @@
android:layout_marginTop="50dp"/>
<com.google.android.material.textview.MaterialTextView
android:id="@+id/descMesser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="messer"
......@@ -30,6 +31,14 @@
android:layout_below="@id/messerLogoDashboardLogin"
android:layout_centerHorizontal="true"/>
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="messer is a digital cashier application"
android:textColor="@color/colorWhite"
android:layout_below="@id/descMesser"
android:layout_centerHorizontal="true"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/signUpButtonDashboardLogin"
android:layout_width="match_parent"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment