From 7e43c5e13529c34224b510b4114e3943f89da902 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Wed, 18 Apr 2012 11:59:43 +0530 Subject: [PATCH 001/548] q bzr revid: tta@openerp.com-20120418062943-rtvpby15skwqmywx --- addons/base_contact/i18n/cs.po | 501 -------------------------- addons/base_contact/i18n/ja.po | 264 -------------- addons/fetchmail_crm_claim/i18n/ja.po | 34 ++ 3 files changed, 34 insertions(+), 765 deletions(-) delete mode 100644 addons/base_contact/i18n/cs.po delete mode 100644 addons/base_contact/i18n/ja.po create mode 100644 addons/fetchmail_crm_claim/i18n/ja.po diff --git a/addons/base_contact/i18n/cs.po b/addons/base_contact/i18n/cs.po deleted file mode 100644 index e48443f7681..00000000000 --- a/addons/base_contact/i18n/cs.po +++ /dev/null @@ -1,501 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * base_contact -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:36+0000\n" -"PO-Revision-Date: 2012-04-15 15:01+0000\n" -"Last-Translator: Jiří Hajda \n" -"Language-Team: Czech \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-04-16 04:40+0000\n" -"X-Generator: Launchpad (build 15099)\n" -"X-Poedit-Language: Czech\n" - -#. module: base_contact -#: field:res.partner.location,city:0 -msgid "City" -msgstr "Město" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "First/Lastname" -msgstr "Křestní jméno/Příjmení" - -#. module: base_contact -#: model:ir.actions.act_window,name:base_contact.action_partner_contact_form -#: model:ir.ui.menu,name:base_contact.menu_partner_contact_form -#: model:ir.ui.menu,name:base_contact.menu_purchases_partner_contact_form -#: model:process.node,name:base_contact.process_node_contacts0 -#: field:res.partner.location,job_ids:0 -msgid "Contacts" -msgstr "Kontakty" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Professional Info" -msgstr "Povolání" - -#. module: base_contact -#: field:res.partner.contact,first_name:0 -msgid "First Name" -msgstr "Křestní jméno" - -#. module: base_contact -#: field:res.partner.address,location_id:0 -msgid "Location" -msgstr "Umístění" - -#. module: base_contact -#: model:process.transition,name:base_contact.process_transition_partnertoaddress0 -msgid "Partner to address" -msgstr "Partner na adresu" - -#. module: base_contact -#: help:res.partner.contact,active:0 -msgid "" -"If the active field is set to False, it will allow you to " -"hide the partner contact without removing it." -msgstr "" -"Pokud je aktivní pole nastaveno na Nepravda, umožní vám to " -"skrýt kontakt partnera bez jeho odstranění." - -#. module: base_contact -#: field:res.partner.contact,website:0 -msgid "Website" -msgstr "Webová stránka" - -#. module: base_contact -#: field:res.partner.location,zip:0 -msgid "Zip" -msgstr "PSČ" - -#. module: base_contact -#: field:res.partner.location,state_id:0 -msgid "Fed. State" -msgstr "Fed. stát" - -#. module: base_contact -#: field:res.partner.location,company_id:0 -msgid "Company" -msgstr "Společnost" - -#. module: base_contact -#: field:res.partner.contact,title:0 -msgid "Title" -msgstr "Název" - -#. module: base_contact -#: field:res.partner.location,partner_id:0 -msgid "Main Partner" -msgstr "Hlavní partner" - -#. module: base_contact -#: model:process.process,name:base_contact.process_process_basecontactprocess0 -msgid "Base Contact" -msgstr "Základní kontakt" - -#. module: base_contact -#: field:res.partner.contact,email:0 -msgid "E-Mail" -msgstr "E-mail" - -#. module: base_contact -#: field:res.partner.contact,active:0 -msgid "Active" -msgstr "Aktivní" - -#. module: base_contact -#: field:res.partner.contact,country_id:0 -msgid "Nationality" -msgstr "Národnost" - -#. module: base_contact -#: view:res.partner:0 -#: view:res.partner.address:0 -msgid "Postal Address" -msgstr "Poštovní adresa" - -#. module: base_contact -#: field:res.partner.contact,function:0 -msgid "Main Function" -msgstr "Hlavní funkce" - -#. module: base_contact -#: model:process.transition,note:base_contact.process_transition_partnertoaddress0 -msgid "Define partners and their addresses." -msgstr "Určuje partnery a jejich adresy." - -#. module: base_contact -#: field:res.partner.contact,name:0 -msgid "Name" -msgstr "Jméno" - -#. module: base_contact -#: field:res.partner.contact,lang_id:0 -msgid "Language" -msgstr "Jazyk" - -#. module: base_contact -#: field:res.partner.contact,mobile:0 -msgid "Mobile" -msgstr "Mobil" - -#. module: base_contact -#: field:res.partner.location,country_id:0 -msgid "Country" -msgstr "Země" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,comment:0 -msgid "Notes" -msgstr "Poznámky" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_contacts0 -msgid "People you work with." -msgstr "Lidé, s kterými pracujete." - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Extra Information" -msgstr "Speciální informace" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,job_ids:0 -msgid "Functions and Addresses" -msgstr "Funkce a adresy" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_contact -#: field:res.partner.address,contact_id:0 -msgid "Contact" -msgstr "Kontakt" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_location -msgid "res.partner.location" -msgstr "res.partner.location" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_partners0 -msgid "Companies you work with." -msgstr "Společnosti, se kterými pracujete." - -#. module: base_contact -#: field:res.partner.contact,partner_id:0 -msgid "Main Employer" -msgstr "Hlavní zaměstnavatel" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Partner Contact" -msgstr "Kontakt partnera" - -#. module: base_contact -#: model:process.node,name:base_contact.process_node_addresses0 -msgid "Addresses" -msgstr "Adresy" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_addresses0 -msgid "Working and private addresses." -msgstr "Pracovní a soukromé adresy." - -#. module: base_contact -#: field:res.partner.contact,last_name:0 -msgid "Last Name" -msgstr "Příjmení" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,photo:0 -msgid "Photo" -msgstr "Fotka" - -#. module: base_contact -#: view:res.partner.location:0 -msgid "Locations" -msgstr "Umístění" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "General" -msgstr "Obecný" - -#. module: base_contact -#: field:res.partner.location,street:0 -msgid "Street" -msgstr "Ulice" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Partner" -msgstr "Partner" - -#. module: base_contact -#: model:process.node,name:base_contact.process_node_partners0 -msgid "Partners" -msgstr "Partneři" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_address -msgid "Partner Addresses" -msgstr "Adresy partnerů" - -#. module: base_contact -#: field:res.partner.location,street2:0 -msgid "Street2" -msgstr "Ulice 2" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Personal Information" -msgstr "Osobní informace" - -#. module: base_contact -#: field:res.partner.contact,birthdate:0 -msgid "Birth Date" -msgstr "Datum narození" - -#~ msgid "Categories" -#~ msgstr "Kategorie" - -#~ msgid "Current" -#~ msgstr "Stávající" - -#~ msgid "Fax" -#~ msgstr "Fax" - -#~ msgid "Address" -#~ msgstr "Adresa" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Invalidní XML pro zobrazení architektury!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Jméno objektu musí začínat znakem x_ a nesmí obsahovat žádný speciální znak!" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Špatný název modelu v definici akce" - -#~ msgid "Contact Functions" -#~ msgstr "Kontaktní funkce" - -#~ msgid "Phone" -#~ msgstr "Telefon" - -#~ msgid "Function" -#~ msgstr "Funkce" - -#~ msgid "# of Contacts" -#~ msgstr "# z kontaktů" - -#~ msgid "title" -#~ msgstr "nadpis" - -#~ msgid "Start date of job(Joining Date)" -#~ msgstr "Datum zahájení práce (datum připojení)" - -#~ msgid "Select the Option for Addresses Migration" -#~ msgstr "Vyberte volbu pro přesun adres" - -#~ msgid "Function of this contact with this partner" -#~ msgstr "Funkce tohoto kontaktu s tímto partnerem" - -#~ msgid "Status of Address" -#~ msgstr "Stav adresy" - -#~ msgid "" -#~ "You may enter Address first,Partner will be linked " -#~ "automatically if any." -#~ msgstr "" -#~ "Můžete zadat nejdříve adresu. Pokud je nějaký partner, " -#~ "bude napojen automaticky." - -#~ msgid "Job FAX no." -#~ msgstr "Číslo FAXu do práce" - -#~ msgid "Define functions and address." -#~ msgstr "Určit funkce a adresu." - -#~ msgid "Last date of job" -#~ msgstr "Poslední datum práce" - -#~ msgid "Migrate" -#~ msgstr "Přesunout" - -#~ msgid "Jobs at a same partner address." -#~ msgstr "Pracovní pozice u stejné adresy partnera." - -#~ msgid "State" -#~ msgstr "Stav" - -#~ msgid "" -#~ "\n" -#~ " This module allows you to manage your contacts entirely.\n" -#~ "\n" -#~ " It lets you define\n" -#~ " *contacts unrelated to a partner,\n" -#~ " *contacts working at several addresses (possibly for different " -#~ "partners),\n" -#~ " *contacts with possibly different functions for each of its job's " -#~ "addresses\n" -#~ "\n" -#~ " It also adds new menu items located in\n" -#~ " Partners \\ Contacts\n" -#~ " Partners \\ Functions\n" -#~ "\n" -#~ " Pay attention that this module converts the existing addresses into " -#~ "\"addresses + contacts\". It means that some fields of the addresses will be " -#~ "missing (like the contact name), since these are supposed to be defined in " -#~ "an other object.\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Tento modul umožňuje úplně spravovat vaše kontakty.\n" -#~ "\n" -#~ " Nechá vás určit\n" -#~ " *kontakty nevztažené k partnerovi,\n" -#~ " *kontakty pracující na několika adresách (případně i pro různé " -#~ "partnery),\n" -#~ " *kontakty s možnými různými funkcemi pro každou jeho pracovní " -#~ "adresu\n" -#~ "\n" -#~ " Také přidává nové položky nabídky umístěné v\n" -#~ " Partneři \\ Kontakty\n" -#~ " Partneři \\ Funkce\n" -#~ "\n" -#~ " Berte na vědomí, že tento modul převádí existující adresy na \"adresy + " -#~ "kontakty\". To znamená, že některé pole adres budou chybět (jako jméno " -#~ "kontaktu), protože ty jsou definovány v jiném objektu.\n" -#~ " " - -#~ msgid "Date Stop" -#~ msgstr "Datum zastavení" - -#~ msgid "Contact's Jobs" -#~ msgstr "Pozice kontaktu" - -#~ msgid "" -#~ "Order of importance of this job title in the list of job " -#~ "title of the linked partner" -#~ msgstr "" -#~ "Pořadí důležitosti této pracovní pozice v seznamu titulů " -#~ "pozic napojeného partnera" - -#~ msgid "Extension" -#~ msgstr "Rozšíření" - -#~ msgid "Internal/External extension phone number" -#~ msgstr "Vnitřní/vnější telefoní číslo klapky" - -#~ msgid "Job Phone no." -#~ msgstr "Telefoní číslo do práce." - -#~ msgid "Job E-Mail" -#~ msgstr "Pracovní E-Mail" - -#~ msgid "Partner Seq." -#~ msgstr "Poř. parnera" - -#~ msgid "Function to address" -#~ msgstr "Funkce na adresu" - -#~ msgid "Configuration Progress" -#~ msgstr "Průběh nastavení" - -#~ msgid "Communication" -#~ msgstr "Komunikace" - -#~ msgid "Image" -#~ msgstr "Obrázek" - -#~ msgid "Past" -#~ msgstr "Minulý" - -#~ msgid "Address's Migration to Contacts" -#~ msgstr "Stěhování adresy na kontakty" - -#~ msgid "Contact Seq." -#~ msgstr "Poř. kontaktu" - -#~ msgid "Search Contact" -#~ msgstr "Hledat kontakt" - -#~ msgid "" -#~ "Due to changes in Address and Partner's relation, some of the details from " -#~ "address are needed to be migrated into contact information." -#~ msgstr "" -#~ "Kvůli změnám v adrese a vztahu partnera, některé podrobnosti adresy jsou " -#~ "potřebné, aby byly přesunuty do informací účtu." - -#~ msgid "Address which is linked to the Partner" -#~ msgstr "Adresa, která je napojena na partnera" - -#~ msgid "Partner Function" -#~ msgstr "Funkce partnera" - -#~ msgid "Additional phone field" -#~ msgstr "Doplňující pole telefonu" - -#~ msgid "Otherwise these details will not be visible from address/contact." -#~ msgstr "Jinak tyto podrobnosti nebudou viditelné z adresy/kontaktu." - -#~ msgid "Configure" -#~ msgstr "Nastavit" - -#~ msgid "base.contact.installer" -#~ msgstr "base.contact.installer" - -#~ msgid "Do you want to migrate your Address data in Contact Data?" -#~ msgstr "Chcete stěhovat vaše data adresy v datech kontaktu?" - -#~ msgid "Seq." -#~ msgstr "Poř." - -#~ msgid "If you select this, all addresses will be migrated." -#~ msgstr "Pokud toto vyberete, všechny adresy budou přesunuty." - -#~ msgid "Contact Partner Function" -#~ msgstr "Kontakt funkce partnera" - -#~ msgid "Other" -#~ msgstr "Jiné" - -#~ msgid "Main Job" -#~ msgstr "Hlavní práce" - -#~ msgid "Defines contacts and functions." -#~ msgstr "Určuje kontakty a funkce." - -#~ msgid "Contact to function" -#~ msgstr "Kontakt na funkci" - -#~ msgid "Open Jobs" -#~ msgstr "Otevřené pozice" - -#~ msgid "You can migrate Partner's current addresses to the contact." -#~ msgstr "Můžete stěhovat partnerovu aktuální adresu do kontaktu." - -#~ msgid "Address Migration" -#~ msgstr "Stěhování adresy" - -#~ msgid "Date Start" -#~ msgstr "Počáteční datum" - -#~ msgid "" -#~ "Order of importance of this address in the list of " -#~ "addresses of the linked contact" -#~ msgstr "" -#~ "Pořadí podle důležitosti této adresy v seznamu adres napojeného " -#~ "kontaktu" diff --git a/addons/base_contact/i18n/ja.po b/addons/base_contact/i18n/ja.po deleted file mode 100644 index 89af47fb6ac..00000000000 --- a/addons/base_contact/i18n/ja.po +++ /dev/null @@ -1,264 +0,0 @@ -# Japanese translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-02-08 00:36+0000\n" -"PO-Revision-Date: 2012-04-14 00:01+0000\n" -"Last-Translator: Tomomi Mengelberg \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-04-15 04:42+0000\n" -"X-Generator: Launchpad (build 15070)\n" - -#. module: base_contact -#: field:res.partner.location,city:0 -msgid "City" -msgstr "市区町村" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "First/Lastname" -msgstr "名/姓" - -#. module: base_contact -#: model:ir.actions.act_window,name:base_contact.action_partner_contact_form -#: model:ir.ui.menu,name:base_contact.menu_partner_contact_form -#: model:ir.ui.menu,name:base_contact.menu_purchases_partner_contact_form -#: model:process.node,name:base_contact.process_node_contacts0 -#: field:res.partner.location,job_ids:0 -msgid "Contacts" -msgstr "連絡先" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Professional Info" -msgstr "" - -#. module: base_contact -#: field:res.partner.contact,first_name:0 -msgid "First Name" -msgstr "姓" - -#. module: base_contact -#: field:res.partner.address,location_id:0 -msgid "Location" -msgstr "場所" - -#. module: base_contact -#: model:process.transition,name:base_contact.process_transition_partnertoaddress0 -msgid "Partner to address" -msgstr "" - -#. module: base_contact -#: help:res.partner.contact,active:0 -msgid "" -"If the active field is set to False, it will allow you to " -"hide the partner contact without removing it." -msgstr "" - -#. module: base_contact -#: field:res.partner.contact,website:0 -msgid "Website" -msgstr "ウェブサイト" - -#. module: base_contact -#: field:res.partner.location,zip:0 -msgid "Zip" -msgstr "郵便番号" - -#. module: base_contact -#: field:res.partner.location,state_id:0 -msgid "Fed. State" -msgstr "" - -#. module: base_contact -#: field:res.partner.location,company_id:0 -msgid "Company" -msgstr "会社" - -#. module: base_contact -#: field:res.partner.contact,title:0 -msgid "Title" -msgstr "役職" - -#. module: base_contact -#: field:res.partner.location,partner_id:0 -msgid "Main Partner" -msgstr "主なパートナ" - -#. module: base_contact -#: model:process.process,name:base_contact.process_process_basecontactprocess0 -msgid "Base Contact" -msgstr "" - -#. module: base_contact -#: field:res.partner.contact,email:0 -msgid "E-Mail" -msgstr "メール" - -#. module: base_contact -#: field:res.partner.contact,active:0 -msgid "Active" -msgstr "有効" - -#. module: base_contact -#: field:res.partner.contact,country_id:0 -msgid "Nationality" -msgstr "国籍" - -#. module: base_contact -#: view:res.partner:0 -#: view:res.partner.address:0 -msgid "Postal Address" -msgstr "住所" - -#. module: base_contact -#: field:res.partner.contact,function:0 -msgid "Main Function" -msgstr "主な役割" - -#. module: base_contact -#: model:process.transition,note:base_contact.process_transition_partnertoaddress0 -msgid "Define partners and their addresses." -msgstr "" - -#. module: base_contact -#: field:res.partner.contact,name:0 -msgid "Name" -msgstr "名前" - -#. module: base_contact -#: field:res.partner.contact,lang_id:0 -msgid "Language" -msgstr "言語" - -#. module: base_contact -#: field:res.partner.contact,mobile:0 -msgid "Mobile" -msgstr "携帯電話" - -#. module: base_contact -#: field:res.partner.location,country_id:0 -msgid "Country" -msgstr "国名" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,comment:0 -msgid "Notes" -msgstr "備考" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_contacts0 -msgid "People you work with." -msgstr "同僚" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Extra Information" -msgstr "その他の情報" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,job_ids:0 -msgid "Functions and Addresses" -msgstr "" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_contact -#: field:res.partner.address,contact_id:0 -msgid "Contact" -msgstr "連絡先" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_location -msgid "res.partner.location" -msgstr "" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_partners0 -msgid "Companies you work with." -msgstr "同僚" - -#. module: base_contact -#: field:res.partner.contact,partner_id:0 -msgid "Main Employer" -msgstr "" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Partner Contact" -msgstr "パートナー連絡先" - -#. module: base_contact -#: model:process.node,name:base_contact.process_node_addresses0 -msgid "Addresses" -msgstr "住所" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_addresses0 -msgid "Working and private addresses." -msgstr "勤め先住所と自宅住所" - -#. module: base_contact -#: field:res.partner.contact,last_name:0 -msgid "Last Name" -msgstr "姓" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,photo:0 -msgid "Photo" -msgstr "写真" - -#. module: base_contact -#: view:res.partner.location:0 -msgid "Locations" -msgstr "場所" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "General" -msgstr "" - -#. module: base_contact -#: field:res.partner.location,street:0 -msgid "Street" -msgstr "番地" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Partner" -msgstr "パートナ" - -#. module: base_contact -#: model:process.node,name:base_contact.process_node_partners0 -msgid "Partners" -msgstr "取引先" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_address -msgid "Partner Addresses" -msgstr "パートナの住所" - -#. module: base_contact -#: field:res.partner.location,street2:0 -msgid "Street2" -msgstr "番地" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Personal Information" -msgstr "個人情報" - -#. module: base_contact -#: field:res.partner.contact,birthdate:0 -msgid "Birth Date" -msgstr "生年月日" diff --git a/addons/fetchmail_crm_claim/i18n/ja.po b/addons/fetchmail_crm_claim/i18n/ja.po new file mode 100644 index 00000000000..a1f6db4a764 --- /dev/null +++ b/addons/fetchmail_crm_claim/i18n/ja.po @@ -0,0 +1,34 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-04-08 05:43+0000\n" +"Last-Translator: Masaki Yamaya \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-04-09 04:56+0000\n" +"X-Generator: Launchpad (build 15060)\n" + +#. module: fetchmail_crm_claim +#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account +msgid "" +"You can connect your email account with claims in OpenERP. A new email sent " +"to this account (example: support@mycompany.com) will automatically create a " +"claim for the followup in OpenERP. The whole communication by email will be " +"attached to the claim automatically to keep track of the history." +msgstr "" +"あなたのEメールアカウントをOpenERPのクレームに関連づけることはできません。このアカウントに送られた新しいEメールはOpenERPのフォローアップの" +"ためのクレームを自動的に作成します。Eメールによる全てのコミュニケーションは、履歴を記録するために、自動的にクレームに関連づけられます。" + +#. module: fetchmail_crm_claim +#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account +msgid "Create Claims from Email Account" +msgstr "Eメールアカウントからクレームを作成" From 2c780efd12a47d440e7b9a4ecae7da0cf9565390 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 19 Apr 2012 18:59:16 +0530 Subject: [PATCH 002/548] Web Etherpad Integration bzr revid: tta@openerp.com-20120419132916-yzrdnz2y8gus2wlw --- addons/web_etherpad/__init__.py | 2 + addons/web_etherpad/__openerp__.py | 16 +++ addons/web_etherpad/res_company.py | 15 +++ addons/web_etherpad/res_company.xml | 16 +++ .../static/src/js/web_etherpad.js | 125 ++++++++++++++++++ .../web_etherpad/static/src/xml/etherpad.xml | 21 +++ 6 files changed, 195 insertions(+) create mode 100644 addons/web_etherpad/__init__.py create mode 100755 addons/web_etherpad/__openerp__.py create mode 100644 addons/web_etherpad/res_company.py create mode 100644 addons/web_etherpad/res_company.xml create mode 100755 addons/web_etherpad/static/src/js/web_etherpad.js create mode 100755 addons/web_etherpad/static/src/xml/etherpad.xml diff --git a/addons/web_etherpad/__init__.py b/addons/web_etherpad/__init__.py new file mode 100644 index 00000000000..df35bc32106 --- /dev/null +++ b/addons/web_etherpad/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +import res_company diff --git a/addons/web_etherpad/__openerp__.py b/addons/web_etherpad/__openerp__.py new file mode 100755 index 00000000000..829081e8c65 --- /dev/null +++ b/addons/web_etherpad/__openerp__.py @@ -0,0 +1,16 @@ +{ + "name": "web_etherpad", + "category" : "Hidden", + "description":'Openerp web Etherpad Widget', + "version": "2.0", + 'author': 'OpenERP SA', + 'website': 'http://openerp.com', + 'data': [ + 'res_company.xml' + ], + "depends": ['base','web'], + 'qweb' : ['static/src/xml/etherpad.xml'], + "css": [], + "js": ['static/src/js/web_etherpad.js'], + "auto_install": False, +} diff --git a/addons/web_etherpad/res_company.py b/addons/web_etherpad/res_company.py new file mode 100644 index 00000000000..0c1dc7c4929 --- /dev/null +++ b/addons/web_etherpad/res_company.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from osv import fields, osv + +class company_pad(osv.osv): + _inherit = 'res.company' + _columns = { + 'pad_url_template': fields.char('Pad URL Template', size=128, required=True, + help="Template used to generate pad URL."), + } + _defaults = { + 'pad_url_template': 'http://ietherpad.com/%(db)s-%(model)s-%(id)d-%(salt)s-%(name)s' + } + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/web_etherpad/res_company.xml b/addons/web_etherpad/res_company.xml new file mode 100644 index 00000000000..20b6f52d853 --- /dev/null +++ b/addons/web_etherpad/res_company.xml @@ -0,0 +1,16 @@ + + + + res.company.form.pad + res.company + form + + + + + + + + + + diff --git a/addons/web_etherpad/static/src/js/web_etherpad.js b/addons/web_etherpad/static/src/js/web_etherpad.js new file mode 100755 index 00000000000..d19fb2b9512 --- /dev/null +++ b/addons/web_etherpad/static/src/js/web_etherpad.js @@ -0,0 +1,125 @@ +openerp.web_etherpad = function (instance) { + + instance.web.form.FieldEtherpad = instance.web.form.AbstractField.extend(_.extend({}, instance.web.form.ReinitializeFieldMixin, { + template: 'FieldEtherpad', + initialize_content: function() { + this.$textarea = undefined; + if (!this.get("effective_readonly")) { + this.$textarea = this.$element.find('textarea'); + //this.$textarea.hide(); + this.$textarea.change(_.bind(function() { + this.set({'value': instance.web.parse_value(this.$textarea.val(), this)}); + }, this)); + this.resized = false; + } + }, + set_value: function(value_) { + var self = this ; + var company_id = (self.view.datarecord.hasOwnProperty('id')) ?self.view.datarecord.company_id[0]: self.view.datarecord.company_id ; + /* getting etherpad url and set pad to field. */ + self.rpc('/web/dataset/get',{ + 'model':'res.company', + 'ids':[company_id], + 'fields':['pad_url_template'], + 'context':{} + },function(companies){ + var pad_template = companies[0].pad_url_template.replace('-%(salt)s-%(name)s','').replace(/\s/g,''); + + var patt_url = (_.str.sprintf(pad_template.replace('-%(id)d',''), { + db : self.session.db, + model : self.view.model, + })).replace(/\s/g,'') ; + //alert("match or not >?"+value_.search(patt_url)); + if(value_ == false) + self.add_pad(self,pad_template,value_); + else if(value_.search(patt_url) != 0) + self.add_pad(self,pad_template,value_); + else + self.show_pad_value(self,value_); + }); + }, + show_pad_value: function(self,value_) + { + self._inhibit_on_change = true; + self.set({'value': value_ }); + self._inhibit_on_change = false; + self.invalid = false; + self.update_dom(); + self.render_value(); + }, + add_pad: function(self,pad_template,value_){ + var url = (_.str.sprintf(pad_template, { + db : self.session.db, + model : self.view.model, + id : Math.round(new Date().getTime()/100.0), + })).replace(/\s/g,''); + var show_value = instance.web.format_value(value_, this, ''); + self.show_pad_value(self,url + '\n'+ show_value); + this.dirty = true; + }, + render_value: function() { + var show_value = instance.web.format_value(this.get('value'), this, ''); + if (!this.get("effective_readonly")) { + this.$textarea.val(show_value); + this.$element.find('div').html(''); + if (!this.resized && this.view.options.resize_textareas) { + this.do_resize(this.view.options.resize_textareas); + this.resized = true; + } + } else { + this.$element.text(show_value); + if(this.get('value') != false) + { + var self = this; + $.get(show_value.split('\n')[0]+'/export/html', function(data) { + console.log(data); + self.$element.html(data); + }); + } + } + }, + validate: function() { + this.invalid = false; + if (!this.get("effective_readonly")) { + try { + var value_ = instance.web.parse_value(this.$textarea.val(), this, ''); + this.invalid = this.get("required") && value_ === ''; + } catch(e) { + this.invalid = true; + } + } + }, + focus: function($element) { + this._super($element || this.$textarea); + }, + do_resize: function(max_height) { + max_height = parseInt(max_height, 10); + var $input = this.$textarea, + $div = $('
').width($input.width()), + new_height; + $div.text($input.val()); + _.each('font-family,font-size,white-space'.split(','), function(style) { + $div.css(style, $input.css(style)); + }); + $div.appendTo($('body')); + new_height = $div.height(); + if (new_height < 90) { + new_height = 90; + } + if (!isNaN(max_height) && new_height > max_height) { + new_height = max_height; + } + $div.remove(); + $input.height(new_height); + }, + reset: function() { + this.resized = false; + } + })); + + instance.web.form.widgets = instance.web.form.widgets.extend({ + 'etherpad': 'instance.web.form.FieldEtherpad', + }); + + +} diff --git a/addons/web_etherpad/static/src/xml/etherpad.xml b/addons/web_etherpad/static/src/xml/etherpad.xml new file mode 100755 index 00000000000..64c2e2dc6a0 --- /dev/null +++ b/addons/web_etherpad/static/src/xml/etherpad.xml @@ -0,0 +1,21 @@ + + + + + + + +
+ +
+
+
+
+ +
From 4cb57e25230fb289d4e61dd2acb31953ebe7e2a2 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 19 Apr 2012 19:05:22 +0530 Subject: [PATCH 003/548] Not show textarea bzr revid: tta@openerp.com-20120419133522-lk286h44c2y06j6g --- addons/web_etherpad/static/src/js/web_etherpad.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web_etherpad/static/src/js/web_etherpad.js b/addons/web_etherpad/static/src/js/web_etherpad.js index d19fb2b9512..28afe60133d 100755 --- a/addons/web_etherpad/static/src/js/web_etherpad.js +++ b/addons/web_etherpad/static/src/js/web_etherpad.js @@ -6,7 +6,7 @@ openerp.web_etherpad = function (instance) { this.$textarea = undefined; if (!this.get("effective_readonly")) { this.$textarea = this.$element.find('textarea'); - //this.$textarea.hide(); + this.$textarea.hide(); this.$textarea.change(_.bind(function() { this.set({'value': instance.web.parse_value(this.$textarea.val(), this)}); }, this)); From 4a9e3512c58627b42fc82f4f2283e2ba0064637f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 19 Apr 2012 17:26:44 +0200 Subject: [PATCH 004/548] [ADD] mail: added mail.subscription.hide model. This will holds the hiden notification subtypes. bzr revid: tde@openerp.com-20120419152644-u3t5y18s0w7r5ton --- addons/mail/mail_subscription.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/addons/mail/mail_subscription.py b/addons/mail/mail_subscription.py index fc82af879a9..2b6a8dd5342 100644 --- a/addons/mail/mail_subscription.py +++ b/addons/mail/mail_subscription.py @@ -44,6 +44,25 @@ class mail_subscription(osv.osv): ondelete='cascade', required=True, select=1), } +class mail_subscription_hide(osv.osv): + """ + mail_subscription_hide holds the data to store the hiden notifications + on the Wall. Hide choices are related to a subscription, not a model + or a user. + :param: subscription_id: the related subscription + :param: subtype: the message subtype hiden + """ + _name = 'mail.subscription.hide' + _rec_name = 'id' + _order = 'id desc' + _description = 'Hidden subscription' + _columns = { + 'subscription_id': fields.many2one('mail.subscription', string='Subscription', + ondelete='cascade', required=True, select=1), + 'subtype': fields.char('Message subtype', size=64, + required=True, help='Message subtype is a string that depends on the related model.'), + } + class mail_notification(osv.osv): """ mail_notification is a relational table modeling messages pushed to users. From 491e8ad9f6192278ee386d6a721f8c810009d581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 19 Apr 2012 17:38:25 +0200 Subject: [PATCH 005/548] [ADD] mail.subscription.hide: added views and menu entry. bzr revid: tde@openerp.com-20120419153825-xodlfiotdgdmco30 --- addons/mail/mail_subscription_view.xml | 36 +++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/addons/mail/mail_subscription_view.xml b/addons/mail/mail_subscription_view.xml index 52b72127b78..827c23b25d2 100644 --- a/addons/mail/mail_subscription_view.xml +++ b/addons/mail/mail_subscription_view.xml @@ -20,6 +20,23 @@ + + + + mail.subscription.hide.tree + mail.subscription.hide + tree + 10 + + + + + + + + @@ -45,6 +62,13 @@ tree,form + + Hidden subscriptions + mail.subscription.hide + form + tree,form + + Pushed notif mail.notification @@ -52,11 +76,15 @@ tree,form - - + + + - - + + From ae0dbd21455e8a6ef2d358b8999fba49674fd497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 19 Apr 2012 17:53:39 +0200 Subject: [PATCH 006/548] [ADD] mail.group: added a 'models' field, to link groups to models. Purpose: group will be able to aggregate messages, and users following the group will receive notifications. Example: being able to follow all leads. bzr revid: tde@openerp.com-20120419155339-etlzmi5jo5d8iwgf --- addons/mail/mail_group.py | 2 ++ addons/mail/mail_group_view.xml | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index 0a8677d7862..83d0705c4e0 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -119,6 +119,8 @@ class mail_group(osv.osv): ondelete='set null', required=True, select=1, help="Responsible of the group that has all rights on the record."), 'public': fields.boolean('Public', help='This group is visible by non members. Invisible groups can add members through the invite button.'), + 'models': fields.many2many('ir.model', rel='mail_group_models_rel', id1='mail_group_id', id2='model_id', + string='Linked models', help='Linked models'), 'photo_big': fields.binary('Full-size photo', help='Field holding the full-sized PIL-supported and base64 encoded version of the group image. The photo field is used as an interface for this field.'), 'photo': fields.function(_get_photo, fnct_inv=_set_photo, string='Photo', type="binary", store = { diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml index ea0dede377d..d911b4a7deb 100644 --- a/addons/mail/mail_group_view.xml +++ b/addons/mail/mail_group_view.xml @@ -58,6 +58,11 @@ + + + + + From caba5db34bb9d6a4f91127c063293aae3be13780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 19 Apr 2012 18:20:50 +0200 Subject: [PATCH 007/548] [ADD] mail.message: added a message_subtype field, that will contain more precise data about the type of content. Example: create, cancel, ... Purpose: being able to filter (hide) a given content type. bzr revid: tde@openerp.com-20120419162050-6uq495s94i4etnbp --- addons/mail/mail_message.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 5d5d599be0e..9228861b139 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -206,6 +206,12 @@ class mail_message(osv.osv): ('comment', 'Comment'), ('notification', 'System notification'), ], 'Type', help="Message type: e-mail for e-mail message, notification for system message, comment for other messages such as user replies"), + 'message_subtype': fields.selection([ + ('email', 'e-mail'), + ('comment', 'Comment'), + ('create', 'Create'), + ('cancel', 'Cancel'), + ], 'Type', help="Message subtype, such as create or cancel. May be overriden by addons."), 'partner_id': fields.many2one('res.partner', 'Related partner'), 'user_id': fields.many2one('res.users', 'Related user', readonly=1), 'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments'), @@ -224,6 +230,7 @@ class mail_message(osv.osv): _defaults = { 'type': 'email', + 'message_subtype': 'email', 'state': 'received', } From 7a4ca1338c43b63c4d7976519ffe7a374d922fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 20 Apr 2012 10:42:41 +0200 Subject: [PATCH 008/548] [ADD] Chatter widget: added links to hide a thread or a subtype. Only links, not functional currently, because logic is not implemented. bzr revid: tde@openerp.com-20120420084241-02l4tfifzxjd88go --- addons/mail/static/src/css/mail.css | 31 ++++++++++++++++++++++++++++ addons/mail/static/src/js/mail.js | 32 +++++++++++++++++++++++++++++ addons/mail/static/src/xml/mail.xml | 6 ++++++ 3 files changed, 69 insertions(+) diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css index 7f0cc6f222c..5bae0d5e73b 100644 --- a/addons/mail/static/src/css/mail.css +++ b/addons/mail/static/src/css/mail.css @@ -167,6 +167,7 @@ } .openerp .oe_mail_msg_notification, .openerp .oe_mail_msg_comment, .openerp .oe_mail_msg_email { + position: relative; padding: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -229,6 +230,36 @@ color: #4E43E7; } +.openerp img.oe_mail_msg_menu_icon { + float: right; + cursor: pointer; +} + +.openerp ul.oe_mail_msg_menu { +/* + display: none; +*/ + display: block; + position: absolute; + top: 1em; + right: 1em; + overflow-x: hidden; + z-index: 900; + background: white; + padding: 4px; + border: 1px solid #AFAFB6; + width: 150px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -o-border-radius: 3px; + -ms-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + -o-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + -box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); +} + /* ------------------------------ */ /* Styling (should be openerp) */ /* ------------------------------ */ diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index d99674f98a7..160a1dc33fd 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -174,6 +174,34 @@ openerp.mail = function(session) { } return false; }); + // event: click on 'hide notification' in wheel_menu + this.$element.find('div.oe_mail_thread_display').delegate('a.oe_mail_msg_hide_thread', 'click', function (event) { + console.log('hiding notification'); + if (! confirm(_t("Do you really want to hide this thread ?"))) { return false; } + var msg_id = event.srcElement.dataset.id; + if (! msg_id) return false; + console.log(msg_id); + //var call_defer = self.ds.call('message_remove_pushed_notifications', [[self.params.res_id], [parseInt(msg_id)], true]); + $(event.srcElement).parents('li.oe_mail_thread_msg').eq(0).hide(); + if (self.params.thread_level > 0) { + $(event.srcElement).parents('ul.oe_mail_thread').eq(0).hide(); + } + return false; + }); + // event: click on 'hide this type' in wheel_menu + this.$element.find('div.oe_mail_thread_display').delegate('a.oe_mail_msg_hide_type', 'click', function (event) { + console.log('hiding type'); + if (! confirm(_t("Do you really want to hide this thread ?"))) { return false; } + var msg_id = event.srcElement.dataset.id; + if (! msg_id) return false; + console.log(msg_id); + //var call_defer = self.ds.call('message_remove_pushed_notifications', [[self.params.res_id], [parseInt(msg_id)], true]); + $(event.srcElement).parents('li.oe_mail_thread_msg').eq(0).hide(); + if (self.params.thread_level > 0) { + $(event.srcElement).parents('ul.oe_mail_thread').eq(0).hide(); + } + return false; + }); // event: click on an internal link this.$element.find('div.oe_mail_thread_display').delegate('a.intlink', 'click', function (event) { // lazy implementation: fetch data and try to redirect @@ -193,6 +221,10 @@ openerp.mail = function(session) { } else self.do_action({ type: 'ir.actions.act_window', res_model: res_model, res_id: parseInt(res_id), views: [[false, 'form']]}); }); + // event: click on the wheel menu in messages + this.$element.find('div.oe_mail_thread_display').delegate('img.oe_mail_msg_menu_icon', 'click', function (event) { + self.$element.find('ul.oe_mail_msg_menu').toggle(); + }); }, destroy: function () { diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml index f034b04311d..7fe1d39a661 100644 --- a/addons/mail/static/src/xml/mail.xml +++ b/addons/mail/static/src/xml/mail.xml @@ -58,6 +58,12 @@
  • + menu +
    From 318ef517ab037bafba43c2e5d85301f0f88432c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 20 Apr 2012 11:36:45 +0200 Subject: [PATCH 009/548] [REF] mail.message.common model: renamed subtype to content_subtype. Purpose: make a distinction between content and message model. Type and subtype will be used to distinguish messages, content_subtype to distinguish the content itself. bzr revid: tde@openerp.com-20120420093645-tt78zzrmq2nxomvb --- addons/base_calendar/base_calendar.py | 2 +- addons/crm/wizard/mail_compose_message.py | 2 +- addons/email_template/email_template.py | 4 +- addons/mail/mail_message.py | 78 ++++++++++++---------- addons/mail/mail_message_view.xml | 4 +- addons/mail/mail_thread.py | 22 +++--- addons/mail/wizard/mail_compose_message.py | 12 ++-- 7 files changed, 65 insertions(+), 59 deletions(-) diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index 4dffd8bcbf8..09033bffa84 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -515,7 +515,7 @@ property or property parameter."), sub, body, attachments=attach and {'invitation.ics': attach} or None, - subtype='html', + content_subtype='html', reply_to=email_from, context=context ) diff --git a/addons/crm/wizard/mail_compose_message.py b/addons/crm/wizard/mail_compose_message.py index b82c3083f3a..11d340b2f76 100644 --- a/addons/crm/wizard/mail_compose_message.py +++ b/addons/crm/wizard/mail_compose_message.py @@ -54,7 +54,7 @@ class mail_compose_message(osv.osv_memory): 'email_cc' : tools.ustr(data.email_cc or ''), 'model': model, 'res_id': res_id, - 'subtype': 'plain', + 'content_subtype': 'plain', }) if hasattr(data, 'section_id'): result.update({'reply_to' : data.section_id and data.section_id.reply_to or False}) diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 86f136ca5b9..31bf9a76441 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -310,7 +310,7 @@ class email_template(osv.osv): 'attachment_ids': False, 'message_id': False, 'state': 'outgoing', - 'subtype': 'plain', + 'content_subtype': 'plain', } if not template_id: return values @@ -326,7 +326,7 @@ class email_template(osv.osv): or False if values['body_html']: - values.update(subtype='html') + values.update(content_subtype='html') if template.user_signature: signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 9228861b139..1595fbae077 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -63,18 +63,21 @@ def to_email(text): if not text: return [] return re.findall(r'([^ ,<@]+@[^> ,]+)', text) -class mail_message_common(osv.osv_memory): +class mail_message_common(osv.TransientModel): """Common abstract class for holding the main attributes of a message object. It could be reused as parent model for any database model or wizard screen that needs to hold a kind of - message""" + message. + All internal logic should be in a database-based model. For example, + a wizard for writing emails should inherit from this class and not + from mail.message.""" def get_body(self, cr, uid, ids, name, arg, context=None): if context is None: context = {} result = dict.fromkeys(ids, '') for message in self.browse(cr, uid, ids, context=context): - if message.subtype == 'html': + if message.content_subtype == 'html': result[message.id] = message.body_html else: result[message.id] = message.body_text @@ -85,7 +88,7 @@ class mail_message_common(osv.osv_memory): - obj: mail.message object - name: 'body' - args: [('body', 'ilike', 'blah')]""" - return ['|', '&', ('subtype', '=', 'html'), ('body_html', args[0][1], args[0][2]), ('body_text', args[0][1], args[0][2])] + return ['|', '&', ('content_subtype', '=', 'html'), ('body_html', args[0][1], args[0][2]), ('body_text', args[0][1], args[0][2])] def get_record_name(self, cr, uid, ids, name, arg, context=None): if context is None: @@ -115,19 +118,20 @@ class mail_message_common(osv.osv_memory): help="Full message headers, e.g. SMTP session headers (usually available on inbound messages only)"), 'message_id': fields.char('Message-Id', size=256, help='Message unique identifier', select=1, readonly=1), 'references': fields.text('References', help='Message references, such as identifiers of previous messages', readonly=1), - 'subtype': fields.char('Message type', size=32, help="Type of message, usually 'html' or 'plain', used to " - "select plaintext or rich text contents accordingly", readonly=1), + 'content_subtype': fields.char('Message content subtype', size=32, + help="Type of message, usually 'html' or 'plain', used to " + "select plain-text or rich-text contents accordingly", readonly=1), 'body_text': fields.text('Text contents', help="Plain-text version of the message"), 'body_html': fields.text('Rich-text contents', help="Rich-text/HTML version of the message"), 'body': fields.function(get_body, fnct_search = search_body, string='Message content', type='text', - help="Content of the message. This content equals the body_text field for plain-test messages, and body_html for rich-text/HTML messages. This allows having one field if we want to access the content matching the message subtype."), + help="Content of the message. This content equals the body_text field for plain-test messages, and body_html for rich-text/HTML messages. This allows having one field if we want to access the content matching the message content_subtype."), 'parent_id': fields.many2one('mail.message', 'Parent message', help="Parent message, used for displaying as threads with hierarchy", select=True, ondelete='set null',), 'child_ids': fields.one2many('mail.message', 'parent_id', 'Child messages'), } _defaults = { - 'subtype': 'plain', + 'content_subtype': 'plain', 'date': (lambda *a: fields.datetime.now()), } @@ -206,12 +210,12 @@ class mail_message(osv.osv): ('comment', 'Comment'), ('notification', 'System notification'), ], 'Type', help="Message type: e-mail for e-mail message, notification for system message, comment for other messages such as user replies"), - 'message_subtype': fields.selection([ + 'message_tmptype': fields.selection([ ('email', 'e-mail'), ('comment', 'Comment'), ('create', 'Create'), ('cancel', 'Cancel'), - ], 'Type', help="Message subtype, such as create or cancel. May be overriden by addons."), + ], 'Type', help="Message temptype, such as create or cancel. May be overriden by addons."), 'partner_id': fields.many2one('res.partner', 'Related partner'), 'user_id': fields.many2one('res.users', 'Related user', readonly=1), 'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments'), @@ -230,7 +234,7 @@ class mail_message(osv.osv): _defaults = { 'type': 'email', - 'message_subtype': 'email', + 'message_tmptype': 'email', 'state': 'received', } @@ -250,18 +254,18 @@ class mail_message(osv.osv): default.update(message_id=False,original=False,headers=False) return super(mail_message,self).copy(cr, uid, id, default=default, context=context) - def schedule_with_attach(self, cr, uid, email_from, email_to, subject, body, model=False, email_cc=None, - email_bcc=None, reply_to=False, attachments=None, message_id=False, references=False, - res_id=False, subtype='plain', headers=None, mail_server_id=False, auto_delete=False, - context=None): + def schedule_with_attach(self, cr, uid, email_from, email_to, subject, body, model=False, + email_cc=None, email_bcc=None, reply_to=False, attachments=None, + message_id=False, references=False, res_id=False, content_subtype='plain', + headers=None, mail_server_id=False, auto_delete=False, context=None): """Schedule sending a new email message, to be sent the next time the mail scheduler runs, or the next time :meth:`process_email_queue` is called explicitly. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) - :param string body: email body, according to the ``subtype`` (by default, plaintext). - If html subtype is used, the message will be automatically converted + :param string body: email body, according to the ``content_subtype`` + (by default, plaintext). If html content_subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative. :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) @@ -272,9 +276,9 @@ class mail_message(osv.osv): be used to generate a tracking id, used to match any response related to the same document) :param string reply_to: optional value of Reply-To header - :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), - must match the format of the ``body`` parameter. Default is 'plain', - making the content part of the mail "text/plain". + :param string content_subtype: optional mime content_subtype for the text body (usually 'plain' or 'html'), + must match the format of the ``body`` parameter. Default is 'plain', + making the content part of the mail "text/plain". :param dict attachments: map of filename to filecontents, where filecontents is a string containing the bytes of the attachment :param dict headers: optional map of headers to set on the outgoing mail (may override the @@ -299,8 +303,8 @@ class mail_message(osv.osv): 'model': model, 'res_id': res_id, 'type': 'email', - 'body_text': body if subtype != 'html' else False, - 'body_html': body if subtype == 'html' else False, + 'body_text': body if content_subtype != 'html' else False, + 'body_html': body if content_subtype == 'html' else False, 'email_from': email_from, 'email_to': email_to and ','.join(email_to) or '', 'email_cc': email_cc and ','.join(email_cc) or '', @@ -308,7 +312,7 @@ class mail_message(osv.osv): 'reply_to': reply_to, 'message_id': message_id, 'references': references, - 'subtype': subtype, + 'content_subtype': content_subtype, 'headers': headers, # serialize the dict on the fly 'mail_server_id': mail_server_id, 'state': 'outgoing', @@ -388,7 +392,7 @@ class mail_message(osv.osv): 'headers' : { 'X-Mailer': mailer, #.. all X- headers... }, - 'subtype': msg_mime_subtype, + 'content_subtype': msg_mime_subtype, 'body_text': plaintext_body 'body_html': html_body, 'attachments': [('file1', 'bytes'), @@ -464,7 +468,7 @@ class mail_message(osv.osv): msg['in-reply-to'] = msg_txt.get('In-Reply-To') msg['headers'] = {} - msg['subtype'] = 'plain' + msg['content_subtype'] = 'plain' for item in msg_txt.items(): if item[0].startswith('X-'): msg['headers'].update({item[0]: item[1]}) @@ -473,7 +477,7 @@ class mail_message(osv.osv): body = msg_txt.get_payload(decode=True) if 'text/html' in msg.get('content-type', ''): msg['body_html'] = body - msg['subtype'] = 'html' + msg['content_subtype'] = 'html' if body: body = tools.html2plaintext(body) msg['body_text'] = tools.ustr(body, encoding) @@ -482,9 +486,9 @@ class mail_message(osv.osv): if msg_txt.is_multipart() or 'multipart/alternative' in msg.get('content-type', ''): body = "" if 'multipart/alternative' in msg.get('content-type', ''): - msg['subtype'] = 'alternative' + msg['content_subtype'] = 'alternative' else: - msg['subtype'] = 'mixed' + msg['content_subtype'] = 'mixed' for part in msg_txt.walk(): if part.get_content_maintype() == 'multipart': continue @@ -498,7 +502,7 @@ class mail_message(osv.osv): content = tools.ustr(content, encoding) if part.get_content_subtype() == 'html': msg['body_html'] = content - msg['subtype'] = 'html' # html version prevails + msg['content_subtype'] = 'html' # html version prevails body = tools.ustr(tools.html2plaintext(content)) body = body.replace(' ', '') elif part.get_content_subtype() == 'plain': @@ -515,7 +519,7 @@ class mail_message(osv.osv): # for backwards compatibility: msg['body'] = msg['body_text'] - msg['sub_type'] = msg['subtype'] or 'plain' + msg['sub_type'] = msg['content_subtype'] or 'plain' return msg def _postprocess_sent_message(self, cr, uid, message, context=None): @@ -561,15 +565,17 @@ class mail_message(osv.osv): for attach in message.attachment_ids: attachments.append((attach.datas_fname, base64.b64decode(attach.datas))) - body = message.body_html if message.subtype == 'html' else message.body_text + body = message.body_html if message.content_subtype == 'html' else message.body_text body_alternative = None - subtype_alternative = None - if message.subtype == 'html' and message.body_text: + content_subtype_alternative = None + if message.content_subtype == 'html' and message.body_text: # we have a plain text alternative prepared, pass it to # build_message instead of letting it build one body_alternative = message.body_text - subtype_alternative = 'plain' + content_subtype_alternative = 'plain' + # build an RFC2822 email.message.Message object adn send it + # without queuing msg = ir_mail_server.build_email( email_from=message.email_from, email_to=to_email(message.email_to), @@ -582,8 +588,8 @@ class mail_message(osv.osv): attachments=attachments, message_id=message.message_id, references = message.references, object_id=message.res_id and ('%s-%s' % (message.res_id,message.model)), - subtype=message.subtype, - subtype_alternative=subtype_alternative, + subtype=message.content_subtype, + subtype_alternative=content_subtype_alternative, headers=message.headers and ast.literal_eval(message.headers)) res = ir_mail_server.send_email(cr, uid, msg, mail_server_id=message.mail_server_id.id, diff --git a/addons/mail/mail_message_view.xml b/addons/mail/mail_message_view.xml index ecd106e05e5..1a7d511de3b 100644 --- a/addons/mail/mail_message_view.xml +++ b/addons/mail/mail_message_view.xml @@ -103,7 +103,7 @@ - + @@ -113,7 +113,7 @@ - + From 803220f3b7c893824cecb09763155a99436a1524 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Wed, 18 Jul 2012 12:21:09 +0200 Subject: [PATCH 420/548] [IMP] account: usability, review of form views bzr revid: qdp-launchpad@openerp.com-20120718102109-prtl3sb28xehgnlh --- addons/account/account_view.xml | 7 ++++--- addons/account/wizard/account_chart_view.xml | 5 ++--- addons/account/wizard/account_report_common_view.xml | 2 +- addons/account/wizard/account_use_model_view.xml | 4 ++-- addons/account_voucher/account_voucher_view.xml | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 0172fa7429a..ecdcdaf4924 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -2603,20 +2603,21 @@ action = pool.get('res.config').next(cr, uid, [], context) @@ -30,7 +30,7 @@ - Select an Accounting Setup + Chart of Accounts account.chart form tree,form @@ -41,7 +41,6 @@ diff --git a/addons/account/wizard/account_report_common_view.xml b/addons/account/wizard/account_report_common_view.xml index aa09e7fd3a8..18953270e09 100644 --- a/addons/account/wizard/account_report_common_view.xml +++ b/addons/account/wizard/account_report_common_view.xml @@ -26,7 +26,7 @@ - + diff --git a/addons/account/wizard/account_use_model_view.xml b/addons/account/wizard/account_use_model_view.xml index b128292271c..6170ca4fe12 100644 --- a/addons/account/wizard/account_use_model_view.xml +++ b/addons/account/wizard/account_use_model_view.xml @@ -8,8 +8,8 @@ form
    - - + +
    +
    +
    + + - - + @@ -116,20 +116,20 @@ + + - - - - -
    + Checklist From f19e5ff9bcc8cbee1d8e389c5a59d5e75591730a Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 18 Jul 2012 15:37:12 +0200 Subject: [PATCH 445/548] [IMP] don't collapse newlines in list cells bzr revid: xmo@openerp.com-20120718133712-0pbdahv62rf0nslc --- addons/web/static/src/css/base.css | 1 + addons/web/static/src/css/base.sass | 1 + addons/web/static/src/xml/base.xml | 5 ++--- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 97d2fcf57a7..f92d5cbf1c2 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -2256,6 +2256,7 @@ } .openerp .oe_list_content > tbody > tr > td.oe_list_field_cell { padding: 3px 6px; + white-space: pre-line; } .openerp .oe_list_content > tbody > tr > td, .openerp .oe_list_content > tbody > tr > th { line-height: 18px; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index c5197743acd..2ad33c8ca62 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -1784,6 +1784,7 @@ $sheet-max-width: 860px border-top: 1px solid #ddd > td.oe_list_field_cell padding: 3px 6px + white-space: pre-line > td, > th line-height: 18px > button diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index a9c8e15bcd7..6d0d4a9ea7d 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -657,9 +657,8 @@ - - + t-att-data-field="column.id" + > From 9096f2c45c3c9c12486eed2dd273aeb03441cb68 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 18 Jul 2012 15:46:07 +0200 Subject: [PATCH 446/548] [ADD] reimplement o2m's cancel-on-blur when no alteration has been done by the user to the row being edited (new or not) bzr revid: xmo@openerp.com-20120718134607-bukj6c5lysmqeer3 --- addons/web/static/src/js/view_form.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 948b3a73913..92faa3d7d15 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3331,13 +3331,20 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({ /** * Handles blurring of the nested form (saves the currently edited row), * unless the flag to ignore the event is set to ``true`` + * + * Makes the internal form go away */ _on_form_blur: function () { if (this.__ignore_blur) { this.__ignore_blur = false; return; } - this.save_edition(); + // FIXME: why isn't there an API for this? + if (this.editor.form.$element.hasClass('oe_form_dirty')) { + this.save_edition(); + return; + } + this.cancel_edition(); }, keyup_ENTER: function () { // blurring caused by hitting the [Return] key, should skip the From 26665b774376068a93b887a2818ae98a22f23ae7 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 18 Jul 2012 15:50:10 +0200 Subject: [PATCH 447/548] [IMP] after a module installation, reload the client and open the menu Feeds bzr revid: rco@openerp.com-20120718135010-4933mmgw3n18epvy --- openerp/addons/base/module/module.py | 28 +++------------------------ openerp/addons/base/res/res_config.py | 12 ++++++++---- 2 files changed, 11 insertions(+), 29 deletions(-) diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py index fde8fcf5b9a..1a0932ac7cf 100644 --- a/openerp/addons/base/module/module.py +++ b/openerp/addons/base/module/module.py @@ -363,8 +363,9 @@ class module(osv.osv): if config.get('type') not in ('ir.actions.reload', 'ir.actions.act_window_close'): return config - # reload the client - menu_ids = self.root_menus(cr,uid,ids,context) + # reload the client; open the first available root menu + menu_obj = self.pool.get('ir.ui.menu') + menu_ids = menu_obj.search(cr, uid, [('parent_id', '=', False)], context=context) return { 'type': 'ir.actions.client', 'tag': 'reload', @@ -649,29 +650,6 @@ class module(osv.osv): _logger.critical('module %s: invalid quality certificate: %s', mod.name, mod.certificate) raise osv.except_osv(_('Error'), _('Module %s: Invalid Quality Certificate') % (mod.name,)) - def root_menus(self, cr, uid, ids, context=None): - """ Return root menu ids the menus created by the modules whose ids are - provided. - - :param list[int] ids: modules to get menus from - """ - values = self.read(cr, uid, ids, ['name'], context=context) - module_names = [i['name'] for i in values] - - ids = self.pool.get('ir.model.data').search(cr, uid, [ ('model', '=', 'ir.ui.menu'), ('module', 'in', module_names) ], context=context) - values = self.pool.get('ir.model.data').read(cr, uid, ids, ['res_id'], context=context) - all_menu_ids = [i['res_id'] for i in values] - - root_menu_ids = [] - for menu in self.pool.get('ir.ui.menu').browse(cr, uid, all_menu_ids, context=context): - while menu.parent_id: - menu = menu.parent_id - if not menu.id in root_menu_ids: - root_menu_ids.append((menu.sequence,menu.id)) - root_menu_ids.sort() - root_menu_ids = [i[1] for i in root_menu_ids] - return root_menu_ids - class module_dependency(osv.osv): _name = "ir.module.module.dependency" _description = "Module dependency" diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index 9277184a822..3f4a052a36b 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -70,10 +70,14 @@ class res_config_configurable(osv.osv_memory): res = next.action_launch(context=context) res['nodestroy'] = False return res - #if there is no next action and if html is in the context: reload instead of closing - if context and 'html' in context: - return {'type' : 'ir.actions.reload'} - return {'type' : 'ir.actions.act_window_close'} + # reload the client; open the first available root menu + menu_obj = self.pool.get('ir.ui.menu') + menu_ids = menu_obj.search(cr, uid, [('parent_id', '=', False)], context=context) + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + 'params': {'menu_id': menu_ids and menu_ids[0] or False}, + } def start(self, cr, uid, ids, context=None): return self.next(cr, uid, ids, context) From 531444a6f6b1d94e8ab4893a8f976e32e038bfff Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 18 Jul 2012 15:51:02 +0200 Subject: [PATCH 448/548] [IMP] account: do not open a non-existing view after setting taxes bzr revid: rco@openerp.com-20120718135102-34gvep3dbpqznozc --- addons/account/account.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index b6fd7232a25..fab9de5407c 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -3351,15 +3351,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): # Create Bank journals self._create_bank_journals_from_o2m(cr, uid, obj_wizard, company_id, acc_template_ref, context=context) - action = { - 'type': 'ir.actions.act_window', - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': 'board.board', - 'view_id': self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account', 'board_account_form')[1], - 'menu_id': self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account', 'menu_finance')[1] - } - return action + return {} def _prepare_bank_journal(self, cr, uid, line, current_num, default_account_id, company_id, context=None): ''' From bfe3afcbd8ac214487c57731c850c199f8a6a3c5 Mon Sep 17 00:00:00 2001 From: Minh Tran Date: Wed, 18 Jul 2012 15:55:03 +0200 Subject: [PATCH 449/548] improved project kanban vignette bzr revid: mit@openerp.com-20120718135503-gi222ulbtmhyesq8 --- addons/web_kanban/static/src/css/kanban.css | 3 +++ addons/web_kanban/static/src/css/kanban.sass | 3 +++ 2 files changed, 6 insertions(+) diff --git a/addons/web_kanban/static/src/css/kanban.css b/addons/web_kanban/static/src/css/kanban.css index 36dbab57559..5a7c1b84067 100644 --- a/addons/web_kanban/static/src/css/kanban.css +++ b/addons/web_kanban/static/src/css/kanban.css @@ -401,6 +401,9 @@ position: relative; top: 2px; } +.openerp .oe_kanban_view .oe_kanban_project_times li { + float: left; +} .openerp .oe_kanban_view .oe_kanban_status { position: relative; top: 4px; diff --git a/addons/web_kanban/static/src/css/kanban.sass b/addons/web_kanban/static/src/css/kanban.sass index f4c13cc7bd2..cea95f2ce53 100644 --- a/addons/web_kanban/static/src/css/kanban.sass +++ b/addons/web_kanban/static/src/css/kanban.sass @@ -336,6 +336,9 @@ float: right position: relative top: 2px + + .oe_kanban_project_times li + float: left .oe_kanban_status position: relative From 607c1670314a00cb3cd5b28ba495f950104d776f Mon Sep 17 00:00:00 2001 From: Minh Tran Date: Wed, 18 Jul 2012 15:55:14 +0200 Subject: [PATCH 450/548] improved project kanban vignette bzr revid: mit@openerp.com-20120718135514-ojyvli4qyresvsmf --- addons/project/project_view.xml | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index a70bc504299..dbc4007bf8c 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -521,6 +521,15 @@
    @@ -531,19 +540,6 @@
    - - - - - ! -
  • @@ -554,6 +550,12 @@ 7
    +
    From 03dd20254e2c62b8290f9b329bde256e92fcc3cd Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 18 Jul 2012 16:01:31 +0200 Subject: [PATCH 451/548] [IMP] use 'Save' as label of the button to save an editable list row bzr revid: xmo@openerp.com-20120718140131-eop88n524hwvrguw --- addons/web/static/src/xml/base.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 6d0d4a9ea7d..94b76c170ea 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -668,7 +668,7 @@ + type="button">Save discard From a824028878037b2e1bac655390ea77808feb7c11 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Wed, 18 Jul 2012 16:06:13 +0200 Subject: [PATCH 452/548] [IMP] initial mail message sale bzr revid: fp@tinyerp.com-20120718140613-3urmqhtng63lc23f --- addons/sale/sale_data.xml | 26 +++++++++++++++++++++++++ addons/sale/wizard/sale_make_invoice.py | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/addons/sale/sale_data.xml b/addons/sale/sale_data.xml index 4622577ac3d..b0fd5ed6d10 100644 --- a/addons/sale/sale_data.xml +++ b/addons/sale/sale_data.xml @@ -26,5 +26,31 @@ + + + Module sale installed! + comment + html + Welcome to OpenERP + Second Line + + +

    OpenERP Sale module just installed!

    +

    + You can click on the top menu Sales to manage your + customers, your quotations and sales orders. +

    +

    + If you need to manage your sales pipeline (leads, + opportunities, phonecalls), you can install the CRM module + from the Settings top menu. +

    +
    +
    + + + + + diff --git a/addons/sale/wizard/sale_make_invoice.py b/addons/sale/wizard/sale_make_invoice.py index 5265afb9bff..b4b3772a91a 100644 --- a/addons/sale/wizard/sale_make_invoice.py +++ b/addons/sale/wizard/sale_make_invoice.py @@ -68,4 +68,4 @@ class sale_make_invoice(osv.osv_memory): sale_make_invoice() -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 5510ee74b2f97959d129aa4e45933bd65bd42981 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 18 Jul 2012 16:11:12 +0200 Subject: [PATCH 453/548] [IMP] sale: in customer form, move action 'Quotations and Sales' from contextual menu to button bzr revid: rco@openerp.com-20120718141112-tdw4vb1c2am6rwl3 --- addons/sale/res_partner_view.xml | 34 +++++++++++++++++++++++++++++++- addons/sale/sale_view.xml | 8 -------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/addons/sale/res_partner_view.xml b/addons/sale/res_partner_view.xml index bb5695eac39..9c557620e75 100644 --- a/addons/sale/res_partner_view.xml +++ b/addons/sale/res_partner_view.xml @@ -1,7 +1,24 @@ - + + Quotations and Sales + sale.order + form + tree,form,graph + {'search_default_partner_id': active_id} + + + This customer has no quotation or sale order. + Click here to create a new quotation. + <p> + The "Quotation" is the first step of the Sales flow. Manage your sales from quotation to invoice. + <p> + You will be able to sell products (manage deliveries) as well as services (create projects). + + + + res.partner.kanban.saleorder.inherit res.partner @@ -18,6 +35,21 @@ + + + res.partner.view.buttons + res.partner + form + + + +