Advertisement
kitlolz012

bookform real validation

Oct 21st, 2023
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.86 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.Date;
  36. import java.util.List;
  37.  
  38. public class BookForm extends AppCompatActivity {
  39.     private Spinner roomPreferenceSpinner;
  40.     private List<String> roomTypeList = new ArrayList<>();
  41.     private EditText fullNameET;
  42.     private EditText contactNumberET;
  43.     private EditText emailET;
  44.     private EditText checkInDateET;
  45.     private EditText checkOutDateET;
  46.     private NumberPicker adultsNumberPicker;
  47.     private NumberPicker childrenNumberPicker;
  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; // To store the selected image URI
  55.  
  56.     @Override
  57.     protected void onCreate(Bundle savedInstanceState) {
  58.         super.onCreate(savedInstanceState);
  59.         setContentView(R.layout.activity_book_form);
  60.  
  61.         Intent intent = getIntent();
  62.         String hotelId = intent.getStringExtra("hotelKey");
  63.  
  64.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  65.         DatabaseReference roomPreferencesRef = databaseReference.child("hotels").child(hotelId).child("roomTypes");
  66.  
  67.         fullNameET = findViewById(R.id.fullNameET);
  68.         contactNumberET = findViewById(R.id.contactNumberET);
  69.         emailET = findViewById(R.id.emailET);
  70.         submitButton = findViewById(R.id.submitButton);
  71.         roomPreferenceSpinner = findViewById(R.id.roomPreferenceSpinner);
  72.         checkInDateET = findViewById(R.id.checkInDateET);
  73.         checkOutDateET = findViewById(R.id.checkOutDateET);
  74.         yourGcashNameET = findViewById(R.id.yourGcashNameET);
  75.         yourGcashNumberET = findViewById(R.id.yourGcashNumberET);
  76.         referenceNumberET = findViewById(R.id.referenceNumberET);
  77.         attachedImageView = findViewById(R.id.attachedImageView);
  78.  
  79.         ArrayAdapter<String> roomTypeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, roomTypeList);
  80.         roomTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  81.  
  82.         roomPreferenceSpinner.setAdapter(roomTypeAdapter);
  83.  
  84.         adultsNumberPicker = findViewById(R.id.adultsNumberPicker);
  85.         childrenNumberPicker = findViewById(R.id.childrenNumberPicker);
  86.         adultsNumberPicker.setMinValue(0);
  87.         adultsNumberPicker.setMaxValue(10);
  88.         childrenNumberPicker.setMinValue(0);
  89.         childrenNumberPicker.setMaxValue(10);
  90.  
  91.         checkInDateET.setOnClickListener(new View.OnClickListener() {
  92.             @Override
  93.             public void onClick(View v) {
  94.                 showDatePickerDialog(checkInDateET);
  95.             }
  96.         });
  97.         checkOutDateET.setOnClickListener(new View.OnClickListener() {
  98.             @Override
  99.             public void onClick(View v) {
  100.                 showDatePickerDialog(checkOutDateET);
  101.             }
  102.         });
  103.  
  104.         // Load room preferences from Firebase
  105.         roomPreferencesRef.addListenerForSingleValueEvent(new ValueEventListener() {
  106.             @Override
  107.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  108.                 if (dataSnapshot.exists()) {
  109.                     roomTypeList.clear(); // Clear the list before adding items
  110.                     for (DataSnapshot preferenceSnapshot : dataSnapshot.getChildren()) {
  111.                         String roomPreference = preferenceSnapshot.getValue(String.class);
  112.                         roomTypeList.add(roomPreference);
  113.                     }
  114.                     roomTypeAdapter.notifyDataSetChanged(); // Notify the adapter of the data change
  115.                 }
  116.             }
  117.  
  118.             @Override
  119.             public void onCancelled(@NonNull DatabaseError databaseError) {
  120.                 Log.e("BookForm", "Error: " + databaseError.getMessage());
  121.             }
  122.         });
  123.  
  124.         submitButton.setOnClickListener(new View.OnClickListener() {
  125.             @Override
  126.             public void onClick(View v) {
  127.                 if (allFields()) {
  128.                     FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  129.  
  130.                     if (currentUser != null) {
  131.                         String userId = currentUser.getUid();
  132.                         String fullName = fullNameET.getText().toString();
  133.                         String checkInDate = checkInDateET.getText().toString();
  134.                         String checkOutDate = checkOutDateET.getText().toString();
  135.                         int adults = adultsNumberPicker.getValue();
  136.                         int children = childrenNumberPicker.getValue();
  137.                         String contactNumber = contactNumberET.getText().toString();
  138.                         String email = emailET.getText().toString();
  139.                         String roomPreference = roomPreferenceSpinner.getSelectedItem().toString();
  140.                         String yourGcashName = yourGcashNameET.getText().toString();
  141.                         String yourGcashNumber = yourGcashNumberET.getText().toString();
  142.                         String referenceNumber = referenceNumberET.getText().toString();
  143.  
  144.                         // Prevent multiple bookings for the same period
  145.                         canSubmitBooking(userId, hotelId, fullName, checkInDate, checkOutDate, adults, children, contactNumber, email, roomPreference, yourGcashName, yourGcashNumber, referenceNumber);
  146.                     } else {
  147.                         Log.e("BookForm", "User is not authenticated");
  148.                     }
  149.                 } else {
  150.                     Toast.makeText(BookForm.this, "Please fill in all required fields.", Toast.LENGTH_SHORT).show();
  151.                 }
  152.             }
  153.         });
  154.  
  155.         Button attachPhotoButton = findViewById(R.id.attachPhotoButton);
  156.         attachPhotoButton.setOnClickListener(new View.OnClickListener() {
  157.             @Override
  158.             public void onClick(View v) {
  159.                 openFileChooser();
  160.             }
  161.         });
  162.     }
  163.  
  164.     private void openFileChooser() {
  165.         Intent intent = new Intent();
  166.         intent.setType("image/*");
  167.         intent.setAction(Intent.ACTION_GET_CONTENT);
  168.         startActivityForResult(intent, PICK_IMAGE_REQUEST);
  169.     }
  170.  
  171.     @Override
  172.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  173.         super.onActivityResult(requestCode, resultCode, data);
  174.  
  175.         if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
  176.             selectedImageUri = data.getData();
  177.             attachedImageView.setImageURI(selectedImageUri);
  178.             attachedImageView.setVisibility(View.VISIBLE);
  179.         }
  180.     }
  181.  
  182.     private void showDatePickerDialog(final EditText editText) {
  183.         final Calendar calendar = Calendar.getInstance();
  184.         int year = calendar.get(Calendar.YEAR);
  185.         int month = calendar.get(Calendar.MONTH);
  186.         int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
  187.  
  188.         DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
  189.             @Override
  190.             public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
  191.                 String selectedDate = (monthOfYear + 1) + "/" + dayOfMonth + "/" + year;
  192.                 editText.setText(selectedDate);
  193.             }
  194.         }, year, month, dayOfMonth);
  195.  
  196.         datePickerDialog.show();
  197.     }
  198.  
  199.     private boolean allFields() {
  200.         return !fullNameET.getText().toString().isEmpty() &&
  201.                 !contactNumberET.getText().toString().isEmpty() &&
  202.                 !emailET.getText().toString().isEmpty() &&
  203.                 !checkInDateET.getText().toString().isEmpty() &&
  204.                 !checkOutDateET.getText().toString().isEmpty() &&
  205.                 !roomPreferenceSpinner.getSelectedItem().toString().isEmpty() &&
  206.                 !yourGcashNameET.getText().toString().isEmpty() &&
  207.                 !yourGcashNumberET.getText().toString().isEmpty() &&
  208.                 !referenceNumberET.getText().toString().isEmpty();
  209.     }
  210.  
  211.     private void canSubmitBooking(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
  212.                                   int adults, int children, String contactNumber, String email, String roomPreference,
  213.                                   String yourGcashName, String yourGcashNumber, String referenceNumber) {
  214.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  215.  
  216.         DatabaseReference userBookingsRef = databaseReference.child("booking_info");
  217.         userBookingsRef.orderByChild("userId").equalTo(userId).addListenerForSingleValueEvent(new ValueEventListener() {
  218.             @Override
  219.             public void onDataChange(DataSnapshot dataSnapshot) {
  220.                 boolean canSubmit = true;
  221.                 for (DataSnapshot bookingSnapshot : dataSnapshot.getChildren()) {
  222.                     String existingCheckOutDate = bookingSnapshot.child("checkOutDate").getValue(String.class);
  223.  
  224.                     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
  225.                     Date currentDate = new Date();
  226.                     Date existingCheckOut = null;
  227.  
  228.                     try {
  229.                         existingCheckOut = sdf.parse(existingCheckOutDate);
  230.                     } catch (ParseException e) {
  231.                         e.printStackTrace();
  232.                     }
  233.  
  234.                     if (existingCheckOut != null && currentDate.before(existingCheckOut)) {
  235.                         canSubmit = false;
  236.                         break;
  237.                     }
  238.                 }
  239.  
  240.                 if (canSubmit) {
  241.                     // Save the new booking
  242.                     saveBooking(userId, hotelId, fullName, checkInDate, checkOutDate, adults, children, contactNumber, email, roomPreference, yourGcashName, yourGcashNumber, referenceNumber);
  243.                 } else {
  244.                     Toast.makeText(BookForm.this, "You cannot submit a new booking until your current booking has ended.", Toast.LENGTH_SHORT).show();
  245.                 }
  246.             }
  247.  
  248.             @Override
  249.             public void onCancelled(DatabaseError databaseError) {
  250.                 Log.e("BookForm", "Database error: " + databaseError.getMessage());
  251.             }
  252.         });
  253.     }
  254.  
  255.     private boolean isDateRangeOverlap(String start1, String end1, String start2, String end2) {
  256.         try {
  257.             SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
  258.             Date startDate1 = sdf.parse(start1);
  259.             Date endDate1 = sdf.parse(end1);
  260.             Date startDate2 = sdf.parse(start2);
  261.             Date endDate2 = sdf.parse(end2);
  262.  
  263.             return !(endDate1.before(startDate2) || endDate2.before(startDate1));
  264.         } catch (ParseException e) {
  265.             e.printStackTrace();
  266.             return false;
  267.         }
  268.     }
  269.  
  270.     private void saveBooking(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
  271.                              int adults, int children, String contactNumber, String email, String roomPreference,
  272.                              String yourGcashName, String yourGcashNumber, String referenceNumber) {
  273.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  274.  
  275.         DatabaseReference bookingsRef = databaseReference.child("booking_info").push();
  276.         String bookingId = bookingsRef.getKey();
  277.  
  278.         bookingsRef.child("userId").setValue(userId);
  279.         bookingsRef.child("fullName").setValue(fullName);
  280.         bookingsRef.child("checkInDate").setValue(checkInDate);
  281.         bookingsRef.child("checkOutDate").setValue(checkOutDate);
  282.         bookingsRef.child("adults").setValue(adults);
  283.         bookingsRef.child("children").setValue(children);
  284.         bookingsRef.child("contactNumber").setValue(contactNumber);
  285.         bookingsRef.child("email").setValue(email);
  286.         bookingsRef.child("roomPreference").setValue(roomPreference);
  287.         bookingsRef.child("GcashName").setValue(yourGcashName);
  288.         bookingsRef.child("yGcashNumber").setValue(yourGcashNumber);
  289.         bookingsRef.child("referenceNumber").setValue(referenceNumber);
  290.         // Add other booking information here
  291.  
  292.         if (selectedImageUri != null) {
  293.             saveBookingWithImage(bookingsRef, userId, hotelId);
  294.         } else {
  295.             Log.d("BookForm", "Booking data saved successfully.");
  296.             Toast.makeText(this, "Booking submitted successfully.", Toast.LENGTH_SHORT).show();
  297.         }
  298.     }
  299.  
  300.     private void saveBookingWithImage(DatabaseReference bookingsRef, String userId, String hotelId) {
  301.         StorageReference storageReference = FirebaseStorage.getInstance().getReference();
  302.         StorageReference imageRef = storageReference.child("payment_receipts/" + userId + "/" + hotelId + "/image.jpg");
  303.  
  304.         imageRef.putFile(selectedImageUri)
  305.                 .addOnSuccessListener(taskSnapshot -> {
  306.                     imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
  307.                         String imageUrl = downloadUri.toString();
  308.                         bookingsRef.child("imageUrl").setValue(imageUrl);
  309.                         Log.d("BookForm", "Booking data with image URL saved successfully.");
  310.                         Toast.makeText(this, "Booking submitted successfully.", Toast.LENGTH_SHORT).show();
  311.                     });
  312.                 })
  313.                 .addOnFailureListener(e -> {
  314.                     Log.e("BookForm", "Image upload failed: " + e.getMessage());
  315.                     Toast.makeText(this, "Failed to upload image.", Toast.LENGTH_SHORT).show();
  316.                 });
  317.     }
  318. }
  319.  
Tags: Android
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement