[MERGE] lp:~openerp-dev/openobject-addons/trunk-pos-fva
bzr revid: stw@openerp.com-20120504131853-rip17dks4fjxzwbp
This commit is contained in:
commit
0f8529cb36
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
|
||||
"PO-Revision-Date: 2012-04-28 01:14+0000\n"
|
||||
"PO-Revision-Date: 2012-05-02 18:40+0000\n"
|
||||
"Last-Translator: Akira Hiyama <Unknown>\n"
|
||||
"Language-Team: Japanese <ja@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-04-29 04:45+0000\n"
|
||||
"X-Generator: Launchpad (build 15149)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-03 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 15185)\n"
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice.report:0
|
||||
|
@ -8071,7 +8071,7 @@ msgstr "税金はパーセンテージタイプのため、0から1の間の%比
|
|||
#. module: account
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Current Accounts"
|
||||
msgstr "現在のアカウント"
|
||||
msgstr "当座預金"
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice.report:0
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
|
||||
"PO-Revision-Date: 2012-03-27 01:25+0000\n"
|
||||
"PO-Revision-Date: 2012-05-03 02:11+0000\n"
|
||||
"Last-Translator: Jeff Wang <wjfonhand@hotmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-03-28 04:45+0000\n"
|
||||
"X-Generator: Launchpad (build 15027)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-03 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 15185)\n"
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice.report:0
|
||||
|
@ -1811,7 +1811,7 @@ msgstr "基于"
|
|||
#: field:account.invoice,move_id:0
|
||||
#: field:account.invoice,move_name:0
|
||||
msgid "Journal Entry"
|
||||
msgstr "账簿的分录"
|
||||
msgstr "会计凭证"
|
||||
|
||||
#. module: account
|
||||
#: view:account.tax:0
|
||||
|
@ -4663,7 +4663,7 @@ msgstr "税适用"
|
|||
#: model:ir.ui.menu,name:account.menu_eaction_account_moves_sale
|
||||
#, python-format
|
||||
msgid "Journal Items"
|
||||
msgstr "账簿明细"
|
||||
msgstr "会计凭证行"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account.py:1088
|
||||
|
@ -6492,7 +6492,7 @@ msgstr "当前期间凭证列表"
|
|||
msgid ""
|
||||
"Check this box if you want to allow the cancellation the entries related to "
|
||||
"this journal or of the invoice related to this journal"
|
||||
msgstr "勾选这里,则此凭证簿下的亏即凭证或发票可以被作废。"
|
||||
msgstr "勾选这里,则此凭证簿下的会计凭证或发票可以被作废。"
|
||||
|
||||
#. module: account
|
||||
#: view:account.fiscalyear.close:0
|
||||
|
@ -6614,7 +6614,7 @@ msgstr "如果你选择了按日期或期间筛选,可以用这个字段按所
|
|||
#: model:ir.ui.menu,name:account.menu_action_move_journal_line_form
|
||||
#: model:ir.ui.menu,name:account.menu_finance_entries
|
||||
msgid "Journal Entries"
|
||||
msgstr "账簿的分录"
|
||||
msgstr "会计凭证"
|
||||
|
||||
#. module: account
|
||||
#: help:account.partner.ledger,page_split:0
|
||||
|
@ -7588,7 +7588,7 @@ msgstr "销售科目类型"
|
|||
#. module: account
|
||||
#: help:account.invoice,move_id:0
|
||||
msgid "Link to the automatically generated Journal Items."
|
||||
msgstr "链接到自动生成的账簿明细。"
|
||||
msgstr "链接到自动生成的会计凭证行"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.installer,period:0
|
||||
|
|
|
@ -0,0 +1,793 @@
|
|||
# Finnish translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
|
||||
"PO-Revision-Date: 2012-04-30 07:58+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Finnish <fi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-01 05:29+0000\n"
|
||||
"X-Generator: Launchpad (build 15171)\n"
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Assets in draft and open states"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.category,method_end:0
|
||||
#: field:account.asset.history,method_end:0 field:asset.modify,method_end:0
|
||||
msgid "Ending date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,value_residual:0
|
||||
msgid "Residual Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.category,account_expense_depreciation_id:0
|
||||
msgid "Depr. Expense Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.depreciation.confirmation.wizard:0
|
||||
msgid "Compute Asset"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:asset.asset.report,gross_value:0
|
||||
msgid "Gross Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0 field:account.asset.asset,name:0
|
||||
#: field:account.asset.depreciation.line,asset_id:0
|
||||
#: field:account.asset.history,asset_id:0 field:account.move.line,asset_id:0
|
||||
#: view:asset.asset.report:0 field:asset.asset.report,asset_id:0
|
||||
#: model:ir.model,name:account_asset.model_account_asset_asset
|
||||
msgid "Asset"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.asset,prorata:0 help:account.asset.category,prorata:0
|
||||
msgid ""
|
||||
"Indicates that the first depreciation entry for this asset have to be done "
|
||||
"from the purchase date instead of the first January"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.history,name:0
|
||||
msgid "History name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,company_id:0
|
||||
#: field:account.asset.category,company_id:0 view:asset.asset.report:0
|
||||
#: field:asset.asset.report,company_id:0
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.modify:0
|
||||
msgid "Modify"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: selection:account.asset.asset,state:0 view:asset.asset.report:0
|
||||
#: selection:asset.asset.report,state:0
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.depreciation.line,amount:0
|
||||
msgid "Depreciation Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
#: model:ir.actions.act_window,name:account_asset.action_asset_asset_report
|
||||
#: model:ir.model,name:account_asset.model_asset_asset_report
|
||||
#: model:ir.ui.menu,name:account_asset.menu_action_asset_asset_report
|
||||
msgid "Assets Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:asset.modify,name:0
|
||||
msgid "Reason"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,method_progress_factor:0
|
||||
#: field:account.asset.category,method_progress_factor:0
|
||||
msgid "Degressive Factor"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list_normal
|
||||
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_list_normal
|
||||
msgid "Asset Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.depreciation.confirmation.wizard:0
|
||||
msgid ""
|
||||
"This wizard will post the depreciation lines of running assets that belong "
|
||||
"to the selected period."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,account_move_line_ids:0
|
||||
#: field:account.move.line,entry_ids:0
|
||||
#: model:ir.actions.act_window,name:account_asset.act_entries_open
|
||||
msgid "Entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
#: field:account.asset.asset,depreciation_line_ids:0
|
||||
msgid "Depreciation Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.asset,salvage_value:0
|
||||
msgid "It is the amount you plan to have that you cannot depreciate."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.depreciation.line,depreciation_date:0
|
||||
#: view:asset.asset.report:0 field:asset.asset.report,depreciation_date:0
|
||||
msgid "Depreciation Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.category,account_asset_id:0
|
||||
msgid "Asset Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:asset.asset.report,posted_value:0
|
||||
msgid "Posted Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0 view:asset.asset.report:0
|
||||
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_form
|
||||
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_form
|
||||
#: model:ir.ui.menu,name:account_asset.menu_finance_assets
|
||||
#: model:ir.ui.menu,name:account_asset.menu_finance_config_assets
|
||||
msgid "Assets"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.category,account_depreciation_id:0
|
||||
msgid "Depreciation Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0 view:account.asset.category:0
|
||||
#: view:account.asset.history:0 view:asset.modify:0 field:asset.modify,note:0
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.depreciation.line,move_id:0
|
||||
msgid "Depreciation Entry"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: sql_constraint:account.move.line:0
|
||||
msgid "Wrong credit or debit value in accounting entry !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0 field:asset.asset.report,nbr:0
|
||||
msgid "# of Depreciation Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Assets in draft state"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,method_end:0
|
||||
#: selection:account.asset.asset,method_time:0
|
||||
#: selection:account.asset.category,method_time:0
|
||||
#: selection:account.asset.history,method_time:0
|
||||
msgid "Ending Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,code:0
|
||||
msgid "Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: constraint:account.invoice:0
|
||||
msgid "Invalid BBA Structured Communication !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Account Asset"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.actions.act_window,name:account_asset.action_asset_depreciation_confirmation_wizard
|
||||
#: model:ir.ui.menu,name:account_asset.menu_asset_depreciation_confirmation_wizard
|
||||
msgid "Compute Assets"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.depreciation.line,sequence:0
|
||||
msgid "Sequence of the depreciation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,method_period:0
|
||||
#: field:account.asset.category,method_period:0
|
||||
#: field:account.asset.history,method_period:0
|
||||
#: field:asset.modify,method_period:0
|
||||
msgid "Period Length"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: selection:account.asset.asset,state:0 view:asset.asset.report:0
|
||||
#: selection:asset.asset.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Date of asset purchase"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.asset,method_number:0
|
||||
msgid "Calculates Depreciation within specified interval"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Change Duration"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.category,account_analytic_id:0
|
||||
msgid "Analytic account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,method:0 field:account.asset.category,method:0
|
||||
msgid "Computation Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.asset,method_period:0
|
||||
msgid "State here the time during 2 depreciations, in months"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: constraint:account.asset.asset:0
|
||||
msgid ""
|
||||
"Prorata temporis can be applied only for time method \"number of "
|
||||
"depreciations\"."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.history,method_time:0
|
||||
msgid ""
|
||||
"The method to use to compute the dates and number of depreciation lines.\n"
|
||||
"Number of Depreciations: Fix the number of depreciation lines and the time "
|
||||
"between 2 depreciations.\n"
|
||||
"Ending Date: Choose the time between 2 depreciations and the date the "
|
||||
"depreciations won't go beyond."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,purchase_value:0
|
||||
msgid "Gross value "
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: constraint:account.asset.asset:0
|
||||
msgid "Error ! You can not create recursive assets."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.history,method_period:0
|
||||
msgid "Time in month between two depreciations"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0 field:asset.asset.report,name:0
|
||||
msgid "Year"
|
||||
msgstr "Vuosi"
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.modify:0
|
||||
#: model:ir.actions.act_window,name:account_asset.action_asset_modify
|
||||
#: model:ir.model,name:account_asset.model_asset_modify
|
||||
msgid "Modify Asset"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Other Information"
|
||||
msgstr "Lisätiedot"
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,salvage_value:0
|
||||
msgid "Salvage Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.invoice.line,asset_category_id:0 view:asset.asset.report:0
|
||||
msgid "Asset Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Set to Close"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.actions.wizard,name:account_asset.wizard_asset_compute
|
||||
msgid "Compute assets"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.actions.wizard,name:account_asset.wizard_asset_modify
|
||||
msgid "Modify asset"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Assets in closed state"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,parent_id:0
|
||||
msgid "Parent Asset"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.history:0
|
||||
#: model:ir.model,name:account_asset.model_account_asset_history
|
||||
msgid "Asset history"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Assets purchased in current year"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,state:0 field:asset.asset.report,state:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.model,name:account_asset.model_account_invoice_line
|
||||
msgid "Invoice Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: constraint:account.move.line:0
|
||||
msgid ""
|
||||
"The selected account of your Journal Entry forces to provide a secondary "
|
||||
"currency. You should remove the secondary currency on the account or select "
|
||||
"a multi-currency view on the journal."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Depreciation Board"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.model,name:account_asset.model_account_move_line
|
||||
msgid "Journal Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:asset.asset.report,unposted_value:0
|
||||
msgid "Unposted Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,method_time:0
|
||||
#: field:account.asset.category,method_time:0
|
||||
#: field:account.asset.history,method_time:0
|
||||
msgid "Time Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.category:0
|
||||
msgid "Analytic information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.modify:0
|
||||
msgid "Asset durations to modify"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: constraint:account.move.line:0
|
||||
msgid ""
|
||||
"The date of your Journal Entry is not in the defined period! You should "
|
||||
"change the date or remove this constraint from the journal."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,note:0 field:account.asset.category,note:0
|
||||
#: field:account.asset.history,note:0
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.asset,method:0 help:account.asset.category,method:0
|
||||
msgid ""
|
||||
"Choose the method to use to compute the amount of depreciation lines.\n"
|
||||
" * Linear: Calculated on basis of: Gross Value / Number of Depreciations\n"
|
||||
" * Degressive: Calculated on basis of: Remaining Value * Degressive Factor"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.asset,method_time:0
|
||||
#: help:account.asset.category,method_time:0
|
||||
msgid ""
|
||||
"Choose the method to use to compute the dates and number of depreciation "
|
||||
"lines.\n"
|
||||
" * Number of Depreciations: Fix the number of depreciation lines and the "
|
||||
"time between 2 depreciations.\n"
|
||||
" * Ending Date: Choose the time between 2 depreciations and the date the "
|
||||
"depreciations won't go beyond."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Assets in running state"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Closed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,partner_id:0
|
||||
#: field:asset.asset.report,partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0 field:asset.asset.report,depreciation_value:0
|
||||
msgid "Amount of Depreciation Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Posted depreciation lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: constraint:account.move.line:0
|
||||
msgid "Company must be the same for its related account and period."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,child_ids:0
|
||||
msgid "Children Assets"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Date of depreciation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.history,user_id:0
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.history,date:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Assets purchased in current month"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: constraint:account.move.line:0
|
||||
msgid "You can not create journal items on an account of type view."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Extended Filters..."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0 view:asset.depreciation.confirmation.wizard:0
|
||||
msgid "Compute"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.category:0
|
||||
msgid "Search Asset Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.model,name:account_asset.model_asset_depreciation_confirmation_wizard
|
||||
msgid "asset.depreciation.confirmation.wizard"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.actions.wizard,name:account_asset.wizard_asset_close
|
||||
msgid "Close asset"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.depreciation.line,parent_state:0
|
||||
msgid "State of Asset"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.depreciation.line,name:0
|
||||
msgid "Depreciation Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0 field:account.asset.asset,history_ids:0
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: sql_constraint:account.invoice:0
|
||||
msgid "Invoice Number must be unique per Company!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:asset.depreciation.confirmation.wizard,period_id:0
|
||||
msgid "Period"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,prorata:0 field:account.asset.category,prorata:0
|
||||
msgid "Prorata Temporis"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.category:0
|
||||
msgid "Accounting information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.model,name:account_asset.model_account_invoice
|
||||
msgid "Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_form_normal
|
||||
msgid "Review Asset Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.depreciation.confirmation.wizard:0 view:asset.modify:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: selection:account.asset.asset,state:0 selection:asset.asset.report,state:0
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0 view:account.asset.category:0
|
||||
msgid "Depreciation Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,purchase_date:0 view:asset.asset.report:0
|
||||
#: field:asset.asset.report,purchase_date:0
|
||||
msgid "Purchase Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: selection:account.asset.asset,method:0
|
||||
#: selection:account.asset.category,method:0
|
||||
msgid "Degressive"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:asset.depreciation.confirmation.wizard,period_id:0
|
||||
msgid ""
|
||||
"Choose the period for which you want to automatically post the depreciation "
|
||||
"lines of running assets"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.depreciation.line,remaining_value:0
|
||||
msgid "Amount to Depreciate"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.category,open_asset:0
|
||||
msgid "Skip Draft State"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0 view:account.asset.category:0
|
||||
#: view:account.asset.history:0
|
||||
msgid "Depreciation Dates"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,currency_id:0
|
||||
msgid "Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.category,journal_id:0
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.depreciation.line,depreciated_value:0
|
||||
msgid "Amount Already Depreciated"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.depreciation.line,move_check:0
|
||||
#: view:asset.asset.report:0 field:asset.asset.report,move_check:0
|
||||
msgid "Posted"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.asset,state:0
|
||||
msgid ""
|
||||
"When an asset is created, the state is 'Draft'.\n"
|
||||
"If the asset is confirmed, the state goes in 'Running' and the depreciation "
|
||||
"lines can be posted in the accounting.\n"
|
||||
"You can manually close an asset when the depreciation is over. If the last "
|
||||
"line of depreciation is posted, the asset automatically goes in that state."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.category,name:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.category,open_asset:0
|
||||
msgid ""
|
||||
"Check this if you want to automatically confirm the assets of this category "
|
||||
"when created by invoices."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Set to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: selection:account.asset.asset,method:0
|
||||
#: selection:account.asset.category,method:0
|
||||
msgid "Linear"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Month-1"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.model,name:account_asset.model_account_asset_depreciation_line
|
||||
msgid "Asset depreciation line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,category_id:0 view:account.asset.category:0
|
||||
#: field:asset.asset.report,asset_category_id:0
|
||||
#: model:ir.model,name:account_asset.model_account_asset_category
|
||||
msgid "Asset category"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.asset.report:0
|
||||
msgid "Assets purchased in last month"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: code:addons/account_asset/wizard/wizard_asset_compute.py:49
|
||||
#, python-format
|
||||
msgid "Created Asset Moves"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: constraint:account.move.line:0
|
||||
msgid "You can not create journal items on closed account."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.actions.act_window,help:account_asset.action_asset_asset_report
|
||||
msgid ""
|
||||
"From this report, you can have an overview on all depreciation. The tool "
|
||||
"search can also be used to personalise your Assets reports and so, match "
|
||||
"this analysis to your needs;"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: help:account.asset.category,method_period:0
|
||||
msgid "State here the time between 2 depreciations, in months"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: field:account.asset.asset,method_number:0
|
||||
#: selection:account.asset.asset,method_time:0
|
||||
#: field:account.asset.category,method_number:0
|
||||
#: selection:account.asset.category,method_time:0
|
||||
#: field:account.asset.history,method_number:0
|
||||
#: selection:account.asset.history,method_time:0
|
||||
#: field:asset.modify,method_number:0
|
||||
msgid "Number of Depreciations"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Create Move"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:asset.depreciation.confirmation.wizard:0
|
||||
msgid "Post Depreciation Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: view:account.asset.asset:0
|
||||
msgid "Confirm Asset"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_asset
|
||||
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_tree
|
||||
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_tree
|
||||
msgid "Asset Hierarchy"
|
||||
msgstr ""
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,355 @@
|
|||
# Japanese translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
|
||||
"PO-Revision-Date: 2012-05-02 03:38+0000\n"
|
||||
"Last-Translator: Tomomi Mengelberg <tomomi.mengelberg@aquasys.co.jp>\n"
|
||||
"Language-Team: Japanese <ja@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-03 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 15185)\n"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
msgid "Sub Total"
|
||||
msgstr "小計"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Note:"
|
||||
msgstr "備考:"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Cancelled Invoice"
|
||||
msgstr "請求書をキャンセルする。"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
#: field:notify.message,name:0
|
||||
msgid "Title"
|
||||
msgstr "タイトル"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Disc. (%)"
|
||||
msgstr "割引. (%)"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
msgid "Note"
|
||||
msgstr "備考"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: view:account.invoice.special.msg:0
|
||||
msgid "Print"
|
||||
msgstr "印刷"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: help:notify.message,msg:0
|
||||
msgid ""
|
||||
"This notification will appear at the bottom of the Invoices when printed."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Unit Price"
|
||||
msgstr "単価"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.model,name:account_invoice_layout.model_notify_message
|
||||
msgid "Notify By Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "VAT :"
|
||||
msgstr "消費税:"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Tel. :"
|
||||
msgstr "TEL:"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "PRO-FORMA"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: field:account.invoice,abstract_line_ids:0
|
||||
msgid "Invoice Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: view:account.invoice.line:0
|
||||
msgid "Seq."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.ui.menu,name:account_invoice_layout.menu_finan_config_notify_message
|
||||
msgid "Notification Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
msgid "Customer Code"
|
||||
msgstr "顧客コード"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Description"
|
||||
msgstr "詳細"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: help:account.invoice.line,sequence:0
|
||||
msgid "Gives the sequence order when displaying a list of invoice lines."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Price"
|
||||
msgstr "価格"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Invoice Date"
|
||||
msgstr "請求日"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
msgid "Taxes:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: field:account.invoice.line,functional_field:0
|
||||
msgid "Source Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.actions.act_window,name:account_invoice_layout.notify_mesage_tree_form
|
||||
msgid "Write Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Base"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
msgid "Page Break"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: view:notify.message:0
|
||||
#: field:notify.message,msg:0
|
||||
msgid "Special Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: help:account.invoice.special.msg,message:0
|
||||
msgid "Message to Print at the bottom of report"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Quantity"
|
||||
msgstr "数量"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Refund"
|
||||
msgstr "返金"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Fax :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
msgid "Total:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: view:account.invoice.special.msg:0
|
||||
msgid "Select Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: view:notify.message:0
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Description / Taxes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:notify.message,msg:account_invoice_layout.demo_message1
|
||||
msgid "ERP & CRM Solutions..."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Net Total :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Total :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Draft Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: field:account.invoice.line,sequence:0
|
||||
msgid "Sequence Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.model,name:account_invoice_layout.model_account_invoice_special_msg
|
||||
msgid "Account Invoice Special Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Origin"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: sql_constraint:account.invoice:0
|
||||
msgid "Invoice Number must be unique per Company!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
msgid "Separator Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Your Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Supplier Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.actions.report.xml,name:account_invoice_layout.account_invoices_1
|
||||
msgid "Invoices"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: constraint:account.invoice:0
|
||||
msgid "Invalid BBA Structured Communication !"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Tax"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.model,name:account_invoice_layout.model_account_invoice_line
|
||||
msgid "Invoice Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
msgid "Net Total:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.actions.act_window,name:account_invoice_layout.action_account_invoice_special_msg
|
||||
#: model:ir.actions.report.xml,name:account_invoice_layout.account_invoices_layout_message
|
||||
msgid "Invoices and Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: field:account.invoice.line,state:0
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: view:notify.message:0
|
||||
msgid "Write a notification or a wishful message."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: model:ir.model,name:account_invoice_layout.model_account_invoice
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: view:account.invoice.special.msg:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:account.invoice.layout:0
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Supplier Refund"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: field:account.invoice.special.msg,message:0
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: report:notify_account.invoice:0
|
||||
msgid "Taxes :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.ui.menu,name:account_invoice_layout.menu_notify_mesage_tree_form
|
||||
msgid "All Notification Messages"
|
||||
msgstr ""
|
|
@ -28,55 +28,7 @@ from osv import fields, osv
|
|||
from tools.translate import _
|
||||
from lxml import etree
|
||||
|
||||
#Migrate data from another application Conf wiz
|
||||
|
||||
class migrade_application_installer_modules(osv.osv_memory):
|
||||
_name = 'migrade.application.installer.modules'
|
||||
_inherit = 'res.config.installer'
|
||||
_columns = {
|
||||
'import_saleforce': fields.boolean('Import Saleforce',
|
||||
help="For Import Saleforce"),
|
||||
'import_sugarcrm': fields.boolean('Import Sugarcrm',
|
||||
help="For Import Sugarcrm"),
|
||||
'sync_google_contact': fields.boolean('Sync Google Contact',
|
||||
help="For Sync Google Contact"),
|
||||
'quickbooks_ippids': fields.boolean('Quickbooks Ippids',
|
||||
help="For Quickbooks Ippids"),
|
||||
}
|
||||
|
||||
class product_installer(osv.osv_memory):
|
||||
_name = 'product.installer'
|
||||
_inherit = 'res.config'
|
||||
_columns = {
|
||||
'customers': fields.selection([('create','Create'), ('import','Import')], 'Customers', size=32, required=True, help="Import or create customers"),
|
||||
}
|
||||
_defaults = {
|
||||
'customers': 'create',
|
||||
}
|
||||
|
||||
def execute(self, cr, uid, ids, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
val = self.browse(cr, uid, ids, context=context)[0]
|
||||
if val.customers == 'create':
|
||||
id2 = data_obj._get_id(cr, uid, 'base', 'view_partner_form')
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
return {
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form',
|
||||
'res_model': 'res.partner',
|
||||
'views': [(id2, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'current',
|
||||
'nodestroy':False,
|
||||
}
|
||||
if val.customers == 'import':
|
||||
return {'type': 'ir.actions.act_window'}
|
||||
|
||||
# Define users preferences for new users (ir.values)
|
||||
|
||||
def _lang_get(self, cr, uid, context=None):
|
||||
obj = self.pool.get('res.lang')
|
||||
ids = obj.search(cr, uid, [('translatable','=',True)])
|
||||
|
@ -130,8 +82,7 @@ class user_preferences_config(osv.osv_memory):
|
|||
ir_values_obj.set(cr, uid, 'default', False, 'menu_tips', ['res.users'], o.menu_tips)
|
||||
return {}
|
||||
|
||||
# Specify Your Terminology
|
||||
|
||||
# Specify Your Terminology will move to 'partner' module
|
||||
class specify_partner_terminology(osv.osv_memory):
|
||||
_name = 'base.setup.terminology'
|
||||
_inherit = 'res.config'
|
||||
|
@ -201,12 +152,9 @@ class specify_partner_terminology(osv.osv_memory):
|
|||
self.make_translations(cr, uid, ids, act_ref, 'model', act_id.help, _case_insensitive_replace(act_id.help,'Customer',o.partner), res_id=act_id.id, context=context)
|
||||
return {}
|
||||
|
||||
|
||||
|
||||
# Preferences wizard for Sales & CRM.
|
||||
# It is defined here because it is inherited independently in modules sale, crm,
|
||||
# plugin_outlook and plugin_thunderbird.
|
||||
#
|
||||
class sale_config_settings(osv.osv_memory):
|
||||
_name = 'sale.config.settings'
|
||||
_inherit = 'res.config.settings'
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Define default users preferences-->
|
||||
<record id="view_user_preferences_config_form" model="ir.ui.view">
|
||||
<field name="name">Set default users preferences</field>
|
||||
|
@ -48,22 +47,6 @@
|
|||
<field name="type">once</field>
|
||||
</record>
|
||||
|
||||
<!-- Create Additional Users -->
|
||||
<record id="action_config_access_other_user" model="ir.actions.act_window">
|
||||
<field name="name">Create Additional Users</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.users</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
</record>
|
||||
<record id="config_wizard_action_config_user_form" model="ir.actions.todo">
|
||||
<field name="action_id" ref="action_config_access_other_user"/>
|
||||
<field name="category_id" ref="base.category_administration_config"/>
|
||||
<field name="sequence">1000</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Specify Your Terminology Config Wiz-->
|
||||
<record id="base_setup_terminology_form" model="ir.ui.view">
|
||||
<field name="name">Specify Your Terminology</field>
|
||||
|
@ -102,13 +85,6 @@
|
|||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
<!--
|
||||
<record id="config_action_partner_terminology_config_form" model="ir.actions.todo">
|
||||
<field name="action_id" ref="action_partner_terminology_config_form"/>
|
||||
<field name="category_id" ref="base.category_administration_config"/>
|
||||
<field name="type">once</field>
|
||||
</record>
|
||||
-->
|
||||
|
||||
<!-- Company config -->
|
||||
<record id="action_base_setup_company" model="ir.actions.act_window">
|
||||
|
@ -140,7 +116,6 @@
|
|||
<sheet layout="auto">
|
||||
<group>
|
||||
<group name="config_sale" colspan="4"/>
|
||||
|
||||
<!-- this part is necessary to allow the plugins to extend the view -->
|
||||
<field name="module_crm" invisible="1"/>
|
||||
<group name="config_fetchmail" colspan="4" attrs="{'invisible': [('module_crm','=',False)]}">
|
||||
|
@ -157,6 +132,7 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Sale config wizard -->
|
||||
<record id="base.action_sale_config" model="ir.actions.act_window">
|
||||
<field name="name">Configure Sales</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
|
|
|
@ -0,0 +1,202 @@
|
|||
# Gujarati translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-05-02 19:35+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Gujarati <gu@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-03 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 15185)\n"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.questionnaire:0
|
||||
msgid "Questions List"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.actions.act_window,help:crm_profiling.open_questionnaires
|
||||
msgid ""
|
||||
"You can create specific topic-related questionnaires to guide your team(s) "
|
||||
"in the sales cycle by helping them to ask the right questions. The "
|
||||
"segmentation tool allows you to automatically assign a partner to a category "
|
||||
"according to his answers to the different questionnaires."
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm_profiling.answer,question_id:0
|
||||
#: field:crm_profiling.question,name:0
|
||||
#: model:ir.model,name:crm_profiling.model_crm_profiling_question
|
||||
#: field:open.questionnaire.line,question_id:0
|
||||
msgid "Question"
|
||||
msgstr "પ્રશ્ન"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.actions.act_window,name:crm_profiling.action_open_questionnaire
|
||||
#: view:open.questionnaire:0
|
||||
msgid "Open Questionnaire"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,child_ids:0
|
||||
msgid "Child Profiles"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm.segmentation:0
|
||||
msgid "Partner Segmentations"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm_profiling.answer,name:0
|
||||
#: model:ir.model,name:crm_profiling.model_crm_profiling_answer
|
||||
#: field:open.questionnaire.line,answer_id:0
|
||||
msgid "Answer"
|
||||
msgstr "જવાબ"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_open_questionnaire_line
|
||||
msgid "open.questionnaire.line"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_crm_segmentation
|
||||
msgid "Partner Segmentation"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:res.partner:0
|
||||
msgid "Profiling"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.questionnaire:0
|
||||
#: field:crm_profiling.questionnaire,description:0
|
||||
msgid "Description"
|
||||
msgstr "વર્ણન"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,answer_no:0
|
||||
msgid "Excluded Answers"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.answer:0
|
||||
#: view:crm_profiling.question:0
|
||||
#: field:res.partner,answers_ids:0
|
||||
msgid "Answers"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_open_questionnaire
|
||||
msgid "open.questionnaire"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:open.questionnaire,questionnaire_id:0
|
||||
msgid "Questionnaire name"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:res.partner:0
|
||||
msgid "Use a questionnaire"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:open.questionnaire:0
|
||||
msgid "_Cancel"
|
||||
msgstr "રદ કરો (_C)"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:open.questionnaire,question_ans_ids:0
|
||||
msgid "Question / Answers"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.questionnaire:0
|
||||
#: model:ir.actions.act_window,name:crm_profiling.open_questionnaires
|
||||
#: model:ir.ui.menu,name:crm_profiling.menu_segm_questionnaire
|
||||
#: view:open.questionnaire:0
|
||||
msgid "Questionnaires"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: help:crm.segmentation,profiling_active:0
|
||||
msgid ""
|
||||
"Check this box if you want to use this tab as "
|
||||
"part of the segmentation rule. If not checked, "
|
||||
"the criteria beneath will be ignored"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: constraint:crm.segmentation:0
|
||||
msgid "Error ! You can not create recursive profiles."
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,profiling_active:0
|
||||
msgid "Use The Profiling Rules"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You cannot create recursive associated members."
|
||||
msgstr "ભૂલ! તમે પાસાના સંકળાયેલ સભ્યો નહિં બનાવી શકો."
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.question:0
|
||||
#: field:crm_profiling.question,answers_ids:0
|
||||
msgid "Avalaible answers"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,answer_yes:0
|
||||
msgid "Included Answers"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:crm_profiling.question:0
|
||||
#: field:crm_profiling.questionnaire,questions_ids:0
|
||||
#: model:ir.actions.act_window,name:crm_profiling.open_questions
|
||||
#: model:ir.ui.menu,name:crm_profiling.menu_segm_answer
|
||||
msgid "Questions"
|
||||
msgstr "પ્રશ્નો"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: field:crm.segmentation,parent_id:0
|
||||
msgid "Parent Profile"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:open.questionnaire:0
|
||||
msgid "Cancel"
|
||||
msgstr "રદ કરો"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: model:ir.model,name:crm_profiling.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr "ભાગીદાર"
|
||||
|
||||
#. module: crm_profiling
|
||||
#: code:addons/crm_profiling/wizard/open_questionnaire.py:77
|
||||
#: field:crm_profiling.questionnaire,name:0
|
||||
#: model:ir.model,name:crm_profiling.model_crm_profiling_questionnaire
|
||||
#: view:open.questionnaire:0
|
||||
#: view:open.questionnaire.line:0
|
||||
#: field:open.questionnaire.line,wizard_id:0
|
||||
#, python-format
|
||||
msgid "Questionnaire"
|
||||
msgstr ""
|
||||
|
||||
#. module: crm_profiling
|
||||
#: view:open.questionnaire:0
|
||||
msgid "Save Data"
|
||||
msgstr ""
|
|
@ -0,0 +1,270 @@
|
|||
# Gujarati translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-05-02 19:34+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Gujarati <gu@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-03 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 15185)\n"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,wage:0
|
||||
msgid "Wage"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Information"
|
||||
msgstr "માહિતી"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Trial Period"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,trial_date_start:0
|
||||
msgid "Trial Start Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.employee:0
|
||||
msgid "Medical Examination"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,vehicle:0
|
||||
msgid "Company Vehicle"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.employee:0
|
||||
msgid "Miscellaneous"
|
||||
msgstr "પરચૂરણ"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Current"
|
||||
msgstr "વર્તમાન"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Group By..."
|
||||
msgstr "ગ્રુપ દ્વારા..."
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,department_id:0
|
||||
msgid "Department"
|
||||
msgstr "વિભાગ"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Overpassed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,employee_id:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_employee
|
||||
msgid "Employee"
|
||||
msgstr "કર્મચારી"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Search Contract"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Contracts in progress"
|
||||
msgstr "ચાલુ કરારો"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,vehicle_distance:0
|
||||
msgid "Home-Work Distance"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.employee,contract_ids:0
|
||||
#: model:ir.actions.act_window,name:hr_contract.act_hr_employee_2_hr_contract
|
||||
#: model:ir.actions.act_window,name:hr_contract.action_hr_contract
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract
|
||||
msgid "Contracts"
|
||||
msgstr "કરારો"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.employee:0
|
||||
msgid "Personal Info"
|
||||
msgstr "ખાનગી જાણકારી"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Contracts whose end date already passed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.employee,contract_id:0
|
||||
msgid "Latest contract of the employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Job"
|
||||
msgstr "કાર્ય"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,advantages:0
|
||||
msgid "Advantages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Valid for"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Work Permit"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,children:0
|
||||
msgid "Number of Children"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: model:ir.actions.act_window,name:hr_contract.action_hr_contract_type
|
||||
#: model:ir.ui.menu,name:hr_contract.hr_menu_contract_type
|
||||
msgid "Contract Types"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: constraint:hr.employee:0
|
||||
msgid "Error ! You cannot create recursive Hierarchy of Employees."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,date_end:0
|
||||
msgid "End Date"
|
||||
msgstr "અંતિમ તારીખ"
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.contract,wage:0
|
||||
msgid "Basic Salary of the employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,name:0
|
||||
msgid "Contract Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: help:hr.employee,vehicle_distance:0
|
||||
msgid "In kilometers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,notes:0
|
||||
msgid "Notes"
|
||||
msgstr "નોંધ"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,permit_no:0
|
||||
msgid "Work Permit No"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.employee,contract_id:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_contract
|
||||
#: model:ir.ui.menu,name:hr_contract.next_id_56
|
||||
msgid "Contract"
|
||||
msgstr "કરાર"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,type_id:0
|
||||
#: view:hr.contract.type:0
|
||||
#: field:hr.contract.type,name:0
|
||||
#: model:ir.model,name:hr_contract.model_hr_contract_type
|
||||
msgid "Contract Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
#: field:hr.contract,working_hours:0
|
||||
msgid "Working Schedule"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.employee:0
|
||||
msgid "Job Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,visa_expire:0
|
||||
msgid "Visa Expire Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,job_id:0
|
||||
msgid "Job Title"
|
||||
msgstr "નોકરી શીર્ષક"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,manager:0
|
||||
msgid "Is a Manager"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,date_start:0
|
||||
msgid "Start Date"
|
||||
msgstr "શરુઆતની તારીખ"
|
||||
|
||||
#. module: hr_contract
|
||||
#: constraint:hr.contract:0
|
||||
msgid "Error! contract start-date must be lower then contract end-date."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,visa_no:0
|
||||
msgid "Visa No"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,place_of_birth:0
|
||||
msgid "Place of Birth"
|
||||
msgstr "જન્મનું સ્થાન"
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract:0
|
||||
msgid "Duration"
|
||||
msgstr "સમયગાળો"
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.employee,medic_exam:0
|
||||
msgid "Medical Examination Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: field:hr.contract,trial_date_end:0
|
||||
msgid "Trial End Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_contract
|
||||
#: view:hr.contract.type:0
|
||||
msgid "Search Contract Type"
|
||||
msgstr ""
|
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-04-18 07:31+0000\n"
|
||||
"PO-Revision-Date: 2012-05-02 02:17+0000\n"
|
||||
"Last-Translator: Tomomi Mengelberg <tomomi.mengelberg@aquasys.co.jp>\n"
|
||||
"Language-Team: Japanese <ja@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-04-19 04:38+0000\n"
|
||||
"X-Generator: Launchpad (build 15108)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-03 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 15185)\n"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: code:addons/import_sugarcrm/import_sugarcrm.py:1105
|
||||
|
@ -94,7 +94,7 @@ msgstr ""
|
|||
#: code:addons/import_sugarcrm/sugarsoap_services.py:23
|
||||
#, python-format
|
||||
msgid "Please install SOAP for python - ZSI-2.0-rc3.tar.gz - python-zci"
|
||||
msgstr "python SOAPをインストールしてください。"
|
||||
msgstr "Python SOAPをインストールしてください。- ZSI-2.0-rc3.tar.gz - python-zci"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: view:import.sugarcrm:0
|
||||
|
@ -240,6 +240,8 @@ msgid ""
|
|||
"Please install SOAP for python - ZSI-2.0-rc3.tar.gz from "
|
||||
"http://pypi.python.org/pypi/ZSI/"
|
||||
msgstr ""
|
||||
"Python SOAPをインストールしてください。- ZSI-2.0-rc3.tar.gz from "
|
||||
"http://pypi.python.org/pypi/ZSI/"
|
||||
|
||||
#. module: import_sugarcrm
|
||||
#: help:import.sugarcrm,project:0
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
# Japanese translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-05-02 02:53+0000\n"
|
||||
"Last-Translator: Tomomi Mengelberg <tomomi.mengelberg@aquasys.co.jp>\n"
|
||||
"Language-Team: Japanese <ja@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-03 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 15185)\n"
|
||||
|
||||
#. module: pad_project
|
||||
#: constraint:project.task:0
|
||||
msgid "Error ! Task end-date must be greater then task start-date"
|
||||
msgstr "エラーです。 タスクの終了日は開始日以降の日付に設定しなければなりません。"
|
||||
|
||||
#. module: pad_project
|
||||
#: model:ir.model,name:pad_project.model_project_task
|
||||
msgid "Task"
|
||||
msgstr "タスク"
|
||||
|
||||
#. module: pad_project
|
||||
#: view:project.task:0
|
||||
msgid "Pad"
|
||||
msgstr "パッド"
|
||||
|
||||
#. module: pad_project
|
||||
#: constraint:project.task:0
|
||||
msgid "Error ! You cannot create recursive tasks."
|
||||
msgstr "エラーです。 再帰的なタスクを作成することはできません。"
|
|
@ -0,0 +1,74 @@
|
|||
# Japanese translation for openobject-addons
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-09 00:36+0000\n"
|
||||
"PO-Revision-Date: 2012-05-02 03:10+0000\n"
|
||||
"Last-Translator: Tomomi Mengelberg <tomomi.mengelberg@aquasys.co.jp>\n"
|
||||
"Language-Team: Japanese <ja@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-03 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 15185)\n"
|
||||
|
||||
#. module: plugin_outlook
|
||||
#: view:outlook.installer:0
|
||||
msgid ""
|
||||
"This plug-in allows you to create and link outlook emails with openerp "
|
||||
"objects."
|
||||
msgstr "このプラグインは、OpenERP オブジェストを使用してOutlookのメールを作成しリンクすることができます。"
|
||||
|
||||
#. module: plugin_outlook
|
||||
#: field:outlook.installer,name:0
|
||||
msgid "Outlook Plug-in"
|
||||
msgstr "Outlook プラグイン"
|
||||
|
||||
#. module: plugin_outlook
|
||||
#: model:ir.actions.act_window,name:plugin_outlook.action_outlook_installer
|
||||
#: model:ir.actions.act_window,name:plugin_outlook.action_outlook_wizard
|
||||
#: model:ir.ui.menu,name:plugin_outlook.menu_base_config_plugins_outlook
|
||||
#: view:outlook.installer:0
|
||||
msgid "Install Outlook Plug-In"
|
||||
msgstr "Outlook プラグインをインストールする。"
|
||||
|
||||
#. module: plugin_outlook
|
||||
#: field:outlook.installer,config_logo:0
|
||||
msgid "Image"
|
||||
msgstr "画像"
|
||||
|
||||
#. module: plugin_outlook
|
||||
#: view:outlook.installer:0
|
||||
msgid "title"
|
||||
msgstr "タイトル"
|
||||
|
||||
#. module: plugin_outlook
|
||||
#: model:ir.model,name:plugin_outlook.model_outlook_installer
|
||||
msgid "outlook.installer"
|
||||
msgstr "outlook.installer"
|
||||
|
||||
#. module: plugin_outlook
|
||||
#: view:outlook.installer:0
|
||||
msgid "_Close"
|
||||
msgstr "閉じる(_C)"
|
||||
|
||||
#. module: plugin_outlook
|
||||
#: view:outlook.installer:0
|
||||
msgid "Installation and Configuration Steps"
|
||||
msgstr "インストールと構成の手順"
|
||||
|
||||
#. module: plugin_outlook
|
||||
#: help:outlook.installer,name:0
|
||||
msgid ""
|
||||
"outlook plug-in file. Save as this file and install this plug-in in outlook."
|
||||
msgstr "outlook プラグインファイル. outlookでこのファイルを保存し、プラグインをインストールします。"
|
||||
|
||||
#. module: plugin_outlook
|
||||
#: field:outlook.installer,description:0
|
||||
msgid "Description"
|
||||
msgstr "説明"
|
|
@ -86,6 +86,7 @@ Main features :
|
|||
'static/src/js/pos_models.js',
|
||||
'static/src/js/pos_widgets.js',
|
||||
'static/src/js/pos_devices.js',
|
||||
'static/src/js/pos_screens.js',
|
||||
'static/src/js/pos_main.js'
|
||||
],
|
||||
'css': ['static/src/css/pos.css'],
|
||||
|
|
|
@ -510,7 +510,7 @@ body{
|
|||
list-style: none;
|
||||
}
|
||||
|
||||
.point-of-sale .pos-actionbar-left-region{
|
||||
.point-of-sale .pos-actionbar-left-pane{
|
||||
height: 100%;
|
||||
width: 434px;
|
||||
margin: 0px;
|
||||
|
@ -520,7 +520,7 @@ body{
|
|||
float: left;
|
||||
}
|
||||
|
||||
.point-of-sale .pos-actionbar-right-region{
|
||||
.point-of-sale .pos-actionbar-button-list{
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
padding-left:3px;
|
||||
|
@ -534,8 +534,6 @@ body{
|
|||
text-align:center;
|
||||
margin:3px;
|
||||
margin-top:6px;
|
||||
//line-height: 90px;
|
||||
//vertical-align:center;
|
||||
float:left;
|
||||
|
||||
font-size: 14px;
|
||||
|
|
|
@ -1,14 +1,145 @@
|
|||
|
||||
function openerp_pos_devices(module, instance){ //module is instance.point_of_sale
|
||||
|
||||
window.debug_devices = new (instance.web.Class.extend({
|
||||
payment_status: 'waiting_for_payment',
|
||||
weight: 0,
|
||||
accept_payment: function(){ this.payment_status = 'payment_accepted'; },
|
||||
reject_payment: function(){ this.payment_status = 'payment_rejected'; },
|
||||
delay_payment: function(){ this.payment_status = 'waiting_for_payment'; },
|
||||
}))();
|
||||
|
||||
// this object interfaces with the local proxy to communicate to the various hardware devices
|
||||
// connected to the Point of Sale. As the communication only goes from the POS to the proxy,
|
||||
// methods are used both to signal an event, and to fetch information.
|
||||
|
||||
module.ProxyDevice = instance.web.Class.extend({
|
||||
//a product has been scanned and recognized with success
|
||||
scan_item_succes: function(){
|
||||
console.log('PROXY: scan item success');
|
||||
},
|
||||
|
||||
//a product has been scanned but not recognized
|
||||
scan_item_error_unrecognized: function(){
|
||||
console.log('PROXY: scan item error');
|
||||
},
|
||||
|
||||
//the client is asking for help
|
||||
help_needed: function(){
|
||||
console.log('PROXY: help needed');
|
||||
},
|
||||
|
||||
//the client does not need help anymore
|
||||
help_canceled: function(){
|
||||
console.log('PROXY: help canceled');
|
||||
},
|
||||
|
||||
//the client is starting to weight
|
||||
weighting_start: function(){
|
||||
console.log('PROXY: weighting start');
|
||||
},
|
||||
|
||||
//returns the weight on the scale.
|
||||
// is called at regular interval (up to 10x/sec) between a weighting_start()
|
||||
// and a weighting_end()
|
||||
weighting_read_kg: function(){
|
||||
console.log('PROXY: weighting read');
|
||||
//return Math.random() + 0.1;
|
||||
return window.debug_devices.weight;
|
||||
},
|
||||
|
||||
// the client has finished weighting products
|
||||
weighting_end: function(){
|
||||
console.log('PROXY: weighting end');
|
||||
},
|
||||
|
||||
// the pos asks the client to pay 'price' units
|
||||
// method: 'mastercard' | 'cash' | ... ? TBD
|
||||
// info: 'extra information to display on the payment terminal' ... ? TBD
|
||||
payment_request: function(price, method, info){
|
||||
console.log('PROXY: payment request:',price,method,info);
|
||||
},
|
||||
|
||||
// is called at regular interval after a payment request to see if the client
|
||||
// has paid the required money
|
||||
// returns 'waiting_for_payment' | 'payment_accepted' | 'payment_rejected'
|
||||
is_payment_accepted: function(){
|
||||
console.log('PROXY: is payment accepted ?');
|
||||
//return 'waiting_for_payment'; // 'payment_accepted' | 'payment_rejected'
|
||||
return window.debug_devices.payment_status;
|
||||
},
|
||||
|
||||
// the client cancels his payment
|
||||
payment_canceled: function(){
|
||||
console.log('PROXY: payment canceled by client');
|
||||
},
|
||||
|
||||
// called when the client logs in or starts to scan product
|
||||
transation_start: function(){
|
||||
console.log('PROXY: transaction start');
|
||||
},
|
||||
|
||||
// called when the clients has finished his interaction with the machine
|
||||
transaction_end: function(){
|
||||
console.log('PROXY: transaction end');
|
||||
},
|
||||
|
||||
// called when the POS turns to cashier mode
|
||||
cashier_mode_activated: function(){
|
||||
console.log('PROXY:');
|
||||
},
|
||||
|
||||
// called when the POS turns to client mode
|
||||
cashier_mode_deactivated: function(){
|
||||
console.log('PROXY:');
|
||||
},
|
||||
});
|
||||
|
||||
// this module interfaces with the barcode reader. It assumes the barcode reader
|
||||
// is set-up to act like a keyboard. Use connect() and disconnect() to activate
|
||||
// and deactivate the barcode reader. Use set_action_callbacks to tell it
|
||||
// what to do when it reads a barcode.
|
||||
module.BarcodeReader = instance.web.Class.extend({
|
||||
|
||||
init: function(attributes){
|
||||
this.pos = attributes.pos;
|
||||
this.connect();
|
||||
this.action_callbacks = {
|
||||
'product': undefined,
|
||||
'cashier': undefined,
|
||||
'client': undefined,
|
||||
'discount': undefined,
|
||||
};
|
||||
},
|
||||
|
||||
// when an ean is scanned and parsed, the callback corresponding
|
||||
// to its type is called with the parsed_ean as a parameter.
|
||||
// (parsed_ean is the result of parse_ean(ean))
|
||||
//
|
||||
// callbacks is a Map of 'actions' : callback(parsed_ean)
|
||||
// that sets the callback for each action. if a callback for the
|
||||
// specified action already exists, it is replaced.
|
||||
//
|
||||
// possible actions include :
|
||||
// 'product' | 'cashier' | 'client' | 'discount'
|
||||
|
||||
set_action_callbacks: function(callbacks){
|
||||
for(action in callbacks){
|
||||
this.action_callbacks[action] = callbacks[action];
|
||||
}
|
||||
},
|
||||
|
||||
// returns true if the code is a valid EAN codebar number by checking the control digit.
|
||||
checkEan: function(code){
|
||||
//remove all action callbacks
|
||||
reset_action_callbacks: function(){
|
||||
for(action in this.action_callbacks){
|
||||
this.action_callbacks[action] = undefined;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
// returns true if the ean is a valid EAN codebar number by checking the control digit.
|
||||
// ean must be a string
|
||||
check_ean: function(ean){
|
||||
var code = ean.split('');
|
||||
var st1 = code.slice();
|
||||
var st2 = st1.slice(0,st1.length-1).reverse();
|
||||
// some EAN13 barcodes have a length of 12, as they start by 0
|
||||
|
@ -36,42 +167,112 @@ function openerp_pos_devices(module, instance){ //module is instance.point_of_sa
|
|||
var cd = (10 - (st5%10)) % 10;
|
||||
return code[code.length-1] === cd;
|
||||
},
|
||||
|
||||
// attempts to interpret an ean (string encoding an ean)
|
||||
// it will check its validity then return an object containing various
|
||||
// information about the ean.
|
||||
// most importantly :
|
||||
// - ean : the ean
|
||||
// - type : the type of the ean:
|
||||
// 'price' | 'weight' | 'unit' | 'cashier' | 'client' | 'discount' | 'error'
|
||||
//
|
||||
// - prefix : the prefix that has ben used to determine the type
|
||||
// - id : the part of the ean that identifies something
|
||||
// - value : if the id encodes a numerical value, it will be put there
|
||||
// - unit : if the encoded value has a unit, it will be put there.
|
||||
// not to be confused with the 'unit' type, which represent an unit of a
|
||||
// unique product
|
||||
|
||||
parse_ean: function(ean){
|
||||
var parse_result = {
|
||||
type:'unknown', //
|
||||
prefix:'',
|
||||
ean:ean,
|
||||
id:'',
|
||||
value: 0,
|
||||
unit: 'none',
|
||||
};
|
||||
var prefix2 = ean.substring(0,2);
|
||||
|
||||
if(!this.check_ean(ean)){
|
||||
parse_result.type = 'error';
|
||||
}else if (prefix2 in {'02':'', '22':'', '24':'', '26':'', '28':''}){
|
||||
parse_result.type = 'price';
|
||||
parse_result.prefix = prefix2;
|
||||
parse_result.id = ean.substring(0,7);
|
||||
parse_result.value = Number(ean.substring(7,12))/100.0;
|
||||
parse_result.unit = 'euro';
|
||||
} else if (prefix2 in {'21':'','23':'','27':'','29':'','25':''}) {
|
||||
parse_result.type = 'weight';
|
||||
parse_result.prefix = prefix2;
|
||||
prase_result.id = ean.substring(0,7);
|
||||
parse_result.value = Number(ean.substring(7,12))/1000.0;
|
||||
parse_result.unit = 'Kg';
|
||||
}else{
|
||||
parse_result.type = 'unit';
|
||||
parse_result.prefix = '';
|
||||
parse_result.id = ean;
|
||||
}
|
||||
return parse_result;
|
||||
},
|
||||
|
||||
// returns a product that has a packaging with an EAN matching to provided ean string.
|
||||
// returns undefined if no such product is found.
|
||||
getProductByEAN: function(ean) {
|
||||
get_product_by_ean: function(ean) {
|
||||
var allProducts = this.pos.get('product_list');
|
||||
var allPackages = this.pos.get('product.packaging');
|
||||
var prefix = ean.substring(0,2);
|
||||
var scannedProductModel = undefined;
|
||||
var parse_result = this.parse_ean(ean);
|
||||
|
||||
if (prefix in {'02':'', '22':'', '24':'', '26':'', '28':''}) {
|
||||
|
||||
// PRICE barcode
|
||||
var itemCode = ean.substring(0,7);
|
||||
if (parse_result.type === 'price') {
|
||||
var itemCode = parse_result.id;
|
||||
var scannedPackaging = _.detect(allPackages, function(pack) { return pack.ean !== undefined && pack.ean.substring(0,7) === itemCode;});
|
||||
if (scannedPackaging !== undefined) {
|
||||
scannedProductModel = _.detect(allProducts, function(pc) { return pc.id === scannedPackaging.product_id[0];});
|
||||
scannedProductModel.list_price = Number(ean.substring(7,12))/100;
|
||||
scannedProductModel.list_price = parse_result.value;
|
||||
}
|
||||
} else if (prefix in {'21':'','23':'','27':'','29':'','25':''}) {
|
||||
// WEIGHT barcode
|
||||
var weight = Number(barcode.substring(7,12))/1000;
|
||||
var itemCode = ean.substring(0,7);
|
||||
} else if (parse_result.type === 'weight') {
|
||||
var weight = parse_result.value;
|
||||
var itemCode = parse_result.id;
|
||||
var scannedPackaging = _.detect(allPackages, function(pack) { return pack.ean !== undefined && pack.ean.substring(0,7) === itemCode;});
|
||||
if (scannedPackaging !== undefined) {
|
||||
scannedProductModel = _.detect(allProducts, function(pc) { return pc.id === scannedPackaging.product_id[0];});
|
||||
scannedProductModel.list_price *= weight;
|
||||
scannedProductModel.name += ' - ' + weight + ' Kg.';
|
||||
}
|
||||
} else {
|
||||
// UNIT barcode
|
||||
} else if(parse_result.type === 'unit'){
|
||||
scannedProductModel = _.detect(allProducts, function(pc) { return pc.ean13 === ean;}); //TODO DOES NOT SCALE
|
||||
}
|
||||
return scannedProductModel;
|
||||
},
|
||||
|
||||
// a default callback for the 'product' action. It will select the product
|
||||
// corresponding to the ean and add it to the current order.
|
||||
scan_product_callback: function(parse_result){
|
||||
var selectedOrder = self.pos.get('selectedOrder');
|
||||
var scannedProductModel = self.get_product_by_ean(parse_result.ean);
|
||||
if (scannedProductModel === undefined) {
|
||||
// product not recognized, raise warning
|
||||
$(QWeb.render('pos-scan-warning')).dialog({
|
||||
resizable: false,
|
||||
height:220,
|
||||
modal: true,
|
||||
title: "Warning",
|
||||
/*
|
||||
buttons: {
|
||||
"OK": function() {
|
||||
$( this ).dialog( "close" );
|
||||
return;
|
||||
},
|
||||
}*/
|
||||
});
|
||||
} else {
|
||||
selectedOrder.addProduct(new module.Product(scannedProductModel));
|
||||
}
|
||||
},
|
||||
|
||||
// starts catching keyboard events and tries to interpret codebar
|
||||
// calling the callbacks when needed.
|
||||
connect: function(){
|
||||
var self = this;
|
||||
var codeNumbers = [];
|
||||
|
@ -99,37 +300,24 @@ function openerp_pos_devices(module, instance){ //module is instance.point_of_sa
|
|||
codeNumbers.push(e.keyCode - 48);
|
||||
lastTimeStamp = new Date().getTime();
|
||||
if (codeNumbers.length == 13) {
|
||||
//console.log('found code:', codeNumbers.join(''));
|
||||
//We have found what seems to be a valid codebar
|
||||
var parse_result = this.parse_ean(codeNumbers.join(''));
|
||||
|
||||
// a barcode reader
|
||||
if (!self.checkEan(codeNumbers)) {
|
||||
// barcode read error, raise warning
|
||||
if (parse_result.type === 'error') { //most likely a checksum error, raise warning
|
||||
$(QWeb.render('pos-scan-warning')).dialog({
|
||||
resizable: false,
|
||||
height:220,
|
||||
modal: true,
|
||||
title: "Warning",
|
||||
});
|
||||
}
|
||||
var selectedOrder = self.pos.get('selectedOrder');
|
||||
var scannedProductModel = self.getProductByEAN(codeNumbers.join(''),allPackages,allProducts);
|
||||
if (scannedProductModel === undefined) {
|
||||
// product not recognized, raise warning
|
||||
$(QWeb.render('pos-scan-warning')).dialog({
|
||||
resizable: false,
|
||||
height:220,
|
||||
modal: true,
|
||||
title: "Warning",
|
||||
/*
|
||||
buttons: {
|
||||
"OK": function() {
|
||||
$( this ).dialog( "close" );
|
||||
return;
|
||||
},
|
||||
}*/
|
||||
});
|
||||
} else {
|
||||
selectedOrder.addProduct(new module.Product(scannedProductModel));
|
||||
}else if(parse_result.type in {'unit':'', 'weight':'', 'price':''}){ //ean is associated to a product
|
||||
if(this.action_callback['product']){
|
||||
this.action_callback['product'](parse_result);
|
||||
}
|
||||
}else{
|
||||
if(this.action_callback[parse_result.type]){
|
||||
this.action_callback[parse_result.type](parse_result);
|
||||
}
|
||||
}
|
||||
|
||||
codeNumbers = [];
|
||||
|
@ -146,4 +334,5 @@ function openerp_pos_devices(module, instance){ //module is instance.point_of_sa
|
|||
$('body').undelegate('', 'keyup')
|
||||
},
|
||||
});
|
||||
|
||||
}
|
||||
|
|
|
@ -6,6 +6,8 @@ openerp.point_of_sale = function(instance) {
|
|||
var module = instance.point_of_sale;
|
||||
|
||||
openerp_pos_models(module,instance); // import pos_models.js
|
||||
|
||||
openerp_pos_screens(module,instance); // import pos_screens.js
|
||||
|
||||
openerp_pos_widgets(module,instance); // import pos_widgets.js
|
||||
|
||||
|
|
|
@ -57,6 +57,8 @@ function openerp_pos_models(module, instance){ //module is instance.point_of_sal
|
|||
this.build_tree = _.bind(this.build_tree, this);
|
||||
this.session = session;
|
||||
this.categories = {};
|
||||
this.barcode_reader = new module.BarcodeReader({'pos': this});
|
||||
this.proxy = new module.ProxyDevice({'pos': this});
|
||||
this.set({
|
||||
'nbr_pending_operations': 0,
|
||||
'currency': {symbol: '$', position: 'after'},
|
||||
|
@ -396,7 +398,8 @@ function openerp_pos_models(module, instance){ //module is instance.point_of_sal
|
|||
},
|
||||
validatedChanged: function() {
|
||||
if (this.get("validated") && !this.previous("validated")) {
|
||||
this.set({'step': 'receipt'});
|
||||
this.pos.screen_selector.set_current_screen('receipt');
|
||||
//this.set({'screen': 'receipt'});
|
||||
}
|
||||
},
|
||||
generateUniqueId: function() {
|
||||
|
|
|
@ -0,0 +1,618 @@
|
|||
|
||||
// this file contains the screens definitions. Screens are the
|
||||
// content of the right pane of the pos, containing the main functionalities.
|
||||
// screens are contained in the PosWidget, in pos_widget.js
|
||||
// all screens are present in the dom at all time, but only one is shown at the
|
||||
// same time.
|
||||
//
|
||||
// transition between screens is made possible by the use of the screen_selector,
|
||||
// which is responsible of hiding and showing the screens, as well as maintaining
|
||||
// the state of the screens between different orders.
|
||||
//
|
||||
// all screens inherit from ScreenWidget. the only addition from the base widgets
|
||||
// are show() and hide() which shows and hides the screen but are also used to
|
||||
// bind and unbind actions on widgets and devices. The screen_selector guarantees
|
||||
// that only one screen is shown at the same time and that show() is called after all
|
||||
// hide()s
|
||||
|
||||
function openerp_pos_screens(module, instance){ //module is instance.point_of_sale
|
||||
var QWeb = instance.web.qweb;
|
||||
|
||||
var qweb_template = function(template,pos){
|
||||
return function(ctx){
|
||||
if(!pos){ //this is a huge hack that needs to be removed ... TODO
|
||||
var HackPosModel = Backbone.Model.extend({
|
||||
initialize:function(){
|
||||
this.set({
|
||||
'currency': {symbol: '$', position: 'after'},
|
||||
});
|
||||
},
|
||||
});
|
||||
pos = new HackPosModel();
|
||||
}
|
||||
return QWeb.render(template, _.extend({}, ctx,{
|
||||
'currency': pos.get('currency'),
|
||||
'format_amount': function(amount) {
|
||||
if (pos.get('currency').position == 'after') {
|
||||
return amount + ' ' + pos.get('currency').symbol;
|
||||
} else {
|
||||
return pos.get('currency').symbol + ' ' + amount;
|
||||
}
|
||||
},
|
||||
}));
|
||||
};
|
||||
};
|
||||
|
||||
module.ScreenSelector = instance.web.Class.extend({
|
||||
init: function(options){
|
||||
this.pos = options.pos;
|
||||
|
||||
this.screen_set = options.screen_set || {};
|
||||
|
||||
this.default_client_screen = options.default_client_screen;
|
||||
this.default_cashier_screen = options.default_cashier_screen;
|
||||
|
||||
this.current_client_screen = this.screen_set[this.default_client_screen];
|
||||
|
||||
this.current_cashier_screen = this.screen_set[this.default_client_screen];
|
||||
|
||||
this.default_mode = options.default_mode || 'client';
|
||||
this.current_mode = this.default_mode;
|
||||
|
||||
this.current_screen = this.current_mode === 'client' ?
|
||||
this.current_client_screen:
|
||||
this.current_cashier_screen;
|
||||
|
||||
var current = null;
|
||||
for(screen_name in this.screen_set){
|
||||
var screen = this.screen_set[screen_name];
|
||||
if(screen === this.current_screen){
|
||||
current = screen;
|
||||
}else{
|
||||
screen.hide();
|
||||
}
|
||||
}
|
||||
if(current){
|
||||
current.show();
|
||||
}
|
||||
|
||||
this.selected_order = this.pos.get('selectedOrder');
|
||||
this.selected_order.set({
|
||||
user_mode : this.current_mode,
|
||||
client_screen: this.default_client_screen,
|
||||
cashier_screen: this.default_cashier_screen,
|
||||
});
|
||||
|
||||
this.pos.bind('change:selectedOrder', this.load_saved_screen, this);
|
||||
},
|
||||
add_screen: function(screen_name, screen){
|
||||
screen.hide();
|
||||
this.screen_set[screen_name] = screen;
|
||||
return this;
|
||||
},
|
||||
load_saved_screen: function(){
|
||||
console.log('load_saved_screen');
|
||||
if(true || this.selected_order != this.pos.get('selectedOrder')){
|
||||
var selectedOrder = this.pos.get('selectedOrder');
|
||||
|
||||
var user_mode = selectedOrder.get('user_mode');
|
||||
console.log('user mode:',user_mode);
|
||||
|
||||
if(user_mode === 'client'){
|
||||
this.current_mode = 'client';
|
||||
this.set_current_screen(selectedOrder.get('client_screen') || this.default_client_screen);
|
||||
}else if(user_mode === 'cashier'){
|
||||
this.current_mode = 'cashier';
|
||||
console.log('default_cashier_screen:',this.default_cashier_screen);
|
||||
this.set_current_screen(selectedOrder.get('cashier_screen') || this.default_cashier_screen);
|
||||
}else{
|
||||
this.current_mode = this.default_mode;
|
||||
selectedOrder.set({ user_mode: this.current_mode });
|
||||
if(this.current_mode === 'client'){
|
||||
this.set_current_screen(this.default_client_screen);
|
||||
}else{
|
||||
this.set_current_screen(this.default_cashier_screen);
|
||||
}
|
||||
}
|
||||
this.selected_order = selectedOrder;
|
||||
// var screen = this.pos.get('selectedOrder').get('screen') || this.default_screen;
|
||||
// this.selected_order = this.pos.get('selectedOrder');
|
||||
// this.set_current_screen(screen);
|
||||
}
|
||||
},
|
||||
set_user_mode: function(user_mode){
|
||||
console.log('set user mode:',user_mode);
|
||||
if(user_mode !== this.current_mode){
|
||||
this.current_mode = user_mode;
|
||||
this.pos.get('selectedOrder').set({ user_mode : this.current_mode });
|
||||
this.load_saved_screen();
|
||||
}
|
||||
},
|
||||
set_current_screen: function(screen_name){
|
||||
var screen = this.screen_set[screen_name];
|
||||
|
||||
var selectedOrder = this.pos.get('selectedOrder');
|
||||
if(this.current_mode === 'client'){
|
||||
selectedOrder.set({'client_screen': screen_name});
|
||||
}else{
|
||||
selectedOrder.set({'cashier_screen': screen_name});
|
||||
}
|
||||
|
||||
console.log('Set Current Screen: '+screen_name+' :',screen,'old:',this.current_screen, 'mode:',this.current_mode);
|
||||
if(screen && screen !== this.current_screen){
|
||||
if(this.current_screen){
|
||||
this.current_screen.hide();
|
||||
}
|
||||
this.current_screen = screen;
|
||||
this.current_screen.show();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
module.ScreenWidget = instance.web.Widget.extend({
|
||||
init: function(parent, options){
|
||||
this._super(parent, options);
|
||||
options = options || {};
|
||||
this.pos = options.pos;
|
||||
this.pos_widget = options.pos_widget;
|
||||
},
|
||||
show: function(){
|
||||
if(this.$element){
|
||||
this.$element.show();
|
||||
}
|
||||
},
|
||||
hide: function(){
|
||||
if(this.$element){
|
||||
this.$element.hide();
|
||||
}
|
||||
if(this.pos.barcode_reader){
|
||||
this.pos.barcode_reader.reset_action_callbacks();
|
||||
}
|
||||
if(this.pos_widget.action_bar){
|
||||
this.pos_widget.action_bar.destroy_buttons();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
module.ScaleInviteScreenWidget = module.ScreenWidget.extend({
|
||||
template:'ScaleInviteScreenWidget',
|
||||
show: function(){
|
||||
this._super();
|
||||
var self = this;
|
||||
|
||||
this.pos_widget.set_numpad_visible(false);
|
||||
this.pos_widget.set_leftpane_visible(true);
|
||||
this.pos_widget.set_cashier_controls_visible(false);
|
||||
|
||||
self.pos.proxy.weighting_start();
|
||||
|
||||
this.intervalID = setInterval(function(){
|
||||
var weight = self.pos.proxy.weighting_read_kg();
|
||||
if(weight > 0.001){
|
||||
clearInterval(intervalID);
|
||||
self.pos.screen_selector.set_current_screen('scale_product');
|
||||
}
|
||||
},500);
|
||||
|
||||
this.pos_widget.action_bar.add_new_button(
|
||||
{
|
||||
label: 'back',
|
||||
click: function(){ //TODO Go to ask for weighting screen
|
||||
clearInterval(this.intervalID);
|
||||
self.pos.proxy.weighting_end();
|
||||
self.pos.screen_selector.set_current_screen('scan');
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
hide: function(){
|
||||
this._super();
|
||||
clearInterval(this.intervalID);
|
||||
},
|
||||
});
|
||||
|
||||
module.ScaleProductScreenWidget = module.ScreenWidget.extend({
|
||||
template:'ScaleProductSelectionScreenWidget',
|
||||
start: function(){
|
||||
this.product_categories_widget = new module.ProductCategoriesWidget(null,{
|
||||
pos:this.pos,
|
||||
});
|
||||
this.product_categories_widget.replace($('.placeholder-ProductCategoriesWidget'));
|
||||
|
||||
this.product_list_widget = new module.ProductListWidget(null,{
|
||||
pos:this.pos,
|
||||
});
|
||||
this.product_list_widget.replace($('.placeholder-ProductListWidget'));
|
||||
},
|
||||
show: function(){
|
||||
this._super();
|
||||
var self = this;
|
||||
|
||||
this.pos_widget.set_numpad_visible(false);
|
||||
this.pos_widget.set_leftpane_visible(true);
|
||||
this.pos_widget.set_cashier_controls_visible(false);
|
||||
|
||||
this.pos_widget.orderView.setNumpadState(this.pos_widget.numpadView.state);
|
||||
this.pos_widget.action_bar.add_new_button(
|
||||
{
|
||||
label: 'back',
|
||||
click: function(){
|
||||
self.pos.screen_selector.set_current_screen('scan');
|
||||
}
|
||||
}
|
||||
);
|
||||
this.pos.barcode_reader.set_action_callbacks({
|
||||
'cashier': function(ean){
|
||||
//TODO 'switch to cashier mode'
|
||||
self.proxy.cashier_mode_activated();
|
||||
},
|
||||
});
|
||||
},
|
||||
hide: function(){
|
||||
this._super();
|
||||
this.pos_widget.orderView.setNumpadState(null);
|
||||
this.pos_widget.payment_screen.setNumpadState(null);
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
module.ClientPaymentScreenWidget = module.ScreenWidget.extend({
|
||||
template:'ClientPaymentScreenWidget',
|
||||
show: function(){
|
||||
this._super();
|
||||
var self = this;
|
||||
|
||||
this.pos_widget.set_numpad_visible(false);
|
||||
this.pos_widget.set_leftpane_visible(true);
|
||||
this.pos_widget.set_cashier_controls_visible(false);
|
||||
|
||||
this.pos.proxy.payment_request(0,'card','info'); //TODO TOTAL
|
||||
|
||||
var intervalID = setInterval(function(){
|
||||
var payment = self.pos.proxy.is_payment_accepted();
|
||||
if(payment === 'payment_accepted'){
|
||||
clearInterval(intervalID);
|
||||
//TODO process the payment stuff
|
||||
self.pos.proxy.transaction_end();
|
||||
self.pos.screen_selector.set_current_screen('welcome');
|
||||
}else if(payment === 'payment_rejected'){
|
||||
clearInterval(intervalID);
|
||||
//TODO show a tryagain thingie ?
|
||||
}
|
||||
},500);
|
||||
|
||||
this.pos_widget.action_bar.add_new_button(
|
||||
{
|
||||
label: 'back',
|
||||
click: function(){ //TODO Go to ask for weighting screen
|
||||
clearInterval(intervalID);
|
||||
self.pos.proxy.payment_canceled();
|
||||
self.pos.screen_selector.set_current_screen('scan');
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
this.pos.barcode_reader.set_action_callbacks({
|
||||
'cashier': function(ean){
|
||||
//TODO 'switch to cashier mode'
|
||||
clearInterval(intervalID);
|
||||
self.proxy.cashier_mode_activated();
|
||||
self.pos.screen_selector.set_current_screen('products');
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
module.WelcomeScreenWidget = module.ScreenWidget.extend({
|
||||
template:'WelcomeScreenWidget',
|
||||
show: function(){
|
||||
this._super();
|
||||
var self = this;
|
||||
|
||||
this.pos_widget.set_numpad_visible(false);
|
||||
this.pos_widget.set_leftpane_visible(false);
|
||||
this.pos_widget.set_cashier_controls_visible(false);
|
||||
|
||||
this.pos_widget.action_bar.add_new_button(
|
||||
{
|
||||
label:'scan',
|
||||
click: function(){
|
||||
self.pos.screen_selector.set_current_screen('scan');
|
||||
}
|
||||
},{
|
||||
label: 'peser',
|
||||
click: function(){ //TODO Go to ask for weighting screen
|
||||
self.pos.screen_selector.set_current_screen('scale_invite');
|
||||
}
|
||||
}
|
||||
);
|
||||
this.pos.barcode_reader.set_action_callbacks({
|
||||
'product': function(ean){
|
||||
self.proxy.transaction_start();
|
||||
self.pos.barcode_reader.scan_product_callback(ean);
|
||||
self.pos.screen_selector.set_current_screen('products');
|
||||
},
|
||||
'cashier': function(ean){
|
||||
//TODO 'switch to cashier mode'
|
||||
self.proxy.cashier_mode_activated();
|
||||
self.pos.screen_selector.set_current_screen('products');
|
||||
},
|
||||
'client': function(ean){
|
||||
self.proxy.transaction_start();
|
||||
//TODO 'log the client'
|
||||
self.pos.screen_selector.set_current_screen('products');
|
||||
},
|
||||
'discount': function(ean){
|
||||
// TODO : what to do in this case ????
|
||||
},
|
||||
});
|
||||
},
|
||||
hide: function(){
|
||||
this._super();
|
||||
this.pos.barcode_reader.reset_action_callbacks();
|
||||
this.pos_widget.action_bar.destroy_buttons();
|
||||
},
|
||||
});
|
||||
|
||||
module.ScanProductScreenWidget = module.ScreenWidget.extend({
|
||||
template:'ScanProductScreenWidget',
|
||||
show: function(){
|
||||
this._super();
|
||||
var self = this;
|
||||
|
||||
this.pos_widget.set_numpad_visible(false);
|
||||
this.pos_widget.set_leftpane_visible(true);
|
||||
this.pos_widget.set_cashier_controls_visible(false);
|
||||
|
||||
this.pos_widget.action_bar.add_new_button(
|
||||
{
|
||||
label: 'weight',
|
||||
click: function(){ //TODO Go to ask for weighting screen
|
||||
self.pos.screen_selector.set_current_screen('scale_invite');
|
||||
}
|
||||
},{
|
||||
label: 'pay',
|
||||
click: function(){
|
||||
self.pos.screen_selector.set_current_screen('client_payment'); //TODO what stuff ?
|
||||
}
|
||||
}
|
||||
);
|
||||
this.pos.barcode_reader.set_action_callbacks({
|
||||
'product': function(ean){
|
||||
var success = self.pos.barcode_reader.scan_product_callback(ean);
|
||||
if(success){
|
||||
self.proxy.scan_item_success();
|
||||
}else{
|
||||
self.proxy.scan_item_error_unrecognized();
|
||||
}
|
||||
},
|
||||
'cashier': function(ean){
|
||||
//TODO 'switch to cashier mode'
|
||||
self.proxy.cashier_mode_activated();
|
||||
},
|
||||
'discount': function(ean){
|
||||
// TODO : handle the discount
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
module.SearchProductScreenWidget = module.ScreenWidget.extend({
|
||||
template:'SearchProductScreenWidget',
|
||||
start: function(){
|
||||
this.product_categories_widget = new module.ProductCategoriesWidget(null,{
|
||||
pos:this.pos,
|
||||
});
|
||||
this.product_categories_widget.replace($('.placeholder-ProductCategoriesWidget'));
|
||||
|
||||
this.product_list_widget = new module.ProductListWidget(null,{
|
||||
pos:this.pos,
|
||||
});
|
||||
this.product_list_widget.replace($('.placeholder-ProductListWidget'));
|
||||
},
|
||||
show: function(){
|
||||
this._super();
|
||||
var self = this;
|
||||
|
||||
this.pos_widget.set_numpad_visible(true);
|
||||
this.pos_widget.set_leftpane_visible(true);
|
||||
this.pos_widget.set_cashier_controls_visible(true);
|
||||
|
||||
this.pos_widget.orderView.setNumpadState(this.pos_widget.numpadView.state);
|
||||
this.pos_widget.action_bar.add_new_button(
|
||||
{
|
||||
label: 'weight',
|
||||
click: function(){ //TODO Go to ask for weighting screen
|
||||
}
|
||||
},{
|
||||
label: 'pay',
|
||||
click: function(){
|
||||
self.pos.screen_selector.set_current_screen('payment'); //TODO what stuff ?
|
||||
}
|
||||
}
|
||||
);
|
||||
this.pos.barcode_reader.set_action_callbacks({
|
||||
'product': function(ean){
|
||||
var success = self.pos.barcode_reader.scan_product_callback(ean);
|
||||
if(success){
|
||||
self.proxy.scan_item_success();
|
||||
}else{
|
||||
self.proxy.scan_item_error_unrecognized();
|
||||
}
|
||||
},
|
||||
'cashier': function(ean){
|
||||
//TODO 'switch to cashier mode'
|
||||
self.proxy.cashier_mode_activated();
|
||||
},
|
||||
'discount': function(ean){
|
||||
// TODO : handle the discount
|
||||
},
|
||||
});
|
||||
},
|
||||
hide: function(){
|
||||
this._super();
|
||||
this.pos_widget.orderView.setNumpadState(null);
|
||||
this.pos_widget.payment_screen.setNumpadState(null);
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
module.ReceiptScreenWidget = module.ScreenWidget.extend({
|
||||
template: 'ReceiptScreenWidget',
|
||||
init: function(parent, options) {
|
||||
this._super(parent,options);
|
||||
this.model = options.model;
|
||||
this.user = this.pos.get('user');
|
||||
this.company = this.pos.get('company');
|
||||
this.shop_obj = this.pos.get('shop');
|
||||
},
|
||||
start: function() {
|
||||
this.pos.bind('change:selectedOrder', this.changeSelectedOrder, this);
|
||||
this.changeSelectedOrder();
|
||||
$('button#pos-finish-order', this.$element).click(_.bind(this.finishOrder, this));
|
||||
$('button#print-the-ticket', this.$element).click(_.bind(this.print, this));
|
||||
},
|
||||
show: function(){
|
||||
this._super();
|
||||
|
||||
this.pos_widget.set_numpad_visible(true);
|
||||
this.pos_widget.set_leftpane_visible(true);
|
||||
this.pos_widget.set_cashier_controls_visible(true);
|
||||
},
|
||||
print: function() {
|
||||
window.print();
|
||||
},
|
||||
finishOrder: function() {
|
||||
this.pos.get('selectedOrder').destroy();
|
||||
},
|
||||
changeSelectedOrder: function() {
|
||||
if (this.currentOrderLines)
|
||||
this.currentOrderLines.unbind();
|
||||
this.currentOrderLines = (this.pos.get('selectedOrder')).get('orderLines');
|
||||
this.currentOrderLines.bind('add', this.refresh, this);
|
||||
this.currentOrderLines.bind('change', this.refresh, this);
|
||||
this.currentOrderLines.bind('remove', this.refresh, this);
|
||||
if (this.currentPaymentLines)
|
||||
this.currentPaymentLines.unbind();
|
||||
this.currentPaymentLines = (this.pos.get('selectedOrder')).get('paymentLines');
|
||||
this.currentPaymentLines.bind('all', this.refresh, this);
|
||||
this.refresh();
|
||||
},
|
||||
refresh: function() {
|
||||
this.currentOrder = this.pos.get('selectedOrder');
|
||||
$('.pos-receipt-container', this.$element).html(qweb_template('pos-ticket')({widget:this}));
|
||||
},
|
||||
});
|
||||
|
||||
module.PaymentScreenWidget = module.ScreenWidget.extend({
|
||||
template_fct: qweb_template('PaymentScreenWidget'),
|
||||
init: function(parent, options) {
|
||||
this._super(parent,options);
|
||||
this.model = options.model;
|
||||
this.pos.bind('change:selectedOrder', this.changeSelectedOrder, this);
|
||||
this.bindPaymentLineEvents();
|
||||
this.bindOrderLineEvents();
|
||||
},
|
||||
show: function(){
|
||||
this._super();
|
||||
|
||||
this.pos_widget.set_numpad_visible(true);
|
||||
this.pos_widget.set_leftpane_visible(true);
|
||||
this.pos_widget.set_cashier_controls_visible(true);
|
||||
|
||||
this.setNumpadState(this.pos_widget.numpadView.state);
|
||||
},
|
||||
hide: function(){
|
||||
this._super();
|
||||
this.pos_widget.orderView.setNumpadState(null);
|
||||
this.pos_widget.payment_screen.setNumpadState(null);
|
||||
},
|
||||
paymentLineList: function() {
|
||||
return this.$element.find('#paymentlines');
|
||||
},
|
||||
back: function() {
|
||||
console.log('back');
|
||||
this.pos.screen_selector.set_current_screen('products');
|
||||
},
|
||||
validateCurrentOrder: function() {
|
||||
var callback, currentOrder;
|
||||
currentOrder = this.pos.get('selectedOrder');
|
||||
$('button#validate-order', this.$element).attr('disabled', 'disabled');
|
||||
this.pos.push_order(currentOrder.exportAsJSON()).then(_.bind(function() {
|
||||
$('button#validate-order', this.$element).removeAttr('disabled');
|
||||
return currentOrder.set({
|
||||
validated: true
|
||||
});
|
||||
}, this));
|
||||
},
|
||||
bindPaymentLineEvents: function() {
|
||||
this.currentPaymentLines = (this.pos.get('selectedOrder')).get('paymentLines');
|
||||
this.currentPaymentLines.bind('add', this.addPaymentLine, this);
|
||||
this.currentPaymentLines.bind('remove', this.renderElement, this);
|
||||
this.currentPaymentLines.bind('all', this.updatePaymentSummary, this);
|
||||
},
|
||||
bindOrderLineEvents: function() {
|
||||
this.currentOrderLines = (this.pos.get('selectedOrder')).get('orderLines');
|
||||
this.currentOrderLines.bind('all', this.updatePaymentSummary, this);
|
||||
},
|
||||
changeSelectedOrder: function() {
|
||||
this.currentPaymentLines.unbind();
|
||||
this.bindPaymentLineEvents();
|
||||
this.currentOrderLines.unbind();
|
||||
this.bindOrderLineEvents();
|
||||
this.renderElement();
|
||||
},
|
||||
addPaymentLine: function(newPaymentLine) {
|
||||
var x = new module.PaymentlineWidget(null, {
|
||||
model: newPaymentLine
|
||||
});
|
||||
x.on_delete.add(_.bind(this.deleteLine, this, x));
|
||||
x.appendTo(this.paymentLineList());
|
||||
},
|
||||
renderElement: function() {
|
||||
this._super();
|
||||
this.$element.html(this.template_fct());
|
||||
this.paymentLineList().empty();
|
||||
this.currentPaymentLines.each(_.bind( function(paymentLine) {
|
||||
this.addPaymentLine(paymentLine);
|
||||
}, this));
|
||||
this.updatePaymentSummary();
|
||||
$('button#validate-order', this.$element).click(_.bind(this.validateCurrentOrder, this));
|
||||
$('.oe-back-to-products', this.$element).click(_.bind(this.back, this));
|
||||
},
|
||||
deleteLine: function(lineWidget) {
|
||||
this.currentPaymentLines.remove([lineWidget.model]);
|
||||
},
|
||||
updatePaymentSummary: function() {
|
||||
var currentOrder, dueTotal, paidTotal, remaining, remainingAmount;
|
||||
currentOrder = this.pos.get('selectedOrder');
|
||||
paidTotal = currentOrder.getPaidTotal();
|
||||
dueTotal = currentOrder.getTotal();
|
||||
this.$element.find('#payment-due-total').html(dueTotal.toFixed(2));
|
||||
this.$element.find('#payment-paid-total').html(paidTotal.toFixed(2));
|
||||
remainingAmount = dueTotal - paidTotal;
|
||||
remaining = remainingAmount > 0 ? 0 : (-remainingAmount).toFixed(2);
|
||||
$('#payment-remaining').html(remaining);
|
||||
},
|
||||
setNumpadState: function(numpadState) {
|
||||
if (this.numpadState) {
|
||||
this.numpadState.unbind('setValue', this.setValue);
|
||||
this.numpadState.unbind('change:mode', this.setNumpadMode);
|
||||
}
|
||||
this.numpadState = numpadState;
|
||||
if (this.numpadState) {
|
||||
this.numpadState.bind('setValue', this.setValue, this);
|
||||
this.numpadState.bind('change:mode', this.setNumpadMode, this);
|
||||
this.numpadState.reset();
|
||||
this.setNumpadMode();
|
||||
}
|
||||
},
|
||||
setNumpadMode: function() {
|
||||
this.numpadState.set({mode: 'payment'});
|
||||
},
|
||||
setValue: function(val) {
|
||||
this.currentPaymentLines.last().set({amount: val});
|
||||
},
|
||||
});
|
||||
|
||||
}
|
|
@ -72,11 +72,11 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
this.$element.find('button').click(_.bind(this.performPayment, this));
|
||||
},
|
||||
performPayment: function(event) {
|
||||
if (this.pos.get('selectedOrder').get('step') === 'receipt')
|
||||
if (this.pos.get('selectedOrder').get('screen') === 'receipt')
|
||||
return;
|
||||
var cashRegister, cashRegisterCollection, cashRegisterId;
|
||||
/* set correct view */
|
||||
this.pos.get('selectedOrder').set({'step': 'payment'});
|
||||
this.pos.screen_selector.set_current_screen('payment');
|
||||
|
||||
cashRegisterId = event.currentTarget.attributes['cash-register-id'].nodeValue;
|
||||
cashRegisterCollection = this.pos.get('cashRegisters');
|
||||
|
@ -105,37 +105,6 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
return this;
|
||||
}
|
||||
});
|
||||
/*
|
||||
There are 3 steps in a POS workflow:
|
||||
1. prepare the order (i.e. chose products, quantities etc.)
|
||||
2. choose payment method(s) and amount(s)
|
||||
3. validae order and print receipt
|
||||
It should be possible to go back to any step as long as step 3 hasn't been completed.
|
||||
Modifying an order after validation shouldn't be allowed.
|
||||
*/
|
||||
module.StepSwitcher = instance.web.OldWidget.extend({
|
||||
init: function(parent, options) {
|
||||
this._super(parent);
|
||||
this.pos = options.pos;
|
||||
this.change_order();
|
||||
this.pos.bind('change:selectedOrder', this.change_order, this);
|
||||
},
|
||||
change_order: function() {
|
||||
if (this.selected_order) {
|
||||
this.selected_order.unbind('change:step', this.change_step);
|
||||
}
|
||||
this.selected_order = this.pos.get('selectedOrder');
|
||||
if (this.selected_order) {
|
||||
this.selected_order.bind('change:step', this.change_step, this);
|
||||
}
|
||||
this.change_step();
|
||||
},
|
||||
change_step: function() {
|
||||
var new_step = this.selected_order ? this.selected_order.get('step') : 'products';
|
||||
$('.step-screen').hide();
|
||||
$('#' + new_step + '-screen').show();
|
||||
},
|
||||
});
|
||||
|
||||
// ---------- "Shopping Carts" ----------
|
||||
|
||||
|
@ -262,49 +231,10 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
},
|
||||
});
|
||||
|
||||
// ---------- "Products" step. ----------
|
||||
// ---------- Product Screen ----------
|
||||
|
||||
module.CategoryWidget = instance.web.OldWidget.extend({
|
||||
init: function(parent, options){
|
||||
this._super(parent,options.element_id);
|
||||
this.pos = options.pos;
|
||||
},
|
||||
start: function() {
|
||||
this.$element.find(".oe-pos-categories-list a").click(_.bind(this.changeCategory, this));
|
||||
},
|
||||
template_fct: qweb_template('pos-category-template'),
|
||||
renderElement: function() {
|
||||
var self = this;
|
||||
var c;
|
||||
this.$element.html(this.template_fct({
|
||||
breadcrumb: (function() {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = self.ancestors.length; _i < _len; _i++) {
|
||||
c = self.ancestors[_i];
|
||||
_results.push(self.pos.categories[c]);
|
||||
}
|
||||
return _results;
|
||||
})(),
|
||||
categories: (function() {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = self.children.length; _i < _len; _i++) {
|
||||
c = self.children[_i];
|
||||
_results.push(self.pos.categories[c]);
|
||||
}
|
||||
return _results;
|
||||
})()
|
||||
}));
|
||||
},
|
||||
changeCategory: function(a) {
|
||||
var id = $(a.target).data("category-id");
|
||||
this.on_change_category(id);
|
||||
},
|
||||
on_change_category: function(id) {},
|
||||
});
|
||||
|
||||
module.ProductWidget = instance.web.OldWidget.extend({
|
||||
module.ProductWidget = instance.web.Widget.extend({
|
||||
tagName:'li',
|
||||
template_fct: qweb_template('pos-product-template'),
|
||||
init: function(parent, options) {
|
||||
|
@ -327,26 +257,6 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
},
|
||||
});
|
||||
|
||||
module.ProductListWidget = instance.web.OldWidget.extend({
|
||||
init: function(parent, options) {
|
||||
this._super(parent);
|
||||
this.model = options.model;
|
||||
this.pos = options.pos;
|
||||
this.pos.get('products').bind('reset', this.renderElement, this);
|
||||
},
|
||||
renderElement: function() {
|
||||
this.$element.empty();
|
||||
(this.pos.get('products')).each(_.bind( function(product) {
|
||||
var p = new module.ProductWidget(null, {
|
||||
model: product,
|
||||
pos: this.pos
|
||||
});
|
||||
p.appendTo(this.$element);
|
||||
}, this));
|
||||
return this;
|
||||
},
|
||||
});
|
||||
|
||||
// ---------- "Payment" step. ----------
|
||||
|
||||
module.PaymentlineWidget = instance.web.OldWidget.extend({
|
||||
|
@ -384,146 +294,6 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
},
|
||||
});
|
||||
|
||||
module.PaymentWidget = instance.web.OldWidget.extend({
|
||||
init: function(parent, options) {
|
||||
this._super(parent);
|
||||
this.model = options.model;
|
||||
this.pos = options.pos;
|
||||
this.pos.bind('change:selectedOrder', this.changeSelectedOrder, this);
|
||||
this.bindPaymentLineEvents();
|
||||
this.bindOrderLineEvents();
|
||||
},
|
||||
paymentLineList: function() {
|
||||
return this.$element.find('#paymentlines');
|
||||
},
|
||||
start: function() {
|
||||
$('button#validate-order', this.$element).click(_.bind(this.validateCurrentOrder, this));
|
||||
$('.oe-back-to-products', this.$element).click(_.bind(this.back, this));
|
||||
},
|
||||
back: function() {
|
||||
this.pos.get('selectedOrder').set({"step": "products"});
|
||||
},
|
||||
validateCurrentOrder: function() {
|
||||
var callback, currentOrder;
|
||||
currentOrder = this.pos.get('selectedOrder');
|
||||
$('button#validate-order', this.$element).attr('disabled', 'disabled');
|
||||
this.pos.push_order(currentOrder.exportAsJSON()).then(_.bind(function() {
|
||||
$('button#validate-order', this.$element).removeAttr('disabled');
|
||||
return currentOrder.set({
|
||||
validated: true
|
||||
});
|
||||
}, this));
|
||||
},
|
||||
bindPaymentLineEvents: function() {
|
||||
this.currentPaymentLines = (this.pos.get('selectedOrder')).get('paymentLines');
|
||||
this.currentPaymentLines.bind('add', this.addPaymentLine, this);
|
||||
this.currentPaymentLines.bind('remove', this.renderElement, this);
|
||||
this.currentPaymentLines.bind('all', this.updatePaymentSummary, this);
|
||||
},
|
||||
bindOrderLineEvents: function() {
|
||||
this.currentOrderLines = (this.pos.get('selectedOrder')).get('orderLines');
|
||||
this.currentOrderLines.bind('all', this.updatePaymentSummary, this);
|
||||
},
|
||||
changeSelectedOrder: function() {
|
||||
this.currentPaymentLines.unbind();
|
||||
this.bindPaymentLineEvents();
|
||||
this.currentOrderLines.unbind();
|
||||
this.bindOrderLineEvents();
|
||||
this.renderElement();
|
||||
},
|
||||
addPaymentLine: function(newPaymentLine) {
|
||||
var x = new module.PaymentlineWidget(null, {
|
||||
model: newPaymentLine
|
||||
});
|
||||
x.on_delete.add(_.bind(this.deleteLine, this, x));
|
||||
x.appendTo(this.paymentLineList());
|
||||
},
|
||||
renderElement: function() {
|
||||
this.paymentLineList().empty();
|
||||
this.currentPaymentLines.each(_.bind( function(paymentLine) {
|
||||
this.addPaymentLine(paymentLine);
|
||||
}, this));
|
||||
this.updatePaymentSummary();
|
||||
},
|
||||
deleteLine: function(lineWidget) {
|
||||
this.currentPaymentLines.remove([lineWidget.model]);
|
||||
},
|
||||
updatePaymentSummary: function() {
|
||||
var currentOrder, dueTotal, paidTotal, remaining, remainingAmount;
|
||||
currentOrder = this.pos.get('selectedOrder');
|
||||
paidTotal = currentOrder.getPaidTotal();
|
||||
dueTotal = currentOrder.getTotal();
|
||||
this.$element.find('#payment-due-total').html(dueTotal.toFixed(2));
|
||||
this.$element.find('#payment-paid-total').html(paidTotal.toFixed(2));
|
||||
remainingAmount = dueTotal - paidTotal;
|
||||
remaining = remainingAmount > 0 ? 0 : (-remainingAmount).toFixed(2);
|
||||
$('#payment-remaining').html(remaining);
|
||||
},
|
||||
setNumpadState: function(numpadState) {
|
||||
if (this.numpadState) {
|
||||
this.numpadState.unbind('setValue', this.setValue);
|
||||
this.numpadState.unbind('change:mode', this.setNumpadMode);
|
||||
}
|
||||
this.numpadState = numpadState;
|
||||
if (this.numpadState) {
|
||||
this.numpadState.bind('setValue', this.setValue, this);
|
||||
this.numpadState.bind('change:mode', this.setNumpadMode, this);
|
||||
this.numpadState.reset();
|
||||
this.setNumpadMode();
|
||||
}
|
||||
},
|
||||
setNumpadMode: function() {
|
||||
this.numpadState.set({mode: 'payment'});
|
||||
},
|
||||
setValue: function(val) {
|
||||
this.currentPaymentLines.last().set({amount: val});
|
||||
},
|
||||
});
|
||||
|
||||
module.ReceiptWidget = instance.web.OldWidget.extend({
|
||||
init: function(parent, options) {
|
||||
this._super(parent);
|
||||
this.model = options.model;
|
||||
this.pos = options.pos;
|
||||
this.pos = options.pos;
|
||||
this.user = this.pos.get('user');
|
||||
this.company = this.pos.get('company');
|
||||
this.shop_obj = this.pos.get('shop');
|
||||
},
|
||||
start: function() {
|
||||
this.pos.bind('change:selectedOrder', this.changeSelectedOrder, this);
|
||||
this.changeSelectedOrder();
|
||||
},
|
||||
renderElement: function() {
|
||||
this.$element.html(qweb_template('pos-receipt-view'));
|
||||
$('button#pos-finish-order', this.$element).click(_.bind(this.finishOrder, this));
|
||||
$('button#print-the-ticket', this.$element).click(_.bind(this.print, this));
|
||||
},
|
||||
print: function() {
|
||||
window.print();
|
||||
},
|
||||
finishOrder: function() {
|
||||
this.pos.get('selectedOrder').destroy();
|
||||
},
|
||||
changeSelectedOrder: function() {
|
||||
if (this.currentOrderLines)
|
||||
this.currentOrderLines.unbind();
|
||||
this.currentOrderLines = (this.pos.get('selectedOrder')).get('orderLines');
|
||||
this.currentOrderLines.bind('add', this.refresh, this);
|
||||
this.currentOrderLines.bind('change', this.refresh, this);
|
||||
this.currentOrderLines.bind('remove', this.refresh, this);
|
||||
if (this.currentPaymentLines)
|
||||
this.currentPaymentLines.unbind();
|
||||
this.currentPaymentLines = (this.pos.get('selectedOrder')).get('paymentLines');
|
||||
this.currentPaymentLines.bind('all', this.refresh, this);
|
||||
this.refresh();
|
||||
},
|
||||
refresh: function() {
|
||||
this.currentOrder = this.pos.get('selectedOrder');
|
||||
$('.pos-receipt-container', this.$element).html(qweb_template('pos-ticket')({widget:this}));
|
||||
},
|
||||
});
|
||||
|
||||
module.OrderButtonWidget = instance.web.OldWidget.extend({
|
||||
tagName: 'li',
|
||||
template_fct: qweb_template('pos-order-selector-button-template'),
|
||||
|
@ -583,60 +353,164 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
},
|
||||
});
|
||||
|
||||
module.ActionbarWidget = instance.web.Widget.extend({
|
||||
template:'pos-actionbar',
|
||||
module.ActionBarWidget = instance.web.Widget.extend({
|
||||
template:'ActionBarWidget',
|
||||
init: function(parent, options){
|
||||
this._super(parent,options);
|
||||
this.left_button_list = [];
|
||||
this.right_button_list = [];
|
||||
this.button_list = [];
|
||||
},
|
||||
start: function(){
|
||||
console.log('hello world!');
|
||||
window.actionbarwidget = this;
|
||||
},
|
||||
destroyButtons:function(position){
|
||||
var button_list;
|
||||
if(position === 'left'){
|
||||
button_list = this.left_button_list;
|
||||
this.left_button_list = [];
|
||||
}else if (position === 'right'){
|
||||
button_list = this.right_button_list;
|
||||
this.right_button_list = [];
|
||||
}else{
|
||||
return this;
|
||||
}
|
||||
for(var i = 0; i < button_list.length; i++){
|
||||
button_list[i].destroy();
|
||||
destroy_buttons:function(){
|
||||
for(var i = 0; i < this.button_list.length; i++){
|
||||
this.button_list[i].destroy();
|
||||
}
|
||||
this.button_list = [];
|
||||
return this;
|
||||
},
|
||||
addNewButton: function(position,button_options){
|
||||
if(arguments.length == 2){
|
||||
var button_list;
|
||||
var $button_list;
|
||||
if(position === 'left'){
|
||||
button_list = this.left_button_list;
|
||||
$button_list = $('.pos-actionbar-left-region');
|
||||
}else if(position === 'right'){
|
||||
button_list = this.right_button_list;
|
||||
$button_list = $('.pos-actionbar-right-region');
|
||||
}
|
||||
add_new_button: function(button_options){
|
||||
if(arguments.length == 1){
|
||||
var button = new module.ActionButtonWidget(this,button_options);
|
||||
button_list.push(button);
|
||||
button.appendTo($button_list);
|
||||
this.button_list.push(button);
|
||||
button.appendTo($('.pos-actionbar-button-list'));
|
||||
}else{
|
||||
for(var i = 1; i < arguments.length; i++){
|
||||
this.addNewButton(position,arguments[i]);
|
||||
for(var i = 0; i < arguments.length; i++){
|
||||
this.add_new_button(arguments[i]);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
/*
|
||||
renderElement: function() {
|
||||
//this.$element.html(this.template_fct());
|
||||
},*/
|
||||
});
|
||||
|
||||
module.ProductCategoriesWidget = instance.web.Widget.extend({
|
||||
init: function(parent, options){
|
||||
this._super(parent);
|
||||
this.pos = options.pos;
|
||||
this.on_change_category.add_last(_.bind(this.search_and_categories, this));
|
||||
this.search_and_categories();
|
||||
},
|
||||
start: function() {
|
||||
this.search_and_categories();
|
||||
this.$element.find(".oe-pos-categories-list a").click(_.bind(this.changeCategory, this));
|
||||
},
|
||||
template_fct: qweb_template('ProductCategoriesWidget'),
|
||||
template:'ProductCategoriesWidget',
|
||||
renderElement: function() {
|
||||
var self = this;
|
||||
var c;
|
||||
this.$element.empty();
|
||||
this.$element.html(QWeb.render(this.template, {
|
||||
breadcrumb: (function() {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = self.ancestors.length; _i < _len; _i++) {
|
||||
c = self.ancestors[_i];
|
||||
_results.push(self.pos.categories[c]);
|
||||
}
|
||||
return _results;
|
||||
})(),
|
||||
categories: (function() {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = self.children.length; _i < _len; _i++) {
|
||||
c = self.children[_i];
|
||||
_results.push(self.pos.categories[c]);
|
||||
}
|
||||
return _results;
|
||||
})()
|
||||
}));
|
||||
},
|
||||
changeCategory: function(a) {
|
||||
var id = $(a.target).data("category-id");
|
||||
this.on_change_category(id);
|
||||
},
|
||||
search_and_categories: function(id){
|
||||
var self = this,
|
||||
c,
|
||||
product_list,
|
||||
allProducts,
|
||||
allPackages;
|
||||
|
||||
id = id || 0;
|
||||
|
||||
c = this.pos.categories[id];
|
||||
this.ancestors = c.ancestors;
|
||||
this.children = c.children;
|
||||
this.renderElement();
|
||||
|
||||
allProducts = this.pos.get('product_list');
|
||||
|
||||
allPackages = this.pos.get('product.packaging');
|
||||
|
||||
product_list = this.pos.get('product_list').filter( function(p){
|
||||
var _ref = p.pos_categ_id[0];
|
||||
return _.indexOf(c.subtree, _ref) >= 0;
|
||||
});
|
||||
|
||||
this.pos.get('products').reset(product_list);
|
||||
|
||||
this.$element.find('.searchbox input').keyup(function(){
|
||||
var results, search_str;
|
||||
search_str = $(this).val().toLowerCase();
|
||||
if(search_str){
|
||||
results = product_list.filter( function(p){
|
||||
return p.name.toLowerCase().indexOf(search_str) != -1;
|
||||
});
|
||||
self.$element.find('.search-clear').fadeIn();
|
||||
}else{
|
||||
results = product_list;
|
||||
self.$element.find('.search-clear').fadeOut();
|
||||
}
|
||||
self.pos.get('products').reset(results);
|
||||
});
|
||||
|
||||
this.$element.find('.search-clear').click(function(){
|
||||
self.pos.get('products').reset(product_list);
|
||||
self.$element.find('.searchbox input').val('').focus();
|
||||
self.$element.find('.search-clear').fadeOut();
|
||||
});
|
||||
},
|
||||
on_change_category: function(id) {},
|
||||
});
|
||||
|
||||
module.ProductListWidget = module.ScreenWidget.extend({
|
||||
template:'ProductListWidget',
|
||||
init: function(parent, options) {
|
||||
this._super(parent);
|
||||
this.model = options.model;
|
||||
this.pos = options.pos;
|
||||
this.pos.get('products').bind('reset', this.renderElement, this);
|
||||
},
|
||||
renderElement: function() {
|
||||
var self = this;
|
||||
this._super();
|
||||
this.pos.get('products').chain().map(function(product) {
|
||||
return new module.ProductWidget(this, {
|
||||
model: product,
|
||||
pos: self.pos
|
||||
})
|
||||
}).invoke('appendTo', this.$element);
|
||||
return this;
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
|
||||
// ---------- PopUp Widgets ----------
|
||||
|
||||
module.PopUp = instance.web.Widget.extend({
|
||||
close: function(){},
|
||||
});
|
||||
|
||||
module.HelpPopUp = module.PopUp.extend({
|
||||
});
|
||||
|
||||
module.ErrorPopUp = module.PopUp.extend({
|
||||
});
|
||||
|
||||
module.TicketOrInvoicePopUp = module.PopUp.extend({
|
||||
});
|
||||
|
||||
// ---------- OnScreen Keyboard Widget ----------
|
||||
|
||||
// A Widget that displays an onscreen keyboard.
|
||||
// There are two options when creating the widget :
|
||||
//
|
||||
|
@ -832,6 +706,8 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
},
|
||||
});
|
||||
|
||||
// ---------- Main Point of Sale Widget ----------
|
||||
|
||||
module.SynchNotification = instance.web.OldWidget.extend({
|
||||
template: "pos-synch-notification",
|
||||
init: function() {
|
||||
|
@ -853,6 +729,10 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
init: function() {
|
||||
this._super.apply(this, arguments);
|
||||
this.pos = new module.PosModel(this.session);
|
||||
this.numpad_visible = true;
|
||||
this.leftpane_visible = true;
|
||||
this.leftpane_width = '440px';
|
||||
this.cashier_controls_visible = true;
|
||||
},
|
||||
start: function() {
|
||||
var self = this;
|
||||
|
@ -871,14 +751,6 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
|
||||
this.buildWidgets();
|
||||
|
||||
//self.pos.app = new module.App(self.$element, self.pos);
|
||||
|
||||
//this.shopView = new module.ShopWidget(null, { 'pos': this.pos } );
|
||||
//this.shopView.$element = self.$element;
|
||||
//this.shopView.start();
|
||||
|
||||
|
||||
|
||||
instance.webclient.set_content_full_screen(true);
|
||||
|
||||
if (self.pos.get('bank_statements').length === 0)
|
||||
|
@ -895,17 +767,60 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
return qweb_template("POSWidget")();
|
||||
},
|
||||
buildWidgets: function() {
|
||||
var self = this;
|
||||
$('button#neworder-button', this.$element).click(_.bind(this.createNewOrder, this));
|
||||
|
||||
(this.pos.get('orders')).bind('add', this.orderAdded, this);
|
||||
(this.pos.get('orders')).add(new module.Order({'pos':this.pos}));
|
||||
this.productListView = new module.ProductListWidget(null, {
|
||||
|
||||
|
||||
this.search_product_screen = new module.SearchProductScreenWidget(this,{
|
||||
pos: this.pos,
|
||||
pos_widget: this,
|
||||
});
|
||||
this.productListView.$element = $("#products-screen-ol");
|
||||
this.productListView.renderElement();
|
||||
this.productListView.start();
|
||||
this.search_product_screen.appendTo($('#rightpane'));
|
||||
|
||||
this.scan_product_screen = new module.ScanProductScreenWidget(this,{
|
||||
pos: this.pos,
|
||||
pos_widget: this,
|
||||
});
|
||||
this.scan_product_screen.appendTo($('#rightpane'));
|
||||
|
||||
this.receipt_screen = new module.ReceiptScreenWidget(this, {
|
||||
pos: this.pos,
|
||||
pos_widget: this,
|
||||
});
|
||||
this.receipt_screen.appendTo($('#rightpane'));
|
||||
|
||||
this.payment_screen = new module.PaymentScreenWidget(this, {
|
||||
pos: this.pos,
|
||||
pos_widget: this,
|
||||
});
|
||||
this.payment_screen.appendTo($('#rightpane'));
|
||||
|
||||
this.welcome_screen = new module.WelcomeScreenWidget(this,{
|
||||
pos:this.pos,
|
||||
pos_widget: this,
|
||||
});
|
||||
this.welcome_screen.appendTo($('#rightpane'));
|
||||
|
||||
this.client_payment_screen = new module.ClientPaymentScreenWidget(this, {
|
||||
pos: this.pos,
|
||||
pos_widget: this,
|
||||
});
|
||||
this.client_payment_screen.appendTo($('#rightpane'));
|
||||
|
||||
this.scale_invite_screen = new module.ScaleInviteScreenWidget(this, {
|
||||
pos: this.pos,
|
||||
pos_widget: this,
|
||||
});
|
||||
this.scale_invite_screen.appendTo($('#rightpane'));
|
||||
|
||||
this.scale_product_screen = new module.ScaleProductScreenWidget(this, {
|
||||
pos: this.pos,
|
||||
pos_widget: this,
|
||||
});
|
||||
this.scale_product_screen.appendTo($('#rightpane'));
|
||||
|
||||
this.paypadView = new module.PaypadWidget(null, {
|
||||
pos: this.pos
|
||||
});
|
||||
|
@ -920,53 +835,34 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
});
|
||||
this.orderView.$element = $('#current-order-content');
|
||||
this.orderView.start();
|
||||
this.paymentView = new module.PaymentWidget(null, {
|
||||
pos: this.pos,
|
||||
});
|
||||
this.paymentView.$element = $('#payment-screen');
|
||||
this.paymentView.renderElement();
|
||||
this.paymentView.start();
|
||||
this.receiptView = new module.ReceiptWidget(null, {
|
||||
pos: this.pos,
|
||||
});
|
||||
this.receiptView.replace($('#receipt-screen'));
|
||||
this.stepSwitcher = new module.StepSwitcher(this, {pos: this.pos});
|
||||
this.pos.bind('change:selectedOrder', this.changedSelectedOrder, this);
|
||||
this.changedSelectedOrder();
|
||||
|
||||
this.categoryView = new module.CategoryWidget(null, {
|
||||
'element_id': 'products-screen-categories',
|
||||
'pos': this.pos,
|
||||
});
|
||||
this.categoryView.on_change_category.add_last(_.bind(this.search_and_categories, this));
|
||||
this.search_and_categories();
|
||||
this.action_bar = new module.ActionBarWidget(null);
|
||||
this.action_bar.appendTo($(".point-of-sale #content"));
|
||||
|
||||
this.onscreenKeyboard = new module.OnscreenKeyboardWidget(null, {
|
||||
this.onscreen_keyboard = new module.OnscreenKeyboardWidget(null, {
|
||||
'keyboard_model': 'simple'
|
||||
});
|
||||
this.onscreenKeyboard.appendTo($(".point-of-sale #content"));
|
||||
|
||||
this.barcodeReader = new module.BarcodeReader({'pos': self.pos });
|
||||
|
||||
//this.connection = new instance.web.Connection();
|
||||
//this.connection.session_bind('http://localhost:8069');
|
||||
this.connection = new instance.web.BaseConnection();
|
||||
this.connection.bind('http://localhost:8069');
|
||||
|
||||
|
||||
this.actionBar = new module.ActionbarWidget(null);
|
||||
this.actionBar.appendTo($(".point-of-sale #content"));
|
||||
this.actionBar.addNewButton('left',{
|
||||
label : 'Hello World',
|
||||
icon : '/point_of_sale/static/src/img/icons/png48/face-monkey.png',
|
||||
click : function() {
|
||||
|
||||
//console.log("Hello World!");
|
||||
self.connection.rpc("/pos/dispatch", {iface: 'light', status: 1}, function(result) {
|
||||
console.log(result);
|
||||
})
|
||||
}
|
||||
this.onscreen_keyboard.appendTo($(".point-of-sale #content"));
|
||||
|
||||
this.pos.screen_selector = new module.ScreenSelector({
|
||||
pos: this.pos,
|
||||
screen_set:{
|
||||
'products': this.search_product_screen,
|
||||
'scan': this.scan_product_screen,
|
||||
'payment' : this.payment_screen,
|
||||
'client_payment' : this.client_payment_screen,
|
||||
'scale_invite' : this.scale_invite_screen,
|
||||
'scale_product' : this.scale_product_screen,
|
||||
'receipt' : this.receipt_screen,
|
||||
'welcome' : this.welcome_screen,
|
||||
},
|
||||
default_client_screen: 'welcome',
|
||||
default_cashier_screen: 'products',
|
||||
default_mode: 'client',
|
||||
});
|
||||
window.screen_selector = this.pos.screen_selector;
|
||||
|
||||
this.pos.barcode_reader.connect();
|
||||
|
||||
},
|
||||
createNewOrder: function() {
|
||||
|
@ -986,75 +882,47 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
newOrderButton.appendTo($('#orders'));
|
||||
newOrderButton.selectOrder();
|
||||
},
|
||||
changedSelectedOrder: function() {
|
||||
if (this.currentOrder) {
|
||||
this.currentOrder.unbind('change:step', this.changedStep);
|
||||
}
|
||||
this.currentOrder = this.pos.get('selectedOrder');
|
||||
this.currentOrder.bind('change:step', this.changedStep, this);
|
||||
this.changedStep();
|
||||
},
|
||||
changedStep: function() {
|
||||
var step = this.currentOrder.get('step');
|
||||
this.orderView.setNumpadState(null);
|
||||
this.paymentView.setNumpadState(null);
|
||||
if (step === 'products') {
|
||||
this.orderView.setNumpadState(this.numpadView.state);
|
||||
} else if (step === 'payment') {
|
||||
this.paymentView.setNumpadState(this.numpadView.state);
|
||||
}
|
||||
},
|
||||
search_and_categories: function(id){
|
||||
var self = this,
|
||||
c,
|
||||
product_list,
|
||||
allProducts,
|
||||
allPackages;
|
||||
|
||||
id = id || 0;
|
||||
|
||||
c = this.pos.categories[id];
|
||||
this.categoryView.ancestors = c.ancestors;
|
||||
this.categoryView.children = c.children;
|
||||
this.categoryView.renderElement();
|
||||
this.categoryView.start();
|
||||
|
||||
allProducts = this.pos.get('product_list');
|
||||
|
||||
allPackages = this.pos.get('product.packaging');
|
||||
|
||||
product_list = this.pos.get('product_list').filter( function(p){
|
||||
var _ref = p.pos_categ_id[0];
|
||||
return _.indexOf(c.subtree, _ref) >= 0;
|
||||
});
|
||||
|
||||
this.pos.get('products').reset(product_list);
|
||||
|
||||
$('.searchbox input').keyup(function(){
|
||||
var results, search_str;
|
||||
search_str = $(this).val().toLowerCase();
|
||||
if(search_str){
|
||||
results = product_list.filter( function(p){
|
||||
return p.name.toLowerCase().indexOf(search_str) != -1;
|
||||
});
|
||||
$('.search-clear').fadeIn();
|
||||
}else{
|
||||
results = product_list;
|
||||
$('.search-clear').fadeOut();
|
||||
}
|
||||
self.pos.get('products').reset(results);
|
||||
});
|
||||
|
||||
$('.search-clear').click(function(){
|
||||
self.pos.get('products').reset(product_list);
|
||||
$('.searchbox input').val('').focus();
|
||||
$('.search-clear').fadeOut();
|
||||
});
|
||||
},
|
||||
changed_pending_operations: function () {
|
||||
var self = this;
|
||||
this.synch_notification.on_change_nbr_pending(self.pos.get('nbr_pending_operations').length);
|
||||
},
|
||||
set_numpad_visible: function(visible){
|
||||
if(visible != this.numpad_visible){
|
||||
this.numpad_visible = visible;
|
||||
if(visible){
|
||||
$('#numpad').show();
|
||||
$('#paypad').show();
|
||||
}else{
|
||||
$('#numpad').hide();
|
||||
$('#paypad').hide();
|
||||
}
|
||||
}
|
||||
},
|
||||
set_leftpane_visible: function(visible){
|
||||
if(visible != this.leftpane_visible){
|
||||
this.leftpane_visible = visible;
|
||||
if(visible){
|
||||
$('#leftpane').show().animate({'width':this.leftpane_width},500,'swing');
|
||||
$('#rightpane').animate({'left':this.leftpane_width},500,'swing');
|
||||
}else{
|
||||
var leftpane = $('#leftpane');
|
||||
$('#leftpane').animate({'width':'0px'},500,'swing', function(){ leftpane.hide(); });
|
||||
$('#rightpane').animate({'left':'0px'},500,'swing');
|
||||
}
|
||||
}
|
||||
},
|
||||
set_cashier_controls_visible: function(visible){
|
||||
if(visible != this.cashier_controls_visible){
|
||||
this.cashier_controls_visible = visible;
|
||||
if(visible){
|
||||
$('#loggedas').show();
|
||||
$('#rightheader').show();
|
||||
}else{
|
||||
$('#loggedas').hide();
|
||||
$('#rightheader').hide();
|
||||
}
|
||||
}
|
||||
},
|
||||
try_close: function() {
|
||||
var self = this;
|
||||
self.pos.flush().then(_.bind(function() {
|
||||
|
@ -1086,7 +954,7 @@ function openerp_pos_widgets(module, instance){ //module is instance.point_of_sa
|
|||
}, this));
|
||||
},
|
||||
close: function() {
|
||||
this.barcodeReader.disconnect();
|
||||
this.pos.barcode_reader.disconnect();
|
||||
|
||||
return new instance.web.Model("ir.model.data").get_func("search_read")([['name', '=', 'action_pos_close_statement']], ['res_id']).pipe(
|
||||
_.bind(function(res) {
|
||||
|
|
|
@ -79,57 +79,12 @@
|
|||
</footer>
|
||||
</div>
|
||||
<div id="rightpane">
|
||||
<div id="products-screen" class="step-screen selected-step">
|
||||
<!-- <div id="products-screen" class="step-screen selected-step">
|
||||
<div id="products-screen-categories"/>
|
||||
<ol id="products-screen-ol" class="product-list"></ol>
|
||||
</div>
|
||||
<div id="payment-screen" class="step-screen" style="display:none">
|
||||
<header><h2>Payment</h2></header>
|
||||
<div class="pos-step-container">
|
||||
<div class="pos-payment-container">
|
||||
<br />
|
||||
<table>
|
||||
<tr>
|
||||
<td class="paymentline-type">Total:</td>
|
||||
<td class="paymentline-amount pos-right-align">
|
||||
<t t-if="currency.position == 'before'" t-esc="currency.symbol"/>
|
||||
<span id="payment-due-total"></span>
|
||||
<t t-if="currency.position == 'after'" t-esc="currency.symbol"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table id="paymentlines">
|
||||
</table>
|
||||
<table>
|
||||
<tr>
|
||||
<td class="paymentline-type">Paid:</td>
|
||||
<td class="paymentline-amount pos-right-align">
|
||||
<t t-if="currency.position == 'before'" t-esc="currency.symbol"/>
|
||||
<span id="payment-paid-total"></span>
|
||||
<t t-if="currency.position == 'after'" t-esc="currency.symbol"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paymentline-type">Change:</td>
|
||||
<td class="paymentline-amount pos-right-align">
|
||||
<t t-if="currency.position == 'before'" t-esc="currency.symbol"/>
|
||||
<span id="payment-remaining"></span>
|
||||
<t t-if="currency.position == 'after'" t-esc="currency.symbol"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pos-payment-buttons">
|
||||
<button class="oe-back-to-products">
|
||||
<img src="/web/static/src/img/icons/gtk-go-back.png"></img>
|
||||
Back to Products</button>
|
||||
<button id="validate-order">
|
||||
<img src="/web/static/src/img/icons/gtk-apply.png"></img>
|
||||
Validate</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span id="receipt-screen"></span>
|
||||
</div> -->
|
||||
<!-- <div id="payment-screen" class="step-screen" style="display:none"> ... </div> -->
|
||||
<!-- <span id="receipt-screen"></span> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -147,7 +102,10 @@
|
|||
<t t-name="pos-close-warning">
|
||||
<div>There are pending operations that could not be saved into the database, are you sure you want to exit?</div>
|
||||
</t>
|
||||
<t t-name="pos-category-template">
|
||||
|
||||
<!-- ************ SEARCH PRODUCT SCREEN ************ -->
|
||||
|
||||
<t t-name="ProductCategoriesWidget">
|
||||
<header>
|
||||
<ol class="breadcrumb">
|
||||
<li class="oe-pos-categories-list">
|
||||
|
@ -181,6 +139,122 @@
|
|||
</ol>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="ProductListWidget">
|
||||
<ol id="products-screen-ol" class="product-list">
|
||||
</ol>
|
||||
</t>
|
||||
<t t-name="SearchProductScreenWidget">
|
||||
<div id="products-screen">
|
||||
<span class="placeholder-ProductCategoriesWidget" />
|
||||
<span class="placeholder-ProductListWidget" />
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<!-- ************ PAYMENT SCREEN ************ -->
|
||||
|
||||
<t t-name="PaymentScreenWidget">
|
||||
<div id="payment-screen" class="step-screen">
|
||||
<header><h2>Payment</h2></header>
|
||||
<div class="pos-step-container">
|
||||
<div class="pos-payment-container">
|
||||
<br />
|
||||
<table>
|
||||
<tr>
|
||||
<td class="paymentline-type">Total:</td>
|
||||
<td class="paymentline-amount pos-right-align">
|
||||
<t t-if="currency.position == 'before'" t-esc="currency.symbol"/>
|
||||
<span id="payment-due-total"></span>
|
||||
<t t-if="currency.position == 'after'" t-esc="currency.symbol"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table id="paymentlines">
|
||||
</table>
|
||||
<table>
|
||||
<tr>
|
||||
<td class="paymentline-type">Paid:</td>
|
||||
<td class="paymentline-amount pos-right-align">
|
||||
<t t-if="currency.position == 'before'" t-esc="currency.symbol"/>
|
||||
<span id="payment-paid-total"></span>
|
||||
<t t-if="currency.position == 'after'" t-esc="currency.symbol"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paymentline-type">Change:</td>
|
||||
<td class="paymentline-amount pos-right-align">
|
||||
<t t-if="currency.position == 'before'" t-esc="currency.symbol"/>
|
||||
<span id="payment-remaining"></span>
|
||||
<t t-if="currency.position == 'after'" t-esc="currency.symbol"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="pos-payment-buttons">
|
||||
<button class="oe-back-to-products">
|
||||
<img src="/web/static/src/img/icons/gtk-go-back.png"></img>
|
||||
Back to Products</button>
|
||||
<button id="validate-order">
|
||||
<img src="/web/static/src/img/icons/gtk-apply.png"></img>
|
||||
Validate</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t> <!-- pos-payment-screen -->
|
||||
|
||||
<!-- ************ RECEIPT SCREEN ************ -->
|
||||
|
||||
<t t-name="ReceiptScreenWidget">
|
||||
<div id="receipt-screen" class="step-screen" >
|
||||
<header><h2>Receipt</h2></header>
|
||||
<div class="pos-step-container">
|
||||
<div class="pos-receipt-container">
|
||||
</div>
|
||||
<div class='receipt-buttons'>
|
||||
<button id="print-the-ticket">
|
||||
Print</button>
|
||||
<button id="pos-finish-order">Next Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
|
||||
<t t-name="WelcomeScreenWidget">
|
||||
<div class="welcome-screen step-screen">
|
||||
<header><h2>WELCUM</h2></header>
|
||||
<p> plz scan ur card or thingie </p>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
|
||||
<t t-name="ScanProductScreenWidget">
|
||||
<div class="scan-product-screen step-screen">
|
||||
<header><h2>SCAN YOUR PRODUCT</h2></header>
|
||||
<p> please scan another product ! fun !</p>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="ClientPaymentScreenWidget">
|
||||
<div class="scan-product-screen step-screen">
|
||||
<header><h2>GIMME UR MONEY!!!11</h2></header>
|
||||
<p> It's a rubbery </p>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="ScaleInviteScreenWidget">
|
||||
<div class="scale-invite-screen step-screen">
|
||||
<header><h2>Put ur loot on the scale</h2></header>
|
||||
<p> Is it worth a ton ? </p>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="ScaleProductSelectionScreenWidget">
|
||||
<div class="scale-product-selection-screen">
|
||||
<span class="placeholder-ProductCategoriesWidget" />
|
||||
<span class="placeholder-ProductListWidget" />
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="pos-product-template">
|
||||
<a href="#">
|
||||
<div class="product-img">
|
||||
|
@ -229,20 +303,6 @@
|
|||
<t t-name="pos-order-selector-button-template">
|
||||
<button class="select-order"><t t-esc="widget.order.get('creationDate').toString('t')"/></button>
|
||||
</t>
|
||||
<t t-name="pos-receipt-view">
|
||||
<div id="receipt-screen" class="step-screen" style="display:none">
|
||||
<header><h2>Receipt</h2></header>
|
||||
<div class="pos-step-container">
|
||||
<div class="pos-receipt-container">
|
||||
</div>
|
||||
<div class='receipt-buttons'>
|
||||
<button id="print-the-ticket">
|
||||
Print</button>
|
||||
<button id="pos-finish-order">Next Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="pos-ticket">
|
||||
<div class="pos-sale-ticket">
|
||||
<div class="pos-right-align"><t t-esc="new Date().toString(Date.CultureInfo.formatPatterns.shortDate + ' ' +
|
||||
|
@ -294,15 +354,17 @@
|
|||
</table>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="pos-actionbar">
|
||||
<t t-name="ActionBarWidget">
|
||||
<div class="pos-actionbar">
|
||||
<ul class="pos-actionbar-left-region">
|
||||
<!-- <li class="button">yoyo</li>
|
||||
<li class="button">foo</li>
|
||||
<li class="button rightalign">bar</li> -->
|
||||
</ul>
|
||||
|
||||
<ul class="pos-actionbar-right-region">
|
||||
<div class="pos-actionbar-left-pane">
|
||||
<div class="button help-button">
|
||||
Help
|
||||
</div>
|
||||
<p class="total">
|
||||
Total: <span class="value"> 1234 </span>
|
||||
</p>
|
||||
</div>
|
||||
<ul class="pos-actionbar-button-list">
|
||||
<!-- <li class="button">BUTTOOON</li>
|
||||
<li class="button">JEEENKIINS</li>
|
||||
<li class="button rightalign">ARGH</li> -->
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue