Advertisement
kitlolz012

disable past Date Bookform.java

Nov 13th, 2023 (edited)
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 18.04 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.TextView;
  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.ValueEventListener;
  28. import com.google.firebase.storage.FirebaseStorage;
  29. import com.google.firebase.storage.StorageReference;
  30. import com.google.firebase.storage.UploadTask;
  31.  
  32. import java.text.ParseException;
  33. import java.text.SimpleDateFormat;
  34. import java.util.ArrayList;
  35. import java.util.Calendar;
  36. import java.util.Date;
  37. import java.util.List;
  38. import java.util.Locale;
  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 EditText yourGcashNameET;
  49.     private EditText yourGcashNumberET;
  50.     private EditText referenceNumberET;
  51.     private Button submitButton;
  52.     private ImageView attachedImageView;
  53.     private static final int PICK_IMAGE_REQUEST = 1;
  54.     private Uri selectedImageUri;
  55.  
  56.     private Calendar selectedCheckInDate = Calendar.getInstance();
  57.     private Calendar selectedCheckOutDate = Calendar.getInstance();
  58.  
  59.  
  60.  
  61.     private TextView adultsNumberPicker;
  62.     private int adultCount = 0;
  63.     private TextView childrenNumberPicker;
  64.     private int childrenCount = 0;
  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);
  91.         roomTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  92.  
  93.         roomPreferenceSpinner.setAdapter(roomTypeAdapter);
  94.  
  95.         adultsNumberPicker = findViewById(R.id.adultsNumberPicker);
  96.         childrenNumberPicker = findViewById(R.id.childrenNumberPicker);
  97.  
  98.  
  99.         checkInDateET.setOnClickListener(v -> {
  100.             showDatePickerDialog(selectedCheckInDate);
  101.         });
  102.  
  103. // Check-Out Date Picker
  104.         checkOutDateET.setOnClickListener(v -> {
  105.             showDatePickerDialog(selectedCheckOutDate);
  106.         });
  107.  
  108.         // Load room preferences from Firebase
  109.         roomPreferencesRef.addListenerForSingleValueEvent(new ValueEventListener() {
  110.             @Override
  111.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  112.                 if (dataSnapshot.exists()) {
  113.                     roomTypeList.clear();
  114.                     for (DataSnapshot preferenceSnapshot : dataSnapshot.getChildren()) {
  115.                         String roomPreference = preferenceSnapshot.getValue(String.class);
  116.                         roomTypeList.add(roomPreference);
  117.                     }
  118.                     roomTypeAdapter.notifyDataSetChanged();
  119.                 }
  120.             }
  121.  
  122.             @Override
  123.             public void onCancelled(@NonNull DatabaseError databaseError) {
  124.                 Log.e("BookForm", "Error: " + databaseError.getMessage());
  125.             }
  126.         });
  127.  
  128.         submitButton.setOnClickListener(new View.OnClickListener() {
  129.             @Override
  130.             public void onClick(View v) {
  131.                 if (allFields()) {
  132.                     FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  133.  
  134.                     if (currentUser != null) {
  135.                         String userId = currentUser.getUid();
  136.                         String fullName = fullNameET.getText().toString();
  137.                         String checkInDate = checkInDateET.getText().toString();
  138.                         String checkOutDate = checkOutDateET.getText().toString();
  139.                         int adults = Integer.parseInt(adultsNumberPicker.getText().toString());
  140.                         int children = Integer.parseInt(childrenNumberPicker.getText().toString());
  141.                         String contactNumber = contactNumberET.getText().toString();
  142.                         String email = emailET.getText().toString();
  143.                         String roomPreference = roomPreferenceSpinner.getSelectedItem().toString();
  144.                         String yourGcashName = yourGcashNameET.getText().toString();
  145.                         String yourGcashNumber = yourGcashNumberET.getText().toString();
  146.                         String referenceNumber = referenceNumberET.getText().toString();
  147.  
  148.                         // Prevent multiple bookings for the same period
  149.                         canSubmitBooking(userId, hotelId, fullName, checkInDate, checkOutDate, adults,
  150.                                 children, contactNumber, email, roomPreference, yourGcashName, yourGcashNumber, referenceNumber);
  151.                     } else {
  152.                         Log.e("BookForm", "User is not authenticated");
  153.                     }
  154.                 } else {
  155.                     Toast.makeText(BookForm.this, "Please fill in all required fields.", Toast.LENGTH_SHORT).show();
  156.                 }
  157.             }
  158.         });
  159.  
  160.         Button attachPhotoButton = findViewById(R.id.attachPhotoButton);
  161.         attachPhotoButton.setOnClickListener(new View.OnClickListener() {
  162.             @Override
  163.             public void onClick(View v) {
  164.                 openFileChooser();
  165.             }
  166.         });
  167.     }
  168.  
  169.  
  170.     public void incrementValue(View view) {
  171.         if (adultCount < 9) {
  172.             adultCount++;
  173.             updateAdultsCount();
  174.         }
  175.     }
  176.  
  177.     public void decrementValue(View view) {
  178.         if (adultCount > 0) {
  179.             adultCount--;
  180.             updateAdultsCount();
  181.         }
  182.     }
  183.  
  184.     private void updateAdultsCount() {
  185.         adultsNumberPicker.setText(String.valueOf(adultCount));
  186.     }
  187.  
  188.     public void incrementValue2(View view) {
  189.         if (childrenCount < 9) {
  190.             childrenCount++;
  191.             updateChildrenCount();
  192.         }
  193.     }
  194.  
  195.     public void decrementValue2(View view) {
  196.         if (childrenCount > 0) {
  197.             childrenCount--;
  198.             updateChildrenCount();
  199.         }
  200.     }
  201.  
  202.     private void updateChildrenCount() {
  203.         childrenNumberPicker.setText(String.valueOf(childrenCount));
  204.     }
  205.  
  206.  
  207.     private void openFileChooser() {
  208.         Intent intent = new Intent();
  209.         intent.setType("image/*");
  210.         intent.setAction(Intent.ACTION_GET_CONTENT);
  211.         startActivityForResult(intent, PICK_IMAGE_REQUEST);
  212.     }
  213.  
  214.     @Override
  215.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  216.         super.onActivityResult(requestCode, resultCode, data);
  217.  
  218.         if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
  219.             selectedImageUri = data.getData();
  220.             attachedImageView.setImageURI(selectedImageUri);
  221.             attachedImageView.setVisibility(View.VISIBLE);
  222.         }
  223.     }
  224.  
  225.     private void showDatePickerDialog(final Calendar selectedDate) {
  226.         DatePickerDialog datePickerDialog = new DatePickerDialog(
  227.                 BookForm.this,
  228.                 (view, year, monthOfYear, dayOfMonth) -> {
  229.                     selectedDate.set(year, monthOfYear, dayOfMonth);
  230.  
  231.                     // Check if the selected date is today or in the future
  232.                     Calendar currentDate = Calendar.getInstance();
  233.                     currentDate.set(Calendar.HOUR_OF_DAY, 0);
  234.                     currentDate.set(Calendar.MINUTE, 0);
  235.                     currentDate.set(Calendar.SECOND, 0);
  236.                     currentDate.set(Calendar.MILLISECOND, 0);
  237.  
  238.                     if (!selectedDate.before(currentDate)) {
  239.                         updateDateField(selectedDate);
  240.                     } else {
  241.                         Toast.makeText(getApplicationContext(), "Please select a valid date", Toast.LENGTH_SHORT).show();
  242.                     }
  243.                 },
  244.                 selectedDate.get(Calendar.YEAR),
  245.                 selectedDate.get(Calendar.MONTH),
  246.                 selectedDate.get(Calendar.DAY_OF_MONTH)
  247.         );
  248.  
  249.         // Set the minimum date to today
  250.         datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis());
  251.  
  252.         // Optionally set the maximum date (if you want to limit to a specific future date)
  253.         // datePickerDialog.getDatePicker().setMaxDate(your_max_date_in_milliseconds);
  254.  
  255.         datePickerDialog.show();
  256.     }
  257.  
  258.     private void updateDateField(Calendar selectedDate) {
  259.         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
  260.  
  261.         // Update the corresponding EditText field
  262.         if (selectedDate.equals(selectedCheckInDate)) {
  263.             checkInDateET.setText(dateFormat.format(selectedDate.getTime()));
  264.         } else if (selectedDate.equals(selectedCheckOutDate)) {
  265.             checkOutDateET.setText(dateFormat.format(selectedDate.getTime()));
  266.         }
  267.     }
  268.  
  269.  
  270.     private boolean allFields() {
  271.         return !fullNameET.getText().toString().isEmpty() &&
  272.                 !contactNumberET.getText().toString().isEmpty() &&
  273.                 !emailET.getText().toString().isEmpty() &&
  274.                 !checkInDateET.getText().toString().isEmpty() &&
  275.                 !checkOutDateET.getText().toString().isEmpty() &&
  276.                 !roomPreferenceSpinner.getSelectedItem().toString().isEmpty() &&
  277.                 !yourGcashNameET.getText().toString().isEmpty() &&
  278.                 !yourGcashNumberET.getText().toString().isEmpty() &&
  279.                 !referenceNumberET.getText().toString().isEmpty();
  280.     }
  281.  
  282.     private void canSubmitBooking(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
  283.                                   int adults, int children, String contactNumber, String email, String roomPreference,
  284.                                   String yourGcashName, String yourGcashNumber, String referenceNumber) {
  285.  
  286.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  287.  
  288.         DatabaseReference userBookingsRef = databaseReference.child("booking_info");
  289.         userBookingsRef.orderByChild("userId").equalTo(userId).addListenerForSingleValueEvent(new ValueEventListener() {
  290.             @Override
  291.             public void onDataChange(DataSnapshot dataSnapshot) {
  292.                 boolean canSubmit = true;
  293.                 for (DataSnapshot bookingSnapshot : dataSnapshot.getChildren()) {
  294.                     String existingCheckOutDate = bookingSnapshot.child("checkOutDate").getValue(String.class);
  295.  
  296.                     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
  297.                     Date currentDate = new Date();
  298.                     Date existingCheckOut = null;
  299.  
  300.                     try {
  301.                         existingCheckOut = sdf.parse(existingCheckOutDate);
  302.                     } catch (ParseException e) {
  303.                         e.printStackTrace();
  304.                     }
  305.  
  306.                     if (existingCheckOut != null && currentDate.before(existingCheckOut)) {
  307.                         canSubmit = false;
  308.                         break;
  309.                     }
  310.                 }
  311.  
  312.                 if (canSubmit) {
  313.                     saveBooking(userId, hotelId, fullName, checkInDate, checkOutDate, adults, children, contactNumber, email, roomPreference, yourGcashName, yourGcashNumber, referenceNumber);
  314.                 } else {
  315.                     Toast.makeText(BookForm.this, "You cannot submit a new booking until your current booking has ended.", Toast.LENGTH_SHORT).show();
  316.                 }
  317.             }
  318.  
  319.             @Override
  320.             public void onCancelled(DatabaseError databaseError) {
  321.                 Log.e("BookForm", "Database error: " + databaseError.getMessage());
  322.             }
  323.         });
  324.     }
  325.  
  326.     private boolean isDateRangeOverlap(String start1, String end1, String start2, String end2) {
  327.         try {
  328.             SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
  329.             Date startDate1 = sdf.parse(start1);
  330.             Date endDate1 = sdf.parse(end1);
  331.             Date startDate2 = sdf.parse(start2);
  332.             Date endDate2 = sdf.parse(end2);
  333.  
  334.             return !(endDate1.before(startDate2) || endDate2.before(startDate1));
  335.         } catch (ParseException e) {
  336.             e.printStackTrace();
  337.             return false;
  338.         }
  339.     }
  340.  
  341.     private void saveBooking(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
  342.                              int adults, int children, String contactNumber, String email, String roomPreference,
  343.                              String yourGcashName, String yourGcashNumber, String referenceNumber) {
  344.  
  345.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  346.         DatabaseReference hotelRef = databaseReference.child("hotels").child(hotelId).child("user_id");
  347.         Log.d("BookForm", "hotelref: " + hotelRef);
  348.  
  349.         hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
  350.             @Override
  351.             public void onDataChange(@NonNull DataSnapshot hotelDataSnapshot) {
  352.                 if (hotelDataSnapshot.exists()) {
  353.                     String hotelUserId = hotelDataSnapshot.getValue(String.class);
  354.                     Log.d("BookForm", "HotelUserId: " + hotelUserId);
  355.  
  356.                     DatabaseReference bookingsRef = databaseReference.child("booking_info").push();
  357.                     String bookingId = bookingsRef.getKey();
  358.  
  359.                     bookingsRef.child("userId").setValue(userId);
  360.                     bookingsRef.child("fullName").setValue(fullName);
  361.                     bookingsRef.child("checkInDate").setValue(checkInDate);
  362.                     bookingsRef.child("checkOutDate").setValue(checkOutDate);
  363.                     bookingsRef.child("adults").setValue(adults);
  364.                     bookingsRef.child("children").setValue(children);
  365.                     bookingsRef.child("contactNumber").setValue(contactNumber);
  366.                     bookingsRef.child("email").setValue(email);
  367.                     bookingsRef.child("roomPreference").setValue(roomPreference);
  368.                     bookingsRef.child("GcashName").setValue(yourGcashName);
  369.                     bookingsRef.child("yGcashNumber").setValue(yourGcashNumber);
  370.                     bookingsRef.child("referenceNumber").setValue(referenceNumber);
  371.                     bookingsRef.child("hotelUserId").setValue(hotelUserId);
  372.  
  373.  
  374.                     if (selectedImageUri != null) {
  375.                         saveBookingWithImage(bookingsRef, userId, hotelId);
  376.                     } else {
  377.                         Log.d("BookForm", "Booking data saved successfully.");
  378.                         Toast.makeText(BookForm.this, "Booking submitted successfully.", Toast.LENGTH_SHORT).show();
  379.                     }
  380.                 }
  381.             }
  382.  
  383.             @Override
  384.             public void onCancelled(@NonNull DatabaseError hotelDatabaseError) {
  385.                 Log.e("BookForm", "Hotel database error: " + hotelDatabaseError.getMessage());
  386.             }
  387.         });
  388.  
  389.     }
  390.  
  391.     private void saveBookingWithImage(DatabaseReference bookingsRef, String userId, String hotelId) {
  392.         StorageReference storageReference = FirebaseStorage.getInstance().getReference();
  393.         StorageReference imageRef = storageReference.child("payment_receipts/" + userId + "/" + hotelId + "/image.jpg");
  394.  
  395.         imageRef.putFile(selectedImageUri)
  396.                 .addOnSuccessListener(taskSnapshot -> {
  397.                     imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
  398.                         String imageUrl = downloadUri.toString();
  399.                         bookingsRef.child("imageUrl").setValue(imageUrl);
  400.                         Log.d("BookForm", "Booking data with image URL saved successfully.");
  401.                         Toast.makeText(this, "Booking submitted successfully.", Toast.LENGTH_SHORT).show();
  402.                     });
  403.                 })
  404.                 .addOnFailureListener(e -> {
  405.                     Log.e("BookForm", "Image upload failed: " + e.getMessage());
  406.                     Toast.makeText(this, "Failed to upload image.", Toast.LENGTH_SHORT).show();
  407.                 });
  408.     }
  409. }
Tags: Android
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement