diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 758385d66cb..91c6d6608fd 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -612,6 +612,13 @@ + + + + +
diff --git a/addons/account_asset/i18n/th.po b/addons/account_asset/i18n/th.po index fdc6c7b4754..cd7967a5eb2 100644 --- a/addons/account_asset/i18n/th.po +++ b/addons/account_asset/i18n/th.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-05-15 10:09+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-07-24 08:53+0000\n" +"Last-Translator: Sumonchai ( เหลา ) \n" "Language-Team: Thai \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-05-16 05:12+0000\n" -"X-Generator: Launchpad (build 16626)\n" +"X-Launchpad-Export-Date: 2013-07-25 05:13+0000\n" +"X-Generator: Launchpad (build 16700)\n" #. module: account_asset #: view:account.asset.asset:0 @@ -42,7 +42,7 @@ msgstr "" #. module: account_asset #: view:asset.asset.report:0 msgid "Group By..." -msgstr "" +msgstr "จัดกลุ่มตาม..." #. module: account_asset #: field:asset.asset.report,gross_value:0 @@ -58,7 +58,7 @@ msgstr "" #: field:asset.asset.report,asset_id:0 #: model:ir.model,name:account_asset.model_account_asset_asset msgid "Asset" -msgstr "" +msgstr "สินทรัพย์" #. module: account_asset #: help:account.asset.asset,prorata:0 @@ -72,7 +72,7 @@ msgstr "" #: selection:account.asset.asset,method:0 #: selection:account.asset.category,method:0 msgid "Linear" -msgstr "" +msgstr "เชิงเส้น" #. module: account_asset #: field:account.asset.asset,company_id:0 @@ -80,24 +80,24 @@ msgstr "" #: view:asset.asset.report:0 #: field:asset.asset.report,company_id:0 msgid "Company" -msgstr "" +msgstr "บริษัท" #. module: account_asset #: view:asset.modify:0 msgid "Modify" -msgstr "" +msgstr "ปรับเปลี่ยน" #. module: account_asset #: selection:account.asset.asset,state:0 #: view:asset.asset.report:0 #: selection:asset.asset.report,state:0 msgid "Running" -msgstr "" +msgstr "กำลังทำงานอยู่" #. module: account_asset #: view:account.asset.asset:0 msgid "Set to Draft" -msgstr "" +msgstr "กำหนดให้เป็นแบบร่าง" #. module: account_asset #: view:asset.asset.report:0 @@ -110,7 +110,7 @@ msgstr "" #. module: account_asset #: field:asset.modify,name:0 msgid "Reason" -msgstr "" +msgstr "เหตุผล" #. module: account_asset #: field:account.asset.asset,method_progress_factor:0 @@ -122,7 +122,7 @@ msgstr "" #: 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 "" +msgstr "หมวดหมู่สินทรัพย์" #. module: account_asset #: view:account.asset.asset:0 @@ -173,7 +173,7 @@ msgstr "" #: model:ir.ui.menu,name:account_asset.menu_finance_assets #: model:ir.ui.menu,name:account_asset.menu_finance_config_assets msgid "Assets" -msgstr "" +msgstr "สินทรัพย์" #. module: account_asset #: field:account.asset.category,account_depreciation_id:0 @@ -187,7 +187,7 @@ msgstr "" #: view:asset.modify:0 #: field:asset.modify,note:0 msgid "Notes" -msgstr "" +msgstr "บันทึกย่อ" #. module: account_asset #: field:account.asset.depreciation.line,move_id:0 @@ -221,7 +221,7 @@ msgstr "" #. module: account_asset #: field:account.asset.asset,code:0 msgid "Reference" -msgstr "" +msgstr "อ้างถึง" #. module: account_asset #: view:account.asset.asset:0 @@ -246,7 +246,7 @@ msgstr "" #: view:asset.asset.report:0 #: selection:asset.asset.report,state:0 msgid "Draft" -msgstr "" +msgstr "ฉบับร่าง" #. module: account_asset #: view:asset.asset.report:0 @@ -273,13 +273,13 @@ msgstr "" #. module: account_asset #: field:account.asset.category,account_analytic_id:0 msgid "Analytic account" -msgstr "" +msgstr "วิเคราะห์บัญชี" #. module: account_asset #: field:account.asset.asset,method:0 #: field:account.asset.category,method:0 msgid "Computation Method" -msgstr "" +msgstr "วิธีการคำนวณ" #. module: account_asset #: constraint:account.asset.asset:0 @@ -308,7 +308,7 @@ msgstr "" #. module: account_asset #: field:account.asset.asset,salvage_value:0 msgid "Salvage Value" -msgstr "" +msgstr "มูลค่าซาก" #. module: account_asset #: field:account.asset.asset,category_id:0 @@ -364,20 +364,20 @@ msgstr "" #: field:account.asset.category,method_time:0 #: field:account.asset.history,method_time:0 msgid "Time Method" -msgstr "" +msgstr "วิธีการจัดการเวลา" #. module: account_asset #: view:asset.depreciation.confirmation.wizard:0 #: view:asset.modify:0 msgid "or" -msgstr "" +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 "" +msgstr "บันทึกย่อ" #. module: account_asset #: help:account.asset.history,method_time:0 @@ -409,7 +409,7 @@ msgstr "" #. module: account_asset #: view:account.asset.asset:0 msgid "Closed" -msgstr "" +msgstr "ปิด" #. module: account_asset #: help:account.asset.asset,state:0 @@ -425,13 +425,13 @@ msgstr "" #: field:account.asset.asset,state:0 #: field:asset.asset.report,state:0 msgid "Status" -msgstr "" +msgstr "สถานะ" #. module: account_asset #: field:account.asset.asset,partner_id:0 #: field:asset.asset.report,partner_id:0 msgid "Partner" -msgstr "" +msgstr "พาร์ทเนอร์" #. module: account_asset #: view:asset.asset.report:0 @@ -451,7 +451,7 @@ msgstr "" #. module: account_asset #: field:account.asset.history,user_id:0 msgid "User" -msgstr "" +msgstr "ผู้ใช้" #. module: account_asset #: field:account.asset.category,account_asset_id:0 @@ -482,12 +482,12 @@ msgstr "" #. module: account_asset #: field:account.asset.asset,active:0 msgid "Active" -msgstr "" +msgstr "เปิดใช้งาน" #. module: account_asset #: field:account.asset.depreciation.line,parent_state:0 msgid "State of Asset" -msgstr "" +msgstr "สถานะของสินทรัพย์" #. module: account_asset #: field:account.asset.depreciation.line,name:0 @@ -498,12 +498,12 @@ msgstr "" #: view:account.asset.asset:0 #: field:account.asset.asset,history_ids:0 msgid "History" -msgstr "" +msgstr "ประวัติ" #. module: account_asset #: view:asset.depreciation.confirmation.wizard:0 msgid "Compute Asset" -msgstr "" +msgstr "คำนวณสินทรัพย์" #. module: account_asset #: field:asset.depreciation.confirmation.wizard,period_id:0 @@ -513,7 +513,7 @@ msgstr "" #. module: account_asset #: view:account.asset.asset:0 msgid "General" -msgstr "" +msgstr "ทั่วไป" #. module: account_asset #: field:account.asset.asset,prorata:0 @@ -524,7 +524,7 @@ msgstr "" #. module: account_asset #: model:ir.model,name:account_asset.model_account_invoice msgid "Invoice" -msgstr "" +msgstr "ใบแจ้งหนี้" #. module: account_asset #: view:account.asset.asset:0 @@ -535,13 +535,13 @@ msgstr "" #: view:asset.depreciation.confirmation.wizard:0 #: view:asset.modify:0 msgid "Cancel" -msgstr "" +msgstr "ยกเลิก" #. module: account_asset #: selection:account.asset.asset,state:0 #: selection:asset.asset.report,state:0 msgid "Close" -msgstr "" +msgstr "ปิด" #. module: account_asset #: model:ir.model,name:account_asset.model_account_move_line @@ -558,7 +558,7 @@ msgstr "" #: view:asset.asset.report:0 #: field:asset.asset.report,purchase_date:0 msgid "Purchase Date" -msgstr "" +msgstr "วันที่ซื้อ" #. module: account_asset #: selection:account.asset.asset,method:0 @@ -606,7 +606,7 @@ msgstr "" #. module: account_asset #: field:account.asset.asset,currency_id:0 msgid "Currency" -msgstr "" +msgstr "สกุลเงิน" #. module: account_asset #: field:account.asset.category,journal_id:0 @@ -637,7 +637,7 @@ msgstr "" #: view:asset.asset.report:0 #: field:asset.asset.report,move_check:0 msgid "Posted" -msgstr "" +msgstr "ลงบัญชีแล้ว" #. module: account_asset #: model:ir.actions.act_window,help:account_asset.action_asset_asset_report @@ -660,7 +660,7 @@ msgstr "" #. module: account_asset #: field:account.asset.category,name:0 msgid "Name" -msgstr "" +msgstr "ชื่อ" #. module: account_asset #: help:account.asset.category,open_asset:0 @@ -672,7 +672,7 @@ msgstr "" #. module: account_asset #: field:asset.asset.report,name:0 msgid "Year" -msgstr "" +msgstr "ปี" #. module: account_asset #: model:ir.model,name:account_asset.model_account_asset_depreciation_line @@ -693,7 +693,7 @@ msgid "Amount of Depreciation Lines" msgstr "" #. module: account_asset -#: code:addons/account_asset/wizard/wizard_asset_compute.py:49 +#: code:addons/account_asset/wizard/wizard_asset_compute.py:50 #, python-format msgid "Created Asset Moves" msgstr "" @@ -701,7 +701,7 @@ msgstr "" #. module: account_asset #: field:account.asset.depreciation.line,sequence:0 msgid "Sequence" -msgstr "" +msgstr "ลำดับ" #. module: account_asset #: help:account.asset.category,method_period:0 @@ -711,7 +711,7 @@ msgstr "" #. module: account_asset #: field:account.asset.history,date:0 msgid "Date" -msgstr "" +msgstr "วันที่" #. module: account_asset #: field:account.asset.asset,method_number:0 diff --git a/addons/crm/i18n/th.po b/addons/crm/i18n/th.po index 082ed1efa6d..99c347c9ed3 100644 --- a/addons/crm/i18n/th.po +++ b/addons/crm/i18n/th.po @@ -8,29 +8,29 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2011-01-16 16:48+0000\n" -"Last-Translator: Rungsan Suyala \n" +"PO-Revision-Date: 2013-07-24 09:15+0000\n" +"Last-Translator: Supakorn S \n" "Language-Team: Thai \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:09+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-25 05:13+0000\n" +"X-Generator: Launchpad (build 16700)\n" #. module: crm #: view:crm.lead.report:0 msgid "# Leads" -msgstr "" +msgstr "เป้าหมาย" #. module: crm #: help:sale.config.settings,fetchmail_lead:0 msgid "" "Allows you to configure your incoming mail server, and create leads from " "incoming emails." -msgstr "" +msgstr "อนุญาตให้ปรับแต่งเมลเซิฟเวอร์ขาเข้า และสร้างเป้าหมายจากเมลที่เข้ามา" #. module: crm -#: code:addons/crm/crm_lead.py:881 +#: code:addons/crm/crm_lead.py:898 #: selection:crm.case.stage,type:0 #: view:crm.lead:0 #: selection:crm.lead,type:0 @@ -38,7 +38,7 @@ msgstr "" #: selection:crm.lead.report,type:0 #, python-format msgid "Lead" -msgstr "" +msgstr "ผู้นำ" #. module: crm #: view:crm.lead:0 @@ -55,22 +55,27 @@ msgid "" "Description: [[object.description]]\n" " " msgstr "" +"คำเตือน มีเป้าหมายที่ไม่ได้ประมวลผลที่เก่ากว่า 5 วัน\n" +"ชื่อ:\n" +"ID:\n" +"รายละเอียด:\n" +" " #. module: crm #: field:crm.opportunity2phonecall,action:0 #: field:crm.phonecall2phonecall,action:0 msgid "Action" -msgstr "" +msgstr "การกระทำ" #. module: crm #: model:ir.actions.server,name:crm.action_set_team_sales_department msgid "Set team to Sales Department" -msgstr "" +msgstr "ตั้งทีมในแผนกขาย" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 msgid "Select Opportunities" -msgstr "" +msgstr "เลือกโอกาส" #. module: crm #: model:res.groups,name:crm.group_fund_raising @@ -96,12 +101,12 @@ msgstr "ชื่อขั้นตอน" #: view:crm.lead.report:0 #: view:crm.phonecall.report:0 msgid "Salesperson" -msgstr "" +msgstr "พนักงานขาย" #. module: crm #: model:ir.model,name:crm.model_crm_lead_report msgid "CRM Lead Analysis" -msgstr "" +msgstr "วิเคราะห์เป้าหมาย" #. module: crm #: view:crm.lead.report:0 @@ -113,12 +118,12 @@ msgstr "วัน" #. module: crm #: view:crm.lead:0 msgid "Company Name" -msgstr "" +msgstr "ชื่อบริษัท" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor6 msgid "Training" -msgstr "" +msgstr "หลักสูตรอบรม" #. module: crm #: model:ir.actions.act_window,name:crm.crm_lead_categ_action @@ -136,7 +141,7 @@ msgstr "" #: help:crm.lead,message_unread:0 #: help:crm.phonecall,message_unread:0 msgid "If checked new messages require your attention." -msgstr "" +msgstr "ถ้าการตรวจสอบข้อความใหม่ให้ระบุความสนใจของคุณ" #. module: crm #: help:crm.lead.report,creation_day:0 @@ -167,7 +172,7 @@ msgstr "แคมเปญ" #. module: crm #: view:crm.lead:0 msgid "Search Opportunities" -msgstr "" +msgstr "ค้นหาโอกาส" #. module: crm #: help:crm.lead.report,deadline_month:0 @@ -184,8 +189,8 @@ msgid "" msgstr "" #. module: crm -#: code:addons/crm/crm_lead.py:624 -#: code:addons/crm/crm_lead.py:744 +#: code:addons/crm/crm_lead.py:640 +#: code:addons/crm/crm_lead.py:761 #: code:addons/crm/crm_phonecall.py:280 #, python-format msgid "Warning!" @@ -228,12 +233,12 @@ msgstr "" #: view:crm.lead:0 #: field:crm.lead,state_id:0 msgid "State" -msgstr "" +msgstr "สถานะ" #. module: crm #: field:res.partner,meeting_count:0 msgid "# Meetings" -msgstr "" +msgstr "ประชุม" #. module: crm #: model:ir.actions.server,name:crm.action_email_reminder_lead @@ -253,14 +258,14 @@ msgstr "คำตอบไม่รวม :" #. module: crm #: model:ir.model,name:crm.model_crm_merge_opportunity msgid "Merge opportunities" -msgstr "" +msgstr "รวมโอกาส" #. module: crm #: view:crm.lead.report:0 #: model:ir.actions.act_window,name:crm.action_report_crm_lead #: model:ir.ui.menu,name:crm.menu_report_crm_leads_tree msgid "Leads Analysis" -msgstr "การวิเคราะห์ Lead" +msgstr "การวิเคราะห์เป้าหมาย" #. module: crm #: code:addons/crm/crm_lead.py:1010 @@ -294,10 +299,10 @@ msgid "Prospect Partner" msgstr "" #. module: crm -#: code:addons/crm/crm_lead.py:982 +#: code:addons/crm/crm_lead.py:1002 #, python-format msgid "No Subject" -msgstr "" +msgstr "ไม่มีชื่อเรื่อง" #. module: crm #: field:crm.lead,contact_name:0 @@ -330,7 +335,7 @@ msgstr "" #: field:crm.phonecall,partner_id:0 #: field:crm.phonecall2phonecall,contact_name:0 msgid "Contact" -msgstr "ชื่อผู้ติดต่อ" +msgstr "รายชื่อ" #. module: crm #: help:crm.case.section,change_responsible:0 @@ -357,7 +362,7 @@ msgstr "" #. module: crm #: field:res.partner,opportunity_ids:0 msgid "Leads and Opportunities" -msgstr "" +msgstr "เป้าหมายและโอกาส" #. module: crm #: model:ir.actions.act_window,help:crm.relate_partner_opportunities @@ -381,7 +386,7 @@ msgstr "" #: model:crm.case.stage,name:crm.stage_lead7 #: view:crm.lead:0 msgid "Dead" -msgstr "" +msgstr "ไม่สำเร็จ" #. module: crm #: field:crm.case.section,message_unread:0 @@ -389,7 +394,7 @@ msgstr "" #: field:crm.lead,message_unread:0 #: field:crm.phonecall,message_unread:0 msgid "Unread Messages" -msgstr "" +msgstr "ข้อความที่ยังไม่ได้อ่าน" #. module: crm #: view:crm.segmentation:0 @@ -403,7 +408,7 @@ msgstr "" #: selection:crm.lead2opportunity.partner.mass,action:0 #: selection:crm.partner.binding,action:0 msgid "Link to an existing customer" -msgstr "" +msgstr "เชื่อมโยงกับลูกค้าที่มีอยู่" #. module: crm #: field:crm.lead,write_date:0 @@ -413,7 +418,7 @@ msgstr "วันที่ปรับปรุง" #. module: crm #: field:crm.case.section,user_id:0 msgid "Team Leader" -msgstr "" +msgstr "หัวหน้าทีม" #. module: crm #: help:crm.case.stage,probability:0 @@ -435,10 +440,10 @@ msgstr "ประเภท" #. module: crm #: view:crm.lead.report:0 msgid "#Opportunities" -msgstr "" +msgstr "โอกาส" #. module: crm -#: code:addons/crm/crm_lead.py:624 +#: code:addons/crm/crm_lead.py:640 #, python-format msgid "" "Please select more than one element (lead or opportunity) from the list view." @@ -479,12 +484,12 @@ msgstr "" #: view:crm.phonecall.report:0 #: field:crm.phonecall.report,state:0 msgid "Status" -msgstr "" +msgstr "สถานะ" #. module: crm #: view:crm.lead2opportunity.partner:0 msgid "Create Opportunity" -msgstr "" +msgstr "สร้างโอกาส" #. module: crm #: view:sale.config.settings:0 @@ -504,7 +509,7 @@ msgstr "" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_stage msgid "Stage changed" -msgstr "" +msgstr "เปลี่ยนแปลงสถานะ" #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -521,12 +526,12 @@ msgstr "ไม่ได้ทำงานอยู่" #. module: crm #: field:crm.lead.report,planned_revenue:0 msgid "Planned Revenue" -msgstr "" +msgstr "รายได้ตามแผน" #. module: crm #: field:crm.lead,planned_revenue:0 msgid "Expected Revenue" -msgstr "" +msgstr "เป้าหมายรายได้" #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -560,7 +565,7 @@ msgstr "สรุป" #. module: crm #: view:crm.merge.opportunity:0 msgid "Merge" -msgstr "" +msgstr "รวม" #. module: crm #: model:email.template,subject:crm.email_template_opportunity_mail @@ -592,7 +597,7 @@ msgstr "" #. module: crm #: view:crm.phonecall.report:0 msgid "#Phone calls" -msgstr "" +msgstr "การโทร" #. module: crm #: sql_constraint:crm.case.section:0 @@ -609,7 +614,7 @@ msgstr "" #: view:crm.lead:0 #: selection:crm.lead,state:0 msgid "In Progress" -msgstr "" +msgstr "กำลังดำเนินการ" #. module: crm #: model:ir.actions.act_window,help:crm.crm_phonecall_categ_action @@ -640,7 +645,7 @@ msgstr "" #: field:crm.case.section,resource_calendar_id:0 #: model:ir.ui.menu,name:crm.menu_action_resource_calendar_form msgid "Working Time" -msgstr "" +msgstr "เวลาทำงาน" #. module: crm #: view:crm.segmentation.line:0 @@ -651,7 +656,7 @@ msgstr "" #: model:ir.actions.act_window,name:crm.action_report_crm_phonecall #: model:ir.ui.menu,name:crm.menu_report_crm_phonecalls_tree msgid "Phone Calls Analysis" -msgstr "" +msgstr "วิเคราะห์การใช้โทรศัพท์" #. module: crm #: view:crm.lead:0 @@ -667,17 +672,17 @@ msgstr "" #. module: crm #: field:crm.lead,company_currency:0 msgid "Currency" -msgstr "" +msgstr "สกุลเงิน" #. module: crm #: field:crm.lead.report,probable_revenue:0 msgid "Probable Revenue" -msgstr "" +msgstr "รายได้ที่น่าจะเป็น" #. module: crm #: help:crm.lead.report,creation_month:0 msgid "Creation month" -msgstr "" +msgstr "เดือนที่สร้าง" #. module: crm #: help:crm.segmentation,name:0 @@ -687,7 +692,7 @@ msgstr "" #. module: crm #: field:crm.case.stage,probability:0 msgid "Probability (%)" -msgstr "" +msgstr "คาดว่า" #. module: crm #: sql_constraint:crm.lead:0 @@ -697,15 +702,15 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Leads Generation" -msgstr "" +msgstr "การสร้างเป้าหมาย" #. module: crm #: view:board.board:0 msgid "Statistics Dashboard" -msgstr "" +msgstr "แดชบอร์ดสถิติ" #. module: crm -#: code:addons/crm/crm_lead.py:861 +#: code:addons/crm/crm_lead.py:878 #: model:crm.case.stage,name:crm.stage_lead2 #: selection:crm.case.stage,type:0 #: view:crm.lead:0 @@ -716,37 +721,37 @@ msgstr "" #: field:res.partner,opportunity_count:0 #, python-format msgid "Opportunity" -msgstr "" +msgstr "โอกาส" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead7 msgid "Television" -msgstr "" +msgstr "โทรทัศน์" #. module: crm #: model:ir.actions.act_window,name:crm.action_crm_send_mass_convert msgid "Convert to opportunities" -msgstr "" +msgstr "แปลงเป็นโอกาส" #. module: crm #: model:ir.model,name:crm.model_sale_config_settings msgid "sale.config.settings" -msgstr "" +msgstr "ตั้งค่าระบบงานขาย" #. module: crm #: view:crm.segmentation:0 msgid "Stop Process" -msgstr "" +msgstr "หยุดการทำงาน" #. module: crm #: field:crm.case.section,alias_id:0 msgid "Alias" -msgstr "" +msgstr "ชื่อแทน" #. module: crm #: view:crm.phonecall:0 msgid "Search Phonecalls" -msgstr "" +msgstr "ค้นหาการโทรศัพท์" #. module: crm #: view:crm.lead.report:0 @@ -757,15 +762,15 @@ msgstr "" #. module: crm #: field:calendar.attendee,categ_id:0 msgid "Event Type" -msgstr "" +msgstr "ชนิดเหตุการณ์" #. module: crm #: field:crm.segmentation,exclusif:0 msgid "Exclusive" -msgstr "" +msgstr "พิเศษ" #. module: crm -#: code:addons/crm/crm_lead.py:584 +#: code:addons/crm/crm_lead.py:600 #, python-format msgid "From %s : %s" msgstr "" @@ -773,7 +778,7 @@ msgstr "" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 msgid "Convert to Opportunities" -msgstr "" +msgstr "แปลงเป็นโอกาส" #. module: crm #: view:crm.lead2opportunity.partner:0 @@ -782,18 +787,18 @@ msgstr "" #: view:crm.opportunity2phonecall:0 #: view:crm.phonecall2phonecall:0 msgid "or" -msgstr "" +msgstr "หรือ" #. module: crm #: field:crm.lead.report,create_date:0 #: field:crm.phonecall.report,create_date:0 msgid "Create Date" -msgstr "" +msgstr "วันที่สร้าง" #. module: crm #: field:crm.lead,ref2:0 msgid "Reference 2" -msgstr "" +msgstr "อ้างอิงที่ 2" #. module: crm #: help:crm.case.stage,section_ids:0 @@ -801,22 +806,24 @@ msgid "" "Link between stages and sales teams. When set, this limitate the current " "stage to the selected sales teams." msgstr "" +"เชื่อมโยงระหว่างสถานะและทีมขาย " +"เมื่อตั้งแล้วจะจำกัดสถานะปัจจุบันสำหรับทีมขายที่เลือก" #. module: crm #: view:crm.case.stage:0 #: field:crm.case.stage,requirements:0 msgid "Requirements" -msgstr "" +msgstr "ความต้องการ" #. module: crm #: field:crm.lead,zip:0 msgid "Zip" -msgstr "" +msgstr "รหัสไปรษณีย์" #. module: crm #: view:crm.phonecall:0 msgid "Unassigned Phonecalls" -msgstr "" +msgstr "การโทรศัพท์ที่ไม่ได้กำหนดใด ๆ" #. module: crm #: view:crm.lead:0 @@ -829,17 +836,17 @@ msgstr "" #: model:process.node,name:crm.process_node_opportunities0 #: view:res.partner:0 msgid "Opportunities" -msgstr "" +msgstr "โอกาส" #. module: crm #: field:crm.segmentation,categ_id:0 msgid "Partner Category" -msgstr "" +msgstr "ประเภทบริษัทคู่ค้า" #. module: crm #: field:crm.lead,probability:0 msgid "Success Rate (%)" -msgstr "" +msgstr "อัตราการสำเสร็จ" #. module: crm #: field:crm.segmentation,sales_purchase_active:0 @@ -849,12 +856,12 @@ msgstr "" #. module: crm #: model:crm.case.categ,name:crm.categ_phone2 msgid "Outbound" -msgstr "" +msgstr "ขาออก" #. module: crm #: view:crm.lead:0 msgid "Mark Won" -msgstr "" +msgstr "เราทำได้สำเร็จ" #. module: crm #: model:ir.filters,name:crm.filter_usa_lead @@ -864,24 +871,24 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Mark Lost" -msgstr "" +msgstr "เราไม่สามารถทำได้" #. module: crm #: model:ir.filters,name:crm.filter_draft_lead msgid "Draft Leads" -msgstr "" +msgstr "โอกาสที่ยังเป็นฉบับร่าง" #. module: crm #: selection:crm.lead.report,creation_month:0 #: selection:crm.lead.report,deadline_month:0 #: selection:crm.phonecall.report,month:0 msgid "March" -msgstr "" +msgstr "มีนาคม" #. module: crm #: view:crm.lead:0 msgid "Send Email" -msgstr "" +msgstr "ส่งอีเมล" #. module: crm #: code:addons/crm/wizard/crm_lead_to_opportunity.py:89 @@ -892,18 +899,18 @@ msgstr "คำเตือน !" #. module: crm #: field:crm.lead,day_open:0 msgid "Days to Open" -msgstr "" +msgstr "วันที่จะเปิด" #. module: crm #: field:crm.lead,mobile:0 #: field:crm.phonecall,partner_mobile:0 msgid "Mobile" -msgstr "" +msgstr "มือถือ" #. module: crm #: field:crm.lead,ref:0 msgid "Reference" -msgstr "" +msgstr "อ้างอิง" #. module: crm #: view:crm.lead:0 @@ -923,17 +930,17 @@ msgstr "" #: view:res.partner:0 #: field:res.partner,meeting_ids:0 msgid "Meetings" -msgstr "" +msgstr "การประชุม" #. module: crm #: field:crm.lead,date_action_next:0 #: field:crm.lead,title_action:0 #: field:crm.phonecall,date_action_next:0 msgid "Next Action" -msgstr "" +msgstr "การกระทำต่อไป" #. module: crm -#: code:addons/crm/crm_lead.py:763 +#: code:addons/crm/crm_lead.py:780 #, python-format msgid "Partner set to %s." msgstr "" @@ -943,22 +950,22 @@ msgstr "" #: selection:crm.phonecall,state:0 #: selection:crm.phonecall.report,state:0 msgid "Draft" -msgstr "" +msgstr "ฉบับร่าง" #. module: crm #: view:crm.segmentation:0 msgid "Partner Segmentations" -msgstr "" +msgstr "การจำแนกคู่ค้า" #. module: crm #: view:crm.lead.report:0 msgid "Show only opportunity" -msgstr "" +msgstr "แสดงโอกาสเท่านั้น" #. module: crm #: field:crm.lead,name:0 msgid "Subject" -msgstr "" +msgstr "ชื่อเรื่อง" #. module: crm #: view:crm.lead:0 @@ -968,7 +975,7 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Show Sales Team" -msgstr "" +msgstr "แสดงทีมขาย" #. module: crm #: help:sale.config.settings,module_crm_claim:0 @@ -981,7 +988,7 @@ msgstr "" #: model:crm.case.stage,name:crm.stage_lead6 #: view:crm.lead:0 msgid "Won" -msgstr "" +msgstr "ชนะ" #. module: crm #: field:crm.lead.report,delay_expected:0 @@ -991,7 +998,7 @@ msgstr "" #. module: crm #: model:crm.case.section,name:crm.section_sales_department msgid "Sales Department" -msgstr "" +msgstr "ฝ่ายขาย" #. module: crm #: field:crm.case.stage,type:0 @@ -999,7 +1006,7 @@ msgstr "" #: field:crm.lead.report,type:0 #: view:crm.opportunity2phonecall:0 msgid "Type" -msgstr "" +msgstr "ประเภท" #. module: crm #: view:crm.segmentation:0 @@ -1012,7 +1019,7 @@ msgstr "" #: selection:crm.phonecall,priority:0 #: selection:crm.phonecall.report,priority:0 msgid "Lowest" -msgstr "" +msgstr "ต่ำสุด" #. module: crm #: field:crm.lead,create_date:0 @@ -1020,18 +1027,18 @@ msgstr "" #: field:crm.phonecall,create_date:0 #: field:crm.phonecall.report,creation_date:0 msgid "Creation Date" -msgstr "" +msgstr "วันที่สร้าง" #. module: crm -#: code:addons/crm/crm_lead.py:698 +#: code:addons/crm/crm_lead.py:715 #, python-format msgid "Lead converted into an Opportunity" -msgstr "" +msgstr "แปลงเป้าหมายเป็นโอกาสแล้ว" #. module: crm #: selection:crm.segmentation.line,expr_name:0 msgid "Purchase Amount" -msgstr "" +msgstr "จำนวนที่สั่งซื้อ" #. module: crm #: view:crm.phonecall.report:0 @@ -1045,22 +1052,22 @@ msgstr "" #: view:crm.lead.report:0 #: field:crm.lead.report,stage_id:0 msgid "Stage" -msgstr "" +msgstr "สถานะ" #. module: crm #: view:crm.phonecall.report:0 msgid "Phone Calls that are assigned to me" -msgstr "" +msgstr "การโทรที่ได้รับมอบหมาย" #. module: crm #: field:crm.lead,user_login:0 msgid "User Login" -msgstr "" +msgstr "ผู้ใช้เข้าสู่ระบบ" #. module: crm #: view:crm.phonecall.report:0 msgid "Phone calls which are in pending state" -msgstr "" +msgstr "การโทรที่ค้างอยู่" #. module: crm #: view:crm.case.section:0 @@ -1070,7 +1077,7 @@ msgstr "" #: model:ir.actions.act_window,name:crm.crm_lead_stage_act #: model:ir.ui.menu,name:crm.menu_crm_lead_stage_act msgid "Stages" -msgstr "" +msgstr "ขั้นตอน" #. module: crm #: help:sale.config.settings,module_crm_helpdesk:0 @@ -1082,12 +1089,12 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Delete" -msgstr "" +msgstr "ลบ" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_create msgid "Opportunity created" -msgstr "" +msgstr "โอกาสได้ถูกสร้างแล้ว" #. module: crm #: view:crm.lead:0 @@ -1099,7 +1106,7 @@ msgstr "" #: selection:crm.lead.report,deadline_month:0 #: selection:crm.phonecall.report,month:0 msgid "September" -msgstr "" +msgstr "กันยายน" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_category_act_oppor11 @@ -1127,7 +1134,7 @@ msgstr "" msgid "" "Setting this stage will change the probability automatically on the " "opportunity." -msgstr "" +msgstr "การตั้งค่าในขั้นตอนนี้จะเปลี่ยนความน่าจะเป็นโดยอัตโนมัติเมื่อมีโอกาส" #. module: crm #: view:crm.lead:0 @@ -1137,28 +1144,28 @@ msgstr "" #. module: crm #: model:ir.ui.menu,name:crm.menu_crm_payment_mode_act msgid "Payment Modes" -msgstr "" +msgstr "รูปแบบการชำระเงิน" #. module: crm #: field:crm.lead.report,opening_date:0 #: field:crm.phonecall.report,opening_date:0 msgid "Opening Date" -msgstr "" +msgstr "วันที่เปิด" #. module: crm #: help:crm.phonecall,duration:0 msgid "Duration in Minutes" -msgstr "" +msgstr "ระยะเวลา (นาที)" #. module: crm #: field:crm.case.channel,name:0 msgid "Channel Name" -msgstr "" +msgstr "ช่องทาง" #. module: crm #: help:crm.lead.report,deadline_day:0 msgid "Expected closing day" -msgstr "" +msgstr "วันที่คาดว่าจะปิด" #. module: crm #: help:crm.case.section,active:0 @@ -1166,6 +1173,8 @@ msgid "" "If the active field is set to true, it will allow you to hide the sales team " "without removing it." msgstr "" +"ถ้าเขตข้อมูลที่ใช้งานอยู่จะถูกกำหนดเป็นจริง " +"จะทำให้คุณสามารถซ่อนทีมขายโดยไม่ลบออก" #. module: crm #: help:crm.case.stage,case_default:0 @@ -1173,6 +1182,8 @@ msgid "" "If you check this field, this stage will be proposed by default on each " "sales team. It will not assign this stage to existing teams." msgstr "" +"หากเลือกตัวเลือกนี้ ในขั้นตอนนี้จะได้รับการเสนอโดยเริ่มต้นในแต่ละทีมขาย " +"มันจะไม่ได้กำหนดในขั้นตอนนี้ไปยังทีมงานที่มีอยู่" #. module: crm #: help:crm.case.stage,type:0 @@ -1185,7 +1196,7 @@ msgstr "" #: model:mail.message.subtype,name:crm.mt_lead_create #: model:mail.message.subtype,name:crm.mt_salesteam_lead msgid "Lead Created" -msgstr "" +msgstr "เป้าหมายถูกสร้างแล้ว" #. module: crm #: help:crm.segmentation,sales_purchase_active:0 @@ -1197,29 +1208,31 @@ msgstr "" #. module: crm #: field:crm.segmentation,state:0 msgid "Execution Status" -msgstr "" +msgstr "สถานะการทำงาน" #. module: crm #: view:crm.opportunity2phonecall:0 msgid "Log call" -msgstr "" +msgstr "บันทึกการโทร" #. module: crm #: field:crm.lead,day_close:0 msgid "Days to Close" -msgstr "" +msgstr "วันที่จะปิด" #. module: crm +#: code:addons/crm/crm_lead.py:1057 #: field:crm.case.section,complete_name:0 +#, python-format msgid "unknown" -msgstr "" +msgstr "ไม่มีข้อมูล" #. module: crm #: field:crm.case.section,message_is_follower:0 #: field:crm.lead,message_is_follower:0 #: field:crm.phonecall,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "เป็นผู้ติดตาม" #. module: crm #: field:crm.opportunity2phonecall,date:0 @@ -1227,28 +1240,28 @@ msgstr "" #: field:crm.phonecall,date:0 #: field:crm.phonecall2phonecall,date:0 msgid "Date" -msgstr "" +msgstr "วันที่" #. module: crm #: model:crm.case.section,name:crm.crm_case_section_4 msgid "Online Support" -msgstr "" +msgstr "การสนับสนุนออนไลน์" #. module: crm #: view:crm.lead.report:0 #: view:crm.phonecall.report:0 msgid "Extended Filters..." -msgstr "" +msgstr "ตัวกรองเพิ่มเติม" #. module: crm #: view:crm.phonecall.report:0 msgid "Phone calls which are in closed state" -msgstr "" +msgstr "การโทรที่ปิดแล้ว" #. module: crm #: view:crm.phonecall.report:0 msgid "Search" -msgstr "" +msgstr "ค้นหา" #. module: crm #: help:crm.lead,state:0 @@ -1262,12 +1275,12 @@ msgstr "" #. module: crm #: model:crm.case.section,name:crm.crm_case_section_1 msgid "Sales Marketing Department" -msgstr "" +msgstr "ฝ่ายขายและการตลาด" #. module: crm #: view:crm.phonecall.report:0 msgid "Date of call" -msgstr "" +msgstr "วันที่โทร" #. module: crm #: help:crm.lead,section_id:0 @@ -1293,45 +1306,45 @@ msgid "Lead Description" msgstr "" #. module: crm -#: code:addons/crm/crm_lead.py:565 +#: code:addons/crm/crm_lead.py:581 #, python-format msgid "Merged opportunities" -msgstr "" +msgstr "โอกาสที่รวมแล้ว" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor7 msgid "Consulting" -msgstr "" +msgstr "ให้คำปรึกษา" #. module: crm #: field:crm.case.section,code:0 msgid "Code" -msgstr "" +msgstr "รหัส" #. module: crm #: view:sale.config.settings:0 msgid "Features" -msgstr "" +msgstr "คุณสมบัติ" #. module: crm #: field:crm.case.section,child_ids:0 msgid "Child Teams" -msgstr "" +msgstr "ทีมลูก" #. module: crm #: view:crm.phonecall.report:0 msgid "Phone calls which are in draft and open state" -msgstr "" +msgstr "การโทรที่เป็นฉบับร่างและเปิด" #. module: crm #: field:crm.lead2opportunity.partner.mass,user_ids:0 msgid "Salesmen" -msgstr "" +msgstr "พนักงานขาย" #. module: crm #: view:crm.lead:0 msgid "References" -msgstr "" +msgstr "อ้างอิง" #. module: crm #: view:crm.lead2opportunity.partner:0 @@ -1341,7 +1354,7 @@ msgstr "" #: view:crm.phonecall:0 #: view:crm.phonecall2phonecall:0 msgid "Cancel" -msgstr "" +msgstr "ยกเลิก" #. module: crm #: view:crm.lead:0 @@ -1351,7 +1364,7 @@ msgstr "" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor4 msgid "Information" -msgstr "" +msgstr "ข้อมูล" #. module: crm #: view:crm.lead.report:0 @@ -1361,36 +1374,36 @@ msgstr "" #. module: crm #: view:crm.phonecall:0 msgid "To Do" -msgstr "" +msgstr "สิ่งที่จะทำ" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_lost msgid "Opportunity lost" -msgstr "" +msgstr "โอกาสที่พลาด" #. module: crm #: field:crm.lead2opportunity.partner,action:0 #: field:crm.lead2opportunity.partner.mass,action:0 #: field:crm.partner.binding,action:0 msgid "Related Customer" -msgstr "" +msgstr "ลูกค้าที่เกี่ยวข้อง" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor8 msgid "Other" -msgstr "" +msgstr "อื่น ๆ" #. module: crm #: field:crm.phonecall,opportunity_id:0 #: model:ir.model,name:crm.model_crm_lead msgid "Lead/Opportunity" -msgstr "" +msgstr "เป้าหมาย / โอกาส" #. module: crm #: model:ir.actions.act_window,name:crm.action_merge_opportunities #: model:ir.actions.act_window,name:crm.merge_opportunity_act msgid "Merge leads/opportunities" -msgstr "" +msgstr "รวมเป้าหมาย / โอกาส" #. module: crm #: help:crm.case.stage,sequence:0 @@ -1400,7 +1413,7 @@ msgstr "" #. module: crm #: model:ir.actions.act_window,name:crm.crm_phonecall_categ_action msgid "Phonecall Categories" -msgstr "" +msgstr "ประเภทการโทร" #. module: crm #: view:crm.lead.report:0 @@ -1410,12 +1423,12 @@ msgstr "" #. module: crm #: model:ir.model,name:crm.model_res_users msgid "Users" -msgstr "" +msgstr "ผู้ใช้งาน" #. module: crm #: model:mail.message.subtype,name:crm.mt_lead_stage msgid "Stage Changed" -msgstr "" +msgstr "สถานะเปลี่ยนแปลง" #. module: crm #: field:crm.case.stage,section_ids:0 @@ -1431,18 +1444,18 @@ msgstr "" #: selection:crm.opportunity2phonecall,action:0 #: selection:crm.phonecall2phonecall,action:0 msgid "Log a call" -msgstr "" +msgstr "บันทึกการโทร" #. module: crm #: selection:crm.segmentation.line,expr_name:0 msgid "Sale Amount" -msgstr "" +msgstr "ยอดขาย" #. module: crm #: view:crm.phonecall.report:0 #: model:ir.actions.act_window,name:crm.act_crm_opportunity_crm_phonecall_new msgid "Phone calls" -msgstr "" +msgstr "การโทรศัพท์" #. module: crm #: model:ir.actions.act_window,help:crm.action_report_crm_opportunity @@ -1459,7 +1472,7 @@ msgstr "" #: field:crm.payment.mode,name:0 #: field:crm.segmentation,name:0 msgid "Name" -msgstr "" +msgstr "ชื่อ" #. module: crm #: view:crm.lead.report:0 @@ -1470,7 +1483,7 @@ msgstr "" #: field:crm.lead.report,date_closed:0 #: field:crm.phonecall.report,date_closed:0 msgid "Close Date" -msgstr "" +msgstr "วันปิด" #. module: crm #: view:crm.lead.report:0 @@ -1482,18 +1495,18 @@ msgstr "" #: help:crm.lead,message_ids:0 #: help:crm.phonecall,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "ข้อความและประวัติการติดต่อ" #. module: crm #: view:crm.lead:0 msgid "Show Countries" -msgstr "" +msgstr "แสดงประเทศ" #. module: crm #: view:crm.lead:0 #: view:crm.phonecall:0 msgid "Creation" -msgstr "" +msgstr "การสร้าง" #. module: crm #: selection:crm.lead,priority:0 @@ -1501,7 +1514,7 @@ msgstr "" #: selection:crm.phonecall,priority:0 #: selection:crm.phonecall.report,priority:0 msgid "High" -msgstr "" +msgstr "สูง" #. module: crm #: model:process.node,note:crm.process_node_partner0 @@ -1529,7 +1542,7 @@ msgstr "" #: view:crm.phonecall:0 #: view:crm.phonecall.report:0 msgid "Group By..." -msgstr "" +msgstr "จัดกลุ่มตาม..." #. module: crm #: view:crm.merge.opportunity:0 @@ -1598,7 +1611,7 @@ msgstr "" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor3 msgid "Services" -msgstr "" +msgstr "บริการ" #. module: crm #: selection:crm.lead,priority:0 @@ -1606,7 +1619,7 @@ msgstr "" #: selection:crm.phonecall,priority:0 #: selection:crm.phonecall.report,priority:0 msgid "Highest" -msgstr "" +msgstr "สูงสุด" #. module: crm #: help:crm.lead.report,creation_year:0 @@ -1617,12 +1630,12 @@ msgstr "" #: view:crm.case.section:0 #: field:crm.lead,description:0 msgid "Notes" -msgstr "" +msgstr "บันทึก" #. module: crm #: field:crm.segmentation.line,expr_value:0 msgid "Value" -msgstr "" +msgstr "มูลค่า" #. module: crm #: field:crm.lead,partner_name:0 @@ -1632,12 +1645,12 @@ msgstr "" #. module: crm #: field:crm.case.section,reply_to:0 msgid "Reply-To" -msgstr "" +msgstr "ตอบกลับไปยัง" #. module: crm #: view:crm.lead:0 msgid "Display" -msgstr "" +msgstr "แสดงผล" #. module: crm #: view:board.board:0 @@ -1655,7 +1668,7 @@ msgstr "" #: model:ir.model,name:crm.model_crm_case_channel #: model:ir.ui.menu,name:crm.menu_crm_case_channel msgid "Channels" -msgstr "" +msgstr "ช่อง" #. module: crm #: view:crm.phonecall:0 @@ -1663,12 +1676,12 @@ msgstr "" #: view:crm.phonecall.report:0 #: selection:crm.phonecall.report,state:0 msgid "Held" -msgstr "" +msgstr "ถูกพักรอแล้ว" #. module: crm #: view:crm.lead:0 msgid "Extra Info" -msgstr "" +msgstr "ข้อมูลเพิ่มเติม" #. module: crm #: view:crm.lead:0 @@ -1678,7 +1691,7 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Edit..." -msgstr "" +msgstr "แก้ไข..." #. module: crm #: model:crm.case.resource.type,name:crm.type_lead5 @@ -1699,7 +1712,7 @@ msgstr "" #: view:crm.phonecall.report:0 #: field:crm.phonecall.report,priority:0 msgid "Priority" -msgstr "" +msgstr "ความสำคัญ" #. module: crm #: model:ir.model,name:crm.model_crm_lead2opportunity_partner @@ -1732,7 +1745,7 @@ msgstr "" #: model:ir.actions.act_window,name:crm.open_board_statistical_dash #: model:ir.ui.menu,name:crm.menu_board_statistics_dash msgid "CRM" -msgstr "" +msgstr "CRM" #. module: crm #: model:ir.actions.act_window,name:crm.crm_segmentation_tree-act @@ -1748,12 +1761,12 @@ msgstr "" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead1 msgid "Telesales" -msgstr "" +msgstr "การขายทางโทรศัพท์" #. module: crm #: view:crm.lead:0 msgid "Leads Assigned to Me or My Team(s)" -msgstr "" +msgstr "เป้าหมายที่ได้รับมอบหมาย" #. module: crm #: model:ir.model,name:crm.model_crm_segmentation_line @@ -1764,17 +1777,17 @@ msgstr "" #: view:crm.opportunity2phonecall:0 #: view:crm.phonecall2phonecall:0 msgid "Planned Date" -msgstr "" +msgstr "วันที่ตามแผน" #. module: crm #: view:crm.lead:0 msgid "Expected Revenues" -msgstr "" +msgstr "รายได้ที่คาดหวัง" #. module: crm #: view:crm.lead:0 msgid "Referrer" -msgstr "" +msgstr "ที่อ้างถึง" #. module: crm #: help:crm.lead,type:0 @@ -1787,29 +1800,29 @@ msgstr "" #: selection:crm.lead.report,deadline_month:0 #: selection:crm.phonecall.report,month:0 msgid "July" -msgstr "" +msgstr "กรกฎาคม" #. module: crm #: view:crm.lead:0 msgid "Lead / Customer" -msgstr "" +msgstr "เป้าหมาย / ลูกค้า" #. module: crm #: model:crm.case.section,name:crm.crm_case_section_2 msgid "Support Department" -msgstr "" +msgstr "แผนกบริการ" #. module: crm #: view:crm.lead.report:0 msgid "Show only lead" -msgstr "" +msgstr "แสดงเฉพาะเป้าหมาย" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_section_act #: model:ir.model,name:crm.model_crm_case_section #: model:ir.ui.menu,name:crm.menu_crm_case_section_act msgid "Sales Teams" -msgstr "" +msgstr "ทีมขาย" #. module: crm #: field:crm.case.stage,case_default:0 @@ -1819,7 +1832,7 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Team" -msgstr "" +msgstr "ทีม" #. module: crm #: view:crm.lead.report:0 @@ -1835,14 +1848,14 @@ msgstr "" #. module: crm #: field:crm.lead.report,probability:0 msgid "Probability" -msgstr "" +msgstr "ความน่าจะเป็น" #. module: crm #: view:crm.lead.report:0 #: view:crm.phonecall.report:0 #: field:crm.phonecall.report,month:0 msgid "Month" -msgstr "" +msgstr "เดือน" #. module: crm #: view:crm.lead:0 @@ -1850,18 +1863,18 @@ msgstr "" #: model:ir.ui.menu,name:crm.menu_crm_leads #: model:process.node,name:crm.process_node_leads0 msgid "Leads" -msgstr "" +msgstr "เป้าหมาย" #. module: crm -#: code:addons/crm/crm_lead.py:563 +#: code:addons/crm/crm_lead.py:579 #, python-format msgid "Merged leads" -msgstr "" +msgstr "รวมเป้าหมาย" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor5 msgid "Design" -msgstr "" +msgstr "ออกแบบ" #. module: crm #: selection:crm.lead2opportunity.partner,name:0 @@ -1873,18 +1886,18 @@ msgstr "" #: view:crm.phonecall.report:0 #: selection:crm.phonecall.report,state:0 msgid "Todo" -msgstr "" +msgstr "สิ่งที่จะทำ" #. module: crm #: model:mail.message.subtype,name:crm.mt_lead_convert_to_opportunity #: model:mail.message.subtype,name:crm.mt_salesteam_lead_opportunity msgid "Lead to Opportunity" -msgstr "" +msgstr "เป้าหมายเป็นโอกาส" #. module: crm #: field:crm.lead,user_email:0 msgid "User Email" -msgstr "" +msgstr "อีเมลของผู้ใช้" #. module: crm #: help:crm.lead,partner_name:0 @@ -1897,7 +1910,7 @@ msgstr "" #: field:crm.opportunity2phonecall,note:0 #: field:crm.phonecall2phonecall,note:0 msgid "Note" -msgstr "" +msgstr "บันทึก" #. module: crm #: selection:crm.lead,priority:0 @@ -1905,7 +1918,7 @@ msgstr "" #: selection:crm.phonecall,priority:0 #: selection:crm.phonecall.report,priority:0 msgid "Low" -msgstr "" +msgstr "ต่ำ" #. module: crm #: selection:crm.case.stage,state:0 @@ -1915,7 +1928,7 @@ msgstr "" #: selection:crm.lead.report,state:0 #: field:crm.phonecall,date_closed:0 msgid "Closed" -msgstr "" +msgstr "ปิดแล้ว" #. module: crm #: view:crm.lead:0 @@ -1934,7 +1947,7 @@ msgstr "" #: selection:crm.lead.report,state:0 #: selection:crm.phonecall.report,state:0 msgid "Pending" -msgstr "" +msgstr "รอดำเนินการ" #. module: crm #: model:process.transition,name:crm.process_transition_leadopportunity0 @@ -1947,18 +1960,17 @@ msgid "Global CC" msgstr "" #. module: crm -#: view:crm.lead:0 #: view:crm.phonecall:0 #: model:ir.actions.act_window,name:crm.crm_case_categ_phone0 #: model:ir.ui.menu,name:crm.menu_crm_case_phone #: model:ir.ui.menu,name:crm.menu_crm_config_phonecall msgid "Phone Calls" -msgstr "" +msgstr "การโทร" #. module: crm #: view:crm.case.stage:0 msgid "Stage Search" -msgstr "" +msgstr "ค้นหาตามสถานะ" #. module: crm #: help:crm.lead.report,delay_open:0 @@ -1973,7 +1985,7 @@ msgstr "" #: field:crm.phonecall,partner_phone:0 #: field:crm.phonecall2phonecall,phone:0 msgid "Phone" -msgstr "" +msgstr "โทรศัพท์" #. module: crm #: field:crm.case.channel,active:0 @@ -1981,7 +1993,7 @@ msgstr "" #: field:crm.lead,active:0 #: field:crm.phonecall,active:0 msgid "Active" -msgstr "" +msgstr "เปิดใช้งาน" #. module: crm #: selection:crm.segmentation.line,operator:0 @@ -1991,7 +2003,7 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Send Mail" -msgstr "" +msgstr "ส่งเมล์" #. module: crm #: selection:crm.lead2opportunity.partner,action:0 @@ -2008,7 +2020,7 @@ msgstr "" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor2 msgid "Software" -msgstr "" +msgstr "ซอฟต์แวร์" #. module: crm #: field:crm.case.section,change_responsible:0 @@ -2025,51 +2037,51 @@ msgstr "การวิเคราะห์โอกาส" #. module: crm #: view:crm.lead:0 msgid "Misc" -msgstr "" +msgstr "เบ็ดเตล็ด" #. module: crm #: view:crm.lead:0 #: view:crm.lead.report:0 #: selection:crm.lead.report,state:0 msgid "Open" -msgstr "" +msgstr "เปิด" #. module: crm #: view:crm.lead:0 #: field:crm.lead,city:0 msgid "City" -msgstr "" +msgstr "จังหวัด" #. module: crm #: selection:crm.case.stage,type:0 msgid "Both" -msgstr "" +msgstr "ทั้งสองอย่าง" #. module: crm #: view:crm.phonecall:0 msgid "Call Done" -msgstr "" +msgstr "โทรแล้ว" #. module: crm #: view:crm.phonecall:0 #: field:crm.phonecall,user_id:0 msgid "Responsible" -msgstr "" +msgstr "รับผิดชอบ" #. module: crm #: model:crm.case.section,name:crm.crm_case_section_3 msgid "Direct Marketing" -msgstr "" +msgstr "ขายตรง" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor1 msgid "Product" -msgstr "" +msgstr "ผลิตภัณฑ์" #. module: crm #: field:crm.lead.report,creation_year:0 msgid "Creation Year" -msgstr "" +msgstr "ปีที่สร้าง" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 @@ -2086,7 +2098,7 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Address" -msgstr "" +msgstr "ที่อยู่" #. module: crm #: help:crm.case.section,alias_id:0 @@ -2103,7 +2115,7 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Search Leads" -msgstr "" +msgstr "ค้นหา" #. module: crm #: view:crm.lead.report:0 @@ -2116,12 +2128,12 @@ msgstr "" #: model:ir.actions.act_window,name:crm.crm_case_categ_phone_outgoing0 #: model:ir.ui.menu,name:crm.menu_crm_case_phone_outbound msgid "Scheduled Calls" -msgstr "" +msgstr "การโทรที่ได้ววางแผนไว้" #. module: crm #: field:crm.lead,id:0 msgid "ID" -msgstr "" +msgstr "ID" #. module: crm #: help:crm.lead,type_id:0 @@ -2143,32 +2155,32 @@ msgstr "" #. module: crm #: view:crm.segmentation:0 msgid "Continue Process" -msgstr "" +msgstr "ทำงานต่อ" #. module: crm #: selection:crm.lead2opportunity.partner,name:0 #: selection:crm.lead2opportunity.partner.mass,name:0 #: model:ir.actions.act_window,name:crm.action_crm_lead2opportunity_partner msgid "Convert to opportunity" -msgstr "" +msgstr "แปลงเป็นโอกาส" #. module: crm #: field:crm.opportunity2phonecall,user_id:0 #: field:crm.phonecall2phonecall,user_id:0 msgid "Assign To" -msgstr "" +msgstr "มอบหมายถึง" #. module: crm #: field:crm.lead,date_action_last:0 #: field:crm.phonecall,date_action_last:0 msgid "Last Action" -msgstr "" +msgstr "การกระทำล่าสุด" #. module: crm #: field:crm.phonecall,duration:0 #: field:crm.phonecall.report,duration:0 msgid "Duration" -msgstr "" +msgstr "ระยะเวลา" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_categ_phone_outgoing0 @@ -2207,17 +2219,17 @@ msgstr "" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead6 msgid "Banner Ads" -msgstr "" +msgstr "ป้ายโฆษณา" #. module: crm #: field:crm.merge.opportunity,opportunity_ids:0 msgid "Leads/Opportunities" -msgstr "" +msgstr "เป้าหมาย / โอกาส" #. module: crm #: field:crm.lead,fax:0 msgid "Fax" -msgstr "" +msgstr "แฟกซ์" #. module: crm #: field:crm.lead,company_id:0 @@ -2227,12 +2239,12 @@ msgstr "" #: view:crm.phonecall.report:0 #: field:crm.phonecall.report,company_id:0 msgid "Company" -msgstr "" +msgstr "บริษัท" #. module: crm #: selection:crm.segmentation,state:0 msgid "Running" -msgstr "" +msgstr "กำลังทำงานอยู่" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_convert_to_opportunity @@ -2242,50 +2254,50 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Unassigned Leads" -msgstr "" +msgstr "เป้าหมายที่ยังไม่ได้มีการมอบหมาย" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_won msgid "Opportunity won" -msgstr "" +msgstr "โอกาสสำเร็จแล้ว" #. module: crm #: field:crm.case.categ,object_id:0 msgid "Object Name" -msgstr "" +msgstr "ชื่อออปเจ็กต์" #. module: crm #: view:crm.phonecall:0 msgid "Phone Calls Assigned to Me or My Team(s)" -msgstr "" +msgstr "การโทรที่ได้รับมอบหมาย" #. module: crm #: view:crm.lead:0 msgid "Reset" -msgstr "" +msgstr "คืนค่าเดิม" #. module: crm #: view:sale.config.settings:0 msgid "After-Sale Services" -msgstr "" +msgstr "บริการหลังการขาย" #. module: crm #: field:crm.case.section,message_ids:0 #: field:crm.lead,message_ids:0 #: field:crm.phonecall,message_ids:0 msgid "Messages" -msgstr "" +msgstr "ข้อความ" #. module: crm #: help:crm.lead,channel_id:0 msgid "Communication channel (mail, direct, phone, ...)" -msgstr "" +msgstr "ช่องทางการติดต่อ (จดหมาย,โดยตรง,โทรศัพท์,...)" #. module: crm #: field:crm.opportunity2phonecall,name:0 #: field:crm.phonecall2phonecall,name:0 msgid "Call summary" -msgstr "" +msgstr "สรุปการโทร" #. module: crm #: selection:crm.case.stage,state:0 @@ -2294,12 +2306,12 @@ msgstr "" #: selection:crm.phonecall,state:0 #: selection:crm.phonecall.report,state:0 msgid "Cancelled" -msgstr "" +msgstr "ยกเลิกแล้ว" #. module: crm #: field:crm.lead,color:0 msgid "Color Index" -msgstr "" +msgstr "ดัชนีสี" #. module: crm #: model:ir.actions.act_window,help:crm.action_report_crm_phonecall @@ -2318,33 +2330,33 @@ msgstr "" #. module: crm #: field:crm.case.stage,state:0 msgid "Related Status" -msgstr "" +msgstr "สถานะที่เกี่ยวข้อง" #. module: crm #: field:crm.phonecall,name:0 msgid "Call Summary" -msgstr "" +msgstr "สรุปการโทร" #. module: crm #: field:crm.segmentation.line,expr_operator:0 msgid "Operator" -msgstr "" +msgstr "ผู้ปฏิบัติการ" #. module: crm #: view:crm.lead:0 #: model:ir.actions.act_window,name:crm.opportunity2phonecall_act msgid "Schedule/Log Call" -msgstr "" +msgstr "แผน/บันทึกการโทร" #. module: crm #: view:crm.merge.opportunity:0 msgid "Select Leads/Opportunities" -msgstr "" +msgstr "เลือกเป้าหมาย / โอกาส" #. module: crm #: selection:crm.phonecall,state:0 msgid "Confirmed" -msgstr "" +msgstr "ยืนยันแล้ว" #. module: crm #: model:ir.model,name:crm.model_crm_partner_binding @@ -2359,17 +2371,17 @@ msgstr "" #. module: crm #: view:crm.phonecall:0 msgid "Confirm" -msgstr "" +msgstr "ยืนยัน" #. module: crm #: view:crm.lead:0 msgid "Unread messages" -msgstr "" +msgstr "ข้อความที่ยังไม่ได้อ่าน" #. module: crm #: field:crm.phonecall.report,section_id:0 msgid "Section" -msgstr "" +msgstr "หัวข้อ" #. module: crm #: selection:crm.segmentation.line,operator:0 @@ -2381,7 +2393,7 @@ msgstr "" #: field:crm.lead,message_follower_ids:0 #: field:crm.phonecall,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "ผู้ติดตาม" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_category_act_leads_all @@ -2404,14 +2416,14 @@ msgstr "" #. module: crm #: field:sale.config.settings,fetchmail_lead:0 msgid "Create leads from incoming mails" -msgstr "" +msgstr "สร้างเป้าหมายจากโทรศัพท์ที่เข้ามา" #. module: crm #: view:crm.lead:0 #: field:crm.lead,email_from:0 #: field:crm.phonecall,email_from:0 msgid "Email" -msgstr "" +msgstr "อีเมล" #. module: crm #: view:crm.case.channel:0 @@ -2420,19 +2432,19 @@ msgstr "" #: view:crm.lead.report:0 #: field:crm.lead.report,channel_id:0 msgid "Channel" -msgstr "" +msgstr "ช่องทาง" #. module: crm #: view:crm.opportunity2phonecall:0 #: view:crm.phonecall2phonecall:0 msgid "Schedule Call" -msgstr "" +msgstr "แผนการโทร" #. module: crm #: view:crm.lead.report:0 #: view:crm.phonecall.report:0 msgid "My Sales Team(s)" -msgstr "" +msgstr "ทีมขายของฉัน" #. module: crm #: help:crm.segmentation,exclusif:0 @@ -2446,12 +2458,12 @@ msgstr "" #. module: crm #: model:process.transition,note:crm.process_transition_leadopportunity0 msgid "Creating business opportunities from Leads" -msgstr "" +msgstr "สร้างโอกาสจากเป้าหมาย" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead3 msgid "Email Campaign - Products" -msgstr "" +msgstr "อีเมลแคมเปญ - สินค้า" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_categ_phone_incoming0 @@ -2479,7 +2491,7 @@ msgstr "" #. module: crm #: view:res.partner:0 msgid "Calls" -msgstr "" +msgstr "การคุยสาย" #. module: crm #: field:crm.case.stage,on_change:0 @@ -2489,12 +2501,12 @@ msgstr "" #. module: crm #: view:crm.phonecall.report:0 msgid "My Phone Calls" -msgstr "" +msgstr "การโทรของฉัน" #. module: crm #: model:crm.case.stage,name:crm.stage_lead3 msgid "Qualification" -msgstr "" +msgstr "คุณสมบัติ" #. module: crm #: field:crm.lead2opportunity.partner,name:0 @@ -2522,13 +2534,13 @@ msgstr "" #: selection:crm.lead.report,deadline_month:0 #: selection:crm.phonecall.report,month:0 msgid "August" -msgstr "" +msgstr "สิงหาคม" #. module: crm #: model:mail.message.subtype,name:crm.mt_lead_lost #: model:mail.message.subtype,name:crm.mt_salesteam_lead_lost msgid "Opportunity Lost" -msgstr "" +msgstr "โอกาสที่ล้มเหลว" #. module: crm #: field:crm.lead.report,deadline_month:0 @@ -2540,12 +2552,12 @@ msgstr "" #: selection:crm.lead.report,deadline_month:0 #: selection:crm.phonecall.report,month:0 msgid "December" -msgstr "" +msgstr "ธันวาคม" #. module: crm #: view:crm.phonecall:0 msgid "Date of Call" -msgstr "" +msgstr "วันที่โทร" #. module: crm #: view:crm.lead:0 @@ -2566,7 +2578,7 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Schedule Meeting" -msgstr "" +msgstr "ตารางเวลาการประชุม" #. module: crm #: field:crm.lead.report,deadline_year:0 @@ -2582,24 +2594,24 @@ msgstr "" #: field:crm.lead,date_open:0 #: field:crm.phonecall,date_open:0 msgid "Opened" -msgstr "" +msgstr "เปิดแล้ว" #. module: crm #: view:crm.case.section:0 #: field:crm.case.section,member_ids:0 msgid "Team Members" -msgstr "" +msgstr "สมาชิกในทีม" #. module: crm #: view:crm.opportunity2phonecall:0 #: view:crm.phonecall2phonecall:0 msgid "Schedule/Log a Call" -msgstr "" +msgstr "ตาราง / บันทึกการโทร" #. module: crm #: field:crm.lead,planned_cost:0 msgid "Planned Costs" -msgstr "" +msgstr "ต้นทุนที่วางแผนไว้" #. module: crm #: help:crm.lead,date_deadline:0 @@ -2618,18 +2630,18 @@ msgstr "" #: model:ir.actions.act_window,name:crm.crm_case_categ_phone_incoming0 #: model:ir.ui.menu,name:crm.menu_crm_case_phone_inbound msgid "Logged Calls" -msgstr "" +msgstr "บันทึกการใช้โทรศัพท์" #. module: crm #: model:mail.message.subtype,name:crm.mt_lead_won #: model:mail.message.subtype,name:crm.mt_salesteam_lead_won msgid "Opportunity Won" -msgstr "" +msgstr "โอกาสสำเร็จแล้ว" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_section_act_tree msgid "Cases by Sales Team" -msgstr "" +msgstr "เรื่องโดยทีมขาย" #. module: crm #: view:crm.lead:0 @@ -2637,12 +2649,12 @@ msgstr "" #: model:ir.model,name:crm.model_crm_meeting #: model:process.node,name:crm.process_node_meeting0 msgid "Meeting" -msgstr "" +msgstr "การประชุม" #. module: crm #: model:ir.model,name:crm.model_crm_case_categ msgid "Category of Case" -msgstr "" +msgstr "หมวดของเรื่อง" #. module: crm #: view:board.board:0 @@ -2655,17 +2667,17 @@ msgstr "" #: selection:crm.phonecall,priority:0 #: selection:crm.phonecall.report,priority:0 msgid "Normal" -msgstr "" +msgstr "ปกติ" #. module: crm #: field:crm.lead,street2:0 msgid "Street2" -msgstr "" +msgstr "ตำบล" #. module: crm #: field:sale.config.settings,module_crm_helpdesk:0 msgid "Manage Helpdesk and Support" -msgstr "" +msgstr "จัดการการสนับสนุน" #. module: crm #: field:crm.lead.report,delay_open:0 @@ -2676,47 +2688,47 @@ msgstr "" #: field:crm.lead.report,user_id:0 #: field:crm.phonecall.report,user_id:0 msgid "User" -msgstr "" +msgstr "ผู้ใช้" #. module: crm #: selection:crm.lead.report,creation_month:0 #: selection:crm.lead.report,deadline_month:0 #: selection:crm.phonecall.report,month:0 msgid "November" -msgstr "" +msgstr "พฤศจิกายน" #. module: crm #: view:crm.lead.report:0 #: model:ir.actions.act_window,name:crm.act_opportunity_stage msgid "Opportunities By Stage" -msgstr "" +msgstr "โอกาสโดยขั้นตอน" #. module: crm #: selection:crm.lead.report,creation_month:0 #: selection:crm.lead.report,deadline_month:0 #: selection:crm.phonecall.report,month:0 msgid "January" -msgstr "" +msgstr "มกราคม" #. module: crm #: model:process.process,name:crm.process_process_contractprocess0 msgid "Contract" -msgstr "" +msgstr "สัญญา" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead4 msgid "Twitter Ads" -msgstr "" +msgstr "โฆษณา Twitter" #. module: crm #: field:crm.lead.report,creation_day:0 msgid "Creation Day" -msgstr "" +msgstr "วันที่สร้าง" #. module: crm #: view:crm.lead.report:0 msgid "Planned Revenues" -msgstr "" +msgstr "เป้าหมายรายได้" #. module: crm #: view:crm.lead:0 @@ -2737,17 +2749,17 @@ msgstr "" #: selection:crm.opportunity2phonecall,action:0 #: selection:crm.phonecall2phonecall,action:0 msgid "Schedule a call" -msgstr "" +msgstr "วางแผนการโทร" #. module: crm #: view:crm.lead:0 msgid "Categorization" -msgstr "" +msgstr "การจัดประเภท" #. module: crm #: view:crm.phonecall2phonecall:0 msgid "Log Call" -msgstr "" +msgstr "บันทึกการโทร" #. module: crm #: help:sale.config.settings,group_fund_raising:0 @@ -2758,7 +2770,7 @@ msgstr "" #: field:crm.meeting,phonecall_id:0 #: model:ir.model,name:crm.model_crm_phonecall msgid "Phonecall" -msgstr "" +msgstr "การโทร" #. module: crm #: view:crm.phonecall.report:0 @@ -2768,12 +2780,12 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Create date" -msgstr "" +msgstr "วันที่สร้าง" #. module: crm #: view:crm.lead:0 msgid "at" -msgstr "" +msgstr "ที่" #. module: crm #: model:crm.case.stage,name:crm.stage_lead1 @@ -2782,19 +2794,19 @@ msgstr "" #: selection:crm.lead,state:0 #: view:crm.lead.report:0 msgid "New" -msgstr "" +msgstr "ใหม่" #. module: crm #: field:crm.lead,function:0 msgid "Function" -msgstr "" +msgstr "ฟังก์ชั่น" #. module: crm #: field:crm.case.section,note:0 #: field:crm.phonecall,description:0 #: field:crm.segmentation,description:0 msgid "Description" -msgstr "" +msgstr "รายละเอียด" #. module: crm #: field:crm.case.categ,section_id:0 @@ -2813,14 +2825,14 @@ msgstr "" #: field:crm.phonecall2phonecall,section_id:0 #: field:res.partner,section_id:0 msgid "Sales Team" -msgstr "" +msgstr "ทีมขาย" #. module: crm #: selection:crm.lead.report,creation_month:0 #: selection:crm.lead.report,deadline_month:0 #: selection:crm.phonecall.report,month:0 msgid "May" -msgstr "" +msgstr "พฤษภาคม" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_channel_action @@ -2842,27 +2854,27 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Internal Notes" -msgstr "" +msgstr "บันทึกภายใน" #. module: crm #: view:crm.lead:0 msgid "New Opportunities" -msgstr "" +msgstr "โอกาสใหม่" #. module: crm #: field:crm.segmentation.line,operator:0 msgid "Mandatory / Optional" -msgstr "" +msgstr "บังคับ / เพิ่มเติม" #. module: crm #: field:crm.lead,street:0 msgid "Street" -msgstr "" +msgstr "ที่อยู่" #. module: crm #: field:crm.lead,referred:0 msgid "Referred By" -msgstr "" +msgstr "อ้างอิงโดย" #. module: crm #: view:crm.phonecall:0 @@ -2872,35 +2884,35 @@ msgstr "" #. module: crm #: field:crm.case.section,working_hours:0 msgid "Working Hours" -msgstr "" +msgstr "ชั่วโมงทำงาน" #. module: crm -#: code:addons/crm/crm_lead.py:968 +#: code:addons/crm/crm_lead.py:986 #: view:crm.lead:0 #: field:crm.lead2opportunity.partner,partner_id:0 #: field:crm.lead2opportunity.partner.mass,partner_id:0 #: field:crm.partner.binding,partner_id:0 #, python-format msgid "Customer" -msgstr "" +msgstr "ลูกค้า" #. module: crm #: selection:crm.lead.report,creation_month:0 #: selection:crm.lead.report,deadline_month:0 #: selection:crm.phonecall.report,month:0 msgid "February" -msgstr "" +msgstr "กุมภาพันธ์" #. module: crm #: view:crm.phonecall:0 msgid "Schedule a Meeting" -msgstr "" +msgstr "วางแผนการประชุม" #. module: crm #: model:crm.case.stage,name:crm.stage_lead8 #: view:crm.lead:0 msgid "Lost" -msgstr "" +msgstr "ไม่สำเร็จ" #. module: crm #: code:addons/crm/wizard/crm_lead_to_opportunity.py:89 @@ -2914,7 +2926,7 @@ msgstr "" #: view:crm.lead.report:0 #: field:crm.lead.report,country_id:0 msgid "Country" -msgstr "" +msgstr "ประเทศ" #. module: crm #: view:crm.lead:0 @@ -2922,7 +2934,7 @@ msgstr "" #: view:crm.lead2opportunity.partner.mass:0 #: view:crm.phonecall:0 msgid "Convert to Opportunity" -msgstr "" +msgstr "แปลงเป็นโอกาส" #. module: crm #: help:crm.phonecall,email_from:0 @@ -2934,17 +2946,17 @@ msgstr "คนเหล่านี้จะได้รับอีเมล์ #: selection:crm.lead.report,deadline_month:0 #: selection:crm.phonecall.report,month:0 msgid "April" -msgstr "" +msgstr "เมษายน" #. module: crm #: field:crm.case.resource.type,name:0 msgid "Campaign Name" -msgstr "" +msgstr "ชื่อแคมเปญ" #. module: crm #: view:crm.segmentation:0 msgid "Profiling" -msgstr "" +msgstr "ทำประวัติย่อ" #. module: crm #: model:ir.model,name:crm.model_crm_phonecall_report @@ -2954,7 +2966,7 @@ msgstr "" #. module: crm #: model:crm.case.stage,name:crm.stage_lead5 msgid "Negotiation" -msgstr "" +msgstr "กำลังเจรจา" #. module: crm #: model:ir.model,name:crm.model_crm_phonecall2phonecall @@ -2964,40 +2976,40 @@ msgstr "" #. module: crm #: field:crm.case.stage,sequence:0 msgid "Sequence" -msgstr "" +msgstr "ลำดับ" #. module: crm #: field:crm.segmentation.line,expr_name:0 msgid "Control Variable" -msgstr "" +msgstr "ตัวแปรควบคุม" #. module: crm #: model:crm.case.stage,name:crm.stage_lead4 msgid "Proposition" -msgstr "" +msgstr "ข้อเสนอ" #. module: crm #: view:crm.phonecall:0 #: field:res.partner,phonecall_ids:0 msgid "Phonecalls" -msgstr "" +msgstr "การโทร" #. module: crm #: view:crm.lead.report:0 #: view:crm.phonecall.report:0 #: field:crm.phonecall.report,name:0 msgid "Year" -msgstr "" +msgstr "ปี" #. module: crm #: model:crm.case.resource.type,name:crm.type_lead8 msgid "Newsletter" -msgstr "" +msgstr "ข่าวสาร" #. module: crm #: model:mail.message.subtype,name:crm.mt_salesteam_lead_stage msgid "Opportunity Stage Changed" -msgstr "" +msgstr "เปลี่ยนสถานะของโอกาสแล้ว" #. module: crm #: model:ir.actions.act_window,help:crm.crm_lead_stage_act diff --git a/addons/crm/i18n/zh_CN.po b/addons/crm/i18n/zh_CN.po index d7182841d8b..9064502ba33 100644 --- a/addons/crm/i18n/zh_CN.po +++ b/addons/crm/i18n/zh_CN.po @@ -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-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-12-19 07:22+0000\n" -"Last-Translator: Wei \"oldrev\" Li \n" +"PO-Revision-Date: 2013-07-23 03:21+0000\n" +"Last-Translator: fanvil \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: 2013-03-16 05:10+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-24 05:31+0000\n" +"X-Generator: Launchpad (build 16700)\n" #. module: crm #: view:crm.lead.report:0 @@ -29,7 +29,7 @@ msgid "" msgstr "允许你设置接收邮件服务器,并从收到的邮件中创建线索" #. module: crm -#: code:addons/crm/crm_lead.py:881 +#: code:addons/crm/crm_lead.py:898 #: selection:crm.case.stage,type:0 #: view:crm.lead:0 #: selection:crm.lead,type:0 @@ -54,6 +54,11 @@ msgid "" "Description: [[object.description]]\n" " " msgstr "" +"警告收到的新线索已超过5天未处理\n" +"名称:[[object.name]]\n" +"编号:[[object.id]]\n" +"描述:[[object.description]]\n" +" " #. module: crm #: field:crm.opportunity2phonecall,action:0 @@ -64,7 +69,7 @@ msgstr "动作" #. module: crm #: model:ir.actions.server,name:crm.action_set_team_sales_department msgid "Set team to Sales Department" -msgstr "" +msgstr "设置团队 到销售部" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 @@ -151,7 +156,7 @@ msgstr "规则名称" #: code:addons/crm/crm_phonecall.py:280 #, python-format msgid "It's only possible to convert one phonecall at a time." -msgstr "" +msgstr "每次只能转换一个电话呼叫" #. module: crm #: view:crm.case.resource.type:0 @@ -180,11 +185,11 @@ msgstr "预计结束月份" msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." -msgstr "" +msgstr "保留复杂的摘要(消息数量,……等)。为了插入到看板视图,这一摘要直接是是HTML格式。" #. module: crm -#: code:addons/crm/crm_lead.py:624 -#: code:addons/crm/crm_lead.py:744 +#: code:addons/crm/crm_lead.py:640 +#: code:addons/crm/crm_lead.py:761 #: code:addons/crm/crm_phonecall.py:280 #, python-format msgid "Warning!" @@ -232,7 +237,7 @@ msgstr "状态" #. module: crm #: field:res.partner,meeting_count:0 msgid "# Meetings" -msgstr "" +msgstr "#会议" #. module: crm #: model:ir.actions.server,name:crm.action_email_reminder_lead @@ -252,7 +257,7 @@ msgstr "排除的答案:" #. module: crm #: model:ir.model,name:crm.model_crm_merge_opportunity msgid "Merge opportunities" -msgstr "" +msgstr "合并商机" #. module: crm #: view:crm.lead.report:0 @@ -265,7 +270,7 @@ msgstr "线索分析" #: code:addons/crm/crm_lead.py:1010 #, python-format msgid "%s a call for the %s." -msgstr "" +msgstr "%s 一个电话 为了 %s." #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_resource_type_act @@ -293,7 +298,7 @@ msgid "Prospect Partner" msgstr "潜在业务伙伴" #. module: crm -#: code:addons/crm/crm_lead.py:982 +#: code:addons/crm/crm_lead.py:1002 #, python-format msgid "No Subject" msgstr "无主题" @@ -323,6 +328,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" " +"点击创建新客户分组\n" +"

\n" +" " +"创建指定的分类用于赋值给你的联系人\n" +" " +"以便更好管理你和他们的联系。分组工具\n" +" " +"可以根据你预设的条件给联系人分配组。\n" +"

\n" +" " #. module: crm #: field:crm.opportunity2phonecall,contact_name:0 @@ -445,16 +462,16 @@ msgid "#Opportunities" msgstr "#商机" #. module: crm -#: code:addons/crm/crm_lead.py:624 +#: code:addons/crm/crm_lead.py:640 #, python-format msgid "" "Please select more than one element (lead or opportunity) from the list view." -msgstr "" +msgstr "请从列表视图中选择一个以上元素(线索或机会)。" #. module: crm #: view:crm.lead:0 msgid "Leads that are assigned to one of the sale teams I manage, or to me" -msgstr "" +msgstr "分配给我锁管理的某个销售队伍,或给我的线索。" #. module: crm #: field:crm.lead,partner_address_email:0 @@ -473,6 +490,16 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" " +"点击创建新的销售团队\n" +"

\n" +" " +"使用销售团队,把不同销售员或部门组织成独立的团队。\n" +" " +"每个团队会使用自己的商机列表工作。\n" +"

\n" +" " #. module: crm #: model:process.transition,note:crm.process_transition_opportunitymeeting0 @@ -511,7 +538,7 @@ msgstr "邮件" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_stage msgid "Stage changed" -msgstr "" +msgstr "任务阶段已改变" #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -572,7 +599,7 @@ msgstr "合并" #. module: crm #: model:email.template,subject:crm.email_template_opportunity_mail msgid "Opportunity ${object.name | h})" -msgstr "" +msgstr "商机${object.name | h})" #. module: crm #: view:crm.case.categ:0 @@ -590,6 +617,8 @@ msgid "" "Reminder on Lead: [[object.id ]] [[object.partner_id and 'of ' " "+object.partner_id.name or '']]" msgstr "" +"线索:[[object.id ]] [[object.partner_id and 'of ' +object.partner_id.name or " +"'']]的提醒" #. module: crm #: view:crm.segmentation:0 @@ -630,6 +659,13 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击创建新类型\n" +"

\n" +" " +"创建指定的电话类型,更好地定义系统中记录的电话类型\n" +"

\n" +" " #. module: crm #: help:crm.case.section,reply_to:0 @@ -712,7 +748,7 @@ msgid "Statistics Dashboard" msgstr "统计控制台" #. module: crm -#: code:addons/crm/crm_lead.py:861 +#: code:addons/crm/crm_lead.py:878 #: model:crm.case.stage,name:crm.stage_lead2 #: selection:crm.case.stage,type:0 #: view:crm.lead:0 @@ -738,7 +774,7 @@ msgstr "转为商机" #. module: crm #: model:ir.model,name:crm.model_sale_config_settings msgid "sale.config.settings" -msgstr "" +msgstr "sale.config.settings" #. module: crm #: view:crm.segmentation:0 @@ -759,7 +795,7 @@ msgstr "查询电话访问" #: view:crm.lead.report:0 msgid "" "Leads/Opportunities that are assigned to one of the sale teams I manage" -msgstr "" +msgstr "分配给我所管理的某个销售团队的线索/商机。" #. module: crm #: field:calendar.attendee,categ_id:0 @@ -772,7 +808,7 @@ msgid "Exclusive" msgstr "唯一的" #. module: crm -#: code:addons/crm/crm_lead.py:584 +#: code:addons/crm/crm_lead.py:600 #, python-format msgid "From %s : %s" msgstr "发自: %s:%s" @@ -866,7 +902,7 @@ msgstr "标记为已赢得" #. module: crm #: model:ir.filters,name:crm.filter_usa_lead msgid "Leads from USA" -msgstr "" +msgstr "来自USA的线索" #. module: crm #: view:crm.lead:0 @@ -917,7 +953,7 @@ msgstr "参考" msgid "" "Opportunities that are assigned to either me or one of the sale teams I " "manage" -msgstr "" +msgstr "分配给我或者我管理的某个销售团队的商机。" #. module: crm #: help:crm.case.section,resource_calendar_id:0 @@ -940,7 +976,7 @@ msgid "Next Action" msgstr "下一动作" #. module: crm -#: code:addons/crm/crm_lead.py:763 +#: code:addons/crm/crm_lead.py:780 #, python-format msgid "Partner set to %s." msgstr "" @@ -983,6 +1019,8 @@ msgid "" "Allows you to track your customers/suppliers claims and grievances.\n" " This installs the module crm_claim." msgstr "" +"允许你记录客户/供应商的索赔和抱怨。\n" +" 将安装crm_claim模块" #. module: crm #: model:crm.case.stage,name:crm.stage_lead6 @@ -1030,10 +1068,10 @@ msgid "Creation Date" msgstr "创建日期" #. module: crm -#: code:addons/crm/crm_lead.py:698 +#: code:addons/crm/crm_lead.py:715 #, python-format msgid "Lead converted into an Opportunity" -msgstr "" +msgstr "线索 已转换成商机" #. module: crm #: selection:crm.segmentation.line,expr_name:0 @@ -1094,7 +1132,7 @@ msgstr "删除" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_create msgid "Opportunity created" -msgstr "" +msgstr "商机已创建" #. module: crm #: view:crm.lead:0 @@ -1123,6 +1161,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击创建新的商机\n" +"

\n" +" OpenERP帮你记录你的销售管道\n" +" 跟踪潜在销售并更好地预测未来收益\n" +"

\n" +" 你可以对商机安排会议或电话,\n" +" 将他们转化成报价单,附上相关\n" +" 文档,跟踪所有的讨论等等。\n" +"

\n" +" " #. module: crm #: field:crm.segmentation,partner_id:0 @@ -1186,13 +1235,13 @@ msgstr "如果你勾选了这里,这个阶段会作为每个销售团队的默 msgid "" "This field is used to distinguish stages related to Leads from stages " "related to Opportunities, or to specify stages available for both types." -msgstr "" +msgstr "此域用于区分用于线索的阶段和用于商机的阶段,或者指示同时可用于两个类型。" #. module: crm #: model:mail.message.subtype,name:crm.mt_lead_create #: model:mail.message.subtype,name:crm.mt_salesteam_lead msgid "Lead Created" -msgstr "" +msgstr "线索已创建" #. module: crm #: help:crm.segmentation,sales_purchase_active:0 @@ -1217,7 +1266,9 @@ msgid "Days to Close" msgstr "结束日期" #. module: crm +#: code:addons/crm/crm_lead.py:1057 #: field:crm.case.section,complete_name:0 +#, python-format msgid "unknown" msgstr "未知" @@ -1264,7 +1315,7 @@ msgid "" "progress the Status is set to 'Open'. When the case is over, the Status is " "set to 'Done'. If the case needs to be reviewed then the Status is set to " "'Pending'." -msgstr "" +msgstr "当一个创建时,状态设为‘草稿’。如果此案在进行中,被设为‘打开‘。当案子结束,状态被设为’结束‘。如果需要被审阅,状态被设为’等待‘" #. module: crm #: model:crm.case.section,name:crm.crm_case_section_1 @@ -1300,7 +1351,7 @@ msgid "Lead Description" msgstr "销售线索描述" #. module: crm -#: code:addons/crm/crm_lead.py:565 +#: code:addons/crm/crm_lead.py:581 #, python-format msgid "Merged opportunities" msgstr "合并商机" @@ -1373,7 +1424,7 @@ msgstr "待办事项" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_lost msgid "Opportunity lost" -msgstr "" +msgstr "丢掉的商机" #. module: crm #: field:crm.lead2opportunity.partner,action:0 @@ -1422,7 +1473,7 @@ msgstr "用户" #. module: crm #: model:mail.message.subtype,name:crm.mt_lead_stage msgid "Stage Changed" -msgstr "" +msgstr "阶段已改变" #. module: crm #: field:crm.case.stage,section_ids:0 @@ -1495,7 +1546,7 @@ msgstr "信息和通信历史记录" #. module: crm #: view:crm.lead:0 msgid "Show Countries" -msgstr "" +msgstr "显示国家" #. module: crm #: view:crm.lead:0 @@ -1567,7 +1618,7 @@ msgid "" "The status of your document will automatically change regarding the selected " "stage. For example, if a stage is related to the status 'Close', when your " "document reaches this stage, it is automatically closed." -msgstr "" +msgstr "文档的状态会根据选中的阶段自动改变。如果一个阶段关联了‘关闭’状态,当文档到达这个阶段就自动被关闭。" #. module: crm #: view:crm.lead2opportunity.partner.mass:0 @@ -1588,7 +1639,7 @@ msgstr "通话月份" #: code:addons/crm/crm_phonecall.py:290 #, python-format msgid "Partner has been created." -msgstr "" +msgstr "合作伙伴已创建" #. module: crm #: field:sale.config.settings,module_crm_claim:0 @@ -1602,6 +1653,7 @@ msgid "" "the treatment delays or number of leads per state. You can sort out your " "leads analysis by different groups to get accurate grained analysis." msgstr "" +"线索分析允许你检查不同的关联CRM的信息,例如延迟或每个状态的线索的数量。你可以使用不同的分组对线索分析进行整理已获得精确细致的分析结果。" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor3 @@ -1822,7 +1874,7 @@ msgstr "销售团队" #. module: crm #: field:crm.case.stage,case_default:0 msgid "Default to New Sales Team" -msgstr "" +msgstr "默认分配给新建销售团队" #. module: crm #: view:crm.lead:0 @@ -1861,10 +1913,10 @@ msgid "Leads" msgstr "线索" #. module: crm -#: code:addons/crm/crm_lead.py:563 +#: code:addons/crm/crm_lead.py:579 #, python-format msgid "Merged leads" -msgstr "" +msgstr "合并的线索" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor5 @@ -1887,7 +1939,7 @@ msgstr "待办" #: model:mail.message.subtype,name:crm.mt_lead_convert_to_opportunity #: model:mail.message.subtype,name:crm.mt_salesteam_lead_opportunity msgid "Lead to Opportunity" -msgstr "" +msgstr "线索到商机" #. module: crm #: field:crm.lead,user_email:0 @@ -1955,7 +2007,6 @@ msgid "Global CC" msgstr "完整抄送" #. module: crm -#: view:crm.lead:0 #: view:crm.phonecall:0 #: model:ir.actions.act_window,name:crm.crm_case_categ_phone0 #: model:ir.ui.menu,name:crm.menu_crm_case_phone @@ -2089,7 +2140,7 @@ msgstr "转换选项" msgid "" "Follow this salesteam to automatically track the events associated to users " "of this team." -msgstr "" +msgstr "跟踪此销售团队,自动跟踪此团队中用户关联的事件。" #. module: crm #: view:crm.lead:0 @@ -2101,7 +2152,7 @@ msgstr "地址" msgid "" "The email address associated with this team. New emails received will " "automatically create new leads assigned to the team." -msgstr "" +msgstr "此邮件地址关联此团队。收到的新邮件将自动创建线索并分配给此团队。" #. module: crm #: view:crm.lead:0 @@ -2193,13 +2244,24 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击安排一个销售电话\n" +"

\n" +" " +"OpenERP允许你容易地定义销售团队要打的\n" +" 电话并根据跟踪处理。 " +" \n" +"

\n" +" 你可以使用导入功能来导入新列表\n" +"

\n" +" " #. module: crm #: help:crm.case.stage,fold:0 msgid "" "This stage is not visible, for example in status bar or kanban view, when " "there are no records in that stage to display." -msgstr "" +msgstr "此阶段无记录可显示时,在状态栏或看板视图等处不可见。" #. module: crm #: field:crm.lead.report,nbr:0 @@ -2245,7 +2307,7 @@ msgstr "运行中" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_convert_to_opportunity msgid "Lead converted into an opportunity" -msgstr "" +msgstr "装换成商机的线索" #. module: crm #: view:crm.lead:0 @@ -2255,7 +2317,7 @@ msgstr "未分配的线索" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_won msgid "Opportunity won" -msgstr "" +msgstr "获胜的商机" #. module: crm #: field:crm.case.categ,object_id:0 @@ -2321,7 +2383,7 @@ msgstr "在这报表中,你能分析你的销售团队在电话访问上的业 #. module: crm #: field:crm.case.stage,fold:0 msgid "Fold by Default" -msgstr "" +msgstr "默认折叠" #. module: crm #: field:crm.case.stage,state:0 @@ -2357,7 +2419,7 @@ msgstr "已确认" #. module: crm #: model:ir.model,name:crm.model_crm_partner_binding msgid "Handle partner binding or generation in CRM wizards." -msgstr "" +msgstr "在CRM向导中处理合作伙伴的绑定或生成。" #. module: crm #: model:ir.actions.act_window,name:crm.act_oppor_stage_user @@ -2408,11 +2470,23 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击创建一个未验证的线索。\n" +"

\n" +" 如果你在创建一个商机或者客户前\n" +" 需要验证,使用线索。可以是一张收到的\n" +" 名片,网站上收到的一个联系方式,或者\n" +" 你导入系统的一个文件数据。\n" +"

\n" +" 一旦被确定,线索可以被装换成商机\n" +" 以及/或者你的地址簿中的新客户。\n" +"

\n" +" " #. module: crm #: field:sale.config.settings,fetchmail_lead:0 msgid "Create leads from incoming mails" -msgstr "" +msgstr "从收到的邮件创建线索" #. module: crm #: view:crm.lead:0 @@ -2480,6 +2554,19 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击创建电话总结\n" +"

\n" +" OpenERP " +"允许你快速记录打入的电话,用来\n" +" " +"跟踪与用户沟通的历史,或通知另一个销售团队。\n" +"

\n" +" " +"为了跟踪处理一个电话,你可以触发请求另一次电话,\n" +" 一次会议或者一个商机。\n" +"

\n" +" " #. module: crm #: model:process.node,note:crm.process_node_leads0 @@ -2526,6 +2613,20 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" " +"点击新建一个销售标签\n" +"

\n" +" " +"创建指定的适合公司活动的标签\n" +" " +"用于更好地分析你的线索和商机。\n" +" " +"标签分类可以反映你的商品结构或者\n" +" " +"不同的销售类型。\n" +"

\n" +" " #. module: crm #: selection:crm.lead.report,creation_month:0 @@ -2538,7 +2639,7 @@ msgstr "8月" #: model:mail.message.subtype,name:crm.mt_lead_lost #: model:mail.message.subtype,name:crm.mt_salesteam_lead_lost msgid "Opportunity Lost" -msgstr "" +msgstr "丢失的商机" #. module: crm #: field:crm.lead.report,deadline_month:0 @@ -2634,7 +2735,7 @@ msgstr "通话日志" #: model:mail.message.subtype,name:crm.mt_lead_won #: model:mail.message.subtype,name:crm.mt_salesteam_lead_won msgid "Opportunity Won" -msgstr "" +msgstr "获胜的商机" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_section_act_tree @@ -2773,7 +2874,7 @@ msgstr "电话访问" #. module: crm #: view:crm.phonecall.report:0 msgid "Phone calls that are assigned to one of the sale teams I manage" -msgstr "" +msgstr "分配给某个我所管理的销售团队的电话。" #. module: crm #: view:crm.lead:0 @@ -2848,6 +2949,19 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" " +"点击定义一个新渠道\n" +"

\n" +" " +"使用渠道来记录你的线索和商机的来源。\n" +" " +"主要用于市场工作相关的销售分析报告。\n" +"

\n" +" " +"渠道例子:公司网站,电话,市场活动,经销商等\n" +"

\n" +" " #. module: crm #: view:crm.lead:0 @@ -2885,7 +2999,7 @@ msgid "Working Hours" msgstr "工作时间" #. module: crm -#: code:addons/crm/crm_lead.py:968 +#: code:addons/crm/crm_lead.py:986 #: view:crm.lead:0 #: field:crm.lead2opportunity.partner,partner_id:0 #: field:crm.lead2opportunity.partner.mass,partner_id:0 @@ -3007,7 +3121,7 @@ msgstr "时事通信" #. module: crm #: model:mail.message.subtype,name:crm.mt_salesteam_lead_stage msgid "Opportunity Stage Changed" -msgstr "" +msgstr "商机状态已改变" #. module: crm #: model:ir.actions.act_window,help:crm.crm_lead_stage_act @@ -3021,6 +3135,16 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" " +"点击设置你的线索/商机管道的新阶段。\n" +"

\n" +" " +"阶段允许销售人员记录特定的线索或商机\n" +" " +"在销售循环中的位置。\n" +"

\n" +" " #~ msgid "My Draft " #~ msgstr "我的草稿 " diff --git a/addons/crm_partner_assign/__openerp__.py b/addons/crm_partner_assign/__openerp__.py index 37a8c5a3d6b..e0f1d78558a 100644 --- a/addons/crm_partner_assign/__openerp__.py +++ b/addons/crm_partner_assign/__openerp__.py @@ -38,7 +38,7 @@ You can also use the geolocalization without using the GPS coordinates. """, 'author': 'OpenERP SA', 'depends': ['crm', 'account', 'portal'], - 'demo': ['res_partner_demo.xml'], + 'demo': ['res_partner_demo.xml', 'crm_lead_demo.xml'], 'data': [ 'security/ir.model.access.csv', 'res_partner_view.xml', diff --git a/addons/crm_partner_assign/crm_lead_demo.xml b/addons/crm_partner_assign/crm_lead_demo.xml new file mode 100644 index 00000000000..6631131d054 --- /dev/null +++ b/addons/crm_partner_assign/crm_lead_demo.xml @@ -0,0 +1,32 @@ + + + + + + + lead + Specifications and price of your phones + Steve Martinez + + + Reseller + + Edinburgh + + + + 2 + + + + Hi, + + Please, can you give me more details about your phones, including their specifications and their prices. + + Regards, + Steve + + + + + \ No newline at end of file diff --git a/addons/crm_partner_assign/i18n/zh_CN.po b/addons/crm_partner_assign/i18n/zh_CN.po index af764d72747..d69d52029fc 100644 --- a/addons/crm_partner_assign/i18n/zh_CN.po +++ b/addons/crm_partner_assign/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-14 13:50+0000\n" -"Last-Translator: 盈通 ccdos \n" +"PO-Revision-Date: 2013-07-23 06:22+0000\n" +"Last-Translator: fanvil \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:47+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-24 05:31+0000\n" +"X-Generator: Launchpad (build 16700)\n" #. module: crm_partner_assign #: field:crm.lead.report.assign,delay_close:0 @@ -37,7 +37,7 @@ msgstr "计划收入" msgid "" "Message type: email for email message, notification for system message, " "comment for other messages such as user replies" -msgstr "" +msgstr "消息类型:Email 用于 邮件消息, 通知用户系统消息,评论用于其他消息,例如用户回复。" #. module: crm_partner_assign #: field:crm.lead.report.assign,nbr:0 @@ -53,7 +53,7 @@ msgstr "分组..." #. module: crm_partner_assign #: help:crm.lead.forward.to.partner,body:0 msgid "Automatically sanitized HTML contents" -msgstr "" +msgstr "自动整理HTML内容" #. module: crm_partner_assign #: view:crm.lead:0 @@ -68,7 +68,7 @@ msgstr "geolocalization定位" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,starred:0 msgid "Starred" -msgstr "" +msgstr "加星号的邮件" #. module: crm_partner_assign #: view:crm.lead.forward.to.partner:0 @@ -80,7 +80,7 @@ msgstr "正文" msgid "" "Email address of the sender. This field is set when no matching partner is " "found for incoming emails." -msgstr "" +msgstr "发送者的Email地址。当收取的email没有对应的合作伙伴时,此字段被设置" #. module: crm_partner_assign #: view:crm.partner.report.assign:0 @@ -111,7 +111,7 @@ msgstr "公司" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,notification_ids:0 msgid "Notifications" -msgstr "" +msgstr "通知" #. module: crm_partner_assign #: field:crm.lead.report.assign,date_assign:0 @@ -123,7 +123,7 @@ msgstr "业务伙伴日期" #: view:crm.partner.report.assign:0 #: view:res.partner:0 msgid "Salesperson" -msgstr "" +msgstr "销售员" #. module: crm_partner_assign #: selection:crm.lead.report.assign,priority:0 @@ -170,7 +170,7 @@ msgstr "指派的geolocalization" #. module: crm_partner_assign #: model:ir.model,name:crm_partner_assign.model_crm_lead_forward_to_partner msgid "Email composition wizard" -msgstr "" +msgstr "Email撰写向导" #. module: crm_partner_assign #: field:crm.partner.report.assign,turnover:0 @@ -192,7 +192,7 @@ msgstr "为线索指定一个业务伙伴的概率(0表示没指派)" #. module: crm_partner_assign #: view:res.partner:0 msgid "Partner Activation" -msgstr "" +msgstr "激活合作伙伴" #. module: crm_partner_assign #: selection:crm.lead.forward.to.partner,type:0 @@ -203,7 +203,7 @@ msgstr "系统通知" #: code:addons/crm_partner_assign/wizard/crm_forward_to_partner.py:74 #, python-format msgid "Lead forward" -msgstr "" +msgstr "转发的线索" #. module: crm_partner_assign #: field:crm.lead.report.assign,probability:0 @@ -284,7 +284,7 @@ msgstr "最低" #. module: crm_partner_assign #: view:crm.partner.report.assign:0 msgid "Date Invoice" -msgstr "" +msgstr "发票排程" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,template_id:0 @@ -309,7 +309,7 @@ msgstr "创建日期" #. module: crm_partner_assign #: model:ir.model,name:crm_partner_assign.model_res_partner_activation msgid "res.partner.activation" -msgstr "" +msgstr "res.partner.activation" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,parent_id:0 @@ -344,7 +344,7 @@ msgstr "7月" #. module: crm_partner_assign #: view:crm.partner.report.assign:0 msgid "Date Review" -msgstr "" +msgstr "回顾排程" #. module: crm_partner_assign #: view:crm.lead.report.assign:0 @@ -356,12 +356,12 @@ msgstr "阶段" #: view:crm.lead.report.assign:0 #: field:crm.lead.report.assign,state:0 msgid "Status" -msgstr "" +msgstr "状态" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,to_read:0 msgid "To read" -msgstr "" +msgstr "查看" #. module: crm_partner_assign #: code:addons/crm_partner_assign/wizard/crm_forward_to_partner.py:74 @@ -416,12 +416,12 @@ msgstr "到期天数" #: help:crm.lead.forward.to.partner,notified_partner_ids:0 msgid "" "Partners that have a notification pushing this message in their mailboxes" -msgstr "" +msgstr "推送此通知消息进他们邮箱的合作伙伴" #. module: crm_partner_assign #: selection:crm.lead.forward.to.partner,type:0 msgid "Comment" -msgstr "" +msgstr "评论" #. module: crm_partner_assign #: field:res.partner,partner_weight:0 @@ -449,7 +449,7 @@ msgstr "12月" #. module: crm_partner_assign #: help:crm.lead.forward.to.partner,vote_user_ids:0 msgid "Users that voted for this message" -msgstr "" +msgstr "投票给这条消息的用户" #. module: crm_partner_assign #: view:crm.lead.report.assign:0 @@ -465,13 +465,13 @@ msgstr "开启日期" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,child_ids:0 msgid "Child Messages" -msgstr "" +msgstr "子信息" #. module: crm_partner_assign #: field:crm.partner.report.assign,date_review:0 #: field:res.partner,date_review:0 msgid "Latest Partner Review" -msgstr "" +msgstr "最新合作伙伴评论" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,subject:0 @@ -481,17 +481,17 @@ msgstr "主题" #. module: crm_partner_assign #: view:crm.lead.forward.to.partner:0 msgid "or" -msgstr "" +msgstr "或" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,body:0 msgid "Contents" -msgstr "" +msgstr "内容" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,vote_user_ids:0 msgid "Votes" -msgstr "" +msgstr "投票" #. module: crm_partner_assign #: view:crm.lead.report.assign:0 @@ -501,13 +501,13 @@ msgstr "#商机" #. module: crm_partner_assign #: help:crm.lead.forward.to.partner,starred:0 msgid "Current user has a starred notification linked to this message" -msgstr "" +msgstr "当前用户用 星号 提醒关联到这条消息" #. module: crm_partner_assign #: field:crm.partner.report.assign,date_partnership:0 #: field:res.partner,date_partnership:0 msgid "Partnership Date" -msgstr "" +msgstr "合作关系日期" #. module: crm_partner_assign #: view:crm.lead:0 @@ -661,7 +661,7 @@ msgstr "" #. module: crm_partner_assign #: field:crm.partner.report.assign,period_id:0 msgid "Invoice Period" -msgstr "" +msgstr "发票期间" #. module: crm_partner_assign #: model:ir.model,name:crm_partner_assign.model_res_partner_grade @@ -682,7 +682,7 @@ msgstr "附件" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,record_name:0 msgid "Message Record Name" -msgstr "" +msgstr "消息记录名称" #. module: crm_partner_assign #: field:res.partner.activation,sequence:0 @@ -696,7 +696,7 @@ msgstr "序列" msgid "" "Cannot contact geolocation servers. Please make sure that your internet " "connection is up and running (%s)." -msgstr "" +msgstr "无法连接地理信息服务器。请确保你的互联网链接畅通(%s)。" #. module: crm_partner_assign #: selection:crm.lead.report.assign,month:0 @@ -722,7 +722,7 @@ msgstr "开启" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,subtype_id:0 msgid "Subtype" -msgstr "" +msgstr "子类型" #. module: crm_partner_assign #: field:res.partner,date_localization:0 @@ -737,12 +737,12 @@ msgstr "当前的" #. module: crm_partner_assign #: model:ir.model,name:crm_partner_assign.model_crm_lead msgid "Lead/Opportunity" -msgstr "" +msgstr "线索/商机" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,notified_partner_ids:0 msgid "Notified partners" -msgstr "" +msgstr "已通知的合作伙伴" #. module: crm_partner_assign #: view:crm.lead.forward.to.partner:0 @@ -773,7 +773,7 @@ msgstr "可能收入" #: field:res.partner,activation:0 #: view:res.partner.activation:0 msgid "Activation" -msgstr "" +msgstr "激活" #. module: crm_partner_assign #: view:crm.lead:0 @@ -784,12 +784,12 @@ msgstr "指定的业务伙伴" #. module: crm_partner_assign #: field:res.partner,grade_id:0 msgid "Partner Level" -msgstr "" +msgstr "合作伙伴级别" #. module: crm_partner_assign #: help:crm.lead.forward.to.partner,to_read:0 msgid "Current user has an unread notification linked to this message" -msgstr "" +msgstr "当前用户有关联到这条消息的未读的提醒" #. module: crm_partner_assign #: selection:crm.lead.report.assign,type:0 @@ -815,7 +815,7 @@ msgstr "名称" #: model:ir.actions.act_window,name:crm_partner_assign.res_partner_activation_act #: model:ir.ui.menu,name:crm_partner_assign.res_partner_activation_config_mi msgid "Partner Activations" -msgstr "" +msgstr "合作伙伴激活" #. module: crm_partner_assign #: view:crm.lead.report.assign:0 @@ -872,7 +872,7 @@ msgstr "客户关系管理 线索报表" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,composition_mode:0 msgid "Composition mode" -msgstr "" +msgstr "写作模式" #. module: crm_partner_assign #: field:crm.lead.forward.to.partner,model:0 diff --git a/addons/crm_todo/crm_todo_view.xml b/addons/crm_todo/crm_todo_view.xml index 851c2abfba4..96d00e76932 100644 --- a/addons/crm_todo/crm_todo_view.xml +++ b/addons/crm_todo/crm_todo_view.xml @@ -16,12 +16,8 @@ -
diff --git a/addons/portal_project_issue/tests/test_access_rights.py b/addons/portal_project_issue/tests/test_access_rights.py index 28d337a4965..a7721b489a0 100644 --- a/addons/portal_project_issue/tests/test_access_rights.py +++ b/addons/portal_project_issue/tests/test_access_rights.py @@ -19,40 +19,36 @@ # ############################################################################## -from openerp.addons.portal_project.tests.test_access_rights import TestPortalProject +from openerp.addons.portal_project.tests.test_access_rights import TestPortalProjectBase from openerp.osv.orm import except_orm from openerp.tools import mute_logger -class TestPortalIssueProject(TestPortalProject): +class TestPortalProjectBase(TestPortalProjectBase): def setUp(self): - super(TestPortalIssueProject, self).setUp() + super(TestPortalProjectBase, self).setUp() cr, uid = self.cr, self.uid # Useful models self.project_issue = self.registry('project.issue') # Various test issues - self.issue_1_id = self.project_issue.create(cr, uid, - {'name': 'Test1', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_2_id = self.project_issue.create(cr, uid, - {'name': 'Test2', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_3_id = self.project_issue.create(cr, uid, - {'name': 'Test3', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_4_id = self.project_issue.create(cr, uid, - {'name': 'Test4', 'user_id': self.user_alfred_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_5_id = self.project_issue.create(cr, uid, - {'name': 'Test5', 'user_id': self.user_chell_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_6_id = self.project_issue.create(cr, uid, - {'name': 'Test6', 'user_id': self.user_donovan_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) + self.issue_1_id = self.project_issue.create(cr, uid, { + 'name': 'Test1', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_2_id = self.project_issue.create(cr, uid, { + 'name': 'Test2', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_3_id = self.project_issue.create(cr, uid, { + 'name': 'Test3', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_4_id = self.project_issue.create(cr, uid, { + 'name': 'Test4', 'user_id': self.user_projectuser_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_5_id = self.project_issue.create(cr, uid, { + 'name': 'Test5', 'user_id': self.user_portal_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_6_id = self.project_issue.create(cr, uid, { + 'name': 'Test6', 'user_id': self.user_anonymous_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + +class TestPortalIssue(TestPortalProjectBase): @mute_logger('openerp.addons.base.ir.ir_model', 'openerp.osv.orm') def test_00_project_access_rights(self): """ Test basic project access rights, for project and portal_project """ @@ -64,42 +60,38 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ok (employee ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_2_id, self.issue_3_id, self.issue_4_id, self.issue_5_id, self.issue_6_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') + 'access rights: project user cannot see all issues of a public project') # Test: all project issues readable - self.project_issue.read(cr, self.user_alfred_id, issue_ids, ['name']) + self.project_issue.read(cr, self.user_projectuser_id, issue_ids, ['name']) # Test: all project issues writable - self.project_issue.write(cr, self.user_alfred_id, issue_ids, {'description': 'TestDescription'}) + self.project_issue.write(cr, self.user_projectuser_id, issue_ids, {'description': 'TestDescription'}) # Do: Bert reads project -> crash, no group # Test: no project issue visible - self.assertRaises(except_orm, self.project_issue.search, - cr, self.user_bert_id, [('project_id', '=', pigs_id)]) + self.assertRaises(except_orm, self.project_issue.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) # Test: no project issue readable - self.assertRaises(except_orm, self.project_issue.read, - cr, self.user_bert_id, issue_ids, ['name']) + self.assertRaises(except_orm, self.project_issue.read, cr, self.user_none_id, issue_ids, ['name']) # Test: no project issue writable - self.assertRaises(except_orm, self.project_issue.write, - cr, self.user_bert_id, issue_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_issue.write, cr, self.user_none_id, issue_ids, {'description': 'TestDescription'}) # Do: Chell reads project -> ok (portal ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') + 'access rights: project user cannot see all issues of a public project') # Test: all project issues readable - self.project_issue.read(cr, self.user_chell_id, issue_ids, ['name']) + self.project_issue.read(cr, self.user_portal_id, issue_ids, ['name']) # Test: no project issue writable - self.assertRaises(except_orm, self.project_issue.write, - cr, self.user_chell_id, issue_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_issue.write, cr, self.user_portal_id, issue_ids, {'description': 'TestDescription'}) # Do: Donovan reads project -> ok (anonymous ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_donovan_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') + 'access rights: project user cannot see all issues of a public project') # ---------------------------------------- # CASE2: portal project @@ -108,27 +100,26 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ok (employee ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a portal project') + 'access rights: project user cannot see all issues of a portal project') # Do: Bert reads project -> crash, no group # Test: no project issue searchable - self.assertRaises(except_orm, self.project_issue.search, - cr, self.user_bert_id, [('project_id', '=', pigs_id)]) + self.assertRaises(except_orm, self.project_issue.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) # Data: issue follower - self.project_issue.message_subscribe_users(cr, self.user_alfred_id, [self.issue_1_id, self.issue_3_id], [self.user_chell_id]) + self.project_issue.message_subscribe_users(cr, self.user_projectuser_id, [self.issue_1_id, self.issue_3_id], [self.user_portal_id]) # Do: Chell reads project -> ok (portal ok public) # Test: only followed project issues visible + assigned - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_3_id, self.issue_5_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: portal user should see the followed issues of a portal project') + 'access rights: portal user should see the followed issues of a portal project') # Data: issue follower cleaning - self.project_issue.message_unsubscribe_users(cr, self.user_alfred_id, [self.issue_1_id, self.issue_3_id], [self.user_chell_id]) + self.project_issue.message_unsubscribe_users(cr, self.user_projectuser_id, [self.issue_1_id, self.issue_3_id], [self.user_portal_id]) # ---------------------------------------- # CASE3: employee project @@ -137,14 +128,14 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ok (employee ok employee) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_2_id, self.issue_3_id, self.issue_4_id, self.issue_5_id, self.issue_6_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of an employees project') + 'access rights: project user cannot see all issues of an employees project') # Do: Chell reads project -> ko (portal ko employee) # Test: no project issue visible + assigned - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) self.assertFalse(issue_ids, 'access rights: portal user should not see issues of an employees project, even if assigned') # ---------------------------------------- @@ -154,32 +145,32 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ko (employee ko followers) # Test: no project issue visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_4_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: employee user should not see issues of a not-followed followers project, only assigned') + 'access rights: employee user should not see issues of a not-followed followers project, only assigned') # Do: Chell reads project -> ko (portal ko employee) # Test: no project issue visible - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_5_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: portal user should not see issues of a not-followed followers project, only assigned') + 'access rights: portal user should not see issues of a not-followed followers project, only assigned') # Data: subscribe Alfred, Chell and Donovan as follower - self.project_project.message_subscribe_users(cr, uid, [pigs_id], [self.user_alfred_id, self.user_chell_id, self.user_donovan_id]) - self.project_issue.message_subscribe_users(cr, self.user_alfred_id, [self.issue_1_id, self.issue_3_id], [self.user_chell_id, self.user_alfred_id]) + self.project_project.message_subscribe_users(cr, uid, [pigs_id], [self.user_projectuser_id, self.user_portal_id, self.user_anonymous_id]) + self.project_issue.message_subscribe_users(cr, self.user_projectuser_id, [self.issue_1_id, self.issue_3_id], [self.user_portal_id, self.user_projectuser_id]) # Do: Alfred reads project -> ok (follower ok followers) # Test: followed + assigned issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_3_id, self.issue_4_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: employee user should not see followed + assigned issues of a follower project') + 'access rights: employee user should not see followed + assigned issues of a follower project') # Do: Chell reads project -> ok (follower ok follower) # Test: followed + assigned issues visible - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_3_id, self.issue_5_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: employee user should not see followed + assigned issues of a follower project') + 'access rights: employee user should not see followed + assigned issues of a follower project') diff --git a/addons/product/pricelist.py b/addons/product/pricelist.py index 6fc926980dd..649b721eb46 100644 --- a/addons/product/pricelist.py +++ b/addons/product/pricelist.py @@ -376,11 +376,26 @@ class product_pricelist_item(osv.osv): result.append((-2, _('Supplier Prices on the product form'))) return result +# Added default function to fetch the Price type Based on Pricelist type. + def _get_default_base(self, cr, uid, fields, context=None): + product_price_type_obj = self.pool.get('product.price.type') + if fields.get('type') == 'purchase': + product_price_type_ids = product_price_type_obj.search(cr, uid, [('field', '=', 'standard_price')], context=context) + elif fields.get('type') == 'sale': + product_price_type_ids = product_price_type_obj.search(cr, uid, [('field','=','list_price')], context=context) + else: + return -1 + if not product_price_type_ids: + return False + else: + pricetype = product_price_type_obj.browse(cr, uid, product_price_type_ids, context=context)[0] + return pricetype.id + _name = "product.pricelist.item" _description = "Pricelist item" _order = "sequence, min_quantity desc" _defaults = { - 'base': lambda *a: -1, + 'base': _get_default_base, 'min_quantity': lambda *a: 0, 'sequence': lambda *a: 5, 'price_discount': lambda *a: 0, diff --git a/addons/product/pricelist_view.xml b/addons/product/pricelist_view.xml index a1b996b891b..784a14228d5 100644 --- a/addons/product/pricelist_view.xml +++ b/addons/product/pricelist_view.xml @@ -152,7 +152,7 @@ - +
@@ -160,7 +160,7 @@ - + diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py index c0a516cf555..f5ba24c41cb 100644 --- a/addons/project/__openerp__.py +++ b/addons/project/__openerp__.py @@ -40,7 +40,6 @@ ], 'depends': [ 'base_setup', - 'base_status', 'product', 'analytic', 'board', @@ -66,7 +65,6 @@ Dashboard / Reports for Project Management will include: 'data': [ 'security/project_security.xml', 'wizard/project_task_delegate_view.xml', - 'wizard/project_task_reevaluate_view.xml', 'security/ir.model.access.csv', 'project_data.xml', 'project_view.xml', @@ -79,9 +77,6 @@ Dashboard / Reports for Project Management will include: ], 'demo': ['project_demo.xml'], 'test': [ - 'test/project_demo.yml', - 'test/project_process.yml', - 'test/task_process.yml', ], 'installable': True, 'auto_install': False, diff --git a/addons/project/board_project_view.xml b/addons/project/board_project_view.xml index 931c661d211..3a14f7b6274 100644 --- a/addons/project/board_project_view.xml +++ b/addons/project/board_project_view.xml @@ -16,7 +16,6 @@ - @@ -26,7 +25,7 @@ project.task form tree,form - [('user_id','=',uid),('state','not in',('cancel','done'))] + [('user_id', '=', uid), ('stage_id.fold', '!=', True)] diff --git a/addons/project/doc/changelog.rst b/addons/project/doc/changelog.rst new file mode 100644 index 00000000000..ba5b242f1c0 --- /dev/null +++ b/addons/project/doc/changelog.rst @@ -0,0 +1,16 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-2)` +---------------- + +- Stage/state update + + - ``project.task``: removed inheritance from ``base_stage`` class and removed + ``state`` field. Added ``date_last_stage_update`` field holding last stage_id + modification. Updated reports. + - ``project.task.type``: removed ``state`` field. + +- Removed ``project.task.reevaluate`` wizard. diff --git a/addons/project/doc/index.rst b/addons/project/doc/index.rst new file mode 100644 index 00000000000..118b8e7006b --- /dev/null +++ b/addons/project/doc/index.rst @@ -0,0 +1,22 @@ +===================== +Project DevDoc +===================== + +Project module documentation +=================================== + +Documentation topics +'''''''''''''''''''' + +.. toctree:: + :maxdepth: 1 + + stage_status.rst + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/project/doc/stage_status.rst b/addons/project/doc/stage_status.rst new file mode 100644 index 00000000000..cc2a64c2fbf --- /dev/null +++ b/addons/project/doc/stage_status.rst @@ -0,0 +1,55 @@ +.. _stage_status: + +Stage and Status +================ + +.. versionchanged:: 8.0 saas-2 state/stage cleaning + +Stage ++++++ + +This revision removed the concept of state on project.task objects. The ``state`` +field has been totally removed and replaced by stages, using ``stage_id``. The +following models are impacted: + + - ``project.task`` now use only stages. However a convention still exists about + 'New' stage. A task is consdered as ``new`` when it has the following + properties: + + - ``stage_id and stage_id.sequence = 1`` + + - ``project.task.type`` do not have any ``state`` field anymore. + - ``project.task.report`` do not have any ``state`` field anymore. + +By default a newly created task is in a new stage. It means that it will +fetch the stage having ``sequence = 1``. Stage mangement is done using the +kanban view or the clikable statusbar. It is not done using buttons anymore. + +Stage analysis +++++++++++++++ + +Stage analysis can be performed using the newly introduced ``date_last_stage_update`` +datetime field. This field is updated everytime ``stage_id`` is updated. + +``project.task.report`` model also uses the ``date_last_stage_update`` field. +This allows to group and analyse the time spend in the various stages. + +Open / Assignation date ++++++++++++++++++++++++ + +The ``date_open`` field meaning has been updated. It is now set when the ``user_id`` +(responsible) is set. It is therefore the assignation date. + +Subtypes +++++++++ + +The following subtypes are triggered on ``project.task``: + + - ``mt_task_new``: new tasks. Condition: ``obj.stage_id and obj.stage_id.sequence == 1`` + - ``mt_task_stage``: stage changed. Condition: ``obj.stage_id and obj.stage_id.sequence != 1`` + - ``mt_task_assigned``: user assigned. condition: ``obj.user_id and obj.user_id.id`` + - ``mt_task_blocked``: kanban state blocked. Condition: ``obj.kanban_state == 'blocked'`` + + +Those subtypes are also available on the ``project.project`` model and are used +for the auto subscription. diff --git a/addons/project/project.py b/addons/project/project.py index 6bd17f98e92..d09e3476a96 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -25,13 +25,10 @@ import time from openerp import SUPERUSER_ID from openerp import tools +from openerp.addons.resource.faces import task as Task from openerp.osv import fields, osv from openerp.tools.translate import _ -from openerp.addons.base_status.base_stage import base_stage -from openerp.addons.resource.faces import task as Task - -_TASK_STATE = [('draft', 'New'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done'), ('cancelled', 'Cancelled')] class project_task_type(osv.osv): _name = 'project.task.type' @@ -44,33 +41,18 @@ class project_task_type(osv.osv): 'case_default': fields.boolean('Default for New Projects', help="If you check this field, this stage will be proposed by default on each new project. It will not assign this stage to existing projects."), 'project_ids': fields.many2many('project.project', 'project_task_type_rel', 'type_id', 'project_id', 'Projects'), - 'state': fields.selection(_TASK_STATE, 'Related Status', required=True, - help="The status of your document is automatically changed regarding the selected stage. " \ - "For example, if a stage is related to the status 'Close', when your document reaches this stage, it is automatically closed."), 'fold': fields.boolean('Folded by Default', help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."), } - def _get_default_project_id(self, cr, uid, ctx={}): - proj = ctx.get('default_project_id', False) - if type(proj) is int: - return [proj] - return proj + _defaults = { 'sequence': 1, - 'state': 'open', 'fold': False, 'case_default': False, - 'project_ids': _get_default_project_id + 'project_ids': lambda self, cr, uid, ctx=None: self.pool['project.task']._get_default_project_id(cr, uid, context=ctx), } _order = 'sequence' -def short_name(name): - """Keep first word(s) of name to make it small enough - but distinctive""" - if not name: return name - # keep 7 chars + end of the last word - keep_words = name[:7].strip().split() - return ' '.join(name.split()[:len(keep_words)]) class project(osv.osv): _name = "project.project" @@ -99,9 +81,9 @@ class project(osv.osv): def onchange_partner_id(self, cr, uid, ids, part=False, context=None): partner_obj = self.pool.get('res.partner') - if not part: - return {'value':{}} val = {} + if not part: + return {'value': val} if 'pricelist_id' in self.fields_get(cr, uid, context=context): pricelist = partner_obj.read(cr, uid, part, ['property_product_pricelist'], context=context) pricelist_id = pricelist.get('property_product_pricelist', False) and pricelist.get('property_product_pricelist')[0] or False @@ -152,11 +134,13 @@ class project(osv.osv): cr.execute(""" SELECT project_id, COALESCE(SUM(planned_hours), 0.0), COALESCE(SUM(total_hours), 0.0), COALESCE(SUM(effective_hours), 0.0) - FROM project_task WHERE project_id IN %s AND state <> 'cancelled' + FROM project_task + LEFT JOIN project_task_type ON project_task.stage_id = project_task_type.id + WHERE project_task.project_id IN %s AND project_task_type.fold = False GROUP BY project_id """, (tuple(child_parent.keys()),)) # aggregate results into res - res = dict([(id, {'planned_hours':0.0,'total_hours':0.0,'effective_hours':0.0}) for id in ids]) + res = dict([(id, {'planned_hours':0.0, 'total_hours':0.0, 'effective_hours':0.0}) for id in ids]) for id, planned, total, effective in cr.fetchall(): # add the values specific to id to all parent projects of id in the result while id: @@ -253,22 +237,22 @@ class project(osv.osv): 'planned_hours': fields.function(_progress_rate, multi="progress", string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects.", store = { 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10), - 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'state'], 20), + 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20), }), 'effective_hours': fields.function(_progress_rate, multi="progress", string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects.", store = { 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10), - 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'state'], 20), + 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20), }), 'total_hours': fields.function(_progress_rate, multi="progress", string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects.", store = { 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10), - 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'state'], 20), + 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20), }), 'progress_rate': fields.function(_progress_rate, multi="progress", string='Progress', type='float', group_operator="avg", help="Percent of tasks closed according to the total of tasks todo.", store = { 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10), - 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'state'], 20), + 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20), }), 'resource_calendar_id': fields.many2one('resource.calendar', 'Working Time', help="Timetable working hours to adjust the gantt diagram report", states={'close':[('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)]}), @@ -323,26 +307,19 @@ class project(osv.osv): ] def set_template(self, cr, uid, ids, context=None): - res = self.setActive(cr, uid, ids, value=False, context=context) - return res + return self.setActive(cr, uid, ids, value=False, context=context) def set_done(self, cr, uid, ids, context=None): - task_obj = self.pool.get('project.task') - task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', 'not in', ('cancelled', 'done'))]) - task_obj.case_close(cr, uid, task_ids, context=context) - return self.write(cr, uid, ids, {'state':'close'}, context=context) + return self.write(cr, uid, ids, {'state': 'close'}, context=context) def set_cancel(self, cr, uid, ids, context=None): - task_obj = self.pool.get('project.task') - task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', '!=', 'done')]) - task_obj.case_cancel(cr, uid, task_ids, context=context) - return self.write(cr, uid, ids, {'state':'cancelled'}, context=context) + return self.write(cr, uid, ids, {'state': 'cancelled'}, context=context) def set_pending(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state':'pending'}, context=context) + return self.write(cr, uid, ids, {'state': 'pending'}, context=context) def set_open(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state':'open'}, context=context) + return self.write(cr, uid, ids, {'state': 'open'}, context=context) def reset_project(self, cr, uid, ids, context=None): return self.setActive(cr, uid, ids, value=True, context=context) @@ -459,8 +436,6 @@ class project(osv.osv): if project.user_id and (project.user_id.id not in u_ids): u_ids.append(project.user_id.id) for task in project.tasks: - if task.state in ('done','cancelled'): - continue if task.user_id and (task.user_id.id not in u_ids): u_ids.append(task.user_id.id) calendar_id = project.resource_calendar_id and project.resource_calendar_id.id or False @@ -525,7 +500,7 @@ def Project(): for project in projects: project_gantt = getattr(projects_gantt, 'Project_%d' % (project.id,)) for task in project.tasks: - if task.state in ('done', 'cancelled'): + if task.stage_id and task.stage_id.fold: continue p = getattr(project_gantt, 'Task_%d' % (task.id,)) @@ -540,16 +515,13 @@ def Project(): }, context=context) return True - # ------------------------------------------------ - # OpenChatter methods and notifications - # ------------------------------------------------ - def create(self, cr, uid, vals, context=None): if context is None: context = {} # Prevent double project creation when 'use_tasks' is checked + alias management create_context = dict(context, project_creation_in_progress=True, - alias_model_name=vals.get('alias_model', 'project.task'), alias_parent_model_name=self._name) + alias_model_name=vals.get('alias_model', 'project.task'), + alias_parent_model_name=self._name) if vals.get('type', False) not in ('template', 'contract'): vals['type'] = 'contract' @@ -566,22 +538,23 @@ def Project(): vals.update(alias_model_id=model_ids[0]) return super(project, self).write(cr, uid, ids, vals, context=context) -class task(base_stage, osv.osv): + +class task(osv.osv): _name = "project.task" _description = "Task" _date_name = "date_start" _inherit = ['mail.thread', 'ir.needaction_mixin'] + _mail_post_access = 'read' _track = { - 'state': { - 'project.mt_task_new': lambda self, cr, uid, obj, ctx=None: obj.state in ['new', 'draft'], - 'project.mt_task_started': lambda self, cr, uid, obj, ctx=None: obj.state == 'open', - 'project.mt_task_closed': lambda self, cr, uid, obj, ctx=None: obj.state == 'done', - }, 'stage_id': { - 'project.mt_task_stage': lambda self, cr, uid, obj, ctx=None: obj.state not in ['new', 'draft', 'done', 'open'], + 'project.mt_task_new': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence == 1, + 'project.mt_task_stage': lambda self, cr, uid, obj, ctx=None: obj.stage_id.sequence != 1, }, - 'kanban_state': { # kanban state: tracked, but only block subtype + 'user_id': { + 'project.mt_task_assigned': lambda self, cr, uid, obj, ctx=None: obj.user_id and obj.user_id.id, + }, + 'kanban_state': { 'project.mt_task_blocked': lambda self, cr, uid, obj, ctx=None: obj.kanban_state == 'blocked', }, } @@ -593,7 +566,7 @@ class task(base_stage, osv.osv): project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) if project and project.partner_id: return project.partner_id.id - return super(task, self)._get_default_partner(cr, uid, context=context) + return False def _get_default_project_id(self, cr, uid, context=None): """ Gives default section by checking if present in the context """ @@ -602,7 +575,7 @@ class task(base_stage, osv.osv): def _get_default_stage_id(self, cr, uid, context=None): """ Gives default stage_id """ project_id = self._get_default_project_id(cr, uid, context=context) - return self.stage_find(cr, uid, [], project_id, [('state', '=', 'draft')], context=context) + return self.stage_find(cr, uid, [], project_id, [('sequence', '=', '1')], context=context) def _resolve_project_id_from_context(self, cr, uid, context=None): """ Returns ID of project based on the value of 'default_project_id' @@ -679,17 +652,18 @@ class task(base_stage, osv.osv): res[task.id]['progress'] = 0.0 if (task.remaining_hours + hours.get(task.id, 0.0)): res[task.id]['progress'] = round(min(100.0 * hours.get(task.id, 0.0) / res[task.id]['total_hours'], 99.99),2) - if task.state in ('done','cancelled'): + # TDE CHECK: if task.state in ('done','cancelled'): + if task.stage_id and task.stage_id.fold: res[task.id]['progress'] = 100.0 return res def onchange_remaining(self, cr, uid, ids, remaining=0.0, planned=0.0): if remaining and not planned: - return {'value':{'planned_hours': remaining}} + return {'value': {'planned_hours': remaining}} return {} def onchange_planned(self, cr, uid, ids, planned=0.0, effective=0.0): - return {'value':{'remaining_hours': planned - effective}} + return {'value': {'remaining_hours': planned - effective}} def onchange_project(self, cr, uid, id, project_id, context=None): if project_id: @@ -698,6 +672,12 @@ class task(base_stage, osv.osv): return {'value': {'partner_id': project.partner_id.id}} return {} + def onchange_user_id(self, cr, uid, ids, user_id, context=None): + vals = {} + if user_id: + vals['date_start'] = fields.datetime.now() + return {'value': vals} + def duplicate_task(self, cr, uid, map_ids, context=None): for new in map_ids.values(): task = self.browse(cr, uid, new, context) @@ -755,13 +735,6 @@ class task(base_stage, osv.osv): 'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of tasks."), 'stage_id': fields.many2one('project.task.type', 'Stage', track_visibility='onchange', domain="[('project_ids', '=', project_id)]"), - 'state': fields.related('stage_id', 'state', type="selection", store=True, - selection=_TASK_STATE, string="Status", readonly=True, - help='The status is set to \'Draft\', when a case is created.\ - If the case is in progress the status is set to \'Open\'.\ - When the case is over, the status is set to \'Done\'.\ - If the case needs to be reviewed then the status is \ - set to \'Pending\'.'), 'categ_ids': fields.many2many('project.category', string='Tags'), 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready for next stage')], 'Kanban State', track_visibility='onchange', @@ -774,6 +747,7 @@ class task(base_stage, osv.osv): 'date_start': fields.datetime('Starting Date',select=True), 'date_end': fields.datetime('Ending Date',select=True), 'date_deadline': fields.date('Deadline',select=True), + 'date_last_stage_update': fields.datetime('Last Stage Update', select=True), 'project_id': fields.many2one('project.project', 'Project', ondelete='set null', select="1", track_visibility='onchange'), 'parent_ids': fields.many2many('project.task', 'project_task_parent_rel', 'task_id', 'parent_id', 'Parent Tasks'), 'child_ids': fields.many2many('project.task', 'project_task_parent_rel', 'parent_id', 'task_id', 'Delegated Tasks'), @@ -790,7 +764,7 @@ class task(base_stage, osv.osv): 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours'], 10), 'project.task.work': (_get_task, ['hours'], 10), }), - 'progress': fields.function(_hours_get, string='Progress (%)', multi='hours', group_operator="avg", help="If the task has a progress of 99.99% you should close the task if it's finished or reevaluate the time", + 'progress': fields.function(_hours_get, string='Working Time Progress (%)', multi='hours', group_operator="avg", help="If the task has a progress of 99.99% you should close the task if it's finished or reevaluate the time", store = { 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours','state'], 10), 'project.task.work': (_get_task, ['hours'], 10), @@ -813,6 +787,7 @@ class task(base_stage, osv.osv): _defaults = { 'stage_id': _get_default_stage_id, 'project_id': _get_default_project_id, + 'date_last_stage_update': lambda *a: fields.datetime.now(), 'kanban_state': 'normal', 'priority': '2', 'progress': 0, @@ -940,7 +915,7 @@ class task(base_stage, osv.osv): section_ids.append(task.project_id.id) search_domain = [] if section_ids: - search_domain = [('|')] * (len(section_ids)-1) + search_domain = [('|')] * (len(section_ids) - 1) for section_id in section_ids: search_domain.append(('project_ids', '=', section_id)) search_domain += list(domain) @@ -957,82 +932,10 @@ class task(base_stage, osv.osv): for task in tasks: if task.child_ids: for child in task.child_ids: - if child.state in ['draft', 'open', 'pending']: + if child.stage_id and not child.stage_id.fold: raise osv.except_osv(_("Warning!"), _("Child task still open.\nPlease cancel or complete child task first.")) return True - def action_close(self, cr, uid, ids, context=None): - """ This action closes the task - """ - task_id = len(ids) and ids[0] or False - self._check_child_task(cr, uid, ids, context=context) - if not task_id: return False - return self.do_close(cr, uid, [task_id], context=context) - - def do_close(self, cr, uid, ids, context=None): - """ Compatibility when changing to case_close. """ - return self.case_close(cr, uid, ids, context=context) - - def case_close(self, cr, uid, ids, context=None): - """ Closes Task """ - if not isinstance(ids, list): ids = [ids] - for task in self.browse(cr, uid, ids, context=context): - vals = {} - project = task.project_id - for parent_id in task.parent_ids: - if parent_id.state in ('pending','draft'): - reopen = True - for child in parent_id.child_ids: - if child.id != task.id and child.state not in ('done','cancelled'): - reopen = False - if reopen: - self.do_reopen(cr, uid, [parent_id.id], context=context) - # close task - vals['remaining_hours'] = 0.0 - if not task.date_end: - vals['date_end'] = fields.datetime.now() - self.case_set(cr, uid, [task.id], 'done', vals, context=context) - return True - - def do_reopen(self, cr, uid, ids, context=None): - for task in self.browse(cr, uid, ids, context=context): - project = task.project_id - self.case_set(cr, uid, [task.id], 'open', {}, context=context) - return True - - def do_cancel(self, cr, uid, ids, context=None): - """ Compatibility when changing to case_cancel. """ - return self.case_cancel(cr, uid, ids, context=context) - - def case_cancel(self, cr, uid, ids, context=None): - tasks = self.browse(cr, uid, ids, context=context) - self._check_child_task(cr, uid, ids, context=context) - for task in tasks: - self.case_set(cr, uid, [task.id], 'cancelled', {'remaining_hours': 0.0}, context=context) - return True - - def do_open(self, cr, uid, ids, context=None): - """ Compatibility when changing to case_open. """ - return self.case_open(cr, uid, ids, context=context) - - def case_open(self, cr, uid, ids, context=None): - if not isinstance(ids,list): ids = [ids] - return self.case_set(cr, uid, ids, 'open', {'date_start': fields.datetime.now()}, context=context) - - def do_draft(self, cr, uid, ids, context=None): - """ Compatibility when changing to case_draft. """ - return self.case_draft(cr, uid, ids, context=context) - - def case_draft(self, cr, uid, ids, context=None): - return self.case_set(cr, uid, ids, 'draft', {}, context=context) - - def do_pending(self, cr, uid, ids, context=None): - """ Compatibility when changing to case_pending. """ - return self.case_pending(cr, uid, ids, context=context) - - def case_pending(self, cr, uid, ids, context=None): - return self.case_set(cr, uid, ids, 'pending', {}, context=context) - def _delegate_task_attachments(self, cr, uid, task_id, delegated_task_id, context=None): attachment = self.pool.get('ir.attachment') attachment_ids = attachment.search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', task_id)], context=context) @@ -1053,6 +956,7 @@ class task(base_stage, osv.osv): delegated_task_id = self.copy(cr, uid, task.id, { 'name': delegate_data['name'], 'project_id': delegate_data['project_id'] and delegate_data['project_id'][0] or False, + 'stage_id': delegate_data.get('stage_id') and delegate_data.get('stage_id')[0] or False, 'user_id': delegate_data['user_id'] and delegate_data['user_id'][0] or False, 'planned_hours': delegate_data['planned_hours'] or 0.0, 'parent_ids': [(6, 0, [task.id])], @@ -1067,16 +971,12 @@ class task(base_stage, osv.osv): 'planned_hours': delegate_data['planned_hours_me'] + (task.effective_hours or 0.0), 'name': newname, }, context=context) - if delegate_data['state'] == 'pending': - self.do_pending(cr, uid, [task.id], context=context) - elif delegate_data['state'] == 'done': - self.do_close(cr, uid, [task.id], context=context) delegated_tasks[task.id] = delegated_task_id return delegated_tasks def set_remaining_time(self, cr, uid, ids, remaining_time=1.0, context=None): for task in self.browse(cr, uid, ids, context=context): - if (task.state=='draft') or (task.planned_hours==0.0): + if (task.stage_id and task.stage_id.sequence == 1) or (task.planned_hours == 0.0): self.write(cr, uid, [task.id], {'planned_hours': remaining_time}, context=context) self.write(cr, uid, ids, {'remaining_hours': remaining_time}, context=context) return True @@ -1111,17 +1011,25 @@ class task(base_stage, osv.osv): 'planned_hours': task.planned_hours, 'kanban_state': task.kanban_state, 'type_id': task.stage_id.id, - 'state': task.state, 'user_id': task.user_id.id }, context=context) return True + # ------------------------------------------------ + # CRUD overrides + # ------------------------------------------------ + def create(self, cr, uid, vals, context=None): if context is None: context = {} + + # for default stage if vals.get('project_id') and not context.get('default_project_id'): context['default_project_id'] = vals.get('project_id') + # user_id change: update date_start + if vals.get('user_id'): + vals['date_start'] = fields.datetime.now() # context: no_log, because subtype already handle this create_context = dict(context, mail_create_nolog=True) @@ -1129,25 +1037,30 @@ class task(base_stage, osv.osv): self._store_history(cr, uid, [task_id], context=context) return task_id - # Overridden to reset the kanban_state to normal whenever - # the stage (stage_id) of the task changes. def write(self, cr, uid, ids, vals, context=None): if isinstance(ids, (int, long)): ids = [ids] + + # stage change: update date_last_stage_update + if 'stage_id' in vals: + vals['date_last_stage_update'] = fields.datetime.now() + # user_id change: update date_start + if vals.get('user_id'): + vals['date_start'] = fields.datetime.now() + + # Overridden to reset the kanban_state to normal whenever + # the stage (stage_id) of the task changes. if vals and not 'kanban_state' in vals and 'stage_id' in vals: new_stage = vals.get('stage_id') vals_reset_kstate = dict(vals, kanban_state='normal') for t in self.browse(cr, uid, ids, context=context): - #TO FIX:Kanban view doesn't raise warning - #stages = [stage.id for stage in t.project_id.type_ids] - #if new_stage not in stages: - #raise osv.except_osv(_('Warning!'), _('Stage is not defined in the project.')) write_vals = vals_reset_kstate if t.stage_id != new_stage else vals super(task, self).write(cr, uid, [t.id], write_vals, context=context) result = True else: result = super(task, self).write(cr, uid, ids, vals, context=context) - if ('stage_id' in vals) or ('remaining_hours' in vals) or ('user_id' in vals) or ('state' in vals) or ('kanban_state' in vals): + + if any(item in vals for item in ['stage_id', 'remaining_hours', 'user_id', 'kanban_state']): self._store_history(cr, uid, ids, context=context) return result @@ -1163,7 +1076,7 @@ class task(base_stage, osv.osv): result = "" ident = ' '*ident for task in tasks: - if task.state in ('done','cancelled'): + if task.stage_id and task.stage_id.fold: continue result += ''' %sdef Task_%s(): @@ -1194,17 +1107,6 @@ class task(base_stage, osv.osv): return [task.project_id.message_get_reply_to()[0] if task.project_id else False for task in self.browse(cr, uid, ids, context=context)] - def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None): - """ mail.message document permission rule: can post a new message if can read - because of portal document. """ - if not model_obj: - model_obj = self - if operation == 'create': - model_obj.check_access_rights(cr, uid, 'read') - model_obj.check_access_rule(cr, uid, mids, 'read', context=context) - else: - return super(task, self).check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context) - def message_new(self, cr, uid, msg, custom_values=None, context=None): """ Override to updates the document according to the email. """ if custom_values is None: custom_values = {} @@ -1233,24 +1135,10 @@ class task(base_stage, osv.osv): update_vals[field] = float(res.group(2).lower()) except (ValueError, TypeError): pass - elif match.lower() == 'state' \ - and res.group(2).lower() in ['cancel','close','draft','open','pending']: - act = 'do_%s' % res.group(2).lower() if act: getattr(self,act)(cr, uid, ids, context=context) return super(task,self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context) - def project_task_reevaluate(self, cr, uid, ids, context=None): - if self.pool.get('res.users').has_group(cr, uid, 'project.group_time_work_estimation_tasks'): - return { - 'view_type': 'form', - "view_mode": 'form', - 'res_model': 'project.task.reevaluate', - 'type': 'ir.actions.act_window', - 'target': 'new', - } - return self.do_reopen(cr, uid, ids, context=context) - class project_work(osv.osv): _name = "project.task.work" _description = "Project Task Work" @@ -1371,7 +1259,7 @@ class project_task_history(osv.osv): def _get_date(self, cr, uid, ids, name, arg, context=None): result = {} for history in self.browse(cr, uid, ids, context=context): - if history.state in ('done','cancelled'): + if history.type_id and history.type_id.fold: result[history.id] = history.date continue cr.execute('''select @@ -1405,14 +1293,13 @@ class project_task_history(osv.osv): _columns = { 'task_id': fields.many2one('project.task', 'Task', ondelete='cascade', required=True, select=True), 'type_id': fields.many2one('project.task.type', 'Stage'), - 'state': fields.selection([('draft', 'New'), ('cancelled', 'Cancelled'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done')], 'Status'), - 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready for next stage')], 'Kanban State', required=False), + 'kanban_state': fields.selection([('normal', 'Normal'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')], 'Kanban State', required=False), 'date': fields.date('Date', select=True), 'end_date': fields.function(_get_date, string='End Date', type="date", store={ 'project.task.history': (_get_related_date, None, 20) }), - 'remaining_hours': fields.float('Remaining Time', digits=(16,2)), - 'planned_hours': fields.float('Planned Time', digits=(16,2)), + 'remaining_hours': fields.float('Remaining Time', digits=(16, 2)), + 'planned_hours': fields.float('Planned Time', digits=(16, 2)), 'user_id': fields.many2one('res.users', 'Responsible'), } _defaults = { @@ -1442,7 +1329,7 @@ class project_task_history_cumulative(osv.osv): SELECT h.id AS history_id, h.date+generate_series(0, CAST((coalesce(h.end_date, DATE 'tomorrow')::date - h.date) AS integer)-1) AS date, - h.task_id, h.type_id, h.user_id, h.kanban_state, h.state, + h.task_id, h.type_id, h.user_id, h.kanban_state, greatest(h.remaining_hours, 1) AS remaining_hours, greatest(h.planned_hours, 1) AS planned_hours, t.project_id FROM diff --git a/addons/project/project_data.xml b/addons/project/project_data.xml index 7bf1a623a2c..0f48dfe9a2b 100644 --- a/addons/project/project_data.xml +++ b/addons/project/project_data.xml @@ -30,51 +30,43 @@ 1 Analysis - draft - + - 2 + 10 Specification - pending - 2 + 11 Design - open - 3 + 12 Development - open - 4 + 13 Testing - open - 5 + 14 Merge - open - 100 + 20 Done - done - 200 + 30 Cancelled - cancelled @@ -86,11 +78,11 @@ Task created - - Task Started + + Task Assigned project.task - Task started + Task Assigned Task Blocked @@ -98,12 +90,6 @@ Task blocked - - Task Done - project.task - - Task closed - Stage Changed project.task @@ -118,11 +104,11 @@ project_id - - Task Started + + Task Assigned project.project - + project_id @@ -131,12 +117,6 @@ project_id - - Task Done - project.project - - project_id - Task Stage Changed project.project diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index b7e1524c2c8..12e373642fd 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -225,7 +225,6 @@ ref('project.project_category_04')])]"/> - @@ -237,7 +236,6 @@ 6 - @@ -248,7 +246,6 @@ Design Use Cases - @@ -282,7 +279,6 @@ Set target for all deparments - @@ -293,7 +289,6 @@ Integration of core components - @@ -315,7 +310,6 @@ - 42.0 @@ -325,7 +319,6 @@ Create new components - 14.0 @@ -337,7 +330,6 @@ - 12.0 @@ -371,7 +363,6 @@ - 20 @@ -382,7 +373,6 @@ Data importation + Doc - 20 diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 33842a9a19c..37836b0e07a 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -18,29 +18,26 @@ + + - + - - - - - - - - + + help="Show only tasks having a deadline"/> + + - + @@ -138,6 +135,7 @@
X
+
@@ -371,18 +369,6 @@
- -
@@ -396,8 +382,7 @@ - - + + groups="project.group_time_work_estimation_tasks"/> - + @@ -427,7 +412,7 @@
@@ -106,7 +100,6 @@ - @@ -123,7 +116,7 @@ Project Issue Tracker Tree project.issue - + @@ -135,7 +128,6 @@ - @@ -149,17 +141,16 @@ - + + + - - - - + - + @@ -269,7 +260,7 @@ Project Issue- Feature Tracker Tree project.issue - + @@ -278,7 +269,6 @@ - diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py index 5cca0ff8689..5f59b51f290 100644 --- a/addons/project_issue/report/project_issue_report.py +++ b/addons/project_issue/report/project_issue_report.py @@ -20,17 +20,10 @@ # ############################################################################## -from openerp.osv import fields,osv +from openerp.osv import fields, osv from openerp import tools from openerp.addons.crm import crm -AVAILABLE_STATES = [ - ('draft','Draft'), - ('open','Open'), - ('cancel', 'Cancelled'), - ('done', 'Closed'), - ('pending','Pending') -] class project_issue_report(osv.osv): _name = "project.issue.report" _auto = False @@ -38,18 +31,13 @@ class project_issue_report(osv.osv): _columns = { 'name': fields.char('Year', size=64, required=False, readonly=True), 'section_id':fields.many2one('crm.case.section', 'Sale Team', readonly=True), - 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True), - 'month':fields.selection([('01', 'January'), ('02', 'February'), \ - ('03', 'March'), ('04', 'April'),\ - ('05', 'May'), ('06', 'June'), \ - ('07', 'July'), ('08', 'August'),\ - ('09', 'September'), ('10', 'October'),\ - ('11', 'November'), ('12', 'December')], 'Month', readonly=True), + 'month':fields.selection(fields.date.MONTHS, 'Month', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'day': fields.char('Day', size=128, readonly=True), 'opening_date': fields.date('Date of Opening', readonly=True), 'creation_date': fields.date('Creation Date', readonly=True), 'date_closed': fields.date('Date of Closing', readonly=True), + 'date_last_stage_update': fields.date('Last Stage Update', readonly=True), 'stage_id': fields.many2one('project.task.type', 'Stage'), 'nbr': fields.integer('# of Issues', readonly=True), 'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True, group_operator="avg"), @@ -80,7 +68,7 @@ class project_issue_report(osv.osv): to_char(c.create_date, 'YYYY-MM-DD') as day, to_char(c.date_open, 'YYYY-MM-DD') as opening_date, to_char(c.create_date, 'YYYY-MM-DD') as creation_date, - c.state, + date_trunc('day',c.date_last_stage_update) as date_last_stage_update, c.user_id, c.working_hours_open, c.working_hours_close, diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml index a885dcd8a7f..f9ca7168841 100644 --- a/addons/project_issue/report/project_issue_report_view.xml +++ b/addons/project_issue/report/project_issue_report_view.xml @@ -20,7 +20,7 @@ - + @@ -36,9 +36,9 @@ project.issue.report - - + + @@ -49,14 +49,15 @@ - - - - + + + + @@ -70,6 +71,7 @@ + diff --git a/addons/project_issue/test/cancel_issue.yml b/addons/project_issue/test/cancel_issue.yml deleted file mode 100644 index 76ffa212638..00000000000 --- a/addons/project_issue/test/cancel_issue.yml +++ /dev/null @@ -1,60 +0,0 @@ -- - In order to test process of issue tracking in OpenERP, I cancel the unqualified Issue. -- - !python {model: project.issue}: | - self.case_cancel(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check the issue is in cancel state. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}: - - state == 'cancelled' -- - I re-open the Issue. -- - !python {model: project.issue}: | - self.case_open(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check the state of issue after open it. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in open state}: - - state == 'open' -- - I put the issue in pending state. -- - !python {model: project.issue}: | - self.case_pending(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check the state of issue after put it in pending state. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue should be in pending state}: - - state == 'pending' -- - I cancel the issue is in pending state. -- - !python {model: project.issue}: | - self.case_cancel(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check the issue is in cancel state. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}: - - state == 'cancelled' -- - I close Issue. -- - !python {model: project.issue}: | - self.case_close(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check state of Issue after close. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in done state}: - - state == 'done' -- - I cancel the issue is in done state. -- - !python {model: project.issue}: | - self.case_cancel(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check the issue is in cancel state. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}: - - state == 'cancelled' diff --git a/addons/project_issue/test/issue_process.yml b/addons/project_issue/test/issue_process.yml index afb68a9b6c2..280df50ebea 100644 --- a/addons/project_issue/test/issue_process.yml +++ b/addons/project_issue/test/issue_process.yml @@ -1,23 +1,3 @@ -- - In order to test process of issue tracking in OpenERP, I Open the Issue. -- - !python {model: project.issue}: | - self.case_open(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check state of Issue after opened it. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue should be in open state}: - - state == 'open' -- - Now I put Issue in pending due to need more information. -- - !python {model: project.issue}: | - self.case_pending(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check state after put in pending. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue should be in pending state}: - - state == 'pending' - I send mail to get more details. TODO revert mail.mail to mail.compose.message (conversion to customer should be automatic). - @@ -29,29 +9,9 @@ new_id = self.create(cr, uid, {'email_from': 'support@mycompany.com','email_to': 'Robert_Adersen@yahoo.com', 'subject': 'Regarding error in account module we nees more details'}) self.send_mail(cr, uid, [new_id], context=ctx) except Exception, e: - pass -- - After getting sufficient details, I re-open Issue from pending state. -- - !python {model: project.issue}: | - self.case_open(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check state of Issue after re-opened. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue should be in open state}: - - state == 'open' + pass - I create Task for Issue. - !python {model: project.issue}: | self.convert_issue_task(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I close Issue after resolving it -- - !python {model: project.issue}: | - self.case_close(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I Check state of Issue after closed. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue should be in done state}: - - state == 'done' diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml index e61af0c6c32..e2f47489b4a 100644 --- a/addons/project_long_term/project_long_term_view.xml +++ b/addons/project_long_term/project_long_term_view.xml @@ -200,7 +200,7 @@ - + diff --git a/addons/project_long_term/security/ir.model.access.csv b/addons/project_long_term/security/ir.model.access.csv index 2a00088b8f4..82bfab460cb 100644 --- a/addons/project_long_term/security/ir.model.access.csv +++ b/addons/project_long_term/security/ir.model.access.csv @@ -4,9 +4,6 @@ access_project_user_allocation,project.user.allocation,model_project_user_alloca access_project_phase_manager,project.phase manager,model_project_phase,project.group_project_manager,1,1,1,1 access_project_user_allocation_manager,project.user.allocation manager,model_project_user_allocation,project.group_project_manager,1,1,1,1 access_resource_resource_user,user.user user,resource.model_resource_resource,project.group_project_user,1,0,0,0 -access_resource_calendar_leaves_user,user.calendar.leaves user,resource.model_resource_calendar_leaves,project.group_project_user,1,1,1,1 access_resource_resource_manager,user.user manager,resource.model_resource_resource,project.group_project_manager,1,1,1,1 access_project_user_allocation_manager,project.user.allocation.manager,model_project_user_allocation,project.group_project_manager,1,1,1,1 access_project_resource_calendar_attendance,resource.calendar.attendance,resource.model_resource_calendar_attendance,project.group_project_manager,1,0,0,0 - - diff --git a/addons/project_long_term/test/task_process.yml b/addons/project_long_term/test/task_process.yml index a7065de315f..060abcf43f3 100644 --- a/addons/project_long_term/test/task_process.yml +++ b/addons/project_long_term/test/task_process.yml @@ -14,6 +14,6 @@ !python {model: project.project}: | prj = self.browse(cr, uid, [ref("project.project_project_1")])[0] for task in prj.tasks: - if task.state in ('done','cancelled'): + if task.stage_id and task.stage_id.fold: continue assert task.user_id and task.date_start and task.date_end, "Project tasks not scheduled" diff --git a/addons/project_mrp/project_mrp.py b/addons/project_mrp/project_mrp.py index bb25b4aae24..d5ed55a8d31 100644 --- a/addons/project_mrp/project_mrp.py +++ b/addons/project_mrp/project_mrp.py @@ -22,6 +22,23 @@ from openerp.osv import fields, osv from openerp import netsvc + +class ProjectTaskStageMrp(osv.Model): + """ Override project.task.type model to add a 'closed' boolean field allowing + to know that tasks in this stage are considered as closed. Indeed since + OpenERP 8.0 status is not present on tasks anymore, only stage_id. """ + _name = 'project.task.type' + _inherit = 'project.task.type' + + _columns = { + 'closed': fields.boolean('Close', help="Tasks in this stage are considered as closed."), + } + + _defaults = { + 'closed': False, + } + + class project_task(osv.osv): _name = "project.task" _inherit = "project.task" @@ -30,21 +47,21 @@ class project_task(osv.osv): 'sale_line_id': fields.related('procurement_id', 'sale_line_id', type='many2one', relation='sale.order.line', store=True, string='Sales Order Line'), } - def _validate_subflows(self, cr, uid, ids): + def _validate_subflows(self, cr, uid, ids, context=None): wf_service = netsvc.LocalService("workflow") for task in self.browse(cr, uid, ids): if task.procurement_id: wf_service.trg_write(uid, 'procurement.order', task.procurement_id.id, cr) - def do_close(self, cr, uid, ids, *args, **kwargs): - res = super(project_task, self).do_close(cr, uid, ids, *args, **kwargs) - self._validate_subflows(cr, uid, ids) + def write(self, cr, uid, ids, values, context=None): + """ When closing tasks, validate subflows. """ + res = super(project_task, self).write(cr, uid, ids, values, context=context) + if values.get('stage_id'): + stage = self.pool.get('project.task.type').browse(cr, uid, values.get('stage_id'), context=context) + if stage.closed: + self._validate_subflows(cr, uid, ids, context=context) return res - def do_cancel(self, cr, uid, ids, *args, **kwargs): - res = super(project_task, self).do_cancel(cr, uid, ids, *args, **kwargs) - self._validate_subflows(cr, uid, ids) - return res class product_product(osv.osv): _inherit = "product.product" @@ -52,8 +69,9 @@ class product_product(osv.osv): 'project_id': fields.many2one('project.project', 'Project', ondelete='set null',) } + class sale_order(osv.osv): - _inherit ='sale.order' + _inherit = 'sale.order' def _prepare_order_line_procurement(self, cr, uid, order, line, move_id, date_planned, context=None): proc_data = super(sale_order, self)._prepare_order_line_procurement(cr, @@ -66,11 +84,12 @@ class sale_order(osv.osv): return {} res_sale = {} res = super(sale_order, self)._picked_rate(cr, uid, ids, name, arg, context=context) - cr.execute('''select sol.order_id as sale_id, t.state as task_state , + cr.execute('''select sol.order_id as sale_id, stage.closed as task_closed , t.id as task_id, sum(sol.product_uom_qty) as total from project_task as t left join sale_order_line as sol on sol.id = t.sale_line_id - where sol.order_id in %s group by sol.order_id,t.state,t.id ''',(tuple(ids),)) + left join project_task_type as stage on stage.id = t.stage_id + where sol.order_id in %s group by sol.order_id,stage.closed,t.id ''',(tuple(ids),)) sale_task_data = cr.dictfetchall() if not sale_task_data: @@ -90,7 +109,7 @@ class sale_order(osv.osv): for item in sale_task_data: res_sale[item['sale_id']]['total_no_task'] += item['total'] - if item['task_state'] == 'done': + if item['task_closed']: res_sale[item['sale_id']]['number_of_done'] += item['total'] for sale in self.browse(cr, uid, ids, context=context): diff --git a/addons/project_mrp/project_mrp_demo.xml b/addons/project_mrp/project_mrp_demo.xml index 30d4cfba7ef..a840c0166e7 100644 --- a/addons/project_mrp/project_mrp_demo.xml +++ b/addons/project_mrp/project_mrp_demo.xml @@ -1,7 +1,6 @@ - @@ -14,5 +13,8 @@ make_to_order + + + diff --git a/addons/project_mrp/project_mrp_view.xml b/addons/project_mrp/project_mrp_view.xml index 499a0259214..f724a3c76b6 100644 --- a/addons/project_mrp/project_mrp_view.xml +++ b/addons/project_mrp/project_mrp_view.xml @@ -21,14 +21,24 @@ + + project.task.type.mrp.inherit + project.task.type + + + + + + + project.mrp.form.view.inherit project.task - + - + diff --git a/addons/project_mrp/project_procurement.py b/addons/project_mrp/project_procurement.py index f4b4a28db46..8a6dc811d9a 100644 --- a/addons/project_mrp/project_procurement.py +++ b/addons/project_mrp/project_procurement.py @@ -33,13 +33,13 @@ class procurement_order(osv.osv): def action_check_finished(self, cr, uid, ids): res = super(procurement_order, self).action_check_finished(cr, uid, ids) return res and self.check_task_done(cr, uid, ids) - + def check_task_done(self, cr, uid, ids, context=None): """ Checks if task is done or not. @return: True or False. """ for p in self.browse(cr, uid, ids, context=context): - if (p.product_id.type=='service') and (p.procure_method=='make_to_order') and p.task_id and (p.task_id.state not in ('done', 'cancelled')): + if (p.product_id.type == 'service') and (p.procure_method == 'make_to_order') and p.task_id and (p.task_id.stage_id and not p.task_id.stage_id.closed): return False return True diff --git a/addons/project_mrp/test/project_task_procurement.yml b/addons/project_mrp/test/project_task_procurement.yml index 967461ca30a..b16cce7590d 100644 --- a/addons/project_mrp/test/project_task_procurement.yml +++ b/addons/project_mrp/test/project_task_procurement.yml @@ -36,7 +36,7 @@ !python {model: project.task}: | task_ids = self.search(cr, uid, [('sale_line_id', '=', ref('line_services'))]) assert task_ids, "Task is not generated for Service Order Line." - self.do_close(cr, uid, task_ids, context=context) + self.write(cr, uid, task_ids, {'stage_id': ref('project.project_tt_deployment')}, context=context) - I check procurement of Service Order Line after closed task. - @@ -44,4 +44,4 @@ procurement_ids = self.search(cr, uid, [('sale_line_id', '=', ref('line_services'))]) assert procurement_ids, "Procurement is not generated for Service Order Line." procurement = self.browse(cr, uid, procurement_ids[0], context=context) - assert procurement.state == 'done' , "Procurement should be closed." + assert procurement.state == 'done' , "Procurement should be closed." \ No newline at end of file diff --git a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml index 3efd133ffb6..7d7566bdd0c 100644 --- a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml +++ b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml @@ -66,16 +66,7 @@ planned_hours: 20.0 project_id: project_project_timesheetmanagement0 remaining_hours: 20.0 - state: draft user_id: res_users_hrmanager0 -- - Open the task -- - !python {model: project.task}: | - self.do_open(cr, uid, [ref("project_task_getalltimesheetrecords0")], {"lang": - "en_US", "active_ids": [ref("project_project_timesheetmanagement0")], "tz": - False, "active_model": "project.project", "department_id": False, "project_id": - False, "active_id": ref("project_project_timesheetmanagement0"), }) - Make a work task entry 'Get work calendar of all employees' of 10 hours done by HR manager - diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 91fb2525be6..dffe1ed54ff 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -174,8 +174,8 @@