diff --git a/addons/account/static/description/index.html b/addons/account/static/description/index.html index 09a58fb3246..d9b26f11d16 100644 --- a/addons/account/static/description/index.html +++ b/addons/account/static/description/index.html @@ -17,7 +17,7 @@ By far the most beautiful and full featured accounting software. OpenERP Account Activate features on demand, from integrated analytic accounting to budget, assets and multiple companies consolidation.

- Start your free trial + Start your free trial
diff --git a/addons/account_voucher/static/description/index.html b/addons/account_voucher/static/description/index.html index d59c110dde5..a363291f12e 100644 --- a/addons/account_voucher/static/description/index.html +++ b/addons/account_voucher/static/description/index.html @@ -17,7 +17,7 @@ automatically based on your activities.

- Start your free trial + Start your free trial
diff --git a/addons/crm/static/description/index.html b/addons/crm/static/description/index.html index 5ae542f5c91..70f52d0ca87 100644 --- a/addons/crm/static/description/index.html +++ b/addons/crm/static/description/index.html @@ -17,7 +17,7 @@ Manage your sales funnel with no effort. Attract leads, follow-up on phone calls and meetings. Analyse the quality of your leads to make informed decisions and save time by integrating emails directly into the application.

- Start your free trial + Start your free trial
diff --git a/addons/hr/static/description/index.html b/addons/hr/static/description/index.html index 0bc3db084a4..f97cb462fe3 100644 --- a/addons/hr/static/description/index.html +++ b/addons/hr/static/description/index.html @@ -17,7 +17,7 @@ Get all your HR operations managed easily: knowledge sharing, recruitments, appr Each need is provided by a specific app that you activate on demand.

