Advertisement
kitlolz012

reserveform(anti multiple reservation)

Nov 26th, 2023
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 25.13 KB | Source Code | 0 0
  1. package com.example.gypsy;
  2.  
  3. import androidx.annotation.NonNull;
  4. import androidx.appcompat.app.AlertDialog;
  5. import androidx.appcompat.app.AppCompatActivity;
  6. import androidx.appcompat.widget.AppCompatButton;
  7.  
  8. import android.app.DatePickerDialog;
  9. import android.content.ClipData;
  10. import android.content.ClipboardManager;
  11. import android.content.Context;
  12. import android.content.Intent;
  13. import android.net.Uri;
  14. import android.os.AsyncTask;
  15. import android.os.Bundle;
  16. import android.util.Log;
  17. import android.view.View;
  18. import android.widget.ArrayAdapter;
  19. import android.widget.Button;
  20. import android.widget.EditText;
  21. import android.widget.ImageView;
  22. import android.widget.NumberPicker;
  23. import android.widget.ProgressBar;
  24. import android.widget.Spinner;
  25. import android.widget.TextView;
  26. import android.widget.Toast;
  27.  
  28.  
  29. import java.text.ParseException;
  30. import java.text.SimpleDateFormat;
  31. import java.util.ArrayList;
  32. import java.util.Calendar;
  33. import java.util.Date;
  34. import java.util.HashMap;
  35. import java.util.List;
  36. import java.util.Locale;
  37. import java.util.Map;
  38.  
  39.  
  40. import com.google.android.gms.tasks.OnFailureListener;
  41. import com.google.android.gms.tasks.OnSuccessListener;
  42. import com.google.firebase.auth.FirebaseAuth;
  43. import com.google.firebase.auth.FirebaseUser;
  44. import com.google.firebase.database.DataSnapshot;
  45. import com.google.firebase.database.DatabaseError;
  46. import com.google.firebase.database.DatabaseReference;
  47. import com.google.firebase.database.FirebaseDatabase;
  48. import com.google.firebase.database.ServerValue;
  49. import com.google.firebase.database.ValueEventListener;
  50. import com.google.firebase.storage.FirebaseStorage;
  51. import com.google.firebase.storage.StorageReference;
  52. import com.google.firebase.storage.UploadTask;
  53.  
  54. import java.util.ArrayList;
  55. import java.util.Calendar;
  56. import java.util.List;
  57.  
  58. public class ReserveForm extends AppCompatActivity {
  59.  
  60.     private EditText fullNameEditText;
  61.     private EditText contactNumberEditText;
  62.     private EditText emailEditText;
  63.     private EditText reservationDateEditText;
  64.     private DatabaseReference databaseReference;
  65.     private EditText yourGcashNameET;
  66.     private EditText yourGcashNumberET;
  67.     private EditText referenceNumberET;
  68.     private Button submitButton;
  69.     private ImageView attachedImageView;
  70.     private static final int PICK_IMAGE_REQUEST = 1;
  71.     private Uri selectedImageUri;
  72.     Object timestamp;
  73.  
  74.     private TextView customerstv,gcashDepositNumberET, gcashDepositNameET, reservefeeET;
  75.     private int customerCount = 0;
  76.  
  77.     ImageView imageView;
  78.     TextView textView;
  79.  
  80.     @Override
  81.     protected void onCreate(Bundle savedInstanceState) {
  82.         super.onCreate(savedInstanceState);
  83.         setContentView(R.layout.activity_reserve_form);
  84.  
  85.         Intent intent = getIntent();
  86.         String restoId = intent.getStringExtra("restoKey");
  87.         Log.d("ReserveFormActivity", "restoId: " + restoId);
  88.  
  89.         fullNameEditText = findViewById(R.id.fullNameEditText);
  90.         contactNumberEditText = findViewById(R.id.contactNumberEditText);
  91.         emailEditText = findViewById(R.id.emailEditText);
  92.         reservationDateEditText = findViewById(R.id.reservationDateEditText);
  93.         submitButton = findViewById(R.id.submitButton);
  94.         yourGcashNameET = findViewById(R.id.yourGcashNameET);
  95.         yourGcashNumberET = findViewById(R.id.yourGcashNumberET);
  96.         referenceNumberET = findViewById(R.id.referenceNumberET);
  97.         attachedImageView = findViewById(R.id.attachedImageView);
  98.  
  99.         databaseReference = FirebaseDatabase.getInstance().getReference();
  100.  
  101.         customerstv = findViewById(R.id.customerstv);
  102.  
  103.         gcashDepositNumberET = findViewById(R.id.gcashDepositNumberET);
  104.         gcashDepositNameET = findViewById(R.id.gcashDepositNameET);
  105.         reservefeeET= findViewById(R.id.reservefeeET);
  106.  
  107.         imageView = findViewById(R.id.copyImageView);
  108.         textView = findViewById(R.id.gcashDepositNumberET);
  109.  
  110.         AlertDialog alertDialog = showTermsDialog();
  111.         if (alertDialog != null && alertDialog.isShowing()) {
  112.             alertDialog.dismiss();
  113.         }
  114.  
  115.         imageView.setOnClickListener(new View.OnClickListener() {
  116.             @Override
  117.             public void onClick(View v) {
  118.                 ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
  119.                 ClipData clipData = ClipData.newPlainText("Copy",textView.getText().toString());
  120.                 clipboardManager.setPrimaryClip(clipData);
  121.                 Toast.makeText(ReserveForm.this, "Copied", Toast.LENGTH_SHORT).show();
  122.             }
  123.         });
  124.  
  125.         DatabaseReference restoRef = databaseReference.child("restaurants").child(restoId);
  126.         restoRef.addListenerForSingleValueEvent(new ValueEventListener() {
  127.             @Override
  128.             public void onDataChange(@NonNull DataSnapshot restoSnapshot) {
  129.                 if (restoSnapshot.exists()) {
  130.                     String gcashNumber = restoSnapshot.child("gcashNumber").getValue(String.class);
  131.                     String gcashName = restoSnapshot.child("gcashName").getValue(String.class);
  132.                     String reservefee = restoSnapshot.child("reservationFee").getValue(String.class);
  133.  
  134.                     if (gcashDepositNameET != null && gcashDepositNumberET != null) {
  135.                         gcashDepositNumberET.setText(gcashNumber);
  136.                         gcashDepositNameET.setText(gcashName);
  137.                         reservefeeET.setText(reservefee);
  138.                     } else {
  139.                         Log.e("BookForm", "gcashDepositNameET or gcashDepositNumberET is null");
  140.                     }
  141.                 } else {
  142.                     Log.e("ReserveForm", "Resto not found with ID: " + restoId);
  143.                 }
  144.             }
  145.  
  146.             @Override
  147.             public void onCancelled(@NonNull DatabaseError databaseError) {
  148.                 Log.e("ReserveForm", "Hotel database error: " + databaseError.getMessage());
  149.             }
  150.         });
  151.  
  152.  
  153.  
  154.         reservationDateEditText.setOnClickListener(new View.OnClickListener() {
  155.             @Override
  156.             public void onClick(View v) {
  157.                 showDatePickerDialog(reservationDateEditText);
  158.             }
  159.         });
  160.  
  161.         submitButton.setOnClickListener(new View.OnClickListener() {
  162.             @Override
  163.             public void onClick(View v) {
  164.                 if (areAllFieldsFilled()) {
  165.                     FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  166.  
  167.                     if (currentUser != null) {
  168.                         String enteredEmail = emailEditText.getText().toString();
  169.                         String registeredEmail = currentUser.getEmail();
  170.  
  171.                         if (enteredEmail.equals(registeredEmail)) {
  172.                             // Email is correct, continue with the submission
  173.  
  174.                             // Assuming you have a reference to your loadingProgressBar
  175.                             ProgressBar loadingProgressBar = findViewById(R.id.loadingProgressBar);
  176.  
  177.                             // Show loading indicator
  178.                             submitButton.setVisibility(View.GONE);
  179.                             loadingProgressBar.setVisibility(View.VISIBLE);
  180.  
  181.                             new AsyncTask<Void, Void, Void>() {
  182.                                 @Override
  183.                                 protected Void doInBackground(Void... params) {
  184.                                     try {
  185.                                         Thread.sleep(2000); // Simulating a 2-second delay
  186.                                     } catch (InterruptedException e) {
  187.                                         e.printStackTrace();
  188.                                     }
  189.                                     return null;
  190.                                 }
  191.  
  192.                                 @Override
  193.                                 protected void onPostExecute(Void result) {
  194.                                     // After the form submission is complete, hide the loading indicator
  195.                                     loadingProgressBar.setVisibility(View.GONE);
  196.                                     submitButton.setVisibility(View.VISIBLE);
  197.  
  198.  
  199.                                     String userId = currentUser.getUid();
  200.                             String fullName = fullNameEditText.getText().toString();
  201.                             String contactNumber = contactNumberEditText.getText().toString();
  202.                             String reservationDate = reservationDateEditText.getText().toString();
  203.                             int customers = Integer.parseInt(customerstv.getText().toString());
  204.                             String email = emailEditText.getText().toString();
  205.                             String yourGcashName = yourGcashNameET.getText().toString();
  206.                             String yourGcashNumber = yourGcashNumberET.getText().toString();
  207.                             String referenceNumber = referenceNumberET.getText().toString();
  208.  
  209.                             canSubmitBooking(userId, restoId, fullName, reservationDate, contactNumber, email, customers,
  210.                                     yourGcashName, yourGcashNumber, referenceNumber);
  211.  
  212.                                     finish();
  213.                                 }
  214.                             }.execute();
  215.  
  216.  
  217.  
  218.                         } else {
  219.                              Toast.makeText(ReserveForm.this, "Please enter the email associated with your account.", Toast.LENGTH_SHORT).show();
  220.                         }
  221.                     } else {
  222.                         Log.e("ReserveForm", "User is not authenticated");
  223.                     }
  224.                 } else {
  225.                     Toast.makeText(ReserveForm.this, "All fields are required.", Toast.LENGTH_SHORT).show();
  226.                 }
  227.             }
  228.         });
  229.         Button attachPhotoButton = findViewById(R.id.attachPhotoButton);
  230.         attachPhotoButton.setOnClickListener(new View.OnClickListener() {
  231.             @Override
  232.             public void onClick(View v) {
  233.                 openFileChooser();
  234.             }
  235.         });
  236.  
  237.         TextView termsPaymentTextView = findViewById(R.id.termsPayment);
  238.         termsPaymentTextView.setOnClickListener(new View.OnClickListener() {
  239.             @Override
  240.             public void onClick(View view) {
  241.                 showTermsDialog();
  242.             }
  243.         });
  244.     }
  245.  
  246.  
  247.     public void incrementValue(View view) {
  248.         if (customerCount < 9) {
  249.             customerCount++;
  250.             updateAdultsCount();
  251.         }
  252.     }
  253.  
  254.     public void decrementValue(View view) {
  255.         if (customerCount > 0) {
  256.             customerCount--;
  257.             updateAdultsCount();
  258.         }
  259.     }
  260.  
  261.  
  262.     private void updateAdultsCount() {
  263.         customerstv.setText(String.valueOf(customerCount));
  264.     }
  265.  
  266.  
  267.     private void openFileChooser() {
  268.         Intent intent = new Intent();
  269.         intent.setType("image/*");
  270.         intent.setAction(Intent.ACTION_GET_CONTENT);
  271.         startActivityForResult(intent, PICK_IMAGE_REQUEST);
  272.     }
  273.  
  274.     @Override
  275.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  276.         super.onActivityResult(requestCode, resultCode, data);
  277.  
  278.         if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
  279.             selectedImageUri = data.getData();
  280.             attachedImageView.setImageURI(selectedImageUri);
  281.             attachedImageView.setVisibility(View.VISIBLE);
  282.         }
  283.     }
  284.  
  285.     private void canSubmitBooking(String userId, String restoId, String fullName, String reservationDate, String contactNumber, String email, int customers,
  286.                                   String yourGcashName, String yourGcashNumber, String referenceNumber) {
  287.  
  288.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  289.  
  290.         DatabaseReference userreservationsRef = databaseReference.child("reservation_info");
  291.         userreservationsRef.orderByChild("userId").equalTo(userId).addListenerForSingleValueEvent(new ValueEventListener() {
  292.             @Override
  293.             public void onDataChange(DataSnapshot dataSnapshot) {
  294.                 Log.d("Reservation", "Entering canSubmitBooking method");
  295.  
  296.                 boolean canSubmit = true;
  297.                 for (DataSnapshot reservationSnapshot : dataSnapshot.getChildren()) {
  298.                     String existingCheckOutDate = reservationSnapshot.child("reservationDate").getValue(String.class);
  299.  
  300.                     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
  301.                     Date currentDate = new Date();
  302.                     Date existingCheckOut = null;
  303.  
  304.                     try {
  305.                         existingCheckOut = sdf.parse(existingCheckOutDate);
  306.                     } catch (ParseException e) {
  307.                         e.printStackTrace();
  308.                     }
  309.  
  310.                     Log.d("Reservation", "Existing Checkout Date: " + existingCheckOutDate);
  311.  
  312.                     if (existingCheckOut != null) {
  313.                         if (!(existingCheckOut.before(existingCheckOut)||
  314.                                 existingCheckOut.after(existingCheckOut))) {
  315.                             canSubmit = false;
  316.                             break;
  317.                         }
  318.                         Log.d("Reservation", "Current Date: " + currentDate);
  319.                         Log.d("Reservation", "Existing Checkout Date: " + existingCheckOut);
  320.  
  321.                         if (existingCheckOut != null && currentDate.before(existingCheckOut)) {
  322.                             canSubmit = false;
  323.                             break;
  324.                         }
  325.                     }
  326.                 }
  327.  
  328.                 Log.d("Reservation", "canSubmit: " + canSubmit);
  329.  
  330.                 if (canSubmit) {
  331.                     saveBooking(userId, restoId, fullName, reservationDate, contactNumber, email, customers,
  332.                             yourGcashName, yourGcashNumber, referenceNumber,timestamp);
  333.                 } else {
  334.                     Toast.makeText(ReserveForm.this, "You cannot submit a new Reservation until your current Reservation has ended.", Toast.LENGTH_SHORT).show();
  335.                 }
  336.             }
  337.  
  338.             @Override
  339.             public void onCancelled(DatabaseError databaseError) {
  340.                 Log.e("Reservation", "Database error: " + databaseError.getMessage());
  341.             }
  342.         });
  343.     }
  344.  
  345.  
  346.  
  347.     private void saveBooking (String userId, String restoId, String fullName,String reservationDate, String contactNumber, String email, int customers,
  348.                        String yourGcashName, String yourGcashNumber, String referenceNumber, Object timestamp) {
  349.         FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  350.  
  351.         if (currentUser != null) {
  352.             String userType = "Tourist";
  353.             String userPath =  "users/" + userType + "/" + currentUser.getUid() + "/name";
  354.             DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  355.             DatabaseReference userRef = databaseReference.child(userPath);
  356.             userRef.addListenerForSingleValueEvent(new ValueEventListener() {
  357.                 @Override
  358.                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  359.                     Log.d("ReserveForm", "onDataChange called");
  360.                     if (dataSnapshot.exists()) {
  361.                         String userName = dataSnapshot.getValue(String.class);
  362.                         Log.d("ReserveForm", "Name retrieved: " + userName);
  363.  
  364.                         DatabaseReference restaurantRef = databaseReference.child("restaurants").child(restoId).child("user_id");
  365.                         Log.d("BookForm", "hrestaurantref: " + restaurantRef);
  366.                         restaurantRef.addListenerForSingleValueEvent(new ValueEventListener() {
  367.                             @Override
  368.                             public void onDataChange(@NonNull DataSnapshot restaurantDataSnapshot) {
  369.                                 if (restaurantDataSnapshot.exists()) {
  370.                                     String restoUserId = restaurantDataSnapshot.getValue(String.class);
  371.                                     Log.d("ReserveForm", "restoUserId: " + restoUserId);
  372.  
  373.                                     if (selectedImageUri != null) {
  374.                                         StorageReference storageReference = FirebaseStorage.getInstance().getReference();
  375.                                         StorageReference imageRef = storageReference.child("payment_receipts/" + userId + "/" + restoId + "/image.jpg");
  376.  
  377.                                         imageRef.putFile(selectedImageUri)
  378.                                                 .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
  379.                                                     @Override
  380.                                                     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
  381.                                                         imageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
  382.                                                             @Override
  383.                                                             public void onSuccess(Uri downloadUri) {
  384.                                                                 String imageUrl = downloadUri.toString();
  385.  
  386.  
  387.                                                                 DatabaseReference reservationsRef = databaseReference.child("reservation_info").push();
  388.                                                                 String reservationId = reservationsRef.getKey();
  389.  
  390.                                                                 reservationsRef.child("isConfirmed").setValue(false);
  391.                                                                 reservationsRef.child("isPending").setValue(true);
  392.                                                                 reservationsRef.child("isDeclined").setValue(false);
  393.  
  394.                                                                 reservationsRef.child("userId").setValue(userId);
  395.                                                                 reservationsRef.child("fullName").setValue(fullName);
  396.                                                                 reservationsRef.child("reservationDate").setValue(reservationDate);
  397.                                                                 reservationsRef.child("contactNumber").setValue(contactNumber);
  398.                                                                 reservationsRef.child("email").setValue(email);
  399.                                                                 reservationsRef.child("customers").setValue(customers);
  400.                                                                 reservationsRef.child("restoUserId").setValue(restoUserId);
  401.  
  402.                                                                 reservationsRef.child("GcashName").setValue(yourGcashName);
  403.                                                                 reservationsRef.child("yGcashNumber").setValue(yourGcashNumber);
  404.                                                                 reservationsRef.child("referenceNumber").setValue(referenceNumber);
  405.                                                                 reservationsRef.child("imageUrl").setValue(imageUrl);
  406.  
  407.                                                                 reservationsRef.child("timestamp").setValue(ServerValue.TIMESTAMP);
  408.  
  409.                                                                 Log.d("ReservationForm", "Booking data saved");
  410.                                                                 Toast.makeText(ReserveForm.this, "Reservation submitted.", Toast.LENGTH_SHORT).show();
  411.                                                             }
  412.                                                         });
  413.                                                     }
  414.                                                 })
  415.                                                 .addOnFailureListener(new OnFailureListener() {
  416.                                                     @Override
  417.                                                     public void onFailure(@NonNull Exception e) {
  418.                                                         Log.e("BookForm", "Image upload failed: " + e.getMessage());
  419.                                                     }
  420.                                                 });
  421.                                     } else {
  422.                                         Log.e("BookForm", "Selected image URI is null");
  423.                                     }
  424.                                 }
  425.                             }
  426.  
  427.                             @Override
  428.                             public void onCancelled(@NonNull DatabaseError databaseError) {
  429.                                 Log.e("BookForm", "Database error: " + databaseError.getMessage());
  430.                             }
  431.                         });
  432.                     } else {
  433.                         Log.e("BookForm", "User is not authenticated");
  434.                     }
  435.                 }
  436.                 @Override
  437.                 public void onCancelled(@NonNull DatabaseError databaseError) {
  438.                     Log.e("BookForm", "Database error: " + databaseError.getMessage());
  439.                 }
  440.             });
  441.         } else {
  442.             Log.e("BookForm", "User is not authenticated");
  443.         }
  444.     }
  445.     private void showDatePickerDialog(final EditText editText) {
  446.         final Calendar calendar = Calendar.getInstance();
  447.         int year = calendar.get(Calendar.YEAR);
  448.         int month = calendar.get(Calendar.MONTH);
  449.         int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
  450.  
  451.         DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
  452.             @Override
  453.             public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
  454.                 Calendar selectedCalendar = Calendar.getInstance();
  455.                 selectedCalendar.set(year, monthOfYear, dayOfMonth);
  456.  
  457.                 if (selectedCalendar.before(calendar)) {
  458.                     Toast.makeText(ReserveForm.this, "Please select a future date", Toast.LENGTH_SHORT).show();
  459.                 } else {
  460.                     String selectedDate = (monthOfYear + 1) + "/" + dayOfMonth + "/" + year;
  461.                     editText.setText(selectedDate);
  462.                 }
  463.             }
  464.         }, year, month, dayOfMonth);
  465.  
  466.         datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
  467.  
  468.         datePickerDialog.show();
  469.     }
  470.     private boolean areAllFieldsFilled() {
  471.         return !fullNameEditText.getText().toString().isEmpty() &&
  472.                 !contactNumberEditText.getText().toString().isEmpty() &&
  473.                 !emailEditText.getText().toString().isEmpty() &&
  474.                 !reservationDateEditText.getText().toString().isEmpty() &&
  475.                 !yourGcashNameET.getText().toString().isEmpty() &&
  476.                 !yourGcashNumberET.getText().toString().isEmpty() &&
  477.                 !referenceNumberET.getText().toString().isEmpty()  &&
  478.                 selectedImageUri != null;
  479.     }
  480.  
  481.     public void retrieve (String restoId) {
  482.         TextView depositNumberTV = findViewById(R.id.gcashDepositNumberET);
  483.         TextView depositNameTV = findViewById(R.id.gcashDepositNameET);
  484.  
  485.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  486.         DatabaseReference restoRef = databaseReference.child("restaurants").child(restoId);
  487.  
  488.         restoRef.addListenerForSingleValueEvent(new ValueEventListener() {
  489.             @Override
  490.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  491.                 Log.d("BookForm", "onDataChange called");
  492.                 if (dataSnapshot.exists()) {
  493.                     String gcashNumber = dataSnapshot.child("gcashNumber").getValue(String.class);
  494.                     String gcashName = dataSnapshot.child("gcashName").getValue(String.class);
  495.  
  496.                     depositNumberTV.setText(gcashNumber);
  497.                     depositNameTV.setText(gcashName);
  498.  
  499.                 }
  500.             }
  501.  
  502.             @Override
  503.             public void onCancelled(@NonNull DatabaseError databaseError) {
  504.                 Log.e("DynamicHotel", "Failed to retrieve hotel data: " + databaseError.getMessage());
  505.             }
  506.         });
  507.     }
  508.  
  509.  
  510.  
  511.     private AlertDialog showTermsDialog() {
  512.         AlertDialog.Builder builder = new AlertDialog.Builder(this);
  513.         View customView = getLayoutInflater().inflate(R.layout.dialog_payment, null);
  514.         builder.setView(customView);
  515.  
  516.         AlertDialog alertDialog = builder.create();
  517.  
  518.         AppCompatButton understandButton = customView.findViewById(R.id.understandButton);
  519.         understandButton.setOnClickListener(new View.OnClickListener() {
  520.             @Override
  521.             public void onClick(View v) {
  522.                 alertDialog.dismiss();
  523.             }
  524.         });
  525.  
  526.         alertDialog.show();
  527.  
  528.         return alertDialog;
  529.     }
  530.  
  531.     public void goBack(View view) {
  532.         onBackPressed();
  533.     }
  534. }
Tags: Code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement