executeCall method

Future<void> executeCall(
  1. OdooRpcCall call
)

Executes rpc call

Implementation

Future<void> executeCall(OdooRpcCall call) async {
  var executedCalls = <OdooRpcCall>[];
  logger.d('call key ${call.cacheKey}');
  final params = {
    'model': call.modelName,
    'method': call.method,
    'args':
        (call.args is List && call.args.isNotEmpty) ? call.args : [call.args],
    'kwargs': call.kwargs,
  };

  /// Convert [params] to JSON and back to Map
  /// using dedicated coverter that will replace
  /// [OdooId] instance with real [id] if it is possible.
  final rawParams = json.encode(params, toEncodable: (value) {
    if (value is OdooId) {
      // replace fake id with real one
      return models[value.odooModel]!.newIdToId(value.odooId);
    }
    return value;
  });

  final res = await orpc.callKw(json.decode(rawParams));

  if (call.method == 'create') {
    // store mapping between real and fake id
    await models[call.modelName]!.setNewIdMapping(
        newId: call.recordId, realId: res is List ? res[0] : res);
  }

  logger.d(res.toString());
  executedCalls.add(call);
}