- Start your free trial + Start your free trial
diff --git a/addons/im/im.py b/addons/im/im.py index 4a867789cbc..505ca3627b6 100644 --- a/addons/im/im.py +++ b/addons/im/im.py @@ -101,17 +101,19 @@ class LongPollingController(http.Controller): raise Exception("Not usable in a server not running gevent") from openerp.addons.im.watcher import ImWatcher if db is not None: - request.session.authenticate(db=db, uid=uid, password=password) + openerp.service.security.check(db, uid, password) else: - request.session.authenticate(db=request.session._db, uid=request.session._uid, password=request.session._password) + uid = request.session.uid + db = request.session.db - with request.registry.cursor() as cr: - request.registry.get('im.user').im_connect(cr, request.uid, uuid=uuid, context=request.context) - my_id = request.registry.get('im.user').get_by_user_id(cr, request.uid, uuid or request.session._uid, request.context)["id"] + registry = openerp.modules.registry.RegistryManager.get(db) + with registry.cursor() as cr: + registry.get('im.user').im_connect(cr, uid, uuid=uuid, context=request.context) + my_id = registry.get('im.user').get_by_user_id(cr, uid, uuid or uid, request.context)["id"] num = 0 while True: - with request.registry.cursor() as cr: - res = request.registry.get('im.message').get_messages(cr, request.uid, last, users_watch, uuid=uuid, context=request.context) + with registry.cursor() as cr: + res = registry.get('im.message').get_messages(cr, uid, last, users_watch, uuid=uuid, context=request.context) if num >= 1 or len(res["res"]) > 0: return res last = res["last"] diff --git a/addons/im_livechat/im_livechat.py b/addons/im_livechat/im_livechat.py index adceebc7cba..b68a0079c3a 100644 --- a/addons/im_livechat/im_livechat.py +++ b/addons/im_livechat/im_livechat.py @@ -37,36 +37,45 @@ env.filters["json"] = json.dumps class LiveChatController(http.Controller): - @http.route('/im_livechat/loader') + def _auth(self, db): + reg = openerp.modules.registry.RegistryManager.get(db) + uid = openerp.netsvc.dispatch_rpc('common', 'authenticate', [db, "anonymous", "anonymous", None]) + return reg, uid + + @http.route('/im_livechat/loader', auth="none") def loader(self, **kwargs): p = json.loads(kwargs["p"]) db = p["db"] channel = p["channel"] user_name = p.get("user_name", None) - request.session.authenticate(db=db, login="anonymous", password="anonymous") - info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel) - info["db"] = db - info["channel"] = channel - info["userName"] = user_name - return request.make_response(env.get_template("loader.js").render(info), - headers=[('Content-Type', "text/javascript")]) - @http.route('/im_livechat/web_page') + reg, uid = self._auth(db) + with reg.cursor() as cr: + info = reg.get('im_livechat.channel').get_info_for_chat_src(cr, uid, channel) + info["db"] = db + info["channel"] = channel + info["userName"] = user_name + return request.make_response(env.get_template("loader.js").render(info), + headers=[('Content-Type', "text/javascript")]) + + @http.route('/im_livechat/web_page', auth="none") def web_page(self, **kwargs): p = json.loads(kwargs["p"]) db = p["db"] channel = p["channel"] - request.session.authenticate(db=db, login="anonymous", password="anonymous") - script = request.session.model('im_livechat.channel').read(channel, ["script"])["script"] - info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel) - info["script"] = script - return request.make_response(env.get_template("web_page.html").render(info), - headers=[('Content-Type', "text/html")]) + reg, uid = self._auth(db) + with reg.cursor() as cr: + script = reg.get('im_livechat.channel').read(cr, uid, channel, ["script"])["script"] + info = reg.get('im_livechat.channel').get_info_for_chat_src(cr, uid, channel) + info["script"] = script + return request.make_response(env.get_template("web_page.html").render(info), + headers=[('Content-Type', "text/html")]) - @http.route('/im_livechat/available', type='json') + @http.route('/im_livechat/available', type='json', auth="none") def available(self, db, channel): - request.session.authenticate(db=db, login="anonymous", password="anonymous") - return request.session.model('im_livechat.channel').get_available_user(channel) > 0 + reg, uid = self._auth(db) + with reg.cursor() as cr: + return reg.get('im_livechat.channel').get_available_user(cr, uid, channel) > 0 class im_livechat_channel(osv.osv): _name = 'im_livechat.channel' diff --git a/addons/l10n_in/l10n_in_private_chart.xml b/addons/l10n_in/l10n_in_private_chart.xml index 671fdc334d9..4b8e4be55bf 100644 --- a/addons/l10n_in/l10n_in_private_chart.xml +++ b/addons/l10n_in/l10n_in_private_chart.xml @@ -135,11 +135,47 @@ Tax Receivable 189 - other + view - + + + Purchase Tax Receivable + 189100 + other + + + + + + + VAT Receivable + 189200 + other + + + + + + + Service Tax Receivable + 189300 + other + + + + + + + Exice Duty Receivable + 189400 + other + + + + + diff --git a/addons/l10n_in/l10n_in_private_tax_template.xml b/addons/l10n_in/l10n_in_private_tax_template.xml index 7aec30f0575..5cb835d950c 100644 --- a/addons/l10n_in/l10n_in_private_tax_template.xml +++ b/addons/l10n_in/l10n_in_private_tax_template.xml @@ -2,269 +2,403 @@ - + - Sale Tax-15% - + Sales Tax 15% + Sales Tax 15% 0.15 percent sale - - - - - - + + + + + + + - + - Sale Tax-12% - + Sales Tax 12% + Sales Tax 12% 0.12 percent sale - - - - - - + + + + + + + - + - Sale Tax-4% - + Sales Tax 4% + Sales Tax 4% 0.04 percent sale - - - - - + + + + + + - + - Purchase Tax-15% + Purchase Tax 15% + Purchase Tax 15% - - + 0.15 percent purchase - - - - + + + + + + - + - - - VAT-5%(4% VAT+1% Add. Tax.) - + + + Output VAT 5% (VAT 4% + Add. VAT 1%) + Output VAT 5% + sale + percent + 0.04 + + + + + + + + + + + + + Input VAT 5% (VAT 4% + Add. VAT 1%) + Input VAT 5% 0.05 percent - all - - - - 1 - - 1 - - 1 - - 1 - + purchase + + + + + + + + - - - VAT-15%(12.5% VAT+2.5% Add. Tax.) - + + + Input VAT 15% (VAT 12.5% + Add. VAT 2.5%) + Input VAT 15% 0.15 percent - all - - - - 1 - - 1 - - 1 - - 1 - + purchase + + + + + + + + - - - VAT-8% - + + + Output VAT 15% (VAT 12.5% + Add. VAT 2.5%) + Output VAT 15% + 0.15 + percent + sale + + + + + + + + + + + + + Input VAT 8% + Input VAT 8% 0.08 percent - all - - - - - - - + purchase + + + + + + + + - - VAT-10% - + + Output VAT 8% + Output VAT 8% + 0.08 + percent + sale + + + + + + + + + + + + + Input VAT 10% + Input VAT 10% 0.10 percent - all - - - - - - - + purchase + + + + + + + + - - VAT-12.5% - - 12.5 - percent - all - - - - - - - - - - - - - - Excise Duty-10.30% - + + Output VAT 10% + Output VAT 10% 0.10 percent sale - - - - 1 - - 1 - - 1 - - 1 - + + + + + + + + - - - Excise Duty-2% - 0.02 + + + Input VAT 12.5% + Input VAT 12.5% + 0.125 + percent + purchase + + + + + + + + + + + + + Output VAT 12.5% + Output VAT 12.5% + 0.125 percent sale - - - - - 1 - - 1 - - 1 - - 1 + + + + + + + + - - - Excise Duty-1% - 0.01 - percent + + + + + Excise Duty 12% - Sales + Excise Duty 12% - Sales sale + percent + 0.1200 - - - 1 - - 1 - - 1 - - 1 - + + + + + + + - + + + Excise Duty 2% - Sales + Excise Duty 2% - Sales + sale + percent + 0.020 + + + + + + + + + + + + + Output Excise Duty 1% + Output Excise Duty 1% + sale + percent + 0.0100 + + + + + + + + + + + - - - all - Service Tax-12.30% - + + + Output Service Tax 12% + Output Service Tax 12% + sale + percent 0.12 - percent + 1 - - - - - - + + + + + + + - - - Service Tax-%2 + + + Output Sales Service Tax 2% + Output Sales Service Tax 2% + sale + percent 0.02 - percent - all + 3 - - - - - - + + + + + - - - Service Tax-%1 + + + Output Service Tax 1% + Output Service Tax 1% + sale + percent 0.01 - percent - all + 5 - - - - - - + + + + + - + + + Input Service Tax 12% + Input Service Tax 12% + purchase + percent + 0.1200 + 1 + + + + + + + + + + + + + Input Service Tax Edu. Cess. 2% + Input Service Tax Edu. Cess. 2% + purchase + percent + 0.0200 + 3 + + + + + + + + + + + Input Service Tax Seco. & HEC 1% + Input Service Tax Seco. & HEC 1% + purchase + percent + 0.0100 + 5 + + + + + + + + + \ No newline at end of file diff --git a/addons/l10n_in/l10n_in_public_chart.xml b/addons/l10n_in/l10n_in_public_chart.xml index 9612afddc39..91d285408d5 100644 --- a/addons/l10n_in/l10n_in_public_chart.xml +++ b/addons/l10n_in/l10n_in_public_chart.xml @@ -116,7 +116,7 @@ Tax Receivable 15400 - other + view @@ -658,7 +658,327 @@ - + + + Input CST 5% + 154001 + other + + + + + + Input Service Tax Seco. & HEC 1% + 154002 + other + + + + + + Input Credit - URD + 154003 + other + + + + + + TDS on Audit Fees - 94J + 154004 + other + + + + + + TDS on Commission Or Brokerage - 94H + 154005 + other + + + + + + Input Credit - Import Duty + 154006 + other + + + + + + Additional Duty (Imports) 4% + 154007 + other + + + + + + Input Service Tax 12% + 154008 + other + + + + + + Input Service Tax Edu. Cess. 2% + 154009 + other + + + + + + TDS on Salary - 92B + 154010 + other + + + + + + Input Excise Duty 6% + 154011 + other + + + + + + Input Excise Duty 5% + 154012 + other + + + + + + Input Excise Duty 12% + 154013 + other + + + + + + Education Cess 2% - Purchase + 154014 + other + + + + + + Seco. & Higher Edu. Cess 1% - Purchase + 154015 + other + + + + + + Excise Duty 12% - Sales + 247001 + other + + + + + + Education Cess 2% - Sales + 247010 + other + + + + + + Seco. & Higher Edu. Cess 1% - Sales + 247002 + other + + + + + + Input Sec. & HEC - Capital Goods + 154016 + other + + + + + + TDS on Contractor - 94C + 154017 + other + + + + + + TDS on Director's Interest + 154018 + other + + + + + + TDS on Director's Remuneration - 92B + 154019 + other + + + + + + TDS on Interest + 154020 + other + + + + + + TDS on Professional Fees - 94J + 154021 + other + + + + + + TDS on Rent - 94I + 154022 + other + + + + + + Input Edu. Cess - Capital Goods + 154023 + other + + + + + + Input Excise Duty 12% - Capital Goods + 154024 + other + + + + + + Input VAT 4% + 154025 + other + + + + + + Input Additional VAT 1% + 154026 + other + + + + + + Input VAT 15% + 154027 + other + + + + + + Output VAT 4% + 247003 + other + + + + + + Output Adi. VAT 1% + 247004 + other + + + + + + CST 2% on Sales - Against Form - C + 247005 + other + + + + + + CST 5% on Sales + 247006 + other + + + + + + Input VAT 12.5% + 154028 + other + + + + + + Input Additional VAT 2.5% + 154029 + other + + + + + + Input CST 2% + 154030 + other + + + + + + CST 2% on Sales - CT3 Against Form C + 247007 + other + + + + + + Output VAT 4% on Sales - CT3 + 247008 + other + + + + + + Output Adi. VAT 1% Sales CT3 + 247009 + other + + + + India - Chart of Accounts for Public Ltd diff --git a/addons/l10n_in/l10n_in_public_tax_template.xml b/addons/l10n_in/l10n_in_public_tax_template.xml index 03dbfa7cc75..887e051121a 100644 --- a/addons/l10n_in/l10n_in_public_tax_template.xml +++ b/addons/l10n_in/l10n_in_public_tax_template.xml @@ -1,295 +1,865 @@ - - - - - Sale Tax-15% - - - - 0.15 - percent - sale - - - - - - - - - Sale Tax-12% - - - - 0.12 - percent - sale - - - - - - - - - Sale Tax-4% - - - - 0.04 - percent - sale - - - - - - - - - - - Purchase Tax-15% - - - - 0.15 - percent + + + Input CST 5% + Input CST 5% purchase - - - - - - - - - - - - - VAT-5%(4% VAT+1% Add. Tax.) - - - - 0.05 percent - all - - 1 - - 1 - - 1 - - 1 - + 0.01 + + + + + + + + - - VAT-15% (12.5% VAT + 2.5% Add. Tax.) - - - - 0.15 + + Input Credit - URD + Input Credit - URD + purchase percent - all - - 1 - - 1 - - 1 - - 1 - - - - - - VAT-8% - - - - 0.08 - percent - all - - 1 - - 1 - - 1 - - 1 - - - - - - VAT-10% - - - - 0.10 - percent - all - - 1 - - 1 - - 1 - - 1 - + 0.0400 + + + + + + + + - - VAT-12.5% - - - - 12.5 + + TDS on Audit Fees - 94J + TDS on Audit Fees - 94J + purchase percent - all - - 1 - - 1 - - 1 - - 1 - + 0.1000 + + + + + + + + - - - - Service Tax-12.30% - - + + TDS on Commission Or Brokerage- 94H + TDS on Commission Or Brokerage- 94H + purchase + percent + 0.1000 + + + + + + + + + + + + + Input Credit - Import Duty + Input Credit - Import Duty + purchase + percent + 0.0750 + 1 + + + + + + + + + + + + + Additional Duty (Imports) 4% + Additional Duty (Imports) 4% + purchase + percent + 0.0400 + 1 + + + + + + + + + + + + + Service Tax 12% - Purchase + Service Tax 12% - Purchase + purchase + percent + 0.1200 + 1 + + + + + + + + + + + + + Service Tax Edu. Cess. 2% - Purchase + Service Tax Edu. Cess. 2% - Purchase + purchase + percent + 0.0200 + 3 + + + + + + + + + + + Service Tax Seco. & HEC 1% - Purchase + Service Tax Seco. & HEC 1% - Purchase + purchase + percent + 0.0100 + 5 + + + + + + + + + + + TDS on Salary - 92B + TDS on Salary - 92B + purchase + percent + 0.3000 + + + + + + + + + + + + + Input Excise Duty 5% + Input Excise Duty 5% + purchase + percent + 0.0500 + + + + + + + + + + + + + Input Excise Duty 12% + Input Excise Duty 12% + purchase + percent + 0.1200 + + + + + + + + + + + + + Education Cess 2% - Purchase + Education Cess 2% - Purchase + purchase + percent + 0.0200 + 21 + + + + + + + + + + + Seco. & Higher Edu. Cess 1% - Purchase + Seco. & Higher Edu. Cess 1% - Purchase + all + percent + 0.0100 + 22 + + + + + + + + + + + Excise Duty 12% - Sales + Excise Duty 12% - Sales + sale + percent + 0.1200 + + + + + + + + + + + + + + Education Cess 2% - Sales + Education Cess 2% - Sales + sale + percent + 0.0200 + 3 + + + + + + + + + + + Seco. & Higher Edu. Cess 1% - Sales + Seco. & Higher Edu. Cess 1% - Sales + sale + percent + 0.0100 + 5 + + + + + + + + + + + Input Sec. & HEC - Capital Goods + Input Sec. & HEC - Capital Goods + purchase + percent + 0.01 + + + + + + + + + + + + + TDS on Contractor - 94C + TDS on Contractor - 94C + purchase + percent + 0.0200 + + + + + + + + + + + + + TDS on Director's Interest + TDS on Director's Interest + purchase + percent + 0.1 + + + + + + + + + + + + + TDS on Director's Remuneration - 92B + TDS on Director's Remuneration - 92B + purchase + percent + 0.3 + + + + + + + + + + + + + TDS on Interest + TDS on Interest + purchase + percent + 0.1 + + + + + + + + + + + + + TDS on Professional Fees - 94J + TDS on Professional Fees - 94J + purchase + percent + 0.1 + 1 + + + + + + + + + + + + + TDS on Rent - 94I + TDS on Rent-94I + purchase + percent + 0.1 + + + + + + + + + + + + + Input Edu. Cess - Capital Goods + Input Edu. Cess - Capital Goods + purchase + percent + 0.02 + + + + + + + + + + + + + Input Excise Duty 12% - Capital Goods + Input Excise Duty 12% - Capital Goods + purchase + percent 0.12 - percent - all - - 1 - - 1 - - 1 - - 1 - + + + + + + + + - - Service Tax-%2 - - - - - 1 - - 1 - - 1 - - 1 - 0.02 - percent - all - - - - - - Service Tax-%1 - 0.01 - - - - - 1 - - 1 - - 1 - - 1 - percent - all - - - - - - - Excise Duty-10.30% - - - - 0.10 + + Input VAT 4% + Input VAT 4% + purchase percent - sale - - 1 - - 1 - - 1 - - 1 - + 0.04 + 4 + + + + + + + + - - - Excise Duty-2% - 0.02 + + + Input Additional VAT 1% + Input Additional VAT 1% + purchase percent - sale - - - - 1 - - 1 - - 1 - - 1 - - - - - - Excise Duty-1% 0.01 - percent - sale - - - - 1 - - 1 - - 1 - - 1 - + 5 + + + + + + + + - + + + Input VAT 15% + Input VAT 15% + purchase + percent + 0.15 + 7 + + + + + + + + + + + + + Output VAT 4% + Output VAT 4% + sale + percent + 0.04 + 11 + + + + + + + + + + + + + Output Adi. VAT 1% + Output Adi. VAT 1% + sale + percent + 0.01 + 12 + + + + + + + + + + + + + CST 2% on Sales - Against Form - C + CST 2% on Sales - Against Form - C + sale + percent + 0.02 + 13 + + + + + + + + + + + + + + CST 5% on Sales + CST 5% on Sales + sale + percent + 0.05 + 14 + + + + + + + + + + + + + Input VAT 12.5% + Input VAT 12.5% + purchase + percent + 0.1250 + 60 + + + + + + + + + + + + + Input Additional VAT 2.5% + Input Additional VAT 2.5% + purchase + percent + 0.0250 + 80 + + + + + + + + + + + + + Input CST 2% + Input CST 2% + purchase + percent + 0.02 + 9333 + + + + + + + + + + + + + No Tax Form H + No Tax Form H + sale + percent + 0.02 + + + + + + + + + + + CST 2% on Sales - CT3 Against Form - C + CST 2% on Sales - CT3 Against Form - C + sale + percent + 0.02 + + + + + + + + + + + + + Output VAT 4% on Sales - CT3 + Output VAT 4% on Sales - CT3 + sale + percent + 0.04 + + + + + + + + + + + + + Output Adi. VAT 1% on Sales - CT3 + Output Adi. VAT 1% on Sales - CT3 + sale + percent + 0.01 + + + + + + + + + + + + + No Tax SEZ OGS + No Tax SEZ OGS + sale + fixed + + + + + + + + + + + No Tax SEZ Gujarat + No Tax SEZ Gujarat + sale + percent + + + + + + + + + + + No Tax Form H with BED + No Tax Form H with BED + sale + percent + + + + + + + + + + + No Tax Exports - Out of Country + No Tax Exports - Out of Country + sale + percent + + + + + + + + + + + No Tax Projects + No Tax Projects + sale + percent + + + + + + + + + + + Input Excise Duty 6% + Input Excise Duty 6% + purchase + percent + 0.0600 + 1 + + + + + + + + + + + + + Education Cess 2% Purchase + Education Cess 2% Purchase + purchase + percent + 0.0200 + 21 + + + + + + + + + + + Seco. & Higher Edu. Cess 1% Purchase + Seco. & Higher Edu. Cess 1% Purchase + purchase + percent + 0.0100 + 22 + + + + + + + + + + + Service Tax 12% - Sales + Service Tax 12% - Sales + sale + percent + 0.12 + 1 + + + + + + + + + + + + + Service Tax 2% - Sales + Service Tax 2% - Sales + sale + percent + 0.02 + 3 + + + + + + + + + + + Service Tax 1% - Sales + Service Tax 1% - Sales + sale + percent + 0.01 + 5 + + + + + + + + + \ No newline at end of file diff --git a/addons/l10n_in/l10n_in_tax_code_template.xml b/addons/l10n_in/l10n_in_tax_code_template.xml index 94217d79c3c..983d2fa4910 100644 --- a/addons/l10n_in/l10n_in_tax_code_template.xml +++ b/addons/l10n_in/l10n_in_tax_code_template.xml @@ -19,6 +19,7 @@ Tax Paid + -1 @@ -27,16 +28,540 @@ - - Base of Taxed Sales + Taxable Sale Bases - Base of Taxed Purchases + Taxable Purchase Bases + + Input CST 5% + + + + + Purchase CST 5% + + + + + Purchase Service Tax 12% + + + + + Sales Service Tax 12% + + + + + Excise Duty 12.36% - Sales + + + + + Excise Duty 12% - Sales + + + + + Excise Duty 2% - Sales + + + + + Excise Duty 1% - Sales + + + + + Excise Duty 12.36% - Purchase + + + + + Excise Duty 12% - Purchase + + + + + Education Cess 2% - Sales + + + + + Education Cess 2% - Purchase + + + + + Input Credit - Import Duty + + + + + Input Credit On Capital Goods - Edu. Cess + + + + + Input Excise Duty 12% - Capital Goods + + + + + Input Credit on Capital Goods - Seco. & HEC + + + + + Input Service Tax 12.36% + + + + + Input Service Tax 12% + + + + + Input Service Tax Edu. Cess. 2% + + + + + Input Service Tax Seco. & HEC 1% + + + + + Seco. & Higher Edu. Cess 1% - Purchase + + + + + Seco. & Higher Edu. Cess 1% - Sales + + + + + CST 2% on Sales + + + + + CST 5% on Sales + + + + + Input Additional VAT 1% + + + + + Input Additional Vat 2.5% + + + + + Input VAT 12.5% + + + + + Input VAT 15% + + + + + Input VAT 10% + + + + + Input VAT 8% + + + + + Input VAT 5% + + + + + Input VAT 4% + + + + + Output VAT 15% + + + + + Output VAT 12.5% + + + + + Output VAT 10% + + + + + Output VAT 8% + + + + + Output VAT 5% + + + + + Output VAT 4% + + + + + Output Adi. VAT 1% + + + + + CST 2% on Purchase + + + + + Input Excise Duty 5% + + + + + Input Excise Duty 6% + + + + + Input Credit - URD + + + + + TDS on Audit Fees - 94J + + + + + TDS on Commission Or Brokerage- 94H + + + + + TDS on Contractor-94C + + + + + TDS on Director's Interest + + + + + TDS on Director's Remuneration - 92B + + + + + TDS on Interest + + + + + TDS on Professional Fees - 94J + + + + + TDS on Rent - 94I + + + + + TDS on Salary - 92B + + + + + Import Purchase + + + + + Purchase VAT 4% / VAT 12.5% / VAT 15% / CST 2% / CST 5% + + + + + Plant & Machinery + + + + + Expense Accounts + + + + + Sales Excise + + + + + Sales CST 2% + + + + + Sales CST 5% + + + + + Purchase VAT 15% + + + + + Purchase VAT 12.5% + + + + + Purchase VAT 10% + + + + + Purchase VAT 8% + + + + + Purchase VAT 5% + + + + + Purchase VAT 4% + + + + + Purchase VAT 2.5% + + + + + Sales VAT 15% + + + + + Sales VAT 12.5% + + + + + Sales VAT 10% + + + + + Sales VAT 8% + + + + + Sales VAT 5% + + + + + Sales VAT 4% + + + + + Input CST 2% + + + + + Purchase URD + + + + + Base Expenses for TDS + + + + + Additional Duty (Imports) 4% + + + + + Sales Export - Form H - With Tax + + + + + CST 2% on Sales CT3 + + + + + Sales CT3 VAT + + + + + Output VAT 4% on Sales CT3 + + + + + Output Adi. VAT 1% on Sales CT3 + + + + + Sales CT3 CST + + + + + Sales Export - Form H - With CT1 + + + + + Sales Export - SEZ - Out of Gujarat + + + + + Sales Export - SEZ - In Gujarat + + + + + No Tax SEZ OGS + + + + + No Tax SEZ Gujarat + + + + + Sales Export - Out of Country + + + + + Sales Others (Projects) + + + + + No Tax Form H with BED + + + + + No Tax Form H + + + + + No Tax Export Out of Country + + + + + No Tax Projects + + + + + Service Tax 12.36% - Sales + + + + + Service Tax 12% - Sales + + + + + Service Tax 2% - Sales + + + + + Service Tax 1% - Sales + + + + + Sales Tax 15% + + + + + Sales Tax - 15% + + + + + Sales Tax 12% + + + + + Sales Tax - 12% + + + + + Sales Tax 4% + + + + + Sales Tax - 4% + + + + + Purchase Tax 15% + + + + + Purchase Tax - 15% + + + diff --git a/addons/mail/static/description/index.html b/addons/mail/static/description/index.html index b564cf3ab1e..aa55e63008d 100644 --- a/addons/mail/static/description/index.html +++ b/addons/mail/static/description/index.html @@ -21,7 +21,7 @@ email overload.

