Commit 460790bd authored by Wahyu Wibowo's avatar Wahyu Wibowo

perbaiki bug cart

parent e4777055
...@@ -2,6 +2,7 @@ package com.example.yourcashiertest.activities; ...@@ -2,6 +2,7 @@ package com.example.yourcashiertest.activities;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
...@@ -26,6 +27,7 @@ public class CartActivity extends AppCompatActivity { ...@@ -26,6 +27,7 @@ public class CartActivity extends AppCompatActivity {
CartAdapter adapter; CartAdapter adapter;
private static int SUM = 0; private static int SUM = 0;
public static String PRICE = "price"; public static String PRICE = "price";
Product product;
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@Override @Override
...@@ -37,7 +39,8 @@ public class CartActivity extends AppCompatActivity { ...@@ -37,7 +39,8 @@ public class CartActivity extends AppCompatActivity {
binding.rvCartList.setLayoutManager(new LinearLayoutManager(this)); binding.rvCartList.setLayoutManager(new LinearLayoutManager(this));
binding.rvCartList.setAdapter(adapter); binding.rvCartList.setAdapter(adapter);
ProductViewModel viewModel = new ViewModelProvider(this).get(ProductViewModel.class); product = new Product();
// viewModel = new ViewModelProvider(this).get(ProductViewModel.class);
CartViewModel cartViewModel = new ViewModelProvider(this).get(CartViewModel.class); CartViewModel cartViewModel = new ViewModelProvider(this).get(CartViewModel.class);
cartViewModel.getCarts().observe(this, carts -> adapter.setCartList(carts)); cartViewModel.getCarts().observe(this, carts -> adapter.setCartList(carts));
......
...@@ -3,30 +3,29 @@ package com.example.yourcashiertest.activities; ...@@ -3,30 +3,29 @@ package com.example.yourcashiertest.activities;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.Manifest; import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Application;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Log;
import android.widget.PopupMenu; import android.widget.PopupMenu;
import android.widget.Toast; import android.widget.Toast;
import com.example.yourcashiertest.R; import com.example.yourcashiertest.R;
import com.example.yourcashiertest.adapters.CategoryAdapter; import com.example.yourcashiertest.adapters.CategoryAdapter;
import com.example.yourcashiertest.adapters.ProductAdapter; import com.example.yourcashiertest.adapters.ProductAdapter;
import com.example.yourcashiertest.databases.DBHelper;
import com.example.yourcashiertest.databinding.ActivityMainBinding; import com.example.yourcashiertest.databinding.ActivityMainBinding;
import com.example.yourcashiertest.entities.Cart; import com.example.yourcashiertest.entities.Cart;
import com.example.yourcashiertest.entities.Product; import com.example.yourcashiertest.entities.Product;
import com.example.yourcashiertest.repositories.ProductRepository;
import com.example.yourcashiertest.viewmodels.CartViewModel; import com.example.yourcashiertest.viewmodels.CartViewModel;
import com.example.yourcashiertest.viewmodels.ProductViewModel; import com.example.yourcashiertest.viewmodels.ProductViewModel;
...@@ -68,14 +67,12 @@ public class MainActivity extends AppCompatActivity { ...@@ -68,14 +67,12 @@ public class MainActivity extends AppCompatActivity {
cartViewModel.getCarts().observe(this, carts -> { cartViewModel.getCarts().observe(this, carts -> {
if (carts.size() != 0) { if (carts.size() != 0) {
binding.tvCount.setText(String.valueOf(carts.size())); binding.tvCount.setText(String.valueOf(carts.size()));
cartVisibility = true;
}else { }else {
cartVisibility = false; binding.tvCount.setText(String.valueOf(0));
} }
}); });
String name = prefManager.getDataUser(); String name = prefManager.getDataUser();
binding.tvUser.setText(name); binding.tvUser.setText(name);
binding.setCartVisibility(cartVisibility);
// settings menu // settings menu
binding.ivCart.setOnClickListener(view -> startActivity(new Intent(MainActivity.this, CartActivity.class))); binding.ivCart.setOnClickListener(view -> startActivity(new Intent(MainActivity.this, CartActivity.class)));
binding.ivSettings.setOnClickListener(view -> { binding.ivSettings.setOnClickListener(view -> {
...@@ -122,14 +119,13 @@ public class MainActivity extends AppCompatActivity { ...@@ -122,14 +119,13 @@ public class MainActivity extends AppCompatActivity {
viewModel = new ViewModelProvider(this).get(ProductViewModel.class); viewModel = new ViewModelProvider(this).get(ProductViewModel.class);
viewModel.getProducts().observe(this, adapter::setProducts); viewModel.getProducts().observe(this, adapter::setProducts);
viewModel.getProducts().observe(this, products -> { List<Product> product = DBHelper.getAllProduct(getApplicationContext());
List<String> category = new ArrayList<>(); List<String> category = new ArrayList<>();
for (int i = 0; i < products.size(); i++){ for (int i = 0; i < product.size(); i++){
category.add(products.get(i).getCategory().toLowerCase()); category.add(product.get(i).getCategory());
} }
categoryAdapter.setCategories(category); categoryAdapter.setCategories(category);
}); categoryAdapter.setListener(c -> viewModel.filter(c.toLowerCase()));
categoryAdapter.setListener(category -> viewModel.filter(category.toLowerCase()));
adapter.setListener(new ProductAdapter.ProductListener() { adapter.setListener(new ProductAdapter.ProductListener() {
@Override @Override
...@@ -177,8 +173,6 @@ public class MainActivity extends AppCompatActivity { ...@@ -177,8 +173,6 @@ public class MainActivity extends AppCompatActivity {
startActivity(new Intent(MainActivity.this, CartActivity.class)); startActivity(new Intent(MainActivity.this, CartActivity.class));
finish(); finish();
}else { }else {
product.setQuantity(product.getQuantity() - 1);
viewModel.updateProduct(product);
Cart cart = new Cart(0,"", "", 0, 0, 0); Cart cart = new Cart(0,"", "", 0, 0, 0);
cart.setIdProduct(product.getId()); cart.setIdProduct(product.getId());
cart.setImage(product.getPhoto()); cart.setImage(product.getPhoto());
...@@ -192,16 +186,13 @@ public class MainActivity extends AppCompatActivity { ...@@ -192,16 +186,13 @@ public class MainActivity extends AppCompatActivity {
} }
public void checkProduct(Product product){ public void checkProduct(Product product){
cartViewModel.getCarts().observe(this, new Observer<List<Cart>>() { cartViewModel.getCarts().observe(this, carts -> {
@Override
public void onChanged(List<Cart> carts) {
for(int i = 0; i < carts.size(); i++){ for(int i = 0; i < carts.size(); i++){
if (carts.get(i).getNameProduct().equals(product.getName())){ if (carts.get(i).getNameProduct().equals(product.getName())){
added = true; added = true;
break; break;
} }
} }
}
}); });
} }
......
...@@ -4,8 +4,6 @@ import androidx.annotation.RequiresApi; ...@@ -4,8 +4,6 @@ import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
...@@ -13,16 +11,22 @@ import android.os.Build; ...@@ -13,16 +11,22 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import android.view.View; import android.view.View;
import com.example.yourcashiertest.R; import com.example.yourcashiertest.R;
import com.example.yourcashiertest.adapters.PaymentAdapter; import com.example.yourcashiertest.adapters.PaymentAdapter;
import com.example.yourcashiertest.databases.DBHelper;
import com.example.yourcashiertest.databinding.ActivityPaymentBinding; import com.example.yourcashiertest.databinding.ActivityPaymentBinding;
import com.example.yourcashiertest.entities.Cart;
import com.example.yourcashiertest.entities.Product;
import com.example.yourcashiertest.models.ResponsePayment; import com.example.yourcashiertest.models.ResponsePayment;
import com.example.yourcashiertest.utils.Convert; import com.example.yourcashiertest.utils.Convert;
import com.example.yourcashiertest.utils.ViewUtil; import com.example.yourcashiertest.utils.ViewUtil;
import com.example.yourcashiertest.viewmodels.CartViewModel; import com.example.yourcashiertest.viewmodels.CartViewModel;
import com.example.yourcashiertest.viewmodels.ProductViewModel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
public class PaymentActivity extends AppCompatActivity { public class PaymentActivity extends AppCompatActivity {
...@@ -32,6 +36,7 @@ public class PaymentActivity extends AppCompatActivity { ...@@ -32,6 +36,7 @@ public class PaymentActivity extends AppCompatActivity {
public int refund; public int refund;
public int amount; public int amount;
CartViewModel cartViewModel; CartViewModel cartViewModel;
ProductViewModel viewModel;
public static final String PAY_WITH = "pay_with"; public static final String PAY_WITH = "pay_with";
private ArrayList<ResponsePayment> responsePayments = new ArrayList<>(); private ArrayList<ResponsePayment> responsePayments = new ArrayList<>();
...@@ -43,10 +48,9 @@ public class PaymentActivity extends AppCompatActivity { ...@@ -43,10 +48,9 @@ public class PaymentActivity extends AppCompatActivity {
binding = DataBindingUtil.setContentView(this, R.layout.activity_payment); binding = DataBindingUtil.setContentView(this, R.layout.activity_payment);
cartViewModel = new ViewModelProvider(this).get(CartViewModel.class); cartViewModel = new ViewModelProvider(this).get(CartViewModel.class);
viewModel = new ViewModelProvider(this).get(ProductViewModel.class);
amount = getIntent().getIntExtra(CartActivity.PRICE, 0); amount = getIntent().getIntExtra(CartActivity.PRICE, 0);
binding.setAmount(Convert.changeToCurrency(amount)); binding.setAmount(Convert.changeToCurrency(amount));
// binding.rvPayment.setLayoutManager(new LinearLayoutManager(this, RecyclerView.VERTICAL, false));
responsePayments.add(new ResponsePayment("https://i.ibb.co/yfcFMHc/undraw-wallet-aym5.png", "Cash")); responsePayments.add(new ResponsePayment("https://i.ibb.co/yfcFMHc/undraw-wallet-aym5.png", "Cash"));
responsePayments.add(new ResponsePayment("https://i.ibb.co/qNnKh5n/undraw-Credit-card-re-blml.png", "Card")); responsePayments.add(new ResponsePayment("https://i.ibb.co/qNnKh5n/undraw-Credit-card-re-blml.png", "Card"));
...@@ -70,6 +74,7 @@ public class PaymentActivity extends AppCompatActivity { ...@@ -70,6 +74,7 @@ public class PaymentActivity extends AppCompatActivity {
ViewUtil.showMessage(view, "AmountPaid doesn't less than total price"); ViewUtil.showMessage(view, "AmountPaid doesn't less than total price");
} else { } else {
refund = amountPaid - amount; refund = amountPaid - amount;
updateDataProduct();
startActivity(new Intent(PaymentActivity.this, StatusPayment.class).putExtra(REFUND, refund).putExtra(PAY_WITH, paymentMethod)); startActivity(new Intent(PaymentActivity.this, StatusPayment.class).putExtra(REFUND, refund).putExtra(PAY_WITH, paymentMethod));
cartViewModel.clear(); cartViewModel.clear();
finish(); finish();
...@@ -77,6 +82,24 @@ public class PaymentActivity extends AppCompatActivity { ...@@ -77,6 +82,24 @@ public class PaymentActivity extends AppCompatActivity {
} }
} }
void updateDataProduct(){
List<Product> products = DBHelper.getAllProduct(getApplicationContext());
List<Cart> carts = DBHelper.getAllCart(getApplicationContext());
for (int c = 0; c < carts.size(); c++){
for (int p = 0; p < products.size(); p++){
if (carts.get(c).getIdProduct() == products.get(p).getId()){
Log.d("Product", products.get(p).getName());
products.get(p).setQuantity(products.get(p).getQuantity() - carts.get(c).getQty());
Log.d("quantity", String.valueOf(products.get(p).getQuantity()));
viewModel.updateProduct(products.get(p));
return;
}
}
}
}
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
......
...@@ -14,6 +14,10 @@ import java.util.List; ...@@ -14,6 +14,10 @@ import java.util.List;
@Dao @Dao
public interface CartDao { public interface CartDao {
@Query("SELECT * FROM Cart")
public List<Cart> getAllCarts();
@Query("SELECT * FROM Cart ORDER BY id DESC") @Query("SELECT * FROM Cart ORDER BY id DESC")
public LiveData<List<Cart>> getCarts(); public LiveData<List<Cart>> getCarts();
......
...@@ -17,8 +17,11 @@ public interface ProductDao { ...@@ -17,8 +17,11 @@ public interface ProductDao {
@Query("SELECT * FROM products ORDER BY id DESC") @Query("SELECT * FROM products ORDER BY id DESC")
public LiveData<List<Product>> getProducts(); public LiveData<List<Product>> getProducts();
@Query("SELECT * FROM products")
public List<Product> getAll();
// @Query("SELECT category FROM products") // @Query("SELECT category FROM products")
// public LiveData<List<Product>> getAllCategory(); // public List<Product> getAllCategory();
@Query("SELECT * FROM products WHERE name LIKE :query OR category LIKE:query ORDER BY id DESC") @Query("SELECT * FROM products WHERE name LIKE :query OR category LIKE:query ORDER BY id DESC")
public LiveData<List<Product>> getFilteredProducts(String query); public LiveData<List<Product>> getFilteredProducts(String query);
......
package com.example.yourcashiertest.databases;
import android.content.Context;
import com.example.yourcashiertest.entities.Cart;
import com.example.yourcashiertest.entities.Product;
import java.util.List;
public class DBHelper {
public static List<Product> getAllProduct(Context context){
List<Product> list;
LocalDatabase db = LocalDatabase.getDatabase(context);
list = db.productDao().getAll();
return list;
}
public static List<Cart> getAllCart(Context context){
List<Cart> list;
LocalDatabase db = LocalDatabase.getDatabase(context);
list = db.cartDao().getAllCarts();
return list;
}
}
...@@ -54,6 +54,7 @@ public abstract class LocalDatabase extends RoomDatabase { ...@@ -54,6 +54,7 @@ public abstract class LocalDatabase extends RoomDatabase {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
LocalDatabase.class, "yourcashier_database") LocalDatabase.class, "yourcashier_database")
.addMigrations(MIGRATION_1_2, MIGRATION_2_3) .addMigrations(MIGRATION_1_2, MIGRATION_2_3)
.allowMainThreadQueries()
.build(); .build();
} }
} }
......
...@@ -70,6 +70,10 @@ public class Cart implements Parcelable { ...@@ -70,6 +70,10 @@ public class Cart implements Parcelable {
this.realPrice = realPrice; this.realPrice = realPrice;
} }
public Cart() {
}
public long getId() { public long getId() {
return id; return id;
} }
......
...@@ -53,6 +53,11 @@ public class Product implements Parcelable { ...@@ -53,6 +53,11 @@ public class Product implements Parcelable {
return new Product[size]; return new Product[size];
} }
}; };
public Product() {
}
public long getId() { public long getId() {
return id; return id;
} }
......
<vector android:height="24dp" android:tint="@color/colorPrimary"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#0E9185"
android:pathData="M12,12m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0"/>
</vector>
\ No newline at end of file
...@@ -54,7 +54,6 @@ ...@@ -54,7 +54,6 @@
android:background="@drawable/cart_ic" android:background="@drawable/cart_ic"
app:layout_constraintEnd_toEndOf="@+id/ivCart" app:layout_constraintEnd_toEndOf="@+id/ivCart"
app:layout_constraintTop_toTopOf="@+id/ivCart" app:layout_constraintTop_toTopOf="@+id/ivCart"
android:visibility="@{cartVisibility ? View.VISIBLE : View.GONE}"
android:layout_height="15dp"/> android:layout_height="15dp"/>
<TextView <TextView
...@@ -64,7 +63,6 @@ ...@@ -64,7 +63,6 @@
android:textSize="12sp" android:textSize="12sp"
android:textStyle="bold" android:textStyle="bold"
android:textColor="#7EDCD6" android:textColor="#7EDCD6"
android:visibility="@{cartVisibility ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="@+id/circleCart" app:layout_constraintBottom_toBottomOf="@+id/circleCart"
app:layout_constraintEnd_toEndOf="@+id/circleCart" app:layout_constraintEnd_toEndOf="@+id/circleCart"
app:layout_constraintStart_toStartOf="@+id/circleCart" app:layout_constraintStart_toStartOf="@+id/circleCart"
......
...@@ -142,6 +142,19 @@ ...@@ -142,6 +142,19 @@
android:text="Add to cart" android:text="Add to cart"
app:layout_constraintBottom_toBottomOf="parent"/> app:layout_constraintBottom_toBottomOf="parent"/>
<TextView
android:id="@+id/textView"
android:layout_width="20sp"
android:layout_height="20sp"
android:textColor="@color/white"
android:textAlignment="center"
android:text="@{product.quantity + ``}"
android:background="@drawable/ic_stok"
app:layout_constraintBottom_toBottomOf="@+id/tvStock"
app:layout_constraintTop_toTopOf="@+id/tvStock"
app:layout_constraintEnd_toEndOf="parent"
tools:layout_editor_absoluteX="310dp" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
......
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