Tesis 1.0.0
Loading...
Searching...
No Matches
SuccessFragment.java
Go to the documentation of this file.
1package com.example.food_front;
2
3import android.os.Bundle;
4
5import androidx.fragment.app.Fragment;
6import androidx.fragment.app.FragmentManager;
7import androidx.fragment.app.FragmentTransaction;
8
9import android.util.Log;
10import android.view.LayoutInflater;
11import android.view.View;
12import android.view.ViewGroup;
13import android.widget.Button;
14import android.widget.FrameLayout;
15import android.widget.TextView;
16import android.widget.Toast;
17
18import com.example.food_front.utils.DashboardHelper;
19import com.example.food_front.utils.SessionManager;
20
21
22public class SuccessFragment extends Fragment {
23
24 private static final String TAG = "SuccessFragment";
25 private TextView textMessage;
26 private String paymentRequestId;
27 private String paymentMethod;
28
29 public SuccessFragment() {
30 // Required empty public constructor
31 }
32
39 public static SuccessFragment newInstance(String paymentRequestId, String paymentMethod) {
40 SuccessFragment fragment = new SuccessFragment();
41 Bundle args = new Bundle();
42 args.putString("payment_request_id", paymentRequestId);
43 args.putString("payment_method", paymentMethod);
44 fragment.setArguments(args);
45 return fragment;
46 }
47
48 @Override
49 public void onCreate(Bundle savedInstanceState) {
50 super.onCreate(savedInstanceState);
51 if (getArguments() != null) {
52 paymentRequestId = getArguments().getString("payment_request_id");
53 paymentMethod = getArguments().getString("payment_method");
54 }
55 }
56
57 @Override
58 public View onCreateView(LayoutInflater inflater, ViewGroup container,
59 Bundle savedInstanceState) {
60 // Inflate the layout for this fragment
61 View view = inflater.inflate(R.layout.fragment_success, container, false);
62
63 // Inicializar vistas
64 textMessage = view.findViewById(R.id.textView);
65 Button button = view.findViewById(R.id.button);
66
67 // Mini-ticket visual
68 ViewGroup ticketLayout = new android.widget.LinearLayout(requireContext());
69 ((android.widget.LinearLayout) ticketLayout).setOrientation(android.widget.LinearLayout.VERTICAL);
70 ticketLayout.setPadding(32, 32, 32, 32);
71 ticketLayout.setBackgroundResource(android.R.color.white);
72 ticketLayout.setElevation(8f);
73 ticketLayout.setClickable(true);
74 ticketLayout.setFocusable(true);
75 ticketLayout.setForeground(requireContext().getDrawable(android.R.drawable.list_selector_background));
76 android.widget.TextView tvTitulo = new android.widget.TextView(requireContext());
77 tvTitulo.setText("Ticket de compra");
78 tvTitulo.setTextSize(18);
79 tvTitulo.setTextColor(android.graphics.Color.BLACK);
80 tvTitulo.setTypeface(null, android.graphics.Typeface.BOLD);
81 ticketLayout.addView(tvTitulo);
82 // Fecha
83 String fecha = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm").format(new java.util.Date());
84 android.widget.TextView tvFecha = new android.widget.TextView(requireContext());
85 tvFecha.setText("Fecha: " + fecha);
86 tvFecha.setTextColor(android.graphics.Color.DKGRAY);
87 ticketLayout.addView(tvFecha);
88 // Número de pedido simulado
89 int nroPedido = (int) (Math.random() * 90000 + 10000);
90 android.widget.TextView tvNro = new android.widget.TextView(requireContext());
91 tvNro.setText("N° Pedido: " + nroPedido);
92 tvNro.setTextColor(android.graphics.Color.DKGRAY);
93 ticketLayout.addView(tvNro);
94 // Método de pago
95 android.widget.TextView tvPago = new android.widget.TextView(requireContext());
96 String metodo;
97 if (paymentMethod != null) {
98 String paymentMethodLower = paymentMethod.toLowerCase();
99 if (paymentMethodLower.contains("mercado") || paymentMethodLower.equals("mercadopago")) {
100 metodo = "Mercado Pago";
101 } else if (paymentMethodLower.contains("paypal") || paymentMethodLower.equals("pay pal")) {
102 metodo = "PayPal";
103 } else if (paymentMethodLower.contains("credit") || paymentMethodLower.contains("tarjeta") ||
104 paymentMethodLower.contains("card")) {
105 metodo = "Tarjeta de crédito";
106 } else {
107 metodo = paymentMethod; // Usar el valor original si no coincide con ninguno de los casos anteriores
108 }
109 } else {
110 metodo = "Efectivo"; // Valor por defecto si no se especifica método de pago
111 }
112 tvPago.setText("Pago: " + metodo);
113 tvPago.setTextColor(android.graphics.Color.DKGRAY);
114 ticketLayout.addView(tvPago);
115 // Total (simulado, ya que no hay acceso directo al monto)
116 android.widget.TextView tvTotal = new android.widget.TextView(requireContext());
117 String totalSimulado = String.valueOf((int)(Math.random()*2000+2000));
118 tvTotal.setText("Total: $ " + totalSimulado);
119 tvTotal.setTextColor(android.graphics.Color.DKGRAY);
120 ticketLayout.addView(tvTotal);
121 // Separador visual
122 android.view.View sep = new android.view.View(requireContext());
123 sep.setBackgroundColor(android.graphics.Color.LTGRAY);
124 sep.setLayoutParams(new android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.MATCH_PARENT, 2));
125 ticketLayout.addView(sep);
126 // Mensaje de éxito
127 android.widget.TextView tvGracias = new android.widget.TextView(requireContext());
128 tvGracias.setText("¡Gracias por tu compra!");
129 tvGracias.setTextColor(android.graphics.Color.parseColor("#388E3C"));
130 tvGracias.setTextSize(16);
131 tvGracias.setPadding(0, 16, 0, 0);
132 ticketLayout.addView(tvGracias);
133 // Agregar el ticket al contenedor del layout XML
134 FrameLayout ticketContainer = view.findViewById(R.id.ticket_container);
135 ticketContainer.removeAllViews();
136 ticketContainer.addView(ticketLayout);
137 // Personalizar mensaje según el método de pago
138 if (paymentMethod != null && paymentMethod.equalsIgnoreCase("mercadopago")) {
139 textMessage.setText("¡Compra Finalizada con Éxito!\n\nTu pago con MercadoPago ha sido procesado correctamente.");
140 } else {
141 textMessage.setText("¡Compra Finalizada con Éxito!");
142 }
143 // Limpiar carrito en memoria (opcional)
144 SessionManager sessionManager = new SessionManager(requireContext());
145 button.setOnClickListener(new View.OnClickListener() {
146 @Override
147 public void onClick(View v) {
148 try {
149 // Llamar a MainActivity para limpiar la pila y mostrar HomeFragment correctamente
150 if (getActivity() instanceof com.example.food_front.MainActivity) {
151 ((com.example.food_front.MainActivity) getActivity()).mostrarHomeLimpiandoBackStack();
152 } else {
153 // Fallback por si acaso
154 FragmentManager fragmentManager = requireActivity().getSupportFragmentManager();
155 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
156 fragmentTransaction.replace(R.id.fragment_container_view, new HomeFragment());
157 fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
158 fragmentTransaction.commit();
159 }
160 } catch (Exception e) {
161 Log.e(TAG, "Error al navegar al HomeFragment: " + e.getMessage());
162 Toast.makeText(requireContext(), "Error al volver a inicio. Intente nuevamente.", Toast.LENGTH_SHORT).show();
163 }
164 }
165 });
166 // Obtener productos reales del último pedido
167 String token = sessionManager.getToken();
169 @Override
170 public void onSuccess(org.json.JSONArray pedidos) {
171 if (pedidos.length() > 0) {
172 try {
173 org.json.JSONObject ultimoPedido = pedidos.getJSONObject(0); // El más reciente
174 StringBuilder productosBuilder = new StringBuilder();
175 if (ultimoPedido.has("detalles")) {
176 org.json.JSONArray detalles = ultimoPedido.getJSONArray("detalles");
177 for (int i = 0; i < detalles.length(); i++) {
178 org.json.JSONObject detalle = detalles.getJSONObject(i);
179 String nombre = detalle.optString("nombre_producto", "Producto");
180 int cantidad = detalle.optInt("cantidad_productos", 1);
181 productosBuilder.append("- ").append(nombre).append(" x").append(cantidad).append("\n");
182 }
183 }
184 String productos = productosBuilder.toString().trim();
185 // Hacer el ticket ampliable al click con productos reales
186 ticketLayout.setOnClickListener(new View.OnClickListener() {
187 @Override
188 public void onClick(View v) {
189 TicketDetailDialogFragment dialog = TicketDetailDialogFragment.newInstance(
190 fecha,
191 String.valueOf(nroPedido),
192 metodo,
193 totalSimulado,
194 productos
195 );
196 dialog.show(getParentFragmentManager(), "TicketDetailDialog");
197 }
198 });
199 } catch (Exception e) {
200 // Fallback a productos hardcodeados si hay error
201 setTicketClickDefault(ticketLayout, fecha, nroPedido, metodo, totalSimulado);
202 }
203 } else {
204 // Fallback a productos hardcodeados si no hay pedidos
205 setTicketClickDefault(ticketLayout, fecha, nroPedido, metodo, totalSimulado);
206 }
207 }
208 @Override
209 public void onError(String error) {
210 // Fallback a productos hardcodeados si hay error
211 setTicketClickDefault(ticketLayout, fecha, nroPedido, metodo, totalSimulado);
212 }
213 });
214 return view;
215 }
216
217 private void setTicketClickDefault(View ticketLayout, String fecha, int nroPedido, String metodo, String totalSimulado) {
218 String productos = "- Hamburguesa x2\n- Papas Fritas x1\n- Bebida x1";
219 ticketLayout.setOnClickListener(new View.OnClickListener() {
220 @Override
221 public void onClick(View v) {
222 TicketDetailDialogFragment dialog = TicketDetailDialogFragment.newInstance(
223 fecha,
224 String.valueOf(nroPedido),
225 metodo,
226 totalSimulado,
227 productos
228 );
229 dialog.show(getParentFragmentManager(), "TicketDetailDialog");
230 }
231 });
232 }
233}
void onCreate(Bundle savedInstanceState)
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
static SuccessFragment newInstance(String paymentRequestId, String paymentMethod)
static void getUltimoPedido(Context context, String token, DashboardCallback callback)