package com.odoo.orm; import java.util.ArrayList; import java.util.List; import odoo.OArguments; import odoo.ODomain; import odoo.Odoo; import odoo.OdooAccountExpireException; import odoo.OdooInstance; import odoo.OdooVersion; import org.json.JSONArray; import org.json.JSONObject; import android.content.Context; import android.util.Log; import com.odoo.App; import com.odoo.support.OUser; public class OdooHelper { public static final String TAG = OdooHelper.class.getSimpleName(); public static final String ODOO_SERVER_URL = "https://www.odoo.com"; Context mContext = null; Boolean mForceConnect = false; Odoo mOdoo = null; App mApp = null; public OdooHelper(Context context) { mContext = context; mApp = (App) context.getApplicationContext(); } public OdooHelper(Context context, Boolean forceConnect) { mContext = context; mForceConnect = forceConnect; mApp = (App) context.getApplicationContext(); } public OUser login(String username, String password, String database, String serverURL) { Log.d(TAG, "OHelper->login()"); OUser userObj = null; try { mOdoo = new Odoo(mContext, serverURL, mForceConnect); JSONObject response = mOdoo.authenticate(username, password, database); int userId = 0; if (response.get("uid") instanceof Integer) { mApp.setOdooInstance(mOdoo); userId = response.getInt("uid"); ODomain domain = new ODomain(); domain.add("id", "=", userId); userObj = getUserDetail(domain, database, username, password, serverURL, userId, mForceConnect, null); } } catch (Exception e) { e.printStackTrace(); } return userObj; } public OUser instance_login(OdooInstance instance, String username, String password) throws OdooAccountExpireException { Log.d(TAG, "OHelper->instance_login()"); OUser userObj = null; try { mOdoo = mApp.getOdoo(); String odooServer = mOdoo.getServerURL(); String odooDB = mOdoo.getDatabaseName(); JSONObject response = mOdoo.oauth_authenticate(instance, username, password); int userId = 0; if (response.get("uid") instanceof Integer) { mApp.setOdooInstance(mOdoo); userId = response.getInt("uid"); ODomain domain = new ODomain(); domain.add("id", "=", userId); userObj = getUserDetail(domain, odooDB, username, password, odooServer, userId, false, instance); } } catch (OdooAccountExpireException e) { throw new OdooAccountExpireException(e.getMessage()); } catch (Exception e) { e.printStackTrace(); } return userObj; } private OUser getUserDetail(ODomain domain, String database, String username, String password, String url, int userId, boolean mForceConnect, OdooInstance instance) throws OdooAccountExpireException { OUser userObj = null; try { OFieldsHelper fields = new OFieldsHelper(new String[] { "name", "partner_id", "tz", "image", "company_id" }); JSONObject res = mOdoo .search_read("res.users", fields.get(), domain.get()) .getJSONArray("records").getJSONObject(0); userObj = new OUser(); userObj.setAvatar(res.getString("image")); userObj.setName(res.getString("name")); userObj.setDatabase(database); userObj.setHost(url); userObj.setIsactive(true); userObj.setAndroidName(generateOdooName(username, (instance != null) ? instance.getDatabaseName() : database)); userObj.setPartner_id(res.getJSONArray("partner_id").getInt(0)); userObj.setTimezone(res.getString("tz")); userObj.setUser_id(userId); userObj.setUsername(username); userObj.setPassword(password); userObj.setAllowSelfSignedSSL(mForceConnect); String company_id = new JSONArray(res.getString("company_id")) .getString(0); userObj.setCompany_id(company_id); userObj.setOAuthLogin(false); if (instance != null) { userObj.setOAuthLogin(true); userObj.setInstanceDatabase(instance.getDatabaseName()); userObj.setInstanceUrl(instance.getInstanceUrl()); userObj.setClientId(instance.getClientId()); } OdooVersion odooVersion = mApp.getOdooVersion(); userObj.setVersion_number(odooVersion.getVersion_number()); userObj.setVersion_serie(odooVersion.getServer_serie()); } catch (Exception e) { e.printStackTrace(); } return userObj; } public List<OdooInstance> getUserInstances(OUser user) { List<OdooInstance> list = new ArrayList<OdooInstance>(); OdooInstance oInstance = new OdooInstance(); oInstance.setCompanyName("Odoo"); oInstance.setInstanceUrl(ODOO_SERVER_URL); list.add(oInstance); mOdoo = mApp.getOdoo(); try { OArguments args = new OArguments(); for (OdooInstance instance : mOdoo.get_instances(args.get())) { if (instance.isSaas()) { list.add(instance); } } } catch (Exception e) { e.printStackTrace(); } return list; } private String generateOdooName(String username, String database) { return username + "[" + database + "]"; } }