saveProperty method
- Map<
String, dynamic> property, - BuildContext context
Guarda un predio:
- Se guarda localmente.
- Se intenta sincronizar con la API. Si la sincronización falla, se guarda el registro como pendiente.
Implementation
Future<void> saveProperty(
Map<String, dynamic> property, BuildContext context) async {
try {
// Crear una copia del predio para manipulación local
Map<String, dynamic> localProperty = Map.from(property);
// Agregar valores por defecto para los campos obligatorios que no se envían desde el formulario
final now = DateTime.now().toIso8601String();
localProperty['created_at'] = now;
localProperty['updated_at'] = now;
localProperty['user_name'] =
''; // O algún valor por defecto, por ejemplo el nombre del usuario si lo tienes
localProperty['departamento'] = ''; // O asignar un valor si lo conoces
localProperty['municipio'] = ''; // Igual que arriba
// Eliminar campos que no se envían al API (ya que son generados en consultas)
Map<String, dynamic> apiProperty = Map.from(localProperty);
apiProperty.remove('created_at');
apiProperty.remove('updated_at');
apiProperty.remove('user_name');
apiProperty.remove('departamento');
apiProperty.remove('municipio');
// Guardar el predio localmente (método definido en tu DatabaseHelper)
await _dbHelper.insertProperty(localProperty);
print("Predio guardado localmente con éxito");
// Intentar sincronizar con la API
bool apiSuccess = await _savePropertyToApi(apiProperty);
if (!apiSuccess) {
// Si falla la sincronización, guardar el registro como pendiente
await _dbHelper.insertPendingUpdateProperty(jsonEncode(property));
print(
"El predio se guardó localmente pero no se pudo sincronizar con la API. Guardado como pendiente.");
await _sendNotification(
'Sincronización Fallida',
'El predio se guardó localmente pero no se pudo sincronizar con la API.',
);
_showMessage(context,
'Sincronización Fallida: El predio se guardó localmente pero no se pudo sincronizar con la API.');
} else {
await _sendNotification(
'Predio Guardado',
'El predio se ha guardado exitosamente en la API.',
);
_showMessage(context, 'Predio guardado exitosamente en la API');
}
} catch (e) {
print("Error al guardar el predio: $e");
await _sendNotification(
'Error',
'Ocurrió un error al guardar el predio: $e',
);
_showMessage(context, 'Error al guardar el predio: $e');
}
}