/**
* Odoo, Open Source Management Solution
* Copyright (C) 2012-today Odoo SA (<http:www.odoo.com>)
* <p/>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version
* <p/>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details
* <p/>
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http:www.gnu.org/licenses/>
* <p/>
* Created on 7/1/15 6:23 PM
*/
package com.odoo.core.orm;
import android.content.Context;
import com.odoo.App;
import com.odoo.core.service.OSyncAdapter;
import com.odoo.core.support.OUser;
import com.odoo.core.support.OdooFields;
import com.odoo.core.utils.OdooRecordUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import odoo.Odoo;
import odoo.helper.OArguments;
import odoo.helper.ODomain;
import odoo.helper.ORecordValues;
import odoo.helper.utils.gson.OdooRecord;
import odoo.helper.utils.gson.OdooResult;
public class ServerDataHelper {
public static final String TAG = ServerDataHelper.class.getSimpleName();
private OModel mModel;
private Context mContext;
private Odoo mOdoo;
private App mApp;
public ServerDataHelper(Context context, OModel model, OUser user) {
mContext = context;
mModel = model;
mApp = (App) mContext.getApplicationContext();
mOdoo = mApp.getOdoo(user);
if (mOdoo == null)
mOdoo = OSyncAdapter.createOdooInstance(mContext, model.getUser());
}
public List<ODataRow> nameSearch(String name, ODomain domain, int limit) {
List<ODataRow> items = new ArrayList<>();
if (mApp.inNetwork()) {
OdooResult result = mOdoo.nameSearch(mModel.getModelName(), name, domain, limit);
if (!result.getRecords().isEmpty()) {
for (OdooRecord record : result.getRecords()) {
// FIXME : What response i'll get. I DON'T KNOW YET
/*ODataRow row = new ODataRow();
row.put("id", record.getInt("id"));
row.put(mModel.getDefaultNameColumn(), record.getString("name"));
items.add(row); */
}
}
}
return items;
}
public OdooResult read(odoo.helper.OdooFields fields, int id) {
if (mApp.inNetwork()) {
return mOdoo.read(mModel.getModelName(), id, fields);
}
return null;
}
public List<ODataRow> searchRecords(OdooFields fields, ODomain domain, int limit) {
List<ODataRow> items = new ArrayList<>();
if (mApp.inNetwork()) {
OdooResult result = mOdoo.searchRead(mModel.getModelName(), fields, domain, 0, limit, null);
if (result != null && !result.getRecords().isEmpty()) {
for (OdooRecord record : result.getRecords()) {
items.add(OdooRecordUtils.toDataRow(record));
}
}
}
return items;
}
public Odoo getOdoo() {
return mOdoo;
}
public OdooResult executeWorkFlow(int server_id, String signal) {
return mOdoo.executeWorkFlow(mModel.getModelName(), server_id, signal);
}
public Object callMethod(String method, OArguments args) {
return callMethod(method, args, null, null);
}
public Object callMethod(String method, OArguments args, HashMap<String, Object> context) {
return callMethod(mModel.getModelName(), method, args, context, null);
}
public Object callMethod(String method, OArguments args,
HashMap<String, Object> context, HashMap<String, Object> kwargs) {
return callMethod(mModel.getModelName(), method, args, context, kwargs);
}
public Object callMethod(String model, String method, OArguments args,
HashMap<String, Object> context, HashMap<String, Object> kwargs) {
if (context != null) {
args.add(mOdoo.updateContext(context));
}
OdooResult result = mOdoo.callMethod(model, method, args, kwargs, context);
if (result.has("result")) {
return result.get("result");
}
return false;
}
public int createOnServer(ORecordValues data) {
OdooResult result = mOdoo.createRecord(mModel.getModelName(), data);
return result.getInt("result");
}
public int updateOnServer(ORecordValues data, Integer id) {
mOdoo.updateRecord(mModel.getModelName(), data, id);
return mModel.selectRowId(id);
}
}