Advertisement
kitlolz012

BookformJAVA(No Multiple Booking 3)

Oct 8th, 2023
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 19.24 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.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 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.  
  66.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  67.         DatabaseReference roomPreferencesRef = databaseReference.child("hotels").child(hotelId).child("roomTypes");
  68.  
  69.         fullNameET = findViewById(R.id.fullNameET);
  70.         contactNumberET = findViewById(R.id.contactNumberET);
  71.         emailET = findViewById(R.id.emailET);
  72.         submitButton = findViewById(R.id.submitButton);
  73.         roomPreferenceSpinner = findViewById(R.id.roomPreferenceSpinner);
  74.         checkInDateET = findViewById(R.id.checkInDateET);
  75.         checkOutDateET = findViewById(R.id.checkOutDateET);
  76.         yourGcashNameET = findViewById(R.id.yourGcashNameET);
  77.         yourGcashNumberET = findViewById(R.id.yourGcashNumberET);
  78.         referenceNumberET = findViewById(R.id.referenceNumberET);
  79.         attachedImageView = findViewById(R.id.attachedImageView);
  80.  
  81.         ArrayAdapter<String> roomTypeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, roomTypeList);
  82.         roomTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  83.  
  84.         roomPreferenceSpinner.setAdapter(roomTypeAdapter);
  85.  
  86.         adultsNumberPicker = findViewById(R.id.adultsNumberPicker);
  87.         childrenNumberPicker = findViewById(R.id.childrenNumberPicker);
  88.         adultsNumberPicker.setMinValue(0);
  89.         adultsNumberPicker.setMaxValue(10);
  90.         childrenNumberPicker.setMinValue(0);
  91.         childrenNumberPicker.setMaxValue(10);
  92.  
  93.         checkInDateET.setOnClickListener(new View.OnClickListener() {
  94.             @Override
  95.             public void onClick(View v) {
  96.                 showDatePickerDialog(checkInDateET);
  97.             }
  98.         });
  99.         checkOutDateET.setOnClickListener(new View.OnClickListener() {
  100.             @Override
  101.             public void onClick(View v) {
  102.                 showDatePickerDialog(checkOutDateET);
  103.             }
  104.         });
  105.  
  106.         roomPreferencesRef.addListenerForSingleValueEvent(new ValueEventListener() {
  107.             @Override
  108.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  109.                 if (dataSnapshot.exists()) {
  110.                     for (DataSnapshot preferenceSnapshot : dataSnapshot.getChildren()) {
  111.                         String roomPreference = preferenceSnapshot.getValue(String.class);
  112.                         roomTypeList.add(roomPreference);
  113.                     }
  114.                     roomTypeAdapter.notifyDataSetChanged();
  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.                         DatabaseReference bookingInfoRef = FirebaseDatabase.getInstance().getReference()
  145.                                 .child("booking_info")
  146.                                 .child(userId);
  147.  
  148.                         bookingInfoRef.addListenerForSingleValueEvent(new ValueEventListener() {
  149.                             @Override
  150.                             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  151.                                 if (dataSnapshot.exists()) {
  152.                                     String lastCheckoutDateStr = null;
  153.                                     for (DataSnapshot bookingSnapshot : dataSnapshot.getChildren()) {
  154.                                         lastCheckoutDateStr = bookingSnapshot.child("checkOutDate").getValue(String.class);
  155.                                     }
  156.  
  157.                                     if (lastCheckoutDateStr != null) {
  158.                                         SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
  159.                                         Calendar lastCheckoutDate = Calendar.getInstance();
  160.                                         try {
  161.                                             lastCheckoutDate.setTime(dateFormat.parse(lastCheckoutDateStr));
  162.                                         } catch (ParseException e) {
  163.                                             e.printStackTrace();
  164.                                             Log.e("BookForm", "Date parsing error: " + e.getMessage());
  165.                                             return;
  166.                                         }
  167.  
  168.                                         Calendar currentDate = Calendar.getInstance();
  169.                                         currentDate.add(Calendar.DAY_OF_MONTH, 1);
  170.  
  171.                                         if (lastCheckoutDate.before(currentDate)) {
  172.                                             Toast.makeText(BookForm.this, "You can only book one day after your check-out date.", Toast.LENGTH_SHORT).show();
  173.                                         } else {
  174.                                             save(userId, hotelId, fullName, checkInDate, checkOutDate,
  175.                                                     adults, children, contactNumber, email, roomPreference,
  176.                                                     yourGcashName, yourGcashNumber, referenceNumber);
  177.                                             Toast.makeText(BookForm.this, "Booking submitted.", Toast.LENGTH_SHORT).show();
  178.                                         }
  179.                                     } else {
  180.                                         save(userId, hotelId, fullName, checkInDate, checkOutDate,
  181.                                                 adults, children, contactNumber, email, roomPreference,
  182.                                                 yourGcashName, yourGcashNumber, referenceNumber);
  183.                                         Toast.makeText(BookForm.this, "Booking submitted.", Toast.LENGTH_SHORT).show();
  184.                                     }
  185.                                 } else {
  186.                                     save(userId, hotelId, fullName, checkInDate, checkOutDate,
  187.                                             adults, children, contactNumber, email, roomPreference,
  188.                                             yourGcashName, yourGcashNumber, referenceNumber);
  189.                                     Toast.makeText(BookForm.this, "Booking submitted.", Toast.LENGTH_SHORT).show();
  190.                                 }
  191.                             }
  192.  
  193.                             @Override
  194.                             public void onCancelled(@NonNull DatabaseError databaseError) {
  195.                                 Log.e("BookForm", "Database error: " + databaseError.getMessage());
  196.                             }
  197.                         });
  198.                     } else {
  199.                         Log.e("BookForm", "User is not authenticated");
  200.                     }
  201.                 } else {
  202.                     Toast.makeText(BookForm.this, "Please fill in all required fields.", Toast.LENGTH_SHORT).show();
  203.                 }
  204.             }
  205.         });
  206.  
  207.         Button attachPhotoButton = findViewById(R.id.attachPhotoButton);
  208.         attachPhotoButton.setOnClickListener(new View.OnClickListener() {
  209.             @Override
  210.             public void onClick(View v) {
  211.                 openFileChooser();
  212.             }
  213.         });
  214.     }
  215.  
  216.     private void openFileChooser() {
  217.         Intent intent = new Intent();
  218.         intent.setType("image/*");
  219.         intent.setAction(Intent.ACTION_GET_CONTENT);
  220.         startActivityForResult(intent, PICK_IMAGE_REQUEST);
  221.     }
  222.  
  223.     @Override
  224.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  225.         super.onActivityResult(requestCode, resultCode, data);
  226.  
  227.         if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
  228.             selectedImageUri = data.getData();
  229.             attachedImageView.setImageURI(selectedImageUri);
  230.             attachedImageView.setVisibility(View.VISIBLE);
  231.         }
  232.     }
  233.  
  234.     private void save(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
  235.                       int adults, int children, String contactNumber, String email, String roomPreference,
  236.                       String yourGcashName, String yourGcashNumber, String referenceNumber) {
  237.         FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  238.  
  239.         if (currentUser != null) {
  240.             String userType = "Tourist";
  241.             String userPath = "users/" + userType + "/" + currentUser.getUid() + "/name";
  242.  
  243.             DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  244.             DatabaseReference userRef = databaseReference.child(userPath);
  245.             userRef.addListenerForSingleValueEvent(new ValueEventListener() {
  246.                 @Override
  247.                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  248.                     if (dataSnapshot.exists()) {
  249.                         String userName = dataSnapshot.getValue(String.class);
  250.  
  251.                         DatabaseReference hotelRef = databaseReference.child("hotels").child(hotelId).child("user_id");
  252.                         hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
  253.                             @Override
  254.                             public void onDataChange(@NonNull DataSnapshot hotelDataSnapshot) {
  255.                                 if (hotelDataSnapshot.exists()) {
  256.                                     String hotelUserId = hotelDataSnapshot.getValue(String.class);
  257.  
  258.                                     if (selectedImageUri != null) {
  259.                                         StorageReference storageReference = FirebaseStorage.getInstance().getReference();
  260.                                         StorageReference imageRef = storageReference.child("payment_receipts/" + userId + "/" + hotelId + "/image.jpg");
  261.  
  262.                                         imageRef.putFile(selectedImageUri)
  263.                                                 .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
  264.                                                     @Override
  265.                                                     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
  266.                                                         imageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
  267.                                                             @Override
  268.                                                             public void onSuccess(Uri downloadUri) {
  269.                                                                 String imageUrl = downloadUri.toString();
  270.  
  271.                                                                 DatabaseReference bookingsRef = databaseReference.child("booking_info").push();
  272.                                                                 String bookingId = bookingsRef.getKey();
  273.  
  274.                                                                 bookingsRef.child("userId").setValue(userId);
  275.                                                                 bookingsRef.child("fullName").setValue(fullName);
  276.                                                                 bookingsRef.child("checkInDate").setValue(checkInDate);
  277.                                                                 bookingsRef.child("checkOutDate").setValue(checkOutDate);
  278.                                                                 bookingsRef.child("adults").setValue(adults);
  279.                                                                 bookingsRef.child("children").setValue(children);
  280.                                                                 bookingsRef.child("contactNumber").setValue(contactNumber);
  281.                                                                 bookingsRef.child("email").setValue(email);
  282.                                                                 bookingsRef.child("roomPreference").setValue(roomPreference);
  283.  
  284.                                                                 bookingsRef.child("GcashName").setValue(yourGcashName);
  285.                                                                 bookingsRef.child("yGcashNumber").setValue(yourGcashNumber);
  286.                                                                 bookingsRef.child("referenceNumber").setValue(referenceNumber);
  287.                                                                 bookingsRef.child("userName").setValue(userName);
  288.                                                                 bookingsRef.child("hotelUserId").setValue(hotelUserId);
  289.  
  290.                                                                 bookingsRef.child("imageUrl").setValue(imageUrl);
  291.  
  292.                                                                 Log.d("BookForm", "Booking data saved with image URL");
  293.                                                             }
  294.                                                         });
  295.                                                     }
  296.                                                 })
  297.                                                 .addOnFailureListener(new OnFailureListener() {
  298.                                                     @Override
  299.                                                     public void onFailure(@NonNull Exception e) {
  300.                                                         Log.e("BookForm", "Image upload failed: " + e.getMessage());
  301.                                                     }
  302.                                                 });
  303.                                     } else {
  304.                                         Log.e("BookForm", "Selected image URI is null");
  305.                                     }
  306.                                 }
  307.                             }
  308.  
  309.                             @Override
  310.                             public void onCancelled(@NonNull DatabaseError hotelDatabaseError) {
  311.                                 Log.e("BookForm", "Hotel database error: " + hotelDatabaseError.getMessage());
  312.                             }
  313.                         });
  314.                     } else {
  315.                         Log.e("BookForm", "User data does not exist in the database");
  316.                     }
  317.                 }
  318.  
  319.                 @Override
  320.                 public void onCancelled(@NonNull DatabaseError databaseError) {
  321.                     Log.e("BookForm", "Database error: " + databaseError.getMessage());
  322.                 }
  323.             });
  324.         } else {
  325.             Log.e("BookForm", "User is not authenticated");
  326.         }
  327.     }
  328.  
  329.     private void showDatePickerDialog(final EditText editText) {
  330.         final Calendar calendar = Calendar.getInstance();
  331.         int year = calendar.get(Calendar.YEAR);
  332.         int month = calendar.get(Calendar.MONTH);
  333.         int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
  334.  
  335.         DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
  336.             @Override
  337.             public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
  338.                 String selectedDate = (monthOfYear + 1) + "/" + dayOfMonth + "/" + year;
  339.                 editText.setText(selectedDate);
  340.             }
  341.         }, year, month, dayOfMonth);
  342.  
  343.         datePickerDialog.show();
  344.     }
  345.  
  346.     private boolean allFields() {
  347.         return !fullNameET.getText().toString().isEmpty() &&
  348.                 !contactNumberET.getText().toString().isEmpty() &&
  349.                 !emailET.getText().toString().isEmpty() &&
  350.                 !checkInDateET.getText().toString().isEmpty() &&
  351.                 !checkOutDateET.getText().toString().isEmpty() &&
  352.                 !roomPreferenceSpinner.getSelectedItem().toString().isEmpty() &&
  353.                 !yourGcashNameET.getText().toString().isEmpty() &&
  354.                 !yourGcashNumberET.getText().toString().isEmpty() &&
  355.                 !referenceNumberET.getText().toString().isEmpty();
  356.     }
  357. }
  358.  
Tags: Android
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement