Advertisement
kitlolz012

BookForm.Java(No multiple booking )

Oct 9th, 2023
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 17.62 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.Query;
  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. import com.google.android.gms.tasks.OnFailureListener;
  32. import com.google.android.gms.tasks.OnSuccessListener;
  33.  
  34. import java.util.ArrayList;
  35. import java.util.Calendar;
  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(); // kunin yung hotelId sa DynamicHotel para sa
  62.         String hotelId = intent.getStringExtra("hotelKey"); // personalized fields nila
  63.         Log.d("BookFormActivity", "hotelId: " + hotelId); // sa book info like roomtypes etc
  64.  
  65.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  66.         DatabaseReference roomPreferencesRef = databaseReference.child("hotels").child(hotelId).child("roomTypes");
  67.  
  68.         fullNameET = findViewById(R.id.fullNameET);
  69.         contactNumberET = findViewById(R.id.contactNumberET);
  70.         emailET = findViewById(R.id.emailET);
  71.         submitButton = findViewById(R.id.submitButton);
  72.         roomPreferenceSpinner = findViewById(R.id.roomPreferenceSpinner);
  73.         checkInDateET = findViewById(R.id.checkInDateET);
  74.         checkOutDateET = findViewById(R.id.checkOutDateET);
  75.         yourGcashNameET = findViewById(R.id.yourGcashNameET);
  76.         yourGcashNumberET = findViewById(R.id.yourGcashNumberET);
  77.         referenceNumberET = findViewById(R.id.referenceNumberET);
  78.         attachedImageView = findViewById(R.id.attachedImageView);
  79.  
  80.         ArrayAdapter<String> roomTypeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, roomTypeList); // list string ng mga items
  81.         roomTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  // built in layout ni AS para sa dropdown selection
  82.  
  83.         roomPreferenceSpinner.setAdapter(roomTypeAdapter);
  84.  
  85.         adultsNumberPicker = findViewById(R.id.adultsNumberPicker);
  86.         childrenNumberPicker = findViewById(R.id.childrenNumberPicker);
  87.         adultsNumberPicker.setMinValue(0);
  88.         adultsNumberPicker.setMaxValue(10);
  89.         childrenNumberPicker.setMinValue(0);
  90.         childrenNumberPicker.setMaxValue(10);
  91.  
  92.         checkInDateET.setOnClickListener(new View.OnClickListener() {
  93.             @Override
  94.             public void onClick(View v) {
  95.                 showDatePickerDialog(checkInDateET);
  96.             }
  97.         });
  98.         checkOutDateET.setOnClickListener(new View.OnClickListener() {
  99.             @Override
  100.             public void onClick(View v) {
  101.                 showDatePickerDialog(checkOutDateET);
  102.             }
  103.         });
  104.  
  105.         roomPreferencesRef.addListenerForSingleValueEvent(new ValueEventListener() {
  106.             @Override
  107.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  108.                 if (dataSnapshot.exists()) { // then loop para mag iterate sa children ng DataSnapshot
  109.                     for (DataSnapshot preferenceSnapshot : dataSnapshot.getChildren()) {
  110.                         String roomPreference = preferenceSnapshot.getValue(String.class);
  111.                         roomTypeList.add(roomPreference);
  112.                     }
  113.                     roomTypeAdapter.notifyDataSetChanged();
  114.                 }
  115.             }
  116.  
  117.             @Override
  118.             public void onCancelled(@NonNull DatabaseError databaseError) {
  119.                 Log.e("BookForm", "error" + databaseError.getMessage());
  120.             }
  121.         });
  122.  
  123.         submitButton.setOnClickListener(new View.OnClickListener() {
  124.             @Override
  125.             public void onClick(View v) {
  126.                 if (allFields()) {
  127.                     FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  128.  
  129.                     if (currentUser != null) {
  130.                         String userId = currentUser.getUid();
  131.                         String fullName = fullNameET.getText().toString();
  132.                         String checkInDate = checkInDateET.getText().toString();
  133.                         String checkOutDate = checkOutDateET.getText().toString();
  134.                         int adults = adultsNumberPicker.getValue();
  135.                         int children = childrenNumberPicker.getValue();
  136.                         String contactNumber = contactNumberET.getText().toString();
  137.                         String email = emailET.getText().toString();
  138.                         String roomPreference = roomPreferenceSpinner.getSelectedItem().toString();
  139.                         String yourGcashName = yourGcashNameET.getText().toString();
  140.                         String yourGcashNumber = yourGcashNumberET.getText().toString();
  141.                         String referenceNumber = referenceNumberET.getText().toString();
  142.  
  143.                         DatabaseReference bookingsRef = databaseReference.child("booking_info");
  144.  
  145.  
  146.  
  147.                         // Query to check for overlapping bookings
  148.                         Query overlappingQuery;
  149.                         overlappingQuery = bookingsRef.orderByChild("userId").equalTo(userId)
  150.                                 .orderByChild("checkOutDate").startAt(checkInDate).endAt(checkOutDate);
  151.  
  152.                         ((Query) overlappingQuery).addListenerForSingleValueEvent(new ValueEventListener() {
  153.                             @Override
  154.                             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  155.                                 if (dataSnapshot.exists()) {
  156.                                     // Overlapping booking(s) found
  157.                                     Toast.makeText(BookForm.this, "You have overlapping bookings.", Toast.LENGTH_SHORT).show();
  158.                                 } else {
  159.                                     // No overlapping bookings, proceed with booking creation
  160.                                     save(userId, hotelId, fullName, checkInDate, checkOutDate,
  161.                                             adults, children, contactNumber, email, roomPreference,
  162.                                             yourGcashName, yourGcashNumber, referenceNumber);
  163.                                     Toast.makeText(BookForm.this, "Booking submitted.", Toast.LENGTH_SHORT).show();
  164.                                 }
  165.                             }
  166.  
  167.                             @Override
  168.                             public void onCancelled(@NonNull DatabaseError databaseError) {
  169.                                 Log.e("BookForm", "Database error: " + databaseError.getMessage());
  170.                             }
  171.                         });
  172.                     } else {
  173.                         Log.e("BookForm", "User is not authenticated");
  174.                     }
  175.                 } else {
  176.                     Toast.makeText(BookForm.this, "Please fill in all required fields.", Toast.LENGTH_SHORT).show();
  177.                 }
  178.             }
  179.         });
  180.  
  181.  
  182.         Button attachPhotoButton = findViewById(R.id.attachPhotoButton);
  183.         attachPhotoButton.setOnClickListener(new View.OnClickListener() {
  184.             @Override
  185.             public void onClick(View v) {
  186.                 openFileChooser();
  187.             }
  188.         });
  189.     }
  190.  
  191.     private void openFileChooser() {
  192.         Intent intent = new Intent();
  193.         intent.setType("image/*");
  194.         intent.setAction(Intent.ACTION_GET_CONTENT);
  195.         startActivityForResult(intent, PICK_IMAGE_REQUEST);
  196.     }
  197.  
  198.     @Override
  199.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  200.         super.onActivityResult(requestCode, resultCode, data);
  201.  
  202.         if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
  203.             selectedImageUri = data.getData();
  204.             attachedImageView.setImageURI(selectedImageUri);
  205.             attachedImageView.setVisibility(View.VISIBLE);
  206.         }
  207.     }
  208.  
  209.     // Save booking data and the attached image to Firebase
  210.     private void save(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
  211.                       int adults, int children, String contactNumber, String email, String roomPreference,
  212.                       String yourGcashName, String yourGcashNumber, String referenceNumber) {
  213.         FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  214.  
  215.         if (currentUser != null) {
  216.             String userType = "Tourist"; // select yung user type which is tourist
  217.             //  kukunin yung name for Tourist user type
  218.             String userPath = "users/" + userType + "/" + currentUser.getUid() + "/name";
  219.  
  220.             DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  221.             DatabaseReference userRef = databaseReference.child(userPath);
  222.             userRef.addListenerForSingleValueEvent(new ValueEventListener() {
  223.                 @Override
  224.                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  225.                     if (dataSnapshot.exists()) {
  226.                         String userName = dataSnapshot.getValue(String.class);
  227.  
  228.                         DatabaseReference hotelRef = databaseReference.child("hotels").child(hotelId).child("user_id");
  229.                         hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
  230.                             @Override
  231.                             public void onDataChange(@NonNull DataSnapshot hotelDataSnapshot) {
  232.                                 if (hotelDataSnapshot.exists()) {
  233.                                     String hotelUserId = hotelDataSnapshot.getValue(String.class);
  234.  
  235.                                     if (selectedImageUri != null) {
  236.                                         StorageReference storageReference = FirebaseStorage.getInstance().getReference();
  237.                                         StorageReference imageRef = storageReference.child("payment_receipts/" + userId + "/" + hotelId + "/image.jpg");
  238.  
  239.                                         imageRef.putFile(selectedImageUri)
  240.                                                 .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
  241.                                                     @Override
  242.                                                     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
  243.                                                         imageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
  244.                                                             @Override
  245.                                                             public void onSuccess(Uri downloadUri) {
  246.                                                                 String imageUrl = downloadUri.toString();
  247.  
  248.                                                                 DatabaseReference bookingsRef = databaseReference.child("booking_info").push();
  249.                                                                 String bookingId = bookingsRef.getKey();
  250.  
  251.                                                                 bookingsRef.child("userId").setValue(userId);
  252.                                                                 bookingsRef.child("fullName").setValue(fullName);
  253.                                                                 bookingsRef.child("checkInDate").setValue(checkInDate);
  254.                                                                 bookingsRef.child("checkOutDate").setValue(checkOutDate);
  255.                                                                 bookingsRef.child("adults").setValue(adults);
  256.                                                                 bookingsRef.child("children").setValue(children);
  257.                                                                 bookingsRef.child("contactNumber").setValue(contactNumber);
  258.                                                                 bookingsRef.child("email").setValue(email);
  259.                                                                 bookingsRef.child("roomPreference").setValue(roomPreference);
  260.  
  261.                                                                 bookingsRef.child("GcashName").setValue(yourGcashName);
  262.                                                                 bookingsRef.child("yGcashNumber").setValue(yourGcashNumber);
  263.                                                                 bookingsRef.child("referenceNumber").setValue(referenceNumber);
  264.                                                                 bookingsRef.child("userName").setValue(userName);
  265.                                                                 bookingsRef.child("hotelUserId").setValue(hotelUserId);
  266.  
  267.                                                                 bookingsRef.child("imageUrl").setValue(imageUrl);
  268.  
  269.                                                                 Log.d("BookForm", "Booking data saved with image URL");
  270.                                                             }
  271.                                                         });
  272.                                                     }
  273.                                                 })
  274.                                                 .addOnFailureListener(new OnFailureListener() {
  275.                                                     @Override
  276.                                                     public void onFailure(@NonNull Exception e) {
  277.                                                         Log.e("BookForm", "Image upload failed: " + e.getMessage());
  278.                                                     }
  279.                                                 });
  280.                                     } else {
  281.                                         Log.e("BookForm", "Selected image URI is null");
  282.                                     }
  283.                                 }
  284.                             }
  285.  
  286.                             @Override
  287.                             public void onCancelled(@NonNull DatabaseError hotelDatabaseError) {
  288.                                 Log.e("BookForm", "Hotel database error: " + hotelDatabaseError.getMessage());
  289.                             }
  290.                         });
  291.                     } else {
  292.                         Log.e("BookForm", "User data does not exist in the database");
  293.                     }
  294.                 }
  295.  
  296.                 @Override
  297.                 public void onCancelled(@NonNull DatabaseError databaseError) {
  298.                     Log.e("BookForm", "Database error: " + databaseError.getMessage());
  299.                 }
  300.             });
  301.         } else {
  302.             Log.e("BookForm", "User is not authenticated");
  303.         }
  304.     }
  305.  
  306.     private void showDatePickerDialog(final EditText editText) {
  307.         final Calendar calendar = Calendar.getInstance();
  308.         int year = calendar.get(Calendar.YEAR);
  309.         int month = calendar.get(Calendar.MONTH);
  310.         int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
  311.  
  312.         DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
  313.             @Override
  314.             public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
  315.                 String selectedDate = (monthOfYear + 1) + "/" + dayOfMonth + "/" + year;
  316.                 editText.setText(selectedDate);
  317.             }
  318.         }, year, month, dayOfMonth);
  319.  
  320.         datePickerDialog.show();
  321.     }
  322.  
  323.     private boolean allFields() {
  324.         return !fullNameET.getText().toString().isEmpty() &&
  325.                 !contactNumberET.getText().toString().isEmpty() &&
  326.                 !emailET.getText().toString().isEmpty() &&
  327.                 !checkInDateET.getText().toString().isEmpty() &&
  328.                 !checkOutDateET.getText().toString().isEmpty() &&
  329.                 !roomPreferenceSpinner.getSelectedItem().toString().isEmpty() &&
  330.                 !yourGcashNameET.getText().toString().isEmpty() &&
  331.                 !yourGcashNumberET.getText().toString().isEmpty() &&
  332.                 !referenceNumberET.getText().toString().isEmpty();
  333.     }
  334. }
Tags: Android
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement