Commit 4f07bdd7 authored by Wahyu Wibowo's avatar Wahyu Wibowo

add fitur payment

parent 7490e8df
package com.example.yourcashiertest.activities;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import com.example.yourcashiertest.R;
import com.example.yourcashiertest.adapters.CartAdapter;
import com.example.yourcashiertest.databinding.ActivityCartBinding;
import com.example.yourcashiertest.entities.Cart;
import com.example.yourcashiertest.utils.Convert;
import com.example.yourcashiertest.viewmodels.CartViewModel;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.List;
public class CartActivity extends AppCompatActivity {
ActivityCartBinding binding;
CartAdapter adapter;
private static int SUM = 0;
public static String PRICE = "price";
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -37,35 +34,32 @@ public class CartActivity extends AppCompatActivity {
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;
cartViewModel.getCarts().observe(this, carts -> {
int count = 0;
if (carts.size() != 0){
for (int i = 0; i < carts.size(); i++){
sum += carts.get(i).getPrice();
count += carts.get(i).getPrice();
}
binding.tvTotalPrice.setText(String.valueOf(sum));
}
SUM = count;
binding.tvTotalPrice.setText(Convert.changeToCurrency(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()));
cart.setPrice(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){
cart.setPrice(cart.getRealPrice() * cart.getQty());
cartViewModel.updateCart(cart);
if (cart.getQty() <= 0){
cartViewModel.deleteCart(cart);
}else {
cart.setPrice(Math.multiplyExact(cart.getRealPrice(), cart.getQty()));
cartViewModel.updateCart(cart);
}
}
});
......@@ -74,23 +68,15 @@ public class CartActivity extends AppCompatActivity {
binding.ivBtnBack.setOnClickListener(view -> startActivity(new Intent(CartActivity.this, MainActivity.class)));
binding.btnCheckout.setOnClickListener(view -> {
startActivity(new Intent(CartActivity.this, PaymentActivity.class));
startActivity(new Intent(CartActivity.this, PaymentActivity.class).putExtra(PRICE, SUM));
finish();
});
}
private String changeToCurrency(int totalPrice){
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance();
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setCurrencySymbol("Rp. ");
formatSymbols.setMonetaryDecimalSeparator(',');
formatSymbols.setGroupingSeparator('.');
String priceRupiah = decimalFormat.format(totalPrice);
return priceRupiah;
@Override
protected void onDestroy() {
super.onDestroy();
binding = null;
}
}
\ No newline at end of file
......@@ -3,7 +3,6 @@ package com.example.yourcashiertest.activities;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import android.Manifest;
......@@ -12,8 +11,6 @@ import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.View;
import android.widget.PopupMenu;
import android.widget.Toast;
......@@ -22,12 +19,9 @@ import com.example.yourcashiertest.adapters.ProductAdapter;
import com.example.yourcashiertest.databinding.ActivityMainBinding;
import com.example.yourcashiertest.entities.Cart;
import com.example.yourcashiertest.entities.Product;
import com.example.yourcashiertest.models.CartModel;
import com.example.yourcashiertest.viewmodels.CartViewModel;
import com.example.yourcashiertest.viewmodels.ProductViewModel;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
......@@ -41,6 +35,7 @@ public class MainActivity extends AppCompatActivity {
Manifest.permission.WRITE_EXTERNAL_STORAGE};
public static boolean visibility = false;
ProductViewModel viewModel;
CartViewModel cartViewModel;
@Override
......@@ -92,7 +87,7 @@ public class MainActivity extends AppCompatActivity {
});
binding.rvProducts.setAdapter(adapter);
ProductViewModel viewModel = new ViewModelProvider(this).get(ProductViewModel.class);
viewModel = new ViewModelProvider(this).get(ProductViewModel.class);
viewModel.getProducts().observe(this, adapter::setProducts);
adapter.setListener(new ProductAdapter.ProductListener() {
......@@ -134,6 +129,8 @@ public class MainActivity extends AppCompatActivity {
public void addToCart(Product product){
product.setQuantity(product.getQuantity() - 1);
viewModel.updateProduct(product);
Cart cart = new Cart(0,"", "", 0, 0, 0);
cart.setIdProduct(product.getId());
cart.setImage(product.getPhoto());
......@@ -142,7 +139,7 @@ public class MainActivity extends AppCompatActivity {
cart.setQty(1);
cart.setRealPrice(product.getPrice());
cartViewModel.insertCart(cart);
Toast.makeText(MainActivity.this, "Data berhasil ditambahkan ke keranjang", Toast.LENGTH_LONG).show();
Toast.makeText(MainActivity.this, "Produk berhasil ditambahkan ke keranjang", Toast.LENGTH_LONG).show();
}
......
package com.example.yourcashiertest.activities;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.cardview.widget.CardView;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProvider;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.example.yourcashiertest.R;
import com.example.yourcashiertest.databinding.ActivityPaymentBinding;
import com.example.yourcashiertest.utils.Convert;
import com.example.yourcashiertest.viewmodels.CartViewModel;
public class PaymentActivity extends AppCompatActivity {
ActivityPaymentBinding binding;
public static String REFUND = "refund";
public int refund;
public int amount;
CartViewModel cartViewModel;
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_payment);
binding = DataBindingUtil.setContentView(this, R.layout.activity_payment);
cartViewModel = new ViewModelProvider(this).get(CartViewModel.class);
amount = getIntent().getIntExtra(CartActivity.PRICE, 0);
binding.setAmount(Convert.changeToCurrency(amount));
}
public void btnPay(View view) {
startActivity(new Intent(PaymentActivity.this, StatusPayment.class));
int amountPaid = Integer.parseInt(binding.etAmountPaid.getText().toString());
refund = amountPaid - amount;
startActivity(new Intent(PaymentActivity.this, StatusPayment.class).putExtra(REFUND, refund));
cartViewModel.clear();
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
binding = null;
}
}
\ No newline at end of file
package com.example.yourcashiertest.activities;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.example.yourcashiertest.R;
import com.example.yourcashiertest.databinding.ActivityStatusPaymentBinding;
import com.example.yourcashiertest.utils.Convert;
public class StatusPayment extends AppCompatActivity {
ActivityStatusPaymentBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_status_payment);
binding = DataBindingUtil.setContentView(this, R.layout.activity_status_payment);
int refund = getIntent().getIntExtra(PaymentActivity.REFUND, 0);
Log.d("Tag", String.valueOf(refund));
binding.setRefund(Convert.changeToCurrency(refund));
}
public void btnFinish(View view) {
startActivity(new Intent(StatusPayment.this, MainActivity.class));
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
binding = null;
}
}
\ No newline at end of file
......@@ -25,4 +25,7 @@ public interface CartDao {
@Delete
public void deleteCart(Cart cart);
@Query("DELETE FROM Cart")
public void deletAll();
}
......@@ -32,6 +32,10 @@ public class CartRepository {
LocalDatabase.databaseWriteExecutor.execute(() -> cartDao.deleteCart(cart));
}
public void clear(){
LocalDatabase.databaseWriteExecutor.execute(() -> cartDao.deletAll());
}
public LiveData<List<Cart>> getAllCart(){
return this.carts;
}
......
package com.example.yourcashiertest.utils;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
public class Convert {
public static String changeToCurrency(long totalPrice){
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance();
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setCurrencySymbol("Rp. ");
formatSymbols.setMonetaryDecimalSeparator(',');
formatSymbols.setGroupingSeparator('.');
String priceRupiah = decimalFormat.format(totalPrice);
return priceRupiah;
}
}
......@@ -40,6 +40,10 @@ public class CartViewModel extends AndroidViewModel {
repository.delete(cart);
}
public void clear(){
repository.clear();
}
public MutableLiveData<Cart> getCart(){
return this.cart;
}
......
......@@ -79,7 +79,6 @@
android:layout_height="20dp"
android:gravity="top"
android:textColor="#fff"
android:text=""
android:textAppearance="@style/some_id"
app:layout_constraintBottom_toBottomOf="@+id/amount"
app:layout_constraintEnd_toEndOf="@+id/amount"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
tools:context=".activities.StatusPayment">
xmlns:tools="http://schemas.android.com/tools">
<TextView
android:id="@+id/tvPaymentStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="top"
android:text="@string/payment_status"
android:textAppearance="@style/payment"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.072"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<data>
<variable
name="refund"
type="String" />
</data>
<ImageView
android:id="@+id/icConfirmed"
android:layout_width="150dp"
android:layout_height="130dp"
android:src="@drawable/confirmed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvPaymentStatus"
android:layout_marginTop="40dp"
tools:layout_editor_absoluteX="140dp"
tools:layout_editor_absoluteY="29dp" />
<TextView
android:id="@+id/tvPaymentSuccess"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:textSize="24dp"
android:gravity="center"
android:text="@string/payment_by_cash_was_successful"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/icConfirmed" />
android:layout_height="match_parent"
android:padding="10dp"
tools:context=".activities.StatusPayment">
<TextView
android:id="@+id/tvRefund"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
android:gravity="center"
android:text="@string/refund"
android:textSize="35dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvPaymentSuccess" />
<TextView
android:id="@+id/tvPaymentStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="top"
android:text="@string/payment_status"
android:textAppearance="@style/payment"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.072"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvNominalRefund"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:gravity="center"
android:text="Rp. 44000"
android:textSize="45dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvRefund" />
<ImageView
android:id="@+id/icConfirmed"
android:layout_width="150dp"
android:layout_height="130dp"
android:src="@drawable/confirmed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvPaymentStatus"
android:layout_marginTop="40dp"
tools:layout_editor_absoluteX="140dp"
tools:layout_editor_absoluteY="29dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnFinish"
android:onClick="btnFinish"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="FINISH"
android:textSize="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvNominalRefund"
app:layout_constraintVertical_bias="1.0" />
<TextView
android:id="@+id/tvPaymentSuccess"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:textSize="24dp"
android:gravity="center"
android:text="@string/payment_by_cash_was_successful"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/icConfirmed" />
<TextView
android:id="@+id/tvRefund"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
android:gravity="center"
android:text="@string/refund"
android:textSize="35dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvPaymentSuccess" />
<TextView
android:id="@+id/tvNominalRefund"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:gravity="center"
android:text="@{refund}"
android:textSize="45dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvRefund" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnFinish"
android:onClick="btnFinish"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="FINISH"
android:textSize="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvNominalRefund"
app:layout_constraintVertical_bias="1.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</androidx.constraintlayout.widget.ConstraintLayout>
</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