跳转至内容

Odoo 开发与实施交流

2.3k 主题 10.4k 帖子

No decsciption available

  • Odoo10不能导入或导出Excel文件的解决方法

    0
    0 赞同
    0 帖子
    959 浏览
    尚无回复
  • odoo10使用pos零售模块问题

    1
    1
    0 赞同
    1 帖子
    790 浏览
    新手摸索POS收款模块,提示没有为支付指定应收账款科目,在付款方式里折腾半天,仍无解,求大神点拨 [image: 1520590542779-%E6%97%A0%E6%A0%87%E9%A2%98-resized.png]
  • 返回导航栏上一级

    1
    1
    0 赞同
    1 帖子
    750 浏览
    [image: 1520576508613-153894ac-d960-41c1-866e-2b0889498373-%E5%9B%BE%E7%89%87.png] 想回到上一级,到库存调拨该怎么做???
  • open erp 和 Odoo

    2
    0 赞同
    2 帖子
    1k 浏览
    openerp 是odoo的前身,以前版本的odoo叫openerp。不是Django框架,是官方自己开发的一个高效二开的框架。
  • 多车间生产领料单和生产入库单如何处理

    5
    0 赞同
    5 帖子
    4k 浏览
    我们工厂一共有5个车间,产品需要通过这5个车间进行生产才能到最终成品仓库,我想和你的案例是类似的,只是数量不同而已,其中需要的材料非常繁多,希望能分享您的经验。
  • 求助如何利用many2many字段在视图中进行分组

    9
    0 赞同
    9 帖子
    3k 浏览
    S
    好的,多谢解答
  • odoo10 export data client error

    1
    1
    0 赞同
    1 帖子
    688 浏览
    H
    odoo10导出报错如下,什么原因? [image: 1519884958586-image001-resized.png]
  • 0 赞同
    1 帖子
    897 浏览
    Q
    [image: 1519559551200-123.jpg] 比如我用“张三”登录,创建了一个请假单,点击保存。 然后换一个浏览器使用“李四”登录并且打开这个请假单。这个时候在“张三”账户下,点击发送消息,李四收不到。 发送消息使用:self.message_post(body=body, partner_ids = user_ids_to_attach_as_chat_followers) 其中user_ids_to_attach_as_chat_followers包含李四的partner id 可以强制消息通知吗?
  • view中怎么用domain筛选user的当前公司

    5
    0 赞同
    5 帖子
    4k 浏览
    I
    @joshua 在 view中怎么用domain筛选user的当前公司 中说: 楼上给的是一个解决思路,@sidi113 不过建议直接添加记录规则Record Rule实现,因为这是全局的权限控制。 全局,可以在指定 的应用吧?
  • @http.route 一直找到不页面,报404

    2
    0 赞同
    2 帖子
    2k 浏览
    多数据情况下,你运行服务时,需要指定一个数据库(dbfilter),并且该数据库需安装了该模块才行
  • odoo voip 对接freeswitch

    2
    2
    0 赞同
    2 帖子
    3k 浏览
    K
    都没有人遇到过吗?还是说这个模块没人用过呢?
  • 重命名字段

    5
    0 赞同
    5 帖子
    3k 浏览
    D
    cool
  • Sales模块的menuitem(如:Customers,Quotations,Sales Orders等)定义找不到

    1
    0 赞同
    1 帖子
    1k 浏览
    A
    大家好,请教Odoo10 Sales模块的menuitem(如:Customers,Quotations,Sales Orders等)定义为什么在sale_views.xml与crm_team_views.xml都找不到呢?那么,是在哪个.xml定义的呢?尝试过全局搜索,好像也找不到,敬请知道的朋友指点、指点一下?谢谢!
  • 0 赞同
    5 帖子
    4k 浏览
    N
    多谢wangyuhui。按指点解决问题了。
  • odoo 页面如何实现快捷键操作??

    1
    0 赞同
    1 帖子
    908 浏览
    Z
    如何在页面上实现快捷键操作,类似按 Alt + N,就创建一个新单据;Alt + S 就保存该单据之类的。
  • [分享] Odoo11导入按钮与创建按钮分离

    1
    0 赞同
    1 帖子
    1k 浏览
    如题,如果有优化,请不吝告知在下,谢谢!0_1515576755020_base_import_extend.rar
  • odoo社区版安卓APK反编译问题

    1
    0 赞同
    1 帖子
    1k 浏览
    F
    odoo只有企业版才能用apk,没办法只能自己试着反编译试试了,让odooAPK也能使用社区版,这段代码不太理解怎么改,麻烦高手给予指点啊。 `` package com.odoo.mobile; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.IntentFilter; import android.graphics.PorterDuff.Mode; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.support.design.widget.Snackbar; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AlertDialog.Builder; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.View.OnTouchListener; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.Toast; import com.odoo.mobile.accounts.OdooAccountManager; import com.odoo.mobile.accounts.OdooUser; import com.odoo.mobile.accounts.manager.AllAccountsActivity; import com.odoo.mobile.core.OdooAppCompactActivity; import com.odoo.mobile.core.service.OdooIntentService; import com.odoo.mobile.core.utils.NetworkUtils; import com.odoo.mobile.core.utils.OControlUtils; import com.odoo.mobile.core.utils.UserSession; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Login extends OdooAppCompactActivity implements View.OnClickListener, View.OnKeyListener, View.OnTouchListener { private EditText edtLogin; private EditText edtPassword; private EditText edtServerUrl; private BroadcastReceiver loginResponseReceiver = new BroadcastReceiver() { public void onReceive(Context paramAnonymousContext, Intent paramAnonymousIntent) { paramAnonymousContext = paramAnonymousIntent.getExtras(); paramAnonymousIntent = paramAnonymousContext.getString("service_action"); if (paramAnonymousContext.containsKey("error_type")) { Login.this.handleError(paramAnonymousIntent, paramAnonymousContext); } int i; if (paramAnonymousContext.containsKey("service_response")) { i = -1; switch (paramAnonymousIntent.hashCode()) { } } for (;;) { switch (i) { default: return; if (paramAnonymousIntent.equals("odoo_version")) { i = 0; continue; if (paramAnonymousIntent.equals("db_list")) { i = 1; continue; if (paramAnonymousIntent.equals("authenticate_user")) { i = 2; } } } break; } } if (Boolean.valueOf(paramAnonymousContext.getBoolean("service_response")).booleanValue()) { paramAnonymousContext = new Bundle(); paramAnonymousContext.putString("host", Login.this.getHost()); Login.this.requestRPCService("db_list", paramAnonymousContext); return; } Login.this.toggleProgressBarView(false); Snackbar.make(Login.this.findViewById(16908290), 2131165290, 0).show(); return; paramAnonymousContext = paramAnonymousContext.getStringArrayList("service_response"); if (paramAnonymousContext.size() > 1) { Login.this.showDatabaseDialog(paramAnonymousContext); return; } if (paramAnonymousContext.size() == 1) { Login.this.login((String)paramAnonymousContext.get(0)); return; } paramAnonymousContext = Uri.parse(Login.this.getHost()); if (paramAnonymousContext.getHost().equals("www.odoo.com")) { Login.this.login("openerp"); return; } if (paramAnonymousContext.getHost().endsWith(".odoo.com")) { Login.this.login(paramAnonymousContext.getHost().replace(".odoo.com", "")); return; } Login.this.askUserForDatabase(); return; Login.this.createAccount((OdooUser)paramAnonymousContext.getParcelable("service_response")); } }; private OdooAccountManager odooAccountManager; private void askUserForDatabase() { AlertDialog.Builder localBuilder = new AlertDialog.Builder(this); localBuilder.setTitle(2131165256); View localView = LayoutInflater.from(this).inflate(2130968622, null, false); final EditText localEditText = (EditText)localView.findViewById(16908297); localEditText.setHint(2131165274); localBuilder.setView(localView); localBuilder.setPositiveButton(17039370, new DialogInterface.OnClickListener() { public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt) { if (!localEditText.getText().toString().trim().isEmpty()) { Login.this.login(localEditText.getText().toString().trim()); return; } Toast.makeText(Login.this, 2131165281, 0).show(); Login.this.toggleProgressBarView(false); } }); localBuilder.setNegativeButton(17039360, new DialogInterface.OnClickListener() { public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt) { Login.this.toggleProgressBarView(false); } }); localBuilder.setOnCancelListener(new DialogInterface.OnCancelListener() { public void onCancel(DialogInterface paramAnonymousDialogInterface) { Login.this.toggleProgressBarView(false); } }); localBuilder.show(); } private void createAccount(OdooUser paramOdooUser) { if (this.odooAccountManager.createAccount(paramOdooUser)) { this.odooAccountManager.makeActive(paramOdooUser); startWebViewActivity(paramOdooUser); return; } Toast.makeText(this, 2131165288, 0).show(); toggleProgressBarView(false); } private String getHost() { Object localObject2 = this.edtServerUrl.getText().toString().trim(); boolean bool = isRunbotURL((String)localObject2); Object localObject1 = localObject2; if (!((String)localObject2).startsWith("http")) { localObject1 = "http://" + (String)localObject2; } if (bool) {} do { return localObject1; localObject2 = Uri.parse((String)localObject1); if (((Uri)localObject2).getHost().equals("odoo.com")) { return "https://www." + ((Uri)localObject2).getHost(); } } while (!((Uri)localObject2).getHost().endsWith(".odoo.com")); return "https://" + ((Uri)localObject2).getHost(); } private void handleError(String paramString, Bundle paramBundle) { toggleProgressBarView(false); Object localObject2 = null; Object localObject1 = localObject2; int i; if (paramString.equals("error_response")) { paramString = paramBundle.getString("error_type"); i = -1; switch (paramString.hashCode()) { default: switch (i) { default: localObject1 = localObject2; } break; } } for (;;) { if (localObject1 != null) { Snackbar.make(findViewById(16908290), (CharSequence)localObject1, 0).show(); } return; if (!paramString.equals("no_network_connection")) { break; } i = 0; break; if (!paramString.equals("time_out")) { break; } i = 1; break; if (!paramString.equals("authentication_failed")) { break; } i = 2; break; if (!paramString.equals("server_not_reachable")) { break; } i = 3; break; if (!paramString.equals("database_not_found")) { break; } i = 4; break; if (!paramString.equals("certificate_not_trusted")) { break; } i = 5; break; localObject1 = getString(2131165231); continue; localObject1 = getString(2131165229); continue; localObject1 = getString(2131165241); continue; localObject1 = getString(2131165268); continue; localObject1 = paramBundle.getString("error_message"); continue; localObject1 = paramBundle.getString("error_message"); } } private boolean isRunbotURL(String paramString) { return Pattern.compile(".runbot.{1,2}\.odoo\.com", 2).matcher(paramString).find(); } private void login() { if ((OControlUtils.isVisible((View)this.edtServerUrl.getParent())) && (this.edtServerUrl.getText().toString().trim().isEmpty())) { this.edtServerUrl.setError(getString(2131165233)); this.edtServerUrl.requestFocus(); return; } if (this.edtLogin.getText().toString().trim().isEmpty()) { this.edtLogin.setError(getString(2131165234)); this.edtLogin.requestFocus(); return; } if (this.edtPassword.getText().toString().trim().isEmpty()) { this.edtPassword.setError(getString(2131165232)); this.edtPassword.requestFocus(); return; } toggleProgressBarView(true); Bundle localBundle = new Bundle(); localBundle.putString("host", getHost()); requestRPCService("odoo_version", localBundle); } private void login(String paramString) { String str1 = getHost(); String str2 = this.edtLogin.getText().toString(); String str3 = this.edtPassword.getText().toString(); if (this.odooAccountManager.hasAccount(OdooUser.createAccountName(str2, str1, paramString))) { Snackbar.make(findViewById(16908290), 2131165225, 0).show(); toggleProgressBarView(false); return; } Bundle localBundle = new Bundle(); localBundle.putString("host", str1); localBundle.putString("username", str2); localBundle.putString("password", str3); localBundle.putString("database", paramString); requestRPCService("authenticate_user", localBundle); } private void requestRPCService(String paramString, Bundle paramBundle) { if (paramBundle != null) {} for (;;) { paramBundle.putString("service_action", paramString); paramString = new Intent(this, OdooIntentService.class); paramString.putExtras(paramBundle); startService(paramString); return; paramBundle = new Bundle(); } } private void showDatabaseDialog(final List paramList) { AlertDialog.Builder localBuilder = new AlertDialog.Builder(this); localBuilder.setTitle(2131165277); localBuilder.setSingleChoiceItems((CharSequence[])paramList.toArray(new String[paramList.size()]), -1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt) { Login.this.login((String)paramList.get(paramAnonymousInt)); paramAnonymousDialogInterface.dismiss(); } }); localBuilder.setOnCancelListener(new DialogInterface.OnCancelListener() { public void onCancel(DialogInterface paramAnonymousDialogInterface) { Login.this.toggleProgressBarView(false); } }); localBuilder.show(); } private void startWebViewActivity(OdooUser paramOdooUser) { paramOdooUser.getSession(this).registerSession(paramOdooUser.session_id); paramOdooUser = new Intent(this, WebViewActivity.class); paramOdooUser.setFlags(268468224); Bundle localBundle = getIntent().getExtras(); if ((localBundle != null) && (localBundle.containsKey("link"))) { paramOdooUser.putExtra("link", localBundle.getString("link")); } startActivity(paramOdooUser); overridePendingTransition(2131034129, 2131034130); finish(); } private void toggleProgressBarView(boolean paramBoolean) { int j = 0; View localView = findViewById(2131558523); if (!paramBoolean) { i = 0; localView.setVisibility(i); localView = findViewById(2131558521); if (!paramBoolean) { break label71; } } label71: for (int i = j;; i = { localView.setVisibility(i); ((ProgressBar)findViewById(2131558522)).getIndeterminateDrawable().setColorFilter(-1, PorterDuff.Mode.SRC_IN); return; i = 8; break; } } public void onClick(View paramView) { switch (paramView.getId()) { default: return; case 2131558528: login(); return; } if (NetworkUtils.isConnected(this)) { startActivity(new Intent(this, CreateAccount.class)); return; } Toast.makeText(this, 2131165231, 0).show(); } protected void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setContentView(2130968604); this.odooAccountManager = new OdooAccountManager(this); this.edtLogin = ((EditText)findViewById(2131558525)); this.edtPassword = ((EditText)findViewById(2131558526)); this.edtServerUrl = ((EditText)findViewById(2131558524)); findViewById(2131558528).setOnClickListener(this); findViewById(2131558529).setOnClickListener(this); findViewById(2131558527).setOnTouchListener(this); this.edtPassword.setOnKeyListener(this); LocalBroadcastManager.getInstance(this).registerReceiver(this.loginResponseReceiver, new IntentFilter(OdooIntentService.TAG)); } protected void onDestroy() { LocalBroadcastManager.getInstance(this).unregisterReceiver(this.loginResponseReceiver); super.onDestroy(); } public boolean onKey(View paramView, int paramInt, KeyEvent paramKeyEvent) { if (paramKeyEvent.getKeyCode() == 66) { login(); ((InputMethodManager)getSystemService("input_method")).hideSoftInputFromWindow(paramView.getWindowToken(), 0); } return false; } protected void onStart() { super.onStart(); int i; Object localObject1; if ((getIntent().getExtras() != null) && (getIntent().getExtras().containsKey("force_new_login"))) { i = 1; if (i == 0) { localObject1 = this.odooAccountManager.getActiveAccount(); if (localObject1 == null) { break label162; } toggleProgressBarView(true); if (!((OdooUser)localObject1).getSession(this).isValid()) { break label128; } localObject1 = new Intent(this, WebViewActivity.class); localObject2 = getIntent().getExtras(); if ((localObject2 != null) && (((Bundle)localObject2).containsKey("link"))) { ((Intent)localObject1).putExtra("link", ((Bundle)localObject2).getString("link")); } startActivity((Intent)localObject1); finish(); } } label128: label162: while (!this.odooAccountManager.hasAnyAccount()) { return; i = 0; break; Object localObject2 = new Intent(this, UserLoginActivity.class); ((Intent)localObject2).putExtra("user_name", ((OdooUser)localObject1).getAccountName()); startActivity((Intent)localObject2); finish(); return; } startActivity(new Intent(this, AllAccountsActivity.class)); finish(); } public boolean onTouch(View paramView, MotionEvent paramMotionEvent) { if (1 == paramMotionEvent.getAction()) { this.edtPassword.setInputType(129); return true; } this.edtPassword.setInputType(145); return true; } }
  • 怎么让框架中的“创建”和“导入”这种自带的按钮不显示,

    6
    1
    0 赞同
    6 帖子
    5k 浏览
    W
    @yeko APPS(https://www.odoo.com/apps) 里有个max_web_hide_list_view_import,装上就不显示了。默认非管理员不显示,管理员还是显示,你可以修改js自己控制;
  • odoo11特殊字段验证包[分享]

    1
    1
    0 赞同
    1 帖子
    1k 浏览
    如题,该包包含特殊字段的有效验证(手机号码,身份证号码,电子邮件),支持自扩展0_1515140725112_field_verify.rar 。使用效果如图![image: 1515141147618-360%E6%A1%8C%E9%9D%A2%E6%88%AA%E5%9B%BE20180105162915-resized.jpg]
  • Odoo10 怎么在onchange里面为one2many赋值?

    8
    0 赞同
    8 帖子
    5k 浏览
    @jalena 在 Odoo10 怎么在onchange里面为one2many赋值? 中说: name 不客气,您实现的思路也很好