Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.gypsy;
- import androidx.annotation.NonNull;
- import androidx.appcompat.app.AppCompatActivity;
- import android.app.DatePickerDialog;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.NumberPicker;
- import android.widget.ProgressBar;
- import android.widget.Spinner;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.google.firebase.auth.FirebaseAuth;
- import com.google.firebase.auth.FirebaseUser;
- import com.google.firebase.database.DataSnapshot;
- import com.google.firebase.database.DatabaseError;
- import com.google.firebase.database.DatabaseReference;
- import com.google.firebase.database.FirebaseDatabase;
- import com.google.firebase.database.ValueEventListener;
- import com.google.firebase.storage.FirebaseStorage;
- import com.google.firebase.storage.StorageReference;
- import com.google.firebase.storage.UploadTask;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.List;
- import java.util.Locale;
- public class BookForm extends AppCompatActivity {
- private Spinner roomPreferenceSpinner;
- private List<String> roomTypeList = new ArrayList<>();
- private EditText fullNameET;
- private EditText contactNumberET;
- private EditText emailET;
- private EditText checkInDateET;
- private EditText checkOutDateET;
- private EditText yourGcashNameET;
- private EditText yourGcashNumberET;
- private EditText referenceNumberET;
- private Button submitButton;
- private ImageView attachedImageView;
- private static final int PICK_IMAGE_REQUEST = 1;
- private Uri selectedImageUri;
- private Calendar selectedCheckInDate = Calendar.getInstance();
- private Calendar selectedCheckOutDate = Calendar.getInstance();
- private TextView adultsNumberPicker;
- private int adultCount = 0;
- private TextView childrenNumberPicker;
- private int childrenCount = 0;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_book_form);
- Intent intent = getIntent(); // kunin yung hotelId sa DynamicHotel para sa
- String hotelId = intent.getStringExtra("hotelKey"); // personalized fields nila
- Log.d("BookFormActivity", "hotelId: " + hotelId); // sa book info like roomtypes etc
- DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
- DatabaseReference roomPreferencesRef = databaseReference.child("hotels").child(hotelId).child("roomTypes");
- fullNameET = findViewById(R.id.fullNameET);
- contactNumberET = findViewById(R.id.contactNumberET);
- emailET = findViewById(R.id.emailET);
- submitButton = findViewById(R.id.submitButton);
- roomPreferenceSpinner = findViewById(R.id.roomPreferenceSpinner);
- checkInDateET = findViewById(R.id.checkInDateET);
- checkOutDateET = findViewById(R.id.checkOutDateET);
- yourGcashNameET = findViewById(R.id.yourGcashNameET);
- yourGcashNumberET = findViewById(R.id.yourGcashNumberET);
- referenceNumberET = findViewById(R.id.referenceNumberET);
- attachedImageView = findViewById(R.id.attachedImageView);
- ArrayAdapter<String> roomTypeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, roomTypeList);
- roomTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- roomPreferenceSpinner.setAdapter(roomTypeAdapter);
- adultsNumberPicker = findViewById(R.id.adultsNumberPicker);
- childrenNumberPicker = findViewById(R.id.childrenNumberPicker);
- // Check-In Date Picker
- checkInDateET.setOnClickListener(v -> {
- selectedCheckInDate = Calendar.getInstance();
- showDatePickerDialog(selectedCheckInDate, Calendar.getInstance());
- });
- // Check-Out Date Picker
- checkOutDateET.setOnClickListener(v -> {
- selectedCheckOutDate = Calendar.getInstance();
- showDatePickerDialog(selectedCheckOutDate, selectedCheckInDate);
- });
- // Load room preferences from Firebase
- roomPreferencesRef.addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
- if (dataSnapshot.exists()) {
- roomTypeList.clear();
- for (DataSnapshot preferenceSnapshot : dataSnapshot.getChildren()) {
- String roomPreference = preferenceSnapshot.getValue(String.class);
- roomTypeList.add(roomPreference);
- }
- roomTypeAdapter.notifyDataSetChanged();
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError databaseError) {
- Log.e("BookForm", "Error: " + databaseError.getMessage());
- }
- });
- submitButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (allFields()) {
- // Assuming you have a reference to your loadingProgressBar
- ProgressBar loadingProgressBar = findViewById(R.id.loadingProgressBar);
- // Show loading indicator
- submitButton.setVisibility(View.GONE);
- loadingProgressBar.setVisibility(View.VISIBLE);
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... params) {
- // TODO: Perform form submission here in the background
- // Replace the following line with your actual form submission logic
- // Simulating a delay for demonstration purposes
- try {
- Thread.sleep(2000); // Simulating a 2-second delay
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return null;
- }
- @Override
- protected void onPostExecute(Void result) {
- // After the form submission is complete, hide the loading indicator
- loadingProgressBar.setVisibility(View.GONE);
- submitButton.setVisibility(View.VISIBLE);
- // Navigate to DynamicHotel activity
- Intent dynamicHotelIntent = new Intent(BookForm.this, DynamicHotel.class);
- dynamicHotelIntent.putExtra("hotelKey", hotelId); // Pass necessary data if needed
- startActivity(dynamicHotelIntent);
- finish(); // Optional: finish the current activity if you don't want to go back to it
- }
- }.execute();
- FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
- if (currentUser != null) {
- String userId = currentUser.getUid();
- String fullName = fullNameET.getText().toString();
- String checkInDate = checkInDateET.getText().toString();
- String checkOutDate = checkOutDateET.getText().toString();
- int adults = Integer.parseInt(adultsNumberPicker.getText().toString());
- int children = Integer.parseInt(childrenNumberPicker.getText().toString());
- String contactNumber = contactNumberET.getText().toString();
- String email = emailET.getText().toString();
- String roomPreference = roomPreferenceSpinner.getSelectedItem().toString();
- String yourGcashName = yourGcashNameET.getText().toString();
- String yourGcashNumber = yourGcashNumberET.getText().toString();
- String referenceNumber = referenceNumberET.getText().toString();
- // Prevent multiple bookings for the same period
- canSubmitBooking(userId, hotelId, fullName, checkInDate, checkOutDate, adults,
- children, contactNumber, email, roomPreference, yourGcashName, yourGcashNumber, referenceNumber);
- } else {
- Log.e("BookForm", "User is not authenticated");
- }
- } else {
- Toast.makeText(BookForm.this, "Please fill in all required fields.", Toast.LENGTH_SHORT).show();
- }
- }
- });
- Button attachPhotoButton = findViewById(R.id.attachPhotoButton);
- attachPhotoButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- openFileChooser();
- }
- });
- }
- public void incrementValue(View view) {
- if (adultCount < 9) {
- adultCount++;
- updateAdultsCount();
- }
- }
- public void decrementValue(View view) {
- if (adultCount > 0) {
- adultCount--;
- updateAdultsCount();
- }
- }
- private void updateAdultsCount() {
- adultsNumberPicker.setText(String.valueOf(adultCount));
- }
- public void incrementValue2(View view) {
- if (childrenCount < 9) {
- childrenCount++;
- updateChildrenCount();
- }
- }
- public void decrementValue2(View view) {
- if (childrenCount > 0) {
- childrenCount--;
- updateChildrenCount();
- }
- }
- private void updateChildrenCount() {
- childrenNumberPicker.setText(String.valueOf(childrenCount));
- }
- private void openFileChooser() {
- Intent intent = new Intent();
- intent.setType("image/*");
- intent.setAction(Intent.ACTION_GET_CONTENT);
- startActivityForResult(intent, PICK_IMAGE_REQUEST);
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
- selectedImageUri = data.getData();
- attachedImageView.setImageURI(selectedImageUri);
- attachedImageView.setVisibility(View.VISIBLE);
- }
- }
- private void showDatePickerDialog(final Calendar selectedDate, final Calendar minDate) {
- DatePickerDialog datePickerDialog = new DatePickerDialog(
- BookForm.this,
- (view, year, monthOfYear, dayOfMonth) -> {
- selectedDate.set(year, monthOfYear, dayOfMonth);
- // Check if the selected date is today or in the future
- Calendar currentDate = Calendar.getInstance();
- currentDate.set(Calendar.HOUR_OF_DAY, 0);
- currentDate.set(Calendar.MINUTE, 0);
- currentDate.set(Calendar.SECOND, 0);
- currentDate.set(Calendar.MILLISECOND, 0);
- if (!selectedDate.before(currentDate)) {
- updateDateField(selectedDate);
- } else {
- Toast.makeText(getApplicationContext(), "Please select a valid date", Toast.LENGTH_SHORT).show();
- }
- },
- selectedDate.get(Calendar.YEAR),
- selectedDate.get(Calendar.MONTH),
- selectedDate.get(Calendar.DAY_OF_MONTH)
- );
- // Set the minimum date to the check-in date
- datePickerDialog.getDatePicker().setMinDate(minDate.getTimeInMillis());
- // Optionally set the maximum date (if you want to limit to a specific future date)
- // datePickerDialog.getDatePicker().setMaxDate(your_max_date_in_milliseconds);
- datePickerDialog.show();
- }
- private void updateDateField(Calendar selectedDate) {
- SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.getDefault());
- // Update the corresponding EditText field
- if (selectedDate.equals(selectedCheckInDate)) {
- checkInDateET.setText(dateFormat.format(selectedDate.getTime()));
- } else if (selectedDate.equals(selectedCheckOutDate)) {
- checkOutDateET.setText(dateFormat.format(selectedDate.getTime()));
- }
- }
- private boolean allFields() {
- return !fullNameET.getText().toString().isEmpty() &&
- !contactNumberET.getText().toString().isEmpty() &&
- !emailET.getText().toString().isEmpty() &&
- !checkInDateET.getText().toString().isEmpty() &&
- !checkOutDateET.getText().toString().isEmpty() &&
- !roomPreferenceSpinner.getSelectedItem().toString().isEmpty() &&
- !yourGcashNameET.getText().toString().isEmpty() &&
- !yourGcashNumberET.getText().toString().isEmpty() &&
- !referenceNumberET.getText().toString().isEmpty();
- }
- private void canSubmitBooking(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
- int adults, int children, String contactNumber, String email, String roomPreference,
- String yourGcashName, String yourGcashNumber, String referenceNumber) {
- DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
- DatabaseReference userBookingsRef = databaseReference.child("booking_info");
- userBookingsRef.orderByChild("userId").equalTo(userId).addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(DataSnapshot dataSnapshot) {
- boolean canSubmit = true;
- SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
- Date currentDate = new Date();
- for (DataSnapshot bookingSnapshot : dataSnapshot.getChildren()) {
- String existingCheckInDate = bookingSnapshot.child("checkInDate").getValue(String.class);
- String existingCheckOutDate = bookingSnapshot.child("checkOutDate").getValue(String.class);
- try {
- Date existingCheckIn = sdf.parse(existingCheckInDate);
- Date existingCheckOut = sdf.parse(existingCheckOutDate);
- if (currentDate.after(existingCheckIn) && currentDate.before(existingCheckOut)) {
- canSubmit = false;
- break;
- }
- } catch (ParseException e) {
- e.printStackTrace();
- }
- }
- if (canSubmit) {
- saveBooking(userId, hotelId, fullName, checkInDate, checkOutDate, adults, children, contactNumber, email, roomPreference, yourGcashName, yourGcashNumber, referenceNumber);
- } else {
- Toast.makeText(BookForm.this, "You cannot submit a new booking until your current booking has ended.", Toast.LENGTH_SHORT).show();
- }
- }
- @Override
- public void onCancelled(DatabaseError databaseError) {
- Log.e("BookForm", "Database error: " + databaseError.getMessage());
- }
- });
- }
- private boolean isDateRangeOverlap(String start1, String end1, String start2, String end2) {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
- Date startDate1 = sdf.parse(start1);
- Date endDate1 = sdf.parse(end1);
- Date startDate2 = sdf.parse(start2);
- Date endDate2 = sdf.parse(end2);
- return !(endDate1.before(startDate2) || endDate2.before(startDate1));
- } catch (ParseException e) {
- e.printStackTrace();
- return false;
- }
- }
- private void saveBooking(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
- int adults, int children, String contactNumber, String email, String roomPreference,
- String yourGcashName, String yourGcashNumber, String referenceNumber) {
- DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
- DatabaseReference hotelRef = databaseReference.child("hotels").child(hotelId).child("user_id");
- Log.d("BookForm", "hotelref: " + hotelRef);
- hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull DataSnapshot hotelDataSnapshot) {
- if (hotelDataSnapshot.exists()) {
- String hotelUserId = hotelDataSnapshot.getValue(String.class);
- Log.d("BookForm", "HotelUserId: " + hotelUserId);
- DatabaseReference bookingsRef = databaseReference.child("booking_info").push();
- String bookingId = bookingsRef.getKey();
- bookingsRef.child("userId").setValue(userId);
- bookingsRef.child("fullName").setValue(fullName);
- bookingsRef.child("checkInDate").setValue(checkInDate);
- bookingsRef.child("checkOutDate").setValue(checkOutDate);
- bookingsRef.child("adults").setValue(adults);
- bookingsRef.child("children").setValue(children);
- bookingsRef.child("contactNumber").setValue(contactNumber);
- bookingsRef.child("email").setValue(email);
- bookingsRef.child("roomPreference").setValue(roomPreference);
- bookingsRef.child("GcashName").setValue(yourGcashName);
- bookingsRef.child("yGcashNumber").setValue(yourGcashNumber);
- bookingsRef.child("referenceNumber").setValue(referenceNumber);
- bookingsRef.child("hotelUserId").setValue(hotelUserId);
- if (selectedImageUri != null) {
- saveBookingWithImage(bookingsRef, userId, hotelId);
- } else {
- Log.d("BookForm", "Booking data saved successfully.");
- Toast.makeText(BookForm.this, "Booking submitted successfully.", Toast.LENGTH_SHORT).show();
- }
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError hotelDatabaseError) {
- Log.e("BookForm", "Hotel database error: " + hotelDatabaseError.getMessage());
- }
- });
- }
- private void saveBookingWithImage(DatabaseReference bookingsRef, String userId, String hotelId) {
- StorageReference storageReference = FirebaseStorage.getInstance().getReference();
- StorageReference imageRef = storageReference.child("payment_receipts/" + userId + "/" + hotelId + "/image.jpg");
- imageRef.putFile(selectedImageUri)
- .addOnSuccessListener(taskSnapshot -> {
- imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
- String imageUrl = downloadUri.toString();
- bookingsRef.child("imageUrl").setValue(imageUrl);
- Log.d("BookForm", "Booking data with image URL saved successfully.");
- Toast.makeText(this, "Booking submitted successfully.", Toast.LENGTH_SHORT).show();
- });
- })
- .addOnFailureListener(e -> {
- Log.e("BookForm", "Image upload failed: " + e.getMessage());
- Toast.makeText(this, "Failed to upload image.", Toast.LENGTH_SHORT).show();
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement