Advertisement
kitlolz012

book form java code

Nov 21st, 2023
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 21.85 KB | None | 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.ClipData;
  8. import android.content.ClipboardManager;
  9. import android.content.Context;
  10. import android.content.Intent;
  11. import android.net.Uri;
  12. import android.os.AsyncTask;
  13. import android.os.Bundle;
  14. import android.util.Log;
  15. import android.view.View;
  16. import android.widget.ArrayAdapter;
  17. import android.widget.Button;
  18. import android.widget.EditText;
  19. import android.widget.ImageView;
  20. import android.widget.NumberPicker;
  21. import android.widget.ProgressBar;
  22. import android.widget.Spinner;
  23. import android.widget.TextView;
  24. import android.widget.Toast;
  25.  
  26. import com.google.firebase.auth.FirebaseAuth;
  27. import com.google.firebase.auth.FirebaseUser;
  28. import com.google.firebase.database.DataSnapshot;
  29. import com.google.firebase.database.DatabaseError;
  30. import com.google.firebase.database.DatabaseReference;
  31. import com.google.firebase.database.FirebaseDatabase;
  32. import com.google.firebase.database.ValueEventListener;
  33. import com.google.firebase.storage.FirebaseStorage;
  34. import com.google.firebase.storage.StorageReference;
  35. import com.google.firebase.storage.UploadTask;
  36.  
  37. import java.text.ParseException;
  38. import java.text.SimpleDateFormat;
  39. import java.util.ArrayList;
  40. import java.util.Calendar;
  41. import java.util.Date;
  42. import java.util.List;
  43. import java.util.Locale;
  44.  
  45. public class BookForm extends AppCompatActivity {
  46.     private Spinner roomPreferenceSpinner;
  47.     private List<String> roomTypeList = new ArrayList<>();
  48.     private EditText fullNameET;
  49.     private EditText contactNumberET;
  50.     private EditText emailET;
  51.     private EditText checkInDateET;
  52.     private EditText checkOutDateET;
  53.     private EditText yourGcashNameET;
  54.     private EditText yourGcashNumberET;
  55.     private EditText referenceNumberET;
  56.     private Button submitButton;
  57.     private ImageView attachedImageView;
  58.     private static final int PICK_IMAGE_REQUEST = 1;
  59.     private Uri selectedImageUri;
  60.  
  61.     private Calendar selectedCheckInDate = Calendar.getInstance();
  62.     private Calendar selectedCheckOutDate = Calendar.getInstance();
  63.     private TextView adultsNumberPicker;
  64.     private int adultCount = 0;
  65.     private TextView childrenNumberPicker, reservefeeET;
  66.     private int childrenCount = 0;
  67.     private TextView gcashDepositNameET;
  68.     private TextView gcashDepositNumberET;
  69.  
  70.     ImageView imageView;
  71.     TextView textView;
  72.  
  73.     @Override
  74.     protected void onCreate(Bundle savedInstanceState) {
  75.         super.onCreate(savedInstanceState);
  76.         setContentView(R.layout.activity_book_form);
  77.  
  78.         Intent intent = getIntent(); // kunin yung hotelId sa DynamicHotel para sa
  79.         String hotelId = intent.getStringExtra("hotelKey"); // personalized fields nila
  80.         Log.d("BookFormActivity", "hotelId: " + hotelId); // sa book info like roomtypes etc
  81.  
  82.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  83.         DatabaseReference roomPreferencesRef = databaseReference.child("hotels").child(hotelId).child("roomTypes");
  84.  
  85.         fullNameET = findViewById(R.id.fullNameET);
  86.         contactNumberET = findViewById(R.id.contactNumberET);
  87.         emailET = findViewById(R.id.emailET);
  88.         submitButton = findViewById(R.id.submitButton);
  89.         roomPreferenceSpinner = findViewById(R.id.roomPreferenceSpinner);
  90.         checkInDateET = findViewById(R.id.checkInDateET);
  91.         checkOutDateET = findViewById(R.id.checkOutDateET);
  92.         yourGcashNameET = findViewById(R.id.yourGcashNameET);
  93.         yourGcashNumberET = findViewById(R.id.yourGcashNumberET);
  94.         referenceNumberET = findViewById(R.id.referenceNumberET);
  95.         attachedImageView = findViewById(R.id.attachedImageView);
  96.         reservefeeET = findViewById(R.id.reservefeeET);
  97.  
  98.         imageView = findViewById(R.id.copyImageView);
  99.         textView = findViewById(R.id.gcashDepositNumberET);
  100.  
  101.         imageView.setOnClickListener(new View.OnClickListener() {
  102.             @Override
  103.             public void onClick(View v) {
  104.                 ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
  105.                 ClipData clipData = ClipData.newPlainText("Copy",textView.getText().toString());
  106.                 clipboardManager.setPrimaryClip(clipData);
  107.                 Toast.makeText(BookForm.this, "Copied", Toast.LENGTH_SHORT).show();
  108.             }
  109.         });
  110.  
  111.  
  112.  
  113.  
  114.         ArrayAdapter<String> roomTypeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, roomTypeList);
  115.         roomTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  116.  
  117.         roomPreferenceSpinner.setAdapter(roomTypeAdapter);
  118.  
  119.         adultsNumberPicker = findViewById(R.id.adultsNumberPicker);
  120.         childrenNumberPicker = findViewById(R.id.childrenNumberPicker);
  121.  
  122.  
  123.         checkInDateET.setOnClickListener(v -> {
  124.             selectedCheckInDate = Calendar.getInstance();
  125.             showDatePickerDialog(selectedCheckInDate, Calendar.getInstance());
  126.         });
  127.  
  128.         checkOutDateET.setOnClickListener(v -> {
  129.             selectedCheckOutDate = Calendar.getInstance();
  130.             showDatePickerDialog(selectedCheckOutDate, selectedCheckInDate);
  131.         });
  132.  
  133.         roomPreferencesRef.addListenerForSingleValueEvent(new ValueEventListener() {
  134.             @Override
  135.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  136.                 if (dataSnapshot.exists()) {
  137.                     roomTypeList.clear();
  138.                     for (DataSnapshot preferenceSnapshot : dataSnapshot.getChildren()) {
  139.                         String roomPreference = preferenceSnapshot.getValue(String.class);
  140.                         roomTypeList.add(roomPreference);
  141.                     }
  142.                     roomTypeAdapter.notifyDataSetChanged();
  143.                 }
  144.             }
  145.  
  146.             @Override
  147.             public void onCancelled(@NonNull DatabaseError databaseError) {
  148.                 Log.e("BookForm", "Error: " + databaseError.getMessage());
  149.             }
  150.         });
  151.  
  152.         gcashDepositNameET = findViewById(R.id.gcashDepositNameET);
  153.         gcashDepositNumberET = findViewById(R.id.gcashDepositNumberET);
  154.         reservefeeET = findViewById(R.id.reservefeeET);
  155.  
  156.  
  157.         DatabaseReference hotelRef = databaseReference.child("hotels").child(hotelId);
  158.         hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
  159.             @Override
  160.             public void onDataChange(@NonNull DataSnapshot hotelSnapshot) {
  161.                 if (hotelSnapshot.exists()) {
  162.                     String gcashNumber = hotelSnapshot.child("gcashNumber").getValue(String.class);
  163.                     String gcashName = hotelSnapshot.child("gcashName").getValue(String.class);
  164.                     String resrevefee = hotelSnapshot.child("reservationFee").getValue(String.class);
  165.  
  166.  
  167.                     if (gcashDepositNameET != null && gcashDepositNumberET != null) {
  168.                         gcashDepositNumberET.setText(gcashNumber);
  169.                         gcashDepositNameET.setText(gcashName);
  170.                         reservefeeET.setText(resrevefee);
  171.                     } else {
  172.                         Log.e("BookForm", "gcashDepositNameET or gcashDepositNumberET is null");
  173.                     }
  174.                 } else {
  175.                     Log.e("BookForm", "Hotel not found with ID: " + hotelId);
  176.                 }
  177.             }
  178.  
  179.             @Override
  180.             public void onCancelled(@NonNull DatabaseError databaseError) {
  181.                 Log.e("BookeForm", "Hotel database error: " + databaseError.getMessage());
  182.             }
  183.         });
  184.  
  185.  
  186.         submitButton.setOnClickListener(new View.OnClickListener() {
  187.             @Override
  188.             public void onClick(View v) {
  189.                 if (allFields()) {
  190.  
  191.                     // Assuming you have a reference to your loadingProgressBar
  192.                     ProgressBar loadingProgressBar = findViewById(R.id.loadingProgressBar);
  193.  
  194.                     // Show loading indicator
  195.                     submitButton.setVisibility(View.GONE);
  196.                     loadingProgressBar.setVisibility(View.VISIBLE);
  197.  
  198.                     new AsyncTask<Void, Void, Void>() {
  199.                         @Override
  200.                         protected Void doInBackground(Void... params) {
  201.                             try {
  202.                                 Thread.sleep(2000); // Simulating a 2-second delay
  203.                             } catch (InterruptedException e) {
  204.                                 e.printStackTrace();
  205.                             }
  206.                             return null;
  207.                         }
  208.  
  209.                         @Override
  210.                         protected void onPostExecute(Void result) {
  211.                             // After the form submission is complete, hide the loading indicator
  212.                             loadingProgressBar.setVisibility(View.GONE);
  213.                             submitButton.setVisibility(View.VISIBLE);
  214.  
  215.                             finish();
  216.                         }
  217.                     }.execute();
  218.  
  219.  
  220.  
  221.  
  222.  
  223.                     FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  224.  
  225.                     if (currentUser != null) {
  226.                         String userId = currentUser.getUid();
  227.                         String fullName = fullNameET.getText().toString();
  228.                         String checkInDate = checkInDateET.getText().toString();
  229.                         String checkOutDate = checkOutDateET.getText().toString();
  230.                         int adults = Integer.parseInt(adultsNumberPicker.getText().toString());
  231.                         int children = Integer.parseInt(childrenNumberPicker.getText().toString());
  232.                         String contactNumber = contactNumberET.getText().toString();
  233.                         String email = emailET.getText().toString();
  234.                         String roomPreference = roomPreferenceSpinner.getSelectedItem().toString();
  235.                         String yourGcashName = yourGcashNameET.getText().toString();
  236.                         String yourGcashNumber = yourGcashNumberET.getText().toString();
  237.                         String referenceNumber = referenceNumberET.getText().toString();
  238.  
  239.                         canSubmitBooking(userId, hotelId, fullName, checkInDate, checkOutDate, adults,
  240.                                 children, contactNumber, email, roomPreference, yourGcashName, yourGcashNumber, referenceNumber);
  241.                     } else {
  242.                         Log.e("BookForm", "User is not authenticated");
  243.                     }
  244.                 } else {
  245.                     Toast.makeText(BookForm.this, "Please fill in all required fields.", Toast.LENGTH_SHORT).show();
  246.                 }
  247.             }
  248.         });
  249.  
  250.         Button attachPhotoButton = findViewById(R.id.attachPhotoButton);
  251.         attachPhotoButton.setOnClickListener(new View.OnClickListener() {
  252.             @Override
  253.             public void onClick(View v) {
  254.                 openFileChooser();
  255.             }
  256.         });
  257.     }
  258.  
  259.  
  260.     public void incrementValue(View view) {
  261.         if (adultCount < 9) {
  262.             adultCount++;
  263.             updateAdultsCount();
  264.         }
  265.     }
  266.     public void decrementValue(View view) {
  267.         if (adultCount > 0) {
  268.             adultCount--;
  269.             updateAdultsCount();
  270.         }
  271.     }
  272.     private void updateAdultsCount() {
  273.         adultsNumberPicker.setText(String.valueOf(adultCount));
  274.     }
  275.     public void incrementValue2(View view) {
  276.         if (childrenCount < 9) {
  277.             childrenCount++;
  278.             updateChildrenCount();
  279.         }
  280.     }
  281.     public void decrementValue2(View view) {
  282.         if (childrenCount > 0) {
  283.             childrenCount--;
  284.             updateChildrenCount();
  285.         }
  286.     }
  287.     private void updateChildrenCount() {
  288.         childrenNumberPicker.setText(String.valueOf(childrenCount));
  289.     }
  290.  
  291.     private void openFileChooser() {
  292.         Intent intent = new Intent();
  293.         intent.setType("image/*");
  294.         intent.setAction(Intent.ACTION_GET_CONTENT);
  295.         startActivityForResult(intent, PICK_IMAGE_REQUEST);
  296.     }
  297.  
  298.     @Override
  299.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  300.         super.onActivityResult(requestCode, resultCode, data);
  301.  
  302.         if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
  303.             selectedImageUri = data.getData();
  304.             attachedImageView.setImageURI(selectedImageUri);
  305.             attachedImageView.setVisibility(View.VISIBLE);
  306.         }
  307.     }
  308.  
  309.  
  310.     private void showDatePickerDialog(final Calendar selectedDate, final Calendar minDate) {
  311.         DatePickerDialog datePickerDialog = new DatePickerDialog(
  312.                 BookForm.this,
  313.                 (view, year, monthOfYear, dayOfMonth) -> {
  314.                     selectedDate.set(year, monthOfYear, dayOfMonth);
  315.  
  316.                     Calendar currentDate = Calendar.getInstance();
  317.                     currentDate.set(Calendar.HOUR_OF_DAY, 0);
  318.                     currentDate.set(Calendar.MINUTE, 0);
  319.                     currentDate.set(Calendar.SECOND, 0);
  320.                     currentDate.set(Calendar.MILLISECOND, 0);
  321.  
  322.                     if (!selectedDate.before(currentDate)) {
  323.                         updateDateField(selectedDate);
  324.                     } else {
  325.                         Toast.makeText(getApplicationContext(), "Please select a valid date", Toast.LENGTH_SHORT).show();
  326.                     }
  327.                 },
  328.                 selectedDate.get(Calendar.YEAR),
  329.                 selectedDate.get(Calendar.MONTH),
  330.                 selectedDate.get(Calendar.DAY_OF_MONTH)
  331.         );
  332.  
  333.         datePickerDialog.getDatePicker().setMinDate(minDate.getTimeInMillis());
  334.  
  335.         datePickerDialog.show();
  336.     }
  337.     private void updateDateField(Calendar selectedDate) {
  338.         SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.getDefault());
  339.  
  340.         // Update the corresponding EditText field
  341.         if (selectedDate.equals(selectedCheckInDate)) {
  342.             checkInDateET.setText(dateFormat.format(selectedDate.getTime()));
  343.         } else if (selectedDate.equals(selectedCheckOutDate)) {
  344.             checkOutDateET.setText(dateFormat.format(selectedDate.getTime()));
  345.         }
  346.     }
  347.  
  348.  
  349.  
  350.     private boolean allFields() {
  351.         return !fullNameET.getText().toString().isEmpty() &&
  352.                 !contactNumberET.getText().toString().isEmpty() &&
  353.                 !emailET.getText().toString().isEmpty() &&
  354.                 !checkInDateET.getText().toString().isEmpty() &&
  355.                 !checkOutDateET.getText().toString().isEmpty() &&
  356.                 !roomPreferenceSpinner.getSelectedItem().toString().isEmpty() &&
  357.                 !yourGcashNameET.getText().toString().isEmpty() &&
  358.                 !yourGcashNumberET.getText().toString().isEmpty() &&
  359.                 !referenceNumberET.getText().toString().isEmpty();
  360.     }
  361.  
  362.     private void canSubmitBooking(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
  363.                                   int adults, int children, String contactNumber, String email, String roomPreference,
  364.                                   String yourGcashName, String yourGcashNumber, String referenceNumber) {
  365.  
  366.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  367.  
  368.         DatabaseReference userBookingsRef = databaseReference.child("booking_info");
  369.         userBookingsRef.orderByChild("userId").equalTo(userId).addListenerForSingleValueEvent(new ValueEventListener() {
  370.             @Override
  371.             public void onDataChange(DataSnapshot dataSnapshot) {
  372.                 boolean canSubmit = true;
  373.                 for (DataSnapshot bookingSnapshot : dataSnapshot.getChildren()) {
  374.                     String existingCheckOutDate = bookingSnapshot.child("checkOutDate").getValue(String.class);
  375.  
  376.                     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
  377.                     Date currentDate = new Date();
  378.                     Date existingCheckOut = null;
  379.  
  380.                     try {
  381.                         existingCheckOut = sdf.parse(existingCheckOutDate);
  382.                     } catch (ParseException e) {
  383.                         e.printStackTrace();
  384.                     }
  385.  
  386.                     if (existingCheckOut != null && currentDate.before(existingCheckOut)) {
  387.                         canSubmit = false;
  388.                         break;
  389.                     }
  390.                 }
  391.  
  392.                 if (canSubmit) {
  393.                     saveBooking(userId, hotelId, fullName, checkInDate, checkOutDate, adults, children, contactNumber, email, roomPreference, yourGcashName, yourGcashNumber, referenceNumber);
  394.                 } else {
  395.                     Toast.makeText(BookForm.this, "You cannot submit a new booking until your current booking has ended.", Toast.LENGTH_SHORT).show();
  396.                 }
  397.             }
  398.  
  399.             @Override
  400.             public void onCancelled(DatabaseError databaseError) {
  401.                 Log.e("BookForm", "Database error: " + databaseError.getMessage());
  402.             }
  403.         });
  404.     }
  405.  
  406.  
  407.  
  408.     private boolean isDateRangeOverlap(String start1, String end1, String start2, String end2) {
  409.         try {
  410.             SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
  411.             Date startDate1 = sdf.parse(start1);
  412.             Date endDate1 = sdf.parse(end1);
  413.             Date startDate2 = sdf.parse(start2);
  414.             Date endDate2 = sdf.parse(end2);
  415.  
  416.             return !(endDate1.before(startDate2) || endDate2.before(startDate1));
  417.         } catch (ParseException e) {
  418.             e.printStackTrace();
  419.             return false;
  420.         }
  421.     }
  422.  
  423.  
  424.     private void saveBooking(String userId, String hotelId, String fullName, String checkInDate, String checkOutDate,
  425.                              int adults, int children, String contactNumber, String email, String roomPreference,
  426.                              String yourGcashName, String yourGcashNumber, String referenceNumber) {
  427.  
  428.         DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  429.         DatabaseReference hotelRef = databaseReference.child("hotels").child(hotelId).child("user_id");
  430.         Log.d("BookForm", "hotelref: " + hotelRef);
  431.  
  432.         hotelRef.addListenerForSingleValueEvent(new ValueEventListener() {
  433.             @Override
  434.             public void onDataChange(@NonNull DataSnapshot hotelDataSnapshot) {
  435.                 if (hotelDataSnapshot.exists()) {
  436.                     String hotelUserId = hotelDataSnapshot.getValue(String.class);
  437.                     Log.d("BookForm", "HotelUserId: " + hotelUserId);
  438.  
  439.                     DatabaseReference bookingsRef = databaseReference.child("booking_info").push();
  440.                     String bookingId = bookingsRef.getKey();
  441.  
  442.                     bookingsRef.child("isConfirmed").setValue(false);
  443.                     bookingsRef.child("isPending").setValue(true);
  444.                     bookingsRef.child("isDeclined").setValue(false);
  445.  
  446.                     bookingsRef.child("userId").setValue(userId);
  447.                     bookingsRef.child("fullName").setValue(fullName);
  448.                     bookingsRef.child("checkInDate").setValue(checkInDate);
  449.                     bookingsRef.child("checkOutDate").setValue(checkOutDate);
  450.                     bookingsRef.child("adults").setValue(adults);
  451.                     bookingsRef.child("children").setValue(children);
  452.                     bookingsRef.child("contactNumber").setValue(contactNumber);
  453.                     bookingsRef.child("email").setValue(email);
  454.                     bookingsRef.child("roomPreference").setValue(roomPreference);
  455.                     bookingsRef.child("GcashName").setValue(yourGcashName);
  456.                     bookingsRef.child("yGcashNumber").setValue(yourGcashNumber);
  457.                     bookingsRef.child("referenceNumber").setValue(referenceNumber);
  458.                     bookingsRef.child("hotelUserId").setValue(hotelUserId);
  459.  
  460.  
  461.                     if (selectedImageUri != null) {
  462.                         saveBookingWithImage(bookingsRef, userId, hotelId);
  463.                     } else {
  464.                         Log.d("BookForm", "Booking data saved successfully.");
  465.                         Toast.makeText(BookForm.this, "Booking submitted successfully.", Toast.LENGTH_SHORT).show();
  466.                     }
  467.                 }
  468.             }
  469.  
  470.             @Override
  471.             public void onCancelled(@NonNull DatabaseError hotelDatabaseError) {
  472.                 Log.e("BookForm", "Hotel database error: " + hotelDatabaseError.getMessage());
  473.             }
  474.         });
  475.  
  476.     }
  477.  
  478.     private void saveBookingWithImage(DatabaseReference bookingsRef, String userId, String hotelId) {
  479.         StorageReference storageReference = FirebaseStorage.getInstance().getReference();
  480.         StorageReference imageRef = storageReference.child("payment_receipts/" + userId + "/" + hotelId + "/image.jpg");
  481.  
  482.         imageRef.putFile(selectedImageUri)
  483.                 .addOnSuccessListener(taskSnapshot -> {
  484.                     imageRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
  485.                         String imageUrl = downloadUri.toString();
  486.                         bookingsRef.child("imageUrl").setValue(imageUrl);
  487.                         Log.d("BookForm", "Booking data with image URL saved successfully.");
  488.                         Toast.makeText(this, "Booking submitted successfully.", Toast.LENGTH_SHORT).show();
  489.                     });
  490.                 })
  491.                 .addOnFailureListener(e -> {
  492.                     Log.e("BookForm", "Image upload failed: " + e.getMessage());
  493.                     Toast.makeText(this, "Failed to upload image.", Toast.LENGTH_SHORT).show();
  494.                 });
  495.     }
  496. }
  497.  
Tags: Code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement