Advertisement
kitlolz012

BookFormJava(No Multiple Booking 4 )

Oct 8th, 2023
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 20.72 KB | Source Code | 0 0
  1. package com.example.gypsy;
  2.  
  3. import androidx.annotation.NonNull;
  4. import androidx.appcompat.app.AppCompatActivity;
  5.  
  6. import android.app.DatePickerDialog;
  7. import android.content.Intent;
  8. import android.net.Uri;
  9. import android.os.Bundle;
  10. import android.util.Log;
  11. import android.view.View;
  12. import android.widget.ArrayAdapter;
  13. import android.widget.Button;
  14. import android.widget.EditText;
  15. import android.widget.ImageView;
  16. import android.widget.NumberPicker;
  17. import android.widget.Spinner;
  18. import android.widget.Toast;
  19.  
  20. import com.google.firebase.auth.FirebaseAuth;
  21. import com.google.firebase.auth.FirebaseUser;
  22. import com.google.firebase.database.DataSnapshot;
  23. import com.google.firebase.database.DatabaseError;
  24. import com.google.firebase.database.DatabaseReference;
  25. import com.google.firebase.database.FirebaseDatabase;
  26. import com.google.firebase.database.ValueEventListener;
  27. import com.google.firebase.storage.FirebaseStorage;
  28. import com.google.firebase.storage.StorageReference;
  29. import com.google.firebase.storage.UploadTask;
  30.  
  31. import java.text.ParseException;
  32. import java.text.SimpleDateFormat;
  33. import java.util.ArrayList;
  34. import java.util.Calendar;
  35. import java.util.List;
  36. import java.util.Locale;
  37. import com.google.android.gms.tasks.OnSuccessListener;
  38. import com.google.android.gms.tasks.OnFailureListener;
  39.  
  40. public class BookForm extends AppCompatActivity {
  41.     private Spinner roomPreferenceSpinner;
  42.     private List<String> roomTypeList = new ArrayList<>();
  43.     private EditText fullNameET;
  44.     private EditText contactNumberET;
  45.     private EditText emailET;
  46.     private EditText checkInDateET;
  47.     private EditText checkOutDateET;
  48.     private NumberPicker adultsNumberPicker;
  49.     private NumberPicker childrenNumberPicker;
  50.     private EditText yourGcashNameET;
  51.     private EditText yourGcashNumberET;
  52.     private EditText referenceNumberET;
  53.     private Button submitButton;
  54.     private ImageView attachedImageView;
  55.     private static final int PICK_IMAGE_REQUEST = 1;
  56.     private Uri selectedImageUri; // To store the selected image URI
  57.  
  58.     @Override
  59.     protected void onCreate(Bundle savedInstanceState) {
  60.         super.onCreate(savedInstanceState);
  61.         setContentView(R.layout.activity_book_form);
  62.  
  63.         Intent intent = getIntent(); // kunin yung hotelId sa DynamicHotel para sa
  64.         String hotelId = intent.getStringExtra("hotelKey"); // personalized fields nila
  65.         Log.d("BookFormActivity", "hotelId: " + hotelId); // sa book info like roomtypes etc
  66.  
  67.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  68.         DatabaseReference roomPreferencesRef = databaseReference.child("hotels").child(hotelId).child("roomTypes");
  69.  
  70.         fullNameET = findViewById(R.id.fullNameET);
  71.         contactNumberET = findViewById(R.id.contactNumberET);
  72.         emailET = findViewById(R.id.emailET);
  73.         submitButton = findViewById(R.id.submitButton);
  74.         roomPreferenceSpinner = findViewById(R.id.roomPreferenceSpinner);
  75.         checkInDateET = findViewById(R.id.checkInDateET);
  76.         checkOutDateET = findViewById(R.id.checkOutDateET);
  77.         yourGcashNameET = findViewById(R.id.yourGcashNameET);
  78.         yourGcashNumberET = findViewById(R.id.yourGcashNumberET);
  79.         referenceNumberET = findViewById(R.id.referenceNumberET);
  80.         attachedImageView = findViewById(R.id.attachedImageView);
  81.  
  82.         ArrayAdapter<String> roomTypeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, roomTypeList); // list string ng mga items
  83.         roomTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  // built in layout ni AS para sa dropdown selection
  84.  
  85.         roomPreferenceSpinner.setAdapter(roomTypeAdapter);
  86.  
  87.         adultsNumberPicker = findViewById(R.id.adultsNumberPicker);
  88.         childrenNumberPicker = findViewById(R.id.childrenNumberPicker);
  89.         adultsNumberPicker.setMinValue(0);
  90.         adultsNumberPicker.setMaxValue(10);
  91.         childrenNumberPicker.setMinValue(0);
  92.         childrenNumberPicker.setMaxValue(10);
  93.  
  94.         checkInDateET.setOnClickListener(new View.OnClickListener() {
  95.             @Override
  96.             public void onClick(View v) {
  97.                 showDatePickerDialog(checkInDateET);
  98.             }
  99.         });
  100.         checkOutDateET.setOnClickListener(new View.OnClickListener() {
  101.             @Override
  102.             public void onClick(View v) {
  103.                 showDatePickerDialog(checkOutDateET);
  104.             }
  105.         });
  106.  
  107.         roomPreferencesRef.addListenerForSingleValueEvent(new ValueEventListener() {
  108.             @Override
  109.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  110.                 if (dataSnapshot.exists()) { // then loop para mag iterate sa children ng DataSnapshot
  111.                     for (DataSnapshot preferenceSnapshot : dataSnapshot.getChildren()) {
  112.                         String roomPreference = preferenceSnapshot.getValue(String.class);
  113.                         roomTypeList.add(roomPreference);
  114.                     }
  115.                     roomTypeAdapter.notifyDataSetChanged();
  116.                 }
  117.             }
  118.  
  119.             @Override
  120.             public void onCancelled(@NonNull DatabaseError databaseError) {
  121.                 Log.e("BookForm", "error" + databaseError.getMessage());
  122.             }
  123.         });
  124.  
  125.         submitButton.setOnClickListener(new View.OnClickListener() {
  126.             @Override
  127.             public void onClick(View v) {
  128.                 if (allFields()) {
  129.                     FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  130.  
  131.                     if (currentUser != null) {
  132.                         String userId = currentUser.getUid();
  133.                         String fullName = fullNameET.getText().toString();
  134.                         String checkInDate = checkInDateET.getText().toString();
  135.                         String checkOutDate = checkOutDateET.getText().toString();
  136.                         int adults = adultsNumberPicker.getValue();
  137.                         int children = childrenNumberPicker.getValue();
  138.                         String contactNumber = contactNumberET.getText().toString();
  139.                         String email = emailET.getText().toString();
  140.                         String roomPreference = roomPreferenceSpinner.getSelectedItem().toString();
  141.                         String yourGcashName = yourGcashNameET.getText().toString();
  142.                         String yourGcashNumber = yourGcashNumberET.getText().toString();
  143.                         String referenceNumber = referenceNumberET.getText().toString();
  144.  
  145.                         // Initialize a list to store hotel IDs for which the user has made bookings
  146.                         List<String> hotelIdsWithBookings = new ArrayList<>();
  147.  
  148.                         DatabaseReference bookingInfoRef = ((DatabaseReference) FirebaseDatabase.getInstance().getReference()
  149.                                 .child("booking_info")
  150.                                 .orderByChild("userId")  // Filter bookings by the user's ID
  151.                                 .equalTo(userId)).getRef();
  152.  
  153.  
  154.  
  155.                         bookingInfoRef.addListenerForSingleValueEvent(new ValueEventListener() {
  156.                             @Override
  157.                             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  158.                                 if (dataSnapshot.exists()) {
  159.                                     for (DataSnapshot bookingSnapshot : dataSnapshot.getChildren()) {
  160.                                         String hotelId = bookingSnapshot.child("hotelUserId").getValue(String.class);
  161.                                         if (!hotelIdsWithBookings.contains(hotelId)) {
  162.                                             // This hotel ID is not in the list, add it
  163.                                             hotelIdsWithBookings.add(hotelId);
  164.                                         }
  165.                                     }
  166.  
  167.                                     // Check the last booking's check-out date for each hotel
  168.                                     for (String hotelIdToCheck : hotelIdsWithBookings) {
  169.                                         String lastCheckoutDateStr = getLastCheckoutDateForHotel(dataSnapshot, hotelIdToCheck);
  170.  
  171.                                         if (lastCheckoutDateStr != null) {
  172.                                             SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
  173.                                             Calendar lastCheckoutDate = Calendar.getInstance();
  174.                                             try {
  175.                                                 lastCheckoutDate.setTime(dateFormat.parse(lastCheckoutDateStr));
  176.                                             } catch (ParseException e) {
  177.                                                 e.printStackTrace();
  178.                                                 Log.e("BookForm", "Date parsing error: " + e.getMessage());
  179.                                                 continue; // Skip this hotel and move to the next
  180.                                             }
  181.  
  182.                                             Calendar currentDate = Calendar.getInstance();
  183.                                             currentDate.add(Calendar.DAY_OF_MONTH, 1); // Add one day to the current date
  184.  
  185.                                             if (lastCheckoutDate.before(currentDate)) {
  186.                                                 // The user has made a booking within one day of their last checkout date
  187.                                                 Toast.makeText(BookForm.this, "You can only book one day after your check-out date for Hotel: " + hotelIdToCheck, Toast.LENGTH_SHORT).show();
  188.                                                 return; // Exit the function, don't allow the booking
  189.                                             }
  190.                                         }
  191.                                     }
  192.                                 }
  193.  
  194.                                 // Allow the booking to be submitted (outside the loop for checking hotels)
  195.                                 save(userId, hotelId, fullName, checkInDate, checkOutDate,
  196.                                         adults, children, contactNumber, email, roomPreference,
  197.                                         yourGcashName, yourGcashNumber, referenceNumber);
  198.  
  199.                                 // Display a success message
  200.                                 Toast.makeText(BookForm.this, "Booking submitted.", Toast.LENGTH_SHORT).show();
  201.                             }
  202.  
  203.                             @Override
  204.                             public void onCancelled(@NonNull DatabaseError databaseError) {
  205.                                 Log.e("BookForm", "Database error: " + databaseError.getMessage());
  206.                             }
  207.                         });
  208.                     } else {
  209.                         Log.e("BookForm", "User is not authenticated");
  210.                     }
  211.                 } else {
  212.                     Toast.makeText(BookForm.this, "Please fill in all required fields.", Toast.LENGTH_SHORT).show();
  213.                 }
  214.             }
  215.         });
  216.  
  217.         Button attachPhotoButton = findViewById(R.id.attachPhotoButton);
  218.         attachPhotoButton.setOnClickListener(new View.OnClickListener() {
  219.             @Override
  220.             public void onClick(View v) {
  221.                 openFileChooser();
  222.             }
  223.         });
  224.     }
  225.  
  226.     private void openFileChooser() {
  227.         Intent intent = new Intent();
  228.         intent.setType("image/*");
  229.         intent.setAction(Intent.ACTION_GET_CONTENT);
  230.         startActivityForResult(intent, PICK_IMAGE_REQUEST);
  231.     }
  232.  
  233.     @Override
  234.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  235.         super.onActivityResult(requestCode, resultCode, data);
  236.  
  237.         if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
  238.             selectedImageUri = data.getData();
  239.             attachedImageView.setImageURI(selectedImageUri);
  240.             attachedImageView.setVisibility(View.VISIBLE);
  241.         }
  242.     }
  243.  
  244.     // Save booking data and the attached image to Firebase
  245.     private void save(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
  246.                       int adults, int children, String contactNumber, String email, String roomPreference,
  247.                       String yourGcashName, String yourGcashNumber, String referenceNumber) {
  248.         FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  249.  
  250.         if (currentUser != null) {
  251.             String userType = "Tourist"; // select yung user type which is tourist
  252.             //  kukunin yung name for Tourist user type
  253.             String userPath = "users/" + userType + "/" + currentUser.getUid() + "/name";
  254.  
  255.             DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  256.             DatabaseReference userRef = databaseReference.child(userPath);
  257.             userRef.addListenerForSingleValueEvent(new ValueEventListener() {
  258.                 @Override
  259.                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  260.                     if (dataSnapshot.exists()) {
  261.                         String userName = dataSnapshot.getValue(String.class);
  262.  
  263.                         DatabaseReference hotelRef = databaseReference.child("hotels").child(hotelId).child("user_id");
  264.                         hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
  265.                             @Override
  266.                             public void onDataChange(@NonNull DataSnapshot hotelDataSnapshot) {
  267.                                 if (hotelDataSnapshot.exists()) {
  268.                                     String hotelUserId = hotelDataSnapshot.getValue(String.class);
  269.  
  270.                                     if (selectedImageUri != null) {
  271.                                         StorageReference storageReference = FirebaseStorage.getInstance().getReference();
  272.                                         StorageReference imageRef = storageReference.child("payment_receipts/" + userId + "/" + hotelId + "/image.jpg");
  273.  
  274.                                         imageRef.putFile(selectedImageUri)
  275.                                                 .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
  276.                                                     @Override
  277.                                                     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
  278.                                                         imageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
  279.                                                             @Override
  280.                                                             public void onSuccess(Uri downloadUri) {
  281.                                                                 String imageUrl = downloadUri.toString();
  282.  
  283.                                                                 DatabaseReference bookingsRef = databaseReference.child("booking_info").push();
  284.                                                                 String bookingId = bookingsRef.getKey();
  285.  
  286.                                                                 bookingsRef.child("userId").setValue(userId);
  287.                                                                 bookingsRef.child("fullName").setValue(fullName);
  288.                                                                 bookingsRef.child("checkInDate").setValue(checkInDate);
  289.                                                                 bookingsRef.child("checkOutDate").setValue(checkOutDate);
  290.                                                                 bookingsRef.child("adults").setValue(adults);
  291.                                                                 bookingsRef.child("children").setValue(children);
  292.                                                                 bookingsRef.child("contactNumber").setValue(contactNumber);
  293.                                                                 bookingsRef.child("email").setValue(email);
  294.                                                                 bookingsRef.child("roomPreference").setValue(roomPreference);
  295.  
  296.                                                                 bookingsRef.child("GcashName").setValue(yourGcashName);
  297.                                                                 bookingsRef.child("yGcashNumber").setValue(yourGcashNumber);
  298.                                                                 bookingsRef.child("referenceNumber").setValue(referenceNumber);
  299.                                                                 bookingsRef.child("userName").setValue(userName);
  300.                                                                 bookingsRef.child("hotelUserId").setValue(hotelUserId);
  301.  
  302.                                                                 bookingsRef.child("imageUrl").setValue(imageUrl);
  303.  
  304.                                                                 Log.d("BookForm", "Booking data saved with image URL");
  305.                                                             }
  306.                                                         });
  307.                                                     }
  308.                                                 })
  309.                                                 .addOnFailureListener(new OnFailureListener() {
  310.                                                     @Override
  311.                                                     public void onFailure(@NonNull Exception e) {
  312.                                                         Log.e("BookForm", "Image upload failed: " + e.getMessage());
  313.                                                     }
  314.                                                 });
  315.                                     } else {
  316.                                         Log.e("BookForm", "Selected image URI is null");
  317.                                     }
  318.                                 }
  319.                             }
  320.  
  321.                             @Override
  322.                             public void onCancelled(@NonNull DatabaseError hotelDatabaseError) {
  323.                                 Log.e("BookForm", "Hotel database error: " + hotelDatabaseError.getMessage());
  324.                             }
  325.                         });
  326.                     } else {
  327.                         Log.e("BookForm", "User data does not exist in the database");
  328.                     }
  329.                 }
  330.  
  331.                 @Override
  332.                 public void onCancelled(@NonNull DatabaseError databaseError) {
  333.                     Log.e("BookForm", "Database error: " + databaseError.getMessage());
  334.                 }
  335.             });
  336.         } else {
  337.             Log.e("BookForm", "User is not authenticated");
  338.         }
  339.     }
  340.  
  341.     private void showDatePickerDialog(final EditText editText) {
  342.         final Calendar calendar = Calendar.getInstance();
  343.         int year = calendar.get(Calendar.YEAR);
  344.         int month = calendar.get(Calendar.MONTH);
  345.         int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
  346.  
  347.         DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
  348.             @Override
  349.             public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
  350.                 String selectedDate = (monthOfYear + 1) + "/" + dayOfMonth + "/" + year;
  351.                 editText.setText(selectedDate);
  352.             }
  353.         }, year, month, dayOfMonth);
  354.  
  355.         datePickerDialog.show();
  356.     }
  357.  
  358.     private boolean allFields() {
  359.         return !fullNameET.getText().toString().isEmpty() &&
  360.                 !contactNumberET.getText().toString().isEmpty() &&
  361.                 !emailET.getText().toString().isEmpty() &&
  362.                 !checkInDateET.getText().toString().isEmpty() &&
  363.                 !checkOutDateET.getText().toString().isEmpty() &&
  364.                 !roomPreferenceSpinner.getSelectedItem().toString().isEmpty() &&
  365.                 !yourGcashNameET.getText().toString().isEmpty() &&
  366.                 !yourGcashNumberET.getText().toString().isEmpty() &&
  367.                 !referenceNumberET.getText().toString().isEmpty();
  368.     }
  369.  
  370.     // Helper function to get the last checkout date for a specific hotel
  371.     private String getLastCheckoutDateForHotel(DataSnapshot dataSnapshot, String hotelId) {
  372.         String lastCheckoutDateStr = null;
  373.         for (DataSnapshot bookingSnapshot : dataSnapshot.getChildren()) {
  374.             String currentHotelId = bookingSnapshot.child("hotelUserId").getValue(String.class);
  375.             if (hotelId.equals(currentHotelId)) {
  376.                 lastCheckoutDateStr = bookingSnapshot.child("checkOutDate").getValue(String.class);
  377.             }
  378.         }
  379.         return lastCheckoutDateStr;
  380.     }
  381. }
  382.  
Tags: Android
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement