saveProperty method

Future<void> saveProperty(
  1. Map<String, dynamic> property,
  2. BuildContext context
)

Guarda un predio:

  1. Se guarda localmente.
  2. 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');
  }
}