Advertisement
kitlolz012

BookformJAVA(No Multiple Booking 2)

Oct 7th, 2023
82
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 18.92 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. import com.google.android.gms.tasks.OnFailureListener;
  31. import com.google.android.gms.tasks.OnSuccessListener;
  32.  
  33. import java.text.ParseException;
  34. import java.text.SimpleDateFormat;
  35. import java.util.ArrayList;
  36. import java.util.Calendar;
  37. import java.util.Date;
  38. import java.util.List;
  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();
  64.         String hotelId = intent.getStringExtra("hotelKey");
  65.         Log.d("BookFormActivity", "hotelId: " + hotelId);
  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);
  83.         roomTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  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()) {
  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.                         // Check booking eligibility
  146.                         checkBookingEligibility(userId, new BookingCallback() {
  147.                             @Override
  148.                             public void onBookingAllowed() {
  149.                                 // User is eligible for booking, save the booking data
  150.                                 save(userId, hotelId, fullName, checkInDate, checkOutDate,
  151.                                         adults, children, contactNumber, email, roomPreference,
  152.                                         yourGcashName, yourGcashNumber, referenceNumber);
  153.                             }
  154.  
  155.                             @Override
  156.                             public void onBookingNotAllowed() {
  157.                                 // User is not eligible for booking, show a message to the user
  158.                                 Toast.makeText(BookForm.this, "You are not eligible for a new booking at this time.", Toast.LENGTH_SHORT).show();
  159.                             }
  160.                         });
  161.                     } else {
  162.                         Log.e("BookForm", "User is not authenticated");
  163.                     }
  164.                 } else {
  165.                     Toast.makeText(BookForm.this, "Please fill in all required fields.", Toast.LENGTH_SHORT).show();
  166.                 }
  167.             }
  168.         });
  169.  
  170.         // Attach an OnClickListener to the "Attach Photo" button
  171.         Button attachPhotoButton = findViewById(R.id.attachPhotoButton);
  172.         attachPhotoButton.setOnClickListener(new View.OnClickListener() {
  173.             @Override
  174.             public void onClick(View v) {
  175.                 openFileChooser();
  176.             }
  177.         });
  178.     }
  179.  
  180.     // Open the file chooser to select an image
  181.     private void openFileChooser() {
  182.         Intent intent = new Intent();
  183.         intent.setType("image/*");
  184.         intent.setAction(Intent.ACTION_GET_CONTENT);
  185.         startActivityForResult(intent, PICK_IMAGE_REQUEST);
  186.     }
  187.  
  188.     // Handle the selected image
  189.     @Override
  190.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  191.         super.onActivityResult(requestCode, resultCode, data);
  192.  
  193.         if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
  194.             selectedImageUri = data.getData();
  195.             attachedImageView.setImageURI(selectedImageUri);
  196.             attachedImageView.setVisibility(View.VISIBLE);
  197.         }
  198.     }
  199.  
  200.     // Save booking data and the attached image to Firebase
  201.     private void save(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
  202.                       int adults, int children, String contactNumber, String email, String roomPreference,
  203.                       String yourGcashName, String yourGcashNumber, String referenceNumber) {
  204.         FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  205.  
  206.         if (currentUser != null) {
  207.             String userType = "Tourist";
  208.             String userPath = "users/" + userType + "/" + currentUser.getUid() + "/name";
  209.  
  210.             DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  211.             DatabaseReference userRef = databaseReference.child(userPath);
  212.             userRef.addListenerForSingleValueEvent(new ValueEventListener() {
  213.                 @Override
  214.                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  215.                     if (dataSnapshot.exists()) {
  216.                         String userName = dataSnapshot.getValue(String.class);
  217.  
  218.                         DatabaseReference hotelRef = databaseReference.child("hotels").child(hotelId).child("user_id");
  219.                         hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
  220.                             @Override
  221.                             public void onDataChange(@NonNull DataSnapshot hotelDataSnapshot) {
  222.                                 if (hotelDataSnapshot.exists()) {
  223.                                     String hotelUserId = hotelDataSnapshot.getValue(String.class);
  224.  
  225.                                     // Store the image in Firebase Storage (replace "dummy_path" with your actual storage path)
  226.                                     if (selectedImageUri != null) {
  227.                                         StorageReference storageReference = FirebaseStorage.getInstance().getReference();
  228.                                         // replace "dummy_path" with your actual storage path
  229.                                         StorageReference imageRef = storageReference.child("dummy_path/" + userId + "/" + hotelId + "/image.jpg");
  230.  
  231.                                         imageRef.putFile(selectedImageUri)
  232.                                                 .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
  233.                                                     @Override
  234.                                                     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
  235.                                                         Log.d("BookForm", "Image uploaded successfully");
  236.  
  237.                                                         // Continue with saving other booking data to Firebase
  238.                                                         DatabaseReference bookingsRef = databaseReference.child("booking_info").push();
  239.                                                         String bookingId = bookingsRef.getKey();
  240.  
  241.                                                         bookingsRef.child("userId").setValue(userId);
  242.                                                         bookingsRef.child("fullName").setValue(fullName);
  243.                                                         bookingsRef.child("checkInDate").setValue(checkInDate);
  244.                                                         bookingsRef.child("checkOutDate").setValue(checkOutDate);
  245.                                                         bookingsRef.child("adults").setValue(adults);
  246.                                                         bookingsRef.child("children").setValue(children);
  247.                                                         bookingsRef.child("contactNumber").setValue(contactNumber);
  248.                                                         bookingsRef.child("email").setValue(email);
  249.                                                         bookingsRef.child("roomPreference").setValue(roomPreference);
  250.                                                         bookingsRef.child("yourGcashName").setValue(yourGcashName);
  251.                                                         bookingsRef.child("yourGcashNumber").setValue(yourGcashNumber);
  252.                                                         bookingsRef.child("referenceNumber").setValue(referenceNumber);
  253.                                                         bookingsRef.child("userName").setValue(userName);
  254.                                                         bookingsRef.child("hotelUserId").setValue(hotelUserId);
  255.  
  256.                                                         Log.d("BookForm", "Booking data saved");
  257.                                                         // Display a success message to the user
  258.                                                         Toast.makeText(BookForm.this, "Booking submitted.", Toast.LENGTH_SHORT).show();
  259.                                                     }
  260.                                                 })
  261.                                                 .addOnFailureListener(new OnFailureListener() {
  262.                                                     @Override
  263.                                                     public void onFailure(@NonNull Exception e) {
  264.                                                         Log.e("BookForm", "Image upload failed: " + e.getMessage());
  265.                                                         // Handle image upload failure here
  266.                                                     }
  267.                                                 });
  268.                                     }
  269.                                 }
  270.                             }
  271.  
  272.                             @Override
  273.                             public void onCancelled(@NonNull DatabaseError hotelDatabaseError) {
  274.                                 Log.e("BookForm", "Hotel database error: " + hotelDatabaseError.getMessage());
  275.                             }
  276.                         });
  277.                     } else {
  278.                         Log.e("BookForm", "User data does not exist in the database");
  279.                     }
  280.                 }
  281.  
  282.                 @Override
  283.                 public void onCancelled(@NonNull DatabaseError databaseError) {
  284.                     Log.e("BookForm", "Database error: " + databaseError.getMessage());
  285.                 }
  286.             });
  287.         } else {
  288.             Log.e("BookForm", "User is not authenticated");
  289.         }
  290.     }
  291.  
  292.     private void showDatePickerDialog(final EditText editText) {
  293.         final Calendar calendar = Calendar.getInstance();
  294.         int year = calendar.get(Calendar.YEAR);
  295.         int month = calendar.get(Calendar.MONTH);
  296.         int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
  297.  
  298.         DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
  299.             @Override
  300.             public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
  301.                 String selectedDate = (monthOfYear + 1) + "/" + dayOfMonth + "/" + year;
  302.                 editText.setText(selectedDate);
  303.             }
  304.         }, year, month, dayOfMonth);
  305.  
  306.         datePickerDialog.show();
  307.     }
  308.  
  309.     private boolean allFields() {
  310.         return !fullNameET.getText().toString().isEmpty() &&
  311.                 !contactNumberET.getText().toString().isEmpty() &&
  312.                 !emailET.getText().toString().isEmpty() &&
  313.                 !checkInDateET.getText().toString().isEmpty() &&
  314.                 !checkOutDateET.getText().toString().isEmpty() &&
  315.                 !roomPreferenceSpinner.getSelectedItem().toString().isEmpty() &&
  316.                 !yourGcashNameET.getText().toString().isEmpty() &&
  317.                 !yourGcashNumberET.getText().toString().isEmpty() &&
  318.                 !referenceNumberET.getText().toString().isEmpty();
  319.     }
  320.  
  321.     private void checkBookingEligibility(String userId, final BookingCallback callback) {
  322.         DatabaseReference bookingHistoryRef = FirebaseDatabase.getInstance().getReference("booking_history").child(userId);
  323.  
  324.         bookingHistoryRef.orderByChild("checkoutDate").limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {
  325.             @Override
  326.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  327.                 if (dataSnapshot.exists()) {
  328.                     DataSnapshot lastBookingSnapshot = dataSnapshot.getChildren().iterator().next();
  329.                     BookForm lastBooking = lastBookingSnapshot.getValue(BookForm.class);
  330.  
  331.                     if (lastBooking != null) {
  332.                         String lastCheckoutDate = lastBooking.getCheckoutDate();
  333.  
  334.                         if (isEligibleForNewBooking(lastCheckoutDate)) {
  335.                             callback.onBookingAllowed();
  336.                         } else {
  337.                             callback.onBookingNotAllowed();
  338.                         }
  339.                     } else {
  340.                         callback.onBookingNotAllowed();
  341.                     }
  342.                 } else {
  343.                     callback.onBookingAllowed();
  344.                 }
  345.             }
  346.  
  347.             @Override
  348.             public void onCancelled(@NonNull DatabaseError databaseError) {
  349.                 callback.onBookingNotAllowed();
  350.             }
  351.         });
  352.     }
  353.  
  354.     private String getCheckoutDate() {
  355.         return null;
  356.     }
  357.  
  358.     private boolean isEligibleForNewBooking(String lastCheckoutDate) {
  359.         try {
  360.             SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
  361.             Date currentDate = new Date();
  362.             Date checkoutDate = dateFormat.parse(lastCheckoutDate);
  363.  
  364.             Calendar calendar = Calendar.getInstance();
  365.             calendar.setTime(checkoutDate);
  366.             calendar.add(Calendar.DAY_OF_YEAR, 1);
  367.             Date eligibleDate = calendar.getTime();
  368.  
  369.             if (currentDate.after(eligibleDate)) {
  370.                 return true;
  371.             } else {
  372.                 return false;
  373.             }
  374.         } catch (ParseException e) {
  375.             e.printStackTrace();
  376.             return false;
  377.         }
  378.     }
  379.  
  380.     private interface BookingCallback {
  381.         void onBookingAllowed();
  382.         void onBookingNotAllowed();
  383.     }
  384. }
  385.  
Tags: Android
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement