Improvement with etherpad and with latest trunk code.

bzr revid: tta@openerp.com-20120511045856-yyrp8sfz6asnbujc
This commit is contained in:
Tejas Tank
2012-05-11 10:28:56 +05:30
24 changed files with 2089 additions and 164 deletions
+18 -16
View File
@@ -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: 2010-09-09 07:17+0000\n"
"Last-Translator: OpenERP Administrators <Unknown>\n"
"PO-Revision-Date: 2012-05-08 09:39+0000\n"
"Last-Translator: Tino Kraft <tino.kraft@gmail.com>\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-02-09 06:32+0000\n"
"X-Generator: Launchpad (build 14763)\n"
"X-Launchpad-Export-Date: 2012-05-09 04:47+0000\n"
"X-Generator: Launchpad (build 15213)\n"
#. module: account_analytic_analysis
#: field:account.analytic.account,revenue_per_hour:0
@@ -30,7 +30,7 @@ msgstr "Laskettu kaavalla: Laskun hinta enintään - Laskutettu"
#. module: account_analytic_analysis
#: help:account.analytic.account,last_worked_date:0
msgid "Date of the latest work done on this account."
msgstr "Päivämäärä viimeiselle Työ valmis merkinnälle"
msgstr "Päivämäärä viimeiselle Työ valmis -merkinnälle"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
@@ -38,11 +38,13 @@ msgid ""
"The contracts to be renewed because the deadline is passed or the working "
"hours are higher than the allocated hours"
msgstr ""
"Sopimukset on uusittava, koska deadline on mennyt tai työtuntien määrä "
"ylittää suunnitellun tuntimäärän"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Pending contracts to renew with your customer"
msgstr ""
msgstr "Asiakkaan kanssa uusittavat odottavat sopimukset"
#. module: account_analytic_analysis
#: help:account.analytic.account,hours_qtt_non_invoiced:0
@@ -125,8 +127,8 @@ msgid ""
"If invoice from the costs, this is the date of the latest work or cost that "
"have been invoiced."
msgstr ""
"Jos laskutetaan kuluista, tämä on päivä jolloin viimeisimmät työt tai kulut "
"on laskutettu."
"Jos laskutetaan kuluista, tämä on viimeisimpien töiden tai kulujen "
"laskutuspäivä."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
@@ -152,7 +154,7 @@ msgstr ""
#. module: account_analytic_analysis
#: field:account.analytic.account,remaining_hours:0
msgid "Remaining Time"
msgstr ""
msgstr "Jäljellä oleva aika"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_overdue
@@ -177,8 +179,8 @@ msgid ""
"if all these costs have been invoiced at the normal sale price provided by "
"the pricelist."
msgstr ""
"Perustuu projektin kustannuksille.Mikä olisi ollut tulo jos kaikki kulut "
"oltaisiin laskutettu hintalistan listahinnalla."
"Perustuu projektin kustannuksille: mikä olisi ollut tulo, jos kaikki kulut "
"olisi laskutettu hintalistan listahinnalla."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
@@ -220,7 +222,7 @@ msgstr "Tuntiyhteenveto käyttäjittäin"
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_invoiced:0
msgid "Invoiced Amount"
msgstr "Laskutetut määrä"
msgstr "Laskutettu määrä"
#. module: account_analytic_analysis
#: field:account.analytic.account,last_worked_invoiced_date:0
@@ -245,7 +247,7 @@ msgstr "Todellinen kate"
#. module: account_analytic_analysis
#: help:account.analytic.account,ca_invoiced:0
msgid "Total customer invoiced amount for this account."
msgstr "Asiakkaiden kokonaislaskutuksen määrä tälle kuukaudelle"
msgstr "Asiakkaiden kokonaislaskutuksen määrä tälle tilille."
#. module: account_analytic_analysis
#: model:ir.model,name:account_analytic_analysis.model_account_analytic_analysis_summary_month
@@ -260,7 +262,7 @@ msgstr "Virhe! Et voi luoda sisäkkäisiä analyyttisiä tilejä."
#. module: account_analytic_analysis
#: field:account.analytic.account,remaining_ca:0
msgid "Remaining Revenue"
msgstr "Jäljelläoleva liikevaihto"
msgstr "Jäljellä oleva liikevaihto"
#. module: account_analytic_analysis
#: help:account.analytic.account,remaining_hours:0
@@ -280,8 +282,8 @@ msgid ""
"If invoice from analytic account, the remaining amount you can invoice to "
"the customer based on the total costs."
msgstr ""
"Jos laskutetaan analyyttisiltä tileiltä, jäljelläoleva määrä jonka voit "
"veloittaa asiakkaala määräytyy kokonaiskuluista."
"Jos laskutetaan analyyttisiltä tileiltä, jäljellä oleva määrä, jonka voit "
"veloittaa asiakkaalta, määräytyy kokonaiskuluista."
#. module: account_analytic_analysis
#: help:account.analytic.account,revenue_per_hour:0
+107 -90
View File
@@ -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-05-07 23:42+0000\n"
"PO-Revision-Date: 2012-05-09 04:41+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-05-08 04:49+0000\n"
"X-Generator: Launchpad (build 15204)\n"
"X-Launchpad-Export-Date: 2012-05-09 04:47+0000\n"
"X-Generator: Launchpad (build 15213)\n"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_09_21
@@ -119,7 +119,7 @@ msgid ""
"The File contains an invalid CODA Transaction Family : %s!"
msgstr ""
"\n"
"ファイルは無効なCODA取引の一群が含まれています:%s"
"ファイルは無効なCODA取引ファミリが含まれています:%s"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_030
@@ -388,12 +388,12 @@ msgstr "取引コード"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_47_13
msgid "Discount foreign supplier's bills"
msgstr "外国仕入先請求書の割引"
msgstr "外国仕入先請求の割引"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcf_05
msgid "Direct debit"
msgstr "口座引き落とし"
msgstr "口座引落"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_47_11
@@ -568,7 +568,7 @@ msgstr "ユーロに相当額"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_47_50
msgid "Remittance of foreign bill credit after collection"
msgstr "訂正後害外請求クレジットの送金"
msgstr "集金後外国請求クレジットの送金"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_03_03
@@ -633,7 +633,7 @@ msgstr "クレジット手数料"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_43_58
msgid "Remittance of foreign cheque credit after collection"
msgstr "訂正後外国小切手クレジットの送金"
msgstr "集金後外国小切手クレジットの送金"
#. module: account_coda
#: model:account.coda.trans.type,description:account_coda.actt_8
@@ -702,7 +702,7 @@ msgstr "外国小切手の支払に関連する経費"
#. module: account_coda
#: field:account.coda.trans.code,parent_id:0
msgid "Family"
msgstr "家族"
msgstr "ファミリ"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_11_66
@@ -858,7 +858,7 @@ msgstr "海外証書による送金 - 通常貯められたクレジット"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_04_52
msgid "Loading GSM cards"
msgstr "GSMカードを入れる"
msgstr "GSMカードの装填"
#. module: account_coda
#: view:coda.bank.statement:0
@@ -1075,18 +1075,18 @@ msgstr "構造化フォーマット通信によるクレジット転送または
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_127
msgid "European direct debit (SEPA)"
msgstr ""
msgstr "欧州口座引落(SEPA)"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_068
msgid "Countervalue of an entry"
msgstr ""
msgstr "エントリーの対価"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_010
#: model:account.coda.trans.code,description:account_coda.actcc_80_31
msgid "Writ service fee"
msgstr ""
msgstr "令状サービス料"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:635
@@ -1096,43 +1096,45 @@ msgid ""
"The CODA Statement %s Starting Balance (%.2f) does not correspond with the "
"previous Closing Balance (%.2f) in journal %s!"
msgstr ""
"\n"
"CODA取引明細書 %s 期首残高(%.2f)は前期期末残高(%.2f)と対応していません。仕訳帳 %s"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_11_13
msgid "Your repurchase of issue"
msgstr ""
msgstr "発行物の買戻し"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_409
msgid "Safe deposit charges"
msgstr ""
msgstr "保管庫費用"
#. module: account_coda
#: field:coda.bank.account,def_payable:0
msgid "Default Payable Account"
msgstr ""
msgstr "デフォルト買掛金勘定"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_055
msgid "Repayment loan or credit capital"
msgstr ""
msgstr "返済ローンまたはクレジット資本"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_13_05
msgid "Settlement of fixed advance"
msgstr ""
msgstr "固定貸出金の決済"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_80_15
msgid ""
"Commission collected to the debit of the customer to whom the bank delivers "
"a key which gives access to the night safe"
msgstr ""
msgstr "銀行が夜間の安全なアクセス用のために提供した鍵に対する顧客の借方に集められた手数料"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_059
msgid "Default interest"
msgstr ""
msgstr "延滞利息"
#. module: account_coda
#: help:coda.bank.account,coda_st_naming:0
@@ -1148,97 +1150,106 @@ msgid ""
"CODA sequence number: %(coda)s\n"
"Paper Statement sequence number: %(paper)s"
msgstr ""
"CODA処理により生成される銀行取引明細書の名前を作成するためのルールを定義して下さい。\n"
"例えば、%(code)s%(y)s/%(paper)s\n"
"\n"
"変数:\n"
"銀行仕訳帳コード:%(code)s\n"
"4桁の西暦年:%(year)s\n"
"2桁の西暦年:%(y)s\n"
"CODA順序番号:%(coda)s\n"
"取引明細書用紙順序番号:%(paper)s"
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_108
#: model:account.coda.trans.code,description:account_coda.actcc_35_01
#: model:account.coda.trans.code,description:account_coda.actcc_35_50
msgid "Closing"
msgstr ""
msgstr "取引完了"
#. module: account_coda
#: help:coda.bank.statement.line,globalisation_id:0
msgid ""
"Code to identify transactions belonging to the same globalisation level "
"within a batch payment"
msgstr ""
msgstr "バッチ支払いの中で、同じ国際化レベルに沿った取引を識別するためのコード"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_07_05
msgid "Commercial paper claimed back"
msgstr ""
msgstr "コマーシャルペーパーの変換請求"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_411
msgid "Fixed collection charge"
msgstr ""
msgstr "固定回収費"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_09_64
msgid "Your winning lottery ticket"
msgstr ""
msgstr "当選宝くじ"
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_009
msgid ""
"Identification of the de ultimate ordering customer/debtor (SEPA SCT/SDD)"
msgstr ""
msgstr "最終的な注文顧客 / 債務者の識別(SEPA 送金・口座振込(SCT) / 自動引落し(SDD))"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_80_05
msgid "Card charges"
msgstr ""
msgstr "カード手数料"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_80_03
msgid "Payment card charges"
msgstr ""
msgstr "支払カード手数料"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_07_54
msgid "Remittance of commercial paper for discount"
msgstr ""
msgstr "割引のためのコマーシャルペーパーの送金"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_05_01
msgid "Payment"
msgstr ""
msgstr "支払"
#. module: account_coda
#: view:account.coda.import:0
msgid "_Cancel"
msgstr ""
msgstr "キャンセル"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_09_07
msgid "Purchase of gold/pieces"
msgstr ""
msgstr "金 / 硬貨の購入"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_01_15
msgid "Balance due insurance premium"
msgstr ""
msgstr "保険料不足額"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_11_11
msgid "Debit of the issuer by the bank in charge of the financial service"
msgstr ""
msgstr "金融サービス料金の中の銀行による発行者のデビット"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_03_58
msgid "Remittance of cheques, vouchers, etc. credit after collection"
msgstr ""
msgstr "集金後の小切手、クーポンなどクレジットの送金"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_09_19
#: model:account.coda.trans.code,description:account_coda.actcc_09_68
msgid "Difference in payment"
msgstr ""
msgstr "支払の差額"
#. module: account_coda
#: field:coda.bank.statement.line,date:0
msgid "Entry Date"
msgstr ""
msgstr "入力日"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:193
@@ -1249,11 +1260,13 @@ msgid ""
"Description' fields of your configuration record match with '%s', '%s' and "
"'%s' !"
msgstr ""
"\n"
"銀行口座番号、通貨、口座詳細について設定レコードの %s、%s、%s と一致することを確認して下さい。"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_47_58
msgid "Idem without guarantee"
msgstr ""
msgstr "保証なしの外国仕入先請求の送金"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:139
@@ -1263,16 +1276,18 @@ msgid ""
"CODA File with Filename '%s' and Creation Date '%s' has already been "
"imported !"
msgstr ""
"\n"
"CODAファイルファイル名 %s 作成日 %s は既にインポート済みです。"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_03_63
msgid "Second credit of unpaid cheque"
msgstr ""
msgstr "未払小切手の第2クレジット"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_065
msgid "Interest payment advice"
msgstr ""
msgstr "利払のアドバイス"
#. module: account_coda
#: field:account.coda.trans.code,type:0
@@ -1280,29 +1295,29 @@ msgstr ""
#: field:coda.bank.statement,type:0
#: field:coda.bank.statement.line,type:0
msgid "Type"
msgstr ""
msgstr "タイプ"
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_112
msgid "ATM payment (usually Eurocheque card)"
msgstr ""
msgstr "ATM支払(通常はユーロチェックカード)"
#. module: account_coda
#: field:coda.bank.account,description1:0
msgid "Primary Account Description"
msgstr ""
msgstr "主要口座詳細"
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_126
msgid "Term investments"
msgstr ""
msgstr "短期投資"
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_100
msgid ""
"(SEPA) payment with a structured format communication applying the ISO "
"standard 11649: Structured creditor reference to remittan"
msgstr ""
msgstr "(SEPA)ISO標準11649に適用した構造化フォーマットの通信による支払:送金するための構造化された債権者の参照"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:164
@@ -1311,117 +1326,119 @@ msgid ""
"\n"
"Foreign bank accounts with IBAN structure are not supported !"
msgstr ""
"\n"
"IBAN構造の外国銀行口座はサポートされていません。"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_100
msgid "Gross amount"
msgstr ""
msgstr "総額"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_43_62
msgid "Reversal of cheques"
msgstr ""
msgstr "小切手の取り消し"
#. module: account_coda
#: code:addons/account_coda/account_coda.py:299
#, python-format
msgid "Invalid action !"
msgstr ""
msgstr "無効なアクションです。"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_01_64
#: model:account.coda.trans.code,comment:account_coda.actcc_41_13
#: model:account.coda.trans.code,comment:account_coda.actcc_41_64
msgid "Intracompany"
msgstr ""
msgstr "社内"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_30_01
msgid "Spot purchase of foreign exchange"
msgstr ""
msgstr "外国為替のスポット購入"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_429
msgid "Foreign Stock Exchange tax"
msgstr ""
msgstr "外国株式取引税"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_05_05
#: model:account.coda.trans.code,description:account_coda.actcc_05_54
msgid "Reimbursement"
msgstr ""
msgstr "精算"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:868
#, python-format
msgid "None"
msgstr ""
msgstr "なし"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_405
msgid "Bill guarantee commission"
msgstr ""
msgstr "証書支払保証料"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_47_06
msgid "Extension"
msgstr ""
msgstr "拡張"
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_008
msgid "Identification of the de ultimate beneficiary/creditor (SEPA SCT/SDD)"
msgstr ""
msgstr "最終的な受益者 / 債権者の識別(SEPA 送金・口座振込(SCT) / 自動引落し(SDD))"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcf_49
msgid "Foreign counter transactions"
msgstr ""
msgstr "外国の店頭取引"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_09_01
msgid "Cash withdrawal"
msgstr ""
msgstr "現金払い出し"
#. module: account_coda
#: field:coda.bank.statement.line,partner_id:0
msgid "Partner"
msgstr ""
msgstr "パートナ"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_80_37
msgid ""
"Fixed right, either one-off or periodical; for details, see \"categories\""
msgstr ""
msgstr "右固定、1回限りまたは定期的の何れか;詳細については分類参照して下さい。"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_04_05
msgid "Loading Proton"
msgstr ""
msgstr "Protonの装填"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_80_21
msgid "Pay-packet charges"
msgstr ""
msgstr "給料袋手数料"
#. module: account_coda
#: field:coda.bank.account,transfer_account:0
msgid "Default Internal Transfer Account"
msgstr ""
msgstr "デフォルト内部転送口座"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_074
msgid "Mailing costs"
msgstr ""
msgstr "郵送費"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_47_07
msgid "Unpaid foreign bill"
msgstr ""
msgstr "未払外国請求"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_04_07
msgid "Payment by GSM"
msgstr ""
msgstr "GSMによる支払"
#. module: account_coda
#: view:coda.bank.account:0
@@ -1429,61 +1446,61 @@ msgstr ""
#: view:coda.bank.statement:0
#: selection:coda.bank.statement,type:0
msgid "Normal"
msgstr ""
msgstr "通常"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_05_50
msgid "Credit after collection"
msgstr ""
msgstr "集金後クレジット"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcf_80
msgid "Separately charged costs and provisions"
msgstr ""
msgstr "費用と手当てを別個に請求"
#. module: account_coda
#: view:coda.bank.account:0
#: field:coda.bank.account,currency:0
#: field:coda.bank.statement,currency:0
msgid "Currency"
msgstr ""
msgstr "通貨"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_07_06
msgid "Extension of maturity date"
msgstr ""
msgstr "満期日の延長"
#. module: account_coda
#: field:coda.bank.account,def_receivable:0
msgid "Default Receivable Account"
msgstr ""
msgstr "デフォルト売掛金勘定"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_80_15
msgid "Night safe"
msgstr ""
msgstr "夜間安全"
#. module: account_coda
#: view:coda.bank.statement.line:0
msgid "Total Amount"
msgstr ""
msgstr "合計金額"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_214
msgid "Issue commission (delivery order)"
msgstr ""
msgstr "発行手数料(配信順)"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_13_07
msgid ""
"Often by standing order or direct debit. In case of direct debit, family 13 "
"is used."
msgstr ""
msgstr "多くの場合、自動振替や口座引落。口座引落の場合はファミリ13が使われます。"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_04_01
msgid "Loading a GSM card"
msgstr ""
msgstr "GSMカードの装填"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_021
@@ -1493,23 +1510,23 @@ msgstr ""
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_026
msgid "Handling commission"
msgstr ""
msgstr "手数料の取り扱い"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_201
msgid "Advice notice commission"
msgstr ""
msgstr "アドバイス通知手数料"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_07_64
#: model:account.coda.trans.code,description:account_coda.actcc_47_64
msgid "Warrant"
msgstr ""
msgstr "保証"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_07_07
msgid "Unpaid commercial paper"
msgstr ""
msgstr "未払コマーシャルペーパー"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:120
@@ -1527,17 +1544,17 @@ msgstr ""
#: code:addons/account_coda/wizard/account_coda_import.py:497
#, python-format
msgid "Data Error!"
msgstr ""
msgstr "データエラー"
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_010
msgid "Information pertaining to sale or purchase of securities"
msgstr ""
msgstr "有価証券の販売または購入に関しての情報"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_09_54
msgid "Your payment ATM"
msgstr ""
msgstr "支払ATM"
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_123
@@ -1783,7 +1800,7 @@ msgstr ""
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_80_25
msgid "Renting of direct debit box"
msgstr ""
msgstr "口座引落箱の賃借"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_11_52
@@ -2113,7 +2130,7 @@ msgstr ""
#: model:account.coda.trans.code,description:account_coda.actcc_07_14
#: model:account.coda.trans.code,description:account_coda.actcc_47_14
msgid "Warrant fallen due"
msgstr ""
msgstr "満期保証"
#. module: account_coda
#: model:ir.actions.act_window,name:account_coda.action_imported_coda_files
@@ -2177,7 +2194,7 @@ msgstr ""
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_07_50
msgid "Remittance of commercial paper - credit after collection"
msgstr ""
msgstr "コマーシャルペーパーの送金 - 集金後クレジット"
#. module: account_coda
#: view:coda.bank.statement:0
@@ -2723,7 +2740,7 @@ msgstr ""
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_04_51
msgid "Unloading Proton"
msgstr ""
msgstr "Protonの装填解除"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_019
@@ -3024,7 +3041,7 @@ msgstr ""
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_107
msgid "Direct debit – DOM’80"
msgstr ""
msgstr "口座引落 - DOM'80"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_03_60
@@ -3193,7 +3210,7 @@ msgstr ""
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_04_01
msgid "Debit customer who is loading"
msgstr ""
msgstr "装填しているデビット顧客"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_047
+3 -1
View File
@@ -96,6 +96,8 @@ class account_analytic_account(osv.osv):
return self._compute_level_tree(cr, uid, ids, child_ids, res, fields, context)
def name_get(self, cr, uid, ids, context=None):
if isinstance(ids, (int, long)):
ids=[ids]
if not ids:
return []
res = []
@@ -132,7 +134,7 @@ class account_analytic_account(osv.osv):
return accounts
def _set_company_currency(self, cr, uid, ids, name, value, arg, context=None):
if type(ids) != type([]):
if isinstance(ids, (int, long)):
ids=[ids]
for account in self.browse(cr, uid, ids, context=context):
if account.company_id:
+95
View File
@@ -0,0 +1,95 @@
# Swedish 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-08 16:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Swedish <sv@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-09 04:47+0000\n"
"X-Generator: Launchpad (build 15213)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Uppgift"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Timebox"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "För att avbryta uppgiften"
#. module: crm_todo
#: constraint:project.task:0
msgid "Error ! Task end-date must be greater then task start-date"
msgstr "Fel ! Uppgiftens slutdatum måste komma efter startdatumet"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "crm.lead"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Nästa"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Mina uppgifter"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Uppgifter"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Klar"
#. module: crm_todo
#: constraint:project.task:0
msgid "Error ! You cannot create recursive tasks."
msgstr "Fel ! Du kan inte skapa rekursiva uppgifter"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Avbryt"
#. module: crm_todo
#: view:crm.lead:0
msgid "Extra Info"
msgstr "Tilläggsinformation"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Kundämne / affärsmöjlighet"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "För att ändra till klarstatus"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Bakåt"
+12 -12
View File
@@ -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: 2010-09-09 07:20+0000\n"
"Last-Translator: OpenERP Administrators <Unknown>\n"
"PO-Revision-Date: 2012-05-08 09:39+0000\n"
"Last-Translator: Jenny Perttola <jenny.perttola@uta.fi>\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-02-09 06:46+0000\n"
"X-Generator: Launchpad (build 14763)\n"
"X-Launchpad-Export-Date: 2012-05-09 04:47+0000\n"
"X-Generator: Launchpad (build 15213)\n"
#. module: hr_attendance
#: model:ir.ui.menu,name:hr_attendance.menu_hr_time_tracking
@@ -43,7 +43,7 @@ msgid ""
"You did not sign out the last time. Please enter the date and time you "
"signed out."
msgstr ""
"Et kirjautunut ulos viimekerralla. Anna päivä ja kellonaika kun kirjauduit "
"Et kirjautunut ulos viime kerralla. Anna päivä ja kellonaika kun kirjauduit "
"ulos."
#. module: hr_attendance
@@ -65,7 +65,7 @@ msgstr "Tulosta läsnäoloraporttien virheet"
#: code:addons/hr_attendance/wizard/hr_attendance_sign_in_out.py:161
#, python-format
msgid "The sign-out date must be in the past"
msgstr "Uloskirjautumispäivän tulee olla menneisyydessä"
msgstr "Uloskirjautumispäivän tulee olla mennyt ajankohta."
#. module: hr_attendance
#: report:report.hr.timesheet.attendance.error:0
@@ -198,7 +198,7 @@ msgstr "HR läsnäolo haku"
#. module: hr_attendance
#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_week
msgid "Attendances By Week"
msgstr ""
msgstr "Läsnäolot viikoittain"
#. module: hr_attendance
#: constraint:hr.attendance:0
@@ -275,7 +275,7 @@ msgstr ""
#. module: hr_attendance
#: view:hr.attendance:0
msgid "My Attendance"
msgstr ""
msgstr "Omat läsnäoloni"
#. module: hr_attendance
#: help:hr.attendance,action_desc:0
@@ -314,7 +314,7 @@ msgstr ""
#. module: hr_attendance
#: view:hr.attendance.week:0
msgid "Print Attendance Report Weekly"
msgstr ""
msgstr "Tulosta läsnäoloraportti viikoittain"
#. module: hr_attendance
#: selection:hr.attendance.month,month:0
@@ -435,7 +435,7 @@ msgstr ""
#. module: hr_attendance
#: view:hr.attendance.month:0
msgid "Print Attendance Report Monthly"
msgstr "Tulosta kuukausittainen läsnäoloraportti"
msgstr "Tulosta läsnäoloraportti kuukausittain"
#. module: hr_attendance
#: selection:hr.action.reason,action_type:0
@@ -495,7 +495,7 @@ msgstr "Viimeisin kirjautuminen"
#: selection:hr.attendance,action:0
#: view:hr.employee:0
msgid "Sign Out"
msgstr "Kirjaudu Ulos"
msgstr "Kirjaudu ulos"
#. module: hr_attendance
#: model:ir.actions.act_window,help:hr_attendance.action_hr_attendance_sigh_in_out
@@ -524,7 +524,7 @@ msgstr "Helmikuu"
#. module: hr_attendance
#: view:hr.attendance:0
msgid "Employee attendances"
msgstr "Työntekijöiden paikallaolot"
msgstr "Työntekijöiden läsnäolot"
#. module: hr_attendance
#: field:hr.sign.in.out,state:0
File diff suppressed because it is too large Load Diff
+19
View File
@@ -7,6 +7,23 @@ import string
class pad_common(osv.osv_memory):
_name = 'pad.common'
def pad_generate_url(self, cr, uid, model, context=None):
pad_url_template = self.pool.get('res.users').browse(cr,uid,[uid])[0].company_id.pad_url_template
s = string.ascii_uppercase + string.digits
salt = ''.join([s[random.randint(0, len(s) - 1)] for i in range(8)])
template_vars = {
'db' : cr.dbname,
'model' : model,
'salt' : salt,
}
return pad_url_template % template_vars
def _pad_api_key(self, cr, uid, context=None):
return self.pool.get('res.users').browse(cr,uid,[uid])[0].company_id.etherpad_api_key
def _pad_user_name(self, cr, uid, context=None):
return self.pool.get('res.users').browse(cr,uid,[uid])[0].name
def copy(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
@@ -31,6 +48,8 @@ class pad_common(osv.osv_memory):
_columns = {
'pad_url': fields.char('Full Screen', size=512),
'pad_api_key': fields.function(_pad_api_key, type='text', string="Pad API Key"),
'pad_user_name': fields.function(_pad_user_name, type='text', string="Current Pad User"),
}
_defaults = {
'pad_url': lambda self, cr, uid, context: self.pool.get('ir.attachment').pad_generate_url(cr, uid, self._name)
+6 -2
View File
@@ -1,15 +1,19 @@
# -*- coding: utf-8 -*-
from osv import fields, osv
PAD_TEMPLATE = 'http://pad.tn/p/%(db)s-%(model)s-%(salt)s'
PAD_TEMPLATE = 'http://beta.etherpad.org/p/%(db).10s-%(model)s-%(salt)s'
PAD_API_KEY = 'EtherpadFTW'
class company_pad(osv.osv):
_inherit = 'res.company'
_columns = {
'pad_url_template': fields.char('Pad URL Template', size=128, required=True,
help="Template used to generate pad URL."),
'etherpad_api_key': fields.char('Pad API Key', size=128),
}
_defaults = {
'pad_url_template': PAD_TEMPLATE
'pad_url_template': PAD_TEMPLATE,
'etherpad_api_key': PAD_API_KEY,
}
+1
View File
@@ -9,6 +9,7 @@
<xpath expr="//page[@string='Configuration']" position="inside">
<separator string="Pad" colspan="4"/>
<field name="pad_url_template"/>
<field name="etherpad_api_key"/>
</xpath>
</field>
</record>
+2 -1
View File
@@ -20,8 +20,9 @@ instance.web.form.FieldEtherpad = instance.web.form.AbstractField.extend(_.exten
},
render_value: function() {
var show_value = instance.web.format_value(this.get('value'), this, '');
console.log(this);
if (!this.get("effective_readonly")) {
this.$element.find('div').html('<iframe width="100%" height="100%" frameborder="0" src="'+show_value.split('\n')[0]+'?showChat=false"></iframe>');
this.$element.find('div').html('<iframe width="100%" height="100%" frameborder="0" src="'+show_value.split('\n')[0]+'?showChat=false&showLineNumbers=false"></iframe>');
} else {
if(this.get('value') != false)
{
+3 -1
View File
@@ -29,7 +29,7 @@
"sequence": 8,
'complexity': "easy",
"images": ["images/gantt.png", "images/project_dashboard.jpeg","images/project_task_tree.jpeg","images/project_task.jpeg","images/project.jpeg","images/task_analysis.jpeg"],
"depends": ["base_setup", "product", "analytic", "board", "mail", "resource", "pad"],
"depends": ["base_setup", "product", "analytic", "board", "mail", "resource", "pad", "web_kanban"],
"description": """
Project management module tracks multi-level projects, tasks, work done on tasks, eso.
======================================================================================
@@ -70,6 +70,8 @@ Dashboard for project members that includes:
'installable': True,
'auto_install': False,
'application': True,
'css': ['static/src/css/project.css'],
'js': ['static/src/js/dropdown.js','static/src/js/project.js'],
'certificate': '0075116868317',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+17 -1
View File
@@ -155,6 +155,13 @@ class project(osv.osv):
raise osv.except_osv(_('Operation Not Permitted !'), _('You cannot delete a project containing tasks. I suggest you to desactivate it.'))
return super(project, self).unlink(cr, uid, ids, *args, **kwargs)
def _task_count(self, cr, uid, ids, field_name, arg, context=None):
res = dict.fromkeys(ids, 0)
task_ids = self.pool.get('project.task').search(cr, uid, [('project_id', 'in', ids)])
for task in self.pool.get('project.task').browse(cr, uid, task_ids, context):
res[task.project_id.id] += 1
return res
_columns = {
'complete_name': fields.function(_complete_name, string="Project Name", type='char', size=250),
'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the project without removing it."),
@@ -191,7 +198,15 @@ class project(osv.osv):
'warn_header': fields.text('Mail Header', help="Header added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'warn_footer': fields.text('Mail Footer', help="Footer added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'use_tasks': fields.boolean('Use Tasks', help="Check this field if this project is aimed at managing tasks"),
'task_count': fields.function(_task_count, type='integer', string="Open Tasks"),
'color': fields.integer('Color Index'),
'company_uom_id': fields.related('company_id', 'project_time_mode_id', type='many2one', relation='product.uom'),
}
def dummy(self, cr, uid, ids, context):
return True
def _get_type_common(self, cr, uid, context):
ids = self.pool.get('project.task.type').search(cr, uid, [('project_default','=',1)], context=context)
return ids
@@ -201,7 +216,8 @@ class project(osv.osv):
'active': True,
'priority': 1,
'sequence': 10,
'type_ids': _get_type_common
'type_ids': _get_type_common,
'use_tasks': True,
}
# TODO: Why not using a SQL contraints ?
+99 -16
View File
@@ -43,12 +43,17 @@
</group>
<notebook colspan="4">
<page string="Administration">
<group col="2" colspan="2" name="kanban">
<separator colspan="2" string="Project Management"/>
<field name="use_tasks"/>
</group>
<group col="2" colspan="2">
<separator colspan="2" string="Performance"/>
<separator colspan="4" string="Performance"/>
<field name="planned_hours" widget="float_time"/>
<field name="effective_hours" widget="float_time" />
<field name="resource_calendar_id"/>
</group>
<newline/>
<group col="2" colspan="2" name="misc">
<separator colspan="4" string="Miscelleanous"/>
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection" required="1"/>
@@ -155,6 +160,94 @@
</tree>
</field>
</record>
<act_window
context="{'search_default_project_id': [active_id], 'default_project_id': active_id}"
id="act_project_project_2_project_task_all"
name="Tasks"
res_model="project.task"
src_model="project.project"
view_mode="kanban,tree,form,calendar,graph"
view_type="form"/>
<record model="ir.ui.view" id="view_project_kanban">
<field name="name">project.project.kanban</field>
<field name="model">project.project</field>
<field name="type">kanban</field>
<field name="arch" type="xml">
<kanban>
<field name="effective_hours"/>
<field name="planned_hours"/>
<field name="name"/>
<field name="members"/>
<field name="use_tasks"/>
<field name="user_id"/>
<field name="date"/>
<field name="color"/>
<field name="task_count"/>
<templates>
<t t-name="kanban-box">
<div class="project_vignettes">
<li t-attf-class="#{kanban_color(record.color.raw_value)} oe_project_kanban_vignette" id="oe_project_kanban_vignette">
<a href="#" class="oe_project_kanban_action dropdown-toggle"><span class="oe_i">B</span></a>
<ul class="dropdown-menu">
<li ><a type="edit" >Edit...</a></li>
<li ><a type="delete">Delete</a></li>
<li>
<ul class="color-chooser">
<li><a t-att-id="record.id.value" class="bgcolor"><span class="oe_kanban_color_0 square"></span></a></li>
<li><a t-att-id="record.id.value" class="bgcolor"><span class="oe_kanban_color_1 square"></span></a></li>
<li><a t-att-id="record.id.value" class="bgcolor"><span class="oe_kanban_color_2 square"></span></a></li>
<li><a t-att-id="record.id.value" class="bgcolor"><span class="oe_kanban_color_3 square"></span></a></li>
<li><a t-att-id="record.id.value" class="bgcolor"><span class="oe_kanban_color_4 square"></span></a></li>
<li><a t-att-id="record.id.value" class="bgcolor"><span class="oe_kanban_color_5 square"></span></a></li>
</ul>
</li>
</ul>
<h4><t t-esc="record.name.value.substr(0,33)"/><t t-if="record.name.value.length > 33">...</t></h4>
<div id="list">
<a t-if="record.use_tasks.raw_value" class="oe_project_buttons"
id="1" name="%(act_project_project_2_project_task_all)d" type="action">
Tasks(<field name="task_count"/>)</a>
</div>
<br/>
<button class="click_button" name="dummy" type="object">
<table class="project_fields">
<tr id="deadline" t-if="record.date.raw_value">
<th align="left">Deadline</th>
<td align="left"><field name="date"/></td>
</tr>
<tr>
<th align="left" width="70px">Progress</th>
<td align="left">
<t t-esc="Math.round(record.effective_hours.raw_value)"/> / <t t-esc="Math.round(record.planned_hours.raw_value)"/> <field name="company_uom_id"/>
</td>
</tr>
</table>
<br/>
<t t-foreach="record.members.raw_value" t-as="member">
<img t-att-src="kanban_image('res.users', 'avatar', member)" t-att-id="member" class="project_avatar"/>
</t>
</button>
</li>
</div>
<script type="text/javascript">
//open dropdwon when click on the icon.
$('.dropdown-toggle').dropdown();
//show and hide the dropdown icon when mouseover and mouseour.
$('.oe_project_kanban_vignette').mouseover(function() {
return $(this).find('.oe_project_kanban_action').show();
}).mouseout(function() {
return $(this).find('.oe_project_kanban_action').hide();
});
</script>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_project_project_gantt" model="ir.ui.view">
<field name="name">project.project.gantt</field>
@@ -171,8 +264,8 @@
<field name="res_model">project.project</field>
<field name="view_type">form</field>
<field name="domain">[]</field>
<field name="view_mode">tree,form,gantt</field>
<field name="view_id" ref="view_project"/>
<field name="view_mode">kanban,tree,form,gantt</field>
<field name="view_id" ref="view_project_kanban"/>
<field name="search_view_id" ref="view_project_project_filter"/>
<field name="context">{}</field>
<field name="help">A project contains a set of tasks or issues that will be performed by your resources assigned to it. A project can be hierarchically structured, as a child of a Parent Project. This allows you to design large project structures with different phases spread over the project duration cycle. Each user can set his default project in his own preferences to automatically filter the tasks or issues he usually works on. If you choose to invoice the time spent on a project task, you can find project tasks to be invoiced in the billing section.</field>
@@ -314,8 +407,7 @@
</form>
</field>
</record>
<!-- Project Task Kanban View -->
<record model="ir.ui.view" id="view_task_kanban">
<field name="name">project.task.kanban</field>
@@ -624,22 +716,13 @@
<menuitem id="menu_tasks_config" name="GTD" parent="project.menu_definitions" sequence="1"/>
<menuitem id="menu_project_config_project" name="Projects and Stages" parent="menu_definitions" sequence="1"/>
<menuitem id="menu_project_config_project" name="Stages" parent="menu_definitions" sequence="1"/>
<menuitem action="open_task_type_form" id="menu_task_types_view" parent="menu_project_config_project" sequence="2" groups="base.group_no_one"/>
<menuitem action="open_view_project_all" id="menu_open_view_project_all" parent="menu_project_config_project" sequence="1" groups="base.group_no_one"/>
<menuitem action="open_view_project_all" id="menu_projects" name="Projects" parent="menu_project_management" sequence="1"/>
<act_window context="{'search_default_user_id': [active_id], 'default_user_id': active_id}" id="act_res_users_2_project_project" name="User's projects" res_model="project.project" src_model="res.users" view_mode="tree,form" view_type="form"/>
<act_window
context="{'search_default_project_id': [active_id], 'default_project_id': active_id}"
id="act_project_project_2_project_task_all"
name="Tasks"
res_model="project.task"
src_model="project.project"
view_mode="tree,form,calendar,graph"
view_type="form"/>
<record id="task_company" model="ir.ui.view">
<field name="name">res.company.task.config</field>
<field name="model">res.company</field>
+220
View File
@@ -0,0 +1,220 @@
.project_fields {
margin-top: 1px;
margin-bottom: 1px;
font-size: 11px;
padding-left: 0px;
}
.project_fields td {
border: none;
padding: 2px 0 2px 8px; }
.project_fields th {
padding: 0;
border-right: 1px solid #dddddd;
vertical-align: top;
margin-right: 8px; }
.project_vignettes{
padding: 4px !important }
.project_vignettes li {
float: left;
}
.project_vignettes .project_avatar {
width: 30px;
height: 30px;
padding-left: 0px; }
.project_vignettes .project_fields {
width: 100%; }
.project_vignettes .project_fields th {
width: 120px;
font-weight: normal; }
.project_vignettes .project_fields td {
color: #888888; }
.project_vignettes h4 a {
color: #4c4c4c; }
.project_vignettes > li h4 {
margin-bottom: 2px;
padding-left: 2px; }
.oe_project_buttons {
padding: 2px 2px !important;
background: none !important;
background-color: transparent !important;
border: hidden !important;
color: #8A89BA !important;
}
.oe_project_buttons:hover {
cursor: pointer;
color: #0000FF;
}
.project_avatar {
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
}
.click_button {
background: none !important;
background-color: transparent !important;
border: hidden !important;
min-height: 155px;
min-width: 265px;
border: hidden;
/*margin-left: 6px !important;*/
margin-top: 3px !important;
text-align: left;
vertical-align: super;
font-size: 11px;
-webkit-box-align: baseline;
}
.click_button:hover {
cursor: default !important;
}
.dropdown-menu {
display: none;
position: absolute; }
.dropdown {
position: relative; }
.dropdown-toggle:after {
width: 0;
height: 0;
display: inline-block;
content: "&darr";
text-indent: -99999px;
vertical-align: top;
margin-top: 8px;
margin-left: 4px;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid white;
filter: alpha(opacity=50);
-khtml-opacity: 0.5;
-moz-opacity: 0.5;
opacity: 0.5; }
.oe_project_kanban_vignette .dropdown-menu .color-chooser {
padding: 0 3px; }
.oe_project_kanban_vignette .dropdown-menu .color-chooser li {
float: left; }
.oe_project_kanban_vignette .dropdown-menu .color-chooser li a {
padding: 2px; }
a.oe_project_kanban_action {
position: absolute;
right: 0;
display: none;
}
a.oe_project_kanban_action:hover {
text-decoration: none; }
a.oe_project_kanban_action .oe_i {
color: #4c4c4c; }
.square {
display: inline-block;
width: 18px;
height: 18px;
border:1px solid grey;
}
.oe_kanban_color_0 {
background: white;
}
.oe_kanban_color_1 {
background: #B1DCFE;
}
.oe_kanban_color_2 {
background: #FF8E8E;
}
.oe_kanban_color_3 {
background: khaki;
}
.oe_kanban_color_4 {
background: thistle;
}
.oe_kanban_color_5 {
background: orange;
}
.open {
display: block;
}
.open .dropdown-menu {
display: block; }
a.oe_project_kanban_action {
position: absolute;
right: 0;
}
a.oe_project_kanban_action:hover {
text-decoration: none;
}
a.oe_project_kanban_action .eo_i {
color: #4c4c4c; }
.oe_project_kanban_vignette {
position: relative;
min-height: 50px;
/*background: white;*/
border: 1px solid #d8d8d8;
border-bottom-color: #b9b9b9;
padding: 6px;
margin: 6px 0;
display: inline-block;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
.oe_project_kanban_vignette:last-child {
margin-bottom: 0; }
.oe_project_kanban_vignette:hover {
-moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.6);
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.6);
-box-shadow: 0 0 3px rgba(0, 0, 0, 0.6); }
.oe_project_kanban_vignette h4 {
margin: 0 0 2px; }
.oe_project_kanban_vignette .dropdown-menu {
top: 30px;
right: -140px;
padding: 4px;
border: 1px solid #afafb6;
width: 160px;
overflow-x: hidden;
z-index: 900;
background: white;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); }
.oe_project_kanban_vignette .dropdown-menu p {
margin-left: 12px; }
.oe_project_kanban_vignette .dropdown-menu li {
float: none;
display: block;
background-color: none; }
.oe_project_kanban_vignette .dropdown-menu li a {
display: block;
padding: 3px 6px;
clear: both;
font-weight: normal;
line-height: 14px;
color: #4c4c4c;
text-decoration: none; }
.oe_project_kanban_vignette .dropdown-menu li a:hover {
background: #f0f0fa;
background: -moz-linear-gradient(#f0f0fa, #eeeef6);
background: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6));
background: -webkit-linear-gradient(#f0f0fa, #eeeef6);
-moz-box-shadow: none;
-webkit-box-shadow: none;
-box-shadow: none; }
.oe_project_kanban_vignette .dropdown-menu .color-chooser {
padding: 0 3px; }
.oe_project_kanban_vignette .dropdown-menu .color-chooser li {
float: left; }
.oe_project_kanban_vignette .dropdown-menu .color-chooser li a {
padding: 2px; }
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

+92
View File
@@ -0,0 +1,92 @@
/* ============================================================
* bootstrap-dropdown.js v2.0.2
* http://twitter.github.com/bootstrap/javascript.html#dropdowns
* ============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function( $ ){
"use strict"
/* DROPDOWN CLASS DEFINITION
* ========================= */
var toggle = '[data-toggle="dropdown"]'
, Dropdown = function ( element ) {
var $el = $(element).on('click.dropdown.data-api', this.toggle)
$('html').on('click.dropdown.data-api', function () {
$el.parent().removeClass('open')
})
}
Dropdown.prototype = {
constructor: Dropdown
, toggle: function ( e ) {
var $this = $(this)
, selector = $this.attr('data-target')
, $parent
, isActive
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
$parent = $(selector)
$parent.length || ($parent = $this.parent())
isActive = $parent.hasClass('open')
clearMenus()
!isActive && $parent.toggleClass('open')
return false
}
}
function clearMenus() {
$(toggle).parent().removeClass('open')
}
/* DROPDOWN PLUGIN DEFINITION
* ========================== */
$.fn.dropdown = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('dropdown')
if (!data) $this.data('dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.dropdown.Constructor = Dropdown
/* APPLY TO STANDARD DROPDOWN ELEMENTS
* =================================== */
$(function () {
$('html').on('click.dropdown.data-api', clearMenus)
$('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
})
}( window.jQuery );
+48
View File
@@ -0,0 +1,48 @@
openerp.project = function(openerp) {
openerp.web_kanban.ProjectKanban = openerp.web_kanban.KanbanRecord.include({
bind_events: function() {
var self = this;
self._super();
if(this.view.dataset.model == 'project.project') {
/*set avatar title for members.
In many2many fields, returns only list of ids.
we can implement return value of m2m fields like [(1,"Adminstration"),...].
*/
_.each($(this.$element).find('.project_avatar'),function(avatar){
var dataset = new openerp.web.DataSetSearch(this, 'res.users', self.session.context, [['id','=',avatar.id]]);
dataset.read_slice(['name']).then(function(result){
avatar.setAttribute("title",result[0].name)
});
});
// set sequence like Tasks,Issues,Timesheets and Phases
var my_list = $("#list a")
my_list.sort(function (a, b) {
var aValue = parseInt(a.id);
var bValue = parseInt(b.id);
return aValue == bValue ? 0 : aValue < bValue ? -1 : 1;
});
$('#list').replaceWith(my_list);
// when vignette is clicked, it opens the first action in sequence
if (my_list.length != 0) {
var click_button = $(this.$element).find('.click_button')
click_button.attr('data-name', my_list[0].getAttribute('data-name'));
click_button.attr('data-type', "action");
}
/* set background color.
we can do other way to implement new widget.
because we need to rpc call for that.
*/
this.$element.find('.bgcolor').click(function(){
var color = parseInt($(this).find('span').attr('class').split(' ')[0].substring(16))
var color_class = $(this).find('span').attr('class').split(' ')[0]
$(this).closest('#oe_project_kanban_vignette').removeClass().addClass(color_class + ' oe_project_kanban_vignette');
self.view.dataset.write(parseInt(this.id), {color:color});
});
}
}
});
}
+17 -1
View File
@@ -222,6 +222,8 @@ class project_issue(crm.crm_case, osv.osv):
}),
}
def on_change_project(self, cr, uid, ids, project_id, context=None):
return {}
_defaults = {
'active': 1,
@@ -506,9 +508,23 @@ project_issue()
class project(osv.osv):
_inherit = "project.project"
def _issue_count(self, cr, uid, ids, field_name, arg, context=None):
res = dict.fromkeys(ids, 0)
issue_ids = self.pool.get('project.issue').search(cr, uid, [('project_id', 'in', ids)])
for issue in self.pool.get('project.issue').browse(cr, uid, issue_ids, context):
res[issue.project_id.id] += 1
return res
_columns = {
'project_escalation_id' : fields.many2one('project.project','Project Escalation', help='If any issue is escalated from the current Project, it will be listed under the project selected here.', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'reply_to' : fields.char('Reply-To Email Address', size=256)
'reply_to' : fields.char('Reply-To Email Address', size=256),
'use_issues' : fields.boolean('Use Issues', help="Check this field if this project manages issues"),
'issue_count': fields.function(_issue_count, type='integer'),
}
_defaults = {
'use_issues': True,
}
def _check_escalation(self, cr, uid, ids, context=None):
@@ -45,15 +45,6 @@
<field name="act_window_id" ref="project_issue_categ_act0"/>
</record>
<act_window
context="{'search_default_project_id': [active_id], 'default_project_id': active_id}"
id="act_project_project_2_project_issue_all"
name="Issues"
res_model="project.issue"
src_model="project.project"
view_mode="tree,form,calendar,graph"
view_type="form"/>
<menuitem name="Issues" id="menu_project_issue_track" parent="project.menu_project_management"
action="project_issue_categ_act0" sequence="15"/>
</data>
+29 -1
View File
@@ -334,6 +334,14 @@
</search>
</field>
</record>
<act_window id="act_project_project_2_project_issue_all"
name="Issues"
src_model="project.project"
res_model="project.issue"
view_type="form"
view_mode="kanban,tree,form,calendar,graph"
context="{'search_default_project_id': [active_id], 'default_project_id': active_id}"/>
# ------------------------------------------------------
# Project
@@ -345,12 +353,32 @@
<field name="type">form</field>
<field name="inherit_id" ref="project.edit_project"/>
<field name="arch" type="xml">
<field name="use_tasks" position="after">
<field name="use_issues"/>
</field>
<field name="priority" position="before">
<field name="project_escalation_id"/>
<field name="reply_to"/>
</field>
</field>
</record>
<record id="view_project_kanban_inherited" model="ir.ui.view">
<field name="name">project.project.kanban.inherited</field>
<field name="model">project.project</field>
<field name="type">kanban</field>
<field name="inherit_id" ref="project.view_project_kanban"/>
<field name="arch" type="xml">
<field name="use_tasks" position="after">
<field name="use_issues"/>
<field name="issue_count" invisible="1"/>
</field>
<xpath expr="//div[@id='list']" position="inside">
<a t-if="record.use_issues.raw_value" class="oe_project_buttons"
id="2" name="%(act_project_project_2_project_issue_all)d" type="action">
Issues(<field name="issue_count"/>)</a>
</xpath>
</field>
</record>
</data>
</openerp>
@@ -215,9 +215,23 @@ project_user_allocation()
class project(osv.osv):
_inherit = "project.project"
def _phase_count(self, cr, uid, ids, field_name, arg, context=None):
res = dict.fromkeys(ids, 0)
phase_ids = self.pool.get('project.phase').search(cr, uid, [('project_id', 'in', ids)])
for phase in self.pool.get('project.phase').browse(cr, uid, phase_ids, context):
res[phase.project_id.id] += 1
return res
_columns = {
'phase_ids': fields.one2many('project.phase', 'project_id', "Project Phases"),
'use_phases': fields.boolean('Use Phases', help="Check this field if project manages phases"),
'phase_count': fields.function(_phase_count, type='integer', string="Open Phases"),
}
_defaults = {
'use_phases': True,
}
def schedule_phases(self, cr, uid, ids, context=None):
context = context or {}
if type(ids) in (long, int,):
@@ -84,12 +84,12 @@
</search>
</field>
</record>
<record id="act_resouce_allocation" model="ir.actions.act_window">
<record id="act_resouce_allocation" model="ir.actions.act_window">
<field name="name">Planning of Users</field>
<field name="res_model">project.user.allocation</field>
<field name="view_type">form</field>
<field name="view_mode">gantt,tree,form,calendar</field>
<field name="context">{}</field>
<field name="context">{}</field>
<field name="search_view_id" ref="view_project_user_allocation_search"/>
</record>
@@ -98,6 +98,44 @@
# Project Phase
# ------------------------------------------------------
<record id="project_phase_form" model="ir.ui.view">
<field name="name">Inherit project form : Phase</field>
<field name="model">project.project</field>
<field name="type">form</field>
<field name="inherit_id" ref="project.edit_project"/>
<field name="arch" type="xml">
<field name="use_tasks" position="after">
<field name="use_phases"/>
</field>
</field>
</record>
<act_window id="act_project_phases"
name="Phases"
src_model="project.project"
res_model="project.phase"
view_type="form"
view_mode="tree,form"
context="{'search_default_project_id': [active_id], 'default_project_id': active_id}"
/>
<record id="view_project_kanban_phase" model="ir.ui.view">
<field name="name">project.project.kanban.inherited</field>
<field name="model">project.project</field>
<field name="type">kanban</field>
<field name="inherit_id" ref="project.view_project_kanban"/>
<field name="arch" type="xml">
<field name="use_tasks" position="after">
<field name="use_phases"/>
<field name="phase_count"/>
</field>
<xpath expr="//div[@id='list']" position="inside">
<a t-if="record.use_phases.raw_value" class="oe_project_buttons"
id="4" name="%(act_project_phases)d" type="action">Phases(<field name="phase_count"/>)</a>
</xpath>
</field>
</record>
<record id="view_project_phase_form" model="ir.ui.view">
<field name="name">project.phase.form</field>
<field name="model">project.phase</field>
@@ -278,7 +316,7 @@
<field name="inherit_id" ref="project.view_task_form2"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='effective_hours']" position="after">
<field name="phase_id"/>
<field name="phase_id" context="{'default_project_id' : project_id}"/>
</xpath>
</field>
</record>
@@ -327,16 +365,6 @@
view_mode="tree,form"
/>
<act_window
context="{'search_default_project_id': active_id, 'default_project_id': active_id}"
id="act_project_phases"
name="Phases"
res_model="project.phase"
src_model="project.project"
view_mode="tree,form"
view_type="form"
/>
# ------------------------------------------------------
# Menu Items
# ------------------------------------------------------
@@ -29,6 +29,36 @@ from tools.translate import _
class project_project(osv.osv):
_inherit = 'project.project'
def _to_invoice(self, cr, uid, ids, field_name, arg, context=None):
account_analytic_line = self.pool.get("account.analytic.line")
res = {}
for project in self.browse(cr,uid,ids,context=context):
line_ids = account_analytic_line.search(cr, uid, [('account_id', '=', project.analytic_account_id.id), ('to_invoice','=',1), ('invoice_id','=',False)])
lines = account_analytic_line.browse(cr, uid, line_ids, context)
res[project.id] = {
'amount_to_invoice': sum(line.amount for line in lines),
'time_to_invoice': sum(line.unit_amount for line in lines),
}
return res
def _timesheet_count(self, cr, uid, ids, field_name, arg, context=None):
account_analytic_line = self.pool.get('account.analytic.line')
res = {}
for project in self.browse(cr, uid, ids, context):
line_ids = account_analytic_line.search(cr, uid, [('account_id', '=', project.analytic_account_id.id)])
res[project.id] = len(line_ids)
return res
_columns = {
'use_timesheets': fields.boolean('Timesheets', help="Check this field if this project manages timesheets"),
'amount_to_invoice': fields.function(_to_invoice, string="Amount to Invoice", multi="sums"),
'time_to_invoice': fields.function(_to_invoice, string="Time to Invoice", multi="sums"),
'timesheet_count': fields.function(_timesheet_count, type='integer', string="Issue"),
}
_defaults = {
'use_timesheets': True,
}
def onchange_partner_id(self, cr, uid, ids, part=False, context=None):
res = super(project_project, self).onchange_partner_id(cr, uid, ids, part, context)
if part and res and ('value' in res):
@@ -39,6 +69,28 @@ class project_project(osv.osv):
factor_id = data_obj.browse(cr, uid, data_id).res_id
res['value'].update({'to_invoice': factor_id})
return res
def open_timesheets(self, cr, uid, ids, context=None):
""" open Timesheets view """
project = self.browse(cr, uid, ids[0], context)
try:
journal_id = self.pool.get('ir.model.data').get_object(cr, uid, 'hr_timesheet', 'analytic_journal').id
except ValueError:
journal_id = False
view_context = {
'search_default_account_id': [project.analytic_account_id.id],
'default_account_id': project.analytic_account_id.id,
'default_journal_id': journal_id,
}
return {
'type': 'ir.actions.act_window',
'name': _('Bill Tasks Works'),
'res_model': 'account.analytic.line',
'view_type': 'form',
'view_mode': 'tree,form',
'context': view_context,
'nodestroy': True,
}
project_project()
@@ -7,6 +7,11 @@
<field name="type">form</field>
<field name="inherit_id" ref="project.edit_project"/>
<field name="arch" type="xml">
<field name="use_tasks" position='after'>
<field name="use_timesheets"/>
<field name="amount_to_invoice" invisible="True"/>
<field name="time_to_invoice" invisible="True"/>
</field>
<field name="warn_customer" position="after">
<group colspan="4" col="4">
<separator colspan="4" string="Invoicing Data"/>
@@ -19,6 +24,41 @@
</field>
</record>
<record id="view_project_kanban_inherited" model="ir.ui.view">
<field name="name">project.project.kanban.inherited</field>
<field name="model">project.project</field>
<field name="type">kanban</field>
<field name="inherit_id" ref="project.view_project_kanban"/>
<field name="arch" type="xml">
<field name="use_tasks" position="after">
<field name="use_timesheets"/>
<field name="timesheet_count"/>
<field name="currency_id"/>
<field name="partner_id"/>
</field>
<xpath expr="//div[@id='list']" position="inside">
<a t-if="record.use_timesheets.raw_value" class="oe_project_buttons"
id="3" name="open_timesheets" type="object">Timesheets(<field name="timesheet_count"/>)</a>
</xpath>
<xpath expr="//tr[@id='deadline']" position="before">
<t t-if="record.partner_id.raw_value">
<tr>
<th align="left">Amount to invoice</th>
<td align="left">
<field name="amount_to_invoice"/> <t t-esc="record.currency_id.raw_value[1].split(' ')[1][1]"/>
</td>
</tr>
<tr>
<th align="left">Time to Invoice</th>
<td align="left">
<field name="time_to_invoice"/> <field name="company_uom_id"/>
</td>
</tr>
</t>
</xpath>
</field>
</record>
<record id="project_invoice_form_cutomer" model="ir.ui.view">
<field name="name">Inherit project form : Customer</field>
<field name="model">project.project</field>