Commit 7490e8df authored by Wahyu Wibowo's avatar Wahyu Wibowo

add fitur cart

parent 9154539c
package com.example.yourcashiertest.activities; package com.example.yourcashiertest.activities;
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.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.content.Intent; import android.content.Intent;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import com.example.yourcashiertest.R; import com.example.yourcashiertest.R;
import com.example.yourcashiertest.adapters.CartAdapter; import com.example.yourcashiertest.adapters.CartAdapter;
import com.example.yourcashiertest.databinding.ActivityCartBinding; import com.example.yourcashiertest.databinding.ActivityCartBinding;
import com.example.yourcashiertest.entities.Cart;
import com.example.yourcashiertest.viewmodels.CartViewModel;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols; import java.text.DecimalFormatSymbols;
import java.util.List;
public class CartActivity extends AppCompatActivity { public class CartActivity extends AppCompatActivity {
ActivityCartBinding binding; ActivityCartBinding binding;
...@@ -21,14 +30,47 @@ public class CartActivity extends AppCompatActivity { ...@@ -21,14 +30,47 @@ public class CartActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_cart); binding = DataBindingUtil.setContentView(this, R.layout.activity_cart);
// adapter = new CartAdapter(); adapter = new CartAdapter();
// binding.rvCartList.setLayoutManager(new LinearLayoutManager(this)); binding.rvCartList.setLayoutManager(new LinearLayoutManager(this));
// binding.rvCartList.setAdapter(adapter); binding.rvCartList.setAdapter(adapter);
CartViewModel cartViewModel = new ViewModelProvider(this).get(CartViewModel.class);
cartViewModel.getCarts().observe(this, carts -> adapter.setCartList(carts));
cartViewModel.getCarts().observe(this, new Observer<List<Cart>>() {
@Override
public void onChanged(List<Cart> carts) {
int sum = 0;
for (int i = 0; i < carts.size(); i++){
sum += carts.get(i).getPrice();
}
binding.tvTotalPrice.setText(String.valueOf(sum));
}
});
adapter.setCartListener(new CartAdapter.CartListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onIncrease(Cart cart) {
cart.setQty(cart.getQty() + 1);
cart.setPrice(Math.multiplyExact(cart.getRealPrice(), cart.getQty()));
cartViewModel.updateCart(cart);
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onDecrease(Cart cart) {
cart.setQty(cart.getQty() - 1);
if (cart.getQty() == 0){
cartViewModel.deleteCart(cart);
}else {
cart.setPrice(Math.multiplyExact(cart.getRealPrice(), cart.getQty()));
cartViewModel.updateCart(cart);
}
}
});
// CartViewModel cartViewModel = new ViewModelProvider(this).get(CartViewModel.class); binding.setViewModelCart(cartViewModel);
// cartViewModel.getCarts().observe(this, carts -> adapter.setCartList(carts));
//
// binding.setViewModelCart(cartViewModel);
binding.ivBtnBack.setOnClickListener(view -> startActivity(new Intent(CartActivity.this, MainActivity.class))); binding.ivBtnBack.setOnClickListener(view -> startActivity(new Intent(CartActivity.this, MainActivity.class)));
binding.btnCheckout.setOnClickListener(view -> { binding.btnCheckout.setOnClickListener(view -> {
......
...@@ -15,10 +15,12 @@ import android.text.TextWatcher; ...@@ -15,10 +15,12 @@ import android.text.TextWatcher;
import android.view.Menu; import android.view.Menu;
import android.view.View; import android.view.View;
import android.widget.PopupMenu; import android.widget.PopupMenu;
import android.widget.Toast;
import com.example.yourcashiertest.R; import com.example.yourcashiertest.R;
import com.example.yourcashiertest.adapters.ProductAdapter; import com.example.yourcashiertest.adapters.ProductAdapter;
import com.example.yourcashiertest.databinding.ActivityMainBinding; import com.example.yourcashiertest.databinding.ActivityMainBinding;
import com.example.yourcashiertest.entities.Cart;
import com.example.yourcashiertest.entities.Product; import com.example.yourcashiertest.entities.Product;
import com.example.yourcashiertest.models.CartModel; import com.example.yourcashiertest.models.CartModel;
import com.example.yourcashiertest.viewmodels.CartViewModel; import com.example.yourcashiertest.viewmodels.CartViewModel;
...@@ -49,8 +51,11 @@ public class MainActivity extends AppCompatActivity { ...@@ -49,8 +51,11 @@ public class MainActivity extends AppCompatActivity {
ProductAdapter adapter = new ProductAdapter(); ProductAdapter adapter = new ProductAdapter();
binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
// cartViewModel = new ViewModelProvider(this).get(CartViewModel.class); cartViewModel = new ViewModelProvider(this).get(CartViewModel.class);
cartViewModel.getCarts().observe(this, carts -> {
if (carts.size() != 0) binding.tvCount.setText(String.valueOf(carts.size()));
else binding.tvCount.setText(String.valueOf(0));
});
String name = getIntent().getStringExtra(LoginActivity.DATA_LOGIN); String name = getIntent().getStringExtra(LoginActivity.DATA_LOGIN);
binding.tvUser.setText(name); binding.tvUser.setText(name);
// settings menu // settings menu
...@@ -129,20 +134,15 @@ public class MainActivity extends AppCompatActivity { ...@@ -129,20 +134,15 @@ public class MainActivity extends AppCompatActivity {
public void addToCart(Product product){ public void addToCart(Product product){
// Cart cart = new Cart(0,"", "", 0, 0); Cart cart = new Cart(0,"", "", 0, 0, 0);
// cart.setIdProduct(product.getId());
// cart.setImage(product.getPhoto());
// cart.setNameProduct(product.getName());
// cart.setPrice(product.getPrice());
// cart.setQty(1);
// cartViewModel.insertCart(cart);
List<CartModel> list = new ArrayList<>();
CartModel cart = new CartModel();
cart.setIdProduct(product.getId()); cart.setIdProduct(product.getId());
cart.setNameProduct(product.getName());
cart.setImage(product.getPhoto()); cart.setImage(product.getPhoto());
cart.setNameProduct(product.getName());
cart.setPrice(product.getPrice()); cart.setPrice(product.getPrice());
cart.setQty(product.getQuantity()); cart.setQty(1);
cart.setRealPrice(product.getPrice());
cartViewModel.insertCart(cart);
Toast.makeText(MainActivity.this, "Data berhasil ditambahkan ke keranjang", Toast.LENGTH_LONG).show();
} }
......
...@@ -14,6 +14,8 @@ import com.example.yourcashiertest.entities.Cart; ...@@ -14,6 +14,8 @@ import com.example.yourcashiertest.entities.Cart;
import com.example.yourcashiertest.entities.Product; import com.example.yourcashiertest.entities.Product;
import com.example.yourcashiertest.models.CartModel; import com.example.yourcashiertest.models.CartModel;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -22,8 +24,8 @@ public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> { ...@@ -22,8 +24,8 @@ public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> {
private List<Cart> carts = new ArrayList<>(); private List<Cart> carts = new ArrayList<>();
public interface CartListener{ public interface CartListener{
void onIncrease(); void onIncrease(Cart cart);
void onDecrease(); void onDecrease(Cart cart);
} }
private CartListener listener; private CartListener listener;
...@@ -56,7 +58,8 @@ public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> { ...@@ -56,7 +58,8 @@ public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> {
@Override @Override
public int getItemCount() { public int getItemCount() {
return carts.size(); if (carts.size() != 0)return carts.size();
else return 0;
} }
public class ViewHolder extends RecyclerView.ViewHolder { public class ViewHolder extends RecyclerView.ViewHolder {
...@@ -72,6 +75,19 @@ public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> { ...@@ -72,6 +75,19 @@ public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> {
public void bindData(Cart cart, CartListener listener) { public void bindData(Cart cart, CartListener listener) {
cartItemBinding.setCartProduct(cart); cartItemBinding.setCartProduct(cart);
DecimalFormat rupiah = (DecimalFormat) DecimalFormat.getCurrencyInstance();
DecimalFormatSymbols format = new DecimalFormatSymbols();
format.setCurrencySymbol("Rp. ");
format.setMonetaryDecimalSeparator(',');
format.setGroupingSeparator('.');
rupiah.setDecimalFormatSymbols(format);
cartItemBinding.setPrice(rupiah.format(cart.getPrice()));
cartItemBinding.btnAdd.setOnClickListener(view -> listener.onIncrease(cart));
cartItemBinding.btnMin.setOnClickListener(view -> listener.onDecrease(cart));
} }
} }
} }
...@@ -20,11 +20,11 @@ import com.example.yourcashiertest.entities.Product; ...@@ -20,11 +20,11 @@ import com.example.yourcashiertest.entities.Product;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@Database(entities = {Product.class}, version = 1, exportSchema = false) @Database(entities = {Product.class, Cart.class}, version = 3, exportSchema = false)
public abstract class LocalDatabase extends RoomDatabase { public abstract class LocalDatabase extends RoomDatabase {
public abstract ProductDao productDao(); public abstract ProductDao productDao();
// public abstract CartDao cartDao(); public abstract CartDao cartDao();
private static volatile LocalDatabase INSTANCE; private static volatile LocalDatabase INSTANCE;
private static final int NUMBER_OF_THREADS = 4; private static final int NUMBER_OF_THREADS = 4;
...@@ -32,26 +32,20 @@ public abstract class LocalDatabase extends RoomDatabase { ...@@ -32,26 +32,20 @@ public abstract class LocalDatabase extends RoomDatabase {
public static final ExecutorService databaseWriteExecutor = public static final ExecutorService databaseWriteExecutor =
Executors.newFixedThreadPool(NUMBER_OF_THREADS); Executors.newFixedThreadPool(NUMBER_OF_THREADS);
// public static final Migration MIGRATION_1_2 = new Migration(1,2) { public static final Migration MIGRATION_1_2 = new Migration(1, 2) {
// @Override @Override
// public void migrate(@NonNull SupportSQLiteDatabase database) { public void migrate(@NonNull SupportSQLiteDatabase database) {
// database.execSQL("CREATE TABLE IF NOT EXISTS Cart (id INTEGER, idProduct INTEGER,price INTEGER, qty INTEGER,nameProduct TEXT, image TEXT)"); database.execSQL("CREATE TABLE IF NOT EXISTS Cart (id INTEGER NOT NULL, idProduct INTEGER NOT NULL," +
// } "price INTEGER NOT NULL, qty INTEGER NOT NULL, nameProduct TEXT NOT NULL, image TEXT NOT NULL, PRIMARY KEY(id))");
// }; }
// };
// public static final Migration MIGRATION_1_3 = new Migration(1,3) {
// @Override public static final Migration MIGRATION_2_3 = new Migration(2,3) {
// public void migrate(@NonNull SupportSQLiteDatabase database) { @Override
// database.execSQL("DROP TABLE Cart"); public void migrate(@NonNull SupportSQLiteDatabase database) {
// } database.execSQL("ALTER TABLE Cart ADD COLUMN realPrice INTEGER NOT NULL DEFAULT 0");
// }; }
// };
// public static final Migration MIGRATION_1_4 = new Migration(1,4) {
// @Override
// public void migrate(@NonNull SupportSQLiteDatabase database) {
// database.execSQL("CREATE TABLE IF NOT EXISTS Cart (id INTEGER, idProduct INTEGER,price INTEGER, qty INTEGER,nameProduct TEXT, image TEXT)");
// }
// };
public static LocalDatabase getDatabase(Context context) { public static LocalDatabase getDatabase(Context context) {
if (INSTANCE == null) { if (INSTANCE == null) {
...@@ -59,6 +53,7 @@ public abstract class LocalDatabase extends RoomDatabase { ...@@ -59,6 +53,7 @@ public abstract class LocalDatabase extends RoomDatabase {
if (INSTANCE == null) { if (INSTANCE == null) {
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)
.build(); .build();
} }
} }
......
...@@ -35,6 +35,10 @@ public class Cart implements Parcelable { ...@@ -35,6 +35,10 @@ public class Cart implements Parcelable {
@ColumnInfo(name = "image") @ColumnInfo(name = "image")
String image; String image;
@NonNull
@ColumnInfo(name = "realPrice")
long realPrice = 0;
protected Cart(Parcel in) { protected Cart(Parcel in) {
id = in.readLong(); id = in.readLong();
idProduct = in.readLong(); idProduct = in.readLong();
...@@ -42,6 +46,7 @@ public class Cart implements Parcelable { ...@@ -42,6 +46,7 @@ public class Cart implements Parcelable {
image = in.readString(); image = in.readString();
price = in.readLong(); price = in.readLong();
qty = in.readLong(); qty = in.readLong();
price = in.readLong();
} }
public static final Creator<Cart> CREATOR = new Creator<Cart>() { public static final Creator<Cart> CREATOR = new Creator<Cart>() {
...@@ -56,12 +61,13 @@ public class Cart implements Parcelable { ...@@ -56,12 +61,13 @@ public class Cart implements Parcelable {
} }
}; };
public Cart(long idProduct, String nameProduct, String image, long price, long qty){ public Cart(long idProduct, String nameProduct, String image, long price, long qty, long realPrice){
this.idProduct = idProduct; this.idProduct = idProduct;
this.nameProduct = nameProduct; this.nameProduct = nameProduct;
this.image = image; this.image = image;
this.price = price; this.price = price;
this.qty = qty; this.qty = qty;
this.realPrice = realPrice;
} }
public long getId() { public long getId() {
...@@ -112,6 +118,14 @@ public class Cart implements Parcelable { ...@@ -112,6 +118,14 @@ public class Cart implements Parcelable {
this.qty = qty; this.qty = qty;
} }
public Long getRealPrice() {
return realPrice;
}
public void setRealPrice(Long realPrice) {
this.realPrice = realPrice;
}
@Override @Override
public int describeContents() { public int describeContents() {
return 0; return 0;
...@@ -125,5 +139,6 @@ public class Cart implements Parcelable { ...@@ -125,5 +139,6 @@ public class Cart implements Parcelable {
dest.writeString(image); dest.writeString(image);
dest.writeLong(price); dest.writeLong(price);
dest.writeLong(qty); dest.writeLong(qty);
dest.writeLong(realPrice);
} }
} }
...@@ -16,7 +16,7 @@ public class CartRepository { ...@@ -16,7 +16,7 @@ public class CartRepository {
public CartRepository(Application application){ public CartRepository(Application application){
LocalDatabase db = LocalDatabase.getDatabase(application); LocalDatabase db = LocalDatabase.getDatabase(application);
// cartDao = db.cartDao(); cartDao = db.cartDao();
carts = cartDao.getCarts(); carts = cartDao.getCarts();
} }
......
...@@ -7,14 +7,19 @@ ...@@ -7,14 +7,19 @@
<variable <variable
name="cartProduct" name="cartProduct"
type="com.example.yourcashiertest.entities.Cart" /> type="com.example.yourcashiertest.entities.Cart" />
<variable <variable
name="qty" name="qty"
type="String" /> type="String" />
<variable
name="price"
type="String" />
</data> </data>
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -27,6 +32,7 @@ ...@@ -27,6 +32,7 @@
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="107dp" android:layout_width="107dp"
android:layout_height="110dp" android:layout_height="110dp"
app:file="@{cartProduct.image}"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.003" app:layout_constraintHorizontal_bias="0.003"
...@@ -42,7 +48,7 @@ ...@@ -42,7 +48,7 @@
android:layout_alignParentLeft="true" android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:gravity="top" android:gravity="top"
android:text="@string/burger_medi" android:text="@{cartProduct.nameProduct}"
android:textAppearance="@style/burger_medi" android:textAppearance="@style/burger_medi"
app:layout_constraintBottom_toBottomOf="@+id/imageView" app:layout_constraintBottom_toBottomOf="@+id/imageView"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
...@@ -59,7 +65,7 @@ ...@@ -59,7 +65,7 @@
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:gravity="top" android:gravity="top"
android:text="" android:text=""
tools:text="$6000" tools:text="@{price}"
android:textAppearance="@style/some_id" android:textAppearance="@style/some_id"
app:layout_constraintBottom_toBottomOf="@+id/imageView" app:layout_constraintBottom_toBottomOf="@+id/imageView"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
...@@ -109,8 +115,7 @@ ...@@ -109,8 +115,7 @@
android:id="@+id/tv_qty" android:id="@+id/tv_qty"
android:layout_width="10dp" android:layout_width="10dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@{qty}" android:text="@{cartProduct.qty + ``}"
tools:text="4"
app:layout_constraintBottom_toBottomOf="@+id/v_add" app:layout_constraintBottom_toBottomOf="@+id/v_add"
app:layout_constraintEnd_toStartOf="@+id/btn_add" app:layout_constraintEnd_toStartOf="@+id/btn_add"
app:layout_constraintStart_toEndOf="@+id/btn_min" app:layout_constraintStart_toEndOf="@+id/btn_min"
......
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