use of com.polito.mad17.madmax.entities.Expense in project MadMax by deviz92.
the class PendingExpenseDetailActivity method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "OnCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pending_expense_detail);
//setInterface((OnItemClickInterface) this);
Intent intent = getIntent();
expenseID = intent.getStringExtra("expenseID");
// intent.getStringExtra("userID");
userID = MainActivity.getCurrentUser().getID();
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setBackgroundColor(0x0000FF00);
// Get a support ActionBar corresponding to this toolbar
ActionBar ab = getSupportActionBar();
// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
imageView = (ImageView) findViewById(R.id.img_photo);
amountTextView = (TextView) findViewById(R.id.tv_amount);
creatorNameTextView = (TextView) findViewById(R.id.tv_creator_name);
groupTextView = (TextView) findViewById(R.id.tv_group_name);
expenseNameTextView = (TextView) findViewById(R.id.tv_pending_name);
moveExpenseButton = (Button) findViewById(R.id.btn_move_expense);
//Click on button to move from pending to real expense
moveExpenseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Only the creator of pending expense can move it
if (creatorID.equals(userID)) {
databaseReference.child("proposedExpenses").child(expenseID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<String> participants = new ArrayList<String>();
String expenseName = dataSnapshot.child("description").getValue(String.class);
String groupID = dataSnapshot.child("groupID").getValue(String.class);
Double amount = dataSnapshot.child("amount").getValue(Double.class);
String currency = dataSnapshot.child("currency").getValue(String.class);
String creatorID = dataSnapshot.child("creatorID").getValue(String.class);
String expensePhoto = dataSnapshot.child("expensePhoto").getValue(String.class);
for (DataSnapshot participantSnap : dataSnapshot.child("participants").getChildren()) participants.add(participantSnap.getKey());
Expense newExpense = new Expense();
newExpense.setDescription(expenseName);
newExpense.setAmount(amount);
newExpense.setCurrency(currency);
newExpense.setGroupID(groupID);
newExpense.setCreatorID(creatorID);
newExpense.setEquallyDivided(true);
newExpense.setDeleted(false);
newExpense.setExpensePhoto(expensePhoto);
Double amountPerMember = 1 / (double) participants.size();
for (String participant : participants) {
newExpense.getParticipants().put(participant, amountPerMember);
//Delete expense from his proposed expenses
databaseReference.child("users").child(participant).child("proposedExpenses").child(expenseID).setValue(false);
}
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date());
newExpense.setTimestamp(timeStamp);
//Add expense to db
FirebaseUtils.getInstance().addExpenseFirebase(newExpense, null, null);
//Delete pending expense from proposed expenses list
databaseReference.child("proposedExpenses").child(expenseID).child("deleted").setValue(true);
//Delete pending expense from group
databaseReference.child("groups").child(groupID).child("proposedExpenses").child(expenseID).setValue(false);
Intent myIntent = new Intent(PendingExpenseDetailActivity.this, GroupDetailActivity.class);
myIntent.putExtra("groupID", groupID);
myIntent.putExtra("userID", userID);
finish();
startActivity(myIntent);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
} else {
Toast.makeText(PendingExpenseDetailActivity.this, "Only the proposer can move it to expenses", Toast.LENGTH_SHORT).show();
return;
}
}
});
RecyclerView.ItemDecoration divider = new InsetDivider.Builder(this).orientation(InsetDivider.VERTICAL_LIST).dividerHeight(getResources().getDimensionPixelSize(R.dimen.divider_height)).color(ContextCompat.getColor(getApplicationContext(), R.color.colorDivider)).insets(getResources().getDimensionPixelSize(R.dimen.divider_inset), 0).overlay(true).build();
recyclerView = (RecyclerView) findViewById(R.id.rv_skeleton);
layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
recyclerView.addItemDecoration(divider);
//todo mettere a posto
votersViewAdapter = new VotersViewAdapter(voters, this);
recyclerView.setAdapter(votersViewAdapter);
//Retrieve data of this pending expense
databaseReference.child("proposedExpenses").child(expenseID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String expenseName = dataSnapshot.child("description").getValue(String.class);
String groupName = dataSnapshot.child("groupName").getValue(String.class);
Double amount = dataSnapshot.child("amount").getValue(Double.class);
expenseNameTextView.setText(expenseName);
groupTextView.setText(groupName);
amountTextView.setText(amount.toString());
creatorID = dataSnapshot.child("creatorID").getValue(String.class);
databaseReference.child("users").child(creatorID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot creatorSnapshot) {
creatorNameTextView.setText(creatorSnapshot.child("name").getValue(String.class) + " " + creatorSnapshot.child("surname").getValue(String.class));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
DecimalFormat df = new DecimalFormat("#.##");
amountTextView.setText(df.format(amount) + " €");
//Show list of voters for this pending expense
for (DataSnapshot voterSnap : dataSnapshot.child("participants").getChildren()) {
String vote = voterSnap.child("vote").getValue(String.class);
FirebaseUtils.getInstance().getVoter(voterSnap.getKey(), vote, voters, votersViewAdapter);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
use of com.polito.mad17.madmax.entities.Expense in project MadMax by deviz92.
the class PendingExpenseDetailActivity method onOptionsItemSelected.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d(TAG, "Clicked item: " + item.getItemId());
switch(item.getItemId()) {
case R.id.one:
Log.d(TAG, "clicked Modify expense");
Toast.makeText(PendingExpenseDetailActivity.this, "Functionality still not available", Toast.LENGTH_SHORT).show();
return true;
case R.id.two:
Log.d(TAG, "clicked Remove Expense");
final Intent intent = new Intent(this, MainActivity.class);
databaseReference.child("proposedExpenses").child(expenseID).child("creatorID").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (MainActivity.getCurrentUser().getID().matches(dataSnapshot.getValue(String.class))) {
FirebaseUtils.getInstance().removePendingExpenseFirebase(expenseID, getApplicationContext());
// add event for PENDING_EXPENSE_REMOVE
databaseReference.child("proposedExpenses").child(expenseID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User currentUser = MainActivity.getCurrentUser();
Event event = new Event(dataSnapshot.child("groupID").getValue(String.class), Event.EventType.PENDING_EXPENSE_REMOVE, currentUser.getName() + " " + currentUser.getSurname(), dataSnapshot.child("description").getValue(String.class));
event.setDate(new SimpleDateFormat("yyyy.MM.dd").format(new java.util.Date()));
event.setTime(new SimpleDateFormat("HH:mm").format(new java.util.Date()));
FirebaseUtils.getInstance().addEvent(event);
startActivity(intent);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, databaseError.toException());
}
});
} else
Toast.makeText(getApplicationContext(), "You are not the proposal creator", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return true;
case android.R.id.home:
Log.d(TAG, "Clicked up button on PendingExpenseDetailActivity");
finish();
Intent myIntent = new Intent(PendingExpenseDetailActivity.this, MainActivity.class);
myIntent.putExtra("UID", MainActivity.getCurrentUser().getID());
myIntent.putExtra("currentFragment", 2);
startActivity(myIntent);
return (true);
default:
return super.onOptionsItemSelected(item);
}
}
use of com.polito.mad17.madmax.entities.Expense in project MadMax by deviz92.
the class PendingExpenseViewAdapter method onBindViewHolder.
@Override
public void onBindViewHolder(final PendingExpenseViewAdapter.ItemExpensesViewHolder holder, int position) {
if (position == (pendingExpenses.size() - 1)) {
Log.d(TAG, "item.getKey().equals(\"nullGroup\")");
holder.imageView.setVisibility(View.GONE);
holder.nameTextView.setText("");
holder.groupTextView.setText("");
holder.yesTextView.setText("");
holder.noTextView.setText("");
holder.participantsCountTextView.setText("");
holder.amountTextView.setText("");
holder.partecipantsImageView.setVisibility(View.GONE);
holder.thumbUpButton.setVisibility(View.GONE);
holder.thumbDownButton.setVisibility(View.GONE);
} else {
Expense expense = getItem(position).getValue();
String p = expense.getGroupImage();
if (p != null) {
//int photoUserId = Integer.parseInt(p);
//holder.imageView.setImageResource(photoUserId);
Glide.with(layoutInflater.getContext()).load(p).centerCrop().bitmapTransform(new CropCircleTransformation(layoutInflater.getContext())).diskCacheStrategy(DiskCacheStrategy.ALL).into(holder.imageView);
} else {
Glide.with(layoutInflater.getContext()).load(R.drawable.group_default).centerCrop().bitmapTransform(new CropCircleTransformation(layoutInflater.getContext())).diskCacheStrategy(DiskCacheStrategy.ALL).into(holder.imageView);
}
holder.nameTextView.setText(expense.getDescription());
holder.groupTextView.setText(expense.getGroupName());
holder.yesTextView.setText(expense.getYes().toString());
holder.noTextView.setText(expense.getNo().toString());
holder.participantsCountTextView.setText(expense.getParticipantsCount().toString());
holder.imageView.setVisibility(View.VISIBLE);
holder.partecipantsImageView.setVisibility(View.VISIBLE);
holder.thumbUpButton.setVisibility(View.VISIBLE);
holder.thumbDownButton.setVisibility(View.VISIBLE);
DecimalFormat df = new DecimalFormat("#.##");
Double amount = expense.getAmount();
holder.amountTextView.setText(df.format(amount) + " " + expense.getCurrency());
if (expense.getMyVote().equals("yes")) {
holder.thumbUpButton.setBackgroundResource(R.drawable.thumb_up_blue);
holder.thumbDownButton.setBackgroundResource(R.drawable.thumb_down_black);
} else if (expense.getMyVote().equals("no")) {
holder.thumbUpButton.setBackgroundResource(R.drawable.thumb_up_black);
holder.thumbDownButton.setBackgroundResource(R.drawable.thumb_down_blue);
} else if (expense.getMyVote().equals("null")) {
holder.thumbUpButton.setBackgroundResource(R.drawable.thumb_up_black);
holder.thumbDownButton.setBackgroundResource(R.drawable.thumb_down_black);
}
}
}
use of com.polito.mad17.madmax.entities.Expense in project MadMax by deviz92.
the class NewExpenseActivity method onOptionsItemSelected.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
DatabaseReference groupRef;
int itemThatWasClickedId = item.getItemId();
if (itemThatWasClickedId == R.id.action_save) {
if (!validateForm())
return true;
//display message if text field is empty
Toast.makeText(getBaseContext(), "Saved expense", Toast.LENGTH_SHORT).show();
final Expense newExpense = new Expense();
newExpense.setDescription(description.getText().toString());
newExpense.setAmount(Double.valueOf(amount.getText().toString()));
newExpense.setCurrency(currency.getSelectedItem().toString());
newExpense.setGroupID(groupID);
newExpense.setCreatorID(userID);
newExpense.setEquallyDivided(true);
newExpense.setDeleted(false);
Log.d(TAG, "Before first access to firebase");
groupRef = databaseReference.child("groups");
groupRef.child(groupID).child("members").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot membersSnapshot) {
int participantsCount = 0;
//Attenzione! Non contare i membri eliminati tra i partecipanti alla spesa
for (DataSnapshot memberSnap : membersSnapshot.getChildren()) {
if (!memberSnap.child("deleted").getValue(Boolean.class)) {
participantsCount++;
}
}
Double amountPerMember = 1 / (double) participantsCount;
for (DataSnapshot member : membersSnapshot.getChildren()) {
//Aggiungo alla spesa solo i membri non eliminati dal gruppo
if (!member.child("deleted").getValue(Boolean.class)) {
newExpense.getParticipants().put(member.getKey(), amountPerMember);
}
}
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date());
newExpense.setTimestamp(timeStamp);
//Aggiungo una pending expense
if (callingActivity.equals("ChooseGroupActivity")) {
newExpense.setGroupName(groupName);
if (groupImage != null)
newExpense.setGroupImage(groupImage);
FirebaseUtils.getInstance().addPendingExpenseFirebase(newExpense, expensePhoto, billPhoto);
//todo qui
Intent myIntent = new Intent(NewExpenseActivity.this, MainActivity.class);
myIntent.putExtra("UID", MainActivity.getCurrentUser().getID());
myIntent.putExtra("currentFragment", 2);
startActivity(myIntent);
// add event for PENDING_EXPENSE_ADD
User currentUser = MainActivity.getCurrentUser();
Event event = new Event(groupID, Event.EventType.PENDING_EXPENSE_ADD, currentUser.getName() + " " + currentUser.getSurname(), newExpense.getDescription(), newExpense.getAmount());
event.setDate(new SimpleDateFormat("yyyy.MM.dd").format(new java.util.Date()));
event.setTime(new SimpleDateFormat("HH:mm").format(new java.util.Date()));
FirebaseUtils.getInstance().addEvent(event);
} else //Aggiungo una spesa normale
{
FirebaseUtils.getInstance().addExpenseFirebase(newExpense, expensePhoto, billPhoto);
// add event for EXPENSE_ADD
User currentUser = MainActivity.getCurrentUser();
Event event = new Event(newExpense.getGroupID(), Event.EventType.EXPENSE_ADD, currentUser.getName() + " " + currentUser.getSurname(), newExpense.getDescription(), newExpense.getAmount());
event.setDate(new SimpleDateFormat("yyyy.MM.dd").format(new java.util.Date()));
event.setTime(new SimpleDateFormat("HH:mm").format(new java.util.Date()));
FirebaseUtils.getInstance().addEvent(event);
}
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
}
this.finish();
return super.onOptionsItemSelected(item);
}
use of com.polito.mad17.madmax.entities.Expense in project MadMax by deviz92.
the class ExpenseDetailActivity method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_expense_detail);
Intent intent = getIntent();
groupID = intent.getStringExtra("groupID");
userID = intent.getStringExtra("userID");
expenseID = intent.getStringExtra("expenseID");
fab = (FloatingActionButton) findViewById(R.id.fab);
updateFab(0);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setBackgroundColor(0x0000FF00);
// Get a support ActionBar corresponding to this toolbar
ActionBar ab = getSupportActionBar();
// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
// insert tabs and current fragment in the main layout
//mainView.addView(getLayoutInflater().inflate(R.layout.activity_expense_detail, null));
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText(R.string.expense_detail));
tabLayout.addTab(tabLayout.newTab().setText(R.string.comments));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
viewPager = (ViewPager) findViewById(R.id.expense_detail_view_pager);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Log.d(TAG, String.valueOf(tab.getPosition()));
updateFab(tab.getPosition());
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
ExpenseDetailPagerAdapter adapter = new ExpenseDetailPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount(), expenseID);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(0);
//Set data of upper part of Activity
imageView = (ImageView) findViewById(R.id.img_photo);
amountTextView = (TextView) findViewById(R.id.tv_amount);
creatorNameTextView = (TextView) findViewById(R.id.tv_creator_name);
expenseNameTextView = (TextView) findViewById(R.id.tv_pending_name);
balanceTextTextView = (TextView) findViewById(R.id.tv_balance_text);
balanceTextView = (TextView) findViewById(R.id.tv_balance);
payExpenseButton = (Button) findViewById(R.id.btn_pay_debt);
payExpenseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Clicked payButton");
if (expenseBalance >= 0) {
Toast.makeText(ExpenseDetailActivity.this, "You have no debts to pay for this expense", Toast.LENGTH_SHORT).show();
} else {
Intent intent = new Intent(ExpenseDetailActivity.this, PayExpenseActivity.class);
intent.putExtra("groupID", groupID);
intent.putExtra("userID", userID);
intent.putExtra("debt", expenseBalance);
intent.putExtra("expenseID", expenseID);
intent.putExtra("expenseName", expenseName);
intent.putExtra("expenseCurrency", currency);
startActivity(intent);
finish();
}
}
});
//Retrieve data of this expense
databaseReference.child("expenses").child(expenseID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
expenseName = dataSnapshot.child("description").getValue(String.class);
Double amount = dataSnapshot.child("amount").getValue(Double.class);
currency = dataSnapshot.child("currency").getValue(String.class);
expenseNameTextView.setText(expenseName);
DecimalFormat df = new DecimalFormat("#.##");
amountTextView.setText(df.format(amount) + " " + currency);
//Retrieve my balance for this expense
Double dueImport = Double.parseDouble(String.valueOf(dataSnapshot.child("participants").child(userID).child("fraction").getValue())) * dataSnapshot.child("amount").getValue(Double.class);
Double alreadyPaid = dataSnapshot.child("participants").child(userID).child("alreadyPaid").getValue(Double.class);
expenseBalance = alreadyPaid - dueImport;
expenseBalance = Math.floor(expenseBalance * 100) / 100;
if (expenseBalance > 0) {
balanceTextTextView.setText("For this expense you should receive");
balanceTextView.setText(expenseBalance.toString() + " " + currency);
} else if (expenseBalance < 0) {
balanceTextTextView.setText("For this expense you should pay");
Double absBalance = abs(expenseBalance);
balanceTextView.setText(absBalance.toString() + " " + currency);
} else if (expenseBalance == 0) {
balanceTextTextView.setText("For this expense you have no debts");
balanceTextView.setText("0" + " " + currency);
}
//Retrieve name and surname of creator
String creatorID = dataSnapshot.child("creatorID").getValue(String.class);
databaseReference.child("users").child(creatorID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name = dataSnapshot.child("name").getValue(String.class);
String surname = dataSnapshot.child("surname").getValue(String.class);
creatorNameTextView.setText(name + " " + surname);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
Aggregations