Commit f7507423 authored by Ahmad Abi Mulya's avatar Ahmad Abi Mulya
parents e72c135c 06e9f232
...@@ -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;
...@@ -25,6 +26,9 @@ import com.example.yourcashiertest.viewmodels.CartViewModel; ...@@ -25,6 +26,9 @@ import com.example.yourcashiertest.viewmodels.CartViewModel;
import com.example.yourcashiertest.viewmodels.ProductViewModel; import com.example.yourcashiertest.viewmodels.ProductViewModel;
import com.example.yourcashiertest.viewmodels.TransaksiViewModel; import com.example.yourcashiertest.viewmodels.TransaksiViewModel;
import java.util.ArrayList;
import java.util.List;
public class CartActivity extends AppCompatActivity { public class CartActivity extends AppCompatActivity {
ActivityCartBinding binding; ActivityCartBinding binding;
...@@ -37,6 +41,8 @@ public class CartActivity extends AppCompatActivity { ...@@ -37,6 +41,8 @@ public class CartActivity extends AppCompatActivity {
TransaksiViewModel transaksiViewModel; TransaksiViewModel transaksiViewModel;
CartViewModel cartViewModel; CartViewModel cartViewModel;
List<Cart> cartList = new ArrayList<>();
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -52,7 +58,10 @@ public class CartActivity extends AppCompatActivity { ...@@ -52,7 +58,10 @@ public class CartActivity extends AppCompatActivity {
transaksiViewModel = new ViewModelProvider(this).get(TransaksiViewModel.class); transaksiViewModel = new ViewModelProvider(this).get(TransaksiViewModel.class);
cartViewModel = new ViewModelProvider(this).get(CartViewModel.class); cartViewModel = new ViewModelProvider(this).get(CartViewModel.class);
cartViewModel.getCarts().observe(this, carts -> adapter.setCartList(carts)); cartViewModel.getCarts().observe(this, carts -> {
adapter.setCartList(carts);
cartList.addAll(carts);
});
cartViewModel.getCarts().observe(this, carts -> { cartViewModel.getCarts().observe(this, carts -> {
int count = 0; int count = 0;
...@@ -110,12 +119,13 @@ public class CartActivity extends AppCompatActivity { ...@@ -110,12 +119,13 @@ public class CartActivity extends AppCompatActivity {
binding.saveOrder.setOnClickListener(view -> saveTransaction(SUM)); binding.saveOrder.setOnClickListener(view -> saveTransaction(SUM));
} }
private void saveTransaction(int amount) { public void saveTransaction(int amount) {
Transaksi transaksi = new Transaksi(0, ""); Transaksi transaksi = new Transaksi(0, "");
transaksi.setAmount(amount); transaksi.setAmount(amount);
transaksi.setStatus("Pending"); transaksi.setStatus("Pending");
transaksiViewModel.insertTransaksi(transaksi); transaksiViewModel.insertTransaksi(transaksi);
cartViewModel.clear(); cartViewModel.clear();
finish();
startActivity(new Intent(CartActivity.this, OrderActivity.class)); startActivity(new Intent(CartActivity.this, OrderActivity.class));
Toast.makeText(getApplicationContext(), "Please Continue Payment", Toast.LENGTH_LONG).show(); Toast.makeText(getApplicationContext(), "Please Continue Payment", Toast.LENGTH_LONG).show();
} }
......
package com.example.yourcashiertest.activities; package com.example.yourcashiertest.activities;
import androidx.appcompat.app.AlertDialog;
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.Observer;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
...@@ -17,6 +19,7 @@ import com.example.yourcashiertest.databases.DBHelper; ...@@ -17,6 +19,7 @@ import com.example.yourcashiertest.databases.DBHelper;
import com.example.yourcashiertest.databinding.ActivityOrderBinding; import com.example.yourcashiertest.databinding.ActivityOrderBinding;
import com.example.yourcashiertest.entities.Transaksi; import com.example.yourcashiertest.entities.Transaksi;
import com.example.yourcashiertest.viewmodels.TransaksiViewModel; import com.example.yourcashiertest.viewmodels.TransaksiViewModel;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.List; import java.util.List;
...@@ -25,6 +28,8 @@ public class OrderActivity extends AppCompatActivity { ...@@ -25,6 +28,8 @@ public class OrderActivity extends AppCompatActivity {
ActivityOrderBinding binding; ActivityOrderBinding binding;
OrderAdapter adapter; OrderAdapter adapter;
TransaksiViewModel viewModel; TransaksiViewModel viewModel;
private final int ALERT_DIALOG_CLOSE = 10;
private final int ALERT_DIALOG_DELETE = 20;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -53,6 +58,8 @@ public class OrderActivity extends AppCompatActivity { ...@@ -53,6 +58,8 @@ public class OrderActivity extends AppCompatActivity {
popupMenu.show(); popupMenu.show();
}); });
binding.btnClear.setOnClickListener(view -> showAlertDialog(ALERT_DIALOG_DELETE));
adapter = new OrderAdapter(); adapter = new OrderAdapter();
binding.rvListOrder.setLayoutManager(new LinearLayoutManager(this)); binding.rvListOrder.setLayoutManager(new LinearLayoutManager(this));
binding.rvListOrder.setAdapter(adapter); binding.rvListOrder.setAdapter(adapter);
...@@ -71,4 +78,20 @@ public class OrderActivity extends AppCompatActivity { ...@@ -71,4 +78,20 @@ public class OrderActivity extends AppCompatActivity {
}); });
} }
private void showAlertDialog(int type) {
final boolean isDialogClose = type == ALERT_DIALOG_CLOSE;
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this);
builder.setTitle("Clear transaksi");
builder.setMessage("Are you sure ?")
.setCancelable(false)
.setPositiveButton("Yes", (dialogInterface, i) -> {
if (!isDialogClose) {
viewModel.clearTransaksi();
}
}).setNegativeButton("No", (dialogInterface, i) -> dialogInterface.cancel());
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
} }
\ No newline at end of file
...@@ -31,7 +31,9 @@ import com.example.yourcashiertest.viewmodels.TransaksiViewModel; ...@@ -31,7 +31,9 @@ import com.example.yourcashiertest.viewmodels.TransaksiViewModel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Stream;
//@RequiresApi(api = Build.VERSION_CODES.N)
public class PaymentActivity extends AppCompatActivity { public class PaymentActivity extends AppCompatActivity {
ActivityPaymentBinding binding; ActivityPaymentBinding binding;
...@@ -130,6 +132,20 @@ public class PaymentActivity extends AppCompatActivity { ...@@ -130,6 +132,20 @@ public class PaymentActivity extends AppCompatActivity {
transaksi.setAmount(amount); transaksi.setAmount(amount);
transaksi.setStatus("Success"); transaksi.setStatus("Success");
payViewModel.insertTransaksi(transaksi); payViewModel.insertTransaksi(transaksi);
// createDetailOrder();
}
private void createDetailOrder() {
Toast.makeText(getApplicationContext(), String.valueOf(getOrderId()), Toast.LENGTH_LONG).show();
}
private long getOrderId(){
List<Transaksi> orders = DBHelper.getAllTransaksi(getApplicationContext());
Transaksi order;
if (orders.size() == 0) order = orders.get(0);
else order = orders.get(orders.size() - 1);
Log.d("OrderId", String.valueOf(order.getOrderId()));
return order.getOrderId();
} }
@Override @Override
......
package com.example.yourcashiertest.daos;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import com.example.yourcashiertest.entities.OrderDetail;
@Dao
public interface OrderDetailDao {
@Insert(onConflict = OnConflictStrategy.IGNORE)
void insertOrderDetail(OrderDetail orderDetail);
}
...@@ -32,4 +32,7 @@ public interface TransaksiDao { ...@@ -32,4 +32,7 @@ public interface TransaksiDao {
@Delete @Delete
void deleteTransaksi(Transaksi transaksi); void deleteTransaksi(Transaksi transaksi);
@Query("DELETE FROM Transaksi")
void deleteAll();
} }
...@@ -13,21 +13,24 @@ import androidx.sqlite.db.SupportSQLiteDatabase; ...@@ -13,21 +13,24 @@ import androidx.sqlite.db.SupportSQLiteDatabase;
import androidx.sqlite.db.SupportSQLiteOpenHelper; import androidx.sqlite.db.SupportSQLiteOpenHelper;
import com.example.yourcashiertest.daos.CartDao; import com.example.yourcashiertest.daos.CartDao;
import com.example.yourcashiertest.daos.OrderDetailDao;
import com.example.yourcashiertest.daos.ProductDao; import com.example.yourcashiertest.daos.ProductDao;
import com.example.yourcashiertest.daos.TransaksiDao; import com.example.yourcashiertest.daos.TransaksiDao;
import com.example.yourcashiertest.entities.Cart; import com.example.yourcashiertest.entities.Cart;
import com.example.yourcashiertest.entities.OrderDetail;
import com.example.yourcashiertest.entities.Product; import com.example.yourcashiertest.entities.Product;
import com.example.yourcashiertest.entities.Transaksi; import com.example.yourcashiertest.entities.Transaksi;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@Database(entities = {Product.class, Cart.class, Transaksi.class}, version = 5, exportSchema = false) @Database(entities = {Product.class, Cart.class, Transaksi.class, OrderDetail.class}, version = 6, 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();
public abstract TransaksiDao transaksiDao(); public abstract TransaksiDao transaksiDao();
public abstract OrderDetailDao orderDetail();
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;
...@@ -43,7 +46,6 @@ public abstract class LocalDatabase extends RoomDatabase { ...@@ -43,7 +46,6 @@ public abstract class LocalDatabase extends RoomDatabase {
} }
}; };
public static final Migration MIGRATION_2_3 = new Migration(2,3) { public static final Migration MIGRATION_2_3 = new Migration(2,3) {
@Override @Override
public void migrate(@NonNull SupportSQLiteDatabase database) { public void migrate(@NonNull SupportSQLiteDatabase database) {
...@@ -65,13 +67,24 @@ public abstract class LocalDatabase extends RoomDatabase { ...@@ -65,13 +67,24 @@ public abstract class LocalDatabase extends RoomDatabase {
"amount INTEGER NOT NULL, status TEXT NOT NULL, PRIMARY KEY(orderId))"); "amount INTEGER NOT NULL, status TEXT NOT NULL, PRIMARY KEY(orderId))");
} }
}; };
public static final Migration MIGRATION_5_6 = new Migration(5, 6) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS OrderDetail (id INTEGER NOT NULL," +
" orderId INTEGER NOT NULL, productId INTEGER NOT NULL, qty INTEGER NOT NULL, price INTEGER NOT NULL," +
" PRIMARY KEY(id))");
}
};
public static LocalDatabase getDatabase(Context context) { public static LocalDatabase getDatabase(Context context) {
if (INSTANCE == null) { if (INSTANCE == null) {
synchronized (LocalDatabase.class) { synchronized (LocalDatabase.class) {
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, MIGRATION_3_4, MIGRATION_4_5) .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5, MIGRATION_5_6)
.allowMainThreadQueries() .allowMainThreadQueries()
.build(); .build();
} }
......
package com.example.yourcashiertest.entities;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity
public class OrderDetail {
@PrimaryKey(autoGenerate = true)
@NonNull
@ColumnInfo(name = "id")
long id;
@NonNull
@ColumnInfo(name = "orderId")
long orderId;
@NonNull
@ColumnInfo(name = "productId")
long productId;
@NonNull
@ColumnInfo(name = "qty")
long qty;
@NonNull
@ColumnInfo(name = "price")
long price;
public OrderDetail(long orderId, long productId, long qty, long price){
this.orderId = orderId;
this.productId = productId;
this.qty = qty;
this.price = price;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getOrderId() {
return orderId;
}
public void setOrderId(long orderId) {
this.orderId = orderId;
}
public long getProductId() {
return productId;
}
public void setProductId(long productId) {
this.productId = productId;
}
public long getQty() {
return qty;
}
public void setQty(long qty) {
this.qty = qty;
}
public long getPrice() {
return price;
}
public void setPrice(long price) {
this.price = price;
}
}
package com.example.yourcashiertest.repositories;
import android.app.Application;
import android.content.Context;
import com.example.yourcashiertest.daos.OrderDetailDao;
import com.example.yourcashiertest.databases.LocalDatabase;
import com.example.yourcashiertest.entities.OrderDetail;
public class OrderDetailRepository {
private OrderDetailDao dao;
public OrderDetailRepository(Application application){
LocalDatabase db = LocalDatabase.getDatabase(application);
dao = db.orderDetail();
}
public void insert(OrderDetail orderDetail){
LocalDatabase.databaseWriteExecutor.execute(() -> dao.insertOrderDetail(orderDetail));
}
}
...@@ -40,4 +40,8 @@ public class TransaksiRepository { ...@@ -40,4 +40,8 @@ public class TransaksiRepository {
public LiveData<List<Transaksi>> filterTransaksi(String s){ public LiveData<List<Transaksi>> filterTransaksi(String s){
return dao.getFilteredTransaksi(s); return dao.getFilteredTransaksi(s);
} }
public void clear(){
LocalDatabase.databaseWriteExecutor.execute(() -> dao.deleteAll());
}
} }
package com.example.yourcashiertest.viewmodels;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import com.example.yourcashiertest.entities.OrderDetail;
import com.example.yourcashiertest.repositories.OrderDetailRepository;
public class OrderDetailVM extends AndroidViewModel {
private OrderDetailRepository repository;
public OrderDetailVM(@NonNull Application application) {
super(application);
repository = new OrderDetailRepository(application);
}
public void insertOrderDetail(OrderDetail orderDetail){
repository.insert(orderDetail);
}
}
...@@ -47,4 +47,8 @@ public class TransaksiViewModel extends AndroidViewModel { ...@@ -47,4 +47,8 @@ public class TransaksiViewModel extends AndroidViewModel {
String query = TextUtils.isEmpty(s) ? "%" : "%" + s + "%"; String query = TextUtils.isEmpty(s) ? "%" : "%" + s + "%";
this.query.postValue(query); this.query.postValue(query);
} }
public void clearTransaksi(){
repository.clear();
}
} }
...@@ -48,5 +48,18 @@ ...@@ -48,5 +48,18 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvListOrder" app:layout_constraintTop_toBottomOf="@id/tvListOrder"
tools:listitem="@layout/item_order" /> tools:listitem="@layout/item_order" />
<ImageButton
android:id="@+id/btnClear"
android:layout_width="25dp"
android:layout_height="25dp"
android:background="@drawable/ic_delete"
android:backgroundTint="#C30A0A"
app:layout_constraintBottom_toBottomOf="@+id/btnFilter"
app:layout_constraintEnd_toStartOf="@+id/btnFilter"
app:layout_constraintHorizontal_bias="0.58"
app:layout_constraintStart_toEndOf="@+id/tvListOrder"
app:layout_constraintTop_toTopOf="@+id/btnFilter" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>
\ No newline at end of file
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