- Start your free trial + Start your free trial
diff --git a/addons/mrp/static/description/index.html b/addons/mrp/static/description/index.html index 5777eb5f147..d44da3f37b1 100644 --- a/addons/mrp/static/description/index.html +++ b/addons/mrp/static/description/index.html @@ -20,7 +20,7 @@ planning with the smart kanban and gantt views. Use the advanced analytics features to detect bottleneck in resources capacities and inventory locations.

- Start your free trial + Start your free trial
diff --git a/addons/note/static/description/index.html b/addons/note/static/description/index.html index 7ef37c646e9..dc688859334 100644 --- a/addons/note/static/description/index.html +++ b/addons/note/static/description/index.html @@ -15,7 +15,7 @@ Organize yourself with efficient todo lists and notes. From personnal tasks to collaborative meeting minutes, increase your user's productivity by giving them the tools to prioritize their work, share their ideas and collaborate on documents.

- Start your free trial + Start your free trial
diff --git a/addons/point_of_sale/controllers/main.py b/addons/point_of_sale/controllers/main.py index b189c8f204a..db5d5a25018 100644 --- a/addons/point_of_sale/controllers/main.py +++ b/addons/point_of_sale/controllers/main.py @@ -4,29 +4,31 @@ import simplejson import os import openerp +from openerp.addons.web import http +from openerp.addons.web.http import request from openerp.addons.web.controllers.main import manifest_list, module_boot, html_template -class PointOfSaleController(openerp.addons.web.http.Controller): - _cp_path = '/pos' +class PointOfSaleController(http.Controller): - @openerp.addons.web.http.httprequest - def app(self, req, s_action=None, **kw): - js = "\n ".join('' % i for i in manifest_list(req, None, 'js')) - css = "\n ".join('' % i for i in manifest_list(req, None, 'css')) + @http.route('/pos/app', type='http', auth='admin') + def app(self): + js = "\n ".join('' % i for i in manifest_list('js',db=request.db)) + css = "\n ".join('' % i for i in manifest_list('css',db=request.db)) - cookie = req.httprequest.cookies.get("instance0|session_id") + cookie = request.httprequest.cookies.get("instance0|session_id") session_id = cookie.replace("%22","") - template = html_template.replace(' + diff --git a/addons/point_of_sale/static/description/index.html b/addons/point_of_sale/static/description/index.html index 130806ddb11..7f1b7a5c097 100644 --- a/addons/point_of_sale/static/description/index.html +++ b/addons/point_of_sale/static/description/index.html @@ -22,7 +22,7 @@ consolidations amongst all shops without the hassle of integrating several applications.

diff --git a/addons/point_of_sale/static/src/css/pos.css b/addons/point_of_sale/static/src/css/pos.css index d9a4d6d00a9..e328054aa28 100644 --- a/addons/point_of_sale/static/src/css/pos.css +++ b/addons/point_of_sale/static/src/css/pos.css @@ -291,10 +291,15 @@ display: inline-block; text-align: center; vertical-align: top; + width: 205px; + max-height: 232px; + overflow-y: auto; + overflow-x: hidden; } .point-of-sale #paypad button { height: 50px; - width: 208px; + display: block; + width: 100%; margin: 0px -6px 4px -2px; font-weight: bold; vertical-align: middle; @@ -302,6 +307,17 @@ border-top: 1px solid #efefef; font-size: 14px; } +.point-of-sale #paypad button, .point-of-sale #numpad button, .point-of-sale .popup button{ + position: relative; + top: 0; + -webkit-transition: top 150ms linear; + -moz-transition: top 150ms linear; + -ms-transition: top 150ms linear; + transition: top 150ms linear; +} +.point-of-sale #paypad button:active, .point-of-sale #numpad button:active, .point-of-sale .popup button:active{ + top:3px; +} .point-of-sale #paypad button:hover, .point-of-sale #numpad button:hover, .point-of-sale #numpad .selected-mode, .point-of-sale .popup button:hover { border: none; color: white; diff --git a/addons/point_of_sale/static/src/img/icons/png48/invoice.png b/addons/point_of_sale/static/src/img/icons/png48/invoice.png new file mode 100644 index 00000000000..e65d2ec5a67 Binary files /dev/null and b/addons/point_of_sale/static/src/img/icons/png48/invoice.png differ diff --git a/addons/point_of_sale/static/src/js/db.js b/addons/point_of_sale/static/src/js/db.js index e47ce66f648..d16ba5a53dd 100644 --- a/addons/point_of_sale/static/src/js/db.js +++ b/addons/point_of_sale/static/src/js/db.js @@ -267,11 +267,21 @@ function openerp_pos_db(instance, module){ return results; }, add_order: function(order){ - var last_id = this.load('last_order_id',0); + var order_id = order.uid; var orders = this.load('orders',[]); - orders.push({id: last_id + 1, data: order}); - this.save('last_order_id',last_id+1); + + // if the order was already stored, we overwrite its data + for(var i = 0, len = orders.length; i < len; i++){ + if(orders[i].id === order_id){ + orders[i].data = order; + this.save('orders',orders); + return order_id; + } + } + + orders.push({id: order_id, data: order}); this.save('orders',orders); + return order_id; }, remove_order: function(order_id){ var orders = this.load('orders',[]); @@ -283,5 +293,14 @@ function openerp_pos_db(instance, module){ get_orders: function(){ return this.load('orders',[]); }, + get_order: function(order_id){ + var orders = this.get_orders(); + for(var i = 0, len = orders.length; i < len; i++){ + if(orders[i].id === order_id){ + return orders[i]; + } + } + return undefined; + }, }); } diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js index 8cb88303dd1..8375377b31c 100644 --- a/addons/point_of_sale/static/src/js/models.js +++ b/addons/point_of_sale/static/src/js/models.js @@ -104,7 +104,6 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal return self.fetch('res.currency',['symbol','position','rounding','accuracy'],[['id','=',self.get('company').currency_id[0]]]); }).then(function(currencies){ - console.log('Currency:',currencies[0]); self.set('currency',currencies[0]); return self.fetch('product.uom', null, null); @@ -145,7 +144,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal ['name','journal_ids','warehouse_id','journal_id','pricelist_id', 'iface_self_checkout', 'iface_led', 'iface_cashdrawer', 'iface_payment_terminal', 'iface_electronic_scale', 'iface_barscan', 'iface_vkeyboard', - 'iface_print_via_proxy','iface_cashdrawer','state','sequence_id','session_ids'], + 'iface_print_via_proxy','iface_cashdrawer','iface_invoicing','state','sequence_id','session_ids'], [['id','=', self.get('pos_session').config_id[0]]] ); }).then(function(configs){ @@ -156,6 +155,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal self.iface_vkeyboard = !!pos_config.iface_vkeyboard; self.iface_self_checkout = !!pos_config.iface_self_checkout; self.iface_cashdrawer = !!pos_config.iface_cashdrawer; + self.iface_invoicing = !!pos_config.iface_invoicing; return self.fetch('stock.warehouse',[],[['id','=',pos_config.warehouse_id[0]]]); }).then(function(shops){ @@ -240,12 +240,6 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal } }, - // saves the order locally and try to send it to the backend. 'record' is a bizzarely defined JSON version of the Order - push_order: function(record) { - this.db.add_order(record); - this.flush(); - }, - //creates a new empty order and sets it as the current order add_new_order: function(){ var order = new module.Order({pos:this}); @@ -253,45 +247,161 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal this.set('selectedOrder', order); }, + // saves the order locally and try to send it to the backend. + // it returns a deferred that succeeds after having tried to send the order and all the other pending orders. + push_order: function(order) { + var self = this; + var order_id = this.db.add_order(order.export_as_JSON()); + var pushed = new $.Deferred(); + + this.set('nbr_pending_operations',self.db.get_orders().length); + + this.flush_mutex.exec(function(){ + var flushed = self._flush_all_orders(); + + flushed.always(function(){ + pushed.resolve(); + }); + + return flushed; + }); + return pushed; + }, + + // saves the order locally and try to send it to the backend and make an invoice + // returns a deferred that succeeds when the order has been posted and successfully generated + // an invoice. This method can fail in various ways: + // error-no-client: the order must have an associated partner_id. You can retry to make an invoice once + // this error is solved + // error-transfer: there was a connection error during the transfer. You can retry to make the invoice once + // the network connection is up + + push_and_invoice_order: function(order){ + var self = this; + var invoiced = new $.Deferred(); + + if(!order.get_client()){ + invoiced.reject('error-no-client'); + return invoiced; + } + + var order_id = this.db.add_order(order.export_as_JSON()); + + this.set('nbr_pending_operations',self.db.get_orders().length); + + this.flush_mutex.exec(function(){ + var done = new $.Deferred(); // holds the mutex + + // send the order to the server + // we have a 30 seconds timeout on this push. + // FIXME: if the server takes more than 30 seconds to accept the order, + // the client will believe it wasn't successfully sent, and very bad + // things will happen as a duplicate will be sent next time + // so we must make sure the server detects and ignores duplicated orders + + var transfer = self._flush_order(order_id, {timeout:30000, to_invoice:true}); + + transfer.fail(function(){ + invoiced.reject('error-transfer'); + done.reject(); + }); + + // on success, get the order id generated by the server + transfer.pipe(function(order_server_id){ + // generate the pdf and download it + self.pos_widget.do_action('point_of_sale.pos_invoice_report',{additional_context:{ + active_ids:order_server_id, + }}); + invoiced.resolve(); + done.resolve(); + }); + + return done; + + }); + + return invoiced; + }, + // attemps to send all pending orders ( stored in the pos_db ) to the server, // and remove the successfully sent ones from the db once // it has been confirmed that they have been sent correctly. flush: function() { - //TODO make the mutex work - //this makes sure only one _int_flush is called at the same time - /* - return this.flush_mutex.exec(_.bind(function() { - return this._flush(0); - }, this)); - */ - this._flush(0); + var self = this; + var flushed = new $.Deferred(); + + this.flush_mutex.exec(function(){ + var done = new $.Deferred(); + + self._flush_all_orders() + .done( function(){ flushed.resolve();}) + .fail( function(){ flushed.reject(); }) + .always(function(){ done.resolve(); }); + + return done; + }); + + return flushed; }, - // attempts to send an order of index 'index' in the list of order to send. The index - // is used to skip orders that failed. do not call this method outside the mutex provided - // by flush() - _flush: function(index){ + + // attempts to send the locally stored order of id 'order_id' + // the sending is asynchronous and can take some time to decide if it is successful or not + // it is therefore important to only call this method from inside a mutex + // this method returns a deferred indicating wether the sending was successful or not + // there is a timeout parameter which is set to 2 seconds by default. + _flush_order: function(order_id, options){ + var self = this; + options = options || {}; + timeout = typeof options.timeout === 'number' ? options.timeout : 5000; + + var order = this.db.get_order(order_id); + order.to_invoice = options.to_invoice || false; + + if(!order){ + // flushing a non existing order always fails + return (new $.Deferred()).reject(); + } + + // we try to send the order. shadow prevents a spinner if it takes too long. (unless we are sending an invoice, + // then we want to notify the user that we are waiting on something ) + var rpc = (new instance.web.Model('pos.order')).call('create_from_ui',[[order]],undefined,{shadow: !options.to_invoice, timeout:timeout}); + + rpc.fail(function(unused,event){ + // prevent an error popup creation by the rpc failure + // we want the failure to be silent as we send the orders in the background + event.preventDefault(); + console.error('Failed to send order:',order); + }); + + rpc.done(function(){ + self.db.remove_order(order_id); + self.set('nbr_pending_operations',self.db.get_orders().length); + }); + + return rpc; + }, + + // attempts to send all the locally stored orders. As with _flush_order, it should only be + // called from within a mutex. + // this method returns a deferred that always succeeds when all orders have been tried to be sent, + // even if none of them could actually be sent. + _flush_all_orders: function(){ var self = this; var orders = this.db.get_orders(); - self.set('nbr_pending_operations',orders.length); + var tried_all = new $.Deferred(); - var order = orders[index]; - if(!order){ - return; + function rec_flush(index){ + if(index < orders.length){ + self._flush_order(orders[index].id).always(function(){ + rec_flush(index+1); + }) + }else{ + tried_all.resolve(); + } } - //try to push an order to the server - // shadow : true is to prevent a spinner to appear in case of timeout - (new instance.web.Model('pos.order')).call('create_from_ui',[[order]],undefined,{ shadow:true }) - .fail(function(unused, event){ - //don't show error popup if it fails - event.preventDefault(); - console.error('Failed to send order:',order); - self._flush(index+1); - }) - .done(function(){ - //remove from db if success - self.db.remove_order(order.id); - self._flush(index); - }); + rec_flush(0); + + return tried_all; }, scan_product: function(parsed_ean){ @@ -590,11 +700,12 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal module.Order = Backbone.Model.extend({ initialize: function(attributes){ Backbone.Model.prototype.initialize.apply(this, arguments); + this.uid = this.generateUniqueId(); this.set({ creationDate: new Date(), orderLines: new module.OrderlineCollection(), paymentLines: new module.PaymentlineCollection(), - name: "Order " + this.generateUniqueId(), + name: "Order " + this.uid, client: null, }); this.pos = attributes.pos; @@ -770,7 +881,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal currency: this.pos.get('currency'), }; }, - exportAsJSON: function() { + export_as_JSON: function() { var orderLines, paymentLines; orderLines = []; (this.get('orderLines')).each(_.bind( function(item) { @@ -789,8 +900,9 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal lines: orderLines, statement_ids: paymentLines, pos_session_id: this.pos.get('pos_session').id, - partner_id: this.pos.get('client') ? this.pos.get('client').id : undefined, + partner_id: this.get_client() ? this.get_client().id : false, user_id: this.pos.get('cashier') ? this.pos.get('cashier').id : this.pos.get('user').id, + uid: this.uid, }; }, getSelectedLine: function(){ diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js index 7a01732c353..e0a8ba4b71c 100644 --- a/addons/point_of_sale/static/src/js/screens.js +++ b/addons/point_of_sale/static/src/js/screens.js @@ -434,6 +434,14 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa template:'ErrorNegativePricePopupWidget', }); + module.ErrorNoClientPopupWidget = module.ErrorPopupWidget.extend({ + template: 'ErrorNoClientPopupWidget', + }); + + module.ErrorInvoiceTransferPopupWidget = module.ErrorPopupWidget.extend({ + template: 'ErrorInvoiceTransferPopupWidget', + }); + module.ScaleInviteScreenWidget = module.ScreenWidget.extend({ template:'ScaleInviteScreenWidget', @@ -452,7 +460,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa clearInterval(this.intervalID); self.pos_widget.screen_selector.set_current_screen(self.next_screen); } - },500); + },100); this.add_action_button({ label: _t('Back'), @@ -507,7 +515,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa self.weight = weight; self.renderElement(); } - },200); + },100); }, renderElement: function(){ var self = this; @@ -640,7 +648,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa var cashregister = selfCheckoutRegisters[0] || self.pos.get('cashRegisters').models[0]; currentOrder.addPaymentLine(cashregister); - self.pos.push_order(currentOrder.exportAsJSON()) + self.pos.push_order(currentOrder) currentOrder.destroy(); self.pos.proxy.transaction_end(); self.pos_widget.screen_selector.set_current_screen(self.next_screen); @@ -808,19 +816,42 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa this._super(); var self = this; - this.add_action_button({ + var print_button = this.add_action_button({ label: _t('Print'), icon: '/point_of_sale/static/src/img/icons/png48/printer.png', click: function(){ self.print(); }, }); - this.add_action_button({ + var finish_button = this.add_action_button({ label: _t('Next Order'), icon: '/point_of_sale/static/src/img/icons/png48/go-next.png', click: function() { self.finishOrder(); }, }); window.print(); + + // THIS IS THE HACK OF THE CENTURY + // + // The problem is that in chrome the print() is asynchronous and doesn't + // execute until all rpc are finished. So it conflicts with the rpc used + // to send the orders to the backend, and the user is able to go to the next + // screen before the printing dialog is opened. The problem is that what's + // printed is whatever is in the page when the dialog is opened and not when it's called, + // and so you end up printing the product list instead of the receipt... + // + // Fixing this would need a re-architecturing + // of the code to postpone sending of orders after printing. + // + // But since the print dialog also blocks the other asynchronous calls, the + // button enabling in the setTimeout() is blocked until the printing dialog is + // closed. But the timeout has to be big enough or else it doesn't work + // 2 seconds is the same as the default timeout for sending orders and so the dialog + // should have appeared before the timeout... so yeah that's not ultra reliable. + + finish_button.set_disabled(true); + setTimeout(function(){ + finish_button.set_disabled(false); + }, 2000); }, print: function() { window.print(); @@ -870,15 +901,15 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa this.set_numpad_state(this.pos_widget.numpad.state); - this.back_button = this.add_action_button({ + this.add_action_button({ label: _t('Back'), icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png', click: function(){ self.pos_widget.screen_selector.set_current_screen(self.back_screen); }, }); - - this.validate_button = this.add_action_button({ + + this.add_action_button({ label: _t('Validate'), name: 'validation', icon: '/point_of_sale/static/src/img/icons/png48/validate.png', @@ -886,6 +917,17 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa self.validateCurrentOrder(); }, }); + + if(this.pos.iface_invoicing){ + this.add_action_button({ + label: 'Invoice', + name: 'invoice', + icon: '/point_of_sale/static/src/img/icons/png48/invoice.png', + click: function(){ + self.validateCurrentOrder({invoice: true}); + }, + }); + } this.updatePaymentSummary(); this.line_refocus(); @@ -898,15 +940,44 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa back: function() { this.pos_widget.screen_selector.set_current_screen(self.back_screen); }, - validateCurrentOrder: function() { + validateCurrentOrder: function(options) { + var self = this; + options = options || {}; + var currentOrder = this.pos.get('selectedOrder'); - this.pos.push_order(currentOrder.exportAsJSON()) - if(this.pos.iface_print_via_proxy){ - this.pos.proxy.print_receipt(currentOrder.export_for_printing()); - this.pos.get('selectedOrder').destroy(); //finish order and go back to scan screen + + if(options.invoice){ + // deactivate the validation button while we try to send the order + this.pos_widget.action_bar.set_button_disabled('validation',true); + this.pos_widget.action_bar.set_button_disabled('invoice',true); + + var invoiced = this.pos.push_and_invoice_order(currentOrder); + + invoiced.fail(function(error){ + if(error === 'error-no-client'){ + self.pos_widget.screen_selector.show_popup('error-no-client'); + }else{ + self.pos_widget.screen_selector.show_popup('error-invoice-transfer'); + } + self.pos_widget.action_bar.set_button_disabled('validation',false); + self.pos_widget.action_bar.set_button_disabled('invoice',false); + }); + + invoiced.done(function(){ + self.pos_widget.action_bar.set_button_disabled('validation',false); + self.pos_widget.action_bar.set_button_disabled('invoice',false); + self.pos.get('selectedOrder').destroy(); + }); + }else{ - this.pos_widget.screen_selector.set_current_screen(this.next_screen); + this.pos.push_order(currentOrder) + if(this.pos.iface_print_via_proxy){ + this.pos.proxy.print_receipt(currentOrder.export_for_printing()); + this.pos.get('selectedOrder').destroy(); //finish order and go back to scan screen + }else{ + this.pos_widget.screen_selector.set_current_screen(this.next_screen); + } } }, bindPaymentLineEvents: function() { @@ -985,6 +1056,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa if(this.pos_widget.action_bar){ this.pos_widget.action_bar.set_button_disabled('validation', remaining > 0.000001); + this.pos_widget.action_bar.set_button_disabled('invoice', remaining > 0.000001); } }, set_numpad_state: function(numpadState) { diff --git a/addons/point_of_sale/static/src/js/widgets.js b/addons/point_of_sale/static/src/js/widgets.js index 5d56943de73..911d8cd321b 100644 --- a/addons/point_of_sale/static/src/js/widgets.js +++ b/addons/point_of_sale/static/src/js/widgets.js @@ -838,6 +838,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa instance.web.blockUI(); this.pos = new module.PosModel(this.session); + this.pos.pos_widget = this; this.pos_widget = this; //So that pos_widget's childs have pos_widget set automatically this.numpad_visible = true; @@ -952,6 +953,12 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa this.error_negative_price_popup = new module.ErrorNegativePricePopupWidget(this, {}); this.error_negative_price_popup.appendTo($('.point-of-sale')); + this.error_no_client_popup = new module.ErrorNoClientPopupWidget(this, {}); + this.error_no_client_popup.appendTo($('.point-of-sale')); + + this.error_invoice_transfer_popup = new module.ErrorInvoiceTransferPopupWidget(this, {}); + this.error_invoice_transfer_popup.appendTo($('.point-of-sale')); + // -------- Misc --------- this.notification = new module.SynchNotificationWidget(this,{}); @@ -1013,6 +1020,8 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa 'error-session': this.error_session_popup, 'error-negative-price': this.error_negative_price_popup, 'choose-receipt': this.choose_receipt_popup, + 'error-no-client': this.error_no_client_popup, + 'error-invoice-transfer': this.error_invoice_transfer_popup, }, default_client_screen: 'welcome', default_cashier_screen: 'products', diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml index 3da76ec12d8..e28ea1c06b0 100644 --- a/addons/point_of_sale/static/src/xml/pos.xml +++ b/addons/point_of_sale/static/src/xml/pos.xml @@ -336,11 +336,11 @@ - @@ -361,6 +361,33 @@ + + + + + + + + diff --git a/addons/project_long_term/i18n/zh_CN.po b/addons/project_long_term/i18n/zh_CN.po index 33cddc0123b..4f553f15cfe 100644 --- a/addons/project_long_term/i18n/zh_CN.po +++ b/addons/project_long_term/i18n/zh_CN.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2013-07-07 04:44+0000\n" +"PO-Revision-Date: 2013-07-14 03:57+0000\n" "Last-Translator: Alan \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-07-08 05:25+0000\n" +"X-Launchpad-Export-Date: 2013-07-15 04:51+0000\n" "X-Generator: Launchpad (build 16696)\n" #. module: project_long_term @@ -41,7 +41,7 @@ msgstr "阶段" #: view:project.phase:0 #: view:project.user.allocation:0 msgid "Team Planning" -msgstr "" +msgstr "项目团队计划" #. module: project_long_term #: field:project.phase,user_ids:0 diff --git a/addons/purchase/static/description/index.html b/addons/purchase/static/description/index.html index 67b122ac557..ecf9028ce33 100644 --- a/addons/purchase/static/description/index.html +++ b/addons/purchase/static/description/index.html @@ -17,7 +17,7 @@ Automate procurement propositions, launch request for quotations, track purchase orders, manage suppliers' information, control products reception and check suppliers' invoices.

diff --git a/addons/sale/static/description/index.html b/addons/sale/static/description/index.html index 1eb6215db2f..52c84b82f12 100644 --- a/addons/sale/static/description/index.html +++ b/addons/sale/static/description/index.html @@ -17,7 +17,7 @@ you need, easily accessible. Keep track of long term contracts, automate invoici and notify sales when they have things to do.

diff --git a/addons/stock/static/description/index.html b/addons/stock/static/description/index.html index aac71e529ae..dd7fbe568f7 100644 --- a/addons/stock/static/description/index.html +++ b/addons/stock/static/description/index.html @@ -17,7 +17,7 @@ Decrease your process times, automate transactions, reduce your stock levels and get complete traceability on all operations with the OpenERP double entry inventory system.