Advertisement
kitlolz012

validation bookform java

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