Tesis 1.0.0
Loading...
Searching...
No Matches
CartFragment.java
Go to the documentation of this file.
1package com.example.food_front;
2
3import android.os.Bundle;
4import android.util.Log;
5import android.view.LayoutInflater;
6import android.view.View;
7import android.view.ViewGroup;
8import android.widget.Button;
9import android.widget.TextView;
10import android.widget.Toast;
11import androidx.annotation.NonNull;
12import androidx.annotation.Nullable;
13import androidx.fragment.app.Fragment;
14import androidx.fragment.app.FragmentManager;
15import androidx.fragment.app.FragmentTransaction;
16import androidx.recyclerview.widget.LinearLayoutManager;
17import androidx.recyclerview.widget.RecyclerView;
18
19import androidx.fragment.app.FragmentManager;
20import androidx.fragment.app.FragmentTransaction;
21
22import com.android.volley.Request;
23import com.android.volley.RequestQueue;
24import com.android.volley.Response;
25import com.android.volley.VolleyError;
26import com.android.volley.toolbox.JsonObjectRequest;
27import com.android.volley.toolbox.StringRequest;
28import com.android.volley.toolbox.Volley;
29import com.example.food_front.adapters.CarritoAdapter;
30import com.example.food_front.adapters.ProductoAdapter;
31import com.example.food_front.models.Carrito;
32import com.example.food_front.models.Producto;
33import com.example.food_front.utils.SessionManager;
34
35import org.json.JSONArray;
36import org.json.JSONException;
37import org.json.JSONObject;
38
39import java.util.ArrayList;
40import java.util.HashMap;
41import java.util.List;
42import java.util.Map;
43
44public class CartFragment extends Fragment {
45
46 private RecyclerView recyclerView;
47 private CarritoAdapter adapter;
48 private List<Carrito> carritoList;
49 private int precioTotal;
50 TextView tvTotal;
51 Button btnConfirmar;
52
53 @Override
54 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
55 View view = inflater.inflate(R.layout.fragment_cart, container, false);
56 recyclerView = view.findViewById(R.id.recyclerview_carrito);
57 recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
58 tvTotal = view.findViewById(R.id.text_total_precio);
59 btnConfirmar = view.findViewById(R.id.button_confirmar_pedido);
60
61 btnConfirmar.setOnClickListener(new View.OnClickListener() {
62 @Override
63 public void onClick(View view) {
64 rediretToCheckout();
65 }
66 });
67
68 carritoList = new ArrayList<>();
69
71 @Override
72 public void onDeleteClick(Carrito carrito) {
73 borrardelCarrito(carrito.getIdCarrito());
74 Toast.makeText(getContext(), "Producto borrado del carrito", Toast.LENGTH_SHORT).show();
75 }
76
77 @Override
78 public void onAddClick(Carrito carrito) {
79 int cantidad = carrito.getCantidad() + 1;
80
81 actualizarCantidad(carrito.getIdCarrito(), cantidad);
82 Toast.makeText(getContext(), "Producto actualizado con éxito", Toast.LENGTH_SHORT).show();
83 }
84
85 @Override
86 public void onMinusClick(Carrito carrito) {
87 int cantidad = carrito.getCantidad() - 1;
88 if (cantidad == 0 ) {
89 return;
90 }
91 actualizarCantidad(carrito.getIdCarrito(), cantidad);
92 Toast.makeText(getContext(), "Producto actualizado con éxito", Toast.LENGTH_SHORT).show();
93 }
94 };
95
96 adapter = new CarritoAdapter(carritoList, carritoListener);
97
98
99
100 recyclerView.setAdapter(adapter);
101 cargarCarritos();
102
103 return view;
104 }
105
106 private void cargarCarritos() {
107 String url = "https://backmobile1.onrender.com/appCART/ver/";
108
109 SessionManager sessionManager = new SessionManager(getContext());
110 String token = sessionManager.getToken();
111 Log.d("AuthToken", "Token usado en la solicitud: " + token);
112
113 if (token != null) {
114 StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
115 new Response.Listener<String>() {
116 @Override
117 public void onResponse(String response) {
118 try {
119 // Parsear el JSON
120 JSONArray jsonArray = new JSONArray(response);
121 carritoList.clear();
122
123 for (int i = 0; i < jsonArray.length(); i++) {
124 JSONObject jsonObject = jsonArray.getJSONObject(i);
125
126 // Obtener los detalles del producto desde el JSON
127 int id_carrito = jsonObject.getInt("id");
128 String nombre_producto = jsonObject.getString("producto");
129 int cantidad = jsonObject.getInt("cantidad");
130 double precio = jsonObject.getDouble("precio");
131 String imagenUrl = jsonObject.getString("imageURL");
132
133 precioTotal += cantidad * precio;
134
135 // Crear un nuevo objeto Producto
136 Carrito carrito = new Carrito(id_carrito, nombre_producto, cantidad, precio, imagenUrl);
137 carritoList.add(carrito); // Añadir a la lista
138 }
139
140
141 if (carritoList.isEmpty()) {
142 tvTotal.setVisibility(View.GONE);
143 btnConfirmar.setEnabled(false);
144 btnConfirmar.setVisibility(View.GONE);
145 rediretToEmptyCart();
146 } else {
147 tvTotal.setVisibility(View.VISIBLE);
148 }
149
150 tvTotal.setText("Total: $" + precioTotal);
151
152
153 // Notificar al adaptador que los datos han cambiado
154 adapter.notifyDataSetChanged();
155
156 } catch (JSONException e) {
157 e.printStackTrace();
158 Log.e("CarritoFragment", "Error al parsear el JSON: " + e.getMessage());
159 }
160 }
161 }, new Response.ErrorListener() {
162 @Override
163 public void onErrorResponse(VolleyError error) {
164 Log.e("CarritoFragment", "Error en la solicitud: " + error.getMessage());
165 Toast.makeText(getContext(), "Error al cargar carritos", Toast.LENGTH_SHORT).show();
166 }
167 }) {
168 @Override
169 public Map<String, String> getHeaders() {
170 Map<String, String> headers = new HashMap<>();
171 headers.put("Authorization", "Bearer " + token); // Usa el token almacenado
172 Log.d("HeadersDebug", "Headers: " + headers); // Verificar que se envíen los headers
173 return headers;
174 }
175 };
176 // Añadir la solicitud a la cola
177 Volley.newRequestQueue(getContext()).add(stringRequest);
178 } else {
179 // Maneja el caso en que no hay token
180 Toast.makeText(getContext(), "Debes iniciar sesión para agregar productos al carrito", Toast.LENGTH_SHORT).show();
181 }
182
183
184
185
186 }
187
188 private void borrardelCarrito(int idProducto) {
189 String url = "https://backmobile1.onrender.com/appCART/eliminar/" + idProducto + "/";
190
191 SessionManager sessionManager = new SessionManager(getContext());
192 String token = sessionManager.getToken();
193 Log.d("AuthToken", "Token usado en la solicitud: " + token);
194
195 if (token != null) {
196 StringRequest stringRequest = new StringRequest(Request.Method.DELETE, url,
197 response -> {
198 // Maneja la respuesta aquí, por ejemplo, muestra un mensaje de éxito
199 Toast.makeText(getContext(), "Carrito borrado de la base de datos", Toast.LENGTH_SHORT).show();
200 cargarCarritos();
201 },
202 error -> {
203 // Maneja el error aquí
204 Log.e("CartFragment", "Error al borrar carrito: " + error.getMessage());
205 if (error.networkResponse != null) {
206 Log.e("CartFragment", "Código de respuesta: " + error.networkResponse.statusCode);
207 }
208 Toast.makeText(getContext(), "Error al borrar carrito", Toast.LENGTH_SHORT).show();
209 }) {
210 @Override
211 public Map<String, String> getHeaders() {
212 Map<String, String> headers = new HashMap<>();
213 headers.put("Authorization", "Bearer " + token); // Usa el token almacenado
214 Log.d("HeadersDebug", "Headers: " + headers); // Verificar que se envíen los headers
215 return headers;
216 }
217
218 @Override
219 protected Map<String, String> getParams() {
220 Map<String, String> params = new HashMap<>();
221 return params;
222 }
223 };
224
225 // Añadir la solicitud a la cola
226 Volley.newRequestQueue(getContext()).add(stringRequest);
227 } else {
228 // Maneja el caso en que no hay token
229 Toast.makeText(getContext(), "Debes iniciar sesión para agregar productos al carrito", Toast.LENGTH_SHORT).show();
230 }
231 }
232
233 private void actualizarCantidad(int idProducto, int cantidad) {
234 String url = "https://backmobile1.onrender.com/appCART/modificar_cantidad/" + idProducto + "/";
235
236 SessionManager sessionManager = new SessionManager(getContext());
237 String token = sessionManager.getToken();
238 Log.d("AuthToken", "Token usado en la solicitud: " + token);
239
240 // Crear el json que se enviará en el body
241 JSONObject requestBody = new JSONObject();
242 try {
243 requestBody.put("cantidad", cantidad);
244 } catch (JSONException e) {
245 e.printStackTrace();
246 return;
247 }
248
249 if (token != null) {
250 JsonObjectRequest request = new JsonObjectRequest(Request.Method.PUT, url, requestBody,
251 new Response.Listener<JSONObject>() {
252 @Override
253 public void onResponse(JSONObject response) {
254 Toast.makeText(getContext(), "update successful", Toast.LENGTH_SHORT).show();
255 cargarCarritos();
256
257 }
258 }, new Response.ErrorListener() {
259 @Override
260 public void onErrorResponse(VolleyError error) {
261 Toast.makeText(getContext(), "Update failed", Toast.LENGTH_SHORT).show();
262 }
263 }) {
264 @Override
265 public Map<String, String> getHeaders() {
266 Map<String, String> headers = new HashMap<>();
267 headers.put("Authorization", "Bearer " + token); // Usa el token almacenado
268 Log.d("HeadersDebug", "Headers: " + headers); // Verificar que se envíen los headers
269 return headers;
270 }
271
272 @Override
273 protected Map<String, String> getParams() {
274 Map<String, String> params = new HashMap<>();
275 return params;
276 }
277 };
278
279 // Añadir la solicitud a la cola
280 RequestQueue queue = Volley.newRequestQueue(requireContext());
281 queue.add(request);
282 } else {
283 // Maneja el caso en que no hay token
284 Toast.makeText(getContext(), "Debes iniciar sesión para agregar productos al carrito", Toast.LENGTH_SHORT).show();
285 }
286 } private void rediretToCheckout() {
287 FragmentManager fragmentManager = requireActivity().getSupportFragmentManager();
288 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
289 // Crear una nueva instancia de DatosEntregaFragment y pasarle el total de la compra
290 DatosEntregaFragment datosEntregaFragment = DatosEntregaFragment.newInstance(precioTotal);
291 fragmentTransaction.replace(R.id.fragment_container_view, datosEntregaFragment);
292 fragmentTransaction.addToBackStack(null);
293 fragmentTransaction.commit();
294 } private void rediretToEmptyCart() {
295 FragmentManager fragmentManager = requireActivity().getSupportFragmentManager();
296 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
297 fragmentTransaction.replace(R.id.fragment_container_view, new EmptyCartFragment());
298 fragmentTransaction.addToBackStack(null);
299 fragmentTransaction.commit();
300 }
301}
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)