Untitled
unknown
java
2 years ago
32 kB
4
Indexable
Never
package com.example.trackingbudget; import android.annotation.SuppressLint; import android.app.ProgressDialog; import android.icu.text.DateFormat; import android.icu.text.SimpleDateFormat; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.firebase.ui.database.FirebaseRecyclerAdapter; import com.firebase.ui.database.FirebaseRecyclerOptions; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.Query; import com.google.firebase.database.ValueEventListener; import org.joda.time.DateTime; import org.joda.time.Months; import org.joda.time.MutableDateTime; import org.joda.time.Weeks; import org.w3c.dom.Text; import java.util.Calendar; import java.util.Map; public class BudgetActivity extends AppCompatActivity { private FloatingActionButton fab; private TextView totalBudgetTV; private RecyclerView recycleView; private DatabaseReference budgetRef,personalRef; private FirebaseAuth mAuth; private ProgressDialog loader; private String post_key = ""; private String item = ""; private int amount = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_budget); mAuth = FirebaseAuth.getInstance(); budgetRef = FirebaseDatabase.getInstance().getReference().child("budget").child(mAuth.getCurrentUser().getUid()); personalRef = FirebaseDatabase.getInstance().getReference().child("personal").child(mAuth.getCurrentUser().getUid()); loader = new ProgressDialog(this); totalBudgetTV = findViewById(R.id.totalBudgetTV); recycleView = findViewById(R.id.recycleView); //Display the budget Items LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); recycleView.setHasFixedSize(true); recycleView.setLayoutManager(linearLayoutManager); //Display Total budget budgetRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { int totalAmount =0; for (DataSnapshot snap:snapshot.getChildren()){ Data data = snap.getValue(Data.class); totalAmount += data.getAmount(); String sTotal = String.valueOf("Month budger: $"+totalAmount); totalBudgetTV.setText(sTotal); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); //Add item button fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { additem(); } }); personalRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists() && snapshot.getChildrenCount()<0){ int totalAmount = 0; for (DataSnapshot ds : snapshot.getChildren()){ Data data = ds.getValue(Data.class); String sttotal = String.valueOf("Month Budget: "+totalAmount); totalBudgetTV.setText(sttotal); } int weeklyBudget = totalAmount/4; int dailyBudget = totalAmount/30; personalRef.child("budget").setValue(totalAmount); personalRef.child("weeklyBudget").setValue(weeklyBudget); personalRef.child("dailyBudget").setValue(dailyBudget); }else{ personalRef.child("budget").setValue(0); personalRef.child("weeklyBudget").setValue(0); personalRef.child("dailyBudget").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); getMonthTransportBudgetRatios(); getMonthFoodBudgetRatios(); getMonthHouseBudgetRatios(); getMonthEducationBudgetRatios(); getMonthEntertainmentBudgetRatios(); getMonthCharityBudgetRatios(); getMonthPersonalBudgetRatios(); getMonthApparelBudgetRatios(); getMonthHealthBudgetRatios(); getMonthOthersBudgetRatios(); } private void getMonthOthersBudgetRatios() { Query query = budgetRef.orderByChild("item").equalTo("Others"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists()){ int pTotal = 0; for(DataSnapshot ds : snapshot.getChildren()){ Map<String,Object> map = (Map<String,Object>) ds.getValue(); Object total = map.get("amount"); pTotal = Integer.parseInt(String.valueOf(total)); } int dayTransRatio = pTotal/30; int weekTransRation = pTotal/4; int monthTransRatio = pTotal; personalRef.child("dayOthersRatio").setValue(dayTransRatio); personalRef.child("weekOthersRatio").setValue(weekTransRation); personalRef.child("monthOthersRatio").setValue(monthTransRatio); }else{ personalRef.child("dayOthersRatio").setValue(0); personalRef.child("weekOthersRatio").setValue(0); personalRef.child("monthOthersRatio").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } private void getMonthHealthBudgetRatios() { Query query = budgetRef.orderByChild("item").equalTo("Health"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists()){ int pTotal = 0; for(DataSnapshot ds : snapshot.getChildren()){ Map<String,Object> map = (Map<String,Object>) ds.getValue(); Object total = map.get("amount"); pTotal = Integer.parseInt(String.valueOf(total)); } int dayTransRatio = pTotal/30; int weekTransRation = pTotal/4; int monthTransRatio = pTotal; personalRef.child("dayHealthRatio").setValue(dayTransRatio); personalRef.child("weekHealthRatio").setValue(weekTransRation); personalRef.child("monthHealthRatio").setValue(monthTransRatio); }else{ personalRef.child("dayHealthRatio").setValue(0); personalRef.child("weekHealthRatio").setValue(0); personalRef.child("monthHealthRatio").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } private void getMonthApparelBudgetRatios() { Query query = budgetRef.orderByChild("item").equalTo("Apparel and Services"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists()){ int pTotal = 0; for(DataSnapshot ds : snapshot.getChildren()){ Map<String,Object> map = (Map<String,Object>) ds.getValue(); Object total = map.get("amount"); pTotal = Integer.parseInt(String.valueOf(total)); } int dayTransRatio = pTotal/30; int weekTransRation = pTotal/4; int monthTransRatio = pTotal; personalRef.child("dayApparelRatio").setValue(dayTransRatio); personalRef.child("weekApparelRatio").setValue(weekTransRation); personalRef.child("monthApparelRatio").setValue(monthTransRatio); }else{ personalRef.child("dayApparelRatio").setValue(0); personalRef.child("weekApparelRatio").setValue(0); personalRef.child("monthApparelRatio").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } private void getMonthPersonalBudgetRatios() { Query query = budgetRef.orderByChild("item").equalTo("Personal"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists()){ int pTotal = 0; for(DataSnapshot ds : snapshot.getChildren()){ Map<String,Object> map = (Map<String,Object>) ds.getValue(); Object total = map.get("amount"); pTotal = Integer.parseInt(String.valueOf(total)); } int dayTransRatio = pTotal/30; int weekTransRation = pTotal/4; int monthTransRatio = pTotal; personalRef.child("dayPersonalRatio").setValue(dayTransRatio); personalRef.child("weekPersonalRatio").setValue(weekTransRation); personalRef.child("monthPersonalRatio").setValue(monthTransRatio); }else{ personalRef.child("dayPersonalRatio").setValue(0); personalRef.child("weekPersonalRatio").setValue(0); personalRef.child("monthPersonalRatio").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } private void getMonthCharityBudgetRatios() { Query query = budgetRef.orderByChild("item").equalTo("Charity"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists()){ int pTotal = 0; for(DataSnapshot ds : snapshot.getChildren()){ Map<String,Object> map = (Map<String,Object>) ds.getValue(); Object total = map.get("amount"); pTotal = Integer.parseInt(String.valueOf(total)); } int dayTransRatio = pTotal/30; int weekTransRation = pTotal/4; int monthTransRatio = pTotal; personalRef.child("dayCharityRatio").setValue(dayTransRatio); personalRef.child("weekCharityRatio").setValue(weekTransRation); personalRef.child("monthCharityRatio").setValue(monthTransRatio); }else{ personalRef.child("dayCharityRatio").setValue(0); personalRef.child("weekCharityRatio").setValue(0); personalRef.child("monthCharityRatio").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } private void getMonthEntertainmentBudgetRatios() { Query query = budgetRef.orderByChild("item").equalTo("Entertainment"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists()){ int pTotal = 0; for(DataSnapshot ds : snapshot.getChildren()){ Map<String,Object> map = (Map<String,Object>) ds.getValue(); Object total = map.get("amount"); pTotal = Integer.parseInt(String.valueOf(total)); } int dayTransRatio = pTotal/30; int weekTransRation = pTotal/4; int monthTransRatio = pTotal; personalRef.child("dayEntertainmentRatio").setValue(dayTransRatio); personalRef.child("weekEntertainmentRatio").setValue(weekTransRation); personalRef.child("monthEntertainmentRatio").setValue(monthTransRatio); }else{ personalRef.child("dayEntertainmentRatio").setValue(0); personalRef.child("weekEntertainmentRatio").setValue(0); personalRef.child("monthEntertainmentRatio").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } private void getMonthEducationBudgetRatios() { Query query = budgetRef.orderByChild("item").equalTo("Education"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists()){ int pTotal = 0; for(DataSnapshot ds : snapshot.getChildren()){ Map<String,Object> map = (Map<String,Object>) ds.getValue(); Object total = map.get("amount"); pTotal = Integer.parseInt(String.valueOf(total)); } int dayTransRatio = pTotal/30; int weekTransRation = pTotal/4; int monthTransRatio = pTotal; personalRef.child("dayEducationRatio").setValue(dayTransRatio); personalRef.child("weekEducationRatio").setValue(weekTransRation); personalRef.child("monthEducationRatio").setValue(monthTransRatio); }else{ personalRef.child("dayEducationRatio").setValue(0); personalRef.child("weekEducationRatio").setValue(0); personalRef.child("monthEducationRatio").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } private void getMonthHouseBudgetRatios() { Query query = budgetRef.orderByChild("item").equalTo("House Expenses"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists()){ int pTotal = 0; for(DataSnapshot ds : snapshot.getChildren()){ Map<String,Object> map = (Map<String,Object>) ds.getValue(); Object total = map.get("amount"); pTotal = Integer.parseInt(String.valueOf(total)); } int dayTransRatio = pTotal/30; int weekTransRation = pTotal/4; int monthTransRatio = pTotal; personalRef.child("dayHouseRatio").setValue(dayTransRatio); personalRef.child("weekHouseRatio").setValue(weekTransRation); personalRef.child("monthHouseRatio").setValue(monthTransRatio); }else{ personalRef.child("dayHouseRatio").setValue(0); personalRef.child("weekHouseRatio").setValue(0); personalRef.child("monthHouseRatio").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } private void getMonthFoodBudgetRatios() { Query query = budgetRef.orderByChild("item").equalTo("Food"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists()){ int pTotal = 0; for(DataSnapshot ds : snapshot.getChildren()){ Map<String,Object> map = (Map<String,Object>) ds.getValue(); Object total = map.get("amount"); pTotal = Integer.parseInt(String.valueOf(total)); } int dayTransRatio = pTotal/30; int weekTransRation = pTotal/4; int monthTransRatio = pTotal; personalRef.child("dayFoodRatio").setValue(dayTransRatio); personalRef.child("weekFoodRatio").setValue(weekTransRation); personalRef.child("monthFoodRatio").setValue(monthTransRatio); }else{ personalRef.child("dayFoodRatio").setValue(0); personalRef.child("weekFoodRatio").setValue(0); personalRef.child("monthFoodRatio").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } private void getMonthTransportBudgetRatios() { Query query = budgetRef.orderByChild("item").equalTo("Transport"); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if(snapshot.exists()){ int pTotal = 0; for(DataSnapshot ds : snapshot.getChildren()){ Map<String,Object> map = (Map<String,Object>) ds.getValue(); Object total = map.get("amount"); pTotal = Integer.parseInt(String.valueOf(total)); } int dayTransRatio = pTotal/30; int weekTransRation = pTotal/4; int monthTransRatio = pTotal; personalRef.child("dayTransRatio").setValue(dayTransRatio); personalRef.child("weekTransRatio").setValue(weekTransRation); personalRef.child("monthTransRatio").setValue(monthTransRatio); }else{ personalRef.child("dayTransRatio").setValue(0); personalRef.child("weekTransRatio").setValue(0); personalRef.child("monthTransRatio").setValue(0); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } private void additem() { AlertDialog.Builder myDialog = new AlertDialog.Builder(this); LayoutInflater inflater = LayoutInflater.from(this); View myView = inflater.inflate(R.layout.input_layout,null); myDialog.setView(myView); final AlertDialog dialog = myDialog.create(); dialog.setCancelable(false); final Spinner itemSpinner = myView.findViewById(R.id.itemSpinner); final EditText amount = myView.findViewById(R.id.amount); final Button cancel = myView.findViewById(R.id.cancel); final Button save = myView.findViewById(R.id.save); //Adding an item to firebase database save.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.N) @Override public void onClick(View view) { String budgetAmount = amount.getText().toString(); String budgetItem = itemSpinner.getSelectedItem().toString(); //Input Validation if(TextUtils.isEmpty(budgetAmount)){ amount.setError("Amount is required"); return; } if(budgetItem.equals("Select Item")){ Toast.makeText(BudgetActivity.this, "Select valid item", Toast.LENGTH_SHORT).show(); } loader.setMessage("Adding a budget item"); loader.setCanceledOnTouchOutside(false); loader.show(); String id = budgetRef.push().getKey(); DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); Calendar cal = Calendar.getInstance(); String date = dateFormat.format(cal.getTime()); MutableDateTime epoch = new MutableDateTime(); epoch.setDate(0); DateTime now = new DateTime(); Weeks weeks = Weeks.weeksBetween(epoch,now); Months month = Months.monthsBetween(epoch,now); String itemNday = budgetItem+date; String itemNweek = budgetItem+weeks.getWeeks(); String itemNmonth = budgetItem+month.getMonths(); Data data = new Data(budgetItem,date,id,null,itemNday,itemNweek,itemNmonth,Integer.parseInt(budgetAmount), month.getMonths(),weeks.getWeeks()); budgetRef.child(id).setValue(data).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if(task.isSuccessful()){ Toast.makeText(BudgetActivity.this,"Budget item added successfully",Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(BudgetActivity.this,task.getException().toString(),Toast.LENGTH_SHORT).show(); } loader.dismiss(); } }); dialog.dismiss(); } }); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); } @Override protected void onStart() { super.onStart(); FirebaseRecyclerOptions<Data> options = new FirebaseRecyclerOptions.Builder<Data>().setQuery(budgetRef,Data.class).build(); FirebaseRecyclerAdapter<Data,MyViewHolder> adapter = new FirebaseRecyclerAdapter<Data, MyViewHolder>(options) { @Override protected void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position, @NonNull Data model) { holder.setItemAmount("Allocated amount: $"+model.getAmount()); holder.setItemDate("On: "+model.getDate()); holder.setItemName("Budget item: "+model.getItem()); //set note to invisible holder.notes.setVisibility(View.GONE); //Change the imageview depending on the item switch (model.getItem()){ case "Transport": holder.imageView.setImageResource(R.drawable.ic_transport); break; case "Education": holder.imageView.setImageResource(R.drawable.ic_education); case "Food": holder.imageView.setImageResource(R.drawable.ic_food); case "House": holder.imageView.setImageResource(R.drawable.ic_house); case "Entertainment": holder.imageView.setImageResource(R.drawable.ic_entertainment); case "Charity": // change imageview holder.imageView.setImageResource(R.drawable.ic_education); case "Personal": holder.imageView.setImageResource(R.drawable.ic_personalcare); case "Apparel": holder.imageView.setImageResource(R.drawable.ic_shirt); case "Other": holder.imageView.setImageResource(R.drawable.ic_other); case "Health": holder.imageView.setImageResource(R.drawable.ic_health); } holder.mView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { post_key = getRef(position).getKey(); item= model.getItem(); amount = model.getAmount(); updateData(); } }); } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.retreive_layout,parent,false); return new MyViewHolder(view); } }; recycleView.setAdapter(adapter); adapter.startListening(); adapter.notifyDataSetChanged(); } public class MyViewHolder extends RecyclerView.ViewHolder{ View mView; public ImageView imageView; public TextView notes; public MyViewHolder(@NonNull View itemView) { super(itemView); mView = itemView; imageView = itemView.findViewById(R.id.imageView); notes = itemView.findViewById(R.id.note); } public void setItemName(String itemName){ TextView item = mView.findViewById(R.id.item); item.setText(itemName); } public void setItemAmount(String itemAmount){ TextView amount = mView.findViewById(R.id.amount); amount.setText(itemAmount); } public void setItemDate(String itemDate){ TextView date = mView.findViewById(R.id.date); date.setText(itemDate); } } private void updateData(){ AlertDialog.Builder myDialog = new AlertDialog.Builder(this); LayoutInflater inflater = LayoutInflater.from(this); View mView = inflater.inflate(R.layout.update_layout,null); myDialog.setView(mView); final AlertDialog dialog = myDialog.create(); final TextView mItem = mView.findViewById(R.id.itemName); final EditText mAmount = mView.findViewById(R.id.amount); final EditText notes = mView.findViewById(R.id.note); //set notes to invisible notes.setVisibility(View.GONE); mItem.setText(item); mAmount.setText(String.valueOf(amount)); mAmount.setSelection(String.valueOf(amount).length()); Button delBut = mView.findViewById(R.id.btnDelete); Button btnUpdate = mView.findViewById(R.id.btnUpdate); //Update Button btnUpdate.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.N) @Override public void onClick(View view) { amount = Integer.parseInt(mAmount.getText().toString()); DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); Calendar cal = Calendar.getInstance(); String date = dateFormat.format(cal.getTime()); MutableDateTime epoch = new MutableDateTime(); epoch.setDate(0); DateTime now = new DateTime(); Weeks weeks = Weeks.weeksBetween(epoch,now); Months month = Months.monthsBetween(epoch,now); String itemNday = item+date; String itemNweek = item+weeks.getWeeks(); String itemNmonth = item+month.getMonths(); Data data = new Data(item,date,post_key,null, itemNday,itemNweek,itemNmonth,amount,month.getMonths(),weeks.getWeeks()); budgetRef.child(post_key).setValue(data).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if(task.isSuccessful()){ Toast.makeText(BudgetActivity.this,"Item updated successfully",Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(BudgetActivity.this,task.getException().toString(),Toast.LENGTH_SHORT).show(); } } }); dialog.dismiss(); } }); //Delete Button delBut.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { budgetRef.child(post_key).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if(task.isSuccessful()){ Toast.makeText(BudgetActivity.this,"Item deleted successfully",Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(BudgetActivity.this,task.getException().toString(),Toast.LENGTH_SHORT).show(); } } }); dialog.dismiss(); } }); dialog.show(); } }