Advertisement
kitlolz012

wewe

Nov 26th, 2023
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.43 KB | None | 0 0
  1. package com.example.gypsy;
  2.  
  3. import androidx.annotation.NonNull;
  4. import androidx.appcompat.app.AlertDialog;
  5. import androidx.appcompat.app.AppCompatActivity;
  6. import androidx.appcompat.widget.AppCompatButton;
  7.  
  8. import android.app.DatePickerDialog;
  9. import android.content.ClipData;
  10. import android.content.ClipboardManager;
  11. import android.content.Context;
  12. import android.content.Intent;
  13. import android.net.Uri;
  14. import android.os.AsyncTask;
  15. import android.os.Bundle;
  16. import android.util.Log;
  17. import android.view.View;
  18. import android.widget.ArrayAdapter;
  19. import android.widget.Button;
  20. import android.widget.EditText;
  21. import android.widget.ImageView;
  22. import android.widget.NumberPicker;
  23. import android.widget.ProgressBar;
  24. import android.widget.Spinner;
  25. import android.widget.TextView;
  26. import android.widget.Toast;
  27.  
  28.  
  29. import java.text.ParseException;
  30. import java.text.SimpleDateFormat;
  31. import java.util.ArrayList;
  32. import java.util.Calendar;
  33. import java.util.Date;
  34. import java.util.HashMap;
  35. import java.util.List;
  36. import java.util.Locale;
  37. import java.util.Map;
  38.  
  39.  
  40. import com.google.android.gms.tasks.OnFailureListener;
  41. import com.google.android.gms.tasks.OnSuccessListener;
  42. import com.google.firebase.auth.FirebaseAuth;
  43. import com.google.firebase.auth.FirebaseUser;
  44. import com.google.firebase.database.DataSnapshot;
  45. import com.google.firebase.database.DatabaseError;
  46. import com.google.firebase.database.DatabaseReference;
  47. import com.google.firebase.database.FirebaseDatabase;
  48. import com.google.firebase.database.ServerValue;
  49. import com.google.firebase.database.ValueEventListener;
  50. import com.google.firebase.storage.FirebaseStorage;
  51. import com.google.firebase.storage.StorageReference;
  52. import com.google.firebase.storage.UploadTask;
  53.  
  54. import java.util.ArrayList;
  55. import java.util.Calendar;
  56. import java.util.List;
  57.  
  58. public class ReserveForm extends AppCompatActivity {
  59.  
  60. private EditText fullNameEditText;
  61. private EditText contactNumberEditText;
  62. private EditText emailEditText;
  63. private EditText reservationDateEditText;
  64. private DatabaseReference databaseReference;
  65. private EditText yourGcashNameET;
  66. private EditText yourGcashNumberET;
  67. private EditText referenceNumberET;
  68. private Button submitButton;
  69. private ImageView attachedImageView;
  70. private static final int PICK_IMAGE_REQUEST = 1;
  71. private Uri selectedImageUri;
  72. Object timestamp;
  73.  
  74. private TextView customerstv,gcashDepositNumberET, gcashDepositNameET, reservefeeET;
  75. private int customerCount = 0;
  76.  
  77. ImageView imageView;
  78. TextView textView;
  79.  
  80. @Override
  81. protected void onCreate(Bundle savedInstanceState) {
  82. super.onCreate(savedInstanceState);
  83. setContentView(R.layout.activity_reserve_form);
  84.  
  85. Intent intent = getIntent();
  86. String restoId = intent.getStringExtra("restoKey");
  87. Log.d("ReserveFormActivity", "restoId: " + restoId);
  88.  
  89. fullNameEditText = findViewById(R.id.fullNameEditText);
  90. contactNumberEditText = findViewById(R.id.contactNumberEditText);
  91. emailEditText = findViewById(R.id.emailEditText);
  92. reservationDateEditText = findViewById(R.id.reservationDateEditText);
  93. submitButton = findViewById(R.id.submitButton);
  94. yourGcashNameET = findViewById(R.id.yourGcashNameET);
  95. yourGcashNumberET = findViewById(R.id.yourGcashNumberET);
  96. referenceNumberET = findViewById(R.id.referenceNumberET);
  97. attachedImageView = findViewById(R.id.attachedImageView);
  98.  
  99. databaseReference = FirebaseDatabase.getInstance().getReference();
  100.  
  101. customerstv = findViewById(R.id.customerstv);
  102.  
  103. gcashDepositNumberET = findViewById(R.id.gcashDepositNumberET);
  104. gcashDepositNameET = findViewById(R.id.gcashDepositNameET);
  105. reservefeeET= findViewById(R.id.reservefeeET);
  106.  
  107. imageView = findViewById(R.id.copyImageView);
  108. textView = findViewById(R.id.gcashDepositNumberET);
  109.  
  110. AlertDialog alertDialog = showTermsDialog();
  111. if (alertDialog != null && alertDialog.isShowing()) {
  112. alertDialog.dismiss();
  113. }
  114.  
  115. imageView.setOnClickListener(new View.OnClickListener() {
  116. @Override
  117. public void onClick(View v) {
  118. ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
  119. ClipData clipData = ClipData.newPlainText("Copy",textView.getText().toString());
  120. clipboardManager.setPrimaryClip(clipData);
  121. Toast.makeText(ReserveForm.this, "Copied", Toast.LENGTH_SHORT).show();
  122. }
  123. });
  124.  
  125. DatabaseReference restoRef = databaseReference.child("restaurants").child(restoId);
  126. restoRef.addListenerForSingleValueEvent(new ValueEventListener() {
  127. @Override
  128. public void onDataChange(@NonNull DataSnapshot restoSnapshot) {
  129. if (restoSnapshot.exists()) {
  130. String gcashNumber = restoSnapshot.child("gcashNumber").getValue(String.class);
  131. String gcashName = restoSnapshot.child("gcashName").getValue(String.class);
  132. String reservefee = restoSnapshot.child("reservationFee").getValue(String.class);
  133.  
  134. if (gcashDepositNameET != null && gcashDepositNumberET != null) {
  135. gcashDepositNumberET.setText(gcashNumber);
  136. gcashDepositNameET.setText(gcashName);
  137. reservefeeET.setText(reservefee);
  138. } else {
  139. Log.e("BookForm", "gcashDepositNameET or gcashDepositNumberET is null");
  140. }
  141. } else {
  142. Log.e("ReserveForm", "Resto not found with ID: " + restoId);
  143. }
  144. }
  145.  
  146. @Override
  147. public void onCancelled(@NonNull DatabaseError databaseError) {
  148. Log.e("ReserveForm", "Hotel database error: " + databaseError.getMessage());
  149. }
  150. });
  151.  
  152.  
  153.  
  154. reservationDateEditText.setOnClickListener(new View.OnClickListener() {
  155. @Override
  156. public void onClick(View v) {
  157. showDatePickerDialog(reservationDateEditText);
  158. }
  159. });
  160.  
  161. submitButton.setOnClickListener(new View.OnClickListener() {
  162. @Override
  163. public void onClick(View v) {
  164. if (areAllFieldsFilled()) {
  165.  
  166. ProgressBar loadingProgressBar = findViewById(R.id.loadingProgressBar);
  167.  
  168. submitButton.setVisibility(View.GONE);
  169. loadingProgressBar.setVisibility(View.VISIBLE);
  170.  
  171. new AsyncTask<Void, Void, Void>() {
  172. @Override
  173. protected Void doInBackground(Void... params) {
  174. try {
  175. Thread.sleep(2000);
  176. } catch (InterruptedException e) {
  177. e.printStackTrace();
  178. }
  179. return null;
  180. }
  181.  
  182. @Override
  183. protected void onPostExecute(Void result) {
  184. loadingProgressBar.setVisibility(View.GONE);
  185. submitButton.setVisibility(View.VISIBLE);
  186.  
  187. finish();
  188. }
  189. }.execute();
  190.  
  191. FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  192. if (currentUser != null) {
  193. String enteredEmail = emailEditText.getText().toString();
  194. String registeredEmail = currentUser.getEmail();
  195.  
  196. if (enteredEmail.equals(registeredEmail)) {
  197. // Email is correct, continue with the submission
  198.  
  199. String userId = currentUser.getUid();
  200. String fullName = fullNameEditText.getText().toString();
  201. String contactNumber = contactNumberEditText.getText().toString();
  202. String reservationDate = reservationDateEditText.getText().toString();
  203. int customers = Integer.parseInt(customerstv.getText().toString());
  204. String email = emailEditText.getText().toString();
  205. String yourGcashName = yourGcashNameET.getText().toString();
  206. String yourGcashNumber = yourGcashNumberET.getText().toString();
  207. String referenceNumber = referenceNumberET.getText().toString();
  208.  
  209. canSubmitBooking(userId, restoId, fullName, reservationDate, contactNumber, email, customers,
  210. yourGcashName, yourGcashNumber, referenceNumber);
  211.  
  212.  
  213. } else {
  214. Toast.makeText(ReserveForm.this, "Please enter the email associated with your account.", Toast.LENGTH_SHORT).show();
  215. }
  216. } else {
  217. Log.e("ReserveForm", "User is not authenticated");
  218. }
  219. } else {
  220. Toast.makeText(ReserveForm.this, "All fields are required.", Toast.LENGTH_SHORT).show();
  221. }
  222. }
  223. });
  224. Button attachPhotoButton = findViewById(R.id.attachPhotoButton);
  225. attachPhotoButton.setOnClickListener(new View.OnClickListener() {
  226. @Override
  227. public void onClick(View v) {
  228. openFileChooser();
  229. }
  230. });
  231.  
  232. TextView termsPaymentTextView = findViewById(R.id.termsPayment);
  233. termsPaymentTextView.setOnClickListener(new View.OnClickListener() {
  234. @Override
  235. public void onClick(View view) {
  236. showTermsDialog();
  237. }
  238. });
  239. }
  240.  
  241.  
  242. public void incrementValue(View view) {
  243. if (customerCount < 9) {
  244. customerCount++;
  245. updateAdultsCount();
  246. }
  247. }
  248.  
  249. public void decrementValue(View view) {
  250. if (customerCount > 0) {
  251. customerCount--;
  252. updateAdultsCount();
  253. }
  254. }
  255.  
  256.  
  257. private void updateAdultsCount() {
  258. customerstv.setText(String.valueOf(customerCount));
  259. }
  260.  
  261.  
  262. private void openFileChooser() {
  263. Intent intent = new Intent();
  264. intent.setType("image/*");
  265. intent.setAction(Intent.ACTION_GET_CONTENT);
  266. startActivityForResult(intent, PICK_IMAGE_REQUEST);
  267. }
  268.  
  269. @Override
  270. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  271. super.onActivityResult(requestCode, resultCode, data);
  272.  
  273. if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
  274. selectedImageUri = data.getData();
  275. attachedImageView.setImageURI(selectedImageUri);
  276. attachedImageView.setVisibility(View.VISIBLE);
  277. }
  278. }
  279.  
  280. private void canSubmitBooking(String userId, String restoId, String fullName, String reservationDate, String contactNumber, String email, int customers,
  281. String yourGcashName, String yourGcashNumber, String referenceNumber) {
  282.  
  283. DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  284.  
  285. DatabaseReference userreservationsRef = databaseReference.child("reservation_info");
  286. userreservationsRef.orderByChild("userId").equalTo(userId).addListenerForSingleValueEvent(new ValueEventListener() {
  287. @Override
  288. public void onDataChange(DataSnapshot dataSnapshot) {
  289. Log.d("Reservation", "Entering canSubmitBooking method");
  290.  
  291. boolean canSubmit = true;
  292. for (DataSnapshot reservationSnapshot : dataSnapshot.getChildren()) {
  293. String existingCheckOutDate = reservationSnapshot.child("reservationDate").getValue(String.class);
  294.  
  295. SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
  296. Date currentDate = new Date();
  297. Date existingCheckOut = null;
  298.  
  299. try {
  300. existingCheckOut = sdf.parse(existingCheckOutDate);
  301. } catch (ParseException e) {
  302. e.printStackTrace();
  303. }
  304.  
  305. Log.d("Reservation", "Existing Checkout Date: " + existingCheckOutDate);
  306.  
  307. if (existingCheckOut != null) {
  308. Log.d("Reservation", "Current Date: " + currentDate);
  309. Log.d("Reservation", "Existing Checkout Date: " + existingCheckOut);
  310.  
  311. if (currentDate.before(existingCheckOut)) {
  312. canSubmit = false;
  313. break;
  314. }
  315. }
  316. }
  317.  
  318. Log.d("Reservation", "canSubmit: " + canSubmit);
  319.  
  320. if (canSubmit) {
  321. saveBooking(userId, restoId, fullName, reservationDate, contactNumber, email, customers,
  322. yourGcashName, yourGcashNumber, referenceNumber,timestamp);
  323. } else {
  324. Toast.makeText(ReserveForm.this, "You cannot submit a new Reservation until your current Reservation has ended.", Toast.LENGTH_SHORT).show();
  325. }
  326. }
  327.  
  328. @Override
  329. public void onCancelled(DatabaseError databaseError) {
  330. Log.e("Reservation", "Database error: " + databaseError.getMessage());
  331. }
  332. });
  333. }
  334.  
  335.  
  336.  
  337. private void saveBooking (String userId, String restoId, String fullName,String reservationDate, String contactNumber, String email, int customers,
  338. String yourGcashName, String yourGcashNumber, String referenceNumber, Object timestamp) {
  339. FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
  340.  
  341. if (currentUser != null) {
  342. String userType = "Tourist";
  343. String userPath = "users/" + userType + "/" + currentUser.getUid() + "/name";
  344. DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  345. DatabaseReference userRef = databaseReference.child(userPath);
  346. userRef.addListenerForSingleValueEvent(new ValueEventListener() {
  347. @Override
  348. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  349. Log.d("ReserveForm", "onDataChange called");
  350. if (dataSnapshot.exists()) {
  351. String userName = dataSnapshot.getValue(String.class);
  352. Log.d("ReserveForm", "Name retrieved: " + userName);
  353.  
  354. DatabaseReference restaurantRef = databaseReference.child("restaurants").child(restoId).child("user_id");
  355. Log.d("BookForm", "hrestaurantref: " + restaurantRef);
  356. restaurantRef.addListenerForSingleValueEvent(new ValueEventListener() {
  357. @Override
  358. public void onDataChange(@NonNull DataSnapshot restaurantDataSnapshot) {
  359. if (restaurantDataSnapshot.exists()) {
  360. String restoUserId = restaurantDataSnapshot.getValue(String.class);
  361. Log.d("ReserveForm", "restoUserId: " + restoUserId);
  362.  
  363. if (selectedImageUri != null) {
  364. StorageReference storageReference = FirebaseStorage.getInstance().getReference();
  365. StorageReference imageRef = storageReference.child("payment_receipts/" + userId + "/" + restoId + "/image.jpg");
  366.  
  367. imageRef.putFile(selectedImageUri)
  368. .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
  369. @Override
  370. public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
  371. imageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
  372. @Override
  373. public void onSuccess(Uri downloadUri) {
  374. String imageUrl = downloadUri.toString();
  375.  
  376.  
  377. DatabaseReference reservationsRef = databaseReference.child("reservation_info").push();
  378. String reservationId = reservationsRef.getKey();
  379.  
  380. reservationsRef.child("isConfirmed").setValue(false);
  381. reservationsRef.child("isPending").setValue(true);
  382. reservationsRef.child("isDeclined").setValue(false);
  383.  
  384. reservationsRef.child("userId").setValue(userId);
  385. reservationsRef.child("fullName").setValue(fullName);
  386. reservationsRef.child("reservationDate").setValue(reservationDate);
  387. reservationsRef.child("contactNumber").setValue(contactNumber);
  388. reservationsRef.child("email").setValue(email);
  389. reservationsRef.child("customers").setValue(customers);
  390. reservationsRef.child("restoUserId").setValue(restoUserId);
  391.  
  392. reservationsRef.child("GcashName").setValue(yourGcashName);
  393. reservationsRef.child("yGcashNumber").setValue(yourGcashNumber);
  394. reservationsRef.child("referenceNumber").setValue(referenceNumber);
  395. reservationsRef.child("imageUrl").setValue(imageUrl);
  396.  
  397. reservationsRef.child("timestamp").setValue(ServerValue.TIMESTAMP);
  398.  
  399. Log.d("ReservationForm", "Booking data saved");
  400. Toast.makeText(ReserveForm.this, "Reservation submitted.", Toast.LENGTH_SHORT).show();
  401. }
  402. });
  403. }
  404. })
  405. .addOnFailureListener(new OnFailureListener() {
  406. @Override
  407. public void onFailure(@NonNull Exception e) {
  408. Log.e("BookForm", "Image upload failed: " + e.getMessage());
  409. }
  410. });
  411. } else {
  412. Log.e("BookForm", "Selected image URI is null");
  413. }
  414. }
  415. }
  416.  
  417. @Override
  418. public void onCancelled(@NonNull DatabaseError databaseError) {
  419. Log.e("BookForm", "Database error: " + databaseError.getMessage());
  420. }
  421. });
  422. } else {
  423. Log.e("BookForm", "User is not authenticated");
  424. }
  425. }
  426. @Override
  427. public void onCancelled(@NonNull DatabaseError databaseError) {
  428. Log.e("BookForm", "Database error: " + databaseError.getMessage());
  429. }
  430. });
  431. } else {
  432. Log.e("BookForm", "User is not authenticated");
  433. }
  434. }
  435. private void showDatePickerDialog(final EditText editText) {
  436. final Calendar calendar = Calendar.getInstance();
  437. int year = calendar.get(Calendar.YEAR);
  438. int month = calendar.get(Calendar.MONTH);
  439. int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
  440.  
  441. DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
  442. @Override
  443. public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
  444. Calendar selectedCalendar = Calendar.getInstance();
  445. selectedCalendar.set(year, monthOfYear, dayOfMonth);
  446.  
  447. if (selectedCalendar.before(calendar)) {
  448. Toast.makeText(ReserveForm.this, "Please select a future date", Toast.LENGTH_SHORT).show();
  449. } else {
  450. String selectedDate = (monthOfYear + 1) + "/" + dayOfMonth + "/" + year;
  451. editText.setText(selectedDate);
  452. }
  453. }
  454. }, year, month, dayOfMonth);
  455.  
  456. datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
  457.  
  458. datePickerDialog.show();
  459. }
  460. private boolean areAllFieldsFilled() {
  461. return !fullNameEditText.getText().toString().isEmpty() &&
  462. !contactNumberEditText.getText().toString().isEmpty() &&
  463. !emailEditText.getText().toString().isEmpty() &&
  464. !reservationDateEditText.getText().toString().isEmpty() &&
  465. !yourGcashNameET.getText().toString().isEmpty() &&
  466. !yourGcashNumberET.getText().toString().isEmpty() &&
  467. !referenceNumberET.getText().toString().isEmpty() &&
  468. selectedImageUri != null;
  469. }
  470.  
  471. public void retrieve (String restoId) {
  472. TextView depositNumberTV = findViewById(R.id.gcashDepositNumberET);
  473. TextView depositNameTV = findViewById(R.id.gcashDepositNameET);
  474.  
  475. DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
  476. DatabaseReference restoRef = databaseReference.child("restaurants").child(restoId);
  477.  
  478. restoRef.addListenerForSingleValueEvent(new ValueEventListener() {
  479. @Override
  480. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  481. Log.d("BookForm", "onDataChange called");
  482. if (dataSnapshot.exists()) {
  483. String gcashNumber = dataSnapshot.child("gcashNumber").getValue(String.class);
  484. String gcashName = dataSnapshot.child("gcashName").getValue(String.class);
  485.  
  486. depositNumberTV.setText(gcashNumber);
  487. depositNameTV.setText(gcashName);
  488.  
  489. }
  490. }
  491.  
  492. @Override
  493. public void onCancelled(@NonNull DatabaseError databaseError) {
  494. Log.e("DynamicHotel", "Failed to retrieve hotel data: " + databaseError.getMessage());
  495. }
  496. });
  497. }
  498.  
  499.  
  500.  
  501. private AlertDialog showTermsDialog() {
  502. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  503. View customView = getLayoutInflater().inflate(R.layout.dialog_payment, null);
  504. builder.setView(customView);
  505.  
  506. AlertDialog alertDialog = builder.create();
  507.  
  508. AppCompatButton understandButton = customView.findViewById(R.id.understandButton);
  509. understandButton.setOnClickListener(new View.OnClickListener() {
  510. @Override
  511. public void onClick(View v) {
  512. alertDialog.dismiss();
  513. }
  514. });
  515.  
  516. alertDialog.show();
  517.  
  518. return alertDialog;
  519. }
  520.  
  521. public void goBack(View view) {
  522. onBackPressed();
  523. }
  524. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement