diff options
143 files changed, 7086 insertions, 2507 deletions
diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py index d4731fa0215..cea696f590f 100644 --- a/addons/account/__openerp__.py +++ b/addons/account/__openerp__.py @@ -107,8 +107,11 @@ module named account_voucherss 'company_view.xml', 'account_installer.xml', 'report/account_invoice_report_view.xml', + 'report/account_entries_report_view.xml', 'report/account_report_view.xml', 'report/account_analytic_report_view.xml', + 'report/account_account_report_view.xml', + 'report/account_analytic_entries_report_view.xml' ], 'demo_xml': [ #'demo/price_accuracy00.yml', diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index b292ea36a1a..db487ed511e 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -478,14 +478,9 @@ <act_window domain="[('journal_id','=',active_id),('state','!=','draft'),('reconciled','=',False)]" id="act_account_journal_2_account_invoice_opened" name="Unpaid invoices" res_model="account.invoice" src_model="account.journal"/> <act_window domain="[('account_analytic_id', '=', active_id)]" id="act_account_analytic_account_2_account_invoice_line" name="Invoice lines" res_model="account.invoice.line" src_model="account.analytic.account"/> -<<<<<<< TREE <act_window domain="[('partner_id', '=', partner_id), ('account_id.type', 'in', ['receivable', 'payable']), ('reconcile_id','=',False)]" id="act_account_invoice_account_move_unreconciled" name="Unreconciled Receivables & Payables" res_model="account.move.line" src_model="account.invoice"/> <!-- Partners inherited form --> -======= - - <!-- Partners inherited form --> ->>>>>>> MERGE-SOURCE <record id="view_invoice_partner_info_form" model="ir.ui.view"> <field name="name">res.partner.invoice.info.inherit</field> diff --git a/addons/account/account_menuitem.xml b/addons/account/account_menuitem.xml index 37d539a4b25..a2d18095618 100644 --- a/addons/account/account_menuitem.xml +++ b/addons/account/account_menuitem.xml @@ -22,6 +22,7 @@ groups="group_account_user"/> <menuitem id="menu_account_end_year_treatments" name="End of Year Treatments" parent="account.menu_finance_periodical_processing" sequence="20"/> + <menuitem id="menu_finance_statastic_report_statement" name="Satistic Reports" parent="account.menu_finance_reporting" sequence="3"/> </data> </openerp> diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 6c5be231657..1edb56d6044 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -351,7 +351,7 @@ <page string="Entry encoding"> <field colspan="4" name="line_ids" nolabel="1"> <tree editable="bottom" string="Statement lines"> - <field name="sequence"/> + <field name="sequence" invisible="1"/> <field name="date"/> <field name="ref"/> <field name="name"/> diff --git a/addons/account/i18n/eu.po b/addons/account/i18n/eu.po index 68344247171..84652c621ae 100644 --- a/addons/account/i18n/eu.po +++ b/addons/account/i18n/eu.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2010-05-17 13:10+0000\n" -"Last-Translator: Jon A. Ortuondo (Euskotec) <Unknown>\n" +"PO-Revision-Date: 2010-05-23 09:59+0000\n" +"Last-Translator: ninaiz <inigo.rekalde@gmail.com>\n" "Language-Team: Basque <eu@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-05-19 05:12+0000\n" +"X-Launchpad-Export-Date: 2010-05-24 03:46+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: account @@ -236,7 +236,7 @@ msgstr "" #: field:account.tax.template,amount:0 #: xsl:account.transfer:0 msgid "Amount" -msgstr "" +msgstr "Kopurua" #. module: account #: model:ir.actions.report.xml,name:account.account_3rdparty_ledger @@ -338,7 +338,7 @@ msgstr "" #: field:account.invoice,amount_tax:0 #: field:account.move.line,account_tax_id:0 msgid "Tax" -msgstr "" +msgstr "Zerga" #. module: account #: rml:account.general.journal:0 @@ -465,7 +465,7 @@ msgstr "" #. module: account #: rml:account.invoice:0 msgid "Disc.(%)" -msgstr "" +msgstr "Desk. (%)" #. module: account #: rml:account.general.ledger:0 diff --git a/addons/account/i18n/fr.po b/addons/account/i18n/fr.po index 1785d79bf38..e6bddde1647 100644 --- a/addons/account/i18n/fr.po +++ b/addons/account/i18n/fr.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.1\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2010-02-18 09:24+0000\n" -"Last-Translator: Olivier Dony (OpenERP) <Unknown>\n" +"PO-Revision-Date: 2010-05-21 17:48+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 04:06+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: account @@ -2495,7 +2495,8 @@ msgid "Analytic Entry" msgstr "Ecriture analytique" #. module: account -#: view:res.company:0 field:res.company,overdue_msg:0 +#: view:res.company:0 +#: field:res.company,overdue_msg:0 msgid "Overdue Payments Message" msgstr "Message pour les paiements en retard" @@ -2784,7 +2785,7 @@ msgstr "Ouvrir journal" #. module: account #: rml:account.analytic.account.journal:0 msgid "KI" -msgstr "" +msgstr "KI" #. module: account #: model:ir.actions.wizard,name:account.action_account_analytic_line @@ -3034,7 +3035,7 @@ msgstr "-" #. module: account #: rml:account.analytic.account.journal:0 msgid "asgfas" -msgstr "" +msgstr "asgfas" #. module: account #: model:ir.actions.act_window,name:account.action_account_analytic_account_tree2 @@ -6082,3 +6083,6 @@ msgid "" msgstr "" "Cochez cette case si l'utilisateur peut réconcilier les entrées dans ce " "compte." + +#~ msgid "account.config.wizard" +#~ msgstr "account.config.wizard" diff --git a/addons/account/report/__init__.py b/addons/account/report/__init__.py index 09ff866d1a8..b411e404cac 100644 --- a/addons/account/report/__init__.py +++ b/addons/account/report/__init__.py @@ -37,6 +37,8 @@ import compare_account_balance import account_invoice_report import account_report import account_analytic_report - +import account_account_report +import account_entries_report +import account_analytic_entries_report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/account_account_report.py b/addons/account/report/account_account_report.py new file mode 100644 index 00000000000..55e5d7030c7 --- /dev/null +++ b/addons/account/report/account_account_report.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import tools +from osv import fields,osv + +class account_account_report(osv.osv): + _name = "account.account.report" + _description = "Account Report" + _auto = False + _columns = { + 'name': fields.char('Name', size=128, readonly=True), + 'code': fields.char('Code', size=64, readonly=True), + 'type': fields.selection([ + ('receivable', 'Receivable'), + ('payable', 'Payable'), + ('view', 'View'), + ('consolidation', 'Consolidation'), + ('other', 'Others'), + ('closed', 'Closed'), + ], 'Internal Type', readonly=True), + 'company_id': fields.many2one('res.company', 'Company', required=True), + 'currency_mode': fields.selection([('current', 'At Date'), ('average', 'Average Rate')], 'Outgoing Currencies Rate',readonly=True), + 'user_type': fields.many2one('account.account.type', 'Account Type',readonly=True), + 'quantity': fields.float('Quantity', readonly=True), + 'amount_total': fields.float('Total Amount', readonly=True), + 'credit': fields.float('Credit', readonly=True), + 'debit': fields.float('Debit', readonly=True), + 'balance': fields.float('Balance', readonly=True), + 'nbr': fields.integer('#Accounts', readonly=True), + 'parent_account_id': fields.many2one('account.account', 'Parent Account', required=True), + } + def init(self, cr): + tools.drop_view_if_exists(cr, 'account_account_report') + cr.execute(""" + create or replace view account_account_report as ( + select + min(a.id) as id, + count(distinct a.id) as nbr, + a.name, + a.code, + a.type as type, + a.company_id as company_id, + a.currency_mode as currency_mode, + a.user_type as user_type, + a.parent_id as parent_account_id, + sum(ail.quantity) as quantity, + sum(ail.price_subtotal) as amount_total, + sum(m.credit) as credit, + sum(m.debit) as debit, + (sum(m.credit)-sum(m.debit)) as balance + from + account_account as a + left join account_move_line as m on m.account_id=a.id + left join account_invoice_line as ail on ail.account_id=a.id + left join account_invoice as ai on ai.account_id=a.id + group by + a.name, + a.code, + a.type, + a.company_id, + a.currency_mode, + a.user_type, + m.account_id, + a.parent_id + ) + """) +account_account_report() diff --git a/addons/account/report/account_account_report_view.xml b/addons/account/report/account_account_report_view.xml new file mode 100644 index 00000000000..32e77be341f --- /dev/null +++ b/addons/account/report/account_account_report_view.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + <record id="view_account_account_report_tree" model="ir.ui.view"> + <field name="name">account.account.report.tree</field> + <field name="model">account.account.report</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree string="Account Report"> + <field name="name" invisible="1" string="Account"/> + <field name="code" invisible="1"/> + <field name="type" invisible="1"/> + <field name="company_id" invisible="1" group="base.multi_company"/> + <field name="currency_mode" invisible="1"/> + <field name="nbr" sum="#Accounts"/> + <field name="user_type" invisible="1"/> + <field name="parent_account_id" invisible="1"/> + <field name="quantity" sum="Quantity"/> + <field name="amount_total" sum="Total Amount"/> + <field name="credit" sum="Credit"/> + <field name="debit" sum="Debit"/> + <field name="balance" sum="Balance"/> + </tree> + </field> + </record> + + <record id="view_account_account_report_graph" model="ir.ui.view"> + <field name="name">account.account.report.graph</field> + <field name="model">account.account.report</field> + <field name="type">graph</field> + <field name="arch" type="xml"> + <graph string="Accounts" type="bar"> + <field name="name"/> + <field name="credit" operator="+"/> + <field name="debit" operator="+"/> + <field name="balance" operator="+"/> + </graph> + </field> + </record> + + <record id="view_account_account_report_search" model="ir.ui.view"> + <field name="name">account.account.report.search</field> + <field name="model">account.account.report</field> + <field name="type">search</field> + <field name="arch" type="xml"> + <search string="Accounts"> + <group> + <filter icon="terp-account" + string="At Date" + domain="[('currency_mode','=', 'current')]"/> + <filter icon="terp-account" + string="Average Rate" + domain="[('currency_mode','=','average')]"/> + <separator orientation="vertical"/> + <field name="name" string="Account"/> + <field name="code"/> + <field name="company_id" widget="selection" groups="base.group_multi_company"/> + </group> + <newline/> + <group expand="0" string="Extended options..." colspan="10" col="12"> + <field name="type" /> + <field name="user_type" widget="selection"/> + <field name="parent_account_id" /> + </group> + <newline/> + <group expand="1" string="Group By..." colspan="10" col="12"> + <filter string="Account" name="Account" icon="terp-account" context="{'group_by':'name'}"/> + <filter string="Code" icon="terp-account" context="{'group_by':'code'}"/> + <filter string="Company" icon="terp-account" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> + <separator orientation="vertical"/> + <filter string="Currencies Rate" icon="terp-account" context="{'group_by':'currency_mode'}"/> + <filter string="Internal Type" icon="terp-account" context="{'group_by':'type'}"/> + <filter string="Account Type" icon="terp-account" context="{'group_by':'user_type'}"/> + <filter string="Parent Account" icon="terp-account" context="{'group_by':'parent_account_id'}"/> + </group> + </search> + </field> + </record> + + <record id="action_account_account_report" model="ir.actions.act_window"> + <field name="name">Accounts</field> + <field name="res_model">account.account.report</field> + <field name="view_type">form</field> + <field name="view_mode">tree,graph</field> + <field name="context">{"search_default_Account":1,"search_default_At Date":1,'group_by_no_leaf':1,'group_by':[]}</field> + <field name="search_view_id" ref="view_account_account_report_search"/> + </record> + + <menuitem action="action_account_account_report" id="menu_action_account_account_report" parent="account.menu_finance_statastic_report_statement" sequence="6"/> + +</data> +</openerp> diff --git a/addons/account/report/account_analytic_entries_report.py b/addons/account/report/account_analytic_entries_report.py new file mode 100644 index 00000000000..2a1b4ad993b --- /dev/null +++ b/addons/account/report/account_analytic_entries_report.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import tools +from osv import fields,osv + +class analytic_entries_report(osv.osv): + _name = "analytic.entries.report" + _description = "Analytic Entries Statistics" + _auto = False + _columns = { + 'date': fields.date('Date', readonly=True), + 'year': fields.char('Year', size=4, readonly=True), + 'day': fields.char('Day', size=128, 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), + 'user_id' : fields.many2one('res.users', 'User',readonly=True), + 'name': fields.char('Description', size=64, readonly=True), + 'company_id': fields.many2one('res.company', 'Company', required=True), + 'currency_id': fields.many2one('res.currency', 'Currency', required=True), + 'account_id': fields.many2one('account.analytic.account', 'Account', required=True), + 'general_account_id': fields.many2one('account.account', 'General Account', required=True), + 'journal_id': fields.many2one('account.analytic.journal', 'Journal', required=True), + 'move_id': fields.many2one('account.move.line', 'Move', required=True), + 'product_id': fields.many2one('product.product', 'Product', required=True), + 'product_uom_id': fields.many2one('product.uom', 'Product UOM', required=True), + 'amount': fields.float('Amount', readonly=True), + 'unit_amount': fields.float('Unit Amount', readonly=True), + 'amount_currency': fields.float('Amount Currency', readonly=True), + 'nbr': fields.integer('#Entries', readonly=True), + } + def init(self, cr): + tools.drop_view_if_exists(cr, 'analytic_entries_report') + cr.execute(""" + create or replace view analytic_entries_report as ( + select + min(a.id) as id, + count(distinct a.id) as nbr, + a.create_date as date, + to_char(a.create_date, 'YYYY') as year, + to_char(a.create_date, 'MM') as month, + to_char(a.create_date, 'YYYY-MM-DD') as day, + a.user_id as user_id, + a.name as name, + a.company_id as company_id, + a.currency_id as currency_id, + a.account_id as account_id, + a.general_account_id as general_account_id, + a.journal_id as journal_id, + a.move_id as move_id, + a.product_id as product_id, + a.product_uom_id as product_uom_id, + sum(a.amount) as amount, + sum(a.unit_amount) as unit_amount, + sum(a.amount_currency) as amount_currency + from + account_analytic_line a + group by + a.create_date, a.user_id,a.name,company_id,a.currency_id, + a.account_id,a.general_account_id,a.journal_id, + a.move_id,a.product_id,a.product_uom_id + ) + """) +analytic_entries_report() diff --git a/addons/account/report/account_analytic_entries_report_view.xml b/addons/account/report/account_analytic_entries_report_view.xml new file mode 100644 index 00000000000..41d9c0976f2 --- /dev/null +++ b/addons/account/report/account_analytic_entries_report_view.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + <record id="view_analytic_entries_report_tree" model="ir.ui.view"> + <field name="name">analytic.entries.report.tree</field> + <field name="model">analytic.entries.report</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree string="Analytic Entries Statistics"> + <field name="date" invisible="1"/> + <field name="year" invisible="1"/> + <field name="day" invisible="1"/> + <field name="month" invisible="1"/> + <field name="user_id" invisible="1"/> + <field name="name" invisible="1"/> + <field name="company_id" invisible="1" groups="base.multi_company"/> + <field name="currency_id" invisible="1"/> + <field name="account_id" invisible="1"/> + <field name="general_account_id" invisible="1"/> + <field name="journal_id" invisible="1"/> + <field name="product_id" invisible="1"/> + <field name="product_uom_id" invisible="1"/> + <field name="nbr" sum="Entries"/> + <field name="amount" sum="Amount"/> + <field name="unit_amount" sum="Unit Amount"/> + <field name="amount_currency" sum="Amount Currency"/> + </tree> + </field> + </record> + + <record id="view_analytic_entries_report_search" model="ir.ui.view"> + <field name="name">analytic.entries.report.search</field> + <field name="model">analytic.entries.report</field> + <field name="type">search</field> + <field name="arch" type="xml"> + <search string="Analytic Entries"> + <group col="10" colspan="12"> + <filter icon="terp-account" string="Last 365 DAys" + domain="[('day','<=', time.strftime('%%Y-%%m-%%d')),('day','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" + help="Analytic Entries of the year"/> + <filter icon="terp-account" string="Last 30 Days" + name="month" + domain="[('day','<=', time.strftime('%%Y-%%m-%%d')), ('day','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]" + help="Analytic Entries of this month"/> + <filter icon="gtk-media-rewind" + string=" 7 Days " + separator="1" + domain="[('day','<=', time.strftime('%%Y-%%m-%%d')), ('day','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" + help="Analytic Entries during last 7 days"/> + <separator orientation="vertical"/> + <field name="name"/> + <field name="user_id" widget="selection"> + <filter icon="terp-partner" domain="[('user_id','=',uid)]" help="My Case"/> + </field> + <field name="currency_id"/> + </group> + <newline/> + <group expand="0" string="Extended options..." colspan="10" col="12"> + <field name="account_id" /> + <field name="general_account_id" widget="selection"/> + <field name="journal_id" widget="selection"/> + <separator orientation="vertical"/> + <field name="product_id" /> + <field name="product_uom_id" widget="selection"/> + <field name="company_id" widget="selection" groups="base.multi_company"/> + </group> + <newline/> + <group expand="1" string="Group By..." colspan="10" col="12"> + <filter string="User" name="User" icon="terp-account" context="{'group_by':'user_id'}"/> + <filter string="Currency" icon="terp-account" context="{'group_by':'currency_id'}"/> + <filter string="Company" icon="terp-account" context="{'group_by':'company_id'}" groups="base.multi_company"/> + <separator orientation="vertical"/> + <filter string="Account" icon="terp-account" context="{'group_by':'account_id'}"/> + <filter string="General Account" icon="terp-account" context="{'group_by':'general_account_id'}"/> + <filter string="Journal" icon="terp-account" context="{'group_by':'journal_id'}"/> + <separator orientation="vertical"/> + <filter string="Product" icon="terp-account" context="{'group_by':'product_id'}"/> + <filter string="Product UOM" icon="terp-account" context="{'group_by':'product_uom_id'}"/> + <separator orientation="vertical"/> + <filter string="Day" icon="terp-account" context="{'group_by':'day'}"/> + <filter string="Month" icon="terp-account" context="{'group_by':'month'}"/> + <filter string="Year" icon="terp-account" context="{'group_by':'year'}"/> + </group> + </search> + </field> + </record> + <record id="view_account_analytic_entries_search" model="ir.ui.view"> + <field name="name">account.analytic.entries.graph</field> + <field name="model">analytic.entries.report</field> + <field name="type">graph</field> + <field name="arch" type="xml"> + <graph string="Analytic Entries" type="bar"> + <field name="user_id"/> + <field name="amount" operator="+"/> + <field name="unit_amount" operator="+"/> + <field name="amount_currency" operator="+"/> + </graph> + </field> + </record> + <record id="action_analytic_entries_report" model="ir.actions.act_window"> + <field name="name">Analytic Entries</field> + <field name="res_model">analytic.entries.report</field> + <field name="view_type">form</field> + <field name="view_mode">tree,graph</field> + <field name="context">{'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}</field> + <field name="search_view_id" ref="view_analytic_entries_report_search"/> + </record> + + <menuitem action="action_analytic_entries_report" id="menu_action_analytic_entries_report" parent="account.menu_finance_statastic_report_statement" sequence="4"/> + +</data> +</openerp> diff --git a/addons/account/report/account_analytic_report.py b/addons/account/report/account_analytic_report.py index 45057d950bd..87912b4a3ef 100644 --- a/addons/account/report/account_analytic_report.py +++ b/addons/account/report/account_analytic_report.py @@ -35,7 +35,7 @@ class analytic_report(osv.osv): 'parent_id': fields.many2one('account.analytic.account', 'Parent Analytic Account', readonly=True), 'user_id' : fields.many2one('res.users', 'Account Manager',readonly=True), 'product_id' : fields.many2one('product.product', 'Product',readonly=True), - 'quantity': fields.float('Quantity',readonly=True), + 'total_quantity': fields.float('# Total Quantity',readonly=True), 'debit' : fields.float('Debit',readonly=True), 'credit' : fields.float('Credit',readonly=True), 'balance' : fields.float('Balance',readonly=True), @@ -43,6 +43,11 @@ class analytic_report(osv.osv): '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), + 'day': fields.char('Day', size=128, readonly=True), + 'nbr':fields.integer('# of Lines', readonly=True), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), + 'type': fields.selection([('view','View'), ('normal','Normal')], 'Account Type'), + 'state': fields.selection([('draft','Draft'), ('open','Open'), ('pending','Pending'), @@ -50,6 +55,7 @@ class analytic_report(osv.osv): ('close','Close'), ('template', 'Template')], 'State', readonly=True), + } _order = 'date_start desc' def init(self, cr): @@ -60,15 +66,18 @@ class analytic_report(osv.osv): min(s.id) as id, to_char(s.create_date, 'YYYY') as year, to_char(s.create_date, 'MM') as month, + to_char(s.create_date, 'YYYY-MM-DD') as day, l.journal_id, l.product_id, s.parent_id, s.date_start, s.date as date_end, s.user_id, + s.company_id, + s.type, s.name, s.partner_id, - s.quantity, + sum(s.quantity) as total_quantity, s.debit, s.credit, s.balance, @@ -77,7 +86,8 @@ class analytic_report(osv.osv): from account_analytic_account s left join account_analytic_line l on (s.id=l.account_id) GROUP BY s.create_date,s.state,l.journal_id,s.name, - s.partner_id,s.date_start,s.date,s.user_id,s.quantity, + s.partner_id,s.date_start,s.date,s.user_id, + s.company_id,s.type, s.debit,s.credit,s.balance,s.parent_id,l.product_id ) """) diff --git a/addons/account/report/account_analytic_report_view.xml b/addons/account/report/account_analytic_report_view.xml index de97bfcb798..25ed33c3902 100644 --- a/addons/account/report/account_analytic_report_view.xml +++ b/addons/account/report/account_analytic_report_view.xml @@ -9,23 +9,26 @@ <tree string="Analytic Accounts Statistics"> <field name="parent_id" invisible="1" string="Analytic Account"/> <field name="product_id" invisible="1"/> - <field name="name"/> - <field name="partner_id"/> - <field name="journal_id" string="Analytic Journal"/> - <field name="user_id"/> - <field name="date_start"/> - <field name="date_end"/> - <field name="quantity"/> + <field name="name" invisible="1"/> + <field name="partner_id" invisible="1"/> + <field name="journal_id" string="Analytic Journal" invisible="1"/> + <field name="user_id" invisible="1"/> + <field name="date_start" invisible="1"/> + <field name="date_end" invisible="1"/> + <field name="total_quantity" sum=" # Total Quantity"/> + <field name="nbr" sum ="# of Lines"/> + <field name="company_id" invisible="1" groups="base.group_multi_company"/> + <field name="type" invisible="1"/> <field name="debit"/> <field name="credit"/> <field name="balance"/> - <field name="state"/> + <field name="state" invisible="1"/> + <field name="day" invisible="1"/> <field name="month" invisible="1"/> <field name="year" invisible="1"/> </tree> </field> </record> - <record id="view_analytic_report_search" model="ir.ui.view"> <field name="name">analytic.report.search</field> <field name="model">analytic.report</field> @@ -38,31 +41,35 @@ domain="[('year','=',time.strftime('%%Y'))]"/> <filter icon="terp-account" string="This Month" + name="This Month" domain="[('month','=',time.strftime('%%m'))]"/> + <filter icon="gtk-media-rewind" + string=" 7 Days " + separator="1" + domain="[('day','<=', time.strftime('%%Y-%%m-%%d')), ('day','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" + help="Entries during last 7 days"/> <separator orientation="vertical"/> - <filter string="Start" icon="terp-account" domain="[('date_start','=',time.strftime('%%Y/%%m/%%d'))]"/> - <filter string="End" icon="terp-account" domain="[('date_end','=',time.strftime('%%Y/%%m/%%d'))]"/> - <separator orientation="vertical"/> + <filter icon="terp-account" + string="Draft" + domain="[('state','=','draft')]"/> + <filter icon="terp-account" + string="Open" + domain="[('state','=','open')]"/> + <filter icon="terp-account" + string="Pending" + domain="[('state','=','pending')]"/> + <separator orientation="vertical"/> <field name="name"/> <field name="user_id" widget="selection"> <filter icon="terp-account" string="My Accounts" - name="User" + help="My Account" domain="[('user_id','=',uid)]"/> </field> <field name="partner_id"/> </group> <newline/> - <group expand="1" string="Extended options..." colspan="10" col="12"> - <filter icon="terp-account" - string="Draft" - domain="[('state','=','draft')]"/> - <filter icon="terp-account" - string="Open" - domain="[('state','=','open')]"/> - <filter icon="terp-account" - string="Pending" - domain="[('state','=','pending')]"/> + <group expand="0" string="Extended options..." colspan="10" col="12"> <filter icon="terp-account" string="Close" domain="[('state','=','close')]"/> @@ -70,40 +77,59 @@ string="Template" domain="[('state','=','template')]"/> <separator orientation="vertical"/> + <field name="company_id" widget="selection" groups="base.group_multi_company"/> <field name="parent_id"/> - <field name="journal_id"/> - <field name="product_id"/> + <field name="journal_id" widget="selection"/> + <newline/> + <field name="product_id" /> + <field name="type"/> <separator orientation="vertical"/> <field name="date_start"/> <field name="date_end"/> </group> <newline/> <group expand="1" string="Group By..." colspan="10" col="12"> - <filter string="Partner" icon="terp-account" context="{'group_by':'partner_id'}"/> - <filter string="User" name='User' icon="terp-account" context="{'group_by':'user_id'}"/> + <filter string="User" name="User" icon="terp-account" context="{'group_by':'user_id'}"/> + <filter string="Associated Partner" icon="terp-account" context="{'group_by':'partner_id'}"/> <separator orientation="vertical"/> - <filter string="Product" icon="terp-account" context="{'group_by':'product_id'}"/> - <filter string="Analytic Journal" icon="terp-account" context="{'group_by':'journal_id'}"/> + <filter string="Company" icon="terp-account" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Analytic Account" icon="terp-account" context="{'group_by':'parent_id'}"/> + <filter string="Analytic Journal" icon="terp-account" context="{'group_by':'journal_id'}"/> + <separator orientation="vertical"/> + <filter string="Product" icon="terp-account" context="{'group_by':'product_id'}"/> + <filter string="Account Type" icon="terp-account" context="{'group_by':'type'}"/> <filter string="State" icon="terp-account" context="{'group_by':'state'}"/> <separator orientation="vertical"/> + <filter string="Day" icon="terp-account" context="{'group_by':'day'}"/> <filter string="Month" icon="terp-account" context="{'group_by':'month'}"/> <filter string="Year" icon="terp-account" context="{'group_by':'year'}"/> </group> </search> </field> </record> - + <record id="view_account_analytic_report_search" model="ir.ui.view"> + <field name="name">account.analytic.report.graph</field> + <field name="model">analytic.report</field> + <field name="type">graph</field> + <field name="arch" type="xml"> + <graph string="Analytic Accounts" type="bar"> + <field name="user_id"/> + <field name="credit" operator="+"/> + <field name="debit" operator="+"/> + <field name="balance" operator="+"/> + <field name="nbr" operator="+"/> + </graph> + </field> + </record> <record id="action_analytic_report_all" model="ir.actions.act_window"> <field name="name">Analytic Accounts</field> <field name="res_model">analytic.report</field> <field name="view_type">form</field> - <field name="view_mode">tree</field> - <field name="context">{'search_default_User':1,'search_default_user_id':uid}</field> + <field name="view_mode">tree,graph</field> + <field name="context">{'search_default_This Month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}</field> <field name="search_view_id" ref="view_analytic_report_search"/> </record> - - <menuitem action="action_analytic_report_all" id="menu_action_analytic_report_all" parent="account.menu_finance_reporting" sequence="0"/> + <menuitem action="action_analytic_report_all" id="menu_action_analytic_report_all" parent="account.menu_finance_statastic_report_statement" sequence="8"/> </data> </openerp> diff --git a/addons/account/report/account_entries_report.py b/addons/account/report/account_entries_report.py new file mode 100644 index 00000000000..85ba8a058f7 --- /dev/null +++ b/addons/account/report/account_entries_report.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import tools +from osv import fields,osv + +class account_entries_report(osv.osv): + _name = "account.entries.report" + _description = "Entries" + _auto = False + _rec_name = 'date' + _columns = { + 'date': fields.date('Effective Date', readonly=True), + 'date_created': fields.date('Date Created', readonly=True), + 'date_maturity': fields.date('Date Maturity', readonly=True), + 'nbr':fields.integer('# of Entries', readonly=True), + 'nbl':fields.integer('# of Lines', readonly=True), + 'amount': fields.float('Amount',readonly=True), + 'year': fields.char('Year', size=4, readonly=True), + 'day': fields.char('Day', size=128, 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), + 'ref': fields.char('Reference', size=64,readonly=True), + 'period_id': fields.many2one('account.period', 'Period', readonly=True), + 'account_id': fields.many2one('account.account', 'Account', readonly=True), + 'journal_id': fields.many2one('account.journal', 'Journal', readonly=True), + 'product_id': fields.many2one('product.product', 'Product', readonly=True), + 'state': fields.selection([('draft','Draft'), ('posted','Posted')], 'State',readonly=True, + help='When new account move is created the state will be \'Draft\'. When all the payments are done it will be in \'Posted\' state.'), + 'state_2': fields.selection([('draft','Draft'), ('valid','Valid')], 'State of Move Line', readonly=True, + help='When new move line is created the state will be \'Draft\'.\n* When all the payments are done it will be in \'Valid\' state.'), + 'partner_id': fields.many2one('res.partner','Partner', readonly=True), + 'period_id2': fields.many2one('account.period', 'Move Line Period', readonly=True), + 'analytic_account_id' : fields.many2one('account.analytic.account', 'Analytic Account', readonly=True), + 'journal_id2': fields.many2one('account.journal', 'Move Line Journal', readonly=True), + 'type': fields.selection([ + ('pay_voucher','Cash Payment'), + ('bank_pay_voucher','Bank Payment'), + ('rec_voucher','Cash Receipt'), + ('bank_rec_voucher','Bank Receipt'), + ('cont_voucher','Contra'), + ('journal_sale_vou','Journal Sale'), + ('journal_pur_voucher','Journal Purchase'), + ('journal_voucher','Journal Voucher'), + ],'Type',readonly=True), + 'quantity': fields.float('Products Quantity', digits=(16,2), readonly=True), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), + } + _order = 'date desc' + + def init(self, cr): + tools.drop_view_if_exists(cr, 'account_entries_report') + cr.execute(""" + create or replace view account_entries_report as ( + select + min(l.id) as id, + am.ref as ref, + sum(l.quantity) as quantity, + am.state as state, + l.state as state_2, + am.date as date, + count(l.id) as nbr, + count(distinct am.id) as nbl, + l.debit as amount, + to_char(am.date, 'YYYY') as year, + to_char(am.date, 'MM') as month, + to_char(am.date, 'YYYY-MM-DD') as day, + am.company_id as company_id, + l.account_id as account_id, + l.analytic_account_id as analytic_account_id, + l.date_created as date_created, + l.date_maturity as date_maturity, + am.journal_id as journal_id, + l.journal_id as journal_id2, + l.period_id as period_id2, + am.period_id as period_id, + l.partner_id as partner_id, + l.product_id as product_id, + am.type as type + from + account_move_line l + left join + account_move am on (am.id=l.move_id) + group by am.ref, + am.state, + am.date, + am.company_id, + am.journal_id, + l.journal_id, + am.period_id, + l.period_id, + am.type, + l.partner_id, + l.analytic_account_id, + l.product_id, + l.date_created, + l.date_maturity, + l.account_id, + l.state, + l.debit + ) + """) + +account_entries_report() diff --git a/addons/account/report/account_entries_report_view.xml b/addons/account/report/account_entries_report_view.xml new file mode 100644 index 00000000000..c6308ec9928 --- /dev/null +++ b/addons/account/report/account_entries_report_view.xml @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + <record id="view_account_entries_report_tree" model="ir.ui.view"> + <field name="name">account.entries.report.tree</field> + <field name="model">account.entries.report</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree string="Invoices Statistics"> + <field name="date" invisible="1"/> + <field name="date_created" invisible="1"/> + <field name="date_maturity" invisible="1"/> + <field name="ref" invisible="1"/> + <field name="state" invisible="1"/> + <field name="state_2" invisible="1"/> + <field name="year" invisible="1"/> + <field name="day" invisible="1"/> + <field name="month" invisible="1"/> + <field name="partner_id" invisible="1"/> + <field name="product_id" invisible="1"/> + <field name="company_id" invisible="1" groups="base.group_multi_company"/> + <field name="journal_id" invisible="1"/> + <field name="account_id" invisible="1"/> + <field name="analytic_account_id" invisible="1"/> + <field name="period_id" invisible="1"/> + <field name="period_id2" invisible="1"/> + <field name="type" invisible="1"/> + <field name="nbr" sum="# of Entries "/> + <field name="nbl" sum="# of Lines "/> + <field name="amount" sum="# of Amount "/> + <field name="quantity" sum="# of Products Qty "/> + </tree> + </field> + </record> + <record id="view_account_entries_report_graph" model="ir.ui.view"> + <field name="name">account.entries.report.graph</field> + <field name="model">account.entries.report</field> + <field name="type">graph</field> + <field name="arch" type="xml"> + <graph string="Entries" type="bar"> + <field name="partner_id"/> + <field name="amount"/> + </graph> + </field> + </record> + <record id="view_account_entries_report_search" model="ir.ui.view"> + <field name="name">account.entries.report.search</field> + <field name="model">account.entries.report</field> + <field name="type">search</field> + <field name="arch" type="xml"> + <search string="Entries"> + <group colspan="10" col="12"> + <filter icon="terp-account" string="This Year" + domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" + help="Entries of the year"/> + <filter icon="terp-account" string="This Month" + name="This Month" + domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]" + help="Entries of this month"/> + <filter icon="gtk-media-rewind" + string=" 7 Days " + separator="1" + domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" + help="Entries during last 7 days"/> + <separator orientation="vertical"/> + <filter string="Draft" + icon="terp-account" + domain="[('state','=','draft')]" + help = "Draft tasks"/> + <separator orientation="vertical"/> + <field name="journal_id" widget="selection"/> + <field name="account_id"/> + <field name="company_id" widget="selection" groups="base.group_multi_company"/> + <field name="partner_id" /> + </group> + <newline/> + <group expand="0" string="Extended options..." colspan="10" col="12"> + <filter string="Posted" + icon="terp-account" + domain="[('state','=','posted')]" + help = "Posted tasks"/> + <field name="state_2"/> + <separator orientation="vertical"/> + <field name="period_id" widget="selection"/> + <field name="period_id2" widget="selection"/> + <field name="type"/> + <field name="product_id" /> + <field name="analytic_account_id"/> + <newline/> + <separator orientation="vertical"/> + <field name="date_created"/> + <field name="date"/> + <field name="date_maturity"/> + </group> + <newline/> + <group expand="1" string="Group By..." colspan="10" col="12"> + <filter string="Journal" name="Journal" icon="terp-account" context="{'group_by':'journal_id'}"/> + <filter string="Account" name="Account" icon="terp-account" context="{'group_by':'account_id'}"/> + <filter string="Analytic Account" name="Analytic Account" icon="terp-account" context="{'group_by':'analytic_account_id'}"/> + <filter string="Company" icon="terp-account" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> + <filter string="Partner" icon="terp-account" context="{'group_by':'partner_id'}"/> + <filter string="Product" icon="terp-account" context="{'group_by':'product_id'}"/> + <separator orientation="vertical"/> + <filter string="State" icon="terp-account" context="{'group_by':'state'}"/> + <filter string="State of Move Line" icon="terp-account" context="{'group_by':'state_2'}"/> + <filter string="Period" icon="terp-account" context="{'group_by':'period_id'}"/> + <filter string="Period of Move Line" icon="terp-account" context="{'group_by':'period_id2'}"/> + <filter string="Type" icon="terp-account" context="{'group_by':'type'}"/> + <separator orientation="vertical"/> + <filter string="Day" icon="terp-account" context="{'group_by':'day'}"/> + <filter string="Month" icon="terp-account" context="{'group_by':'month'}"/> + <filter string="Year" icon="terp-account" context="{'group_by':'year'}"/> + </group> + </search> + </field> + </record> + <record id="action_account_entries_report_all" model="ir.actions.act_window"> + <field name="name">Entries</field> + <field name="res_model">account.entries.report</field> + <field name="view_type">form</field> + <field name="view_mode">tree,graph</field> + <field name="context">{'search_default_This Month':1,'search_default_Journal':1,'group_by_no_leaf':1,'group_by':[]}</field> + <field name="search_view_id" ref="view_account_entries_report_search"/> + </record> + <menuitem action="action_account_entries_report_all" id="menu_action_account_entries_report_all" parent="account.menu_finance_statastic_report_statement" sequence="2"/> +</data> +</openerp> diff --git a/addons/account/report/account_invoice_report.py b/addons/account/report/account_invoice_report.py index 36fa5a0d132..cd1477e79cf 100644 --- a/addons/account/report/account_invoice_report.py +++ b/addons/account/report/account_invoice_report.py @@ -61,6 +61,13 @@ class account_invoice_report(osv.osv): ('paid','Done'), ('cancel','Cancelled') ], 'Order State', readonly=True), + 'date_due': fields.date('Due Date', readonly=True), + 'address_contact_id': fields.many2one('res.partner.address', 'Contact Address Name', readonly=True), + 'address_invoice_id': fields.many2one('res.partner.address', 'Invoice Address Name', readonly=True), + 'account_id': fields.many2one('account.account', 'Account',readonly=True), + 'partner_bank': fields.many2one('res.partner.bank', 'Bank Account',readonly=True), + 'residual':fields.float('Total Residual', readonly=True), + 'delay_to_pay':fields.float('Avg. Delay To Pay', readonly=True, group_operator="avg"), } _order = 'date desc' def init(self, cr): @@ -87,12 +94,24 @@ class account_invoice_report(osv.osv): (sum(l.quantity*l.price_unit)/sum(l.quantity * u.factor))::decimal(16,2) as price_average, count(*) as nbr, s.type as type, - s.state - from + s.state, + s.date_due as date_due, + s.address_contact_id as address_contact_id, + s.address_invoice_id as address_invoice_id, + s.account_id as account_id, + s.partner_bank as partner_bank, + s.residual as residual, + case when s.state != 'paid' then null else + extract(epoch from avg(am.date_created-l.create_date))/(24*60*60)::decimal(16,2) + end as delay_to_pay + from account_invoice_line l left join account_invoice s on (s.id=l.invoice_id) - left join product_uom u on (u.id=l.uos_id) + left join product_uom u on (u.id=l.uos_id), + account_move_line am left join account_invoice i on (i.move_id=am.move_id) + where + am.account_id=i.account_id group by s.type, s.date_invoice, @@ -101,12 +120,18 @@ class account_invoice_report(osv.osv): l.uos_id, s.user_id, s.state, + s.residual, s.company_id, s.payment_term, s.period_id, s.fiscal_position, s.currency_id, - s.journal_id + s.journal_id, + s.date_due, + s.address_contact_id, + s.address_invoice_id, + s.account_id, + s.partner_bank ) """) account_invoice_report() diff --git a/addons/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml index 5a833e454fb..0aad5dca794 100644 --- a/addons/account/report/account_invoice_report_view.xml +++ b/addons/account/report/account_invoice_report_view.xml @@ -17,7 +17,6 @@ <field name="partner_id" invisible="1"/> <field name="product_id" invisible="1"/> <field name="product_qty" invisible="1"/> - <!--field name="delay" avg="Days to Close"/--> <field name="nbr" sum="# of Lines"/> <field name="price_average" avg="Average Price"/> <field name="price_total" sum="Total Price"/> @@ -27,6 +26,13 @@ <field name="fiscal_position" invisible="1"/> <field name="currency_id" invisible="1"/> <field name="journal_id" invisible="1"/> + <field name="date_due" invisible="1"/> + <field name="address_contact_id" invisible="1"/> + <field name="address_invoice_id" invisible="1"/> + <field name="account_id" invisible="1"/> + <field name="partner_bank" invisible="1"/> + <field name="residual" sum="Total Residual"/> + <field name="delay_to_pay" avg="Avg. Delay To Pay"/> </tree> </field> </record> @@ -49,14 +55,14 @@ <field name="type">search</field> <field name="arch" type="xml"> <search string="Invoices"> - <group> - <filter icon="terp-account" string="This Year" + <group col="10" colspan="12"> + <filter icon="terp-account" string="Last 365 Days" domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" - help="Invoices of the year"/> - <filter icon="terp-account" string="This Month" + help="Invoices of last 365 days"/> + <filter icon="terp-account" string="Last 30 Days" name="month" domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]" - help="Invoices of this month"/> + help="Invoices of last 30 days"/> <filter icon="gtk-media-rewind" string=" 7 Days " separator="1" @@ -75,10 +81,13 @@ icon="terp-account" domain="[('state', '=' ,'open')]" help = "In progress tasks"/> + <filter string="Done" + icon="terp-account" + domain="[('state','=','paid')]" + help = "Done tasks"/> <separator orientation="vertical"/> - <field name="product_id"/> - <field name="user_id" widget="selection"> - + <field name="partner_id"/> + <field name="user_id" widget="selection"> <filter icon="terp-account" string="My Invoices" help = "My Invoices" @@ -87,49 +96,50 @@ string="Invoices Non Users" help="Invoices Non Users" domain="[('user_id','=',False)]"/> - </field> - <field name="partner_id"/> - <field name="company_id" groups="base.group_multi_company" widget="selection"/> + </field> </group> <newline/> <group expand="0" string="Extended options..." colspan="10" col="12"> - <filter string="Done" - icon="terp-account" - domain="[('state','=','paid')]" - help = "Done tasks"/> - <filter string="Cancelled" - icon="terp-account" - domain="[('state', '=' ,'cancel')]" - help = "Cancelled tasks"/> - <separator orientation="vertical"/> - <field name="payment_term" widget="selection"/> - <field name="currency_id" widget="selection"/> - <field name="journal_id" widget="selection"/> + <field name="type"/> + <field name="currency_id" widget="selection"/> + <field name="partner_bank" widget="selection"/> + <field name="fiscal_position" widget="selection"/> + <separator orientation="vertical"/> + <field name="address_contact_id"/> + <field name="account_id"/> + <newline/> + <field name="payment_term" widget="selection"/> + <field name="journal_id" widget="selection"/> + <field name="period_id" widget="selection"/> + <field name="company_id" groups="base.group_multi_company" widget="selection"/> + <separator orientation="vertical"/> + <field name="address_invoice_id"/> + <field name="product_id"/> <newline/> - <field name="type"/> - <field name="period_id" widget="selection"/> - <field name="fiscal_position" widget="selection"/> - <field name="date"/> + <field name="date" string="Date Invoiced"/> + <field name="date_due"/> </group> <newline/> <group expand="1" string="Group By..." colspan="10" col="12"> - <filter string="Company" icon="terp-account" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Salesman" name='User' icon="terp-account" context="{'group_by':'user_id'}"/> - <filter string="Payment Term" icon="terp-account" context="{'group_by':'payment_term'}"/> - <separator orientation="vertical"/> - <filter string="Currency" icon="terp-account" context="{'group_by':'currency_id'}"/> - <filter string="Journal" icon="terp-account" context="{'group_by':'journal_id'}"/> + <filter string="Partner" icon="terp-account" context="{'group_by':'partner_id'}"/> <filter string="Product" icon="terp-account" context="{'group_by':'product_id'}"/> <separator orientation="vertical"/> - <filter string="Partner" icon="terp-account" context="{'group_by':'partner_id'}"/> - <filter string="Type" icon="terp-account" context="{'group_by':'type'}"/> + <filter string="Company" icon="terp-account" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="State" icon="terp-account" context="{'group_by':'state'}"/> + <filter string="Type" icon="terp-account" context="{'group_by':'type'}"/> <separator orientation="vertical"/> + <filter string="Journal" icon="terp-account" context="{'group_by':'journal_id'}"/> + <filter string="Account" icon="terp-account" context="{'group_by':'account_id'}"/> + <filter string="Bank Account" icon="terp-account" context="{'group_by':'partner_bank'}"/> + <separator orientation="vertical"/> + <filter string="Currency" icon="terp-account" context="{'group_by':'currency_id'}"/> + <filter string="Payment Term" icon="terp-account" context="{'group_by':'payment_term'}"/> <filter string="Force Period" icon="terp-account" context="{'group_by':'period_id'}"/> <filter string="Fiscal Position" icon="terp-account" context="{'group_by':'fiscal_position'}"/> - <separator orientation="vertical"/> + <newline/> <filter string="Day" icon="terp-account" context="{'group_by':'day'}"/> - <filter string="Month" icon="terp-account" context="{'group_by':'date'}"/> + <filter string="Month" icon="terp-account" context="{'group_by':'month'}"/> <filter string="Year" icon="terp-account" context="{'group_by':'year'}"/> </group> </search> @@ -145,7 +155,7 @@ <field name="search_view_id" ref="view_account_invoice_report_search"/> </record> - <menuitem action="action_account_invoice_report_all" id="menu_action_account_invoice_report_all" parent="account.menu_finance_reporting" sequence="0"/> + <menuitem action="action_account_invoice_report_all" id="menu_action_account_invoice_report_all" parent="account.menu_finance_statastic_report_statement" sequence="0"/> </data> </openerp> diff --git a/addons/account/report/account_report_view.xml b/addons/account/report/account_report_view.xml index f0f67b477e3..9b1688730aa 100644 --- a/addons/account/report/account_report_view.xml +++ b/addons/account/report/account_report_view.xml @@ -47,7 +47,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,graph</field> </record> - <menuitem action="action_account_receivable_graph" id="menu_account_receivable_graph" parent="account.menu_finance_reporting"/> + <!-- <menuitem action="action_account_receivable_graph" id="menu_account_receivable_graph" parent="account.menu_finance_reporting"/> --> <!-- Report for Aged Receivable --> @@ -116,7 +116,7 @@ </record> <!-- <menuitem id="menu_report_this_month" name="This Month" parent="account.menu_finance_reporting"/>--> - <menuitem id="menu_report_all_months" name="Sales by Account" parent="account.menu_finance_reporting"/> + <!-- <menuitem id="menu_report_all_months" name="Sales by Account" parent="account.menu_finance_reporting"/> --> <!-- Report of the sales by product and account --> <record id="view_report_account_sales_tree" model="ir.ui.view"> <field name="name">report.account.sales.tree</field> @@ -169,7 +169,7 @@ <field name="view_mode">graph,tree</field> <field name="search_view_id" ref="view_report_account_sales_search"/> </record> - <menuitem action="action_report_account_sales_tree_all" id="menu_report_account_sales_all" parent="menu_report_all_months"/> + <!-- <menuitem action="action_report_account_sales_tree_all" id="menu_report_account_sales_all" parent="menu_report_all_months"/> --> <!-- Report of the sales by product and account type --> <record id="view_report_account_type_sales_tree" model="ir.ui.view"> @@ -237,7 +237,7 @@ <field name="view_mode">graph,tree</field> <field name="search_view_id" ref="view_report_account_type_sales_search"/> </record> - <menuitem action="action_report_account_type_sales_tree_all" id="menu_report_account_type_sales_all" parent="menu_report_all_months"/> + <!-- <menuitem action="action_report_account_type_sales_tree_all" id="menu_report_account_type_sales_all" parent="menu_report_all_months"/> --> </data> </openerp> diff --git a/addons/account_coda/__init__.py b/addons/account_coda/__init__.py new file mode 100644 index 00000000000..af866f5dc70 --- /dev/null +++ b/addons/account_coda/__init__.py @@ -0,0 +1,25 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import coda +import wizard +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/account_coda/__openerp__.py b/addons/account_coda/__openerp__.py new file mode 100644 index 00000000000..306098d137b --- /dev/null +++ b/addons/account_coda/__openerp__.py @@ -0,0 +1,39 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +{ + "name":"Account CODA - import bank statements from coda file", + "version":"1.0", + "author":"Tiny", + "category":"Account CODA", + "description":"""Module provides functionality to import + bank statements from coda files. + """, + "depends":["base", "account"], + "demo_xml":["coda_demo.xml"], + "init_xml":[], + "update_xml" : ["security/ir.model.access.csv","coda_wizard.xml","coda_view.xml"], + "active":False, + "installable":True, + +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/account_coda/coda.py b/addons/account_coda/coda.py new file mode 100644 index 00000000000..f37b563c245 --- /dev/null +++ b/addons/account_coda/coda.py @@ -0,0 +1,50 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import time +from osv import osv,fields + +class account_coda(osv.osv): + _name = "account.coda" + _description = "coda for an Account" + _columns = { + 'name': fields.binary('Coda file', readonly=True), + 'statement_ids': fields.one2many('account.bank.statement','coda_id','Generated Bank Statement', readonly=True), + 'note': fields.text('Import log', readonly=True), + 'journal_id': fields.many2one('account.journal','Bank Journal', readonly=True,select=True), + 'date': fields.date('Import Date', readonly=True,select=True), + 'user_id': fields.many2one('res.users','User', readonly=True, select=True), + } + _defaults = { + 'date': lambda *a: time.strftime('%Y-%m-%d'), + 'user_id': lambda self,cr,uid,context: uid, + } +account_coda() + +class account_bank_statement(osv.osv): + _inherit = "account.bank.statement" + _columns = { + 'coda_id':fields.many2one('account.coda','Coda'), + } +account_bank_statement() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/account_coda/coda_demo.xml b/addons/account_coda/coda_demo.xml new file mode 100644 index 00000000000..f91d34d4cbc --- /dev/null +++ b/addons/account_coda/coda_demo.xml @@ -0,0 +1,5 @@ +<?xml version="1.0"?> +<openerp> +<data noupdate="1"> +</data> +</openerp> diff --git a/addons/account_coda/coda_view.xml b/addons/account_coda/coda_view.xml new file mode 100644 index 00000000000..3813fe40bf0 --- /dev/null +++ b/addons/account_coda/coda_view.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" ?> +<openerp> +<data> + + <record model="ir.ui.view" id="view_account_coda_form"> + <field name="name">account.coda.form</field> + <field name="model">account.coda</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Coda import"> + <field name="name" /> + <field name="journal_id" /> + <field name="date" /> + <field name="user_id" /> + <notebook colspan="4"> + <page string="Log"> + <field name="note" colspan="4"/> + </page> + <page string="Statements"> + <field name="statement_ids" colspan="4"/> + </page> + </notebook> + </form> + </field> + </record> + + + <record model="ir.ui.view" id="view_account_coda_tree"> + <field name="name">account.coda.tree</field> + <field name="model">account.coda</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree string="Coda import"> + <field name="journal_id" /> + <field name="date" /> + <field name="user_id" /> + </tree> + </field> + </record> + + <record model="ir.actions.act_window" id="action_account_coda"> + <field name="name">Coda import</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">account.coda</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + </record> + + <menuitem name="Coda Statements" parent="account.menu_finance_reporting" id="menu_account_coda" action="action_account_coda" sequence="12"/> + + <menuitem name="Import Coda Statements" action="wizard_account_coda_import" parent="account.menu_finance_periodical_processing" + type="wizard" id="menu_account_coda_wizard" sequence="15"/> + + <act_window name="Coda File" + domain="[('statement_ids', 'in', [active_id])]" + res_model="account.coda" + src_model="account.bank.statement" + view_type="form" + view_mode="tree,form" + id="act_account_payment_account_bank_statement"/> + + </data> +</openerp> diff --git a/addons/account_coda/coda_wizard.xml b/addons/account_coda/coda_wizard.xml new file mode 100644 index 00000000000..ecd8eb65913 --- /dev/null +++ b/addons/account_coda/coda_wizard.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" ?> +<openerp> + <data> + + <wizard + string="Import Coda File" + model="account.bank.statement" + name="account.coda_import" + id="wizard_account_coda_import" + menu="False" + /> + </data> +</openerp> diff --git a/addons/account_coda/i18n/account_coda.pot b/addons/account_coda/i18n/account_coda.pot new file mode 100644 index 00000000000..348fb035c0d --- /dev/null +++ b/addons/account_coda/i18n/account_coda.pot @@ -0,0 +1,163 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * account_coda +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 5.0.6\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2009-11-24 13:11:29+0000\n" +"PO-Revision-Date: 2009-11-24 13:11:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_coda +#: field:account.coda,journal_id:0 +#: wizard_field:account.coda_import,init,journal_id:0 +msgid "Bank Journal" +msgstr "" + +#. module: account_coda +#: constraint:ir.model:0 +msgid "The Object name must start with x_ and not contain any special character !" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,extraction,note:0 +msgid "Log" +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,extraction,open:0 +msgid "_Open Statement" +msgstr "" + +#. module: account_coda +#: model:ir.module.module,shortdesc:account_coda.module_meta_information +msgid "Account CODA" +msgstr "" + +#. module: account_coda +#: field:account.coda,name:0 +msgid "Coda file" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,init:0 +msgid "Clic on 'New' to select your file :" +msgstr "" + +#. module: account_coda +#: model:ir.actions.wizard,name:account_coda.wizard_account_coda_import +msgid "Import Coda File" +msgstr "" + +#. module: account_coda +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "" + +#. module: account_coda +#: field:account.coda,note:0 +msgid "Import log" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,def_receivable:0 +msgid "Default receivable Account" +msgstr "" + +#. module: account_coda +#: model:ir.module.module,description:account_coda.module_meta_information +msgid "Module provides functionality to import\n" +" bank statements from .csv file.\n" +" Import coda file wizard is used to import bank statements." +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,extraction,end:0 +msgid "_Close" +msgstr "" + +#. module: account_coda +#: field:account.coda,statement_id:0 +msgid "Generated Bank Statement" +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement +#: model:ir.actions.act_window,name:account_coda.action_account_coda +msgid "Coda import" +msgstr "" + +#. module: account_coda +#: field:account.coda,user_id:0 +msgid "User" +msgstr "" + +#. module: account_coda +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "" + +#. module: account_coda +#: model:ir.model,name:account_coda.model_account_coda +msgid "coda for an Account" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,def_payable:0 +msgid "Default Payable Account" +msgstr "" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda +msgid "Coda Statements" +msgstr "" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda_wizard +msgid "Import Coda Statements" +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,init,extraction:0 +msgid "_Ok" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,extraction:0 +#: wizard_view:account.coda_import,init:0 +msgid "Import Coda Statement" +msgstr "" + +#. module: account_coda +#: field:account.bank.statement,coda_id:0 +msgid "Coda" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,extraction:0 +msgid "Results :" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,coda:0 +msgid "Coda File" +msgstr "" + +#. module: account_coda +#: field:account.coda,date:0 +msgid "Import Date" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,init:0 +msgid "Select your bank journal :" +msgstr "" + diff --git a/addons/account_coda/i18n/fr_BE.po b/addons/account_coda/i18n/fr_BE.po new file mode 100644 index 00000000000..348fb035c0d --- /dev/null +++ b/addons/account_coda/i18n/fr_BE.po @@ -0,0 +1,163 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * account_coda +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 5.0.6\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2009-11-24 13:11:29+0000\n" +"PO-Revision-Date: 2009-11-24 13:11:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_coda +#: field:account.coda,journal_id:0 +#: wizard_field:account.coda_import,init,journal_id:0 +msgid "Bank Journal" +msgstr "" + +#. module: account_coda +#: constraint:ir.model:0 +msgid "The Object name must start with x_ and not contain any special character !" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,extraction,note:0 +msgid "Log" +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,extraction,open:0 +msgid "_Open Statement" +msgstr "" + +#. module: account_coda +#: model:ir.module.module,shortdesc:account_coda.module_meta_information +msgid "Account CODA" +msgstr "" + +#. module: account_coda +#: field:account.coda,name:0 +msgid "Coda file" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,init:0 +msgid "Clic on 'New' to select your file :" +msgstr "" + +#. module: account_coda +#: model:ir.actions.wizard,name:account_coda.wizard_account_coda_import +msgid "Import Coda File" +msgstr "" + +#. module: account_coda +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "" + +#. module: account_coda +#: field:account.coda,note:0 +msgid "Import log" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,def_receivable:0 +msgid "Default receivable Account" +msgstr "" + +#. module: account_coda +#: model:ir.module.module,description:account_coda.module_meta_information +msgid "Module provides functionality to import\n" +" bank statements from .csv file.\n" +" Import coda file wizard is used to import bank statements." +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,extraction,end:0 +msgid "_Close" +msgstr "" + +#. module: account_coda +#: field:account.coda,statement_id:0 +msgid "Generated Bank Statement" +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement +#: model:ir.actions.act_window,name:account_coda.action_account_coda +msgid "Coda import" +msgstr "" + +#. module: account_coda +#: field:account.coda,user_id:0 +msgid "User" +msgstr "" + +#. module: account_coda +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "" + +#. module: account_coda +#: model:ir.model,name:account_coda.model_account_coda +msgid "coda for an Account" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,def_payable:0 +msgid "Default Payable Account" +msgstr "" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda +msgid "Coda Statements" +msgstr "" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda_wizard +msgid "Import Coda Statements" +msgstr "" + +#. module: account_coda +#: wizard_button:account.coda_import,init,extraction:0 +msgid "_Ok" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,extraction:0 +#: wizard_view:account.coda_import,init:0 +msgid "Import Coda Statement" +msgstr "" + +#. module: account_coda +#: field:account.bank.statement,coda_id:0 +msgid "Coda" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,extraction:0 +msgid "Results :" +msgstr "" + +#. module: account_coda +#: wizard_field:account.coda_import,init,coda:0 +msgid "Coda File" +msgstr "" + +#. module: account_coda +#: field:account.coda,date:0 +msgid "Import Date" +msgstr "" + +#. module: account_coda +#: wizard_view:account.coda_import,init:0 +msgid "Select your bank journal :" +msgstr "" + diff --git a/addons/account_coda/security/ir.model.access.csv b/addons/account_coda/security/ir.model.access.csv new file mode 100644 index 00000000000..9c1e0a486dc --- /dev/null +++ b/addons/account_coda/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_account_coda","account.coda","model_account_coda","account.group_account_user",1,0,0,0 +"access_account_coda_manager","account.coda","model_account_coda","account.group_account_manager",1,1,1,1
\ No newline at end of file diff --git a/addons/account_coda/statement_coda.txt b/addons/account_coda/statement_coda.txt new file mode 100644 index 00000000000..44fe70220ca --- /dev/null +++ b/addons/account_coda/statement_coda.txt @@ -0,0 +1,10 @@ +0000006060712505 00000CPH CODA TINY 0047747270100477472701 00000 1
+1 049126201326907 EUR0BE 0000000015632900050607TINY COMPTE COURANT ORDINAIRE 049
+2100010000 0000000001150000060607001500000INVOICE OF 2006-12-19 0606070020100
+2200010000 EUR000000001150000 100
+2300010000301915554082 PROLIBRE SARL CAROUGE GE 000
+2100020000 0000000000500000060607001500000CONTRACT PARTNER ERREUR ECART YEA 0606070030100
+2200020000RTY CONTRACT PARTNER EUR000000000500000 100
+2300020000050000000017 SEDNACOM 43 ALLEE DES FOUGERES 9522 0 HERBLAY 000
+8049126201326907 0000000017282900060607
+9 000008000000000000000000000001650000 2
diff --git a/addons/account_coda/wizard/__init__.py b/addons/account_coda/wizard/__init__.py new file mode 100644 index 00000000000..72d3b950cf7 --- /dev/null +++ b/addons/account_coda/wizard/__init__.py @@ -0,0 +1,25 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import coda_import + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/account_coda/wizard/coda_import.py b/addons/account_coda/wizard/coda_import.py new file mode 100644 index 00000000000..5e1ffa365e8 --- /dev/null +++ b/addons/account_coda/wizard/coda_import.py @@ -0,0 +1,339 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import pooler +import time +import datetime +import wizard +import netsvc +import base64 +from osv import osv +from tools.translate import _ + +codawiz_form = """<?xml version="1.0"?> +<form string="Import Coda Statement"> +<separator colspan="4" string="Select your bank journal :" /> + <field name="journal_id" colspan="1" domain="[('type','=','cash')]" /> + <newline /> + <field name="def_payable" /> <field name="def_receivable" /> + <newline /> + <field name="awaiting_account" /> + <separator string="Clic on 'New' to select your file :" colspan="4"/> + <field name="coda"/> +</form> +""" + +codawiz_fields = { + 'journal_id' : { + 'string':'Bank Journal', + 'type':'many2one', + 'relation':'account.journal', + 'required':True, + + }, + 'coda' : { + 'string':'Coda File', + 'type':'binary', + 'required':True, + }, + 'def_payable' : { + 'string' : 'Default Payable Account', + 'type' : 'many2one', + 'relation': 'account.account', + 'required':True, + 'domain':[('type','=','payable')], + 'help': 'Set here the payable account that will be used, by default, if the partner is not found', + }, + 'def_receivable' : { + 'string' : 'Default receivable Account', + 'type' : 'many2one', + 'relation': 'account.account', + 'required':True, + 'domain':[('type','=','receivable')], + 'help': 'Set here the receivable account that will be used, by default, if the partner is not found', + }, + 'awaiting_account' : { + 'string' : 'Default Account for Unrecognized Movement', + 'type' : 'many2one', + 'relation': 'account.account', + 'required':True, + 'help': 'Set here the default account that will be used, if the partner is found but does not have the bank account , or if he is domiciled', + + } + +} + +result_form = """<?xml version="1.0"?> +<form string="Import Coda Statement"> +<separator colspan="4" string="Results :" /> + <field name="note" colspan="4" nolabel="1" width="500"/> +</form> +""" + +result_fields = { + + 'note' : {'string':'Log','type':'text'} + +} + + +def _coda_parsing(self, cr, uid, data, context): + pool = pooler.get_pool(cr.dbname) + codafile = data['form']['coda'] + journal_code = pool.get('account.journal').browse(cr, uid, data['form']['journal_id'], context).code + def_pay_acc = data['form']['def_payable'] + def_rec_acc = data['form']['def_receivable'] + + str_log = "" + err_log = "Errors:\n------\n" + nb_err=0 + std_log='' + str_log1 = "Coda File is Imported : " + str_not='' + str_not1='' + + bank_statements=[] + recordlist = base64.decodestring(codafile).split('\n') + recordlist.pop() + for line in recordlist: + if line[0] == '0': + # header data + bank_statement = {} + bank_statement["bank_statement_line"]={} + bank_statement_lines = {} + bank_statement['date'] = str2date(line[5:11]) + bank_statement['journal_id']=data['form']['journal_id'] + period_id = pool.get('account.period').search(cr,uid,[('date_start','<=',time.strftime('%Y-%m-%d',time.strptime(bank_statement['date'],"%y/%m/%d"))),('date_stop','>=',time.strftime('%Y-%m-%d',time.strptime(bank_statement['date'],"%y/%m/%d")))]) + bank_statement['period_id'] = period_id[0] + bank_statement['state']='draft' + elif line[0] == '1': + # old balance data + bal_start = list2float(line[43:58]) + if line[42] == '1': + bal_start = - bal_start + bank_statement["balance_start"]= bal_start + bank_statement["acc_number"]=line[5:17] + bank_statement["acc_holder"]=line[64:90] + bank_statement['name'] = journal_code + ' ' + str(line[2:5]) + + elif line[0]=='2': + # movement data record 2 + if line[1]=='1': + # movement data record 2.1 + if bank_statement_lines.has_key(line[2:6]): + continue + st_line = {} + st_line['extra_note'] = '' + st_line['statement_id']=0 + st_line['ref'] = line[2:10] + st_line['date'] = time.strftime('%Y-%m-%d',time.strptime(str2date(line[115:121]),"%y/%m/%d")), + st_line_amt = list2float(line[32:47]) + + if line[61]=='1': + st_line['toreconcile'] = True + st_line['name']=line[65:77] + else: + st_line['toreconcile'] = False + st_line['name']=line[62:115] + + st_line['free_comm'] = st_line['name'] + st_line['val_date']=time.strftime('%Y-%m-%d',time.strptime(str2date(line[47:53]),"%y/%m/%d")), + st_line['entry_date']=time.strftime('%Y-%m-%d',time.strptime(str2date(line[115:121]),"%y/%m/%d")), + st_line['partner_id']=0 + if line[31] == '1': + st_line_amt = - st_line_amt + st_line['account_id'] = def_pay_acc + else: + st_line['account_id'] = def_rec_acc + st_line['amount'] = st_line_amt + bank_statement_lines[line[2:6]]=st_line + bank_statement["bank_statement_line"]=bank_statement_lines + elif line[1] == '2': + st_line_name = line[2:6] + bank_statement_lines[st_line_name].update({'account_id': data['form']['awaiting_account']}) + + elif line[1] == '3': + # movement data record 3.1 + st_line_name = line[2:6] + st_line_partner_acc = str(line[10:47]).strip() + cntry_number=line[10:47].strip() + contry_name=line[47:125].strip() + bank_ids = pool.get('res.partner.bank').search(cr,uid,[('acc_number','=',st_line_partner_acc)]) + bank_statement_lines[st_line_name].update({'cntry_number': cntry_number, 'contry_name': contry_name}) + if bank_ids: + bank = pool.get('res.partner.bank').browse(cr,uid,bank_ids[0],context) + if line and bank.partner_id: + bank_statement_lines[st_line_name].update({'partner_id': bank.partner_id.id}) + if bank_statement_lines[st_line_name]['amount'] < 0 : + bank_statement_lines[st_line_name].update({'account_id': bank.partner_id.property_account_payable.id}) + else : + bank_statement_lines[st_line_name].update({'account_id': bank.partner_id.property_account_receivable.id}) + else: + nb_err += 1 + err_log += _('The bank account %s is not defined for the partner %s.\n')%(cntry_number,contry_name) + bank_statement_lines[st_line_name].update({'account_id': data['form']['awaiting_account']}) + + bank_statement["bank_statement_line"]=bank_statement_lines + elif line[0]=='3': + if line[1] == '1': + st_line_name = line[2:6] + bank_statement_lines[st_line_name]['extra_note'] += '\n' + line[40:113] + elif line[1] == '2': + st_line_name = line[2:6] + bank_statement_lines[st_line_name]['extra_note'] += '\n' + line[10:115] + elif line[1] == '3': + st_line_name = line[2:6] + bank_statement_lines[st_line_name]['extra_note'] += '\n' + line[10:100] + elif line[0]=='8': + # new balance record + bal_end = list2float(line[42:57]) + if line[41] == '1': + bal_end = - bal_end + bank_statement["balance_end_real"]= bal_end + + elif line[0]=='9': + # footer record + bank_statements.append(bank_statement) + #end for + bkst_list=[] + for statement in bank_statements: + try: + bk_st_id = pool.get('account.bank.statement').create(cr,uid,{ + 'journal_id': statement['journal_id'], + 'date':time.strftime('%Y-%m-%d',time.strptime(statement['date'],"%y/%m/%d")), + 'period_id':statement['period_id'], + 'balance_start': statement["balance_start"], + 'balance_end_real': statement["balance_end_real"], + 'state': 'draft', + 'name': statement['name'], + }) + lines=statement["bank_statement_line"] + for value in lines: + line=lines[value] + reconcile_id = False + if line['toreconcile']: + rec_id = pool.get('account.move.line').search(cr, uid, [('name','=',line['name']),('reconcile_id','=',False),('account_id.reconcile','=',True)]) + if rec_id: + reconcile_id = pool.get('account.bank.statement.reconcile').create(cr, uid, { + 'line_ids': [(6, 0, rec_id)] + }, context=context) + str_not1 = '' + if line.has_key('contry_name') and line.has_key('cntry_number'): + str_not1="Partner name:%s \n Partner Account Number:%s \n Communication:%s \n Value Date:%s \n Entry Date:%s \n"%(line["contry_name"],line["cntry_number"],line["free_comm"]+line['extra_note'],line["val_date"][0],line["entry_date"][0]) + id=pool.get('account.bank.statement.line').create(cr,uid,{ + 'name':line['name'], + 'date': line['date'], + 'amount': line['amount'], + 'partner_id':line['partner_id'] or 0, + 'account_id':line['account_id'], + 'statement_id': bk_st_id, + 'reconcile_id': reconcile_id, + 'note':str_not1, + 'ref':line['ref'], + }) + + str_not= "\n \n Account Number: %s \n Account Holder Name: %s " %(statement["acc_number"],statement["acc_holder"]) + std_log += "\nStatement : %s , Date : %s, Starting Balance : %.2f , Ending Balance : %.2f \n"\ + %(statement['name'], statement['date'], float(statement["balance_start"]), float(statement["balance_end_real"])) + bkst_list.append(bk_st_id) + + except osv.except_osv, e: + cr.rollback() + nb_err+=1 + err_log += '\n Application Error : ' + str(e) + raise # REMOVEME + + except Exception, e: + cr.rollback() + nb_err+=1 + err_log += '\n System Error : '+str(e) + raise # REMOVEME + except : + cr.rollback() + nb_err+=1 + err_log += '\n Unknown Error' + raise + err_log += '\n\nNumber of statements : '+ str(len(bkst_list)) + err_log += '\nNumber of error :'+ str(nb_err) +'\n' + + pool.get('account.coda').create(cr, uid,{ + 'name':codafile, + 'statement_ids': [(6, 0, bkst_list,)], + 'note':str_log1+str_not+std_log+err_log, + 'journal_id':data['form']['journal_id'], + 'date':time.strftime("%Y-%m-%d"), + 'user_id':uid, + }) + + return {'note':str_log1 + std_log + err_log ,'journal_id': data['form']['journal_id'], 'coda': data['form']['coda'],'statment_ids':bkst_list} + + +def str2date(date_str): + return time.strftime("%y/%m/%d",time.strptime(date_str,"%d%m%y")) + +def str2float(str): + try: + return float(str) + except: + return 0.0 + +def list2float(lst): + try: + return str2float((lambda s : s[:-3] + '.' + s[-3:])(lst)) + except: + return 0.0 + +class coda_import(wizard.interface): + def _action_open_window(self, cr, uid, data, context): + form=data['form'] + return { + 'domain':"[('id','in',%s)]"%(form['statment_ids']), + 'name': 'Statement', + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'account.bank.statement', + 'view_id': False, + 'type': 'ir.actions.act_window', + } + states = { + 'init' : { + 'actions' : [], + 'result' : {'type' : 'form', + 'arch' : codawiz_form, + 'fields' : codawiz_fields, + 'state' : [('end', '_Close'),('extraction', '_Ok') ]} + }, + 'extraction' : { + 'actions' : [_coda_parsing], + 'result' : {'type' : 'form', + 'arch' : result_form, + 'fields' : result_fields, + 'state' : [('end', '_Close'),('open', '_Open Statement')]} + }, + 'open': { + 'actions': [], + 'result': {'type': 'action', 'action': _action_open_window, 'state': 'end'} + + }, + + } +coda_import("account.coda_import") +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/audittrail/i18n/fr.po b/addons/audittrail/i18n/fr.po index 12c15bb34f4..fbe01ff7c9b 100644 --- a/addons/audittrail/i18n/fr.po +++ b/addons/audittrail/i18n/fr.po @@ -7,19 +7,19 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-09-08 14:56+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" +"PO-Revision-Date: 2010-05-21 17:51+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 04:17+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: audittrail #: model:ir.module.module,shortdesc:audittrail.module_meta_information msgid "Audit Trail" -msgstr "" +msgstr "Rapport de l' audit" #. module: audittrail #: constraint:ir.model:0 @@ -72,7 +72,7 @@ msgstr "Ancienne valeur" #. module: audittrail #: constraint:ir.actions.act_window:0 msgid "Invalid model name in the action definition." -msgstr "" +msgstr "Nom de modèle invalide pour la définition de l'action" #. module: audittrail #: model:ir.actions.wizard,name:audittrail.wizard_audittrail_log @@ -143,7 +143,7 @@ msgstr "Règle AuditTrail" #. module: audittrail #: wizard_field:audittrail.view.log,init,to:0 msgid "Log To" -msgstr "" +msgstr "Connecter à" #. module: audittrail #: view:audittrail.log:0 @@ -158,6 +158,10 @@ msgid "" " Subscribe Rules for read, write, create and delete on objects and check " "logs" msgstr "" +"Autorise un administrateur à tracer toutes les manipulations des " +"utilisateurs sur tous les objets du système.\n" +" Règles d'abonnement pour la lecture, l'écriture, la création, la " +"suppression des objets et la consultation des journaux" #. module: audittrail #: field:audittrail.log,timestamp:0 diff --git a/addons/base_calendar/__openerp__.py b/addons/base_calendar/__openerp__.py index c1b30890e68..7eaf68fd5d5 100644 --- a/addons/base_calendar/__openerp__.py +++ b/addons/base_calendar/__openerp__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). # @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## @@ -26,23 +26,24 @@ 'description': """Full featured calendar system that supports: - Alerts (create requests) - Recurring events (*) - - Invitations to others people""", - "author" : "Tiny", - 'category': 'Generic Modules/Others', - 'website': 'http://www.openerp.com', + - Invitations to others people""", + "author" : "Tiny", + 'category': 'Generic Modules/Others', + 'website': 'http://www.openerp.com', "init_xml" : [ 'base_calendar_data.xml' - ], - "demo_xml" : [], + ], + "demo_xml" : [], "update_xml" : [ 'security/ir.model.access.csv', - 'wizard/calendar_event_edit_all_view.xml', - 'wizard/base_calendar_invite_attendee_view.xml', + 'wizard/calendar_event_edit_all_view.xml', + 'wizard/base_calendar_invite_attendee_view.xml', + 'wizard/base_calendar_set_exrule_view.xml', 'base_calendar_view.xml' - ], - "test" : ['test/base_calendar_test.yml'], - "installable" : True, - "active" : False, + ], + # "test" : ['test/base_calendar_test.yml'], + "installable" : True, + "active" : False, } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index c53bf131002..4c3940301b3 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -44,7 +44,6 @@ def get_recurrent_dates(rrulestring, exdate, startdate=None, exrule=None): @param startdate: Startdate for computing recurrent dates @return: List of Recurrent dates """ - def todate(date): val = parser.parse(''.join((re.compile('\d')).findall(date))) return val @@ -97,7 +96,7 @@ def real_id2base_calendar_id(real_id, recurrent_date): return '%d-%s' % (real_id, recurrent_date) return real_id -def _links_get(self, cr, uid, context={}): +def _links_get(self, cr, uid, context=None): """ Get request link. @param cr: the current row, from the database cursor, @@ -213,7 +212,9 @@ class calendar_attendee(osv.osv): def _get_address(self, name=None, email=None): """ - Get Email Address + Gives email information in ical CAL-ADDRESS type format + @param name: Name for CAL-ADDRESS value + @param email: Email address for CAL-ADDRESS value """ if name and email: name += ':' @@ -221,7 +222,7 @@ class calendar_attendee(osv.osv): def _compute_data(self, cr, uid, ids, name, arg, context): """ - Compute data on field. + Compute data on function fields for attendee values . @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of calendar attendee’s IDs. @@ -241,6 +242,7 @@ class calendar_attendee(osv.osv): else: result[id][name] = self._get_address(attdata.sent_by_uid.name, \ attdata.sent_by_uid.address_id.email) + if name == 'cn': if attdata.user_id: result[id][name] = attdata.user_id.name @@ -248,40 +250,47 @@ class calendar_attendee(osv.osv): result[id][name] = attdata.partner_address_id.name or attdata.partner_id.name else: result[id][name] = attdata.email or '' + if name == 'delegated_to': todata = [] for child in attdata.child_ids: if child.email: todata.append('MAILTO:' + child.email) result[id][name] = ', '.join(todata) + if name == 'delegated_from': fromdata = [] for parent in attdata.parent_ids: if parent.email: fromdata.append('MAILTO:' + parent.email) result[id][name] = ', '.join(fromdata) + if name == 'event_date': if attdata.ref: result[id][name] = attdata.ref.date else: result[id][name] = False + if name == 'event_end_date': if attdata.ref: result[id][name] = attdata.ref.date_deadline else: result[id][name] = False + if name == 'sent_by_uid': if attdata.ref: result[id][name] = (attdata.ref.user_id.id, attdata.ref.user_id.name) else: result[id][name] = uid + if name == 'language': user_obj = self.pool.get('res.users') lang = user_obj.read(cr, uid, uid, ['context_lang'], context=context)['context_lang'] result[id][name] = lang.replace('_', '-') + return result - def _links_get(self, cr, uid, context={}): + def _links_get(self, cr, uid, context=None): """ Get request link for ref field in calendar attendee. @param cr: the current row, from the database cursor, @@ -297,7 +306,7 @@ class calendar_attendee(osv.osv): def _lang_get(self, cr, uid, context={}): """ - Get language for language function field. + Get language for language selection field. @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param context: A standard dictionary for contextual values @@ -313,60 +322,60 @@ class calendar_attendee(osv.osv): 'cutype': fields.selection([('individual', 'Individual'), \ ('group', 'Group'), ('resource', 'Resource'), \ ('room', 'Room'), ('unknown', '') ], \ - 'Invite Type', help="Specify the type of Invitation"), - 'member': fields.char('Member', size=124, - help="Indicate the groups that the attendee belongs to"), + 'Invite Type', help="Specify the type of Invitation"), + 'member': fields.char('Member', size=124, + help="Indicate the groups that the attendee belongs to"), 'role': fields.selection([('req-participant', 'Participation required'), \ ('chair', 'Chair Person'), \ ('opt-participant', 'Optional Participation'), \ ('non-participant', 'For information Purpose')], 'Role', \ - help='Participation role for the calendar user'), - 'state': fields.selection([('tentative', 'Tentative'), - ('needs-action', 'Needs Action'), - ('accepted', 'Accepted'), - ('declined', 'Declined'), + help='Participation role for the calendar user'), + 'state': fields.selection([('tentative', 'Tentative'), + ('needs-action', 'Needs Action'), + ('accepted', 'Accepted'), + ('declined', 'Declined'), ('delegated', 'Delegated')], 'State', readonly=True, \ - help="Status of the attendee's participation"), - 'rsvp': fields.boolean('Required Reply?', - help="Indicats whether the favor of a reply is requested"), + help="Status of the attendee's participation"), + 'rsvp': fields.boolean('Required Reply?', + help="Indicats whether the favor of a reply is requested"), 'delegated_to': fields.function(_compute_data, method=True, \ string='Delegated To', type="char", size=124, store=True, \ multi='delegated_to', help="The users that the original \ -request was delegated to"), +request was delegated to"), 'delegated_from': fields.function(_compute_data, method=True, string=\ - 'Delegated From', type="char", store=True, size=124, multi='delegated_from'), + 'Delegated From', type="char", store=True, size=124, multi='delegated_from'), 'parent_ids': fields.many2many('calendar.attendee', 'calendar_attendee_parent_rel', \ - 'attendee_id', 'parent_id', 'Delegrated From'), + 'attendee_id', 'parent_id', 'Delegrated From'), 'child_ids': fields.many2many('calendar.attendee', 'calendar_attendee_child_rel', \ - 'attendee_id', 'child_id', 'Delegrated To'), + 'attendee_id', 'child_id', 'Delegrated To'), 'sent_by': fields.function(_compute_data, method=True, string='Sent By', \ type="char", multi='sent_by', store=True, size=124, \ - help="Specify the user that is acting on behalf of the calendar user"), + help="Specify the user that is acting on behalf of the calendar user"), 'sent_by_uid': fields.function(_compute_data, method=True, string='Sent By User', \ - type="many2one", relation="res.users", multi='sent_by_uid'), + type="many2one", relation="res.users", multi='sent_by_uid'), 'cn': fields.function(_compute_data, method=True, string='Common name', \ - type="char", size=124, multi='cn', store=True), + type="char", size=124, multi='cn', store=True), 'dir': fields.char('URI Reference', size=124, help="Reference to the URI\ -that points to the directory information corresponding to the attendee."), +that points to the directory information corresponding to the attendee."), 'language': fields.function(_compute_data, method=True, string='Language', \ type="selection", selection=_lang_get, multi='language', \ store=True, help="To specify the language for text values in a\ -property or property parameter."), - 'user_id': fields.many2one('res.users', 'User'), - 'partner_address_id': fields.many2one('res.partner.address', 'Contact'), +property or property parameter."), + 'user_id': fields.many2one('res.users', 'User'), + 'partner_address_id': fields.many2one('res.partner.address', 'Contact'), 'partner_id': fields.related('partner_address_id', 'partner_id', type='many2one', \ - relation='res.partner', string='Partner', help="Partner related to contact"), - 'email': fields.char('Email', size=124, help="Email of Invited Person"), + relation='res.partner', string='Partner', help="Partner related to contact"), + 'email': fields.char('Email', size=124, help="Email of Invited Person"), 'event_date': fields.function(_compute_data, method=True, string='Event Date', \ - type="datetime", multi='event_date'), + type="datetime", multi='event_date'), 'event_end_date': fields.function(_compute_data, method=True, \ string='Event End Date', type="datetime", \ - multi='event_end_date'), - 'ref': fields.reference('Event Ref', selection=_links_get, size=128), - 'availability': fields.selection([('free', 'Free'), ('busy', 'Busy')], 'Free/Busy', readonly="True"), + multi='event_end_date'), + 'ref': fields.reference('Event Ref', selection=_links_get, size=128), + 'availability': fields.selection([('free', 'Free'), ('busy', 'Busy')], 'Free/Busy', readonly="True"), } _defaults = { - 'state': lambda *x: 'needs-action', + 'state': lambda *x: 'needs-action', } def get_ics_file(self, cr, uid, event_obj, context=None): @@ -401,7 +410,7 @@ property or property parameter."), event.add('location').value = event_obj.location if event_obj.rrule: event.add('rrule').value = event_obj.rrule - + if event_obj.alarm_id: # computes alarm data valarm = event.add('valarm') @@ -422,10 +431,10 @@ property or property parameter."), if interval == 'minutes': delta = timedelta(minutes=duration) trigger.value = delta - + # Compute other details valarm.add('DESCRIPTION').value = alarm_data['name'] or 'OpenERP' - + for attendee in event_obj.attendee_ids: attendee_add = event.add('attendee') attendee_add.params['CUTYPE'] = [str(attendee.cutype)] @@ -435,15 +444,18 @@ property or property parameter."), res = cal.serialize() return res - def _send_mail(self, cr, uid, ids, mail_to, email_from=tools.config.get('email_from', False), context={}): + def _send_mail(self, cr, uid, ids, mail_to, email_from=tools.config.get('email_from', False), context=None): """ - Send mail for calendar attendee. + Send mail for event invitation to event attendees. @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, - @param ids: List of calendar attendee’s IDs. + @param ids: List of attendee’s IDs. + @param email_from: Email address for user sending the mail @param context: A standard dictionary for contextual values @return: True """ + if not context: + context = {} company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.name for att in self.browse(cr, uid, ids, context=context): @@ -457,26 +469,26 @@ property or property parameter."), att_infos.append(((att2.user_id and att2.user_id.name) or \ (att2.partner_id and att2.partner_id.name) or \ att2.email) + ' - Status: ' + att2.state.title()) - body_vals = {'name': res_obj.name, - 'start_date': res_obj.date, - 'end_date': res_obj.date_deadline or False, - 'description': res_obj.description or '-', - 'location': res_obj.location or '-', - 'attendees': '<br>'.join(att_infos), - 'user': res_obj.user_id and res_obj.user_id.name or 'OpenERP User', - 'sign': sign, + body_vals = {'name': res_obj.name, + 'start_date': res_obj.date, + 'end_date': res_obj.date_deadline or False, + 'description': res_obj.description or '-', + 'location': res_obj.location or '-', + 'attendees': '<br>'.join(att_infos), + 'user': res_obj.user_id and res_obj.user_id.name or 'OpenERP User', + 'sign': sign, 'company': company } body = html_invitation % body_vals attach = self.get_ics_file(cr, uid, res_obj, context=context) if mail_to and email_from: tools.email_send( - email_from, - mail_to, - sub, - body, - attach=attach and [('invitation.ics', attach)] or None, - subtype='html', + email_from, + mail_to, + sub, + body, + attach=attach and [('invitation.ics', attach)] or None, + subtype='html', reply_to=email_from ) return True @@ -487,7 +499,7 @@ property or property parameter."), @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of calendar attendee’s IDs. - @param user_id: User id + @param user_id: Changed value of User id @return: dictionary of value. which put value in email and availability fields. """ @@ -498,24 +510,27 @@ property or property parameter."), return {'value': {'email': user.address_id.email, 'availability':user.availability}} def do_tentative(self, cr, uid, ids, context=None, *args): - """ @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: List of calendar attendee’s IDs - @param *args: Get Tupple value - @param context: A standard dictionary for contextual values """ + """ Makes event invitation as Tentative + @param self: The object pointer + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: List of calendar attendee’s IDs + @param *args: Get Tupple value + @param context: A standard dictionary for contextual values + """ self.write(cr, uid, ids, {'state': 'tentative'}, context) def do_accept(self, cr, uid, ids, context=None, *args): """ - Update state which value is accepted. + Update state of invitation as Accepted and + if the invited user is other then event user it will make a copy of this event for invited user @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of calendar attendee’s IDs. + @param context: A standard dictionary for contextual values @return: True """ - if not context: context = {} @@ -532,21 +547,23 @@ property or property parameter."), return True def do_decline(self, cr, uid, ids, context=None, *args): - """ @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: List of calendar attendee’s IDs - @param *args: Get Tupple value - @param context: A standard dictionary for contextual values """ + """ Marks event invitation as Declined + @param self: The object pointer + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: List of calendar attendee’s IDs + @param *args: Get Tupple value + @param context: A standard dictionary for contextual values """ self.write(cr, uid, ids, {'state': 'declined'}, context) def create(self, cr, uid, vals, context=None): - """ @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param vals: Get Values - @param context: A standard dictionary for contextual values """ + """ Overrides orm create method. + @param self: The object pointer + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param vals: Get Values + @param context: A standard dictionary for contextual values """ if not context: context = {} @@ -561,46 +578,50 @@ property or property parameter."), calendar_attendee() class res_alarm(osv.osv): + """Resource Alarm """ _name = 'res.alarm' _description = 'Basic Alarm Information' + _columns = { - 'name':fields.char('Name', size=256, required=True), + 'name':fields.char('Name', size=256, required=True), 'trigger_occurs': fields.selection([('before', 'Before'), \ ('after', 'After')], \ - 'Triggers', required=True), + 'Triggers', required=True), 'trigger_interval': fields.selection([('minutes', 'Minutes'), \ ('hours', 'Hours'), \ ('days', 'Days')], 'Interval', \ - required=True), - 'trigger_duration': fields.integer('Duration', required=True), + required=True), + 'trigger_duration': fields.integer('Duration', required=True), 'trigger_related': fields.selection([('start', 'The event starts'), \ ('end', 'The event ends')], \ - 'Related to', required=True), + 'Related to', required=True), 'duration': fields.integer('Duration', help="""Duration' and 'Repeat' \ -are both optional, but if one occurs, so MUST the other"""), - 'repeat': fields.integer('Repeat'), +are both optional, but if one occurs, so MUST the other"""), + 'repeat': fields.integer('Repeat'), 'active': fields.boolean('Active', help="If the active field is set to \ true, it will allow you to hide the event alarm information without removing it.") } _defaults = { - 'trigger_interval': lambda *x: 'minutes', - 'trigger_duration': lambda *x: 5, - 'trigger_occurs': lambda *x: 'before', - 'trigger_related': lambda *x: 'start', - 'active': lambda *x: 1, + 'trigger_interval': lambda *x: 'minutes', + 'trigger_duration': lambda *x: 5, + 'trigger_occurs': lambda *x: 'before', + 'trigger_related': lambda *x: 'start', + 'active': lambda *x: 1, } - def do_alarm_create(self, cr, uid, ids, model, date, context={}): + def do_alarm_create(self, cr, uid, ids, model, date, context=None): """ - Create Alarm for meeting. + Create Alarm for event. @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of res alarm’s IDs. @param model: Model name. + @param date: Event date @param context: A standard dictionary for contextual values @return: True """ - + if not context: + context = {} alarm_obj = self.pool.get('calendar.alarm') ir_obj = self.pool.get('ir.model') model_id = ir_obj.search(cr, uid, [('model', '=', model)])[0] @@ -615,20 +636,20 @@ true, it will allow you to hide the event alarm information without removing it. self.do_alarm_unlink(cr, uid, [data.id], model) if basic_alarm: vals = { - 'action': 'display', - 'description': data.description, - 'name': data.name, - 'attendee_ids': [(6, 0, map(lambda x:x.id, data.attendee_ids))], - 'trigger_related': basic_alarm.trigger_related, - 'trigger_duration': basic_alarm.trigger_duration, - 'trigger_occurs': basic_alarm.trigger_occurs, - 'trigger_interval': basic_alarm.trigger_interval, - 'duration': basic_alarm.duration, - 'repeat': basic_alarm.repeat, - 'state': 'run', - 'event_date': data[date], - 'res_id': data.id, - 'model_id': model_id, + 'action': 'display', + 'description': data.description, + 'name': data.name, + 'attendee_ids': [(6, 0, map(lambda x:x.id, data.attendee_ids))], + 'trigger_related': basic_alarm.trigger_related, + 'trigger_duration': basic_alarm.trigger_duration, + 'trigger_occurs': basic_alarm.trigger_occurs, + 'trigger_interval': basic_alarm.trigger_interval, + 'duration': basic_alarm.duration, + 'repeat': basic_alarm.repeat, + 'state': 'run', + 'event_date': data[date], + 'res_id': data.id, + 'model_id': model_id, 'user_id': uid } alarm_id = alarm_obj.create(cr, uid, vals) @@ -638,16 +659,17 @@ true, it will allow you to hide the event alarm information without removing it. cr.commit() return True - def do_alarm_unlink(self, cr, uid, ids, model, context={}): + def do_alarm_unlink(self, cr, uid, ids, model, context=None): """ Delete alarm specified in ids @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of res alarm’s IDs. - @param model: Model name. + @param model: Model name for which alarm is to be cleared. @return: True """ - + if not context: + context = {} alarm_obj = self.pool.get('calendar.alarm') ir_obj = self.pool.get('ir.model') model_id = ir_obj.search(cr, uid, [('model', '=', model)])[0] @@ -670,51 +692,53 @@ class calendar_alarm(osv.osv): __attribute__ = {} _columns = { - 'alarm_id': fields.many2one('res.alarm', 'Basic Alarm', ondelete='cascade'), + 'alarm_id': fields.many2one('res.alarm', 'Basic Alarm', ondelete='cascade'), 'name': fields.char('Summary', size=124, help="""Contains the text to be \ used as the message subject for email \ - or contains the text to be used for display"""), + or contains the text to be used for display"""), 'action': fields.selection([('audio', 'Audio'), ('display', 'Display'), \ ('procedure', 'Procedure'), ('email', 'Email') ], 'Action', \ - required=True, help="Defines the action to be invoked when an alarm is triggered"), + required=True, help="Defines the action to be invoked when an alarm is triggered"), 'description': fields.text('Description', help='Provides a more complete \ description of the calendar component, than that \ - provided by the "SUMMARY" property'), + provided by the "SUMMARY" property'), 'attendee_ids': fields.many2many('calendar.attendee', 'alarm_attendee_rel', \ - 'alarm_id', 'attendee_id', 'Attendees', readonly=True), + 'alarm_id', 'attendee_id', 'Attendees', readonly=True), 'attach': fields.binary('Attachment', help="""* Points to a sound resource,\ which is rendered when the alarm is triggered for audio, * File which is intended to be sent as message attachments for email, * Points to a procedure resource, which is invoked when\ - the alarm is triggered for procedure."""), - 'res_id': fields.integer('Resource ID'), - 'model_id': fields.many2one('ir.model', 'Model'), - 'user_id': fields.many2one('res.users', 'Owner'), - 'event_date': fields.datetime('Event Date'), - 'event_end_date': fields.datetime('Event End Date'), - 'trigger_date': fields.datetime('Trigger Date', readonly="True"), + the alarm is triggered for procedure."""), + 'res_id': fields.integer('Resource ID'), + 'model_id': fields.many2one('ir.model', 'Model'), + 'user_id': fields.many2one('res.users', 'Owner'), + 'event_date': fields.datetime('Event Date'), + 'event_end_date': fields.datetime('Event End Date'), + 'trigger_date': fields.datetime('Trigger Date', readonly="True"), 'state':fields.selection([ - ('draft', 'Draft'), - ('run', 'Run'), - ('stop', 'Stop'), - ('done', 'Done'), - ], 'State', select=True, readonly=True), + ('draft', 'Draft'), + ('run', 'Run'), + ('stop', 'Stop'), + ('done', 'Done'), + ], 'State', select=True, readonly=True), } _defaults = { - 'action': lambda *x: 'email', - 'state': lambda *x: 'run', + 'action': lambda *x: 'email', + 'state': lambda *x: 'run', } - def create(self, cr, uid, vals, context={}): + + def create(self, cr, uid, vals, context=None): """ - create new record. + Overrides orm create method. @param self: The object pointer @param cr: the current row, from the database cursor, @param vals: dictionary of fields value.{‘name_of_the_field’: value, ...} @param context: A standard dictionary for contextual values @return: new record id for calendar_alarm. """ - + if not context: + context = {} event_date = vals.get('event_date', False) if event_date: dtstart = datetime.strptime(vals['event_date'], "%Y-%m-%d %H:%M:%S") @@ -731,7 +755,7 @@ class calendar_alarm(osv.osv): def do_run_scheduler(self, cr, uid, automatic=False, use_new_cursor=False, \ context=None): - """ + """Scheduler for event reminder @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @@ -754,11 +778,11 @@ class calendar_alarm(osv.osv): for alarm in self.browse(cr, uid, alarm_ids): if alarm.action == 'display': value = { - 'name': alarm.name, - 'act_from': alarm.user_id.id, - 'act_to': alarm.user_id.id, - 'body': alarm.description, - 'trigger_date': alarm.trigger_date, + 'name': alarm.name, + 'act_from': alarm.user_id.id, + 'act_to': alarm.user_id.id, + 'body': alarm.description, + 'trigger_date': alarm.trigger_date, 'ref_doc1': '%s,%s' % (alarm.model_id.model, alarm.res_id) } request_id = request_obj.create(cr, uid, value) @@ -788,9 +812,9 @@ class calendar_alarm(osv.osv): mail_to.append(att.user_id.address_id.email) if mail_to: tools.email_send( - tools.config.get('email_from', False), - mail_to, - sub, + tools.config.get('email_from', False), + mail_to, + sub, body ) self.write(cr, uid, [alarm.id], {'state':'done'}) @@ -808,7 +832,7 @@ class calendar_event(osv.osv): return [(x.lower(), x) for x in pytz.all_timezones] def onchange_allday(self, cr, uid, ids, allday, context={}): - """ + """Sets duration as 24 Hours if event is selcted for all day @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @@ -820,23 +844,23 @@ class calendar_event(osv.osv): return {} event = self.browse(cr, uid, ids, context=context)[0] value = { - 'date': event.date and event.date[:11] + '00:00:00', - 'date_deadline': event.date_deadline and event.date_deadline[:11] + '00:00:00', 'duration': 24 } return {'value': value} - def onchange_dates(self, cr, uid, ids, start_date, duration=False, end_date=False, allday=False, context={}): - """ + def onchange_dates(self, cr, uid, ids, start_date, duration=False, end_date=False, allday=False, context=None): + """Returns duration and/or end date based on values passed @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of calendar event’s IDs. - @param start_date: Get starting date - @param duration: Get Duration between start date and end date or False - @param end_date: Get Ending Date or False + @param start_date: Starting date + @param duration: Duration between start date and end date + @param end_date: Ending Datee @param context: A standard dictionary for contextual values """ + if not context: + context = {} value = {} if not start_date: return value @@ -845,10 +869,7 @@ class calendar_event(osv.osv): value['duration'] = duration if allday: # For all day event - start = start_date[:11] + '00:00:00' value = { - 'date': start, - 'date_deadline': start, 'duration': 24 } return {'value': value} @@ -865,19 +886,21 @@ class calendar_event(osv.osv): return {'value': value} - def _set_rrulestring(self, cr, uid, id, name, value, arg, context): + def _set_rrulestring(self, cr, uid, id, name, value, arg, context=None): """ - Set rule string. + Sets values of fields that defines event recurrence from the value of rrule string @param self: The object pointer @param cr: the current row, from the database cursor, @param id: List of calendar event's ids. @param context: A standard dictionary for contextual values @return: dictionary of rrule value. """ + if not context: + context = {} cr.execute("UPDATE %s set freq='None',interval=0,count=0,end_date=Null,\ mo=False,tu=False,we=False,th=False,fr=False,sa=False,su=False,\ day=0,select1='date',month_list=Null ,byday=Null where id=%s" % (self._table, id)) - + if not value: cr.execute("UPDATE %s set rrule_type='none' where id=%s" % (self._table, id)) return True @@ -906,19 +929,19 @@ class calendar_event(osv.osv): for day in val['byday'].split(','): new_val[day] = True val.pop('byday') - + if val.get('until'): until = parser.parse(''.join((re.compile('\d')).findall(val.get('until')))) new_val['end_date'] = until.strftime('%Y-%m-%d') val.pop('until') new_val.pop('until') - + if val.get('bymonthday'): new_val['day'] = val.get('bymonthday') val.pop('bymonthday') new_val['select1'] = 'date' new_val.pop('bymonthday') - + if val.get('byday'): d = val.get('byday') if '-' in d: @@ -928,12 +951,12 @@ class calendar_event(osv.osv): new_val['byday'] = d[:1] new_val['week_list'] = d[1:3].upper() new_val['select1'] = 'day' - + if val.get('bymonth'): new_val['month_list'] = val.get('bymonth') val.pop('bymonth') new_val.pop('bymonth') - + for k, v in new_val.items(): temp = ", %s='%s'" % (k, v) qry += temp @@ -941,16 +964,16 @@ class calendar_event(osv.osv): whr = " where id=%(id)s" qry = qry + whr val.update({ - 'table': self._table, - 'rule_type': rrule_type, - 'id': id, + 'table': self._table, + 'rule_type': rrule_type, + 'id': id, }) cr.execute(qry % val) return True def _get_rulestring(self, cr, uid, ids, name, arg, context=None): """ - Get rule string. + Gets Recurrence rule string according to value type RECUR of iCalendar from the values given. @param self: The object pointer @param cr: the current row, from the database cursor, @param id: List of calendar event's ids. @@ -968,7 +991,7 @@ class calendar_event(osv.osv): raise osv.except_osv('Warning!', 'Interval can not be Negative') if datas.get('count', 0) < 0: raise osv.except_osv('Warning!', 'Count can not be Negative') - rrule_custom = self.compute_rule_string(cr, uid, datas,\ + rrule_custom = self.compute_rule_string(cr, uid, datas, \ context=context) result[event] = rrule_custom else: @@ -977,40 +1000,40 @@ class calendar_event(osv.osv): return result _columns = { - 'id': fields.integer('ID'), - 'sequence': fields.integer('Sequence'), - 'name': fields.char('Description', size=64, required=True), - 'date': fields.datetime('Date'), - 'date_deadline': fields.datetime('Deadline'), - 'create_date': fields.datetime('Created', readonly=True), - 'duration': fields.float('Duration'), - 'description': fields.text('Your action'), + 'id': fields.integer('ID'), + 'sequence': fields.integer('Sequence'), + 'name': fields.char('Description', size=64, required=False), + 'date': fields.datetime('Date'), + 'date_deadline': fields.datetime('Deadline'), + 'create_date': fields.datetime('Created', readonly=True), + 'duration': fields.float('Duration'), + 'description': fields.text('Your action'), 'class': fields.selection([('public', 'Public'), ('private', 'Private'), \ - ('confidential', 'Confidential')], 'Mark as'), - 'location': fields.char('Location', size=264, help="Location of Event"), + ('confidential', 'Confidential')], 'Mark as'), + 'location': fields.char('Location', size=264, help="Location of Event"), 'show_as': fields.selection([('free', 'Free'), ('busy', 'Busy')], \ - 'Show as'), - 'base_calendar_url': fields.char('Caldav URL', size=264), + 'Show as'), + 'base_calendar_url': fields.char('Caldav URL', size=264), 'exdate': fields.text('Exception Date/Times', help="This property \ -defines the list of date/time exceptions for arecurring calendar component."), +defines the list of date/time exceptions for arecurring calendar component."), 'exrule': fields.char('Exception Rule', size=352, help="defines a \ -rule or repeating pattern for an exception to a recurrence set"), +rule or repeating pattern for an exception to a recurrence set"), 'rrule': fields.function(_get_rulestring, type='char', size=124, method=True, \ string='Recurrent Rule', store=True, \ fnct_inv=_set_rrulestring, help='Defines a\ rule or repeating pattern for recurring events\n\ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\ - FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=-1SU'), + FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=-1SU'), 'rrule_type': fields.selection([('none', ''), ('daily', 'Daily'), \ ('weekly', 'Weekly'), ('monthly', 'Monthly'), \ - ('yearly', 'Yearly'), ('custom', 'Custom')], 'Recurrency'), - 'alarm_id': fields.many2one('res.alarm', 'Alarm'), - 'base_calendar_alarm_id': fields.many2one('calendar.alarm', 'Alarm'), - 'recurrent_uid': fields.integer('Recurrent ID'), - 'recurrent_id': fields.datetime('Recurrent ID date'), + ('yearly', 'Yearly'), ('custom', 'Custom')], 'Recurrency'), + 'alarm_id': fields.many2one('res.alarm', 'Alarm'), + 'base_calendar_alarm_id': fields.many2one('calendar.alarm', 'Alarm'), + 'recurrent_uid': fields.integer('Recurrent ID'), + 'recurrent_id': fields.datetime('Recurrent ID date'), 'vtimezone': fields.related('user_id', 'context_tz', type='char', size=24, \ - string='Timezone', store=True), - 'user_id': fields.many2one('res.users', 'Responsible'), + string='Timezone', store=True), + 'user_id': fields.many2one('res.users', 'Responsible'), 'freq': fields.selection([('None', 'No Repeat'), \ ('secondly', 'Secondly'), \ ('minutely', 'Minutely'), \ @@ -1018,44 +1041,44 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\ ('daily', 'Daily'), \ ('weekly', 'Weekly'), \ ('monthly', 'Monthly'), \ - ('yearly', 'Yearly')], 'Frequency'), - 'interval': fields.integer('Interval'), - 'count': fields.integer('Count'), - 'mo': fields.boolean('Mon'), - 'tu': fields.boolean('Tue'), - 'we': fields.boolean('Wed'), - 'th': fields.boolean('Thu'), - 'fr': fields.boolean('Fri'), - 'sa': fields.boolean('Sat'), - 'su': fields.boolean('Sun'), + ('yearly', 'Yearly')], 'Frequency'), + 'interval': fields.integer('Interval'), + 'count': fields.integer('Count'), + 'mo': fields.boolean('Mon'), + 'tu': fields.boolean('Tue'), + 'we': fields.boolean('Wed'), + 'th': fields.boolean('Thu'), + 'fr': fields.boolean('Fri'), + 'sa': fields.boolean('Sat'), + 'su': fields.boolean('Sun'), 'select1': fields.selection([('date', 'Date of month'), \ - ('day', 'Day of month')], 'Option'), - 'day': fields.integer('Date of month'), + ('day', 'Day of month')], 'Option'), + 'day': fields.integer('Date of month'), 'week_list': fields.selection([('MO', 'Monday'), ('TU', 'Tuesday'), \ ('WE', 'Wednesday'), ('TH', 'Thursday'), \ ('FR', 'Friday'), ('SA', 'Saturday'), \ - ('SU', 'Sunday')], 'Weekday'), + ('SU', 'Sunday')], 'Weekday'), 'byday': fields.selection([('1', 'First'), ('2', 'Second'), \ ('3', 'Third'), ('4', 'Fourth'), \ ('5', 'Fifth'), ('-1', 'Last')], 'By day'), 'month_list': fields.selection(months.items(), 'Month'), 'end_date': fields.date('Repeat Until'), - 'attendee_ids': fields.many2many('calendar.attendee', 'event_attendee_rel',\ - 'event_id', 'attendee_id', 'Attendees'), + 'attendee_ids': fields.many2many('calendar.attendee', 'event_attendee_rel', \ + 'event_id', 'attendee_id', 'Attendees'), 'allday': fields.boolean('All Day'), 'active': fields.boolean('Active', help="If the active field is set to \ true, it will allow you to hide the event alarm information without removing it.") } _defaults = { - 'class': lambda *a: 'public', - 'show_as': lambda *a: 'busy', - 'freq': lambda *x: 'None', - 'select1': lambda *x: 'date', - 'interval': lambda *x: 1, - 'active': lambda *x: 1, + 'class': lambda *a: 'public', + 'show_as': lambda *a: 'busy', + 'freq': lambda *x: 'None', + 'select1': lambda *x: 'date', + 'interval': lambda *x: 1, + 'active': lambda *x: 1, } - + def open_event(self, cr, uid, ids, context=None): """ Open Event From for Editing @@ -1067,11 +1090,11 @@ true, it will allow you to hide the event alarm information without removing it. """ if not context: context = {} - + data_obj = self.pool.get('ir.model.data') - + value = {} - + id2 = data_obj._get_id(cr, uid, 'base_calendar', 'event_form_view') id3 = data_obj._get_id(cr, uid, 'base_calendar', 'event_tree_view') id4 = data_obj._get_id(cr, uid, 'base_calendar', 'event_calendar_view') @@ -1088,32 +1111,32 @@ true, it will allow you to hide the event alarm information without removing it. 'view_mode': 'form,tree', 'res_model': 'calendar.event', 'view_id': False, - 'views': [(id2, 'form'), (id3, 'tree'), (id4, 'calendar')], + 'views': [(id2, 'form'), (id3, 'tree'), (id4, 'calendar')], 'type': 'ir.actions.act_window', 'res_id': base_calendar_id2real_id(id), 'nodestroy': True } - + return value def modify_this(self, cr, uid, event_id, defaults, real_date, context=None, *args): - """ + """Modifies only one event record out of virtual recurrent events + and creates new event as a specific instance of a Recurring Event", @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, - @param event_id: Get Event_id - @param real_date: Get Real Date + @param event_id: Id of Recurring Event + @param real_date: Date of event recurrence that is being modified @param context: A standard dictionary for contextual values - @param *args: Get Tuppel Value - + @param *args: Get Tupple Value """ event_id = base_calendar_id2real_id(event_id) datas = self.read(cr, uid, event_id, context=context) defaults.update({ - 'recurrent_uid': base_calendar_id2real_id(datas['id']), - 'recurrent_id': defaults.get('date') or real_date, - 'rrule_type': 'none', + 'recurrent_uid': base_calendar_id2real_id(datas['id']), + 'recurrent_id': defaults.get('date') or real_date, + 'rrule_type': 'none', 'rrule': '' }) exdate = datas['exdate'] and datas['exdate'].split(',') or [] @@ -1125,13 +1148,14 @@ true, it will allow you to hide the event alarm information without removing it. def modify_all(self, cr, uid, event_ids, defaults, context=None, *args): """ - Modify name, date, date_deadline fields. + Modifies the recurring event @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param event_ids: List of crm meeting’s IDs. + @param context: A standard dictionary for contextual values @return: True """ - + for event_id in event_ids: event_id = base_calendar_id2real_id(event_id) @@ -1146,11 +1170,12 @@ true, it will allow you to hide the event alarm information without removing it. qry += ", location = '%(location)s'" qry += "WHERE id = %s" % (event_id) cr.execute(qry %(defaults)) - + return True def get_recurrent_ids(self, cr, uid, select, base_start_date, base_until_date, limit=100): - """ + """Gives virtual event ids for recurring events based on value of Recurrence Rule + This method gives ids of dates that comes between start date and end date of calendar views @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @@ -1167,7 +1192,7 @@ true, it will allow you to hide the event alarm information without removing it. result = [] if ids and (base_start_date or base_until_date): cr.execute("select m.id, m.rrule, m.date, m.date_deadline, \ - m.exdate from " + self._table + \ + m.exdate, m.exrule from " + self._table + \ " m where m.id in ("\ + ','.join(map(lambda x: str(x), ids))+")") @@ -1214,7 +1239,7 @@ true, it will allow you to hide the event alarm information without removing it. new_rule = '%s=%s' % (name, value) new_rrule_str.append(new_rule) new_rrule_str = ';'.join(new_rrule_str) - rdates = get_recurrent_dates(str(new_rrule_str), exdate, start_date) + rdates = get_recurrent_dates(str(new_rrule_str), exdate, start_date, data['exrule']) for rdate in rdates: r_date = datetime.strptime(rdate, "%Y-%m-%d %H:%M:%S") if start_date and r_date < start_date: @@ -1229,15 +1254,16 @@ true, it will allow you to hide the event alarm information without removing it. if isinstance(select, (str, int, long)): return ids and ids[0] or False return ids - + def compute_rule_string(self, cr, uid, datas, context=None, *args): """ - Compute rule string. + Compute rule string according to value type RECUR of iCalendar from the values given. @param self: the object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param datas: dictionary of freq and interval value. - @return: string value which compute FREQILY;INTERVAL + @param context: A standard dictionary for contextual values + @return: String value of the format RECUR of iCalendar """ weekdays = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su'] @@ -1248,9 +1274,9 @@ true, it will allow you to hide the event alarm information without removing it. freq = datas.get('freq') if freq == 'None': return '' - + interval_srting = datas.get('interval') and (';INTERVAL=' + str(datas.get('interval'))) or '' - + if freq == 'weekly': byday = map(lambda x: x.upper(), filter(lambda x: datas.get(x) and x in weekdays, datas)) @@ -1286,7 +1312,7 @@ true, it will allow you to hide the event alarm information without removing it. return rrule_string - def search(self, cr, uid, args, offset=0, limit=100, order=None, + def search(self, cr, uid, args, offset=0, limit=100, order=None, context=None, count=False): """ Overrides orm search method. @@ -1295,6 +1321,8 @@ true, it will allow you to hide the event alarm information without removing it. @param args: list of tuples of form [(‘name_of_the_field’, ‘operator’, value), ...]. @param offset: The Number of Results to Pass @param limit: The Number of Results to Return + @param context: A standard dictionary for contextual values + @param count: If its True the method returns number of records instead of ids @return: List of id """ args_without_date = [] @@ -1317,14 +1345,16 @@ true, it will allow you to hide the event alarm information without removing it. return self.get_recurrent_ids(cr, uid, res, start_date, until_date, limit) + def write(self, cr, uid, ids, vals, context=None, check=True, update_check=True): """ - Writes values in one or several fields. + Overrides orm write method. @param self: the object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of crm meeting's ids @param vals: Dictionary of field value. + @param context: A standard dictionary for contextual values @return: True """ if not context: @@ -1348,7 +1378,7 @@ true, it will allow you to hide the event alarm information without removing it. event_id = base_calendar_id2real_id(event_id) if not event_id in new_ids: new_ids.append(event_id) - + res = super(calendar_event, self).write(cr, uid, new_ids, vals, context=context) if vals.has_key('alarm_id') or vals.has_key('base_calendar_alarm_id'): alarm_obj = self.pool.get('res.alarm') @@ -1364,6 +1394,7 @@ true, it will allow you to hide the event alarm information without removing it. @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of crm meeting's ids + @param context: A standard dictionary for contextual values @return: the object list. """ if isinstance(ids, (str, int, long)): @@ -1378,15 +1409,19 @@ true, it will allow you to hide the event alarm information without removing it. return res - def read(self, cr, uid, ids, fields=None, context={}, load='_classic_read'): + def read(self, cr, uid, ids, fields=None, context=None, load='_classic_read'): """ Overrides orm Read method.Read List of fields for calendar event. @param cr: the current row, from the database cursor, @param user: the current user’s ID for security checks, @param ids: List of calendar event's id. @param fields: List of fields. + @param context: A standard dictionary for contextual values @return: List of Dictionary of form [{‘name_of_the_field’: value, ...}, ...] """ + if not context: + context = {} + if isinstance(ids, (str, int, long)): select = [ids] else: @@ -1408,14 +1443,17 @@ true, it will allow you to hide the event alarm information without removing it. return result and result[0] or False return result - def copy(self, cr, uid, id, default=None, context={}): + def copy(self, cr, uid, id, default=None, context=None): """ Duplicate record on specified id. @param self: the object pointer. @param cr: the current row, from the database cursor, @param id: id of record from which we duplicated. + @param context: A standard dictionary for contextual values @return: Duplicate record id. """ + if not context: + context = {} res = super(calendar_event, self).copy(cr, uid, base_calendar_id2real_id(id), default, context) alarm_obj = self.pool.get('res.alarm') alarm_obj.do_alarm_create(cr, uid, [res], self._name, 'date') @@ -1428,6 +1466,7 @@ true, it will allow you to hide the event alarm information without removing it. @param self: the object pointer. @param cr: the current row, from the database cursor, @param id: List of calendar event's id. + @param context: A standard dictionary for contextual values @return: True """ res = False @@ -1454,15 +1493,18 @@ true, it will allow you to hide the event alarm information without removing it. alarm_obj.do_alarm_unlink(cr, uid, ids, self._name) return res - def create(self, cr, uid, vals, context={}): + def create(self, cr, uid, vals, context=None): """ Create new record. @param self: the object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param vals: dictionary of every field value. + @param context: A standard dictionary for contextual values @return: new created record id. """ + if not context: + context = {} res = super(calendar_event, self).create(cr, uid, vals, context) alarm_obj = self.pool.get('res.alarm') alarm_obj.do_alarm_create(cr, uid, [res], self._name, 'date') @@ -1478,7 +1520,7 @@ class calendar_todo(osv.osv): _description = "Calendar Task" def _get_date(self, cr, uid, ids, name, arg, context): - """ + """ Get Date @param self: The object pointer @param cr: the current row, from the database cursor, @@ -1494,7 +1536,7 @@ class calendar_todo(osv.osv): return res def _set_date(self, cr, uid, id, name, value, arg, context): - """ + """ Set Date @param self: The object pointer @param cr: the current row, from the database cursor, @@ -1512,8 +1554,8 @@ class calendar_todo(osv.osv): _columns = { 'date': fields.function(_get_date, method=True, fnct_inv=_set_date, \ - string='Duration', store=True, type='datetime'), - 'duration': fields.integer('Duration'), + string='Duration', store=True, type='datetime'), + 'duration': fields.integer('Duration'), } __attribute__ = {} @@ -1526,7 +1568,7 @@ class ir_attachment(osv.osv): _inherit = 'ir.attachment' def search_count(self, cr, user, args, context=None): - """ + """ @param self: The object pointer @param cr: the current row, from the database cursor, @param user: the current user’s ID for security checks, @@ -1539,9 +1581,9 @@ class ir_attachment(osv.osv): args1.append(map(lambda x:str(x).split('-')[0], arg)) return super(ir_attachment, self).search_count(cr, user, args1, context) - def search(self, cr, uid, args, offset=0, limit=None, order=None, + def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): - """ + """ @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @@ -1555,8 +1597,8 @@ class ir_attachment(osv.osv): for i, arg in enumerate(new_args): if arg[0] == 'res_id': new_args[i] = (arg[0], arg[1], base_calendar_id2real_id(arg[2])) - return super(ir_attachment, self).search(cr, uid, new_args, offset=offset, - limit=limit, order=order, + return super(ir_attachment, self).search(cr, uid, new_args, offset=offset, + limit=limit, order=order, context=context, count=False) ir_attachment() @@ -1565,12 +1607,12 @@ class ir_values(osv.osv): def set(self, cr, uid, key, key2, name, models, value, replace=True, \ isobject=False, meta=False, preserve_user=False, company=False): - """ + """ Set IR Values @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, - @param model: Get The Model + @param model: Get The Model """ new_model = [] @@ -1582,16 +1624,17 @@ class ir_values(osv.osv): return super(ir_values, self).set(cr, uid, key, key2, name, new_model, \ value, replace, isobject, meta, preserve_user, company) - def get(self, cr, uid, key, key2, models, meta=False, context={}, \ + def get(self, cr, uid, key, key2, models, meta=False, context=None, \ res_id_req=False, without_user=True, key2_req=True): - """ + """ Get IR Values @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, - @param model: Get The Model + @param model: Get The Model """ - + if not context: + context = {} new_model = [] for data in models: if type(data) in (list, tuple): @@ -1607,20 +1650,19 @@ class ir_model(osv.osv): _inherit = 'ir.model' - def read(self, cr, uid, ids, fields=None, context={}, + def read(self, cr, uid, ids, fields=None, context=None, load='_classic_read'): """ - Read IR Model + Overrides orm read method. @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of IR Model’s IDs. - @param context: A standard dictionary for contextual values + @param context: A standard dictionary for contextual values """ - - new_ids = isinstance(ids, (str, int, long)) and [ids] or ids - - data = super(ir_model, self).read(cr, uid, new_ids, fields=fields, \ + if not context: + context = {} + data = super(ir_model, self).read(cr, uid, ids, fields=fields, \ context=context, load=load) if data: for val in data: @@ -1632,12 +1674,12 @@ ir_model() class virtual_report_spool(web_services.report_spool): def exp_report(self, db, uid, object, ids, datas=None, context=None): - """ + """ Export Report @param self: The object pointer @param db: get the current database, @param uid: the current user’s ID for security checks, - @param context: A standard dictionary for contextual values + @param context: A standard dictionary for contextual values """ if object == 'printscreen.list': @@ -1657,19 +1699,19 @@ class res_users(osv.osv): def _get_user_avail(self, cr, uid, ids, context=None): """ - Get USer Availability + Get User Availability @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of res user’s IDs. - @param context: A standard dictionary for contextual values + @param context: A standard dictionary for contextual values """ current_datetime = datetime.now().strftime('%Y-%m-%d %H:%M:%S') res = {} attendee_obj = self.pool.get('calendar.attendee') attendee_ids = attendee_obj.search(cr, uid, [ - ('event_date', '<=', current_datetime), ('event_end_date', '<=', current_datetime), + ('event_date', '<=', current_datetime), ('event_end_date', '<=', current_datetime), ('state', '=', 'accepted'), ('user_id', 'in', ids) ]) @@ -1688,12 +1730,12 @@ class res_users(osv.osv): def _get_user_avail_fun(self, cr, uid, ids, name, args, context=None): """ - Get USer Availability Function + Get User Availability Function @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, @param ids: List of res user’s IDs. - @param context: A standard dictionary for contextual values + @param context: A standard dictionary for contextual values """ return self._get_user_avail(cr, uid, ids, context=context) @@ -1701,8 +1743,9 @@ class res_users(osv.osv): _columns = { 'availability': fields.function(_get_user_avail_fun, type='selection', \ selection=[('free', 'Free'), ('busy', 'Busy')], \ - string='Free/Busy', method=True), + string='Free/Busy', method=True), } + res_users() diff --git a/addons/base_calendar/base_calendar_view.xml b/addons/base_calendar/base_calendar_view.xml index 0c8a52260ef..d31266c9090 100644 --- a/addons/base_calendar/base_calendar_view.xml +++ b/addons/base_calendar/base_calendar_view.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> + + <!-- Attendee form view--> <record id="base_calendar_attendee_form_view" model="ir.ui.view"> <field name="name">calendar.attendee.form</field> @@ -65,6 +67,8 @@ </form> </field> </record> + + <!-- Attendee tree view--> <record id="base_calendar_attendee_tree_view" model="ir.ui.view"> <field name="name">calendar.attendee.tree</field> @@ -77,10 +81,14 @@ <field name="partner_address_id" string="Contact" /> <field name="role" /> <field name="state" /> + <field name="cutype" invisible="1"/> + <field name="rsvp" invisible="1"/> </tree> </field> </record> - + + <!-- Attendee search view--> + <record id="base_calendar_attendee_search_view" model="ir.ui.view"> <field name="name">calendar.attendee.search</field> <field name="model">calendar.attendee</field> @@ -99,11 +107,26 @@ <separator orientation="vertical"/> <field name="cutype" string="Invitation type" select="1"/> <field name="event_date" select="1"/> + <newline/> + <group expand="0" string="Group By..." colspan="16"> + <filter string="Type" icon="terp-project" help="Invitation Type" + domain="[]" context="{'group_by':'cutype'}" /> + <filter string="Role" icon="terp-project" + domain="[]" context="{'group_by':'role'}" /> + <filter string="Required Reply" icon="terp-crm" + domain="[]" context="{'group_by':'rsvp'}" /> + <separator orientation="vertical" /> + <filter string="User" icon="terp-partner" domain="[]" + context="{'group_by':'user_id'}" /> + <filter string="Contact" icon="terp-partner" domain="[]" + context="{'group_by':'partner_address_id'}" /> + </group> </search> </field> </record> - + <!-- Action for attendee view--> + <record id="action_view_attendee_form" model="ir.actions.act_window"> <field name="name">Event Invitations</field> <field name="type">ir.actions.act_window</field> @@ -115,10 +138,12 @@ </record> <!-- Calenadar's menu --> + <menuitem id="base.menu_calendar_configuration" name="Calendar" parent="base.menu_base_config" sequence="10" /> <!-- Invitation menu --> + <menuitem id="menu_attendee_invitations" name="Event Invitations" parent="base.menu_calendar_configuration" sequence="10" action="action_view_attendee_form" /> @@ -138,9 +163,6 @@ <field name="trigger_interval" select="1" /> <field name="trigger_occurs" select="1" /> <field name="trigger_related" select="1" /> - <separator string="" colspan="4" /> - <field name="duration" /> - <field name="repeat" /> </form> </field> </record> @@ -162,7 +184,8 @@ </field> </record> - + <!-- Action for alarms view--> + <record id="action_res_alarm_view" model="ir.actions.act_window"> <field name="name">Available Alarms</field> <field name="type">ir.actions.act_window</field> @@ -170,6 +193,8 @@ <field name="view_type">form</field> <field name="view_mode">tree,form</field> </record> + + <!-- Menu for Alarms--> <menuitem id="menu_crm_meeting_avail_alarm" groups="base.group_extended" @@ -405,6 +430,7 @@ </record> <!-- Event menu --> + <menuitem id="menu_events" name="Events" parent="base.menu_calendar_configuration" sequence="5" action="action_view_event" /> diff --git a/addons/base_calendar/wizard/__init__.py b/addons/base_calendar/wizard/__init__.py index 27614aacd88..8b45dc18a17 100644 --- a/addons/base_calendar/wizard/__init__.py +++ b/addons/base_calendar/wizard/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). # @@ -15,12 +15,13 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## import calendar_event_edit_all import base_calendar_invite_attendee +import base_calendar_set_exrule # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_calendar/wizard/base_calendar_invite_attendee_view.xml b/addons/base_calendar/wizard/base_calendar_invite_attendee_view.xml index 4fe55998e59..bea5ea66a84 100644 --- a/addons/base_calendar/wizard/base_calendar_invite_attendee_view.xml +++ b/addons/base_calendar/wizard/base_calendar_invite_attendee_view.xml @@ -13,37 +13,38 @@ <field name="type" /> <field name="send_mail" /> <newline /> - <group col="1" colspan="4" + <group col="2" colspan="6" attrs="{'invisible': [('type', '!=', 'external')]}"> <field name="email" colspan="4" attrs="{'required': [('type', '=', 'external')]}" /> </group> - <group col="1" colspan="4" + <group col="2" colspan="6" attrs="{'invisible': [('type', '!=', 'internal')]}"> <separator string="Users" colspan="4" /> <field name="user_ids" select="1" colspan="4" nolabel="1" /> <newline /> </group> - <group col="2" colspan="4" + <group col="2" colspan="6" attrs="{'invisible': [('type', '!=', 'partner')]}"> <field name="partner_id" colspan="2" on_change="onchange_partner_id(partner_id)" attrs="{'required': [('type', '=', 'partner')]}" /> <newline /> <separator string="Partner Contacts" - colspan="4" /> + colspan="6" /> <field name="contact_ids" select="1" colspan="4" nolabel="1" domain="[('partner_id', '=', partner_id)]" attrs="{'readonly': [('type', '!=', 'partner')]}" /> </group> <newline /> <separator string="" colspan="6" /> - <label string="" colspan="2" /> + <group col="4" colspan="4"> <button icon='gtk-cancel' special="cancel" string="Cancel" /> <button name="do_invite" string="Invite" type="object" icon="gtk-ok" /> + </group> </form> </field> </record> diff --git a/addons/base_calendar/wizard/base_calendar_set_exrule.py b/addons/base_calendar/wizard/base_calendar_set_exrule.py new file mode 100644 index 00000000000..ec7fcc50e9e --- /dev/null +++ b/addons/base_calendar/wizard/base_calendar_set_exrule.py @@ -0,0 +1,162 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from base_calendar import base_calendar +from osv import fields, osv +from tools.translate import _ +import tools +import mx.DateTime +import re + + +months = { + 1: "January", 2: "February", 3: "March", 4: "April", \ + 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", \ + 10: "October", 11: "November", 12: "December" +} + +class base_calendar_set_exrule(osv.osv_memory): + """ + Set Exrule. + """ + + _name = "base.calendar.set.exrule" + _description = "Set Exrule" + + _columns = { + 'freq': fields.selection([('None', 'No Repeat'), \ + ('secondly', 'Secondly'), \ + ('minutely', 'Minutely'), \ + ('hourly', 'Hourly'), \ + ('daily', 'Daily'), \ + ('weekly', 'Weekly'), \ + ('monthly', 'Monthly'), \ + ('yearly', 'Yearly')], 'Frequency',required=True), + 'interval': fields.integer('Interval'), + 'count': fields.integer('Count'), + 'mo': fields.boolean('Mon'), + 'tu': fields.boolean('Tue'), + 'we': fields.boolean('Wed'), + 'th': fields.boolean('Thu'), + 'fr': fields.boolean('Fri'), + 'sa': fields.boolean('Sat'), + 'su': fields.boolean('Sun'), + 'select1': fields.selection([('date', 'Date of month'), \ + ('day', 'Day of month')], 'Option'), + 'day': fields.integer('Date of month'), + 'week_list': fields.selection([('MO', 'Monday'), ('TU', 'Tuesday'), \ + ('WE', 'Wednesday'), ('TH', 'Thursday'), \ + ('FR', 'Friday'), ('SA', 'Saturday'), \ + ('SU', 'Sunday')], 'Weekday'), + 'byday': fields.selection([('1', 'First'), ('2', 'Second'), \ + ('3', 'Third'), ('4', 'Fourth'), \ + ('5', 'Fifth'), ('-1', 'Last')], 'By day'), + 'month_list': fields.selection(months.items(),'Month'), + 'end_date': fields.date('Repeat Until'), + + } + + def view_init(self, cr, uid, fields, context=None): + """ + This function checks for precondition before wizard executes + @param self: The object pointer + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param fields: List of fields for default value + @param context: A standard dictionary for contextual values + + """ + crm_obj = self.pool.get('crm.meeting') + for meeting in crm_obj.browse(cr, uid, context.get('active_ids', [])): + if not meeting.rrule: + raise osv.except_osv(_("Warning !"), _("Please Apply Recurrency after Apply Exception Rule")) + return False + + def compute_exrule_string(self, cr, uid, ids, context=None): + """ + Compute rule string. + @param self: the object pointer + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param datas: dictionary of freq and interval value. + @return: string value which compute FREQILY;INTERVAL + """ + + weekdays = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su'] + weekstring = '' + monthstring = '' + yearstring = '' + + for datas in self.read(cr, uid, ids, context=context): + freq = datas.get('freq') + if freq == 'None': + return '' + + interval_srting = datas.get('interval') and (';INTERVAL=' + str(datas.get('interval'))) or '' + + if freq == 'weekly': + + byday = map(lambda x: x.upper(), filter(lambda x: datas.get(x) and x in weekdays, datas)) + if byday: + weekstring = ';BYDAY=' + ','.join(byday) + + elif freq == 'monthly': + if datas.get('select1')=='date' and (datas.get('day') < 1 or datas.get('day') > 31): + raise osv.except_osv(_('Error!'), ("Please select proper Day of month")) + if datas.get('select1')=='day': + monthstring = ';BYDAY=' + datas.get('byday') + datas.get('week_list') + elif datas.get('select1')=='date': + monthstring = ';BYMONTHDAY=' + str(datas.get('day')) + + elif freq == 'yearly': + if datas.get('select1')=='date' and (datas.get('day') < 1 or datas.get('day') > 31): + raise osv.except_osv(_('Error!'), ("Please select proper Day of month")) + bymonth = ';BYMONTH=' + str(datas.get('month_list')) + if datas.get('select1')=='day': + bystring = ';BYDAY=' + datas.get('byday') + datas.get('week_list') + elif datas.get('select1')=='date': + bystring = ';BYMONTHDAY=' + str(datas.get('day')) + yearstring = bymonth + bystring + + if datas.get('end_date'): + datas['end_date'] = ''.join((re.compile('\d')).findall(datas.get('end_date'))) + '235959Z' + enddate = (datas.get('count') and (';COUNT=' + str(datas.get('count'))) or '') +\ + ((datas.get('end_date') and (';UNTIL=' + datas.get('end_date'))) or '') + + exrule_string = 'FREQ=' + freq.upper() + weekstring + interval_srting \ + + enddate + monthstring + yearstring + ex_id = base_calendar.base_calendar_id2real_id(context['active_id']) + model = context.get('model', False) + model_obj = self.pool.get(model) + exrule_value = model_obj.write(cr, uid,ex_id,{ + 'exrule': exrule_string, + }) + return {} + + _defaults = { + 'freq': lambda *x: 'None', + 'select1': lambda *x: 'date', + 'interval': lambda *x: 1, + } + +base_calendar_set_exrule() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/addons/base_calendar/wizard/base_calendar_set_exrule_view.xml b/addons/base_calendar/wizard/base_calendar_set_exrule_view.xml new file mode 100644 index 00000000000..cc88dc90c02 --- /dev/null +++ b/addons/base_calendar/wizard/base_calendar_set_exrule_view.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <record id="view_base_calendar_set_exrule" model="ir.ui.view"> + <field name="name">base.calendar.set.exrule.form</field> + <field name="model">base.calendar.set.exrule</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Set Exrule"> + <separator string="Select data for ExRule" colspan="8"/> + <group col="8" colspan="6"> + <field name="freq" /> + <field name="interval" /> + <field name="count" /> + <field name="end_date" /> + </group> + <group col="8" colspan="8" name="Select weekdays" + attrs="{'invisible' : [('freq','!=','weekly')]}"> + <field name="mo" colspan="1" /> + <field name="tu" colspan="1" /> + <field name="we" colspan="1" /> + <field name="th" colspan="1" /> + <field name="fr" colspan="1" /> + <field name="sa" colspan="1" /> + <field name="su" colspan="1" /> + <newline /> + </group> + <group col="8" colspan="6" + attrs="{'invisible' : [('freq','!=','monthly'), ('freq','!=','yearly')]}"> + <group col="2" colspan="1"> + <field name="select1" /> + </group> + <group col="2" colspan="1" + attrs="{'invisible' : [('select1','=','day')]}"> + <field name="day" + attrs="{'required' : [('select1','=','date')]}"/> + </group> + <group col="3" colspan="1" + attrs="{'invisible' : [('select1','=','date')]}"> + <field name="byday" string="The" + attrs="{'required' : [('select1','=','day')]}"/> + <field name="week_list" nolabel="1" + attrs="{'required' : [('select1','=','day')]}"/> + </group> + <group col="1" colspan="1" + attrs="{'invisible' : [('freq','!=','yearly')]}"> + <field name="month_list" string="of" + colspan="1" + attrs="{'required' : [('freq','=','yearly')]}"/> + </group> + </group> + <group colspan="4" col="6"> + <button icon="gtk-cancel" special="cancel" string="Cancel"/> + <button icon="gtk-ok" string="ok" name="compute_exrule_string" type="object"/> + </group> + </form> + </field> + </record> + + <record id="action_base_calendar_set_exrule" model="ir.actions.act_window"> + <field name="name">Set Exrule</field> + <field name="res_model">base.calendar.set.exrule</field> + <field name="view_type">form</field> + <field name="view_mode">form,tree</field> + <field name="target">new</field> + </record> + + </data> +</openerp> diff --git a/addons/base_contact/base_contact.py b/addons/base_contact/base_contact.py index b98d20adc84..0becfa611e2 100644 --- a/addons/base_contact/base_contact.py +++ b/addons/base_contact/base_contact.py @@ -72,8 +72,8 @@ class res_partner_contact(osv.osv): it will allow you to hide the partner contact without removing it."), 'partner_id': fields.related('job_ids','address_id','partner_id',type='many2one',\ relation='res.partner', string='Main Employer'), - 'function_id': fields.related('job_ids','function_id',type='many2one', \ - relation='res.partner.function', string='Main Function'), + 'function': fields.related('job_ids', 'function', type='char', \ + string='Main Function'), 'job_id': fields.function(_main_job, method=True, type='many2one',\ relation='res.partner.job', string='Main Job'), 'email': fields.char('E-Mail', size=240), @@ -164,7 +164,7 @@ class res_partner_job(osv.osv): return [] res = [] for r in self.browse(cr, uid, ids): - funct = r.function_id and (", " + r.function_id.name) or "" + funct = r.function and (", " + r.function) or "" res.append((r.id, self.pool.get('res.partner.contact').name_get(cr, uid, \ [r.contact_id.id])[0][1] + funct)) return res @@ -212,11 +212,10 @@ class res_partner_job(osv.osv): 'name': fields.related('address_id', 'partner_id', type='many2one',\ relation='res.partner', string='Partner', help="You may\ enter Address first,Partner will be linked automatically if any."), - 'address_id': fields.many2one('res.partner.address', 'Address', domain=[('partner_id', '=', name)], \ - help='Address which is linked to the Partner'), + 'address_id': fields.many2one('res.partner.address', 'Address', \ + help='Address which is linked to the Partner'), # TO Correct: domain=[('partner_id', '=', name)] 'contact_id': fields.many2one('res.partner.contact','Contact', required=True, ondelete='cascade'), - 'function_id': fields.many2one('res.partner.function','Partner Function', \ - help="Function of this contact with this partner"), + 'function': fields.char('Partner Function', size=34, help="Function of this contact with this partner"), 'sequence_contact': fields.integer('Contact Seq.',help='Order of\ importance of this address in the list of addresses of the linked contact'), 'sequence_partner': fields.integer('Partner Seq.',help='Order of importance\ diff --git a/addons/base_contact/base_contact_demo.xml b/addons/base_contact/base_contact_demo.xml index 1945e1dd899..6acdd08cf14 100644 --- a/addons/base_contact/base_contact_demo.xml +++ b/addons/base_contact/base_contact_demo.xml @@ -1,11 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> - <!-- Create the functions --> - <record id="res_partner_function_privateaddress0" model="res.partner.function"> - <field eval=""""Private Address"""" name="name"/> - <field name="code">PA</field> - </record> <!-- Create the contacts --> <record id="res_partner_contact_mortier0" model="res.partner.contact"> @@ -171,35 +166,35 @@ <!-- Create the jobs --> <record id="res_partner_job_0" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_1"/> - <field name="function_id" ref="base.function_sale"/> + <field name="function">Salesman</field> <field name="contact_id" ref="res_partner_contact_mortier0"/> <field name="sequence_partner">2</field> </record> <record id="res_partner_job_1" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_2"/> - <field name="function_id" ref="base.function_sale"/> + <field name="function">Salesman</field> <field eval=""""contact@tecsas.fr"""" name="email"/> <field name="contact_id" ref="res_partner_contact_jacot0"/> </record> <record id="res_partner_job_2" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_3"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field eval=""""info@mediapole.net"""" name="email"/> <field name="contact_id" ref="res_partner_contact_passot0"/> </record> <record id="res_partner_job_3" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_tang"/> - <field name="function_id" ref="base.function_sale"/> + <field name="function">Salesman</field> <field name="contact_id" ref="res_partner_contact_tang0"/> </record> <record id="res_partner_job_4" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_wong"/> - <field name="function_id" ref="base.function_sale"/> + <field name="function">Salesman</field> <field name="contact_id" ref="res_partner_contact_wong0"/> </record> <record id="res_partner_job_5" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_6"/> - <field name="function_id" ref="base.function_director"/> + <field name="function">CEO</field> <field name="contact_id" ref="res_partner_contact_lacarte0"/> <field name="sequence_contact">1</field> <field name="sequence_partner">0</field> @@ -207,120 +202,120 @@ </record> <record id="res_partner_job_6" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_7"/> - <field name="function_id" ref="base.function_sale"/> + <field name="function">Salesman</field> <field name="contact_id" ref="res_partner_contact_lavente0"/> </record> <record id="res_partner_job_7" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_8"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field name="contact_id" ref="res_partner_contact_lelitre0"/> </record> <record id="res_partner_job_8" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_9"/> - <field name="function_id" ref="base.function_director"/> + <field name="function">CEO</field> <field name="contact_id" ref="res_partner_contact_grosbonnet0"/> </record> <record id="res_partner_job_9" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_10"/> - <field name="function_id" ref="base.function_sale"/> + <field name="function">Salesman</field> <field name="contact_id" ref="res_partner_contact_lesbrouffe0"/> </record> <record id="res_partner_job_10" model="res.partner.job"> <field name="address_id" ref="base.res_partner_address_zen"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field name="contact_id" ref="res_partner_contact_zen0"/> </record> <record id="res_partner_job_11" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_sale"/> + <field name="function">Salesman</field> <field eval=""""re@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_mignon0"/> </record> <record id="res_partner_job_12" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field eval=""""st@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_wirtel0"/> </record> <record id="res_partner_job_13" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field eval=""""ch@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_simonis0"/> </record> <record id="res_partner_job_14" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field eval=""""ol@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_laurent0"/> </record> <record id="res_partner_job_15" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field eval=""""fl@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_lambotte0"/> </record> <record id="res_partner_job_16" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_sale"/> + <field name="function">Salesman</field> <field eval=""""av@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_vandewerve0"/> </record> <record id="res_partner_job_17" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field eval=""""fb@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_semal0"/> </record> <record id="res_partner_job_18" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field eval=""""qd@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_depaoli0"/> </record> <record id="res_partner_job_19" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field eval=""""ne@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_elkhayat0"/> </record> <record id="res_partner_job_20" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_it"/> + <field name="function">CTO</field> <field eval=""""ph@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_luu0"/> </record> <record id="res_partner_job_21" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_director"/> + <field name="function">CEO</field> <field eval=""""fp@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_pinckears0"/> <field name="sequence_partner">-1</field> </record> <record id="res_partner_job_22" model="res.partner.job"> <field name="address_id" ref="base.main_address"/> - <field name="function_id" ref="base.function_sale"/> + <field name="function">Salesman</field> <field eval=""""cd@mycompany.com"""" name="email"/> <field name="contact_id" ref="res_partner_contact_debois0"/> </record> <record id="res_partner_job_23" model="res.partner.job"> <field name="address_id" ref="res_partner_address_0"/> <field name="contact_id" ref="res_partner_contact_mortier0"/> - <field name="function_id" ref="res_partner_function_privateaddress0"/> <field name="sequence_contact">5</field> + <field name="function">PA</field> </record> <record id="res_partner_job_24" model="res.partner.job"> <field eval="1" name="sequence_contact"/> <field name="address_id" ref="res_partner_address_1"/> <field name="contact_id" ref="res_partner_contact_lacarte0"/> - <field name="function_id" ref="res_partner_function_privateaddress0"/> + <field name="function">PA</field> <field name="sequence_contact">5</field> </record> <record id="res_partner_job_25" model="res.partner.job"> <field eval="2" name="sequence_contact"/> <field name="address_id" ref="base.res_partner_address_1"/> <field name="contact_id" ref="res_partner_contact_lacarte0"/> - <field name="function_id" ref="base.function_director"/> + <field name="function">CEO</field> <field name="sequence_contact">1</field> </record> </data> diff --git a/addons/base_contact/base_contact_view.xml b/addons/base_contact/base_contact_view.xml index 42f2e51b2ee..8852ea19980 100644 --- a/addons/base_contact/base_contact_view.xml +++ b/addons/base_contact/base_contact_view.xml @@ -16,7 +16,7 @@ <field name="email"/> <field name="lang_id"/> <field name="partner_id"/> - <field name="function_id"/> + <field name="function"/> </tree> </field> </record> @@ -38,7 +38,7 @@ <group string="Partner" colspan="2" col="2"> <field name="partner_id" invisible="1" select="1"/> <field name="title" select="1"/> - <field name="function_id" invisible="1"/> + <field name="function" invisible="1"/> <field name="email"/> <field name="lang_id"/> <field name="active"/> @@ -51,7 +51,7 @@ <field name="job_ids" colspan="4" nolabel="1" mode="tree,form"> <form string="Functions and Addresses"> <group string="Partner" colspan="2" col="4"> - <field name="function_id"/> + <field name="function"/> <field name="address_id"/> <field name="name"/> <field name="date_start" /> @@ -69,7 +69,7 @@ </form> <tree string="Functions and Addresses"> <field name="sequence_contact" string="Seq."/> - <field name="function_id"/> + <field name="function"/> <field name="name"/> <field name="address_id"/> <field name="phone"/> @@ -152,7 +152,7 @@ <tree string="Contacts" editable="top"> <field name="sequence_partner"/> <field name="contact_id"/> - <field name="function_id"/> + <field name="function"/> <field name="phone"/> <field name="fax"/> <field name="extension"/> @@ -164,7 +164,7 @@ <field name="sequence_partner"/> <field name="name"/> <field name="contact_id"/> - <field name="function_id"/> + <field name="function"/> </group> <group string="Communication" colspan="2" col="2"> <field name="phone"/> @@ -337,7 +337,7 @@ <field name="arch" type="xml"> <tree string="Contact Functions"> <field name="contact_id"/> - <field name="function_id"/> + <field name="function"/> <field name="name"/> <field name="address_id"/> <field name="email"/> @@ -360,7 +360,7 @@ <field name="name" select="1" on_change="onchange_partner(name)"/> <field name="address_id" select="1" attrs="{'required': [('name', '!=', False)]}" on_change="onchange_address(address_id)"/> <field name="contact_id" select="1"/> - <field name="function_id" select="1"/> + <field name="function" select="1"/> <field name="email" widget="email"/> <field name="phone"/> <field name="fax"/> diff --git a/addons/base_contact/test/base_contact00.yml b/addons/base_contact/test/base_contact00.yml index a1b112e4e2a..5a76e25c424 100644 --- a/addons/base_contact/test/base_contact00.yml +++ b/addons/base_contact/test/base_contact00.yml @@ -23,7 +23,7 @@ first_name: Laura job_ids: - email: lwilliams@mydomain.com - function_id: base_contact.res_partner_function_privateaddress0 + function: PA phone: (+32).10.45.18.77 sequence_contact: 1 state: current @@ -44,7 +44,7 @@ zip: '2324324' job_ids: - address_id: res_partner_address_1 - function_id: base.function_director + function: CEO contact_id: res_partner_contact_williams0 sequence_partner: 2 state: current @@ -66,10 +66,10 @@ first_name: Nicolas job_ids: - address_id: base.main_address - function_id: base.function_it + function: CTO state: current - address_id: base.res_partner_address_3000 - function_id: base.function_director + function: CEO state: current lang_id: res_lang_french0 mobile: (+32).23.44.32.12 @@ -84,10 +84,10 @@ first_name: Christina job_ids: - address_id: base.res_partner_address_1 - function_id: base.function_director + function: CEO state: past - address_id: base.res_partner_address_1 - function_id: base.function_it + function: CTO state: current lang_id: base_contact.res_lang_french0 mobile: (+32).10.45.18.77 diff --git a/addons/board_hr/board_hr_view.xml b/addons/board_hr/board_hr_view.xml index d26b4b2e6cf..44e2b98c96c 100644 --- a/addons/board_hr/board_hr_view.xml +++ b/addons/board_hr/board_hr_view.xml @@ -11,7 +11,7 @@ <field name="name">My Expenses</field> <field name="res_model">hr.expense.expense</field> <field name="view_type">form</field> - <field name="domain">[('state','=','draft'),('user_id','=',uid)]</field> + <field name="domain">[('state','in',('draft', 'confirm')),('user_id','=',uid)]</field> <field name="view_id" ref="hr_expense.view_editable_expenses_tree"/> </record> diff --git a/addons/board_manufacturing/i18n/pl.po b/addons/board_manufacturing/i18n/pl.po index 26654a8a158..7f70507e0a7 100644 --- a/addons/board_manufacturing/i18n/pl.po +++ b/addons/board_manufacturing/i18n/pl.po @@ -7,19 +7,19 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-11-21 15:58+0000\n" -"Last-Translator: Andrzej MoST (Marcin Ostajewski) <Unknown>\n" +"PO-Revision-Date: 2010-05-23 20:02+0000\n" +"Last-Translator: Grzegorz Grzelak (Cirrus.pl) <Unknown>\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: 2010-04-17 04:00+0000\n" +"X-Launchpad-Export-Date: 2010-05-24 03:46+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: board_manufacturing #: view:board.board:0 msgid "Procurement in Exception" -msgstr "" +msgstr "Niepoprawne nabycia" #. module: board_manufacturing #: view:board.board:0 @@ -34,7 +34,7 @@ msgstr "XML niewłaściwy dla tej architektury wyświetlania!" #. module: board_manufacturing #: view:board.board:0 msgid "Deliveries (Out packing)" -msgstr "" +msgstr "Dostawy do klientów" #. module: board_manufacturing #: view:board.board:0 @@ -49,7 +49,7 @@ msgstr "Produkcja" #. module: board_manufacturing #: constraint:ir.actions.act_window:0 msgid "Invalid model name in the action definition." -msgstr "" +msgstr "Nieprawidłowa nazwa modelu w definicji akcji." #. module: board_manufacturing #: model:ir.actions.act_window,name:board_manufacturing.open_board_manufacturing @@ -65,9 +65,9 @@ msgstr "Konsola dla produkcji" #. module: board_manufacturing #: view:board.board:0 msgid "Stock value variation" -msgstr "" +msgstr "Zmiany wartości zapasów" #. module: board_manufacturing #: view:board.board:0 msgid "Workcenter futur load" -msgstr "Przyszłe obiciążenie centrum roboczego" +msgstr "Obciążenie centrów roboczych" diff --git a/addons/board_project/board_project_issue_view.xml b/addons/board_project/board_project_issue_view.xml index eaf3a2f8612..60103007985 100644 --- a/addons/board_project/board_project_issue_view.xml +++ b/addons/board_project/board_project_issue_view.xml @@ -7,24 +7,72 @@ <field name="res_model">project.issue</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> - <field name="domain">[('create_date', '>=', time.strftime('%Y-%m-%d 00:00:00')),('create_date', '<=', time.strftime('%Y-%m-%d 23:59:59'))]</field> + <field name="domain">[('user_id','=',uid),('state','in',['draft','open'])]</field> <field name="view_id" ref="project_issue.project_issue_tree_view"/> </record> + <record id="action_view_pending_project_issue_tree" model="ir.actions.act_window"> + <field name="name">Project issues</field> + <field name="res_model">project.issue</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="domain">[('user_id','=',uid),('state','=','pending')]</field> + <field name="view_id" ref="project_issue.project_issue_tree_view"/> + </record> + + <record id="action_project_issue_graph_state" model="ir.actions.act_window"> + <field name="name">Project Issue</field> + <field name="res_model">project.issue.report</field> + <field name="view_type">form</field> + <field name="view_mode">graph</field> + <field name="domain">[('user_id','=',uid)]</field> + <field name="view_id" ref="project_issue.view_project_issue_report_graph"/> + </record> + + <record id="view_project_issue_graph_stage" model="ir.ui.view"> + <field name="name">project.issue.report.graph</field> + <field name="model">project.issue.report</field> + <field name="type">graph</field> + <field name="arch" type="xml"> + <graph orientation="vertical" string="Project Issue" type="bar"> + <field name="stage_id"/> + <field name="nbr" operator="+"/> + <field group="True" name="user_id"/> + </graph> + </field> + </record> + + <record id="action_project_issue_graph_stage" model="ir.actions.act_window"> + <field name="name">Project Issue</field> + <field name="res_model">project.issue.report</field> + <field name="view_type">form</field> + <field name="view_mode">graph</field> + <field name="domain">[('user_id','=',uid)]</field> + <field name="view_id" ref="view_project_issue_graph_stage"/> + </record> + <record id="board_project_issue_form" model="ir.ui.view"> <field name="name">board.project.issue.form</field> <field name="model">board.board</field> <field name="type">form</field> <field name="arch" type="xml"> - <form string="Project Issue Board"> - <vpaned> + <form string="My Board"> + <hpaned> <child1> - <action colspan="4" height="220" name="%(action_view_current_project_issue_tree)d" string="Current Project Issues" width="510"/> + <action colspan="4" name="%(action_view_current_project_issue_tree)d" string="Current Issues" width="510"/> + <action colspan="4" name="%(action_view_pending_project_issue_tree)d" string="Pending Issues" width="510"/> </child1> <child2> - <action colspan="4" height="220" name="%(project.action_task_by_days_graph)d" string="Project Tasks By Days" width="510"/> + <vpaned> + <child1> + <action colspan="4" name="%(action_project_issue_graph_state)d" string="Issues By State" /> + </child1> + <child2> + <action colspan="4" name="%(action_project_issue_graph_stage)d" string="Issues By Stage" /> + </child2> + </vpaned> </child2> - </vpaned> + </hpaned> </form> </field> </record> diff --git a/addons/board_purchase/board_purchase_view.xml b/addons/board_purchase/board_purchase_view.xml index 2370e247eec..5548b3f2838 100644 --- a/addons/board_purchase/board_purchase_view.xml +++ b/addons/board_purchase/board_purchase_view.xml @@ -8,6 +8,15 @@ name="Purchase" parent="base.dashboard"/> + <record id="purchase_draft" model="ir.actions.act_window"> + <field name="name">Draft Purchases</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">purchase.order</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="domain">[('date_order','>',time.strftime('%Y-01-01 00:00:00')),('date_order','<',time.strftime('%Y-12-31 23:59:59')), ('state','=','draft')]</field> + <field name="search_view_id" ref="purchase.purchase_order_tree"/> + </record> <record id="purchase_waiting" model="ir.actions.act_window"> <field name="name">Quotation Request</field> <field name="type">ir.actions.act_window</field> @@ -26,7 +35,7 @@ <form string="My Board"> <hpaned> <child1> - <action colspan="4" height="220" name="%(purchase.purchase_rfq)d" string="Draft Purchase Order" width="510"/> + <action colspan="4" height="220" name="%(purchase_draft)d" string="Draft Purchase Order" width="510"/> <action colspan="4" height="220" name="%(purchase_waiting)d" string="Purchase Order in Waiting" width="510"/> </child1> <child2> diff --git a/addons/board_sale/i18n/pl.po b/addons/board_sale/i18n/pl.po index 17a94959895..cb1e90aac00 100644 --- a/addons/board_sale/i18n/pl.po +++ b/addons/board_sale/i18n/pl.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2010-05-14 16:28+0000\n" +"PO-Revision-Date: 2010-05-21 19:22+0000\n" "Last-Translator: Grzegorz Grzelak (Cirrus.pl) <Unknown>\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: 2010-05-15 04:58+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: board_sale @@ -40,7 +40,7 @@ msgstr "Konsola szefa sprzedaży" #. module: board_sale #: view:board.board:0 msgid "Cases of the month" -msgstr "Zdarzenia miesiąca" +msgstr "Sprawy miesiąca" #. module: board_sale #: constraint:ir.ui.view:0 @@ -65,9 +65,9 @@ msgstr "Sprzedaż" #. module: board_sale #: view:board.board:0 msgid "Cases statistics" -msgstr "Statystyka zdarzeń" +msgstr "Statystyka spraw" #. module: board_sale #: view:board.board:0 msgid "Top ten sales of the month" -msgstr "Dziesięć najlepszych sprzedaży w miesiącu" +msgstr "Najlepsze sprzedaże w miesiącu" diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index 14a967cf291..fd5ca3c5498 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -21,9 +21,9 @@ { - 'name': 'Customer & Supplier Relationship Management', - 'version': '1.0', - 'category': 'Generic Modules/CRM & SRM', + 'name': 'Customer & Supplier Relationship Management', + 'version': '1.0', + 'category': 'Generic Modules/CRM & SRM', 'description': """The generic Open ERP Customer Relationship Management system enables a group of people to intelligently and efficiently manage leads, opportunities, meeting, phonecall etc. @@ -41,70 +41,70 @@ appropriate staff, and make sure all future correspondence gets to the right place. The CRM module has a email gateway for the synchronisation interface -between mails and Open ERP.""", - 'author': 'Tiny', - 'website': 'http://www.openerp.com', +between mails and Open ERP.""", + 'author': 'Tiny', + 'website': 'http://www.openerp.com', 'depends': [ - 'base', - 'base_action_rule', - 'process', - 'mail_gateway', - 'base_calendar', - 'resource', - ], + 'base', + 'base_action_rule', + 'process', + 'mail_gateway', + 'base_calendar', + 'resource', + ], 'init_xml': [ - 'crm_data.xml', - 'crm_meeting_data.xml', - 'crm_lead_data.xml', - 'crm_meeting_data.xml', - 'crm_opportunity_data.xml', - 'crm_phonecall_data.xml', - ], + 'crm_data.xml', + 'crm_meeting_data.xml', + 'crm_lead_data.xml', + 'crm_meeting_data.xml', + 'crm_opportunity_data.xml', + 'crm_phonecall_data.xml', + ], 'update_xml': [ - 'wizard/crm_lead_to_partner_view.xml', - 'wizard/crm_lead_to_opportunity_view.xml', - - 'wizard/crm_phonecall_to_phonecall_view.xml', - 'wizard/crm_phonecall_to_partner_view.xml', - 'wizard/crm_phonecall_to_opportunity_view.xml', - - 'wizard/crm_opportunity_to_phonecall_view.xml', - 'wizard/crm_partner_to_opportunity_view.xml', - - 'wizard/crm_forward_to_partner_view.xml', - 'wizard/crm_send_email_view.xml', - 'crm_view.xml', - - 'crm_action_rule_view.xml', - 'crm_lead_view.xml', - 'crm_lead_menu.xml', - - 'crm_meeting_view.xml', - 'crm_meeting_menu.xml', - - 'crm_phonecall_view.xml', - 'crm_phonecall_menu.xml', - - 'crm_opportunity_view.xml', - 'crm_opportunity_menu.xml', - - 'security/crm_security.xml', - 'security/ir.model.access.csv', - - 'report/crm_lead_report_view.xml', - 'report/crm_phonecall_report_view.xml', - - 'process/crm_configuration_process.xml', + 'wizard/crm_lead_to_partner_view.xml', + 'wizard/crm_lead_to_opportunity_view.xml', + + 'wizard/crm_phonecall_to_phonecall_view.xml', + 'wizard/crm_phonecall_to_partner_view.xml', + 'wizard/crm_phonecall_to_opportunity_view.xml', + + 'wizard/crm_opportunity_to_phonecall_view.xml', + 'wizard/crm_partner_to_opportunity_view.xml', + + 'wizard/crm_forward_to_partner_view.xml', + 'wizard/crm_send_email_view.xml', + 'crm_view.xml', + + 'crm_action_rule_view.xml', + 'crm_lead_view.xml', + 'crm_lead_menu.xml', + + 'crm_meeting_view.xml', + 'crm_meeting_menu.xml', + + 'crm_phonecall_view.xml', + 'crm_phonecall_menu.xml', + + 'crm_opportunity_view.xml', + 'crm_opportunity_menu.xml', + + 'security/crm_security.xml', + 'security/ir.model.access.csv', + + 'report/crm_lead_report_view.xml', + 'report/crm_phonecall_report_view.xml', + + 'process/crm_configuration_process.xml', 'crm_installer_view.xml' - ], + ], 'demo_xml': [ - 'crm_demo.xml', - 'crm_lead_demo.xml', - 'crm_meeting_demo.xml', - 'crm_opportunity_demo.xml', + 'crm_demo.xml', + 'crm_lead_demo.xml', + 'crm_meeting_demo.xml', + 'crm_opportunity_demo.xml', 'crm_phonecall_demo.xml' - ], + ], 'test': [ # 'test/test_crm_lead.yml', # 'test/test_crm_meeting.yml', @@ -113,6 +113,6 @@ between mails and Open ERP.""", ], 'installable': True, 'active': False, - 'certificate': '0079056041421', + 'certificate': '0079056041421', } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/crm.py b/addons/crm/crm.py index ea6db3fc992..ba45efd4b3b 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -202,7 +202,11 @@ class crm_case(object): return {'value': {'email_from': False}} address = self.pool.get('res.partner.address').browse(cr, uid, add) return {'value': {'email_from': address.email}} - + + def _history(self, cr, uid, cases, keyword, history=False, email=False, details=None, email_from=False, message_id=False, context={}): + mailgate_pool = self.pool.get('mailgate.thread') + return mailgate_pool._history(cr, uid, cases, keyword, history=history, email=email, details=details, email_from=email_from, message_id=message_id, context=context) + def case_open(self, cr, uid, ids, *args): """Opens Case @param self: The object pointer @@ -311,6 +315,107 @@ class crm_case(object): self._action(cr, uid, cases, 'draft') return True + def remind_partner(self, cr, uid, ids, context={}, attach=False): + + """ + @param self: The object pointer + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: List of Remind Partner's IDs + @param context: A standard dictionary for contextual values + + """ + return self.remind_user(cr, uid, ids, context, attach, + destination=False) + + def remind_user(self, cr, uid, ids, context={}, attach=False,destination=True): + + """ + @param self: The object pointer + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: List of Remind user's IDs + @param context: A standard dictionary for contextual values + + """ + for case in self.browse(cr, uid, ids): + if not case.section_id.reply_to: + raise osv.except_osv(_('Error!'), ("Reply To is not specified in the sales team")) + if not case.email_from: + raise osv.except_osv(_('Error!'), ("Partner Email is not specified in Case")) + if case.section_id.reply_to and case.email_from: + src = case.email_from + dest = case.section_id.reply_to + body = "" + body = case.email_last or case.description + if not destination: + src, dest = dest, src + if body and case.user_id.signature: + body += '\n\n%s' % (case.user_id.signature) + + body = self.format_body(body) + dest = [dest] + + attach_to_send = None + + if attach: + attach_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model', '=', 'mailgate.thread'), ('res_id', '=', case.id)]) + attach_to_send = self.pool.get('ir.attachment').read(cr, uid, attach_ids, ['datas_fname','datas']) + attach_to_send = map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send) + + # Send an email + flag = tools.email_send( + src, + dest, + "Reminder: [%s] %s" % (str(case.id), case.name, ), + body, + reply_to=case.section_id.reply_to, + openobject_id=str(case.id), + attach=attach_to_send + ) + self._history(cr, uid, [case], _('Send'), history=True, email=dest, details=body, email_from=src) + #if flag: + # raise osv.except_osv(_('Email!'),("Email Successfully Sent")) + #else: + # raise osv.except_osv(_('Email Fail!'),("Email is not sent successfully")) + return True + + def _check(self, cr, uid, ids=False, context={}): + """ + Function called by the scheduler to process cases for date actions + Only works on not done and cancelled cases + + @param self: The object pointer + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param context: A standard dictionary for contextual values + """ + cr.execute('select * from crm_case \ + where (date_action_last<%s or date_action_last is null) \ + and (date_action_next<=%s or date_action_next is null) \ + and state not in (\'cancel\',\'done\')', + (time.strftime("%Y-%m-%d %H:%M:%S"), + time.strftime('%Y-%m-%d %H:%M:%S'))) + + ids2 = map(lambda x: x[0], cr.fetchall() or []) + cases = self.browse(cr, uid, ids2, context) + return self._action(cr, uid, cases, False, context=context) + + def _action(self, cr, uid, cases, state_to, scrit=None, context={}): + if not context: + context = {} + context['state_to'] = state_to + rule_obj = self.pool.get('base.action.rule') + model_obj = self.pool.get('ir.model') + model_ids = model_obj.search(cr, uid, [('model','=',self._name)]) + rule_ids = rule_obj.search(cr, uid, [('name','=',model_ids[0])]) + return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context) + + def format_body(self, body): + return self.pool.get('base.action.rule').format_body(body) + + def format_mail(self, obj, body): + return self.pool.get('base.action.rule').format_mail(obj, body) class crm_case_section(osv.osv): """Sales Team""" @@ -506,62 +611,6 @@ def _links_get(self, cr, uid, context=None): res = obj.read(cr, uid, ids, ['object', 'name'], context) return [(r['object'], r['name']) for r in res] - -class crm_case_log(osv.osv): - """ Case Communication History """ - _name = "crm.case.log" - _description = "Case Communication History" - - _order = "id desc" - _columns = { - 'name': fields.char('Status', size=64), - 'date': fields.datetime('Date'), - 'section_id': fields.many2one('crm.case.section', 'Section'), - 'user_id': fields.many2one('res.users', 'User Responsible', readonly=True), - 'model_id': fields.many2one('ir.model', "Model"), - 'res_id': fields.integer('Resource ID'), - } - - _defaults = { - 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), - } - -crm_case_log() - -class crm_case_history(osv.osv): - """Case history""" - - _name = "crm.case.history" - _description = "Case history" - _order = "id desc" - _inherits = {'crm.case.log': "log_id"} - - def _note_get(self, cursor, user, ids, name, arg, context=None): - """ Gives case History Description - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: List of case History’s IDs - @param context: A standard dictionary for contextual values - """ - res = {} - for hist in self.browse(cursor, user, ids, context or {}): - res[hist.id] = (hist.email_from or '/') + ' (' + str(hist.date) + ')\n' - res[hist.id] += (hist.description or '') - return res - - _columns = { - 'description': fields.text('Description'), - 'note': fields.function(_note_get, method=True, string="Description", type="text"), - 'email_to': fields.char('Email To', size=84), - 'email_from' : fields.char('Email From', size=84), - 'log_id': fields.many2one('crm.case.log','Log',ondelete='cascade'), - 'message_id': fields.char('Message Id', size=1024, readonly=True, help="Message Id on Email Server.", select=True), - } - -crm_case_history() - - class users(osv.osv): _inherit = 'res.users' _description = "Users" diff --git a/addons/crm/crm_action_rule.py b/addons/crm/crm_action_rule.py index 82c60e64f23..3a14659672a 100644 --- a/addons/crm/crm_action_rule.py +++ b/addons/crm/crm_action_rule.py @@ -34,138 +34,24 @@ from osv.orm import except_orm import crm -class case(osv.osv): - """ Case """ - - _inherit = 'mailgate.thread' - _description = 'case' - - _columns = { - 'date_action_last': fields.datetime('Last Action', readonly=1), - 'date_action_next': fields.datetime('Next Action', readonly=1), - } - - def remind_partner(self, cr, uid, ids, context={}, attach=False): - - """ - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: List of Remind Partner's IDs - @param context: A standard dictionary for contextual values - - """ - return self.remind_user(cr, uid, ids, context, attach, - destination=False) - - def remind_user(self, cr, uid, ids, context={}, attach=False,destination=True): - - """ - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: List of Remind user's IDs - @param context: A standard dictionary for contextual values - - """ - for case in self.browse(cr, uid, ids): - if not case.section_id.reply_to: - raise osv.except_osv(_('Error!'), ("Reply To is not specified in the sales team")) - if not case.email_from: - raise osv.except_osv(_('Error!'), ("Partner Email is not specified in Case")) - if case.section_id.reply_to and case.email_from: - src = case.email_from - dest = case.section_id.reply_to - body = "" - body = case.email_last or case.description - if not destination: - src, dest = dest, src - if body and case.user_id.signature: - body += '\n\n%s' % (case.user_id.signature) - - body = self.format_body(body) - dest = [dest] - - attach_to_send = None - - if attach: - attach_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model', '=', 'mailgate.thread'), ('res_id', '=', case.id)]) - attach_to_send = self.pool.get('ir.attachment').read(cr, uid, attach_ids, ['datas_fname','datas']) - attach_to_send = map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send) - - # Send an email - flag = tools.email_send( - src, - dest, - "Reminder: [%s] %s" % (str(case.id), case.name, ), - body, - reply_to=case.section_id.reply_to, - openobject_id=str(case.id), - attach=attach_to_send - ) - self._history(cr, uid, [case], _('Send'), history=True, email=dest, details=body, email_from=src) - #if flag: - # raise osv.except_osv(_('Email!'),("Email Successfully Sent")) - #else: - # raise osv.except_osv(_('Email Fail!'),("Email is not sent successfully")) - return True - - def _check(self, cr, uid, ids=False, context={}): - """ - Function called by the scheduler to process cases for date actions - Only works on not done and cancelled cases - - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param context: A standard dictionary for contextual values - """ - cr.execute('select * from crm_case \ - where (date_action_last<%s or date_action_last is null) \ - and (date_action_next<=%s or date_action_next is null) \ - and state not in (\'cancel\',\'done\')', - (time.strftime("%Y-%m-%d %H:%M:%S"), - time.strftime('%Y-%m-%d %H:%M:%S'))) - - ids2 = map(lambda x: x[0], cr.fetchall() or []) - cases = self.browse(cr, uid, ids2, context) - return self._action(cr, uid, cases, False, context=context) - - def _action(self, cr, uid, cases, state_to, scrit=None, context={}): - if not context: - context = {} - context['state_to'] = state_to - rule_obj = self.pool.get('base.action.rule') - model_obj = self.pool.get('ir.model') - model_ids = model_obj.search(cr, uid, [('model','=',self._name)]) - rule_ids = rule_obj.search(cr, uid, [('name','=',model_ids[0])]) - return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context) - - def format_body(self, body): - return self.pool.get('base.action.rule').format_body(body) - - def format_mail(self, obj, body): - return self.pool.get('base.action.rule').format_mail(obj, body) -case() - class base_action_rule(osv.osv): """ Base Action Rule """ _inherit = 'base.action.rule' _description = 'Action Rules' _columns = { - 'trg_section_id': fields.many2one('crm.case.section', 'Sales Team'), - 'trg_max_history': fields.integer('Maximum Communication History'), - 'trg_categ_id': fields.many2one('crm.case.categ', 'Category'), - 'regex_history' : fields.char('Regular Expression on Case History', size=128), - 'act_section_id': fields.many2one('crm.case.section', 'Set Team to'), - 'act_categ_id': fields.many2one('crm.case.categ', 'Set Category to'), - 'act_mail_to_partner': fields.boolean('Mail to partner',help="Check \ -this if you want the rule to send an email to the partner."), + 'trg_section_id': fields.many2one('crm.case.section', 'Sales Team'), + 'trg_max_history': fields.integer('Maximum Communication History'), + 'trg_categ_id': fields.many2one('crm.case.categ', 'Category'), + 'regex_history' : fields.char('Regular Expression on Case History', size=128), + 'act_section_id': fields.many2one('crm.case.section', 'Set Team to'), + 'act_categ_id': fields.many2one('crm.case.categ', 'Set Category to'), + 'act_mail_to_partner': fields.boolean('Mail to Partner', help="Check \ +this if you want the rule to send an email to the partner."), } - def email_send(self, cr, uid, obj, emails, body, emailfrom=tools.config.get('email_from',False), context={}): + def email_send(self, cr, uid, obj, emails, body, emailfrom=tools.config.get('email_from', False), context={}): body = self.format_mail(obj, body) if not emailfrom: if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.address_id and obj.user_id.address_id.email: @@ -178,7 +64,7 @@ this if you want the rule to send an email to the partner."), else: reply_to = emailfrom if not emailfrom: - raise osv.except_osv(_('Error!'), + raise osv.except_osv(_('Error!'), _("No E-Mail ID Found for your Company address!")) return tools.email_send(emailfrom, emails, name, body, reply_to=reply_to, openobject_id=str(obj.id)) @@ -253,7 +139,7 @@ this if you want the rule to send an email to the partner."), @param context: A standard dictionary for contextual values """ res = super(base_action_rule, self).state_get(cr, uid, context=context) - return res + [('escalate','Escalate')] + crm.AVAILABLE_STATES + return res + [('escalate', 'Escalate')] + crm.AVAILABLE_STATES def priority_get(self, cr, uid, context={}): diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index f3f7c46fd06..96bc0b269d7 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -34,7 +34,8 @@ class crm_lead(osv.osv, crm_case): _name = "crm.lead" _description = "Leads Cases" _order = "priority, id desc" - _inherit = ['res.partner.address', 'mailgate.thread'] + _inherit = ['res.partner.address'] + _inherits = {'mailgate.thread': 'thread_id'} def _compute_day(self, cr, uid, ids, fields, args, context={}): """ @@ -74,7 +75,7 @@ class crm_lead(osv.osv, crm_case): duration = float(ans.days) if lead.section_id and lead.section_id.resource_calendar_id: - duration = float(ans.days) * 24 + duration = float(ans.days) * 24 new_dates = cal_obj.interval_get(cr, uid, lead.section_id.resource_calendar_id and lead.section_id.resource_calendar_id.id or False, @@ -95,18 +96,23 @@ class crm_lead(osv.osv, crm_case): _columns = { # From crm.case - 'email_from': fields.char('Email', size=128, help="These people will receive email."), + 'name': fields.char('Name', size=64), + 'active': fields.boolean('Active', required=False), + 'date_action_last': fields.datetime('Last Action', readonly=1), + 'date_action_next': fields.datetime('Next Action', readonly=1), + 'email_from': fields.char('Email', size=128, help="These people will receive email."), 'section_id': fields.many2one('crm.case.section', 'Sales Team', \ select=True, help='Sales team to which Case belongs to.\ - Define Responsible user and Email account for mail gateway.'), + Define Responsible user and Email account for mail gateway.'), 'create_date': fields.datetime('Creation Date' , readonly=True), 'email_cc': fields.text('Watchers Emails', size=252 , help="These \ people will receive a copy of the future communication between partner \ and users by email"), - 'description': fields.text('Notes'), - 'write_date': fields.datetime('Update Date' , readonly=True), + 'description': fields.text('Description'), + 'write_date': fields.datetime('Update Date' , readonly=True), - # Lead fields + # Lead fields + 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False), 'categ_id': fields.many2one('crm.case.categ', 'Lead Source', \ domain="[('section_id','=',section_id),\ ('object_id.model', '=', 'crm.lead')]"), @@ -117,22 +123,22 @@ and users by email"), 'type':fields.selection([ ('lead','Lead'), ('opportunity','Opportunity'), - - ],'Type', help="Type is used to separate Leads and Opportunities"), + + ],'Type', help="Type is used to separate Leads and Opportunities"), 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'), 'date_closed': fields.datetime('Closed', readonly=True), 'stage_id': fields.many2one('crm.case.stage', 'Stage', \ domain="[('section_id','=',section_id),\ ('object_id.model', '=', 'crm.lead')]"), - 'user_id': fields.many2one('res.users', 'Salesman'), + 'user_id': fields.many2one('res.users', 'Salesman',help='By Default Salesman is Administrator when create New User'), 'referred': fields.char('Referred By', size=64), 'date_open': fields.datetime('Opened', readonly=True), 'day_open': fields.function(_compute_day, string='Days to Open', \ method=True, multi='day_open', type="float", store=True), 'day_close': fields.function(_compute_day, string='Days to Close', \ method=True, multi='day_close', type="float", store=True), - 'function_name': fields.char('Function', size=64), - 'state': fields.selection(crm.AVAILABLE_STATES, 'State', size=16, readonly=True, + 'function_name': fields.char('Function', size=64), + 'state': fields.selection(crm.AVAILABLE_STATES, 'State', size=16, readonly=True, help='The state is set to \'Draft\', when a case is created.\ \nIf the case is in progress the state is set to \'Open\'.\ \nWhen the case is over, the state is set to \'Done\'.\ @@ -140,15 +146,15 @@ and users by email"), } _defaults = { - 'active': lambda *a: 1, - 'user_id': crm_case._get_default_user, - 'email_from': crm_case._get_default_email, - 'state': lambda *a: 'draft', - 'section_id': crm_case._get_section, + 'active': lambda *a: 1, + 'user_id': crm_case._get_default_user, + 'email_from': crm_case._get_default_email, + 'state': lambda *a: 'draft', + 'section_id': crm_case._get_section, 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c), 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0], } - + def case_open(self, cr, uid, ids, *args): """Overrides cancel for crm_case for setting Open Date @param self: The object pointer @@ -160,7 +166,7 @@ and users by email"), res = super(crm_lead, self).case_open(cr, uid, ids, *args) self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')}) return res - + def case_close(self, cr, uid, ids, *args): """Overrides close for crm_case for setting close date @param self: The object pointer diff --git a/addons/crm/crm_lead_menu.xml b/addons/crm/crm_lead_menu.xml index d4d182a2dc5..4fef09d28df 100644 --- a/addons/crm/crm_lead_menu.xml +++ b/addons/crm/crm_lead_menu.xml @@ -9,7 +9,7 @@ <field name="domain">['|', ('type','=','lead'), ('type','=',False)]</field> <field name="view_id" ref="crm_case_tree_view_leads"/> <field name="search_view_id" ref="crm.view_crm_case_leads_filter"/> - <field name="context">{'search_default_current':1}</field> + <field name="context">{'search_default_current':1, 'default_type': 'lead'}</field> </record> <record model="ir.actions.act_window.view" id="action_crm_tag_tree_view_leads_all"> diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index aaca747e594..fbbf7882718 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -2,7 +2,7 @@ <openerp> <data> -<!--Lead Stage Form view --> + <!--Lead Stage Form view --> <record id="crm_lead_stage_act" model="ir.actions.act_window"> <field name="name">Lead Stages</field> @@ -16,7 +16,7 @@ groups="base.group_extended" parent="crm.menu_crm_case_stage" /> - <!-- Resource Type Form View --> + <!-- Resource Type Form View --> <record id="crm_lead_resource_act" model="ir.actions.act_window"> <field name="name">Lead Resource Type</field> @@ -31,7 +31,7 @@ groups="base.group_extended" parent="crm.menu_crm_case_resource_type" /> -<!-- CRM Lead Form View --> + <!-- CRM Lead Form View --> <record model="ir.ui.view" id="crm_case_form_view_leads"> <field name="name">CRM - Leads Form</field> @@ -47,7 +47,7 @@ name="convert_opportunity" string="Convert" help="Convert to Opportunity" - icon="gtk-index" + icon="gtk-index" type="object"/> <newline /> <field name="section_id" colspan="1" @@ -175,7 +175,7 @@ <field name="email_to"/> <field name="description"/> </tree> - </field> + </field> <button colspan="2" string="Send New Email" name="%(action_crm_send_mail)d" context="{'mail':'new', 'model': 'crm.lead'}" @@ -190,7 +190,7 @@ </field> </record> -<!-- CRM Lead Tree View --> + <!-- CRM Lead Tree View --> <record model="ir.ui.view" id="crm_case_tree_view_leads"> <field name="name">CRM - Leads Tree</field> @@ -238,7 +238,7 @@ </field> </record> -<!-- CRM Lead Calendar View --> + <!-- CRM Lead Calendar View --> <record model="ir.ui.view" id="crm_case_calendar_view_leads"> <field name="name">CRM - Leads Calendar</field> @@ -256,7 +256,7 @@ </field> </record> -<!-- CRM Lead Search View --> + <!-- CRM Lead Search View --> <record id="view_crm_case_leads_filter" model="ir.ui.view"> <field name="name">CRM - Leads Search</field> @@ -326,6 +326,5 @@ </field> </record> - </data> </openerp> diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py index 67af5bfff16..633558334b7 100644 --- a/addons/crm/crm_meeting.py +++ b/addons/crm/crm_meeting.py @@ -43,7 +43,8 @@ class crm_meeting(osv.osv, crm_case): _name = 'crm.meeting' _description = "Meeting Cases" _order = "id desc" - _inherit = ["mailgate.thread", "calendar.event"] + _inherit = ["calendar.event"] + _inherits = {'mailgate.thread': 'thread_id'} _columns = { # From crm.case @@ -58,6 +59,7 @@ class crm_meeting(osv.osv, crm_case): 'id': fields.integer('ID'), # Meeting fields + 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False), 'categ_id': fields.many2one('crm.case.categ', 'Meeting Type', \ domain="[('object_id.model', '=', 'crm.meeting')]", \ ), @@ -157,6 +159,22 @@ class calendar_attendee(osv.osv): calendar_attendee() +class res_users(osv.osv): + _name = 'res.users' + _inherit = 'res.users' + + def create(self, cr, uid, data, context={}): + user_id = super(res_users, self).create(cr, uid, data, context) + data_obj = self.pool.get('ir.model.data') + data_id = data_obj._get_id(cr, uid, 'crm', 'ir_ui_view_sc_calendar0') + view_id = data_obj.browse(cr, uid, data_id, context=context).res_id + copy_id = self.pool.get('ir.ui.view_sc').copy(cr, uid, view_id, default = { + 'user_id': user_id}, context=context) + return user_id + +res_users() + + class res_partner(osv.osv): """ Inherits partner and adds meetings information in the partner form """ _inherit = 'res.partner' diff --git a/addons/crm/crm_meeting_menu.xml b/addons/crm/crm_meeting_menu.xml index 3f8e1bd1fde..fd5509641d4 100644 --- a/addons/crm/crm_meeting_menu.xml +++ b/addons/crm/crm_meeting_menu.xml @@ -110,7 +110,8 @@ <menuitem id="menu_attendee_invitations" name="Meeting Invitations" parent="crm.menu_meeting_sale" - sequence="10" action="action_view_attendee_form" /> + sequence="10" action="action_view_attendee_form" + groups="base.group_extended" /> </data> </openerp> diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml index 6712ffe23ce..894fdbb6207 100644 --- a/addons/crm/crm_meeting_view.xml +++ b/addons/crm/crm_meeting_view.xml @@ -24,18 +24,18 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Meetings"> - <group col="6" colspan="4"> + <group col="6" colspan="4"> <field name="name" select="1" string="Summary" - colspan="2" /> + required="1" colspan="2" /> <field name="categ_id" widget="selection" string="Meeting Type" groups="base.group_extended" domain="[('object_id.model', '=', 'crm.meeting')]" /> - <field name="allday" colspan="2" on_change="onchange_allday(allday)" /> - <field name="date" string="Start Date" required="1" - on_change="onchange_dates(date,duration,False)" /> + <field name="allday" colspan="2" on_change="onchange_allday(allday)" /> + <field name="date" string="Start Date" required="1" + on_change="onchange_dates(date,duration,False,allday)" /> <field name="duration" widget="float_time" - on_change="onchange_dates(date,duration,False)" /> + on_change="onchange_dates(date,duration,False,allday)" /> <field name="date_deadline" string="End Date" required="1" on_change="onchange_dates(date,False,date_deadline)" /> @@ -50,6 +50,10 @@ attrs="{'invisible':[('rrule_type','in', ('none', False))]}" name="open_meeting" icon="gtk-edit" type="object" /> + <button string="ExRule" + name="%(base_calendar.action_base_calendar_set_exrule)d" icon="gtk-zoom-out" type="action" + context="{'model' : 'crm.meeting'}" + attrs="{'invisible':[('rrule_type','in', ('none', False))]}"/> </group> </group> <group col="4" colspan="4" name="rrule" attrs="{'invisible': [('rrule_type','!=','custom')]}"> @@ -213,7 +217,6 @@ <field name="partner_id" string="Partner" /> <field name="date" string="Meeting Date" /> <field name="duration" /> - <field name="user_id" /> <field name="state"/> </tree> </field> @@ -324,7 +327,7 @@ </field> </field> </record> - + <!-- Partners inherited form --> <record id="view_meeting_partner_info_form" model="ir.ui.view"> diff --git a/addons/crm/crm_opportunity_menu.xml b/addons/crm/crm_opportunity_menu.xml index cfce1a6aa9a..4471c0bcb8e 100644 --- a/addons/crm/crm_opportunity_menu.xml +++ b/addons/crm/crm_opportunity_menu.xml @@ -3,16 +3,6 @@ <data noupdate="1"> <act_window - id="act_crm_opportunity_crm_meeting_new" - name="Meetings" - res_model="crm.meeting" - src_model="crm.lead" - view_mode="tree,form,calendar," - context="{'default_duration': 4.0, 'default_opportunity_id': active_id}" - domain="[('user_id','=',uid), ('opportunity_id', '=', active_id)]" - view_type="form"/> - - <act_window id="act_crm_opportunity_crm_phonecall_new" name="Phone calls" res_model="crm.phonecall" @@ -22,12 +12,22 @@ domain="[('user_id','=',uid),('opportunity_id', '=', active_id)]" view_type="form"/> + <act_window + id="act_crm_opportunity_crm_meeting_new" + name="Meetings" + res_model="crm.meeting" + src_model="crm.lead" + view_mode="tree,form,calendar," + context="{'default_duration': 4.0, 'default_opportunity_id': active_id}" + domain="[('user_id','=',uid), ('opportunity_id', '=', active_id)]" + view_type="form"/> + <record model="ir.actions.act_window" id="crm_case_category_act_oppor11"> <field name="name">Opportunities</field> <field name="res_model">crm.lead</field> <field name="view_mode">tree,form,graph</field> <field name="domain">[('type','=','opportunity')]</field> - <field name="context">{'search_default_current':1}</field> + <field name="context">{'search_default_current':1, 'default_type': 'opportunity'}</field> <field name="view_id" ref="crm_case_tree_view_oppor"/> <field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/> </record> diff --git a/addons/crm/crm_opportunity_view.xml b/addons/crm/crm_opportunity_view.xml index 7594eb09361..4614f077b80 100644 --- a/addons/crm/crm_opportunity_view.xml +++ b/addons/crm/crm_opportunity_view.xml @@ -2,7 +2,7 @@ <openerp> <data> -<!-- Opportunity Categories Form View --> + <!-- Opportunity Categories Form View --> <record id="crm_opportunity_categ_action" model="ir.actions.act_window"> <field name="name">Opportunity Categories</field> @@ -17,7 +17,7 @@ id="menu_crm_case_opportunity-act" parent="crm.menu_crm_case_categ" /> -<!-- Opportunity Stages Form View--> + <!-- Opportunity Stages Form View--> <record id="crm_opportunity_stage_act" model="ir.actions.act_window"> <field name="name">Opportunity Stages</field> @@ -32,7 +32,7 @@ id="menu_crm_opportunity_stage_act" parent="crm.menu_crm_case_stage" /> -<!-- Opportunity Resource Type Form View --> + <!-- Opportunity Resource Type Form View --> <record id="crm_opportunity_resource_act" model="ir.actions.act_window"> <field name="name">Opportunity Resource Type</field> @@ -47,7 +47,7 @@ id="menu_crm_opportunity_resource_act" parent="crm.menu_crm_case_resource_type" /> -<!-- Opportunities Form View --> + <!-- Opportunities Form View --> <record model="ir.ui.view" id="crm_case_form_view_oppor"> <field name="name">Opportunities</field> @@ -56,7 +56,7 @@ <field name="arch" type="xml"> <form string="Opportunities"> <group colspan="4" col="7"> - <field name="name" string="Opportunity"/> + <field name="name" required="1" string="Opportunity"/> <label string="Stage:" align="1.0"/> <group colspan="1" col="4"> <field name="stage_id" nolabel="1" @@ -204,7 +204,7 @@ </field> </record> -<!-- Opportunities Tree View --> + <!-- Opportunities Tree View --> <record model="ir.ui.view" id="crm_case_tree_view_oppor"> <field name="name">Opportunities Tree</field> @@ -216,7 +216,7 @@ <field name="name" string="Opportunity"/> <field name="partner_id"/> <field name="stage_id"/> - <field name="categ_id" invisible="1"/> + <field name="categ_id" invisible="1" groups="base.group_extended"/> <button name="stage_previous" string="Previous" states="open,pending" type="object" icon="gtk-go-back" /> <button name="stage_next" string="Next" @@ -245,7 +245,7 @@ </field> </record> -<!-- Opportunities Graph View --> + <!-- Opportunities Graph View --> <record model="ir.ui.view" id="crm_case_graph_view_opportunity"> <field name="name">CRM - Opportunity Graph</field> @@ -260,7 +260,7 @@ </field> </record> -<!-- Opportunities Search View --> + <!-- Opportunities Search View --> <record id="view_crm_case_opportunities_filter" model="ir.ui.view"> <field name="name">CRM - Opportunities Search</field> @@ -292,44 +292,41 @@ <field name="user_id" widget="selection"> <filter icon="terp-partner" domain="[('user_id','=',uid)]" - help="My Opportunities" default="1" - /> + help="My Opportunities" default="1"/> <filter icon="terp-partner" - domain="[('user_id','=', False)]" - help="Unassigned Opportunities" /> + domain="[('user_id','=', uid)]" + help="Unassigned Opportunities"/> </field> <field name="section_id" default="context.get('section_id', False)" select="1" widget="selection"> <filter icon="terp-crm" domain="[('section_id','=',context.get('section_id',False))]" - help="My section" /> + help="My section"/> </field> <newline/> <group expand="0" string="Group By..." colspan="16"> <filter string="Stage" icon="terp-crm" domain="[]" - context="{'group_by':'stage_id'}" /> + context="{'group_by':'stage_id'}"/> <filter string="Priority" icon="terp-crm" domain="[]" - context="{'group_by':'priority'}" /> + context="{'group_by':'priority'}"/> <filter string="Category" icon="terp-crm" - domain="[]" context="{'group_by':'categ_id'}" /> + domain="[]" context="{'group_by':'categ_id'}"/> - <separator orientation="vertical" /> - <filter string="Partner" icon="terp-crm" domain="[]" - context="{'group_by':'partner_id'}" /> + <separator orientation="vertical"/> <filter string="Salesman" icon="terp-crm" - domain="[('user_id','=',uid)]" context="{'group_by':'user_id'}" /> - <separator orientation="vertical" /> + domain="[('user_id','=',uid)]" context="{'group_by':'user_id'}"/> + <separator orientation="vertical"/> <filter string="Creation" icon="terp-project" - domain="[]" context="{'group_by':'create_date'}" /> + domain="[]" context="{'group_by':'create_date'}"/> <filter string="Exp.Closing" icon="terp-project" - domain="[]" context="{'group_by':'date_deadline'}" /> + domain="[]" context="{'group_by':'date_deadline'}"/> </group> </search> </field> </record> - <!-- Partners inherited form --> + <!-- Partners inherited form --> <record id="view_opp_partner_info_form" model="ir.ui.view"> <field name="name">res.partner.opportunity.info.inherit</field> @@ -382,6 +379,5 @@ </field> </record> - </data> </openerp> diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py index 6244ba1807a..7a6c728789c 100644 --- a/addons/crm/crm_phonecall.py +++ b/addons/crm/crm_phonecall.py @@ -31,10 +31,13 @@ class crm_phonecall(osv.osv, crm_case): _name = "crm.phonecall" _description = "Phonecall Cases" _order = "id desc" - _inherit = 'mailgate.thread' + _inherits = {'mailgate.thread': 'thread_id'} _columns = { # From crm.case + 'name': fields.char('Name', size=64), + 'active': fields.boolean('Active', required=False), + 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False), 'section_id': fields.many2one('crm.case.section', 'Sales Team', \ select=True, help='Sales team to which Case belongs to.\ Define Responsible user and Email account for mail gateway.'), diff --git a/addons/crm/crm_phonecall_menu.xml b/addons/crm/crm_phonecall_menu.xml index 916cd5f64f3..89a31d41e10 100644 --- a/addons/crm/crm_phonecall_menu.xml +++ b/addons/crm/crm_phonecall_menu.xml @@ -10,6 +10,7 @@ view_mode="calendar,tree,form" context="{'default_partner_id': active_id, 'default_duration': 1.0}" domain="[('partner_id', '=', active_id)]" + groups="base.group_extended" /> <!-- PHONE CALLS (menu) --> diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml index 63454ad2848..52450419fd2 100644 --- a/addons/crm/crm_view.xml +++ b/addons/crm/crm_view.xml @@ -16,30 +16,28 @@ <field name="arch" type="xml"> <form string="Sales Team"> <group col="6" colspan="4"> - <field name="name" select="1" colspan="4"/> + <field name="name" select="1" colspan="2"/> + <field name="parent_id" select="2" widget="selection"/> <field name="code" select="1"/> <newline/> - <field name="resource_calendar_id" select="2"/> + <field name="user_id" select="2"/> + <field name="resource_calendar_id" select="2" widget="selection"/> + <field name="active" select="2"/> </group> <notebook colspan="4"> <page string="Sales Team"> <group col="2" colspan="1"> - <separator string="Responsible" colspan="2"/> - <field name="parent_id" select="2" widget="selection"/> - <field name="user_id" select="2"/> - </group> - <group col="2" colspan="1"> - <separator string="Contact Information" colspan="2"/> + <separator string="Mailgateway" colspan="2"/> <field name="reply_to" select="2"/> </group> <group col="2" colspan="1"> - <separator string="Sales Team Property" colspan="2"/> - <field name="active" select="2"/> + <separator string="Configuration" colspan="2"/> <field name="allow_unlink" select="2"/> </group> - <separator string="Members List" colspan="4"/> + <separator string="Team Members" colspan="4"/> <field name="member_ids" nolabel="1" colspan="4"/> - <separator string="Note" colspan="4"/> + </page> + <page string="Notes"> <field name="note" select="1" colspan="4" nolabel="1"/> </page> </notebook> @@ -47,7 +45,7 @@ </field> </record> -<!-- Case Sections Tree View --> + <!-- Case Sections Tree View --> <record id="crm_case_section_view_tree" model="ir.ui.view"> <field name="name">crm.case.section.tree</field> @@ -63,7 +61,7 @@ </field> </record> -<!-- Case Sections Action --> + <!-- Case Sections Action --> <record id="crm_case_section_act" model="ir.actions.act_window"> <field name="name">Sales Team</field> @@ -72,7 +70,7 @@ <field name="view_id" ref="crm_case_section_view_tree"/> </record> -<!-- CRM Stage Tree View --> + <!-- CRM Stage Tree View --> <record model="ir.ui.view" id="crm_case_stage_tree"> <field name="name">crm.case.stage.tree</field> @@ -89,7 +87,7 @@ </field> </record> -<!-- CRM Stage Form View --> + <!-- CRM Stage Form View --> <record model="ir.ui.view" id="crm_case_stage_form"> <field name="name">crm.case.stage.form</field> @@ -110,7 +108,7 @@ </field> </record> -<!-- CRM Stage Action --> + <!-- CRM Stage Action --> <record id="crm_case_stage_act" model="ir.actions.act_window"> <field name="name">Stages</field> @@ -121,8 +119,7 @@ <menuitem id="menu_crm_case_stage" name="Stages" parent="base.menu_crm_configuration" groups="base.group_extended"/> - -<!-- Case Categories Form View --> + <!-- Case Categories Form View --> <record id="crm_case_categ-view" model="ir.ui.view"> <field name="name">crm.case.categ.form</field> @@ -137,7 +134,7 @@ </field> </record> -<!-- Case Categories Tree View --> + <!-- Case Categories Tree View --> <record id="crm_case_categ_tree-view" model="ir.ui.view"> <field name="name">crm.case.categ.tree</field> @@ -151,7 +148,7 @@ </field> </record> -<!-- Case Categories Action --> + <!-- Case Categories Action --> <record id="crm_case_categ-act" model="ir.actions.act_window"> <field name="name">Categories</field> @@ -166,7 +163,7 @@ parent="base.menu_crm_configuration" /> -<!-- Resource Type of case Tree View --> + <!-- Resource Type of case Tree View --> <record model="ir.ui.view" id="crm_case_resource_type_tree"> <field name="name">crm.case.resource.type.tree</field> @@ -181,7 +178,7 @@ </field> </record> -<!-- Resource Type of case Form View --> + <!-- Resource Type of case Form View --> <record model="ir.ui.view" id="crm_case_resource_type_form"> <field name="name">crm.case.resource.type.form</field> @@ -196,7 +193,7 @@ </field> </record> -<!-- Resource Type of case Action --> + <!-- Resource Type of case Action --> <record id="crm_case_resource_type_act" model="ir.actions.act_window"> <field name="name">Resource Type</field> @@ -215,7 +212,7 @@ <field name="view_id" ref="crm_case_section_view_tree"/> </record> -<!-- Cases Tree View --> + <!-- Cases Tree View --> <record id="crm_case_log_tree-view" model="ir.ui.view"> <field name="name">crm.case.log.tree</field> @@ -235,320 +232,7 @@ </field> </record> -<!--Case History Tree View --> - - <record id="crm_case_history_tree-view" model="ir.ui.view"> - <field name="name">crm.case.history.tree</field> - <field name="model">crm.case.history</field> - <field name="type">tree</field> - <field name="arch" type="xml"> - <tree string="Case History"> - <field name="date"/> - <field name="name"/> - <field name="user_id"/> - <!-- - <field name="som"/> - <field name="canal_id"/> - --> - </tree> - </field> - </record> - -<!-- Case Calendar View --> - - <record id="crm_case_calendar-view" model="ir.ui.view"> - <field name="name">crm.case.calendar</field> - <field name="model">mailgate.thread</field> - <field name="type">calendar</field> - <field name="arch" type="xml"> - <calendar color="user_id" date_start="create_date" - date_stop="date_deadline" day_length="12" - string="Cases"> - <field name="name" /> - <field name="partner_id" /> - <field name="state" /> - </calendar> - </field> - </record> - -<!-- Case Tree View --> - - <record id="crm_case_tree-view" model="ir.ui.view"> - <field name="name">crm.case.tree</field> - <field name="model">mailgate.thread</field> - <field name="type">tree</field> - <field name="arch" type="xml"> - <tree colors="red:date_deadline<current_date and state=='open';black:state in ('draft', 'cancel','done','pending')" string="Cases"> - <field name="id"/> - <field name="section_id"/> - <field name="create_date"/> - <field name="date_deadline"/> - <field name="name"/> - <field name="partner_id"/> - <field name="user_id"/> - <field name="state"/> - <button name="case_close" - states="open,draft,pending" string="Close" - type="object" icon="gtk-close" /> - <button name="case_open" states="draft,pending" - string="Open" type="object" icon="gtk-go-forward" /> - <button name="case_cancel" - states="draft,open,pending" string="Cancel" - type="object" icon="gtk-cancel" /> - <button name="case_pending" states="draft,open" - string="Pending" type="object" - icon="gtk-media-pause" /> - <button name="case_escalate" - states="open,draft,pending" string="Escalate" - groups="base.group_extended" - type="object" icon="gtk-go-up" /> - <button name="case_reset" states="done,cancel" - string="Reset to Draft" type="object" - icon="gtk-convert" /> - </tree> - </field> - </record> - -<!-- Case Form View --> - - <record id="crm_case-view" model="ir.ui.view"> - <field name="name">crm.case.form</field> - <field name="model">mailgate.thread</field> - <field name="type">form</field> - <field name="priority" eval="1"/> - <field name="arch" type="xml"> - <form string="Cases"> - <field colspan="4" name="name" select="1"/> - <field colspan="2" name="section_id" widget="selection"/> - <field name="create_date" select="1"/> - <field name="date_deadline"/> - <newline /> - <notebook colspan="4"> - <page string="General"> - <group col="8" colspan="4"> - <field colspan="4" name="partner_id" - on_change="onchange_partner_id(partner_id, email_from)" - select="1" /> - <field colspan="3" - name="partner_address_id" - on_change="onchange_partner_address_id(partner_address_id, email_from)" - /> - <newline /> - <field colspan="3" name="email_from" - /> - <button name="remind_partner" - states="open,pending" - string="Send Reminder" type="object" - icon="gtk-go-forward" /> - <field name="user_id" select="1" /> - <button name="remind_user" - states="open,pending" - string="Send Reminder" type="object" - icon="gtk-go-forward" /> - </group> - <separator colspan="4" string="Description"/> - <field name="description" colspan="4" nolabel="1"/> - <separator colspan="4"/> - <group col="8" colspan="4"> - <field name="state" select="1"/> - <button name="case_close" - states="open,draft,pending" - string="Close" type="object" - icon="gtk-close" /> - <button name="case_open" - states="draft,pending" string="Open" - type="object" icon="gtk-go-forward" /> - <button name="case_cancel" - states="draft,open,pending" - string="Cancel" type="object" - icon="gtk-cancel" /> - <button name="case_pending" - states="draft,open" string="Pending" - type="object" icon="gtk-media-pause" /> - <button name="case_escalate" - states="open,draft,pending" - string="Escalate" type="object" - groups="base.group_extended" - icon="gtk-go-up" /> - <button name="case_reset" - states="done,cancel" - string="Reset to Draft" type="object" - icon="gtk-convert" /> - </group> - </page> - <page string="History" groups="base.group_extended"> - <field name="id" select="1"/> - <field name="active"/> - <separator colspan="4" string="Dates"/> - <field name="create_date"/> - <field colspan="4" name="log_ids" nolabel="1"> - <form string="Actions"> - <separator colspan="4" string="Action Information"/> - <field colspan="4" name="name"/> - <field name="date"/> - <field name="user_id"/> - </form> - </field> - </page> - <page string="Emails" groups="base.group_extended"> - <group colspan="4"> - <field colspan="4" name="email_cc" string="CC"/> - </group> - <field name="message_ids" colspan="4" nolabel="1" mode="form,tree"> - <form string="Communication history"> - <group col="6" colspan="4"> - <field name="date"/> - <field name="email_to"/> - <field name="email_from"/> - </group> - <newline/> - <field name="description" colspan="4" nolabel="1"/> - <button colspan="4" - string="Reply to Last Email" - name="%(action_crm_send_mail)d" - context="{'mail':'reply', 'model': 'crm.case'}" - icon="gtk-undo" type="action" /> - </form> - <tree string="Communication history"> - <field name="description"/> - <field name="email_to"/> - <field name="date"/> - </tree> - </field> - <button colspan="4" string="Send New Email" - name="%(action_crm_send_mail)d" - context="{'mail':'new', 'model': 'crm.case'}" - icon="gtk-go-forward" type="action" /> - </page> - </notebook> - </form> - </field> - </record> - -<!-- Case Search View --> - - - <record id="view_crm_case_filter" model="ir.ui.view"> - <field name="name">crm.case.select</field> - <field name="model">mailgate.thread</field> - <field name="type">search</field> - <field name="arch" type="xml"> - <search string="Search Case"> - <group col='6' colspan='4'> - <filter icon="terp-partner" string="My Cases" - domain="[('user_id','=',uid)]" separator="1" - default="1" help="Cases Related to Current User" /> - <field name="state" select="1"> - <filter icon="gtk-new" - domain="[('state','in',('draft', 'open'))]" - help="Current Cases" /> - <filter icon="gtk-yes" - domain="[('state','=','open')]" help="Open Cases" /> - <filter icon="gtk-media-pause" - domain="[('state','=','pending')]" - help="Pending Cases" /> - </field> - <separator orientation="vertical" /> - <field name="name" select='1' /> - <field name="user_id" select="1" - widget="selection" /> - </group> - <field name="section_id" - default="context.get('section_id', False)" select="1" - widget="selection"/> - </search> - </field> - </record> - - <record id="crm_case_categ0-act" model="ir.actions.act_window"> - <field name="name">Cases</field> - <field name="res_model">mailgate.thread</field> - <field name="view_type">form</field> - <field name="view_id" ref="crm_case_tree-view"/> - <field name="search_view_id" ref="view_crm_case_filter"/> - </record> - - <record id="crm_case_categ0-act_open" model="ir.actions.act_window"> - <field name="name">Open Cases</field> - <field name="res_model">mailgate.thread</field> - <field name="view_type">form</field> - <field name="domain"> - [('state','<>','done'),('state','<>','cancel'),('state','<>','pending')] - </field> - <field name="search_view_id" ref="view_crm_case_filter"/> - </record> - - <record id="crm_case_section_open_act" model="ir.actions.act_window"> - <field name="name">Cases</field> - <field name="res_model">mailgate.thread</field> - <field name="domain">[('section_id','child_of',[active_id])]</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form,calendar</field> - </record> - <record id="ir_open_section_case" model="ir.values"> - <field eval="'tree_but_open'" name="key2"/> - <field eval="'crm.case.section'" name="model"/> - <field name="name">Open Cases</field> - <field eval="'ir.actions.act_window,%d'%crm_case_section_open_act" name="value"/> - <field eval="True" name="object"/> - </record> - -<!--Case History Form View --> - - <record id="crm_case_history-view" model="ir.ui.view"> - <field name="name">crm.case.history.form</field> - <field name="model">crm.case.history</field> - <field name="type">form</field> - <field name="arch" type="xml"> - <form string="Cases"> - <separator colspan="4" string="Case Description"/> - <field colspan="4" name="name" select="1"/> - <field name="date" select="1"/> - <field name="user_id" select="1"/> - <field name="model_id"/> - <field name="res_id"/> - <field name="som"/> - <field name="canal_id"/> - <field colspan="4" name="description"/> - </form> - </field> - </record> - -<!--Case History Search View --> - - <record id="crm_case_history_search" model="ir.ui.view"> - <field name="name">crm.case.history.select</field> - <field name="model">crm.case.history</field> - <field name="type">search</field> - <field name="arch" type="xml"> - <search string="Search Histories"> - <filter icon="terp-crm" string="My Histories" - domain="[('user_id','=',uid)]" - help="My Histories" /> - <separator orientation="vertical"/> - <group col="6" colspan="2"> - <field name="date" select="1"/> - <field name="user_id" select="1" widget="selection"/> - <field name="section_id" - default="context.get('section_id', False)" - select="1" widget="selection"/> - </group> - </search> - </field> - </record> - -<!--Case History Action --> - - <record id="crm_case_history-act" model="ir.actions.act_window"> - <field name="name">Histories</field> - <field name="res_model">crm.case.history</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="view_id" ref="crm_case_history_tree-view"/> - <field name="search_view_id" ref="crm_case_history_search"/> - </record> - -<!-- Segmentation line Tree View --> + <!-- Segmentation line Tree View --> <record id="crm_segmentation_line_tree-view" model="ir.ui.view"> <field name="name">crm.segmentation.line.tree</field> @@ -565,7 +249,7 @@ </field> </record> -<!-- Segmentation line Form View --> + <!-- Segmentation line Form View --> <record id="crm_segmentation_line-view" model="ir.ui.view"> <field name="name">crm.segmentation.line.form</field> @@ -585,7 +269,7 @@ </field> </record> -<!-- CRM Segmentation Form View --> + <!-- CRM Segmentation Form View --> <record id="crm_segmentation-view" model="ir.ui.view"> <field name="name">crm.segmentation.form</field> @@ -630,7 +314,7 @@ </field> </record> -<!-- CRM Segmentation Tree View --> + <!-- CRM Segmentation Tree View --> <record id="crm_segmentation_tree-view" model="ir.ui.view"> <field name="name">crm.segmentation.tree</field> @@ -690,7 +374,7 @@ </field> </record> -<!-- Inherit View From Partner --> + <!-- Inherit View From Partner --> <record id="view_partners_form_crm1" model="ir.ui.view"> <field name="name">view.res.partner.form.crm.inherited1</field> diff --git a/addons/crm/i18n/it.po b/addons/crm/i18n/it.po index 9a00ef01bb0..00d2f7958e5 100644 --- a/addons/crm/i18n/it.po +++ b/addons/crm/i18n/it.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2010-01-05 05:59+0000\n" -"PO-Revision-Date: 2010-02-24 10:59+0000\n" -"Last-Translator: Carlo Vettore <Unknown>\n" +"PO-Revision-Date: 2010-05-21 06:51+0000\n" +"Last-Translator: eLBati - albatos.com <lorenzo.battistini@albatos.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-04-17 04:02+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: crm @@ -2506,7 +2506,7 @@ msgstr "" #. module: crm #: model:crm.case.categ,name:crm.categ_meet1 msgid "Customer Meeting" -msgstr "Riunione del cliente" +msgstr "Riunione con il cliente" #. module: crm #: wizard_field:crm.new.send.mail,init,doc2:0 diff --git a/addons/crm/i18n/pl.po b/addons/crm/i18n/pl.po index 285b5cc25b8..a0d430695ac 100644 --- a/addons/crm/i18n/pl.po +++ b/addons/crm/i18n/pl.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2010-01-05 05:59+0000\n" -"PO-Revision-Date: 2010-05-14 20:14+0000\n" +"PO-Revision-Date: 2010-05-21 17:59+0000\n" "Last-Translator: Grzegorz Grzelak (Cirrus.pl) <Unknown>\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: 2010-05-15 04:58+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: crm @@ -33,6 +33,7 @@ msgstr "" msgid "" "Check this if you want the rule to send an email to the responsible person." msgstr "" +"Zaznacz, jeśli chcesz aby reguła wysłała wiadomość do osoby odpowiedzialnej." #. module: crm #: view:crm.meeting:0 @@ -42,12 +43,12 @@ msgstr "Tytuł" #. module: crm #: model:ir.model,name:crm.model_report_crm_case_section_categ2 msgid "Cases by section and category2" -msgstr "" +msgstr "Sprawy wg sekcji i kategorii" #. module: crm #: wizard_field:crm.lead.partner_create,init,close:0 msgid "Close Lead" -msgstr "Zamknij ślad" +msgstr "Zamknij sygnał" #. module: crm #: view:crm.job:0 @@ -60,12 +61,12 @@ msgstr " 7 Dni " #. module: crm #: help:crm.menu.config_wizard,helpdesk:0 msgid "Manages an Helpdesk service." -msgstr "" +msgstr "Zarządza usługą Helpdesku." #. module: crm #: view:crm.job:0 msgid "Pending Jobs" -msgstr "Zadania Oczekujące" +msgstr "Wstrzymane prace" #. module: crm #: field:crm.case.rule,trg_state_to:0 @@ -80,7 +81,7 @@ msgstr "Planowane koszty" #. module: crm #: wizard_field:crm.job.partner_create,init,close:0 msgid "Close job request" -msgstr "" +msgstr "Zamknij zgłoszenie pracy" #. module: crm #: field:crm.case.stage,name:0 @@ -95,7 +96,7 @@ msgstr "Nazwa etapu" #: model:ir.ui.menu,name:crm.menu_crm_case_categ0-act #: model:ir.ui.menu,name:crm.next_id_51 msgid "Cases" -msgstr "Przypadki" +msgstr "Sprawy" #. module: crm #: help:crm.segmentation,categ_id:0 @@ -114,7 +115,7 @@ msgstr "Zasoby ludzkie" #. module: crm #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ_categ2 msgid "Cases by Opportunities, Category and Type" -msgstr "" +msgstr "Sprawy wg szans, kategorii i typów" #. module: crm #: help:crm.menu.config_wizard,claims:0 @@ -122,24 +123,24 @@ msgid "" "Manages the supplier and customers claims, including your corrective or " "preventive actions." msgstr "" -"Zarządza skargami dostawców i klientów, wliczając twoje działania naprawcze " -"i prewencyjne." +"Zarządza reklamacjami dostawców i klientów, oraz twoimi działaniami " +"naprawczymi i prewencyjnymi." #. module: crm #: view:crm.fundraising:0 msgid "Amount" -msgstr "Ilość" +msgstr "Kwota" #. module: crm #: model:process.transition,note:crm.process_transition_opportunitymeeting0 msgid "Normal or phone meeting for opportunity" -msgstr "" +msgstr "Spotkanie albo rozmowa telefoniczna w sprawie szansy" #. module: crm #: model:crm.case.stage,name:crm.stage_claim2 #: model:crm.case.stage,name:crm.stage_meet1 msgid "Fixed" -msgstr "" +msgstr "Naprawione" #. module: crm #: code:addons/crm/crm.py:0 @@ -164,13 +165,13 @@ msgstr "Kampania" #. module: crm #: view:crm.opportunity:0 msgid "Search Opportunities" -msgstr "Szukaj w Okazjach" +msgstr "Szukaj szans" #. module: crm #: model:ir.ui.menu,name:crm.menu_crm_case_section_stage_tree #: view:report.crm.case.section.stage:0 msgid "Cases by Section and Stage" -msgstr "Przypadki w Sekcjach i Etapach" +msgstr "Sprawy wg sekcji i etapów" #. module: crm #: wizard_field:crm.job.meeting_set,init,duration:0 @@ -198,8 +199,8 @@ msgid "" "Section to which Case belongs to. Define Responsible user and Email account " "for mail gateway." msgstr "" -"Sekcja do której należy Przypadek. Zdefiniuj odpowiedzialnego użytkownika " -"oraz konto Email dla bramy pocztowej." +"Sekcja do której należy Sprawa. Zdefiniuj odpowiedzialnego użytkownika oraz " +"konto Email dla bramy pocztowej." #. module: crm #: view:crm.case:0 @@ -228,7 +229,7 @@ msgstr "Partner" #: field:crm.case.stage,section_id:0 #: model:ir.model,name:crm.model_crm_case_section msgid "Case Section" -msgstr "" +msgstr "Sekcja sprawy" #. module: crm #: view:crm.job:0 @@ -238,7 +239,7 @@ msgstr "Proponowane wynagrodzenie" #. module: crm #: help:crm.case.section,sequence:0 msgid "Gives the sequence order when displaying a list of case sections." -msgstr "" +msgstr "Ustala kolejność wyświetlania listy sekcji spraw." #. module: crm #: code:addons/crm/wizard/crm_job_wizard.py:0 @@ -251,12 +252,12 @@ msgstr "Rozmowa telefoniczna" #. module: crm #: model:ir.model,name:crm.model_report_crm_case_section_stage msgid "Cases by section and stage" -msgstr "Zdarzenia wg sekcji i etapów" +msgstr "Sprawy wg sekcji i etapów" #. module: crm #: field:crm.case.rule,act_mail_to_email:0 msgid "Mail to these emails" -msgstr "" +msgstr "Wyślij wiadomości do tych adresów email." #. module: crm #: selection:crm.case.rule,trg_date_type:0 @@ -298,7 +299,7 @@ msgstr "Sekcje" #: help:crm.menu.config_wizard,opportunity:0 msgid "Tracks identified business opportunities for your sales pipeline." msgstr "" -"Ścieżki zidentyfikowanych okazji biznesowych dla twoich kanałów sprzedaży." +"Śledzi zidentyfikowane szanse biznesowe dla twoich kanałów sprzedaży." #. module: crm #: view:crm.meeting:0 @@ -313,7 +314,7 @@ msgstr "Data ostatniej akcji" #. module: crm #: view:crm.job:0 msgid "Appreciation" -msgstr "" +msgstr "Ocena" #. module: crm #: model:crm.case.stage,name:crm.stage_job3 @@ -335,7 +336,7 @@ msgstr "Kategorie" #: code:addons/crm/wizard/wizard_crm_new_send_email.py:0 #, python-format msgid "Warning!" -msgstr "" +msgstr "Uwaga!" #. module: crm #: view:crm.case:0 @@ -377,7 +378,7 @@ msgstr "Połączenie do istniejącego partnera" #. module: crm #: field:crm.case.rule,trg_date_range_type:0 msgid "Delay type" -msgstr "" +msgstr "Typ opóźnienia" #. module: crm #: view:crm.claim:0 @@ -397,7 +398,7 @@ msgstr "Następna rozmowa kwalifikacyjna" #. module: crm #: field:crm.case.rule,regex_history:0 msgid "Regular Expression on Case History" -msgstr "" +msgstr "Wyrażenie regularne dla historii sprawy" #. module: crm #: model:ir.model,name:crm.model_crm_email_add_cc @@ -407,7 +408,7 @@ msgstr "" #. module: crm #: model:process.transition,name:crm.process_transition_opportunitymeeting0 msgid "Opportunity Meeting" -msgstr "" +msgstr "Spotkanie szansy" #. module: crm #: help:crm.case,canal_id:0 @@ -416,22 +417,24 @@ msgid "" "customer. With each commercial opportunity, you can indicate the canall " "which is this opportunity source." msgstr "" +"Kanały są różnymi, dostępnymi trybami komunikacji z klientem. Do każdej " +"szansy możesz dowiązać kanał, który jest jej źródłem." #. module: crm #: view:crm.meeting:0 msgid "Exception Rules" -msgstr "" +msgstr "Reguły wyjątku" #. module: crm #: field:crm.menu.config_wizard,opportunity:0 #: model:ir.actions.report.xml,name:crm.crm_business_opportunities_report msgid "Business Opportunities" -msgstr "" +msgstr "Szanse biznesowe" #. module: crm #: model:crm.case.stage,name:crm.stage_claim1 msgid "Accepted as Claim" -msgstr "" +msgstr "Zaakceptowano jako reklamację" #. module: crm #: view:crm.case.rule:0 @@ -439,6 +442,8 @@ msgid "" "The rule use a AND operator. The case must match all non empty fields so " "that the rule execute the action described in the 'Actions' tab." msgstr "" +"Reguła stosuje operator I. Sprawa musi pasować do wszystkich niepustych pól, " +"aby została wykonana akcja zapisana w zakładce 'Akcje'." #. module: crm #: field:crm.case,history_line:0 @@ -488,7 +493,7 @@ msgstr "Kategoria" #: model:ir.ui.menu,name:crm.menu_crm_case_section_categ_stage_tree #: view:report.crm.case.section.categ.stage:0 msgid "Cases by Section, Category and Stage" -msgstr "" +msgstr "Sprawy wg sekcji, kategorii i etapów" #. module: crm #: help:crm.case.rule,act_mail_to_watchers:0 @@ -520,7 +525,7 @@ msgstr "Informacja o akcji" #. module: crm #: view:crm.case.rule:0 msgid "%(case_user_phone)s = Responsible phone" -msgstr "" +msgstr "%(case_user_phone)s = Telefon odpowiedzialnego" #. module: crm #: constraint:ir.model:0 @@ -543,7 +548,7 @@ msgstr "Warunki" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_categ0-act_open msgid "Open Cases" -msgstr "Otwarte przypadki" +msgstr "Otwarte sprawy" #. module: crm #: field:crm.case.log,name:0 @@ -560,7 +565,7 @@ msgstr "Stan" #: model:ir.actions.wizard,name:crm.wizard_partner_create_opportunity #: model:ir.actions.wizard,name:crm.wizard_partner_create_opportunity1 msgid "Create Opportunity" -msgstr "" +msgstr "Utwórz szansę" #. module: crm #: selection:report.crm.case.section.categ.categ2,month:0 @@ -585,7 +590,7 @@ msgstr "Drzewo spotkań" #: view:crm.opportunity:0 #, python-format msgid "Escalate" -msgstr "" +msgstr "Przekaż" #. module: crm #: model:ir.ui.menu,name:crm.menu_crm_case_categ_meet @@ -601,7 +606,7 @@ msgstr "Zarządzanie relacjami z klientami i dostawcami" #: view:crm.email.add.cc:0 #: model:ir.actions.act_window,name:crm.action_view_crm_email_add_cc_wizard msgid "Add CC" -msgstr "" +msgstr "Dodaj DW" #. module: crm #: selection:report.crm.case.section.categ.categ2,month:0 @@ -614,12 +619,12 @@ msgstr "Czerwiec" #. module: crm #: field:crm.segmentation,som_interval_default:0 msgid "Default (0=None)" -msgstr "" +msgstr "Domyślne (0=Nic)" #. module: crm #: model:crm.case.stage,name:crm.stage_job7 msgid "Refused by Company" -msgstr "" +msgstr "Odrzucone przez firmę" #. module: crm #: field:crm.case,planned_revenue:0 @@ -642,17 +647,17 @@ msgstr "Październik" #. module: crm #: model:crm.case.stage,name:crm.stage_oppor3 msgid "Value Proposition" -msgstr "" +msgstr "Propozycja wartości" #. module: crm #: view:crm.case.rule:0 msgid "%(case_id)s = Case ID" -msgstr "" +msgstr "%(case_id)s = ID sprawy" #. module: crm #: model:crm.case.category2,name:crm.category_oppor2 msgid "New Business" -msgstr "" +msgstr "Nowy biznes" #. module: crm #: help:crm.case,email_from:0 @@ -681,7 +686,7 @@ msgstr "Opis rozmowy telefonicznej" #. module: crm #: view:crm.case.categ:0 msgid "Case Category" -msgstr "Kategoria przypadku" +msgstr "Kategoria sprawy" #. module: crm #: help:crm.segmentation,som_interval_default:0 @@ -696,7 +701,7 @@ msgstr "" #. module: crm #: model:crm.case.categ,name:crm.categ_claim3 msgid "Policy Claims" -msgstr "" +msgstr "Reklamacja postępowania" #. module: crm #: code:addons/crm/crm.py:0 @@ -706,8 +711,8 @@ msgstr "" msgid "" "You must define a responsible user for this case in order to use this action!" msgstr "" -"Musisz zdefiniować użytkownika odpowiedzialnego za zdarzenie, aby zastosować " -"tę akcję!" +"Musisz zdefiniować użytkownika odpowiedzialnego za sprawę, aby zastosować tę " +"akcję!" #. module: crm #: view:crm.phonecall:0 @@ -735,7 +740,7 @@ msgstr "Praca - proces zatrudnienia" #: view:crm.lead:0 #: view:crm.opportunity:0 msgid "Related Cases" -msgstr "Zdarzenia związane" +msgstr "Sprawy powiązane" #. module: crm #: selection:report.crm.case.section.categ.categ2,month:0 @@ -758,7 +763,7 @@ msgstr "Historia komunikacji" #. module: crm #: view:crm.claim:0 msgid "New Claims" -msgstr "" +msgstr "Nowe reklamacje" #. module: crm #: view:crm.meeting:0 @@ -768,23 +773,23 @@ msgstr "Formularz spotkań" #. module: crm #: model:crm.case.stage,name:crm.stage_oppor5 msgid "Negotiation/Review" -msgstr "" +msgstr "Negocjacje/Przegląd" #. module: crm #: code:addons/crm/wizard/crm_phonecall_wizard.py:0 #, python-format msgid "A partner is already defined on this phonecall." -msgstr "" +msgstr "Partner jest już zdefiniowany dla tej rozmowy." #. module: crm #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_stage msgid "Cases by Opportunities and Stage" -msgstr "Zdarzenia wg szans i etapów" +msgstr "Sprawy wg szans i etapów" #. module: crm #: view:crm.claim:0 msgid "Date of Claim" -msgstr "" +msgstr "Data reklamacji" #. module: crm #: view:crm.segmentation.line:0 @@ -820,7 +825,7 @@ msgstr "" #. module: crm #: model:crm.case.category2,name:crm.category_oppor1 msgid "Existing Business" -msgstr "" +msgstr "Istniejący biznes" #. module: crm #: field:crm.case,probability:0 @@ -831,7 +836,7 @@ msgstr "Prawdopodobieństwo (%)" #. module: crm #: model:ir.model,name:crm.model_crm_lead msgid "Leads Cases" -msgstr "Zdarzenia - sygnały" +msgstr "Sprawy - sygnały" #. module: crm #: help:crm.case.section,reply_to:0 @@ -839,12 +844,14 @@ msgid "" "The email address put in the 'Reply-To' of all emails sent by Open ERP about " "cases in this section" msgstr "" +"Adres umieszczony w 'Reply-To' ('Odpowiedz na adres') dla wszystkich " +"wiadomości wysłanych przez OpenERP w sprawach z tej sekcji" #. module: crm #: view:crm.case.rule:0 #: model:ir.model,name:crm.model_crm_case_rule msgid "Case Rule" -msgstr "Reguła zdarzenia" +msgstr "Reguła sprawy" #. module: crm #: code:addons/crm/crm_opportunity.py:0 @@ -856,7 +863,7 @@ msgstr "Reguła zdarzenia" #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor #, python-format msgid "Opportunity" -msgstr "" +msgstr "Szansa" #. module: crm #: view:crm.case:0 @@ -866,7 +873,7 @@ msgstr "" #: view:crm.lead:0 #: view:crm.opportunity:0 msgid "Emails" -msgstr "" +msgstr "Wiadomości e-mail" #. module: crm #: model:crm.case.category2,name:crm.category_lead7 @@ -881,18 +888,18 @@ msgstr "Zatrzymaj proces" #. module: crm #: model:crm.case.categ,name:crm.categ_claim1 msgid "Factual Claims" -msgstr "" +msgstr "Reklamacja rzeczowa" #. module: crm #: view:crm.phonecall:0 msgid "Search Phonecalls" -msgstr "" +msgstr "Przeszukaj rozmowy" #. module: crm #: wizard_button:crm.lead.opportunity_set,create_partner,create:0 #: wizard_button:crm.phonecall.opportunity_set,create_partner,create:0 msgid "Continue" -msgstr "" +msgstr "Dalej" #. module: crm #: field:crm.segmentation,som_interval:0 @@ -907,13 +914,13 @@ msgstr "Wartość" #. module: crm #: help:caldav.crm.export,init,name:0 msgid "Save in .ics format" -msgstr "" +msgstr "Zapisz w formacie .ics" #. module: crm #: wizard_field:crm.new.send.mail,init,text:0 #: wizard_field:crm.send.mail,init,text:0 msgid "Message" -msgstr "" +msgstr "Wiadomość" #. module: crm #: help:crm.segmentation,exclusif:0 @@ -922,6 +929,9 @@ msgid "" "criterions. If checked, remove the category from partners that doesn't match " "segmentation criterions" msgstr "" +"Zaznacz to, jeśli kategoria ma być ograniczona do partnerów odpowiadających " +"kryteriom segmentacji. Jeśli zaznaczone, to usuń kategorię z partnerów, " +"którzy nie odpowiadają kryteriom segmentacji." #. module: crm #: field:crm.segmentation,exclusif:0 @@ -959,7 +969,7 @@ msgstr "" #. module: crm #: view:crm.case.rule:0 msgid "Conditions on States" -msgstr "" +msgstr "Warunki stanów" #. module: crm #: field:crm.case.rule,trg_date_type:0 @@ -969,12 +979,12 @@ msgstr "Data wyzwolenia" #. module: crm #: view:crm.case.history:0 msgid "Search Histories" -msgstr "" +msgstr "Przeszukuj historie" #. module: crm #: help:crm.case.stage,sequence:0 msgid "Gives the sequence order when displaying a list of case stages." -msgstr "" +msgstr "Ustala kolejność wyświetlania listy etapów spraw." #. module: crm #: model:crm.case.section,name:crm.section_support3 @@ -982,7 +992,7 @@ msgstr "" #: model:ir.ui.menu,name:crm.menu_crm_case_opp #: model:process.node,name:crm.process_node_opportunities0 msgid "Opportunities" -msgstr "" +msgstr "Szanse" #. module: crm #: help:crm.segmentation,name:0 @@ -1008,7 +1018,7 @@ msgstr "Kwota zakupów" #. module: crm #: view:crm.phonecall:0 msgid "Direction" -msgstr "" +msgstr "Kierunek" #. module: crm #: help:crm.case,email_cc:0 @@ -1024,12 +1034,12 @@ msgstr "" #: selection:report.crm.case.section.categ2,month:0 #: selection:report.crm.case.section.stage,month:0 msgid "March" -msgstr "" +msgstr "Marzec" #. module: crm #: view:crm.case.rule:0 msgid "Server Action to be Triggered" -msgstr "" +msgstr "Akcja serwera do wykonania" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_rule-act @@ -1041,18 +1051,18 @@ msgstr "Reguły" #: wizard_view:crm.job.meeting_set,init:0 #: wizard_view:crm.phonecall.meeting_set,init:0 msgid "Plan Meeting" -msgstr "" +msgstr "Zaplanuj spotkanie" #. module: crm #: wizard_field:crm.new.send.mail,init,state:0 msgid "Set State to" -msgstr "" +msgstr "Ustaw stan na" #. module: crm #: code:addons/crm/wizard/wizard_crm_send_email.py:0 #, python-format msgid "There is no mail to reply!" -msgstr "" +msgstr "Nie ma wiadomości do odpowiedzi" #. module: crm #: wizard_button:crm.job.partner_create,init,confirm:0 @@ -1062,7 +1072,7 @@ msgstr "" #: model:ir.actions.wizard,name:crm.wizard_crm_lead_partner_create #: model:ir.actions.wizard,name:crm.wizard_crm_phonecall_partner_create msgid "Create Partner" -msgstr "" +msgstr "Utwórz partnera" #. module: crm #: selection:crm.segmentation.line,expr_operator:0 @@ -1072,17 +1082,17 @@ msgstr "" #. module: crm #: view:crm.case.rule:0 msgid "%(case_description)s = Case description" -msgstr "" +msgstr "%(case_description)s = Opis sprawy" #. module: crm #: view:crm.fundraising:0 msgid "My Funds" -msgstr "" +msgstr "Moje fundusze" #. module: crm #: field:crm.case,partner_mobile:0 msgid "Mobile" -msgstr "" +msgstr "Tel. komórkowy" #. module: crm #: field:crm.case.rule,name:0 @@ -1098,27 +1108,27 @@ msgstr "Planowane koszty" #. module: crm #: model:ir.model,name:crm.model_crm_case_history msgid "Case history" -msgstr "" +msgstr "Historia sprawy" #. module: crm #: model:crm.case.categ,name:crm.categ_job2 msgid "Junior Developer" -msgstr "" +msgstr "Młodszy inżynier" #. module: crm #: view:crm.meeting:0 msgid "My Meetings" -msgstr "" +msgstr "Moje spotkania" #. module: crm #: field:crm.case.categ,name:0 msgid "Case Category Name" -msgstr "" +msgstr "Nazwa kategorii sprawy" #. module: crm #: model:crm.case.category2,name:crm.category_claim2 msgid "Preventive" -msgstr "" +msgstr "Prewencyjnie" #. module: crm #: field:crm.case.rule,act_email_cc:0 @@ -1128,7 +1138,7 @@ msgstr "Dodaj obserwatorów (DW)" #. module: crm #: wizard_view:caldav.crm.export,init:0 msgid "Export ICS" -msgstr "" +msgstr "Eksportuj ICS" #. module: crm #: code:addons/crm/crm_claim.py:0 @@ -1138,13 +1148,14 @@ msgstr "" #: code:addons/crm/crm_phonecall.py:0 #, python-format msgid "You can not assign Closed Case." -msgstr "" +msgstr "Nie możesz przypisać do zamkniętej sprawy" #. module: crm #: help:crm.case.rule,act_remind_partner:0 msgid "" "Check this if you want the rule to send a reminder by email to the partner." msgstr "" +"Zaznacz, jeśli chcesz aby reguła wysyłała przypomnienie mailem do partnera." #. module: crm #: code:addons/crm/crm_meeting.py:0 @@ -1154,12 +1165,12 @@ msgstr "" #: view:crm.meeting:0 #, python-format msgid "Meetings" -msgstr "" +msgstr "Spotkania" #. module: crm #: view:crm.case.rule:0 msgid "Conditions on Case Fields" -msgstr "" +msgstr "Warunki na pola sprawy" #. module: crm #: field:crm.case,date_action_next:0 @@ -1179,27 +1190,27 @@ msgstr "Ostateczny czas ukończenia" #: wizard_button:caldav.crm.import,init,end:0 #: wizard_button:caldav.crm.subscribe,init,end:0 msgid "_Cancel" -msgstr "" +msgstr "_Anuluj" #. module: crm #: field:crm.case,category2_id:0 msgid "Category Name" -msgstr "" +msgstr "Nazwa kategorii" #. module: crm #: view:crm.segmentation:0 msgid "Partner Segmentations" -msgstr "" +msgstr "Segmentacja partnera" #. module: crm #: view:crm.meeting:0 msgid "Recurrency Rule" -msgstr "" +msgstr "Reguła rekurencyjna" #. module: crm #: model:ir.model,name:crm.model_crm_case_categ msgid "Category of case" -msgstr "Kategoria przypadku" +msgstr "Kategoria sprawy" #. module: crm #: field:crm.email.add.cc,subject:0 @@ -1208,12 +1219,12 @@ msgstr "Kategoria przypadku" #: view:crm.phonecall:0 #: wizard_field:crm.send.mail,init,subject:0 msgid "Subject" -msgstr "" +msgstr "Temat" #. module: crm #: field:crm.meeting,attendees:0 msgid "Attendees" -msgstr "" +msgstr "Uczestnicy" #. module: crm #: model:ir.module.module,description:crm.module_meta_information @@ -1243,31 +1254,50 @@ msgid "" "The CRM module has a email gateway for the synchronisation interface\n" "between mails and Open ERP." msgstr "" +"Podstawowy moduł Zarządzania Relacjami z Klientami (CRM) Open ERP\n" +"pozwala grupie ludzi inteligentnie i efektywnie zarządzać sygnałami, " +"szansami,\n" +"zadaniami, problemami, zgłoszeniami, błędami, reklamacjami, kampaniami itp.\n" +"Moduł zarządza kluczowymi dziedzinami jak komunikacja, identyfikacja, \n" +"priorytezacja, powiązania i powiadamianie.\n" +"\n" +"OpenERP zapewnia, że sprawy są skutecznie obsługiwane przez \n" +"użytkowników, klientów i dostawców. System automatycznie wysyła \n" +"przypomnienia, przekazuje odpowiedzialność, wysyła zgłoszenia, wyzwala\n" +"specjalne metody i wykonuje inne akcje na podstawie twoich własnych reguł.\n" +"\n" +"Najważniejszą cechą systemu jest, że klient nie musi wykonywać żadnych \n" +"specjalnych czynności. Wystarczy, że wyśle wiadomość do centrum zgłoszeń.\n" +"OpenERP podziękuje za wiadomość, przekieruje ją do odpowiednich osób i \n" +"zapewni, że cała przyszła korespondencja trafi w odpowiednie miejsce.\n" +"\n" +"Moduł CRM zawiera bramę korespondencyjną do łączenia OpenERP z \n" +"systemem pocztowym." #. module: crm #: model:process.transition,note:crm.process_transition_leadpartner0 msgid "Prospect is converting to business partner" -msgstr "" +msgstr "Partner potencjalny jest konwertowany do partnera biznesowego." #. module: crm #: view:crm.case.rule:0 msgid "Regex on Case Name" -msgstr "" +msgstr "Wyrażenie regularne dla nazwy sprawy" #. module: crm #: view:crm.claim:0 msgid "Pending Claims" -msgstr "" +msgstr "Oczekujące reklamacje" #. module: crm #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ_stage msgid "Cases by Opportunities, Category and Stage" -msgstr "" +msgstr "Sprawy wg szans, kategorii i etapów" #. module: crm #: model:crm.case.category2,name:crm.category_lead4 msgid "Print" -msgstr "" +msgstr "Drukuj" #. module: crm #: field:crm.case,som:0 @@ -1282,12 +1312,12 @@ msgstr "Stan emocji" #: field:report.crm.case.section.categ.categ2,category2_id:0 #: field:report.crm.case.section.categ2,category2_id:0 msgid "Type" -msgstr "" +msgstr "Typ" #. module: crm #: view:crm.job:0 msgid "Candidate Refused" -msgstr "" +msgstr "Kandydat odrzucony" #. module: crm #: view:crm.segmentation:0 @@ -1317,7 +1347,7 @@ msgstr "Data utworzenia" #: view:crm.phonecall:0 #: model:process.node,name:crm.process_node_meeting0 msgid "Meeting" -msgstr "" +msgstr "Spotkanie" #. module: crm #: view:crm.case.rule:0 @@ -1338,12 +1368,12 @@ msgstr "Przywróć do projektu" #. module: crm #: model:ir.model,name:crm.model_report_crm_case_section_categ_categ2 msgid "Cases by section, Category and Category2" -msgstr "" +msgstr "Sprawy wg sekcji, kategorii i kategorii2" #. module: crm #: model:crm.case.stage,name:crm.stage_oppor6 msgid "Closed Won" -msgstr "" +msgstr "Zamknięte z sukcesem" #. module: crm #: model:ir.actions.act_window,name:crm.act_crm_case_categ_crm_case_opened @@ -1352,7 +1382,7 @@ msgstr "" #: model:ir.actions.act_window,name:crm.act_res_partner_canal_2_crm_case_opened #: model:ir.actions.act_window,name:crm.act_res_users_2_crm_case_opened msgid "Open cases" -msgstr "Otwarte praypadki" +msgstr "Otwarte sprawy" #. module: crm #: field:crm.case,stage_id:0 @@ -1362,7 +1392,7 @@ msgstr "Otwarte praypadki" #: field:report.crm.case.section.categ2,stage_id:0 #: field:report.crm.case.section.stage,stage_id:0 msgid "Stage" -msgstr "" +msgstr "Etap" #. module: crm #: constraint:ir.ui.view:0 @@ -1375,48 +1405,51 @@ msgid "" "If the active field is set to true, it will allow you to hide the case " "section without removing it." msgstr "" +"Jeśli pole aktywne jest ustawione na true (prawda), to będziesz mógł ukryć " +"sekcję sprawy bez jej usuwania." #. module: crm #: model:crm.case.categ,name:crm.categ_fund2 msgid "Learning And Education" -msgstr "" +msgstr "Nauka i edukacja" #. module: crm #: wizard_view:crm.phonecall.opportunity_set,create_partner:0 #: wizard_view:crm.phonecall.partner_create,init:0 msgid "Are you sure you want to create a partner based on this phonecall ?" msgstr "" +"Jesteś pewien, że chcesz utworzyć partnera na podstawie tej rozmowy ?" #. module: crm #: view:crm.case.stage:0 #: model:ir.actions.act_window,name:crm.crm_case_stage_act #: model:ir.ui.menu,name:crm.menu_crm_case_stage_act msgid "Stages" -msgstr "" +msgstr "Etapy" #. module: crm #: wizard_field:crm.case.opportunity.partner_opportunity,init,planned_revenue:0 #: wizard_field:crm.lead.opportunity_set,opportunity,planned_revenue:0 #: wizard_field:crm.phonecall.opportunity_set,opportunity,planned_revenue:0 msgid "Expected Revenue" -msgstr "" +msgstr "Spodziewany dochód" #. module: crm #: view:crm.meeting:0 msgid "Meeting Date" -msgstr "" +msgstr "Data spotkania" #. module: crm #: view:crm.job:0 #: view:crm.lead:0 #: view:crm.phonecall:0 msgid "Convert to Partner" -msgstr "" +msgstr "Konwertuj do partnera" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_category_act_meetall3 msgid "Next Meetings" -msgstr "" +msgstr "Następne spotkania" #. module: crm #: field:crm.segmentation,partner_id:0 @@ -1427,32 +1460,32 @@ msgstr "" #: code:addons/crm/crm.py:0 #, python-format msgid "You can not delete this case. You should better cancel it." -msgstr "" +msgstr "Nie możesz usunąć tej sprawy. Powinieneś ją raczej anulować." #. module: crm #: wizard_button:caldav.crm.subscribe,init,open:0 msgid "_Subscribe" -msgstr "" +msgstr "_Subskrybuj" #. module: crm #: field:crm.case.rule,trg_priority_from:0 msgid "Minimum Priority" -msgstr "" +msgstr "Minimalny priorytet" #. module: crm #: model:ir.actions.act_window,name:crm.crm_meeting_generic_wizard_act msgid "Meeting Generic Wizard" -msgstr "" +msgstr "Podstawowy kreator spotkań" #. module: crm #: model:crm.case.categ,name:crm.categ_claim2 msgid "Value Claims" -msgstr "" +msgstr "Reklamacje wartości" #. module: crm #: wizard_view:caldav.crm.subscribe,display:0 msgid "Message..." -msgstr "" +msgstr "Wiadomość..." #. module: crm #: model:ir.model,name:crm.model_crm_phonecall_assign_wizard @@ -1462,19 +1495,19 @@ msgstr "" #. module: crm #: view:report.crm.case.section.categ2:0 msgid "Cases by Section and Category2" -msgstr "" +msgstr "Sprawy wg sekcji i kategorii2" #. module: crm #: code:addons/crm/crm.py:0 #, python-format msgid "done" -msgstr "wykonano" +msgstr "" #. module: crm #: view:crm.meeting:0 #: view:crm.phonecall:0 msgid "Reminder" -msgstr "" +msgstr "Przypomnienie" #. module: crm #: help:crm.segmentation,sales_purchase_active:0 @@ -1482,28 +1515,30 @@ msgid "" "Check if you want to use this tab as part of the segmentation rule. If not " "checked, the criteria beneath will be ignored" msgstr "" +"Zaznacz, jeśli chcesz stosować tę zakładkę jako część reguły segmentacji. " +"Jeśli nie zaznaczone, to kryteria poniżej zostaną zignorowane." #. module: crm #: code:addons/crm/crm.py:0 #, python-format msgid "open" -msgstr "otwarty" +msgstr "" #. module: crm #: field:crm.case.rule,act_remind_attach:0 msgid "Remind with attachment" -msgstr "" +msgstr "Przpomnij z załącznikiem" #. module: crm #: model:crm.case.categ,name:crm.categ_lead6 #: model:crm.case.categ,name:crm.categ_oppor6 msgid "Website" -msgstr "" +msgstr "Strona WWW" #. module: crm #: field:crm.case.rule,act_remind_user:0 msgid "Remind responsible" -msgstr "" +msgstr "Przpomnij odpowiedzialnym" #. module: crm #: field:crm.segmentation,state:0 @@ -1516,23 +1551,25 @@ msgid "" "Helps you to organise the jobs hiring process: evaluation, meetings, email " "integration..." msgstr "" +"Pomaga organizować proces zatrudniania: ocena, spotkania, integracja " +"wiadomości..." #. module: crm #: view:crm.fundraising:0 msgid "Funds" -msgstr "" +msgstr "Fundusze" #. module: crm #: code:addons/crm/crm.py:0 #, python-format msgid "draft" -msgstr "projekt" +msgstr "" #. module: crm #: model:crm.case.stage,name:crm.stage_claim5 #: model:crm.case.stage,name:crm.stage_meet4 msgid "Awaiting Response" -msgstr "" +msgstr "Oczekuje na odpowiedź" #. module: crm #: field:crm.case,date:0 @@ -1546,23 +1583,23 @@ msgstr "Data" #. module: crm #: view:crm.job:0 msgid "Candidate Name" -msgstr "" +msgstr "Nazwisko kandydata" #. module: crm #: model:crm.case.categ,name:crm.categ_lead2 #: model:crm.case.categ,name:crm.categ_oppor2 msgid "Self Generated" -msgstr "" +msgstr "Samogenerowane" #. module: crm #: model:crm.case.stage,name:crm.stage_claim3 msgid "Won't fix" -msgstr "" +msgstr "Nie do naprawienia" #. module: crm #: model:crm.case.stage,name:crm.stage_lead4 msgid "Converted" -msgstr "" +msgstr "Skonwertowano" #. module: crm #: view:crm.case:0 @@ -1572,7 +1609,7 @@ msgstr "" #: view:crm.lead:0 #: view:crm.opportunity:0 msgid "Reply to Last Email" -msgstr "" +msgstr "Odpowiedz na ostatnią wiadomość" #. module: crm #: view:crm.segmentation:0 @@ -1582,7 +1619,7 @@ msgstr "Opis segmentacji" #. module: crm #: help:crm.meeting,location:0 msgid "Gives Location of Meeting" -msgstr "" +msgstr "Ustala miejsce spotkania" #. module: crm #: view:crm.case:0 @@ -1597,17 +1634,17 @@ msgstr "Historia" #. module: crm #: model:ir.model,name:crm.model_crm_job msgid "Job Cases" -msgstr "" +msgstr "Sprawy rekrutacji" #. module: crm #: view:crm.job:0 msgid "Jobs - Recruitment Tree" -msgstr "" +msgstr "Praca - Drzewo rekrutacji" #. module: crm #: field:crm.case.rule,regex_name:0 msgid "Regular Expression on Case Name" -msgstr "" +msgstr "Wyrażenie regularne dla nazwy sprawy" #. module: crm #: field:crm.case,state:0 @@ -1616,7 +1653,7 @@ msgstr "" #: field:report.crm.case.section.categ2,state:0 #: field:report.crm.case.section.stage,state:0 msgid "State" -msgstr "" +msgstr "Stan" #. module: crm #: view:crm.case:0 @@ -1667,22 +1704,22 @@ msgstr "Anuluj" #: code:addons/crm/crm.py:0 #, python-format msgid "No E-Mail ID Found for your Company address!" -msgstr "" +msgstr "Brak ID email dla adresu twojej firmy !" #. module: crm #: view:crm.fundraising:0 msgid "Search Funds" -msgstr "" +msgstr "Przeszukaj fundusze" #. module: crm #: view:crm.claim:0 msgid "Type of claim" -msgstr "" +msgstr "Typ reklamacji" #. module: crm #: view:crm.case:0 msgid "Helpdesk Support Tree" -msgstr "" +msgstr "Drzewo wsparcia helpdesku" #. module: crm #: view:res.partner.events:0 @@ -1692,33 +1729,33 @@ msgstr "Ogólny opis" #. module: crm #: view:crm.meeting:0 msgid "Other Info" -msgstr "" +msgstr "Inne informacje" #. module: crm #: view:crm.claim:0 msgid "Claim Cost" -msgstr "" +msgstr "Koszt reklamacji" #. module: crm #: view:crm.job:0 #: view:crm.opportunity:0 msgid "Schedule a Phone Call" -msgstr "" +msgstr "Zaplanuj rozmowę" #. module: crm #: field:crm.case,ref:0 msgid "Reference" -msgstr "Odnośnik" +msgstr "Numer" #. module: crm #: field:crm.meeting,exrule:0 msgid "Exception Rule" -msgstr "" +msgstr "Reguła wyjątku" #. module: crm #: help:crm.case.rule,act_mail_to_partner:0 msgid "Check this if you want the rule to send an email to the partner." -msgstr "" +msgstr "Zaznacz to, jeśli chcesz aby reguła wysyłała wiadomość do partnera." #. module: crm #: model:crm.case.category2,name:crm.category_lead2 @@ -1733,22 +1770,22 @@ msgstr "Ustaw priorytet na" #. module: crm #: model:crm.case.stage,name:crm.stage_oppor2 msgid "Needs Analysis" -msgstr "" +msgstr "Wymaga analizy" #. module: crm #: view:crm.claim:0 msgid "Search Claims" -msgstr "" +msgstr "Przeszukaj reklamacje" #. module: crm #: field:crm.case.rule,act_mail_body:0 msgid "Mail body" -msgstr "" +msgstr "Treść wiadomości" #. module: crm #: help:crm.menu.config_wizard,meeting:0 msgid "Manages the calendar of meetings of the users." -msgstr "" +msgstr "Zarządza kalendarzem spotkań użytkownika" #. module: crm #: selection:crm.segmentation.line,expr_name:0 @@ -1763,7 +1800,7 @@ msgstr "Kwota sprzedaży" #: view:crm.lead:0 #: view:crm.opportunity:0 msgid "Add a CC" -msgstr "" +msgstr "Dodaj DW" #. module: crm #: selection:crm.segmentation.line,expr_operator:0 @@ -1781,7 +1818,7 @@ msgstr "Nazwa" #. module: crm #: view:crm.opportunity:0 msgid "Sales Stage" -msgstr "" +msgstr "Etap sprzedaży" #. module: crm #: field:crm.meeting,alarm_id:0 @@ -1791,13 +1828,13 @@ msgstr "" #. module: crm #: field:crm.case.rule,act_mail_to_watchers:0 msgid "Mail to watchers (CC)" -msgstr "" +msgstr "Wiadomość dla obserwatorów (DW)" #. module: crm #: view:crm.fundraising:0 #: view:crm.meeting:0 msgid "Next Meeting" -msgstr "" +msgstr "Następne spotkanie" #. module: crm #: code:addons/crm/crm.py:0 @@ -1806,21 +1843,23 @@ msgid "" "No E-Mail ID Found for your Company address or missing reply address in " "section!" msgstr "" +"Nie znaleziono ID email dla adresu twojej firmy lub brak adresu zwrotnego w " +"sekcji!" #. module: crm #: help:crm.case.section,allow_unlink:0 msgid "Allows to delete non draft cases" -msgstr "Pozwala usuwać przypadki inne niż projekty" +msgstr "Pozwala usuwać sprawy inne niż w stanie projekt" #. module: crm #: model:crm.case.stage,name:crm.stage_oppor7 msgid "Closed Lost" -msgstr "" +msgstr "Zamknięte z porażką" #. module: crm #: field:crm.menu.config_wizard,bugs:0 msgid "Bug Tracking" -msgstr "" +msgstr "Obsługa błędów" #. module: crm #: view:crm.case:0 @@ -1844,7 +1883,7 @@ msgstr "Wysoki" #. module: crm #: model:process.node,note:crm.process_node_partner0 msgid "Convert to prospect to business partner" -msgstr "" +msgstr "Konwertuj potencjalnego do partnera biznesowego" #. module: crm #: view:crm.claim:0 @@ -1859,22 +1898,22 @@ msgstr "" #. module: crm #: model:crm.case.stage,name:crm.stage_oppor4 msgid "Proposal/Price Quote" -msgstr "" +msgstr "Propozycja/Oferta ceny" #. module: crm #: view:crm.case.rule:0 msgid "Delay After Trigger Date:" -msgstr "" +msgstr "Opóźnienie po dacie wyzwolenia" #. module: crm #: model:crm.case.category2,name:crm.category_lead5 msgid "Web" -msgstr "" +msgstr "WWW" #. module: crm #: view:crm.lead:0 msgid "Campaign Type" -msgstr "" +msgstr "Typ kampanii" #. module: crm #: view:crm.segmentation:0 @@ -1886,7 +1925,7 @@ msgstr "Obliczanie stanu emocji" #: code:addons/crm/wizard/wizard_crm_send_email.py:0 #, python-format msgid "Error" -msgstr "" +msgstr "Błąd" #. module: crm #: model:ir.model,name:crm.model_crm_meeting_generic_wizard @@ -1896,12 +1935,12 @@ msgstr "" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_history-act msgid "Histories" -msgstr "" +msgstr "Historie" #. module: crm #: model:crm.case.category2,name:crm.category_job1 msgid "Graduate" -msgstr "" +msgstr "Wykształcenie" #. module: crm #: wizard_view:crm.job.meeting_set,init:0 @@ -1910,6 +1949,7 @@ msgid "" "Note that you can also use the calendar view to graphically schedule your " "next meeting." msgstr "" +"Zauważ, że możesz stosować kalendarz do graficznego planowania spotkań." #. module: crm #: view:crm.lead:0 @@ -1924,13 +1964,13 @@ msgstr "" #. module: crm #: view:crm.meeting:0 msgid "Attendee" -msgstr "" +msgstr "Uczestnik" #. module: crm #: code:addons/crm/crm.py:0 #, python-format msgid "Email Fail!" -msgstr "" +msgstr "Błąd wiadomości" #. module: crm #: model:crm.case.categ,name:crm.categ_phone1 @@ -1938,12 +1978,12 @@ 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 "Inbound" -msgstr "" +msgstr "Przychodzące" #. module: crm #: constraint:crm.case.section:0 msgid "Error ! You cannot create recursive sections." -msgstr "" +msgstr "Błąd ! Nie możesz tworzyć rekurencyjnych sekcji." #. module: crm #: model:ir.ui.menu,name:crm.menu_crm @@ -1956,6 +1996,8 @@ msgid "" " Will allow you to synchronise your Open ERP calendars with your phone, " "outlook, Sunbird, ical, ..." msgstr "" +" Pozwoli ci synchronizować kalendarze OpenERP z twoim telefonem, outlook, " +"Sunbird, ical, ..." #. module: crm #: view:report.crm.case.section.categ.categ2:0 @@ -1963,7 +2005,7 @@ msgstr "" #: view:report.crm.case.section.categ2:0 #: view:report.crm.case.section.stage:0 msgid "This Year" -msgstr "" +msgstr "Ten rok" #. module: crm #: field:crm.case.rule,act_remind_partner:0 @@ -1981,7 +2023,7 @@ msgstr "Najwyższy" #. module: crm #: view:crm.job:0 msgid "Contract Data" -msgstr "" +msgstr "Data umowy" #. module: crm #: selection:crm.case.rule,trg_date_range_type:0 @@ -1992,11 +2034,13 @@ msgstr "Dni" #: help:crm.menu.config_wizard,bugs:0 msgid "Used by companies to track bugs and support requests on software" msgstr "" +"Stosowane przez firmy do śledzenia błędów i zgłoszeń do wsparcia dla " +"oprogramowania" #. module: crm #: field:crm.menu.config_wizard,document_ics:0 msgid "Shared Calendar" -msgstr "" +msgstr "Współdzielony kalendarz" #. module: crm #: field:crm.case.section,reply_to:0 @@ -2006,7 +2050,7 @@ msgstr "Odpowiedz do" #. module: crm #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_categ msgid "Cases by Leads and Type" -msgstr "" +msgstr "Sprawy wg sygnałów i typów" #. module: crm #: selection:crm.case.rule,trg_date_range_type:0 @@ -2017,12 +2061,12 @@ msgstr "Minuty" #: field:report.crm.case.section.categ2,amount_revenue:0 #: field:report.crm.case.section.stage,amount_revenue:0 msgid "Est.Revenue" -msgstr "" +msgstr "Szac. dochód" #. module: crm #: model:crm.case.stage,name:crm.stage_job1 msgid "Initial Jobs Demand" -msgstr "" +msgstr "Potrzeba stanowiska" #. module: crm #: field:crm.case.rule,trg_priority_to:0 @@ -2037,12 +2081,12 @@ msgstr "" #. module: crm #: view:crm.claim:0 msgid "Claims Info" -msgstr "" +msgstr "Informacja o reklamacji" #. module: crm #: field:crm.case.category2,name:0 msgid "Case Category2 Name" -msgstr "" +msgstr "Nazwa kategorii2 sprawy" #. module: crm #: wizard_view:crm.lead.opportunity_set,opportunity:0 @@ -2050,29 +2094,29 @@ msgstr "" #: model:ir.actions.wizard,name:crm.wizard_crm_lead_opportunity_set #: model:ir.actions.wizard,name:crm.wizard_crm_phonecall_opportunity_set msgid "Convert To Opportunity" -msgstr "" +msgstr "Konwertuj do szansy" #. module: crm #: model:crm.case.stage,name:crm.stage_phone2 #: view:crm.phonecall:0 msgid "Held" -msgstr "" +msgstr "Odebrane" #. module: crm #: view:crm.case:0 msgid "Helpdesk Supports" -msgstr "" +msgstr "Wsparcie helpdesk" #. module: crm #: model:crm.case.section,name:crm.section_support4 #: model:ir.ui.menu,name:crm.menu_crm_case_fund_raise msgid "Fund Raising" -msgstr "" +msgstr "Zwiększenie funduszu" #. module: crm #: selection:crm.new.send.mail,init,state:0 msgid "Unchanged" -msgstr "" +msgstr "Niezmienione" #. module: crm #: wizard_view:crm.job.partner_create,init:0 @@ -2081,12 +2125,12 @@ msgstr "" #: wizard_view:crm.phonecall.opportunity_set,create_partner:0 #: wizard_view:crm.phonecall.partner_create,init:0 msgid "Convert To Partner" -msgstr "" +msgstr "Konwertuj do partnera" #. module: crm #: field:crm.case.rule,trg_state_from:0 msgid "Case State" -msgstr "Stan przypadku" +msgstr "Stan sprawy" #. module: crm #: code:addons/crm/crm.py:0 @@ -2107,17 +2151,17 @@ msgstr "Priorytet" #. module: crm #: view:crm.opportunity:0 msgid "Source" -msgstr "" +msgstr "Źródło" #. module: crm #: field:crm.meeting,location:0 msgid "Location" -msgstr "" +msgstr "Lokalizacja" #. module: crm #: view:crm.fundraising:0 msgid "Payment Mode" -msgstr "" +msgstr "Sposób zapłaty" #. module: crm #: help:crm.case.rule,trg_date_range:0 @@ -2132,17 +2176,17 @@ msgstr "" #: view:crm.job:0 #: view:crm.lead:0 msgid "Stage: " -msgstr "" +msgstr "Etap: " #. module: crm #: view:crm.case.section:0 msgid "Case section" -msgstr "Sekcja przypadku" +msgstr "Sekcja sprawy" #. module: crm #: model:process.node,note:crm.process_node_meeting0 msgid "Schedule a normal or phone meeting" -msgstr "" +msgstr "Zaplanuj zwykłe spotkanie albo telefoniczne" #. module: crm #: code:addons/crm/crm.py:0 @@ -2163,12 +2207,12 @@ msgstr "Pola do zmiany" #. module: crm #: model:crm.case.category2,name:crm.category_lead1 msgid "Telesales" -msgstr "" +msgstr "Telesprzedaż" #. module: crm #: model:ir.ui.menu,name:crm.menu_crm_case_history-act_main msgid "Cases Histories" -msgstr "Historie przypadków" +msgstr "Historie spraw" #. module: crm #: field:crm.case,create_date:0 @@ -2190,7 +2234,7 @@ msgstr "Pozycja segmentacji" #: wizard_field:crm.opportunity.reschedule_phone_call,init,deadline:0 #: view:crm.phonecall:0 msgid "Planned Date" -msgstr "" +msgstr "Planowana data" #. module: crm #: selection:crm.case.rule,trg_date_range_type:0 @@ -2203,16 +2247,17 @@ msgid "" "Helps you to encode the result of a phone call or to plan a list of phone " "calls to process." msgstr "" +"Pomaga wprowadzić rezultat rozmowy lub zaplanować rozmowy do wykonania." #. module: crm #: model:ir.actions.wizard,name:crm.wizard_crm_cal_import msgid "Import ICS File" -msgstr "" +msgstr "Importuj plik ICS" #. module: crm #: view:crm.meeting:0 msgid "Attendee Detail" -msgstr "" +msgstr "Szczegóły uczestnika" #. module: crm #: model:crm.case.category2,name:crm.category_job3 @@ -2225,58 +2270,58 @@ msgstr "" #: selection:report.crm.case.section.categ2,month:0 #: selection:report.crm.case.section.stage,month:0 msgid "July" -msgstr "" +msgstr "Lipiec" #. module: crm #: model:crm.case.stage,name:crm.stage_oppor1 msgid "Prospecting" -msgstr "" +msgstr "Ocenianie" #. module: crm #: field:crm.case,partner_name2:0 msgid "Employee Email" -msgstr "" +msgstr "Email pracownika" #. module: crm #: model:ir.model,name:crm.model_crm_meeting msgid "Meeting Cases" -msgstr "" +msgstr "Sprawy spotkań" #. module: crm #: view:crm.job:0 msgid "Job Info" -msgstr "" +msgstr "Informacja o stanowisko" #. module: crm #: view:crm.meeting:0 msgid "Cancel Meeting" -msgstr "" +msgstr "Anuluj spotkanie" #. module: crm #: model:crm.case.section,name:crm.section_support0 msgid "Jobs" -msgstr "" +msgstr "Stanowiska" #. module: crm #: view:crm.case.rule:0 msgid "%(case_date)s = Creation date" -msgstr "" +msgstr "%(case_date)s = Data utworzenia" #. module: crm #: model:crm.case.stage,name:crm.stage_phone3 #: view:crm.phonecall:0 msgid "Not Held" -msgstr "" +msgstr "Nie odebrane" #. module: crm #: field:crm.case.rule,act_mail_to_user:0 msgid "Mail to responsible" -msgstr "" +msgstr "Mail do odpowiedzialnych" #. module: crm #: view:crm.job:0 msgid "Jobs - Recruitment Form" -msgstr "" +msgstr "Praca - Formularz rekrutacji" #. module: crm #: model:crm.case.category2,name:crm.category_claim1 @@ -2286,12 +2331,12 @@ msgstr "" #. module: crm #: model:ir.model,name:crm.model_crm_opportunity msgid "Opportunity Cases" -msgstr "" +msgstr "Sprawy szans" #. module: crm #: view:crm.case:0 msgid "Support Query" -msgstr "" +msgstr "Zapytanie o wsparcie" #. module: crm #: view:crm.case.rule:0 @@ -2304,7 +2349,7 @@ msgstr "Szablon emaila do wysłania" #: field:report.crm.case.section.categ2,month:0 #: field:report.crm.case.section.stage,month:0 msgid "Month" -msgstr "" +msgstr "Miesiąc" #. module: crm #: model:crm.case.section,name:crm.section_support2 @@ -2314,23 +2359,23 @@ msgstr "" #: model:ir.ui.menu,name:crm.menu_crm_case_categ0_act_leads #: model:process.node,name:crm.process_node_leads0 msgid "Leads" -msgstr "" +msgstr "Sygnały" #. module: crm #: wizard_button:crm.new.send.mail,init,send:0 #: wizard_button:crm.send.mail,init,send:0 msgid "Send Email" -msgstr "" +msgstr "Wyślij e-mail" #. module: crm #: wizard_view:crm.new.send.mail,init:0 msgid "Set case state to" -msgstr "" +msgstr "Ustaw stan sprawy na" #. module: crm #: model:crm.case.category2,name:crm.categ2_fund3 msgid "Credit Card" -msgstr "" +msgstr "Karta kredytowa" #. module: crm #: code:addons/crm/crm.py:0 @@ -2343,7 +2388,7 @@ msgstr "" #. module: crm #: view:crm.job:0 msgid "Search Jobs" -msgstr "" +msgstr "Przeszukuj stanowiska" #. module: crm #: field:crm.case.history,log_id:0 @@ -2354,17 +2399,17 @@ msgstr "Log" #: help:crm.menu.config_wizard,fund:0 msgid "" "This may help associations in their fund raising process and tracking." -msgstr "" +msgstr "To może pomóc stowarzyszeniom w poszukiwaniu funduszy." #. module: crm #: view:crm.meeting:0 msgid "Reset to Unconfirmed" -msgstr "" +msgstr "Przywróć do niepotwierdzonych" #. module: crm #: view:crm.case:0 msgid "Helpdesk Support" -msgstr "" +msgstr "Wsparcie helpdesku" #. module: crm #: field:crm.case,email_cc:0 @@ -2382,7 +2427,7 @@ msgstr "Uwaga" #: field:report.crm.case.section.categ2,delay_close:0 #: field:report.crm.case.section.stage,delay_close:0 msgid "Delay Close" -msgstr "" +msgstr "Zamknij opóźnienie" #. module: crm #: selection:crm.case,priority:0 @@ -2408,18 +2453,18 @@ msgstr "Zamknięty" #. module: crm #: view:crm.job:0 msgid "Candidate Name2" -msgstr "" +msgstr "Nazwa 2 kandydata" #. module: crm #: code:addons/crm/crm.py:0 #, python-format msgid "cancel" -msgstr "anuluj" +msgstr "" #. module: crm #: model:crm.case.categ,name:crm.categ_meet2 msgid "Internal Meeting" -msgstr "" +msgstr "Spotkanie wewnętrzne" #. module: crm #: view:crm.case:0 @@ -2428,7 +2473,7 @@ msgstr "" #: view:crm.lead:0 #: view:crm.opportunity:0 msgid "Events" -msgstr "" +msgstr "Wydarzenia" #. module: crm #: help:crm.menu.config_wizard,lead:0 @@ -2455,27 +2500,27 @@ msgstr "" #. module: crm #: model:crm.case.categ,name:crm.categ_meet1 msgid "Customer Meeting" -msgstr "" +msgstr "Spotkanie z klientem" #. module: crm #: wizard_field:crm.new.send.mail,init,doc2:0 msgid "Attachment2" -msgstr "" +msgstr "Załącznik2" #. module: crm #: wizard_field:crm.new.send.mail,init,doc3:0 msgid "Attachment3" -msgstr "" +msgstr "Załącznik3" #. module: crm #: view:crm.job:0 msgid "Degree" -msgstr "" +msgstr "Stopień" #. module: crm #: wizard_field:crm.new.send.mail,init,doc1:0 msgid "Attachment1" -msgstr "" +msgstr "Załącznik1" #. module: crm #: code:addons/crm/crm_phonecall.py:0 @@ -2486,7 +2531,7 @@ msgstr "" #: model:ir.ui.menu,name:crm.menu_crm_case_phone #, python-format msgid "Phone Calls" -msgstr "" +msgstr "Rozmowy telefoniczne" #. module: crm #: help:crm.case,active:0 @@ -2494,6 +2539,8 @@ msgid "" "If the active field is set to true, it will allow you to hide the case " "without removing it." msgstr "" +"Jeśli aktywne pole jest ustawione na true (prawda), to będziesz mógł ukryć " +"sprawę bez jej usuwania." #. module: crm #: model:ir.model,name:crm.model_crm_menu_config_wizard @@ -2503,24 +2550,24 @@ msgstr "" #. module: crm #: view:crm.case.history:0 msgid "Case History" -msgstr "Historia przypadku" +msgstr "Historia sprawy" #. module: crm #: field:crm.case,partner_phone:0 msgid "Phone" -msgstr "" +msgstr "Telefon" #. module: crm #: model:crm.case.category2,name:crm.categ2_fund2 msgid "Cheque" -msgstr "" +msgstr "Czek" #. module: crm #: field:crm.case,active:0 #: field:crm.case.rule,active:0 #: field:crm.case.section,active:0 msgid "Active" -msgstr "Aktywny" +msgstr "Aktywne" #. module: crm #: help:crm.case.rule,act_remind_attach:0 @@ -2528,6 +2575,8 @@ msgid "" "Check this if you want that all documents attached to the case be attached " "to the reminder email sent." msgstr "" +"Zaznacz to, jeśli chcesz aby wszystkie dokumenty załączone do sprawy zostały " +"dołączone do przypomnień." #. module: crm #: selection:crm.segmentation.line,operator:0 @@ -2542,12 +2591,12 @@ msgstr "" #. module: crm #: view:crm.job:0 msgid "Candidate Phone" -msgstr "" +msgstr "Telefon kandydata" #. module: crm #: model:ir.actions.wizard,name:crm.wizard_crm_send_mail msgid "Send Mail" -msgstr "" +msgstr "Wyślij wiadomość" #. module: crm #: selection:crm.case.rule,trg_date_range_type:0 @@ -2564,23 +2613,25 @@ msgstr "Miesiące" #: model:ir.actions.act_window,name:crm.action_crm_opportunity_assign_wizard #: model:ir.actions.act_window,name:crm.action_crm_phonecall_assign_wizard msgid "To Assign" -msgstr "" +msgstr "Do przypisania" #. module: crm #: code:addons/crm/wizard/wizard_cal_subscribe.py:0 #, python-format msgid "Please provide Proper URL !" -msgstr "" +msgstr "Podaj poprawny URL !" #. module: crm #: model:process.node,note:crm.process_node_opportunities0 msgid "When a real project/opportunity is detected" -msgstr "" +msgstr "Kiedy rzeczywisty projekt/szansa została wykryta" #. module: crm #: wizard_view:crm.job.partner_create,init:0 msgid "Are you sure you want to create a partner based on this job request ?" msgstr "" +"Jesteś pewien, że chcesz utworzyć partnera na podstawie tego zgłoszenia do " +"pracy ?" #. module: crm #: wizard_field:crm.lead.opportunity_set,create_partner,action:0 @@ -2597,7 +2648,7 @@ msgstr "Akcja" #: model:ir.ui.menu,name:crm.menu_crm_case_claims #, python-format msgid "Claims" -msgstr "" +msgstr "Reklamacje" #. module: crm #: field:crm.segmentation,som_interval_decrease:0 @@ -2607,28 +2658,28 @@ msgstr "" #. module: crm #: model:ir.actions.wizard,name:crm.wizard_case_history_event msgid "History of Events" -msgstr "" +msgstr "Historia wydarzeń" #. module: crm #: model:ir.model,name:crm.model_crm_case_category2 msgid "Category2 of case" -msgstr "" +msgstr "Kategoria2 sprawy" #. module: crm #: wizard_field:crm.new.send.mail,init,to:0 #: wizard_field:crm.send.mail,init,to:0 msgid "To" -msgstr "" +msgstr "Do" #. module: crm #: view:crm.case.rule:0 msgid "%(case_user_email)s = Responsible email" -msgstr "" +msgstr "%(case_user_email)s = email odpowiedzialnego" #. module: crm #: model:ir.ui.menu,name:crm.menu_presale msgid "Sales" -msgstr "" +msgstr "Sprzedaż" #. module: crm #: view:crm.case:0 @@ -2639,18 +2690,18 @@ msgstr "Ogólne" #. module: crm #: model:crm.case.stage,name:crm.stage_lead2 msgid "Assigned" -msgstr "" +msgstr "Przydzielony" #. module: crm #: model:crm.case.stage,name:crm.stage_lead5 msgid "Recycled" -msgstr "" +msgstr "Usunięty" #. module: crm #: model:crm.case.categ,name:crm.categ_lead8 #: model:crm.case.categ,name:crm.categ_oppor8 msgid "Other" -msgstr "" +msgstr "Inne" #. module: crm #: view:crm.case:0 @@ -2660,17 +2711,17 @@ msgstr "" #: selection:crm.new.send.mail,init,state:0 #: view:crm.opportunity:0 msgid "Done" -msgstr "" +msgstr "Wykonano" #. module: crm #: field:crm.segmentation,som_interval_max:0 msgid "Max Interval" -msgstr "Maks. interwału" +msgstr "Maks. interwał" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_category_act_oppor11 msgid "All Opportunities" -msgstr "" +msgstr "Wszystkie sprawy" #. module: crm #: code:addons/crm/crm.py:0 @@ -2704,17 +2755,17 @@ msgstr "" #: code:addons/crm/wizard/crm_phonecall_wizard.py:0 #, python-format msgid "A partner is already existing with the same name." -msgstr "" +msgstr "Istnieje już partner z tą samą nazwą" #. module: crm #: model:ir.model,name:crm.model_crm_phonecall msgid "Phonecall Cases" -msgstr "" +msgstr "Sprawy telefoniczne" #. module: crm #: help:crm.case.rule,sequence:0 msgid "Gives the sequence order when displaying a list of case rules." -msgstr "" +msgstr "Ustala kolejność wyświetlania listy reguł spraw" #. module: crm #: field:crm.menu.config_wizard,helpdesk:0 @@ -2741,23 +2792,23 @@ msgstr "Odpowiedzialny" #: model:crm.case.stage,name:crm.stage_claim4 #: model:crm.case.stage,name:crm.stage_meet3 msgid "Invalid" -msgstr "" +msgstr "Niepoprawny" #. module: crm #: wizard_button:crm.job.meeting_set,init,order:0 #: wizard_button:crm.phonecall.meeting_set,init,order:0 msgid "Set Meeting" -msgstr "" +msgstr "Ustal spotkanie" #. module: crm #: field:crm.menu.config_wizard,meeting:0 msgid "Calendar of Meetings" -msgstr "" +msgstr "Kalendarz spotkań" #. module: crm #: view:crm.case:0 msgid "Cases By Stage and Estimates" -msgstr "" +msgstr "Sprawy wg etapów i szacunków" #. module: crm #: code:addons/crm/crm.py:0 @@ -2766,6 +2817,8 @@ msgid "" "You can not escalate this case.\n" "You are already at the top level." msgstr "" +"Nie możesz przekazać tej sprawy.\n" +"Jesteś na najwyższym poziomie." #. module: crm #: view:crm.lead:0 @@ -2775,7 +2828,7 @@ msgstr "Nazwa sygnału" #. module: crm #: view:crm.claim:0 msgid "Claim/Action Description" -msgstr "" +msgstr "Reklamacja/Opis akcji" #. module: crm #: field:crm.case.rule,trg_max_history:0 @@ -2797,17 +2850,17 @@ msgstr "" #. module: crm #: model:crm.case.stage,name:crm.stage_job6 msgid "Refused by Employee" -msgstr "" +msgstr "Odmowa pracownika" #. module: crm #: field:crm.case,partner_name:0 msgid "Employee's Name" -msgstr "" +msgstr "Nazwisko pracownika" #. module: crm #: model:crm.case.stage,name:crm.stage_job2 msgid "First Interview" -msgstr "" +msgstr "Pierwsza rozmowa" #. module: crm #: view:report.crm.case.section.categ.categ2:0 @@ -2815,17 +2868,17 @@ msgstr "" #: view:report.crm.case.section.categ2:0 #: view:report.crm.case.section.stage:0 msgid "This Month" -msgstr "" +msgstr "Bieżący miesiąc" #. module: crm #: view:crm.job:0 msgid "Availability (weeks)" -msgstr "" +msgstr "Dostępność (tygodnie)" #. module: crm #: view:crm.opportunity:0 msgid "Opportunities Tree" -msgstr "" +msgstr "Drzewo szans" #. module: crm #: help:crm.case,state:0 @@ -2838,16 +2891,23 @@ msgid "" " \n" "If the case needs to be reviewed then the state is set to 'Pending'." msgstr "" +"Stan jest ustawiony na 'Projekt', gdy sprawa jest tworzona. " +" \n" +"Jeśli sprawa jest w toku, to stan jest ustawiony na 'Otwarte'. " +" \n" +"Kiedy sprawa jest zakończona, stan jest 'Wykonano'. " +" \n" +"Jeśli sprawa wymaga interwencji, to stan jest 'Oczekiwanie'." #. module: crm #: view:crm.job:0 msgid "Open Jobs" -msgstr "" +msgstr "Otwarte stanowiska" #. module: crm #: selection:crm.email.add.cc,name:0 msgid "Email Address" -msgstr "" +msgstr "Adres email" #. module: crm #: help:crm.segmentation,som_interval_max:0 @@ -2855,16 +2915,18 @@ msgid "" "The computation is made on all events that occured during this interval, the " "past X periods." msgstr "" +"Obliczenia są wykonywane na wszystkich zdarzeniach, które wystąpiły w " +"trakcie tego interwału, w ostatnich X okresach." #. module: crm #: field:crm.case,case_id:0 msgid "Related Case" -msgstr "" +msgstr "Sprawa związana" #. module: crm #: field:crm.case.rule,server_action_id:0 msgid "Server Action" -msgstr "" +msgstr "Akcja serwera" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_categ_claim0 @@ -2874,33 +2936,33 @@ msgstr "Wszystkie reklamacje" #. module: crm #: field:crm.case.log,user_id:0 msgid "User Responsible" -msgstr "" +msgstr "Użytkownik odpowiedzialny" #. module: crm #: code:addons/crm/wizard/wizard_crm_new_send_email.py:0 #, python-format msgid "Email not sent !" -msgstr "" +msgstr "Wiadomość nie wysłana !" #. module: crm #: wizard_field:crm.phonecall.partner_create,init,close:0 msgid "Close Phonecall" -msgstr "" +msgstr "Zamknij rozmowę" #. module: crm #: field:crm.case,email_last:0 msgid "Latest E-Mail" -msgstr "" +msgstr "Ostatni email" #. module: crm #: view:crm.case.rule:0 msgid "Regex on Communication History" -msgstr "" +msgstr "Wyrażenia reg. dla historii komunikacji" #. module: crm #: model:crm.case.category2,name:crm.categ2_fund4 msgid "Demand Draft" -msgstr "" +msgstr "Wymagaj projektu" #. module: crm #: field:crm.case,id:0 @@ -2910,18 +2972,18 @@ msgstr "" #. module: crm #: field:crm.case,log_ids:0 msgid "Logs History" -msgstr "" +msgstr "Zapisuje historię" #. module: crm #: wizard_field:crm.lead.opportunity_set,opportunity,name:0 #: wizard_field:crm.phonecall.opportunity_set,opportunity,name:0 msgid "Opportunity Summary" -msgstr "" +msgstr "Podsumowanie szans" #. module: crm #: view:crm.case:0 msgid "Search Case" -msgstr "" +msgstr "Przeszukaj sprawę" #. module: crm #: view:crm.segmentation:0 @@ -2931,13 +2993,13 @@ msgstr "Kontynuuj proces" #. module: crm #: view:crm.case.history:0 msgid "Case Description" -msgstr "Opis przypadku" +msgstr "Opis sprawy" #. module: crm #: wizard_field:crm.job.reschedule_phone_call,init,user_id:0 #: wizard_field:crm.opportunity.reschedule_phone_call,init,user_id:0 msgid "Assign To" -msgstr "" +msgstr "Przypisz do" #. module: crm #: field:crm.case,date_action_last:0 @@ -2947,27 +3009,27 @@ msgstr "Ostatnia akcja" #. module: crm #: field:crm.case,duration:0 msgid "Duration" -msgstr "" +msgstr "Czas trwania" #. module: crm #: model:ir.model,name:crm.model_report_crm_case_section_categ_stage msgid "Cases by section, Category and stage" -msgstr "" +msgstr "Sprawy wg sekcji, kategorii i etapu" #. module: crm #: view:crm.job:0 msgid "Candidate Hired" -msgstr "" +msgstr "Kandydat zatrudniony" #. module: crm #: field:crm.menu.config_wizard,jobs:0 msgid "Jobs Hiring Process" -msgstr "" +msgstr "Proces zatrudniania" #. module: crm #: model:ir.ui.menu,name:crm.next_id_52 msgid "All Cases" -msgstr "Wszystkie przypadki" +msgstr "Wszystkie sprawy" #. module: crm #: code:addons/crm/wizard/crm_lead_wizard.py:0 @@ -2986,7 +3048,7 @@ msgstr "Źródło sygnału" #: field:report.crm.case.section.categ2,nbr:0 #: field:report.crm.case.section.stage,nbr:0 msgid "# of Cases" -msgstr "" +msgstr "# spraw" #. module: crm #: selection:crm.meeting,class:0 @@ -2996,7 +3058,7 @@ msgstr "" #. module: crm #: wizard_view:caldav.crm.subscribe,init:0 msgid "Provide path for Remote Calendar" -msgstr "" +msgstr "Wprowadź ścieżkę dla zdalnego kalendarza" #. module: crm #: view:crm.segmentation:0 @@ -3007,28 +3069,28 @@ msgstr "Segmentacja" #. module: crm #: view:crm.fundraising:0 msgid "Funds Form" -msgstr "" +msgstr "Formularz funduszy" #. module: crm #: view:crm.meeting:0 msgid "Search Meetings" -msgstr "" +msgstr "Przeszukuj spotkania" #. module: crm #: selection:crm.lead.opportunity_set,create_partner,action:0 #: selection:crm.phonecall.opportunity_set,create_partner,action:0 msgid "Create a new partner" -msgstr "" +msgstr "Utwórz nowego partnera" #. module: crm #: field:crm.case,company_id:0 msgid "Company" -msgstr "" +msgstr "Firma" #. module: crm #: model:crm.case.stage,name:crm.stage_lead3 msgid "In Process" -msgstr "" +msgstr "W toku" #. module: crm #: selection:crm.segmentation,state:0 @@ -3038,24 +3100,24 @@ msgstr "Uruchomione" #. module: crm #: view:crm.case.rule:0 msgid "%(case_user)s = Responsible name" -msgstr "" +msgstr "%(case_user)s = Nazwa odpowiedzialnego" #. module: crm #: wizard_field:crm.job.reschedule_phone_call,init,note:0 #: wizard_field:crm.opportunity.reschedule_phone_call,init,note:0 msgid "Goals" -msgstr "" +msgstr "Cele" #. module: crm #: model:ir.ui.menu,name:crm.menu_crm_case_section_categ_tree #: view:report.crm.case.section.categ2:0 msgid "Cases by Section and Type" -msgstr "" +msgstr "Sprawy wg sekcji i typu" #. module: crm #: model:ir.ui.menu,name:crm.menu_aftersale msgid "After-Sale Services" -msgstr "" +msgstr "Obsługa posprzedażna" #. module: crm #: wizard_button:caldav.crm.export,init,end:0 @@ -3068,12 +3130,12 @@ msgstr "" #. module: crm #: wizard_field:caldav.crm.export,init,name:0 msgid "File name" -msgstr "" +msgstr "Nazwa pliku" #. module: crm #: view:crm.lead:0 msgid "Search Leads" -msgstr "Szukaj sygnału" +msgstr "Przeszukuj sygnały" #. module: crm #: help:crm.case.rule,active:0 @@ -3081,6 +3143,8 @@ msgid "" "If the active field is set to true, it will allow you to hide the case rule " "without removing it." msgstr "" +"Jeśli aktywne pole jest ustawione na true (prawda), to będziesz mógł ukryć " +"regułę sprawy bez jej usuwania." #. module: crm #: code:addons/crm/crm.py:0 @@ -3098,7 +3162,7 @@ msgstr "" #: model:ir.actions.act_window,name:crm.crm_case_categ0_act_job #: model:ir.ui.menu,name:crm.menu_crm_case_categ0_act_job msgid "All Jobs Requests" -msgstr "" +msgstr "Wszystkie zgłoszenia na stanowisko" #. module: crm #: selection:crm.case,state:0 @@ -3110,7 +3174,7 @@ msgstr "" #: selection:report.crm.case.section.categ2,state:0 #: selection:report.crm.case.section.stage,state:0 msgid "Cancelled" -msgstr "" +msgstr "Anulowano" #. module: crm #: view:crm.job:0 @@ -3127,27 +3191,27 @@ msgstr "" #. module: crm #: view:crm.phonecall:0 msgid "Relevant" -msgstr "" +msgstr "Odpowiedni" #. module: crm #: wizard_field:crm.case.opportunity.partner_opportunity,init,name:0 msgid "Opportunity Name" -msgstr "" +msgstr "Nazwa szansy" #. module: crm #: field:crm.meeting,rrule:0 msgid "Recurrent Rule" -msgstr "" +msgstr "Reguła rekurencyjna" #. module: crm #: wizard_view:caldav.crm.import,init:0 msgid "Import ICS" -msgstr "" +msgstr "Importuj ICS" #. module: crm #: view:crm.phonecall:0 msgid "Call Summary" -msgstr "" +msgstr "Podsumowanie rozmowy" #. module: crm #: field:crm.segmentation.line,expr_operator:0 @@ -3157,17 +3221,17 @@ msgstr "Operator" #. module: crm #: model:ir.model,name:crm.model_crm_case_log msgid "Case Communication History" -msgstr "Historia komunikacji przypadku" +msgstr "Historia komunikacji sprawy" #. module: crm #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ msgid "Cases by Opportunities and Type" -msgstr "" +msgstr "Sprawy wg szans i typów" #. module: crm #: view:crm.case.rule:0 msgid "%(case_subject)s = Case subject" -msgstr "" +msgstr "%(case_subject)s = Temat sprawy" #. module: crm #: field:crm.case,section_id:0 @@ -3201,12 +3265,12 @@ msgstr "" #: code:addons/crm/wizard/crm_job_wizard.py:0 #, python-format msgid "A partner is already defined on this job request." -msgstr "" +msgstr "Dla tego zgłoszenia do pracy partner jest juz zdefiniowany." #. module: crm #: model:crm.case.stage,name:crm.stage_lead1 msgid "New" -msgstr "" +msgstr "Nowe" #. module: crm #: field:crm.case,description:0 @@ -3235,27 +3299,27 @@ msgstr "" #. module: crm #: model:ir.model,name:crm.model_crm_claim msgid "Claim Cases" -msgstr "" +msgstr "Sprawy reklamacji" #. module: crm #: view:crm.case.rule:0 msgid "E-Mail Reminders (includes the content of the case)" -msgstr "" +msgstr "Przypomnienie email (zawiera sprawę)" #. module: crm #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_stage msgid "Cases by Leads and Stage" -msgstr "Zdarzenia wg sygnałów i etapów" +msgstr "Sprawy wg sygnałów i etapów" #. module: crm #: field:crm.meeting,exdate:0 msgid "Exception Date/Times" -msgstr "" +msgstr "Daty/Czasy wyjątków" #. module: crm #: view:crm.meeting.generic_wizard:0 msgid "Generic Wizard" -msgstr "" +msgstr "Podstawowy kreator" #. module: crm #: model:process.transition,note:crm.process_transition_leadopportunity0 @@ -3265,7 +3329,7 @@ msgstr "Tworzenie szansy z sygnału" #. module: crm #: model:ir.ui.menu,name:crm.next_id_64 msgid "Reporting" -msgstr "" +msgstr "Raportowanie" #. module: crm #: code:addons/crm/crm.py:0 @@ -3286,17 +3350,17 @@ msgstr "" #: selection:report.crm.case.section.stage,state:0 #, python-format msgid "Pending" -msgstr "Oczekuje" +msgstr "Oczekiwanie" #. module: crm #: model:process.transition,name:crm.process_transition_leadopportunity0 msgid "Prospect Opportunity" -msgstr "" +msgstr "Potencjalna szansa" #. module: crm #: view:crm.job:0 msgid "Expected Salary" -msgstr "" +msgstr "Oczekiwane wynagrodzenie" #. module: crm #: model:ir.ui.menu,name:crm.menu_crm_configuration @@ -3306,28 +3370,28 @@ msgstr "Konfiguracja" #. module: crm #: model:ir.actions.wizard,name:crm.wizard_crm_new_send_mail msgid "Send New Mail" -msgstr "" +msgstr "Wyślij nową wiadomość" #. module: crm #: constraint:ir.cron:0 msgid "Invalid arguments" -msgstr "" +msgstr "Niepoprawne argumenty" #. module: crm #: field:crm.meeting,transparent:0 msgid "Trensparent" -msgstr "" +msgstr "Przezroczysty" #. module: crm #: view:crm.case:0 msgid "My Cases" -msgstr "" +msgstr "Moje sprawy" #. module: crm #: model:crm.case.categ,name:crm.categ_lead7 #: model:crm.case.categ,name:crm.categ_oppor7 msgid "Word of mouth" -msgstr "" +msgstr "Ustna wiadomość" #. module: crm #: view:crm.lead:0 @@ -3338,32 +3402,32 @@ msgstr "Temat sygnału" #: view:crm.lead:0 #: view:crm.phonecall:0 msgid "Convert to Opportunity" -msgstr "" +msgstr "Konwertuj do szansy" #. module: crm #: model:crm.case.stage,name:crm.stage_phone1 msgid "Planned" -msgstr "" +msgstr "Planowane" #. module: crm #: model:crm.case.category2,name:crm.category_meet3 msgid "Customer Office" -msgstr "" +msgstr "Biuro klienta" #. module: crm #: view:crm.job:0 msgid "Candidate Email" -msgstr "" +msgstr "Email kandydata" #. module: crm #: view:crm.opportunity:0 msgid "Sales Stage: " -msgstr "" +msgstr "Etap sprzedaży: " #. module: crm #: view:crm.claim:0 msgid "Type of Action" -msgstr "" +msgstr "Typ akcji" #. module: crm #: field:crm.case.rule,act_user_id:0 @@ -3373,7 +3437,7 @@ msgstr "Ustaw odpowiedzialnego na" #. module: crm #: view:crm.job:0 msgid "Meeting With Candidates" -msgstr "" +msgstr "Spotkanie z kandydatami" #. module: crm #: help:crm.segmentation,som_interval:0 @@ -3384,6 +3448,11 @@ msgid "" "has decreased because he probably bought goods to another supplier. Use this " "functionality for recurring businesses." msgstr "" +"Okres jest średnią (w dniach) pomiędzy dwiema sprzedażami lub dwoma zakupami " +"dla tej segmentacji. To jest stosowane głównie do wykrycia, czy partner nie " +"kupował u nas zbyt długo, co może oznaczać, że jego stan emocji obniżył się, " +"ponieważ prawdopodobnie dokonał zakupów u innego dostawcy. Stosuj te " +"funkcjonalność do biznesów powtarzalnych." #. module: crm #: selection:report.crm.case.section.categ.categ2,month:0 @@ -3391,27 +3460,27 @@ msgstr "" #: selection:report.crm.case.section.categ2,month:0 #: selection:report.crm.case.section.stage,month:0 msgid "December" -msgstr "" +msgstr "Grudzień" #. module: crm #: view:report.crm.case.section.categ.categ2:0 msgid "Search Cases by User" -msgstr "" +msgstr "Przeszukuj sprawy wg użytkownika" #. module: crm #: view:crm.case.rule:0 msgid "Condition on Communication History" -msgstr "" +msgstr "Warunki dla historii komunikacji" #. module: crm #: field:crm.case.rule,act_mail_to_partner:0 msgid "Mail to partner" -msgstr "" +msgstr "Mail do partnera" #. module: crm #: view:crm.fundraising:0 msgid "Funds Tree" -msgstr "" +msgstr "Drzewo funduszy" #. module: crm #: field:crm.case.rule,act_method:0 @@ -3421,7 +3490,7 @@ msgstr "" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_category_act_fund_all1 msgid "All Funds" -msgstr "" +msgstr "Wszystkie fundusze" #. module: crm #: field:crm.case.section,calendar:0 @@ -3433,7 +3502,7 @@ msgstr "Kalendarz" #. module: crm #: model:crm.case.categ,name:crm.categ_job1 msgid "Salesman" -msgstr "" +msgstr "Sprzedawca" #. module: crm #: model:crm.case.section,name:crm.section_support_help @@ -3455,12 +3524,12 @@ msgstr "" #: model:ir.actions.wizard,name:crm.wizard_crm_job_meeting_set #: model:ir.actions.wizard,name:crm.wizard_crm_phonecall_meeting_set msgid "Schedule Meeting" -msgstr "" +msgstr "Zaplanuj spotkanie" #. module: crm #: model:crm.case.categ,name:crm.categ_fund4 msgid "Arts And Culture" -msgstr "" +msgstr "Kultura i sztuka" #. module: crm #: model:crm.case.categ,name:crm.categ_phone2 @@ -3468,18 +3537,18 @@ 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 "Outbound" -msgstr "" +msgstr "Ruch wychodzący" #. module: crm #: code:addons/crm/crm.py:0 #, python-format msgid "Historize" -msgstr "" +msgstr "Zapisz do historii" #. module: crm #: view:crm.meeting:0 msgid "Confirmed" -msgstr "" +msgstr "Potwierdzone" #. module: crm #: selection:crm.segmentation,state:0 @@ -3491,7 +3560,7 @@ msgstr "Nie uruchomiony" #: wizard_field:crm.lead.opportunity_set,opportunity,probability:0 #: wizard_field:crm.phonecall.opportunity_set,opportunity,probability:0 msgid "Success Probability" -msgstr "" +msgstr "Prawdopodobieństwo sukcesu" #. module: crm #: code:addons/crm/crm.py:0 @@ -3511,7 +3580,7 @@ msgstr "Projekt" #. module: crm #: field:crm.case.rule,trg_date_range:0 msgid "Delay after trigger date" -msgstr "" +msgstr "Opóźnienie po dacie wyzwolenia" #. module: crm #: view:crm.lead:0 @@ -3537,7 +3606,7 @@ msgstr "Normalny" #: code:addons/crm/wizard/wizard_crm_send_email.py:0 #, python-format msgid "You must put a Partner eMail to use this action!" -msgstr "" +msgstr "Musisz podac email pertnera, aby zastosować tę akcję!" #. module: crm #: wizard_view:crm.job.partner_create,init:0 @@ -3546,17 +3615,17 @@ msgstr "" #: wizard_view:crm.phonecall.opportunity_set,create_partner:0 #: wizard_view:crm.phonecall.partner_create,init:0 msgid "You may have to verify that this partner does not exist already." -msgstr "" +msgstr "Powinieneś sprawdzić, czy ten partner już istnieje." #. module: crm #: view:crm.job:0 msgid "Qualication" -msgstr "" +msgstr "Kwalifikacje" #. module: crm #: view:crm.meeting:0 msgid "Change RRule" -msgstr "" +msgstr "Zmień regułę" #. module: crm #: selection:crm.email.add.cc,name:0 @@ -3566,14 +3635,14 @@ msgstr "" #: field:report.crm.case.section.categ2,user_id:0 #: field:report.crm.case.section.stage,user_id:0 msgid "User" -msgstr "" +msgstr "Użytkownik" #. module: crm #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_categ_categ2 #: model:ir.ui.menu,name:crm.menu_crm_case_section_categ_categ2_tree #: view:report.crm.case.section.categ.categ2:0 msgid "Cases by Section, Category and Type" -msgstr "" +msgstr "Sprawy wg sekcji, kategorii i typu" #. module: crm #: selection:report.crm.case.section.categ.categ2,month:0 @@ -3581,7 +3650,7 @@ msgstr "" #: selection:report.crm.case.section.categ2,month:0 #: selection:report.crm.case.section.stage,month:0 msgid "November" -msgstr "" +msgstr "Listopad" #. module: crm #: model:crm.case.category2,name:crm.category_job2 @@ -3602,14 +3671,14 @@ msgstr "Sekcja nadrzędna" #: model:ir.actions.wizard,name:crm.wizard_crm_job_reschedule_phone_call #: model:ir.actions.wizard,name:crm.wizard_crm_opportunity_reschedule_phone_call msgid "Schedule Phone Call" -msgstr "" +msgstr "Zaplanuj rozmowę telefoniczną" #. module: crm #: code:addons/crm/crm.py:0 #, python-format msgid "" "Can not send mail with empty body,you should have description in the body" -msgstr "" +msgstr "Nie można wysłać wiadomości z pustą treścią." #. module: crm #: selection:report.crm.case.section.categ.categ2,month:0 @@ -3617,12 +3686,12 @@ msgstr "" #: selection:report.crm.case.section.categ2,month:0 #: selection:report.crm.case.section.stage,month:0 msgid "January" -msgstr "" +msgstr "Styczeń" #. module: crm #: model:process.process,name:crm.process_process_contractprocess0 msgid "Contract" -msgstr "" +msgstr "Umowa" #. module: crm #: field:crm.case.section,child_ids:0 @@ -3637,7 +3706,7 @@ msgstr "Planowany dochód" #. module: crm #: model:crm.case.categ,name:crm.categ_fund3 msgid "Healthcare" -msgstr "" +msgstr "Służba zdrowia" #. module: crm #: view:crm.case:0 @@ -3651,7 +3720,7 @@ msgstr "" #: view:crm.phonecall:0 #: view:crm.phonecall.assign_wizard:0 msgid "Assign" -msgstr "" +msgstr "Przydziel" #. module: crm #: field:crm.case,partner_address_id:0 @@ -3661,17 +3730,17 @@ msgstr "Kontakt do partnera" #. module: crm #: model:crm.case.category2,name:crm.category_meet1 msgid "Office" -msgstr "" +msgstr "Biuro" #. module: crm #: model:ir.model,name:crm.model_crm_fundraising msgid "Fund Raising Cases" -msgstr "" +msgstr "Sprawy podwyższania funduszy" #. module: crm #: model:ir.model,name:crm.model_crm_case_stage msgid "Stage of case" -msgstr "" +msgstr "Etap sprawy" #. module: crm #: view:crm.case:0 @@ -3700,49 +3769,49 @@ msgstr "" #. module: crm #: view:crm.case.rule:0 msgid "Conditions on Case Partner" -msgstr "" +msgstr "Warunki na partnera sprawy" #. module: crm #: field:crm.case.section,code:0 msgid "Section Code" -msgstr "" +msgstr "Kod sekcji" #. module: crm #: wizard_field:crm.job.meeting_set,init,date:0 #: wizard_field:crm.phonecall.meeting_set,init,date:0 msgid "Meeting date" -msgstr "" +msgstr "Data spotkania" #. module: crm #: selection:crm.meeting,class:0 msgid "CONFIDENTIAL" -msgstr "" +msgstr "POUFNE" #. module: crm #: help:crm.case.rule,act_mail_body:0 msgid "Content of mail" -msgstr "" +msgstr "Treść wiaodmości" #. module: crm #: model:crm.case.stage,name:crm.stage_meet2 msgid "Not fixed" -msgstr "" +msgstr "Nie ustalone" #. module: crm #: model:crm.case.categ,name:crm.categ_lead3 #: model:crm.case.categ,name:crm.categ_oppor3 msgid "Employee" -msgstr "" +msgstr "Pracownik" #. module: crm #: field:crm.case,email_from:0 msgid "Partner Email" -msgstr "" +msgstr "Email partnera" #. module: crm #: view:crm.case.rule:0 msgid "% = The '%' Character" -msgstr "" +msgstr "% = Znak '%'" #. module: crm #: view:crm.case:0 @@ -3763,18 +3832,20 @@ msgstr "Opis" #: selection:report.crm.case.section.categ2,month:0 #: selection:report.crm.case.section.stage,month:0 msgid "May" -msgstr "" +msgstr "Maj" #. module: crm #: view:crm.job:0 msgid "Internal Notes" -msgstr "" +msgstr "Wiadomości wewnętrzne" #. module: crm #: help:crm.case.rule,act_remind_user:0 msgid "" "Check this if you want the rule to send a reminder by email to the user." msgstr "" +"Zaznacz to, jeśli chcesz aby reguła wysłała przypomnienie mailem do " +"użytkownika." #. module: crm #: view:crm.case:0 @@ -3786,7 +3857,7 @@ msgstr "" #: view:crm.opportunity:0 #: wizard_field:crm.send.mail,init,cc:0 msgid "CC" -msgstr "" +msgstr "DW" #. module: crm #: field:crm.segmentation.line,operator:0 @@ -3796,7 +3867,7 @@ msgstr "Obowiązkowe / Opcjonalne" #. module: crm #: wizard_button:caldav.crm.import,init,open:0 msgid "_Import" -msgstr "" +msgstr "_Importuj" #. module: crm #: code:addons/crm/crm.py:0 @@ -3813,7 +3884,7 @@ msgstr "" #: model:res.request.link,name:crm.req_link_case #, python-format msgid "Case" -msgstr "Przypadek" +msgstr "Sprawa" #. module: crm #: selection:crm.case,priority:0 @@ -3829,19 +3900,19 @@ msgstr "Najniższy" #: selection:report.crm.case.section.categ2,month:0 #: selection:report.crm.case.section.stage,month:0 msgid "February" -msgstr "" +msgstr "Luty" #. module: crm #: view:crm.phonecall:0 #: model:ir.actions.act_window,name:crm.crm_case_categ_meet_case #: model:ir.actions.act_window,name:crm.crm_case_categ_meet_create_partner msgid "Schedule a Meeting" -msgstr "" +msgstr "Zaplanuj spotkanie" #. module: crm #: view:crm.case.rule:0 msgid "Conditions on Priority Range" -msgstr "" +msgstr "Warunki na zakres priorytetu" #. module: crm #: help:crm.segmentation,som_interval_decrease:0 @@ -3849,17 +3920,19 @@ msgid "" "If the partner has not purchased (or buied) during a period, decrease the " "state of mind by this factor. It's a multiplication" msgstr "" +"Jeśli partner nie zakupił nic przez ten okres, to zmniejsz jego stan emocji " +"o ten współczynnik. To jest dzielenie." #. module: crm #: wizard_view:crm.new.send.mail,init:0 #: wizard_view:crm.send.mail,init:0 msgid "Mass Mailing" -msgstr "" +msgstr "Poczta masowa" #. module: crm #: view:crm.case.rule:0 msgid "E-Mail Actions" -msgstr "" +msgstr "Akcje email" #. module: crm #: field:report.crm.case.section.categ.categ2,name:0 @@ -3867,22 +3940,22 @@ msgstr "" #: field:report.crm.case.section.categ2,name:0 #: field:report.crm.case.section.stage,name:0 msgid "Year" -msgstr "" +msgstr "Rok" #. module: crm #: model:crm.case.category2,name:crm.categ2_fund1 msgid "Cash" -msgstr "" +msgstr "Gotówka" #. module: crm #: view:crm.fundraising:0 msgid "Funds by Categories" -msgstr "" +msgstr "Fundusze wg kategorii" #. module: crm #: model:process.node,note:crm.process_node_leads0 msgid "Very first contact with new prospect" -msgstr "" +msgstr "Pierwszy kontakt z tą okazją" #. module: crm #: selection:report.crm.case.section.categ.categ2,month:0 @@ -3890,42 +3963,42 @@ msgstr "" #: selection:report.crm.case.section.categ2,month:0 #: selection:report.crm.case.section.stage,month:0 msgid "April" -msgstr "" +msgstr "Kwiecień" #. module: crm #: model:crm.case.stage,name:crm.stage_meet5 msgid "Future" -msgstr "" +msgstr "Przyszłe" #. module: crm #: wizard_field:caldav.crm.export,init,file_path:0 msgid "Save ICS file" -msgstr "" +msgstr "Zapisz plik ICS" #. module: crm #: wizard_field:caldav.crm.subscribe,init,url_path:0 msgid "Provide path for remote calendar" -msgstr "" +msgstr "Wprowadź ścieżkę dla zdalnego kalendarza" #. module: crm #: view:crm.case.log:0 msgid "Case logs" -msgstr "" +msgstr "Log sprawy" #. module: crm #: view:crm.case.rule:0 msgid "Conditions on Timing" -msgstr "" +msgstr "Warunki na czas" #. module: crm #: model:ir.model,name:crm.model_crm_helpdesk msgid "Helpdesk Cases" -msgstr "" +msgstr "Sprawy helpdesku" #. module: crm #: model:ir.actions.wizard,name:crm.wizard_crm_cal_export msgid "Export ICS File" -msgstr "" +msgstr "Eksportuj plik ICS" #. module: crm #: field:crm.case.rule,sequence:0 @@ -3938,38 +4011,38 @@ msgstr "Numeracja" #: wizard_view:caldav.crm.import,init:0 #: wizard_field:caldav.crm.import,init,file_path:0 msgid "Select ICS file" -msgstr "" +msgstr "Wybierz plik ICS" #. module: crm #: wizard_view:caldav.crm.import,display:0 msgid "Import Message" -msgstr "" +msgstr "Importuj wiadomość" #. module: crm #: field:crm.segmentation.line,expr_name:0 msgid "Control Variable" -msgstr "" +msgstr "Zmienna kontrolna" #. module: crm #: model:ir.actions.act_window,name:crm.crm_case_section_act_tree #: model:ir.ui.menu,name:crm.menu_crm_case_section_act_tree msgid "Cases by section" -msgstr "Przypadki wg sekcji" +msgstr "Sprawy wg sekcji" #. module: crm #: view:crm.job:0 msgid "New Jobs" -msgstr "" +msgstr "Nowe stanowiska" #. module: crm #: field:crm.menu.config_wizard,fund:0 msgid "Fund Raising Operations" -msgstr "" +msgstr "Operacje zwiększania funduszy" #. module: crm #: model:crm.case.category2,name:crm.category_lead8 msgid "Newsletter" -msgstr "" +msgstr "Biuletyn" #~ msgid "My " #~ msgstr "Moje " diff --git a/addons/crm/i18n/pt_BR.po b/addons/crm/i18n/pt_BR.po index 22ee8947778..d848e510234 100644 --- a/addons/crm/i18n/pt_BR.po +++ b/addons/crm/i18n/pt_BR.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2010-01-05 05:59+0000\n" -"PO-Revision-Date: 2010-02-02 17:06+0000\n" -"Last-Translator: pedrobom <pedrobomlimeira@gmail.com>\n" +"PO-Revision-Date: 2010-05-22 04:53+0000\n" +"Last-Translator: Guilherme Santos <Unknown>\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: 2010-04-17 04:02+0000\n" +"X-Launchpad-Export-Date: 2010-05-23 03:57+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: crm @@ -111,7 +111,7 @@ msgstr "" #. module: crm #: model:ir.ui.menu,name:crm.menu_hr msgid "Human Resources" -msgstr "" +msgstr "Recursos Humanos" #. module: crm #: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ_categ2 @@ -229,7 +229,7 @@ msgstr "Seção de caso" #. module: crm #: view:crm.job:0 msgid "Proposed Salary" -msgstr "Salário proposto" +msgstr "Salário Proposto" #. module: crm #: help:crm.case.section,sequence:0 @@ -272,7 +272,7 @@ msgstr "Palavras-chave especiais a serem utilizadas no corpo" #: view:crm.lead:0 #: view:crm.opportunity:0 msgid "Send New Email" -msgstr "Envia Novo Email" +msgstr "Enviar Novo Email" #. module: crm #: view:crm.case.history:0 diff --git a/addons/crm/report/crm_lead_report_view.xml b/addons/crm/report/crm_lead_report_view.xml index 78a5ffa34c8..c1d64ee332c 100644 --- a/addons/crm/report/crm_lead_report_view.xml +++ b/addons/crm/report/crm_lead_report_view.xml @@ -63,7 +63,7 @@ </record> <!-- Leads by user and section Search View --> - + <record id="view_report_crm_lead_filter" model="ir.ui.view"> <field name="name">crm.lead.report.select</field> <field name="model">crm.lead.report</field> @@ -119,7 +119,7 @@ </field> </group> <newline/> - <group expand="1" string="Extended options..." colspan="10" col="12"> + <group expand="1" string="Extended options..." colspan="10" col="12" groups="base.group_extended"> <filter icon="terp-sale" string="Done" domain="[('state','=','done')]"/> @@ -144,14 +144,14 @@ <filter string="Section" icon="terp-sale" domain="[]" context="{'group_by':'section_id'}" /> - + <separator orientation="vertical" /> <filter string="State" icon="terp-sale" domain="[]" context="{'group_by':'state'}" /> <filter string="Stage" icon="terp-sale" domain="[]" context="{'group_by':'stage_id'}" /> - + <filter string="Category" icon="terp-sale" domain="[]" context="{'group_by':'categ_id'}" /> @@ -180,9 +180,9 @@ <tree string="Opportunities"> <field name="name" invisible="1"/> <field name="month" invisible="1"/> - <field name="section_id" invisible="1"/> + <field name="section_id" invisible="1" groups="base.group_extended"/> <field name="user_id" invisible="1"/> - <field name="company_id" invisible="1"/> + <field name="company_id" invisible="1" groups="base.group_extended"/> <field name="partner_id" invisible="1"/> <field name="day" invisible="1"/> <field name="nbr" string="#Opportunities" sum="#Opportunities"/> @@ -220,7 +220,7 @@ <field name="view_id" ref="view_report_crm_lead_graph"/> <field name="act_window_id" ref="action_report_crm_lead"/> </record> - + <record id="action_report_crm_opportunity" model="ir.actions.act_window"> <field name="name">Opportunities</field> <field name="res_model">crm.lead.report</field> @@ -244,7 +244,7 @@ <field name="view_id" ref="view_report_crm_lead_graph"/> <field name="act_window_id" ref="action_report_crm_opportunity"/> </record> - + <menuitem name="Leads" id="menu_report_crm_leads_tree" groups="base.group_extended" parent="base.next_id_64" action="action_report_crm_lead" /> diff --git a/addons/crm/security/ir.model.access.csv b/addons/crm/security/ir.model.access.csv index f78044ea38e..1f90f74f281 100644 --- a/addons/crm/security/ir.model.access.csv +++ b/addons/crm/security/ir.model.access.csv @@ -6,12 +6,8 @@ "access_crm_meeting","crm.meeting","model_crm_meeting","crm.group_crm_manager",1,1,1,1 "access_crm_lead","crm.lead","model_crm_lead","crm.group_crm_manager",1,1,1,1 "access_crm_phonecall","crm.phonecall","model_crm_phonecall","crm.group_crm_manager",1,1,1,1 -"access_crm_case_log","crm.case.log","model_crm_case_log","crm.group_crm_user",1,1,1,1 -"access_crm_case_history","crm.case.history","model_crm_case_history","crm.group_crm_user",1,1,1,1 -"o","crm.case.section.manager","model_crm_case_section","crm.group_crm_manager",1,1,1,1 +"access_crm_case_section_manager","crm.case.section.manager","model_crm_case_section","crm.group_crm_manager",1,1,1,1 "access_crm_case_categ_manager","crm.case.categ.manager","model_crm_case_categ","crm.group_crm_manager",1,1,1,1 -"access_crm_case_log_manager","crm.case.log manager","model_crm_case_log","crm.group_crm_manager",1,1,1,1 -"access_crm_case_history_manager","crm.case.history manager","model_crm_case_history","crm.group_crm_manager",1,1,1,1 "access_crm_case_stage","crm.case.stage","model_crm_case_stage","crm.group_crm_user",1,0,0,0 "access_crm_case_stage_manager","crm.case.stage","model_crm_case_stage","crm.group_crm_manager",1,1,1,1 "access_crm_case_resource_type_user","crm_case_resource_type user","model_crm_case_resource_type","crm.group_crm_user",1,0,0,0 diff --git a/addons/crm/test/test_crm_lead.yml b/addons/crm/test/test_crm_lead.yml index 0a051d2310d..bfdbe912fed 100644 --- a/addons/crm/test/test_crm_lead.yml +++ b/addons/crm/test/test_crm_lead.yml @@ -16,7 +16,6 @@ login: user_crm name: user_crm password: user_crm - - | I start by creating a new lead "New Customer" and I provide an address to this @@ -25,7 +24,7 @@ !record {model: crm.lead, id: crm_lead_newcustomer0}: email_from: info@mycustomer.com name: New Customer - partner_name: Sandip zala + partner_name: Capegemini phone: (855) 924-4364 mobile: (333) 715-1450 section_id: crm.section_sales_department @@ -41,6 +40,11 @@ - !python {model: crm.lead}: | self.case_open(cr, uid, [ref("crm_lead_newcustomer0")]) +- | + I check that lead is now in 'open' state. +- + !assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in open state}: + - state == "open" - | As the lead seems to be a real business opportunity, I will convert it to a @@ -49,8 +53,8 @@ - !python {model: crm.lead}: | lead = self.browse(cr, uid, ref('crm_lead_newcustomer0')) - if not lead.partner_id: - self.convert_opportunity(cr, uid, [ref("crm_lead_newcustomer0")], {'active_ids': [ref("crm_lead_newcustomer0")]}) + action = self.convert_opportunity(cr, uid, [ref("crm_lead_newcustomer0")], {'active_ids': [ref("crm_lead_newcustomer0")]}) + assert action['res_model'] == 'crm.lead2opportunity.partner' - | Now, select "create a new partner" option in this wizard. @@ -66,7 +70,7 @@ Now, I give value to this wizard field. - !record {model: crm.lead2opportunity, id: crm_lead2opportunity_stonage_0}: - name: Sandip zala + name: Capegemini planned_revenue: 0.00 probability: 0.00 - @@ -79,8 +83,8 @@ I can check that a lead and a business opportunity is now assigned to this lead. - - # !python {model: crm.lead, id: crm_lead_newcustomer0}: - # - opportunity_id.id != False + # !python {model: crm.lead, id: crm_lead_newcustomer0}: + # - opportunity_id == False - | I check that the partner associated to this lead as the same country, phone number @@ -109,4 +113,4 @@ - | I Reply to last Email to lead with some document attached.and check that communication history generated or not. -
\ No newline at end of file + diff --git a/addons/crm/test/test_crm_phonecall.yml b/addons/crm/test/test_crm_phonecall.yml index feb87e0a879..f2020659aed 100644 --- a/addons/crm/test/test_crm_phonecall.yml +++ b/addons/crm/test/test_crm_phonecall.yml @@ -4,44 +4,55 @@ !record {model: crm.phonecall, id: crm_phonecall_interviewcall0}: date: '2010-04-21 18:59:00' name: Interview call - partner_address_id: base.res_partner_address_1 - partner_id: base.res_partner_9 - partner_mobile: (+32)2 211 34 83 section_id: crm.section_sales_department +- | + Now , I select partner by click on "Create a Partner" button. + +- + !record {model: crm.phonecall2partner, id: crm_phonecall2partner_1}: + action: exist + partner_id: base.res_partner_9 + +- + Now, click on "Continue" button of this wizard. +- + !python {model: crm.phonecall2partner}: | + self.make_partner(cr, uid, [ref("crm_phonecall2partner_1")], {"active_ids": [ref("crm_phonecall_interviewcall0")]}) - | As the success of phonecall seems to be a real business opportunity, I will convert it to opportunity by clicking on the "Convert to Opportunity" button. +- + !record {model: crm.phonecall2opportunity, id: crm_phonecall2opportunity_interviewcall0}: + name: Interview call + partner_id: base.res_partner_9 + planned_revenue: 0.0 + probability: 0.0 +- + Now, I click on "Convert" button of this wizard. - -# !python {model: crm.phonecall2opportunity}: | -# self.action_apply(cr, uid, [1], {'active_id': ref('crm_phonecall_interviewcall0')}) - + !python {model: crm.phonecall2opportunity}: | + self.action_apply(cr, uid, [ref("crm_phonecall2opportunity_interviewcall0")], {"active_id": ref("crm_phonecall_interviewcall0")}) - # This is not working, find a way to do that in YAML - + - | I can see that a business opportunity is now assigned to this phonecall -- | - I check that the partner associated to this as the same country, phone number - and name than the phonecall. -- | - In order to avoid the duplication of similar partner, OpenERP should be able to - detect if the partner exists or if it should be created from the phonecall during the - conversion. -- | - In order to test this, I log as the user "user_crm2" -- | - Then, I create the same phonecall than the preceeding one but I change the name - of the phonecall. But this customer keeps the same email. -- | - This time OpenERP should detect that this customer already exists in the - partner base and I check that in the wizard, proposes me to link to this existing - partner instead of creating another one. -- | - I confirm the conversion wizard. +- + !assert {model: crm.phonecall, id: crm_phonecall_interviewcall0}: + - opportunity_id == True + - | And I check that the phonecall and the newly created business opportunity is linked - to the partner + to same partner +- + !python {model: crm.phonecall}: | + xid= ref('crm_phonecall_interviewcall0') + obj_phonecall = self.browse(cr, uid, xid) + ids = self.pool.get('crm.lead').search(cr, uid, [('name', '=', obj_phonecall.opportunity_id.name)]) + obj_opp = self.pool.get('crm.lead').browse(cr, uid, ids)[0] + assert obj_phonecall.partner_id == obj_opp.partner_id + - | I schedule Meeting on this current phonecall by clicking on "schedule Meeting" diff --git a/addons/crm/wizard/crm_forward_to_partner.py b/addons/crm/wizard/crm_forward_to_partner.py index 98d5392faa3..153f136cfb2 100644 --- a/addons/crm/wizard/crm_forward_to_partner.py +++ b/addons/crm/wizard/crm_forward_to_partner.py @@ -176,7 +176,6 @@ class crm_lead_forward_to_partner(osv.osv_memory): this = self.browse(cr, uid, ids[0], context=context) - hist_obj = self.pool.get('crm.case.history') smtp_pool = self.pool.get('email.smtpclient') case_pool = self.pool.get(model) case = case_pool.browse(cr, uid, res_id, context=context) diff --git a/addons/crm/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py index f4cecbe508f..12edf5edc6d 100644 --- a/addons/crm/wizard/crm_lead_to_opportunity.py +++ b/addons/crm/wizard/crm_lead_to_opportunity.py @@ -57,7 +57,6 @@ class crm_lead2opportunity(osv.osv_memory): lead_obj = self.pool.get('crm.lead') data_obj = self.pool.get('ir.model.data') - history_obj = self.pool.get('crm.case.history') model_obj = self.pool.get('ir.model') # Get Opportunity views diff --git a/addons/crm/wizard/crm_lead_to_partner_view.xml b/addons/crm/wizard/crm_lead_to_partner_view.xml index ee6c1522e22..2f7f8540e7f 100644 --- a/addons/crm/wizard/crm_lead_to_partner_view.xml +++ b/addons/crm/wizard/crm_lead_to_partner_view.xml @@ -42,12 +42,15 @@ </record> <!-- Lead to Partner wizard --> - - <act_window id="action_crm_lead2partner" - key2="client_action_multi" name="Create a Partner" - res_model="crm.lead2partner" src_model="crm.lead" - view_id="view_crm_lead2partner_create" - view_mode="form" target="new" view_type="form" /> + + <record id="action_crm_lead2partner" model="ir.actions.act_window"> + <field name="name">Create a Partner</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">crm.lead2partner</field> + <field name="view_type">form</field> + <field name="view_id" ref="view_crm_lead2partner_create"/> + <field name="target">new</field> + </record> </data> </openerp> diff --git a/addons/crm/wizard/crm_partner_to_opportunity_view.xml b/addons/crm/wizard/crm_partner_to_opportunity_view.xml index 41c32a9fa42..7bda631e032 100644 --- a/addons/crm/wizard/crm_partner_to_opportunity_view.xml +++ b/addons/crm/wizard/crm_partner_to_opportunity_view.xml @@ -39,7 +39,8 @@ key2="client_action_multi" name="Create Opportunity" res_model="crm.partner2opportunity" src_model="res.partner" view_id="view_crm_lead2partner_create" - view_mode="form" target="new" view_type="form" /> + view_mode="form" target="new" view_type="form" + groups="base.group_extended"/> </data> </openerp> diff --git a/addons/crm/wizard/crm_phonecall_to_partner_view.xml b/addons/crm/wizard/crm_phonecall_to_partner_view.xml index 524384328f3..c7da406f687 100644 --- a/addons/crm/wizard/crm_phonecall_to_partner_view.xml +++ b/addons/crm/wizard/crm_phonecall_to_partner_view.xml @@ -43,11 +43,15 @@ <!-- Phonecall to Partner wizard --> - <act_window id="action_crm_phonecall2partner" - key2="client_action_multi" name="Create a Partner" - res_model="crm.phonecall2partner" src_model="crm.phonecall" - view_id="view_crm_phonecall2partner_create" - view_mode="form" target="new" view_type="form" /> + <record id="action_crm_phonecall2partner" model="ir.actions.act_window"> + <field name="name">Create a Partner</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">crm.phonecall2partner</field> + <field name="view_type">form</field> + <field name="view_id" ref="view_crm_phonecall2partner_create"/> + <field name="target">new</field> + </record> + </data> </openerp> diff --git a/addons/crm/wizard/crm_send_email.py b/addons/crm/wizard/crm_send_email.py index 87537ebc240..8458172104a 100644 --- a/addons/crm/wizard/crm_send_email.py +++ b/addons/crm/wizard/crm_send_email.py @@ -98,7 +98,9 @@ class crm_send_new_email(osv.osv_memory): message_id = hist.message_id model = hist.model_id.model model_pool = self.pool.get(model) - case = model_pool.browse(cr, uid, hist.res_id) + res_ids = model_pool.search(cr, uid, [('thread_id','=', hist.thread_id.id)]) + res_id = res_ids and res_ids[0] or False + case = model_pool.browse(cr, uid, res_id) emails = [obj.email_to] + (obj.email_cc or '').split(',') emails = filter(None, emails) body = obj.text @@ -197,7 +199,9 @@ class crm_send_new_email(osv.osv_memory): return {} model_pool = self.pool.get(model) - case = model_pool.browse(cr, uid, hist.res_id) + res_ids = model_pool.search(cr, uid, [('thread_id','=', hist.thread_id.id)]) + res_id = res_ids and res_ids[0] or False + case = model_pool.browse(cr, uid, res_id) if 'email_to' in fields: res.update({'email_to': case.email_from or hist.email_from or False}) if 'email_from' in fields: diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py index a535efbdb81..d9a7a2b34c0 100644 --- a/addons/crm_claim/crm_claim.py +++ b/addons/crm_claim/crm_claim.py @@ -29,10 +29,15 @@ class crm_claim(osv.osv, crm.crm_case): _name = "crm.claim" _description = "Claim Cases" _order = "id desc" - _inherit = 'mailgate.thread' + _inherits = {'mailgate.thread': 'thread_id'} + _columns = { + 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False), 'id': fields.integer('ID', readonly=True), 'name': fields.char('Name', size=128, required=True), + 'active': fields.boolean('Active', required=False), + 'date_action_last': fields.datetime('Last Action', readonly=1), + 'date_action_next': fields.datetime('Next Action', readonly=1), 'description': fields.text('Description'), 'create_date': fields.datetime('Creation Date' , readonly=True), 'write_date': fields.datetime('Update Date' , readonly=True), diff --git a/addons/crm_fundraising/crm_fundraising.py b/addons/crm_fundraising/crm_fundraising.py index 4650528fa72..356c3baec73 100644 --- a/addons/crm_fundraising/crm_fundraising.py +++ b/addons/crm_fundraising/crm_fundraising.py @@ -28,11 +28,15 @@ class crm_fundraising(osv.osv, crm.crm_case): _name = "crm.fundraising" _description = "Fund Raising Cases" _order = "id desc" - _inherit ='mailgate.thread' + _inherits = {'mailgate.thread': 'thread_id'} _columns = { + 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False), 'id': fields.integer('ID'), - 'name': fields.char('Name', size=128, required=True), + 'name': fields.char('Name', size=128, required=True), + 'active': fields.boolean('Active', required=False), + 'date_action_last': fields.datetime('Last Action', readonly=1), + 'date_action_next': fields.datetime('Next Action', readonly=1), 'description': fields.text('Description'), 'create_date': fields.datetime('Creation Date' , readonly=True), 'write_date': fields.datetime('Update Date' , readonly=True), diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py index 4329ef7d73b..d07d2261013 100644 --- a/addons/crm_helpdesk/crm_helpdesk.py +++ b/addons/crm_helpdesk/crm_helpdesk.py @@ -28,11 +28,15 @@ class crm_helpdesk(osv.osv, crm.crm_case): _name = "crm.helpdesk" _description = "Helpdesk Cases" _order = "id desc" - _inherit = 'mailgate.thread' + _inherits = {'mailgate.thread': 'thread_id'} _columns = { + 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False), 'id': fields.integer('ID', readonly=True), 'name': fields.char('Name', size=128, required=True), + 'active': fields.boolean('Active', required=False), + 'date_action_last': fields.datetime('Last Action', readonly=1), + 'date_action_next': fields.datetime('Next Action', readonly=1), 'description': fields.text('Description'), 'create_date': fields.datetime('Creation Date' , readonly=True), 'write_date': fields.datetime('Update Date' , readonly=True), diff --git a/addons/crm_profiling/i18n/pl.po b/addons/crm_profiling/i18n/pl.po index 5c30fe31019..b032c9d7c32 100644 --- a/addons/crm_profiling/i18n/pl.po +++ b/addons/crm_profiling/i18n/pl.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2008-12-10 00:48+0000\n" -"Last-Translator: Andrzej MoST (Marcin Ostajewski) <Unknown>\n" +"PO-Revision-Date: 2010-05-21 20:20+0000\n" +"Last-Translator: Grzegorz Grzelak (Cirrus.pl) <Unknown>\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: 2010-04-17 04:17+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: crm_profiling @@ -49,7 +49,7 @@ msgstr "" #. module: crm_profiling #: constraint:ir.actions.act_window:0 msgid "Invalid model name in the action definition." -msgstr "" +msgstr "Nieprawidłowa nazwa modelu w definicji akcji." #. module: crm_profiling #: field:crm_profiling.answer,name:0 @@ -70,7 +70,7 @@ msgstr "Opis" #. module: crm_profiling #: field:crm.segmentation,answer_no:0 msgid "Excluded Answers" -msgstr "" +msgstr "Wyłączone odpowiedzi" #. module: crm_profiling #: view:crm_profiling.answer:0 @@ -111,12 +111,12 @@ msgstr "Kwestionariusz" #. module: crm_profiling #: constraint:crm.segmentation:0 msgid "Error ! You can not create recursive profiles." -msgstr "" +msgstr "Błąd ! Nie możesz tworzyć profilów rekurencyjnych." #. module: crm_profiling #: field:crm.segmentation,profiling_active:0 msgid "Use The Profiling Rules" -msgstr "" +msgstr "Stosuj reguły profili" #. module: crm_profiling #: view:crm_profiling.question:0 @@ -127,7 +127,7 @@ msgstr "Dostępne odpowiedzi" #. module: crm_profiling #: field:crm.segmentation,answer_yes:0 msgid "Included Answers" -msgstr "" +msgstr "Włączone odpowiedzi" #. module: crm_profiling #: help:crm.segmentation,profiling_active:0 @@ -147,7 +147,7 @@ msgstr "Pytania" #. module: crm_profiling #: field:crm.segmentation,parent_id:0 msgid "Parent Profile" -msgstr "" +msgstr "Profil nadrzędny" #. module: crm_profiling #: wizard_button:open_questionnaire,init,end:0 @@ -158,12 +158,12 @@ msgstr "Anuluj" #. module: crm_profiling #: view:crm.segmentation:0 msgid "Partner Segmentations" -msgstr "" +msgstr "Segmentacja partnera" #. module: crm_profiling #: model:ir.actions.wizard,name:crm_profiling.wizard_open_questionnaire msgid "Using a questionnaire" -msgstr "Uzywanie kwestionariusza" +msgstr "Używanie kwestionariusza" #. module: crm_profiling #: wizard_button:open_questionnaire,open,compute:0 diff --git a/addons/document_ics/document_demo.xml b/addons/document_ics/document_demo.xml index 06c72022fe7..a0e35563857 100644 --- a/addons/document_ics/document_demo.xml +++ b/addons/document_ics/document_demo.xml @@ -23,32 +23,32 @@ <record model="document.directory.ics.fields" id="dir_field1"> <field name="name">dtstart</field> - <field name="field_id" ref="crm.field_crm_case_create_date"/> + <field name="field_id" ref="crm.field_crm_meeting_create_date"/> <field name="content_id" ref="dir_content_calendar"/> </record> <record model="document.directory.ics.fields" id="dir_field6"> <field name="name">dtend</field> - <field name="field_id" ref="crm.field_crm_case_date_deadline"/> + <field name="field_id" ref="crm.field_crm_meeting_date_deadline"/> <field name="content_id" ref="dir_content_calendar"/> </record> <record model="document.directory.ics.fields" id="dir_field2"> <field name="name">summary</field> - <field name="field_id" ref="crm.field_crm_case_name"/> + <field name="field_id" ref="crm.field_crm_meeting_name"/> <field name="content_id" ref="dir_content_calendar"/> </record> <record model="document.directory.ics.fields" id="dir_field3"> <field name="name">uid</field> - <field name="field_id" ref="field_crm_case_code"/> + <field name="field_id" ref="field_crm_meeting_code"/> <field name="content_id" ref="dir_content_calendar"/> </record> <record model="document.directory.ics.fields" id="dir_field4"> <field name="name">description</field> - <field name="field_id" ref="crm.field_crm_case_description"/> + <field name="field_id" ref="crm.field_crm_meeting_description"/> <field name="content_id" ref="dir_content_calendar"/> </record> <record model="document.directory.ics.fields" id="dir_field5"> <field name="name">url</field> - <field name="field_id" ref="crm.field_crm_case_email_from"/> + <field name="field_id" ref="crm.field_crm_meeting_email_from"/> <field name="content_id" ref="dir_content_calendar"/> </record> diff --git a/addons/document_ics/document_view.xml b/addons/document_ics/document_view.xml index 0cbfb6f81e2..39b6908dc76 100644 --- a/addons/document_ics/document_view.xml +++ b/addons/document_ics/document_view.xml @@ -45,7 +45,7 @@ <field name="type">form</field> <field name="inherit_id" ref="crm.crm_case_form_view_meet"/> <field name="arch" type="xml"> - <field name="priority" position="after"> + <field name="show_as" position="after"> <field name="code"/> </field> </field> diff --git a/addons/document_ics/i18n/fr.po b/addons/document_ics/i18n/fr.po index 829e71f8bb1..79a9107259d 100644 --- a/addons/document_ics/i18n/fr.po +++ b/addons/document_ics/i18n/fr.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-11-09 17:33+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" +"PO-Revision-Date: 2010-05-21 20:29+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 04:18+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: document_ics @@ -37,17 +37,17 @@ msgstr "Erreur ! Vous ne pouvez pas créer de Répertoires récursivement." #. module: document_ics #: field:document.ics.crm.wizard,jobs:0 msgid "Jobs Hiring Process" -msgstr "" +msgstr "Procédure de recrutement" #. module: document_ics #: view:document.ics.crm.wizard:0 msgid "Configure Calendars for CRM Sections" -msgstr "" +msgstr "Configure les calendriers pour les sections de la CRM" #. module: document_ics #: field:document.ics.crm.wizard,helpdesk:0 msgid "Helpdesk" -msgstr "" +msgstr "Support" #. module: document_ics #: field:document.directory.ics.fields,field_id:0 @@ -57,7 +57,7 @@ msgstr "Champ Open ERP" #. module: document_ics #: view:document.ics.crm.wizard:0 msgid "Next" -msgstr "" +msgstr "Suivant" #. module: document_ics #: field:document.directory.ics.fields,content_id:0 @@ -67,7 +67,7 @@ msgstr "Contenu" #. module: document_ics #: field:document.ics.crm.wizard,meeting:0 msgid "Calendar of Meetings" -msgstr "" +msgstr "Calendrier des Rendez Vous" #. module: document_ics #: model:crm.case.section,name:document_ics.section_meeting @@ -82,12 +82,14 @@ msgstr "url" #. module: document_ics #: constraint:ir.actions.act_window:0 msgid "Invalid model name in the action definition." -msgstr "" +msgstr "Nom de modèle invalide pour la définition de l'action" #. module: document_ics #: help:document.ics.crm.wizard,bugs:0 msgid "Used by companies to track bugs and support requests on softwares" msgstr "" +"Utilisé par les sociétés pour suivre des anomalies et des demandes de " +"supports sur les logiciels" #. module: document_ics #: model:ir.actions.todo,note:document_ics.config_wizard_step_case_section_menu @@ -95,6 +97,8 @@ msgid "" "This Configuration step use to create Calendars in document for all Case " "Sections" msgstr "" +"Cette étape de configuration est utilisé pour créer un calendrier dans la " +"GED pour toutes les sections" #. module: document_ics #: selection:document.directory.ics.fields,name:0 @@ -107,6 +111,8 @@ msgid "" "Help you to organise the jobs hiring process: evaluation, meetings, email " "integration..." msgstr "" +"Aide à organiser le processus d'embauche: évaluation, rendez vous, gestion " +"des emails" #. module: document_ics #: selection:document.directory.ics.fields,name:0 @@ -116,28 +122,30 @@ msgstr "description" #. module: document_ics #: model:ir.actions.act_window,name:document_ics.action_view_document_ics_config_directories msgid "Configure Calendars for Sections " -msgstr "" +msgstr "Configurer les Calendriers pour ces Sections " #. module: document_ics #: help:document.ics.crm.wizard,opportunity:0 msgid "Tracks identified business opportunities for your sales pipeline." -msgstr "" +msgstr "Suivi des occasions identifiées d'affaires pour vos canaux de vente." #. module: document_ics #: help:document.ics.crm.wizard,fund:0 msgid "" "This may help associations in their fund raising process and tracking." msgstr "" +"Ceci peut aider les associations dans leur procédure de collecte de fonds et " +"de suivi." #. module: document_ics #: help:document.ics.crm.wizard,helpdesk:0 msgid "Manages an Helpdesk service." -msgstr "" +msgstr "Diriger un service d'assistance" #. module: document_ics #: field:document.ics.crm.wizard,fund:0 msgid "Fund Raising Operations" -msgstr "" +msgstr "Opérations de levée de fonds" #. module: document_ics #: field:document.directory.content,ics_object_id:0 @@ -147,12 +155,12 @@ msgstr "Objet" #. module: document_ics #: constraint:crm.case.section:0 msgid "Error ! You cannot create recursive sections." -msgstr "" +msgstr "Erreur ! Vous ne pouvez pas créer de sections récursives." #. module: document_ics #: model:ir.module.module,shortdesc:document_ics.module_meta_information msgid "Support for iCal based on Document Management System" -msgstr "" +msgstr "Support iCal basé sur la gestion documentaire" #. module: document_ics #: selection:document.directory.ics.fields,name:0 @@ -173,6 +181,7 @@ msgstr "Valeur ICS" #: model:ir.module.module,description:document_ics.module_meta_information msgid "Allows to synchronise calendars with others applications." msgstr "" +"Autorise la syncrhonisation des calendriers avec les autres applications." #. module: document_ics #: constraint:ir.ui.view:0 @@ -189,12 +198,12 @@ msgstr "" #. module: document_ics #: field:document.ics.crm.wizard,name:0 msgid "Name" -msgstr "" +msgstr "Nom" #. module: document_ics #: help:document.ics.crm.wizard,meeting:0 msgid "Manages the calendar of meetings of the users." -msgstr "" +msgstr "Gère le calendrier des rendez-vous des utilisateurs" #. module: document_ics #: field:document.directory.content,ics_domain:0 @@ -207,6 +216,8 @@ msgid "" "Manages the supplier and customers claims, including your corrective or " "preventive actions." msgstr "" +"Gérér les réclamations fournisseurs et clients, incluant vos actions " +"correctives ou préventives." #. module: document_ics #: selection:document.directory.ics.fields,name:0 @@ -221,17 +232,17 @@ msgstr "Correspondance ICS" #. module: document_ics #: view:crm.case:0 msgid "Duration(In Hour)" -msgstr "" +msgstr "Durée (en heure)" #. module: document_ics #: field:document.ics.crm.wizard,document_ics:0 msgid "Shared Calendar" -msgstr "" +msgstr "Calendrier partagé" #. module: document_ics #: field:document.ics.crm.wizard,claims:0 msgid "Claims" -msgstr "" +msgstr "Réclamations" #. module: document_ics #: help:document.ics.crm.wizard,phonecall:0 @@ -239,6 +250,8 @@ msgid "" "Help you to encode the result of a phone call or to planify a list of phone " "calls to process." msgstr "" +"Aide à encoder le résultat d'une conversation téléphonique ou à plannifier " +"une liste" #. module: document_ics #: selection:document.directory.ics.fields,name:0 @@ -248,12 +261,12 @@ msgstr "dtstart" #. module: document_ics #: field:document.ics.crm.wizard,phonecall:0 msgid "Phone Calls" -msgstr "" +msgstr "Appels téléphoniques" #. module: document_ics #: field:document.ics.crm.wizard,bugs:0 msgid "Bug Tracking" -msgstr "" +msgstr "Suivi des Bugs" #. module: document_ics #: selection:document.directory.ics.fields,name:0 @@ -263,12 +276,12 @@ msgstr "catégories" #. module: document_ics #: field:document.ics.crm.wizard,lead:0 msgid "Prospect" -msgstr "" +msgstr "Prospect" #. module: document_ics #: view:document.ics.crm.wizard:0 msgid "Create Pre-Configured Calendars" -msgstr "" +msgstr "Création de calendriers pré-configurer" #. module: document_ics #: selection:document.directory.ics.fields,name:0 @@ -278,7 +291,7 @@ msgstr "créé" #. module: document_ics #: field:crm.case,code:0 msgid "Calendar Code" -msgstr "" +msgstr "Code Calendrier" #. module: document_ics #: selection:document.directory.ics.fields,name:0 @@ -288,7 +301,7 @@ msgstr "résumé" #. module: document_ics #: model:ir.model,name:document_ics.model_document_ics_crm_wizard msgid "document.ics.crm.wizard" -msgstr "" +msgstr "document.ics.crm.wizard" #. module: document_ics #: selection:document.directory.ics.fields,name:0 @@ -308,14 +321,14 @@ msgstr "Correspondance des champs" #. module: document_ics #: view:document.ics.crm.wizard:0 msgid "Cancel" -msgstr "" +msgstr "Annuler" #. module: document_ics #: field:document.ics.crm.wizard,opportunity:0 msgid "Business Opportunities" -msgstr "" +msgstr "Opportunités d'affaire" #. module: document_ics #: selection:document.directory.ics.fields,name:0 msgid "dtstamp" -msgstr "" +msgstr "dtstamp" diff --git a/addons/event/event.py b/addons/event/event.py index 6c214694887..1985cf9cc7d 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -27,23 +27,12 @@ import tools from tools.translate import _ from crm import crm -class crm_case_log(osv.osv): - _inherit = 'crm.case.log' - _description = 'crm.case.log' - def create(self, cr, uid, vals, *args, **kwargs): - if not 'name' in vals: - vals['name']='Historize' - return super(osv.osv,self).create(cr, uid, vals, *args, **kwargs) - _defaults = { - 'user_id': lambda self,cr,uid,context: uid, - } -crm_case_log() class event_type(osv.osv): _name = 'event.type' _description= 'Event type' _columns = { - 'name': fields.char('Event type', size=64, required=True), + 'name': fields.char('Event type', size=64, required=True), } event_type() @@ -54,58 +43,53 @@ class event(osv.osv): _order = 'date_begin' def copy(self, cr, uid, id, default=None, context=None): - return super(event, self).copy(cr, uid,id, default={'code': self.pool.get('ir.sequence').get(cr, uid, 'event.event'),'state':'draft'}) + return super(event, self).copy(cr, uid, id, default={'code': self.pool.get('ir.sequence').get(cr, uid, 'event.event'), 'state': 'draft'}) def button_draft(self, cr, uid, ids, context={}): - return self.write(cr, uid, ids, {'state':'draft'}) + return self.write(cr, uid, ids, {'state': 'draft'}) def button_cancel(self, cr, uid, ids, context={}): - return self.write(cr, uid, ids, {'state':'cancel'}) + return self.write(cr, uid, ids, {'state': 'cancel'}) def button_done(self, cr, uid, ids, context={}): - return self.write(cr, uid, ids, {'state':'done'}) + return self.write(cr, uid, ids, {'state': 'done'}) def button_confirm(self, cr, uid, ids, context={}): for eve in self.browse(cr, uid, ids): if eve.mail_auto_confirm: #send reminder that will confirm the event for all the people that were already confirmed - reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id','=',eve.id),('state','not in',['draft','cancel'])]) + reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id', '=', eve.id), ('state', 'not in', ['draft', 'cancel'])]) if reg_ids: self.pool.get('event.registration').mail_user_confirm(cr, uid, reg_ids) - return self.write(cr, uid, ids, {'state':'confirm'}) + return self.write(cr, uid, ids, {'state': 'confirm'}) def _get_register(self, cr, uid, ids, name, args, context=None): res={} for event in self.browse(cr, uid, ids, context): - query = """select sum(nb_register) from crm_case c left join crm_case_section s on (c.section_id=s.id) right join event_event e on (e.section_id=s.id) right join event_registration r on (r.case_id=c.id) where e.section_id = %s and c.state in ('open','done')""" - cr.execute(query,(event.section_id.id,)) - res2 = cr.fetchone() - if res2 and res2[0]: - res[event.id] = res2[0] - else: - res[event.id] = 0 - return res - - def _get_prospect(self, cr, uid, ids, name, args, context=None): - res={} - for event in self.browse(cr, uid, ids, context): - query = """select sum(nb_register) from crm_case c left join crm_case_section s on (c.section_id=s.id) right join event_event e on (e.section_id=s.id) right join event_registration r on (r.case_id=c.id) where e.section_id = %s and c.state = 'draft'""" - cr.execute(query,(event.section_id.id,)) + res[event.id] = {} + state = 'draft' + if name[0] == 'register_current': + state = 'open' + query = """SELECT sum(r.nb_register) + from event_registration r + where state=%s and event_id=%s""" + + cr.execute(query, (state, event.id, )) res2 = cr.fetchone() if res2 and res2[0]: - res[event.id] = res2[0] + res[event.id][name[0]] = res2[0] else: - res[event.id] = 0 + res[event.id][name[0]] = 0 return res - def write(self, cr, uid, ids,vals, *args, **kwargs): - res = super(event,self).write(cr, uid, ids,vals, *args, **kwargs) + def write(self, cr, uid, ids, vals, *args, **kwargs): + res = super(event, self).write(cr, uid, ids, vals, *args, **kwargs) if 'date_begin' in vals and vals['date_begin']: for eve in self.browse(cr, uid, ids): #change the deadlines of the registration linked to this event - reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id','=',eve.id)]) + reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id', '=', eve.id)]) if reg_ids: - self.pool.get('event.registration').write(cr, uid, reg_ids, {'date_deadline':vals['date_begin']}) + self.pool.get('event.registration').write(cr, uid, reg_ids, {'date_deadline': vals['date_begin']}) #change the description of the registration linked to this event if 'mail_auto_confirm' in vals: @@ -117,36 +101,36 @@ class event(osv.osv): vals['mail_confirm']=False if 'mail_confirm' in vals: for eve in self.browse(cr, uid, ids): - reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id','=',eve.id)]) + reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id', '=', eve.id)]) if reg_ids: - self.pool.get('event.registration').write(cr, uid, reg_ids, {'description':vals['mail_confirm']}) + self.pool.get('event.registration').write(cr, uid, reg_ids, {'description': vals['mail_confirm']}) return res _columns = { - 'type': fields.many2one('event.type', 'Type'), - 'section_id': fields.many2one('crm.case.section', 'Case section', required=True), - 'register_max': fields.integer('Maximum Registrations'), - 'register_min': fields.integer('Minimum Registrations'), - 'register_current': fields.function(_get_register, method=True, string='Confirmed Registrations'), - 'register_prospect': fields.function(_get_prospect, method=True, string='Unconfirmed Registrations'), - 'date_begin': fields.datetime('Beginning date', required=True), - 'date_end': fields.datetime('Ending date', required=True), - 'state': fields.selection([('draft','Draft'),('confirm','Confirmed'),('done','Done'),('cancel','Cancelled')], 'State', readonly=True, required=True, + 'type': fields.many2one('event.type', 'Type'), + 'section_id': fields.many2one('crm.case.section', 'Case section', required=True), + 'register_max': fields.integer('Maximum Registrations'), + 'register_min': fields.integer('Minimum Registrations'), + 'register_current': fields.function(_get_register, method=True, string='Confirmed Registrations', multi='register_current'), + 'register_prospect': fields.function(_get_register, method=True, string='Unconfirmed Registrations', multi='register_prospect'), + 'date_begin': fields.datetime('Beginning date', required=True), + 'date_end': fields.datetime('Ending date', required=True), + 'state': fields.selection([('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, required=True, help='If event is created, the state is \'Draft\'.\n If event is confirmed for the particular dates the state is set to \'Confirmed\'.\ - \nIf the event is over, the state is set to \'Done\'.\n If event is cancelled the state is set to \'Cancelled\'.'), - 'mail_auto_registr':fields.boolean('Mail Auto Register',help='Check this box if you want to use the automatic mailing for new registration'), - 'mail_auto_confirm':fields.boolean('Mail Auto Confirm',help='Check this box if you want ot use the automatic confirmation emailing or the reminder'), - 'mail_registr':fields.text('Registration Email',help='This email will be sent when someone subscribes to the event.'), - 'mail_confirm': fields.text('Confirmation Email', help="This email will be sent when the event gets confimed or when someone subscribes to a confirmed event. This is also the email sent to remind someone about the event."), - 'product_id':fields.many2one('product.product','Product', required=True), + \nIf the event is over, the state is set to \'Done\'.\n If event is cancelled the state is set to \'Cancelled\'.'), + 'mail_auto_registr': fields.boolean('Mail Auto Register', help='Check this box if you want to use the automatic mailing for new registration'), + 'mail_auto_confirm': fields.boolean('Mail Auto Confirm', help='Check this box if you want ot use the automatic confirmation emailing or the reminder'), + 'mail_registr': fields.text('Registration Email', help='This email will be sent when someone subscribes to the event.'), + 'mail_confirm': fields.text('Confirmation Email', help="This email will be sent when the event gets confimed or when someone subscribes to a confirmed event. This is also the email sent to remind someone about the event."), + 'product_id': fields.many2one('product.product', 'Product', required=True), } _defaults = { - 'state': lambda *args: 'draft', - 'code': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'event.event'), - 'user_id': lambda self,cr,uid,ctx: uid, - + 'state': lambda *args: 'draft', + 'code': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'event.event'), + 'user_id': lambda self, cr, uid, ctx: uid, } + event() class event_registration(osv.osv): @@ -156,48 +140,45 @@ class event_registration(osv.osv): current_registration = self.browse(cr, uid, [ids[0]])[0] total_confirmed = current_registration.event_id.register_current + current_registration.nb_register if total_confirmed <= current_registration.event_id.register_max or current_registration.event_id.register_max == 0: - self.write(cr, uid, [ids[0]], {'state':'open'}, context=context) + self.write(cr, uid, [ids[0]], {'state': 'open'}, context=context) self._history(cr, uid, [ids[0]], 'Open', history=True) self.mail_user(cr, uid, [ids[0]]) return True else: - model_data_ids = mod_obj.search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_event_confirm_registration')], context=context) + model_data_ids = mod_obj.search(cr, uid, [('model', '=', 'ir.ui.view'), ('name', '=', 'view_event_confirm_registration')], context=context) resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id'] context.update({'reg_id': ids[0]}) return { - 'name': _('Confirm Registration'), - 'context': context, - 'view_type': 'form', - 'view_mode': 'tree,form', - 'res_model': 'event.confirm.registration', - 'views': [(resource_id,'form')], - 'type': 'ir.actions.act_window', - 'target': 'new', + 'name': _('Confirm Registration'), + 'context': context, + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'event.confirm.registration', + 'views': [(resource_id, 'form')], + 'type': 'ir.actions.act_window', + 'target': 'new', 'nodestroy': True } - def _history(self, cr, uid,ids,keyword, history=False, email=False, context={}): + def _history(self, cr, uid, ids, keyword, history=False, email=False, context={}): for case in self.browse(cr, uid, ids): - if not case.case_id: - return True data = { - 'name': keyword, - 'som': case.som.id, - 'canal_id': case.canal_id.id, - 'user_id': uid, - 'case_id': case.case_id.id + 'name': keyword, + 'som': case.som.id, + 'canal_id': case.canal_id.id, + 'user_id': uid, } - obj = self.pool.get('crm.case.log') - obj.create(cr, uid, data, context) + obj = self.pool.get('mailgate.message') + obj.create(cr, uid, data, context=context) return True def button_reg_close(self, cr, uid, ids, *args): - self.write(cr, uid, ids, {'state':'done',}) + self.write(cr, uid, ids, {'state': 'done', }) self._history(cr, uid, ids, 'Done', history=True) return True def button_reg_cancel(self, cr, uid, ids, *args): - self.write(cr, uid, ids, {'state':'cancel',}) + self.write(cr, uid, ids, {'state': 'cancel', }) self._history(cr, uid, ids, 'Cancel', history=True) return True @@ -207,7 +188,7 @@ class event_registration(osv.osv): args[0]['date_deadline']= event.date_begin args[0]['description']= event.mail_confirm res = super(event_registration, self).create(cr, uid, *args, **argv) - self._history(cr, uid,[res], 'Created', history=True) + self._history(cr, uid, [res], 'Created', history=True) return res def write(self, cr, uid, *args, **argv): @@ -228,7 +209,7 @@ class event_registration(osv.osv): if reg_id.email_cc: dest += [reg_id.email_cc] if dest and src: - tools.email_send(src, dest,'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, openobject_id = str(reg_id.case_id.id)) + tools.email_send(src, dest, 'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, openobject_id = str(reg_id.id)) if not src: raise osv.except_osv(_('Error!'), _('You must define a reply-to address in order to mail the participant. You can do this in the Mailing tab of your event. Note that this is also the place where you can configure your event to not send emails automaticly while registering')) return False @@ -244,49 +225,50 @@ class event_registration(osv.osv): dest += [reg_id.email_cc] if reg_id.event_id.mail_auto_confirm or reg_id.event_id.mail_auto_registr: if dest and src: - if reg_id.event_id.state in ['draft', 'fixed', 'open','confirm','running'] and reg_id.event_id.mail_auto_registr: - tools.email_send(src, dest,'Auto Registration: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_registr, openobject_id = str(reg_id.case_id.id)) - if (reg_id.event_id.state in ['confirm','running']) and reg_id.event_id.mail_auto_confirm: - tools.email_send(src, dest,'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, openobject_id = str(reg_id.case_id.id)) + if reg_id.event_id.state in ['draft', 'fixed', 'open', 'confirm', 'running'] and reg_id.event_id.mail_auto_registr: + tools.email_send(src, dest, 'Auto Registration: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_registr, openobject_id = str(reg_id.id)) + if (reg_id.event_id.state in ['confirm', 'running']) and reg_id.event_id.mail_auto_confirm: + tools.email_send(src, dest, 'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, openobject_id = str(reg_id.id)) if not src: raise osv.except_osv(_('Error!'), _('You must define a reply-to address in order to mail the participant. You can do this in the Mailing tab of your event. Note that this is also the place where you can configure your event to not send emails automaticly while registering')) return False def _create_invoice_lines(self, cr, uid, ids, vals): - return self.pool.get('account.invoice.line').create(cr, uid,vals ) + return self.pool.get('account.invoice.line').create(cr, uid, vals) _name= 'event.registration' _description = 'Event Registration' - _inherits = {'crm.case': 'case_id'} + _inherit = 'crm.meeting' + _columns = { - 'case_id':fields.many2one('crm.case','Case'), - 'nb_register': fields.integer('Number of Registration', readonly=True, states={'draft':[('readonly',False)]}), - 'event_id':fields.many2one('event.event', 'Event Related', required=True), - "partner_invoice_id":fields.many2one('res.partner', 'Partner Invoiced'), - "contact_id":fields.many2one('res.partner.contact', 'Partner Contact'), #TODO: filter only the contacts that have a function into the selected partner_id - "unit_price": fields.float('Unit Price'), - "badge_title":fields.char('Badge Title',size=128), - "badge_name":fields.char('Badge Name',size=128), - "badge_partner":fields.char('Badge Partner',size=128), - "invoice_label":fields.char("Label Invoice",size=128,required=True), - "tobe_invoiced":fields.boolean("To be Invoiced"), - "invoice_id":fields.many2one("account.invoice","Invoice"), - 'date_closed': fields.datetime('Closed', readonly=True), - 'ref' : fields.reference('Reference', selection=crm._links_get, size=128), - 'ref2' : fields.reference('Reference 2', selection=crm._links_get, size=128), - 'categ_id': fields.many2one('crm.case.categ','Category', domain="[('section_id','=',section_id)]"), - 'canal_id': fields.many2one('res.partner.canal', 'Channel',help="The channels represent the different communication modes available with the customer." \ - " With each commercial opportunity, you can indicate the canall which is this opportunity source."), + 'email_cc': fields.text('Watchers Emails', size=252 , help="These \ +people will receive a copy of the future communication between partner \ +and users by email"), + 'nb_register': fields.integer('Number of Registration', readonly=True, states={'draft': [('readonly', False)]}), + 'event_id': fields.many2one('event.event', 'Event Related', required=True), + "partner_invoice_id": fields.many2one('res.partner', 'Partner Invoiced'), + "contact_id": fields.many2one('res.partner.contact', 'Partner Contact'), #TODO: filter only the contacts that have a function into the selected partner_id + "unit_price": fields.float('Unit Price'), + "badge_title": fields.char('Badge Title', size=128), + "badge_name": fields.char('Badge Name', size=128), + "badge_partner": fields.char('Badge Partner', size=128), + "invoice_label": fields.char("Label Invoice", size=128, required=True), + "tobe_invoiced": fields.boolean("To be Invoiced"), + "invoice_id": fields.many2one("account.invoice", "Invoice"), + 'date_closed': fields.datetime('Closed', readonly=True), + 'ref': fields.reference('Reference', selection=crm._links_get, size=128), + 'ref2': fields.reference('Reference 2', selection=crm._links_get, size=128), + 'canal_id': fields.many2one('res.partner.canal', 'Channel', help="The channels represent the different communication modes available with the customer." \ + " With each commercial opportunity, you can indicate the canall which is this opportunity source."), 'som': fields.many2one('res.partner.som', 'State of Mind', help="The minds states allow to define a value scale which represents" \ "the partner mentality in relation to our services.The scale has" \ - "to be created with a factor for each level from 0 (Very dissatisfied) to 10 (Extremely satisfied)."), - + "to be created with a factor for each level from 0 (Very dissatisfied) to 10 (Extremely satisfied)."), } + _defaults = { - 'nb_register': lambda *a: 1, - 'tobe_invoiced' : lambda *a: True, - 'name': lambda *a: 'Registration', - 'state': lambda *b: 'draft' + 'nb_register': lambda *a: 1, + 'tobe_invoiced': lambda *a: True, + 'name': lambda *a: 'Registration', } def onchange_badge_name(self, cr, uid, ids, badge_name): @@ -294,7 +276,7 @@ class event_registration(osv.osv): if not badge_name: return data data['name'] = 'Registration: ' + badge_name - return {'value':data} + return {'value': data} def onchange_contact_id(self, cr, uid, ids, contact, partner): data ={} @@ -304,109 +286,76 @@ class event_registration(osv.osv): data['badge_name'] = contact_id.name data['badge_title'] = contact_id.title if partner: - partner_addresses = self.pool.get('res.partner.address').search(cr, uid, [('partner_id','=',partner)]) - job_ids = self.pool.get('res.partner.job').search(cr, uid, [('contact_id','=',contact),('address_id','in',partner_addresses)]) + partner_addresses = self.pool.get('res.partner.address').search(cr, uid, [('partner_id', '=', partner)]) + job_ids = self.pool.get('res.partner.job').search(cr, uid, [('contact_id', '=', contact), ('address_id', 'in', partner_addresses)]) if job_ids: data['email_from'] = self.pool.get('res.partner.job').browse(cr, uid, job_ids[0]).email - d = self.onchange_badge_name(cr, uid, ids,data['badge_name']) + d = self.onchange_badge_name(cr, uid, ids, data['badge_name']) data.update(d['value']) - return {'value':data} + return {'value': data} def onchange_event(self, cr, uid, ids, event_id, partner_invoice_id): context={} if not event_id: - return {'value':{'unit_price' : False ,'invoice_label' : False }} - data_event = self.pool.get('event.event').browse(cr,uid,event_id) + return {'value': {'unit_price': False , 'invoice_label': False }} + data_event = self.pool.get('event.event').browse(cr, uid, event_id) if data_event.product_id: if not partner_invoice_id: - unit_price=self.pool.get('product.product').price_get(cr, uid, [data_event.product_id.id],context=context)[data_event.product_id.id] - return {'value':{'unit_price' : unit_price , 'invoice_label' : data_event.product_id.name}} - data_partner = self.pool.get('res.partner').browse(cr,uid,partner_invoice_id) - context.update({'partner_id':data_partner}) - unit_price = self.pool.get('product.product')._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist':data_partner.property_product_pricelist.id})[data_event.product_id.id] - return {'value':{'unit_price' :unit_price , 'invoice_label' : data_event.product_id.name}} - return {'value':{'unit_price' : False,'invoice_label' : False}} + unit_price=self.pool.get('product.product').price_get(cr, uid, [data_event.product_id.id], context=context)[data_event.product_id.id] + return {'value': {'unit_price': unit_price , 'invoice_label': data_event.product_id.name}} + data_partner = self.pool.get('res.partner').browse(cr, uid, partner_invoice_id) + context.update({'partner_id': data_partner}) + unit_price = self.pool.get('product.product')._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': data_partner.property_product_pricelist.id})[data_event.product_id.id] + return {'value': {'unit_price': unit_price , 'invoice_label': data_event.product_id.name}} + return {'value': {'unit_price': False, 'invoice_label': False}} def onchange_partner_id(self, cr, uid, ids, part, event_id, email=False): data={} data['badge_partner'] = data['contact_id'] = data['partner_invoice_id'] = data['email_from'] = data['badge_title'] = data['badge_name'] = False if not part: - return {'value':data} + return {'value': data} data['partner_invoice_id']=part # this calls onchange_partner_invoice_id - d = self.onchange_partner_invoice_id(cr, uid, ids, event_id,part) + d = self.onchange_partner_invoice_id(cr, uid, ids, event_id, part) # this updates the dictionary data.update(d['value']) addr = self.pool.get('res.partner').address_get(cr, uid, [part]) if addr: if addr.has_key('default'): - job_ids = self.pool.get('res.partner.job').search(cr, uid, [('address_id','=',addr['default'])]) + job_ids = self.pool.get('res.partner.job').search(cr, uid, [('address_id', '=', addr['default'])]) if job_ids: data['contact_id'] = self.pool.get('res.partner.job').browse(cr, uid, job_ids[0]).contact_id.id - d = self.onchange_contact_id(cr, uid, ids, data['contact_id'],part) + d = self.onchange_contact_id(cr, uid, ids, data['contact_id'], part) data.update(d['value']) partner_data = self.pool.get('res.partner').browse(cr, uid, part) data['badge_partner'] = partner_data.name - return {'value':data} + return {'value': data} def onchange_partner_invoice_id(self, cr, uid, ids, event_id, partner_invoice_id): data={} context={} data['unit_price']=False if not event_id: - return {'value':data} - data_event = self.pool.get('event.event').browse(cr,uid,event_id) + return {'value': data} + data_event = self.pool.get('event.event').browse(cr, uid, event_id) if data_event.product_id: if not partner_invoice_id: - data['unit_price']=self.pool.get('product.product').price_get(cr, uid, [data_event.product_id.id],context=context)[data_event.product_id.id] - return {'value':data} - data_partner = self.pool.get('res.partner').browse(cr,uid,partner_invoice_id) - context.update({'partner_id':data_partner}) - data['unit_price'] = self.pool.get('product.product')._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist':data_partner.property_product_pricelist.id})[data_event.product_id.id] - return {'value':data} - return {'value':data} + data['unit_price']=self.pool.get('product.product').price_get(cr, uid, [data_event.product_id.id], context=context)[data_event.product_id.id] + return {'value': data} + data_partner = self.pool.get('res.partner').browse(cr, uid, partner_invoice_id) + context.update({'partner_id': data_partner}) + data['unit_price'] = self.pool.get('product.product')._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': data_partner.property_product_pricelist.id})[data_event.product_id.id] + return {'value': data} + return {'value': data} def onchange_categ_id(self, cr, uid, ids, categ, context={}): if not categ: - return {'value':{}} + return {'value': {}} cat = self.pool.get('crm.case.categ').browse(cr, uid, categ, context).probability - return {'value':{'probability':cat}} - - def _map_ids(self,method,cr, uid, ids, *args, **argv): - case_data = self.browse(cr,uid,ids) - new_ids=[] - for case in case_data: - if case.case_id: - new_ids.append(case.case_id.id) - return getattr(self.pool.get('crm.case'),method)(cr, uid, new_ids, *args, **argv) - - - def case_close(self,cr, uid, ids, *args, **argv): - return self._map_ids('case_close',cr,uid,ids,*args,**argv) - def case_escalate(self,cr, uid, ids, *args, **argv): - return self._map_ids('case_escalate',cr,uid,ids,*args,**argv) - def case_open(self,cr, uid, ids, *args, **argv): - return self._map_ids('case_open',cr,uid,ids,*args,**argv) - def case_cancel(self,cr, uid, ids, *args, **argv): - return self._map_ids('case_cancel',cr,uid,ids,*args,**argv) - def case_pending(self,cr, uid, ids, *args, **argv): - return self._map_ids('case_pending',cr,uid,ids,*args,**argv) - def case_reset(self,cr, uid, ids, *args, **argv): - return self._map_ids('case_reset',cr,uid,ids,*args,**argv) - def case_log(self,cr, uid, ids, *args, **argv): - return self._map_ids('case_log',cr,uid,ids,*args,**argv) - def case_log_reply(self,cr, uid, ids, *args, **argv): - return self._map_ids('case_log_reply',cr,uid,ids,*args,**argv) - def add_reply(self,cr, uid, ids, *args, **argv): - return self._map_ids('add_reply',cr,uid,ids,*args,**argv) - def remind_partner(self,cr, uid, ids, *args, **argv): - return self._map_ids('remind_partner',cr,uid,ids,*args,**argv) - def remind_user(self,cr, uid, ids, *args, **argv): - return self._map_ids('remind_user',cr,uid,ids,*args,**argv) - + return {'value': {'probability': cat}} event_registration() @@ -417,12 +366,12 @@ class report_event_registration(osv.osv): _description = "Events on registrations" _auto = False _columns = { - 'name': fields.char('Event',size=20), - 'date_begin': fields.datetime('Beginning date', required=True), - 'date_end': fields.datetime('Ending date', required=True), - 'draft_state': fields.integer('Draft Registration',size=20), - 'confirm_state': fields.integer('Confirm Registration',size=20), - 'register_max': fields.integer('Maximum Registrations'), + 'name': fields.char('Event', size=20), + 'date_begin': fields.datetime('Beginning date', required=True), + 'date_end': fields.datetime('Ending date', required=True), + 'draft_state': fields.integer('Draft Registration', size=20), + 'confirm_state': fields.integer('Confirm Registration', size=20), + 'register_max': fields.integer('Maximum Registrations'), } def init(self, cr): cr.execute(""" @@ -432,8 +381,8 @@ class report_event_registration(osv.osv): c.name as name, e.date_begin as date_begin, e.date_end as date_end, - (SELECT sum(nb_register) FROM event_registration x , crm_case c WHERE x.case_id=c.id and c.section_id=e.section_id and state in ('draft')) as draft_state, - (SELECT sum(nb_register) FROM event_registration x , crm_case c WHERE x.case_id=c.id and c.section_id=e.section_id and state in ('open')) as confirm_state, + (SELECT sum(c.nb_register) FROM event_registration c WHERE c.section_id=e.section_id and state in ('draft')) as draft_state, + (SELECT sum(c.nb_register) FROM event_registration c WHERE c.section_id=e.section_id and state in ('open')) as confirm_state, e.register_max as register_max from event_event e,crm_case_section c @@ -448,19 +397,21 @@ class report_event_type_registration(osv.osv): _description = "Event type on registration" _auto = False _columns = { - 'name': fields.char('Event Type',size=20), - 'nbevent':fields.integer('Number Of Events'), - 'draft_state': fields.integer('Draft Registrations',size=20), - 'confirm_state': fields.integer('Confirm Registrations',size=20), + 'name': fields.char('Event Type', size=20), + 'nbevent': fields.integer('Number Of Events'), + 'draft_state': fields.integer('Draft Registrations', size=20), + 'confirm_state': fields.integer('Confirm Registrations', size=20), } + + def init(self, cr): cr.execute(""" create or replace view report_event_type_registration as ( select count(t.id) as id, t.name as name, - (select sum(nb_register) from event_registration r , crm_case c , event_event e where c.section_id=e.section_id and r.case_id=c.id and c.state='draft' and e.type=t.id ) as draft_state , - (select sum(nb_register) from event_registration r , crm_case c , event_event e where c.section_id=e.section_id and r.case_id=c.id and c.state='open' and e.type=t.id ) as confirm_state, + (select sum(c.nb_register) from event_registration c, event_event e where c.section_id=e.section_id and c.state='draft' and e.type=t.id ) as draft_state , + (select sum(c.nb_register) from event_registration c, event_event e where c.section_id=e.section_id and c.state='open' and e.type=t.id ) as confirm_state, count(t.id) as nbevent from event_event e diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index cb13b0662a8..86cf6c213f8 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -33,8 +33,8 @@ <field name="res_model">event.type</field> <field name="view_type">form</field> </record> - <menuitem name="Configuration" id="menu_event_config" parent="menu_marketing_event_main" sequence="30"/> - <menuitem name="Types of Events" id="menu_event_type" action="action_event_type" parent="menu_event_config"/> + <menuitem name="Configuration" id="menu_event_config" parent="menu_marketing_event_main" sequence="30" groups="base.group_extended"/> + <menuitem name="Types of Events" id="menu_event_type" action="action_event_type" parent="menu_event_config" groups="base.group_extended,crm.group_crm_manager"/> <!-- The base section for all events --> @@ -221,23 +221,26 @@ <field name="ref2" colspan="4"/> </page> <page string="History"> - <field name="history_line" colspan="4" nolabel="1" mode="tree,form"> - <form string="Communication history"> - <field name="date"/> - <field name="som"/> - <newline/> - <field name="canal_id"/> - <field name="email"/> - <newline/> - <field name="description" colspan="4"/> - </form> - <tree string="Communication history"> - <field name="date"/> - <field name="description"/> - <field name="som"/> - <field name="user_id"/> - <field name="canal_id"/> - </tree> + <field name="message_ids" colspan="4" nolabel="1" mode="tree,form"> + <form string="Communication history"> + <group col="6" colspan="4"> + <field name="date"/> + <field name="email_to"/> + <field name="email_from"/> + </group> + <newline/> + <field name="description" colspan="4" nolabel="1"/> + <button colspan="4" + string="Reply to Last Email" + name="%(crm.action_crm_send_mail)d" + context="{'mail':'reply', 'model': 'crm.lead'}" + icon="gtk-undo" type="action" /> + </form> + <tree string="Communication history"> + <field name="description"/> + <field name="email_to"/> + <field name="date"/> + </tree> </field> <field name="log_ids" nolabel="1" colspan="4" mode="tree,form" readonly="1"> <tree string="Actions"> diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml index db731e1ccd3..e80f0eeae0c 100644 --- a/addons/event/security/event_security.xml +++ b/addons/event/security/event_security.xml @@ -2,11 +2,11 @@ <openerp> <data> <record id="menu_event_config" model="ir.ui.menu"> - <field name="groups_id" eval="[(6,0,[ref('crm.group_crm_manager')])]"/> + <field name="groups_id" eval="[(6,0,[ref('crm.group_crm_manager'), ref('base.group_extended')])]"/> </record> <record id="menu_report_event" model="ir.ui.menu"> - <field name="groups_id" eval="[(6,0,[ref('crm.group_crm_manager')])]"/> + <field name="groups_id" eval="[(6,0,[ref('crm.group_crm_manager'), ref('base.group_extended')])]"/> </record> </data> </openerp> diff --git a/addons/event/wizard/event_confirm_registration.py b/addons/event/wizard/event_confirm_registration.py index f8a9d02de7d..0e64c0abe53 100644 --- a/addons/event/wizard/event_confirm_registration.py +++ b/addons/event/wizard/event_confirm_registration.py @@ -27,21 +27,23 @@ class event_confirm_registration(osv.osv_memory): """ _name = "event.confirm.registration" _description = "Event Registraion" + _columns = { - 'msg': fields.text('Message', readonly=True), + 'msg': fields.text('Message', readonly=True), } _defaults={ - 'msg':lambda *a:'The event limit is reached. What do you want to do?' + 'msg':lambda *a:'The event limit is reached. What do you want to do?' } def confirm(self, cr, uid, ids, context): registration_obj = self.pool.get('event.registration') reg_id = context.get('reg_id', False) or context.get('active_id', False) if reg_id: - registration_obj.write(cr, uid, [reg_id], {'state':'open',}) + registration_obj.write(cr, uid, [reg_id], {'state':'open', }) registration_obj._history(cr, uid, [reg_id], 'Open', history=True) - registration_obj.mail_user(cr,uid,[reg_id]) + registration_obj.mail_user(cr, uid, [reg_id]) return {} event_confirm_registration() -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/event/wizard/event_registration.py b/addons/event/wizard/event_registration.py index d8087b7a569..4803d118610 100644 --- a/addons/event/wizard/event_registration.py +++ b/addons/event/wizard/event_registration.py @@ -36,10 +36,8 @@ class event_registration_list(osv.osv_memory): 'type': 'ir.actions.act_window' } - cr.execute('SELECT section_id FROM event_event WHERE id = %s', (context['active_id'],)) - res = cr.fetchone() return { - 'domain': [('section_id', '=', res[0])], + 'domain': [('section_id', '=', context['active_id'])], 'name': 'Event Registrations', 'view_type': 'form', 'view_mode': 'tree,form', diff --git a/addons/event_project/i18n/fr.po b/addons/event_project/i18n/fr.po index 356357e877b..1e87919bf74 100644 --- a/addons/event_project/i18n/fr.po +++ b/addons/event_project/i18n/fr.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-09-08 16:09+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" +"PO-Revision-Date: 2010-05-21 21:05+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 04:18+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: event_project @@ -24,7 +24,7 @@ msgstr "XML non valide pour l'architecture de la vue" #. module: event_project #: model:ir.actions.wizard,name:event_project.wizard_event_task msgid "Tasks" -msgstr "" +msgstr "Tâches" #. module: event_project #: wizard_button:event.project,init,done:0 @@ -39,6 +39,10 @@ msgid "" " This module allow you to create retro planning for managing your " "events.\n" msgstr "" +"Organisation et gestion des évènements.\n" +"\n" +" Ce module vous autorise à créer un rétro-planning pour gérer vos " +"évènements.\n" #. module: event_project #: view:event.event:0 @@ -48,7 +52,7 @@ msgstr "Tâches Restantes" #. module: event_project #: model:ir.module.module,shortdesc:event_project.module_meta_information msgid "Event - Project" -msgstr "" +msgstr "Évènement - Projet" #. module: event_project #: field:event.event,project_id:0 diff --git a/addons/hr/i18n/pl.po b/addons/hr/i18n/pl.po index 11884c53d2f..35ec30cc260 100644 --- a/addons/hr/i18n/pl.po +++ b/addons/hr/i18n/pl.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2010-05-12 20:04+0000\n" +"PO-Revision-Date: 2010-05-21 19:41+0000\n" "Last-Translator: Grzegorz Grzelak (Cirrus.pl) <Unknown>\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: 2010-05-13 04:36+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: hr @@ -42,7 +42,7 @@ msgstr "" #: model:ir.module.module,shortdesc:hr.module_meta_information #: model:ir.ui.menu,name:hr.menu_hr_root msgid "Human Resources" -msgstr "Zasoby ludzkie" +msgstr "Zasoby kadrowe" #. module: hr #: selection:hr.timesheet,dayofweek:0 @@ -263,7 +263,7 @@ msgstr "" #. module: hr #: field:hr.employee,user_id:0 msgid "Related User" -msgstr "" +msgstr "Powiązany użytkownik" #. module: hr #: field:hr.employee,category_id:0 diff --git a/addons/hr_expense/report/hr_expense_report.py b/addons/hr_expense/report/hr_expense_report.py index cc3f282e9fa..2b0f6b4addf 100644 --- a/addons/hr_expense/report/hr_expense_report.py +++ b/addons/hr_expense/report/hr_expense_report.py @@ -45,9 +45,13 @@ class hr_expense_report(osv.osv): 'department_id':fields.many2one('hr.department','Department',readonly=True), 'company_id':fields.many2one('res.company', 'Company', readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True), + 'currency_id': fields.many2one('res.currency', 'Currency', readonly=True), 'price_total':fields.float('Total Price', readonly=True), + 'analytic_account': fields.many2one('account.analytic.account','Analytic account',readonly=True), 'price_average':fields.float('Average Price', readonly=True), 'nbr':fields.integer('# of Lines', readonly=True), + 'no_of_products':fields.integer('# of Products', readonly=True), + 'no_of_account':fields.integer('# of Accounts', readonly=True), 'state': fields.selection([ ('draft', 'Draft'), ('confirm', 'Waiting confirmation'), @@ -67,6 +71,7 @@ class hr_expense_report(osv.osv): date_trunc('day',s.create_date) as date, s.employee_id, s.journal_id, + s.currency_id, to_date(to_char(s.date_confirm, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_confirm, to_date(to_char(s.date_valid, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_valid, s.invoice_id, @@ -75,27 +80,33 @@ class hr_expense_report(osv.osv): to_char(date_trunc('day',s.create_date), 'MM') as month, to_char(date_trunc('day',s.create_date), 'YYYY-MM-DD') as day, l.product_id as product_id, + l.analytic_account as analytic_account, sum(l.unit_quantity * u.factor) as product_qty, s.user_id as user_id, s.company_id as company_id, sum(l.unit_quantity*l.unit_amount) as price_total, (sum(l.unit_quantity*l.unit_amount)/sum(l.unit_quantity * u.factor))::decimal(16,2) as price_average, count(*) as nbr, + (select unit_quantity from hr_expense_line where id=l.id and product_id is not null) as no_of_products, + (select count(analytic_account) from hr_expense_line where id=l.id and analytic_account is not null) as no_of_account, s.state - from - hr_expense_line l - left join - hr_expense_expense s on (s.id=l.expense_id) - left join product_uom u on (u.id=l.uom_id) + from hr_expense_line l + left join hr_expense_expense s on (s.id=l.expense_id) + left join product_uom u on (u.id=l.uom_id) group by date_trunc('day',s.create_date), + to_char(date_trunc('day',s.create_date), 'YYYY'), + to_char(date_trunc('day',s.create_date), 'MM'), to_char(date_trunc('day',s.create_date), 'YYYY-MM-DD'), to_date(to_char(s.date_confirm, 'dd-MM-YYYY'),'dd-MM-YYYY'), to_date(to_char(s.date_valid, 'dd-MM-YYYY'),'dd-MM-YYYY'), l.product_id, + l.analytic_account, s.invoice_id, + s.currency_id, s.department_id, l.uom_id, + l.id, s.user_id, s.state, s.journal_id, diff --git a/addons/hr_expense/report/hr_expense_report_view.xml b/addons/hr_expense/report/hr_expense_report_view.xml index c376df3e4d7..fe2ae3d51c2 100644 --- a/addons/hr_expense/report/hr_expense_report_view.xml +++ b/addons/hr_expense/report/hr_expense_report_view.xml @@ -14,12 +14,16 @@ <field name="month" invisible="1"/> <field name="day" invisible="1"/> <field name="invoice_id" invisible="1"/> + <field name="analytic_account" invisible="1"/> <field name="department_id" invisible="1"/> <field name="company_id" invisible="1"/> <field name="journal_id" invisible="1"/> + <field name="currency_id" invisible="1"/> <field name="product_id" invisible="1"/> <field name="product_qty" invisible="1"/> <field name="nbr" sum="# of Lines"/> + <field name="no_of_products" sum="# of Products"/> + <field name="no_of_account" sum="# of Accounts"/> <field name="price_average" avg="Average Price"/> <field name="price_total" sum="Total Price"/> <field name="state" invisible="1"/> @@ -47,7 +51,7 @@ <field name="arch" type="xml"> <search string="Expenses"> <group> - <filter icon="terp-hr" string="This Year" + <filter icon="terp-hr" string="Last 365 Days" domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" help="Expenses during last 7 year"/> <filter icon="terp-hr" string="This Month" @@ -83,6 +87,8 @@ help="Expenses Non Assigned User" domain="[('user_id','=',False)]"/> </field> + <field name="product_id"/> + <field name="employee_id" widget="selection"/> </group> <newline/> <group expand="0" string="Extended options..." colspan="10" col="12"> @@ -99,13 +105,11 @@ domain="[('state','=','cancelled')]" help = "Cancelled Expenses"/> <separator orientation="vertical"/> - <field name="employee_id" widget="selection"/> - <field name="product_id" widget="selection"/> <field name="department_id" widget="selection"/> - <newline/> <field name="journal_id" widget="selection"/> + <field name="currency_id" widget="selection"/> <field name="company_id" groups="base.group_multi_company" widget="selection"/> - <separator orientation="vertical"/> + <newline/> <field name="date_confirm"/> <field name="date_valid"/> </group> @@ -115,13 +119,16 @@ <filter string="Employee" icon="terp-hr" context="{'group_by':'employee_id'}"/> <filter string="Company" icon="terp-hr" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <separator orientation="vertical"/> + <filter string="Analytic account" icon="terp-hr" context="{'group_by':'analytic_account'}"/> + <filter string="Currency" icon="terp-hr" context="{'group_by':'currency_id'}"/> <filter string="Department" icon="terp-hr" context="{'group_by':'department_id'}"/> + <separator orientation="vertical"/> <filter string="Product" icon="terp-hr" context="{'group_by':'product_id'}"/> <filter string="State" icon="terp-hr" context="{'group_by':'state'}"/> <filter string="Force Journal" icon="terp-hr" context="{'group_by':'journal_id'}"/> <separator orientation="vertical"/> <filter string="Day" icon="terp-hr" context="{'group_by':'day'}"/> - <filter string="Month" icon="terp-hr" context="{'group_by':'date'}"/> + <filter string="Month" icon="terp-hr" context="{'group_by':'month'}"/> <filter string="Year" icon="terp-hr" context="{'group_by':'year'}"/> </group> </search> diff --git a/addons/hr_holidays/report/available_holidays.py b/addons/hr_holidays/report/available_holidays.py index 4a1972f1f7d..5499a914f6c 100644 --- a/addons/hr_holidays/report/available_holidays.py +++ b/addons/hr_holidays/report/available_holidays.py @@ -25,8 +25,9 @@ class available_holidays_report(osv.osv): _name = "available.holidays.report" _auto = False _columns = { - 'date': fields.datetime('Date', readonly=True), + 'date': fields.date('Date', readonly=True), 'year': fields.char('Year', size=4, readonly=True), + 'day': fields.char('Day', size=15, 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), @@ -35,6 +36,7 @@ class available_holidays_report(osv.osv): 'max_leave': fields.float('Allocated Leaves', readonly=True), 'taken_leaves': fields.float('Taken Leaves', readonly=True), 'remaining_leave': fields.float('Remaining Leaves',readonly=True), + 'department_id':fields.many2one('hr.department','Department',readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True), } def init(self, cr): @@ -46,8 +48,10 @@ class available_holidays_report(osv.osv): date_trunc('day',h.create_date) as date, to_char(s.create_date, 'YYYY') as year, to_char(s.create_date, 'MM') as month, + to_char(s.create_date, 'YYYY-MM-DD') as day, h.employee_id as employee_id, h.user_id as user_id, + h.department_id, h.state as state, h.holiday_status_id as holiday_status_id, sum(number_of_days) as remaining_leave, @@ -68,7 +72,8 @@ class available_holidays_report(osv.osv): and s.active <> 'f' group by h.holiday_status_id, h.employee_id, date_trunc('day',h.create_date),to_char(s.create_date, 'YYYY'), - to_char(s.create_date, 'MM'),h.user_id,h.state + to_char(s.create_date, 'MM'),to_char(s.create_date, 'YYYY-MM-DD'),h.user_id, + h.state,h.department_id )""") available_holidays_report() diff --git a/addons/hr_holidays/report/available_holidays_view.xml b/addons/hr_holidays/report/available_holidays_view.xml index 18ea7d58d45..3652762c715 100644 --- a/addons/hr_holidays/report/available_holidays_view.xml +++ b/addons/hr_holidays/report/available_holidays_view.xml @@ -10,40 +10,32 @@ <field name="type">tree</field> <field name="arch" type="xml"> <tree string="Available Holidays"> - <field name="employee_id"/> - <field name="holiday_status_id"/> - <field name="max_leave"/> - <field name="taken_leaves"/> + <field name="employee_id" invisible="1"/> + <field name="holiday_status_id" invisible="1"/> + <field name="department_id" invisible="1"/> + <field name="max_leave" sum="Allocated Leaves"/> + <field name="taken_leaves" sum="Taken Leaves"/> <field name="user_id" invisible="1"/> - <field name="remaining_leave"/> + <field name="remaining_leave" sum="Remaining Leaves"/> <field name="year" invisible="1"/> + <field name="day" invisible="1"/> <field name="month" invisible="1"/> <field name="date" invisible="1"/> </tree> </field> </record> - <record id="view_hr_available_holidays_report_form" model="ir.ui.view"> - <field name="name">available.holidays.report.form</field> - <field name="model">available.holidays.report</field> - <field name="type">form</field> - <field name="arch" type="xml"> - <tree string="Available Holidays"> - <field name="employee_id" select="1"/> - <field name="holiday_status_id" select="1"/> - <field name="remaining_leave"/> - </tree> - </field> - </record> <record id="view_hr_available_holidays_report_graph" model="ir.ui.view"> <field name="name">available.holidays.report.graph</field> <field name="model">available.holidays.report</field> <field name="type">graph</field> <field name="arch" type="xml"> <graph orientation="horizontal" string="Available Holidays" type="bar"> - <field name="holiday_status_id"/> + <field name="employee_id"/> + <field name="max_leave" operator="+"/> + <field name="taken_leaves" operator="+"/> <field name="remaining_leave" operator="+"/> - <field group="True" name="employee_id"/> + <field group="True" name="holiday_status_id"/> </graph> </field> </record> @@ -55,32 +47,42 @@ <field name="arch" type="xml"> <search string="Leaves"> <group> - <filter icon="terp-hr" - string="This Year" - domain="[('year','=',time.strftime('%%Y'))]" - help="Leaves of the year"/> - <filter icon="terp-hr" - string="This Month" - domain="[('month','=',time.strftime('%%m'))]" - help="Leaves of this month"/> + <filter icon="terp-hr" string="This Year" + domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" + help="Leaves in this year"/> + <filter icon="terp-hr" string="This Month" + name="month" + domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]" + help="Leaves in this month"/> + <filter icon="gtk-media-rewind" + string=" 7 Days " + separator="1" + domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" + help="Leaves during last 7 days"/> <separator orientation="vertical"/> - <field name="employee_id"/> + <field name="employee_id"/> <field name="user_id" widget="selection"> - <filter icon="terp-sale" - string="My Leaves" - default="1" - domain="[('user_id','=',uid)]"/> + <filter icon="terp-hr" + string="My Leaves" + domain="[('user_id','=',uid)]"/> </field> + </group> + <newline/> + <group expand="0" string="Extended options..." colspan="10" col="12"> + <field name="holiday_status_id" widget="selection"/> + <field name="department_id" widget="selection"/> </group> <newline/> <group expand="1" string="Group By..." colspan="10" col="12"> <filter string="Employee" icon="terp-hr" context="{'group_by':'employee_id'}"/> + <filter string="User" name="User" icon="terp-hr" context="{'group_by':'user_id'}"/> <separator orientation="vertical"/> - <filter string="User" icon="terp-hr" context="{'group_by':'user_id'}"/> <filter string="Type" icon="terp-hr" context="{'group_by':'holiday_status_id'}"/> + <filter string="Department" icon="terp-hr" context="{'group_by':'department_id'}"/> <separator orientation="vertical"/> - <filter string="Month" icon="terp-sale" context="{'group_by':'date'}"/> - <filter string="Year" icon="terp-sale" context="{'group_by':'year'}"/> + <filter string="Day" icon="terp-hr" context="{'group_by':'day'}"/> + <filter string="Month" icon="terp-hr" context="{'group_by':'month'}"/> + <filter string="Year" icon="terp-hr" context="{'group_by':'year'}"/> </group> </search> </field> @@ -93,8 +95,8 @@ <field name="res_model">available.holidays.report</field> <field name="view_type">form</field> <field name="view_mode">tree,graph</field> + <field name="context">{'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}</field> <field name="view_id" ref="view_hr_available_holidays_report_search"/> - </record> <record model="ir.actions.act_window.view" id="action_hr_available_holidays_report_tree"> diff --git a/addons/hr_holidays/report/hr_holidays_report.py b/addons/hr_holidays/report/hr_holidays_report.py index 87f01cfb17c..29127922dac 100644 --- a/addons/hr_holidays/report/hr_holidays_report.py +++ b/addons/hr_holidays/report/hr_holidays_report.py @@ -28,16 +28,19 @@ class hr_holidays_report(osv.osv): _auto = False _rec_name = 'date' _columns = { - 'date': fields.datetime('Date', readonly=True), + 'date': fields.date('Date', readonly=True), 'year': fields.char('Year', size=4, readonly=True), + 'day': fields.char('Day', size=15, 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), - 'date_from' : fields.datetime('Start Date', readonly=True), - 'date_to' : fields.datetime('End Date', readonly=True), - 'number_of_days_temp': fields.float('Number of Days', readonly=True), + 'date_from' : fields.date('Start Date', readonly=True), + 'date_to' : fields.date('End Date', readonly=True), + 'number_of_days_temp': fields.float('#Days', readonly=True), 'employee_id' : fields.many2one('hr.employee', "Employee's Name",readonly=True), 'user_id':fields.many2one('res.users', 'User', readonly=True), + 'holiday_status_id' : fields.many2one("hr.holidays.status", "Leave Type",readonly=True), + 'department_id':fields.many2one('hr.department','Department',readonly=True), 'state': fields.selection([('draft', 'Draft'), ('confirm', 'Waiting Validation'), ('refuse', 'Refused'), @@ -52,14 +55,17 @@ class hr_holidays_report(osv.osv): create or replace view hr_holidays_report as ( select min(s.id) as id, - date_trunc('seconds',s.create_date) as date, + date_trunc('day',s.create_date) as date, date_trunc('day',s.date_from) as date_from, date_trunc('day',s.date_to) as date_to, - s.number_of_days_temp, + sum(s.number_of_days_temp) as number_of_days_temp, s.employee_id, s.user_id as user_id, to_char(s.create_date, 'YYYY') as year, to_char(s.create_date, 'MM') as month, + to_char(s.create_date, 'YYYY-MM-DD') as day, + s.holiday_status_id, + s.department_id, s.state from hr_holidays s @@ -67,7 +73,8 @@ class hr_holidays_report(osv.osv): s.employee_id is not null group by s.create_date,s.state,s.date_from,s.date_to, - s.number_of_days_temp,s.employee_id,s.user_id + s.employee_id,s.user_id,s.holiday_status_id, + s.department_id ) """) hr_holidays_report() diff --git a/addons/hr_holidays/report/hr_holidays_report_view.xml b/addons/hr_holidays/report/hr_holidays_report_view.xml index 4af9bdb8f51..95e975e95f4 100644 --- a/addons/hr_holidays/report/hr_holidays_report_view.xml +++ b/addons/hr_holidays/report/hr_holidays_report_view.xml @@ -1,20 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> -<data> + <data> + <record id="view_hr_holidays_report_tree" model="ir.ui.view"> <field name="name">hr.holidays.report.tree</field> <field name="model">hr.holidays.report</field> <field name="type">tree</field> <field name="arch" type="xml"> <tree string="Leaves Statistics"> - <field name="date"/> - <field name="employee_id"/> - <field name="date_from"/> - <field name="date_to"/> - <field name="number_of_days_temp"/> + <field name="date" invisible="1"/> + <field name="employee_id" invisible="1"/> + <field name="user_id" invisible="1"/> + <field name="date_from" invisible="1"/> + <field name="date_to" invisible="1"/> + <field name="number_of_days_temp" sum="#Days"/> + <field name="holiday_status_id" invisible="1"/> + <field name="department_id" invisible="1"/> <field name="year" invisible="1"/> + <field name="day" invisible="1"/> <field name="month" invisible="1"/> - <field name="state"/> + <field name="state" invisible="1"/> </tree> </field> </record> @@ -27,6 +32,7 @@ <graph string="Leaves Statistics" type="bar"> <field name="employee_id"/> <field name="number_of_days_temp" operator="+"/> + <field name="state" group = "True"/> </graph> </field> </record> @@ -37,45 +43,71 @@ <field name="type">search</field> <field name="arch" type="xml"> <search string="Leaves"> - <filter icon="terp-hr" - string="This Year" - domain="[('year','=',time.strftime('%%Y'))]" - help="Leaves of the year"/> - <filter icon="terp-hr" - string="This Month" - domain="[('month','=',time.strftime('%%m'))]" - help="Leaves of this month"/> - <separator orientation="vertical"/> - <filter icon="terp-hr" - string="Draft" - domain="[('state','=','draft')]"/> - <filter icon="terp-hr" - string="Validate" - domain="[('state','=','validate')]"/> - <filter icon="terp-hr" - string="Start Leaves" - domain="[('date_from','=',time.strftime('%%Y/%%m/%%d'))]"/> - <filter icon="terp-hr" - string="End Leaves" - domain="[('date_to','=',time.strftime('%%Y/%%m/%%d'))]"/> - - <separator orientation="vertical"/> - <field name="employee_id"/> - <field name="user_id" widget="selection"> - <filter icon="terp-sale" - string="My Leaves" - default="1" - domain="[('user_id','=',uid)]"/> - </field> - <field name="date"/> + <group> + <filter icon="terp-hr" string="This Year" + domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" + help="Leaves in this year"/> + <filter icon="terp-hr" string="This Month" + name="month" + domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]" + help="Leaves in this month"/> + <filter icon="gtk-media-rewind" + string=" 7 Days " + separator="1" + domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" + help="Leaves during last 7 days"/> + <separator orientation="vertical"/> + <filter string="Draft" + icon="terp-hr" + domain="[('state','=','draft')]" + help = "Draft Leaves"/> + <filter string="Waiting Validation" + icon="terp-hr" + domain="[('state', '=' ,'confirm')]" + help = "In progress Leaves"/> + <filter string="Validated" + icon="terp-hr" + domain="[('state','=','validate')]" + help = "Pending Leaves"/> + <separator orientation="vertical"/> + <field name="employee_id"/> + <field name="user_id" widget="selection"> + <filter icon="terp-hr" + string="My Leaves" + domain="[('user_id','=',uid)]"/> + </field> + </group> + <newline/> + <group expand="0" string="Extended options..." colspan="10" col="12"> + <filter icon="terp-hr" + string="Refused" + name="done" + domain="[('state','=','refuse')]"/> + <separator orientation="vertical"/> + <field name="date_from"/> + <separator orientation="vertical"/> + <field name="holiday_status_id" widget="selection"/> + <newline/> + <filter icon="terp-hr" + string="Cancelled" + domain="[('state','=','cancel')]"/> + <separator orientation="vertical"/> + <field name="date_to"/> + <separator orientation="vertical"/> + <field name="department_id" widget="selection"/> + </group> <newline/> <group expand="1" string="Group By..." colspan="10" col="12"> - <filter string="Employee" name="employee" icon="terp-hr" context="{'group_by':'employee_id'}"/> + <filter string="Employee" name="Employee" icon="terp-hr" context="{'group_by':'employee_id'}"/> + <filter string="User" name="User" icon="terp-hr" context="{'group_by':'user_id'}"/> <separator orientation="vertical"/> + <filter string="Type" icon="terp-hr" context="{'group_by':'holiday_status_id'}"/> + <filter string="Department" icon="terp-hr" context="{'group_by':'department_id'}"/> <filter string="State" icon="terp-hr" context="{'group_by':'state'}"/> <separator orientation="vertical"/> - <filter string="Month" icon="terp-sale" context="{'group_by':'date'}"/> - <filter string="Year" icon="terp-sale" context="{'group_by':'year'}"/> + <filter string="Day" icon="terp-hr" context="{'group_by':'day'}"/> + <filter string="Month" icon="terp-hr" context="{'group_by':'date'}"/> + <filter string="Year" icon="terp-hr" context="{'group_by':'year'}"/> </group> </search> </field> @@ -86,7 +118,7 @@ <field name="res_model">hr.holidays.report</field> <field name="view_type">form</field> <field name="view_mode">tree,graph</field> - <field name="context">{'search_default_employee': 1}</field> + <field name="context">{'search_default_month':1,'search_default_Employee':1,'group_by_no_leaf':1,'group_by':[]}</field> <field name="search_view_id" ref="view_hr_holidays_report_search"/> </record> @@ -117,5 +149,6 @@ </graph> </field> </record> - </data> + + </data> </openerp> diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index f8372527a6c..f9e1f0f9aa9 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -57,11 +57,13 @@ class hr_applicant(osv.osv, crm.crm_case): _name = "hr.applicant" _description = "Applicant Cases" _order = "id desc" - _inherit ='mailgate.thread' + _inherits = {'mailgate.thread': 'thread_id'} _columns = { - 'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the case without removing it."), - 'description': fields.text('Description'), + 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False), + 'name': fields.char('Name', size=128, required=True), + 'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the case without removing it."), + 'description': fields.text('Description'), 'section_id': fields.many2one('crm.case.section', 'Sales Team', \ select=True, help='Sales team to which Case belongs to.\ Define Responsible user and Email account for mail gateway.'), @@ -103,6 +105,16 @@ class hr_applicant(osv.osv, crm.crm_case): 'survey' : fields.related('job_id', 'survey_id', type='many2one', relation='survey', string='Survey'), 'response' : fields.integer("Response"), } + + _defaults = { + 'active': lambda *a: 1, + 'user_id': crm.crm_case._get_default_user, + 'email_from': crm.crm_case. _get_default_email, + 'state': lambda *a: 'draft', + 'section_id': crm.crm_case. _get_section, + 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c), + 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0], + } def onchange_job(self,cr, uid, ids, job, context={}): result = {} diff --git a/addons/hr_recruitment/report/hr_recruitment_report.py b/addons/hr_recruitment/report/hr_recruitment_report.py index 49c33084412..00d15ef3f21 100644 --- a/addons/hr_recruitment/report/hr_recruitment_report.py +++ b/addons/hr_recruitment/report/hr_recruitment_report.py @@ -105,6 +105,8 @@ class hr_recruitment_report(osv.osv): 'priority': fields.selection(hr_recruitment.AVAILABLE_PRIORITIES, 'Appreciation'), 'salary_prop' : fields.float("Salary Proposed"), 'salary_exp' : fields.float("Salary Expected"), + 'partner_id': fields.many2one('res.partner', 'Partner',readonly=True), + 'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact Name',readonly=True), 'available' : fields.float("Availability") } @@ -121,7 +123,9 @@ class hr_recruitment_report(osv.osv): to_char(s.create_date, 'MM') as month, to_char(s.create_date, 'YYYY-MM-DD') as day, s.state, + s.partner_id, s.company_id, + s.partner_address_id, s.user_id, s.job_id, s.type_id, @@ -140,6 +144,8 @@ class hr_recruitment_report(osv.osv): date_trunc('day',s.create_date), date_trunc('day',s.date_closed), s.state, + s.partner_id, + s.partner_address_id, s.company_id, s.user_id, s.stage_id, diff --git a/addons/hr_recruitment/report/hr_recruitment_report_view.xml b/addons/hr_recruitment/report/hr_recruitment_report_view.xml index 8e0c3f0845a..677fdb7e87d 100644 --- a/addons/hr_recruitment/report/hr_recruitment_report_view.xml +++ b/addons/hr_recruitment/report/hr_recruitment_report_view.xml @@ -10,9 +10,11 @@ <field name="date" invisible="1"/> <field name="user_id" invisible="1"/> <field name="job_id" invisible="1"/> - <field name="stage_id" invisible="1" widget="selection"/> + <field name="stage_id" invisible="1" /> <field name="department_id" invisible="1"/> <field name="type_id" invisible="1"/> + <field name="partner_id" invisible="1"/> + <field name="partner_address_id" invisible="1"/> <field name="company_id" groups="base.group_multi_company"/> <field name="state" invisible="1"/> <field name="year" invisible="1"/> @@ -100,29 +102,36 @@ string="Hired" name="done" domain="[('state','=','done')]"/> - <filter icon="terp-hr" - string="Refused" - domain="[('state','=','cancel')]"/> + <separator orientation="vertical"/> + <field name="date"/> <separator orientation="vertical"/> <field name="priority"/> <field name="stage_id" widget="selection"/> <field name="job_id" widget="selection"/> <newline/> - <field name="type_id" widget="selection"/> - <field name="date"/> + <filter icon="terp-hr" + string="Refused" + domain="[('state','=','cancel')]"/> + <separator orientation="vertical"/> <field name="date_closed"/> + <separator orientation="vertical"/> + <field name="type_id" widget="selection"/> + <field name="partner_id"/> + <field name="partner_address_id"/> </group> <newline/> <group expand="1" string="Group By ..." colspan="10" col="12"> <filter string="User" name='User' icon="terp-hr" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Company" icon="terp-hr" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> - <filter string="Stage" name="Stage" icon="terp-hr" domain="[]" context="{'group_by':'stage_id'}" /> + <filter string="Partner" icon="terp-hr" domain="[]" context="{'group_by':'partner_id'}" /> + <filter string="Stage" icon="terp-hr" domain="[]" context="{'group_by':'stage_id'}" /> <separator orientation="vertical"/> - <filter string="State" icon="terp-hr" domain="[]" context="{'group_by':'state'}"/> - <filter string="Jobs" icon="terp-sale" domain="[]" context="{'group_by':'job_id'}"/> - <filter string="Department" icon="terp-hr" domain="[]" context="{'group_by':'department_id'}"/> - <filter string="Degree" icon="terp-hr" domain="[]" context="{'group_by':'type_id'}"/> + <filter string="Partner Contact Name" icon="terp-hr" domain="[]" context="{'group_by':'partner_address_id'}" /> + <filter string="Jobs" name="job" icon="terp-sale" domain="[]" context="{'group_by':'job_id'}"/> + <filter string="Department" name="department" icon="terp-hr" domain="[]" context="{'group_by':'department_id'}"/> + <filter string="Degree" name="degree" icon="terp-hr" domain="[]" context="{'group_by':'type_id'}"/> <separator orientation="vertical"/> + <filter string="State" icon="terp-hr" domain="[]" context="{'group_by':'state'}"/> <filter string="Day" name = "day" icon="terp-hr" domain="[]" context="{'group_by':'day'}"/> <filter string="Month" icon="terp-hr" domain="[]" context="{'group_by':'month'}"/> <filter string="Year" icon="terp-hr" domain="[]" context="{'group_by':'year'}"/> diff --git a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml index cb6c8d5771c..df54a6c2feb 100644 --- a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml +++ b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml @@ -103,7 +103,7 @@ <field name="context">{'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}</field> <field name="search_view_id" ref="view_timesheet_line_search"/> </record> - <menuitem action="action_timesheet_line_stat_all" id="menu_report_timesheet_line_all" parent="hr.menu_hr_reporting"/> + <!--menuitem action="action_timesheet_line_stat_all" id="menu_report_timesheet_line_all" parent="hr.menu_hr_reporting"/--> <!-- Statistics report on timesheet by user --> diff --git a/addons/hr_timesheet_sheet/report/timesheet_report.py b/addons/hr_timesheet_sheet/report/timesheet_report.py index ee016df56d7..3dd8d161c5f 100644 --- a/addons/hr_timesheet_sheet/report/timesheet_report.py +++ b/addons/hr_timesheet_sheet/report/timesheet_report.py @@ -33,7 +33,11 @@ class timesheet_report(osv.osv): ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True), 'day': fields.char('Day', size=128, readonly=True), 'name': fields.char('Description', size=64,readonly=True), + 'product_id' : fields.many2one('product.product', 'Product'), + 'general_account_id' : fields.many2one('account.account', 'General Account', readonly=True), 'user_id': fields.many2one('res.users', 'User',readonly=True), + 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing',readonly=True), + 'account_id': fields.many2one('account.analytic.account', 'Analytic Account',readonly=True), 'nbr': fields.integer('#Nbr',readonly=True), 'company_id': fields.many2one('res.company', 'Company',readonly=True), 'department_id':fields.many2one('hr.department','Department',readonly=True), @@ -45,9 +49,8 @@ class timesheet_report(osv.osv): ('draft','Draft'), ('confirm','Confirmed'), ('done','Done')], 'State', readonly=True), - 'total_att': fields.float('Total Timesheet',readonly=True), - 'total_ts': fields.float('Total Attendance',readonly=True), - 'total_diff': fields.float('Difference', readonly=True), + 'quantity': fields.float('#Quantity',readonly=True), + 'cost': fields.float('#Cost',readonly=True), } def init(self, cr): @@ -64,10 +67,12 @@ class timesheet_report(osv.osv): to_char(htss.date_current,'MM') as month, to_char(htss.date_current, 'YYYY-MM-DD') as day, count(*) as nbr, - sum(day.total_attendance) as total_att, - sum(day.total_timesheet) as total_ts, - sum(day.total_difference) as total_diff, + sum(aal.unit_amount) as quantity, + sum(aal.amount) as cost, aal.account_id, + aal.product_id, + aal.to_invoice, + aal.general_account_id, htss.user_id, htss.company_id, htss.department_id, @@ -75,7 +80,6 @@ class timesheet_report(osv.osv): from account_analytic_line as aal left join hr_analytic_timesheet as hat ON (hat.line_id=aal.id) left join hr_timesheet_sheet_sheet as htss ON (hat.line_id=htss.id) - left join hr_timesheet_sheet_sheet_day AS day ON (htss.id = day.sheet_id) group by to_char(htss.date_current,'YYYY'), to_char(htss.date_current,'MM'), @@ -84,6 +88,9 @@ class timesheet_report(osv.osv): htss.date_from, htss.date_to, htss.date_current, + aal.to_invoice, + aal.product_id, + aal.general_account_id, htss.name, htss.company_id, htss.state, diff --git a/addons/hr_timesheet_sheet/report/timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml index 976b2a6f8ea..305a27eefd8 100644 --- a/addons/hr_timesheet_sheet/report/timesheet_report_view.xml +++ b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml @@ -7,10 +7,9 @@ <field name="type">graph</field> <field name="arch" type="xml"> <graph string="Timesheet" type="bar"> - <field name="name" /> - <field name="total_att" operator = "+"/> - <field name="total_ts" operator = "+"/> - <field name="user_id" group = "True"/> + <field name="user_id" /> + <field name="quantity" operator = "+"/> + <field name="state" group = "True"/> </graph> </field> </record> @@ -25,12 +24,15 @@ <field name="user_id" invisible="1"/> <field name="date_from" invisible="1"/> <field name="date_to" invisible="1"/> - <field name="total_att" sum="Total Timesheet"/> - <field name="total_diff" sum="Total Attendance"/> - <field name="total_ts" sum="Difference"/> + <field name="quantity" sum="#Quantity"/> + <field name="cost" sum="#Cost"/> <field name="state" invisible="1"/> <field name="department_id" invisible="1"/> <field name="company_id" invisible="1"/> + <field name="to_invoice" invisible="1"/> + <field name="product_id" invisible="1"/> + <field name="account_id" invisible="1"/> + <field name="general_account_id" invisible="1"/> <field name="year" invisible="1"/> <field name="day" invisible="1"/> <field name="month" invisible="1"/> @@ -43,7 +45,7 @@ <field name="type">search</field> <field name="arch" type="xml"> <search string="Timesheet"> - <group col="10" colspan="4"> + <group col="10" colspan="12"> <filter icon="terp-hr" string="This Year" domain="[('date_current','<=', time.strftime('%%Y-%%m-%%d')),('date_current','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" help="Timesheet in this year"/> @@ -63,10 +65,8 @@ <filter icon="terp-hr" string="Confirmed" domain="[('state','=','confirm')]"/> - <filter icon="terp-hr" - string="Done" - domain="[('state','=','done')]"/> <separator orientation="vertical"/> + <field name="product_id"/> <field name="user_id" widget="selection"> <filter icon="terp-hr" string="My timesheet" @@ -80,26 +80,40 @@ <field name="company_id" widget="selection" groups="base.group_multi_company"/> </group> <newline/> - <group expand="0" string="Extended options..." colspan="10" col="12"> - <filter icon="terp-hr" - string="New" - domain="[('state','=','new')]"/> - <separator orientation="vertical"/> - <field name="department_id" widget="selection"/> - <separator orientation="vertical"/> - <field name="date_from"/> - <field name="date_to"/> - </group> + <group expand="0" string="Extended options..." colspan="10" col="12"> + <filter icon="terp-hr" + string="New" + domain="[('state','=','new')]"/> + <separator orientation="vertical"/> + <field name="date_from"/> + <separator orientation="vertical"/> + <field name="account_id"/> + <field name="department_id" widget="selection"/> + <newline/> + <filter icon="terp-hr" + string="Done" + domain="[('state','=','done')]"/> + <separator orientation="vertical"/> + <field name="date_to"/> + <separator orientation="vertical"/> + <field name="general_account_id"/> + <field name="to_invoice" widget="selection"/> + </group> <newline/> <group expand="1" string="Group By..." colspan="10" col="12"> <filter string="User" name="User" icon="terp-hr" context="{'group_by':'user_id'}"/> - <filter string="Company" icon="terp-hr" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> + <filter string="Product" icon="terp-hr" context="{'group_by':'product_id'}"/> <separator orientation="vertical"/> + <filter string="Type of Invoicing" icon="terp-hr" context="{'group_by':'to_invoice'}"/> + <filter string="Analytic Account" icon="terp-hr" context="{'group_by':'account_id'}"/> + <filter string="General Account" icon="terp-hr" context="{'group_by':'general_account_id'}"/> + <separator orientation="vertical"/> + <filter string="Company" icon="terp-hr" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Department" icon="terp-hr" context="{'group_by':'department_id'}"/> <filter string="State" icon="terp-hr" context="{'group_by':'state'}"/> <separator orientation="vertical"/> <filter string="Day" icon="terp-hr" context="{'group_by':'day'}"/> - <filter string="Month" icon="terp-hr" context="{'group_by':'date_current'}"/> + <filter string="Month" icon="terp-hr" context="{'group_by':'month'}"/> <filter string="Year" icon="terp-hr" context="{'group_by':'year'}"/> </group> </search> diff --git a/addons/l10n_be/__openerp__.py b/addons/l10n_be/__openerp__.py index fd5d062ee3a..e5d8e1255a6 100644 --- a/addons/l10n_be/__openerp__.py +++ b/addons/l10n_be/__openerp__.py @@ -45,7 +45,8 @@ 'account_report', 'base_vat', 'base_iban', - 'account_chart' + 'account_chart', + 'account_coda', ], 'init_xml': [], 'update_xml': [ diff --git a/addons/l10n_fr/i18n/fr.po b/addons/l10n_fr/i18n/fr.po index f70b913fd88..1e9727d4785 100644 --- a/addons/l10n_fr/i18n/fr.po +++ b/addons/l10n_fr/i18n/fr.po @@ -7,34 +7,34 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-07-27 16:34+0000\n" -"Last-Translator: Christian Draux - reseaucerta.org <Unknown>\n" +"PO-Revision-Date: 2010-05-21 17:47+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 04:04+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Redevances de crédit-bail immobilier" -msgstr "" +msgstr "Redevances de crédit-bail immobilier" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "période du" -msgstr "" +msgstr "période du" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Autres réserves" -msgstr "" +msgstr "Autres réserves" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "ACTIF IMMOBILISÉ" -msgstr "" +msgstr "ACTIF IMMOBILISÉ" #. module: l10n_fr #: model:ir.actions.todo,note:l10n_fr.config_call_account_template_fr_pcg @@ -58,23 +58,23 @@ msgstr "" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Capital [dont versé...]" -msgstr "" +msgstr "Capital [dont versé...]" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Réserves statutaires ou contractuelles" -msgstr "" +msgstr "Réserves statutaires ou contractuelles" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "nstallations techniques,matériel et outillage" -msgstr "" +msgstr "installations techniques,matériel et outillage" #. module: l10n_fr #: rml:l10n.fr.bilan:0 #: rml:l10n.fr.cdr:0 msgid "TOTAL III" -msgstr "" +msgstr "TOTAL III" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_asset @@ -89,12 +89,12 @@ msgstr "Produits" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Charges sociales" -msgstr "" +msgstr "Charges sociales" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "PRODUITS EXCEPTIONNELS" -msgstr "" +msgstr "PRODUITS EXCEPTIONNELS" #. module: l10n_fr #: wizard_view:l10n.fr.bilan.report,init:0 @@ -104,18 +104,18 @@ msgstr "Sélectionner l'année" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Différences négatives de change" -msgstr "" +msgstr "Différences négatives de change" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Autres charges" -msgstr "" +msgstr "Autres charges" #. module: l10n_fr #: rml:l10n.fr.bilan:0 #: rml:l10n.fr.cdr:0 msgid "Tenue de Compte :" -msgstr "" +msgstr "Tenue de Compte :" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_payable @@ -125,72 +125,72 @@ msgstr "À payer" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "( IV )" -msgstr "" +msgstr "( IV )" #. module: l10n_fr #: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_4 msgid "Hors Euro" -msgstr "" +msgstr "Hors Euro" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Fonds commercial" -msgstr "" +msgstr "Fonds commercial" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "isponibilités" -msgstr "" +msgstr "Disponibilités" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "+ IV+ V+ VI" -msgstr "" +msgstr "+ IV+ V+ VI" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "De participation" -msgstr "" +msgstr "De participation" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "TOTAL IV" -msgstr "" +msgstr "TOTAL IV" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "D" -msgstr "" +msgstr "D" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "PROVISIONS" -msgstr "" +msgstr "PROVISIONS" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "vances et acomptes" -msgstr "" +msgstr "Avances et acomptes" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Autres dettes" -msgstr "" +msgstr "Autres dettes" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "articipations" -msgstr "" +msgstr "Participations" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "atières premières et autres approvisionnements" -msgstr "" +msgstr "Matières premières et autres approvisionnements" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "P" -msgstr "" +msgstr "P" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_stocks @@ -200,17 +200,17 @@ msgstr "Actif circulant" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "T" -msgstr "" +msgstr "T" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Dettes fournisseurs et comptes rattachés" -msgstr "" +msgstr "Dettes fournisseurs et comptes rattachés" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Provisions pour charges" -msgstr "" +msgstr "Provisions pour charges" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_dettes @@ -225,12 +225,12 @@ msgstr "Sélectionner une période" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "RÉSERVES" -msgstr "" +msgstr "RÉSERVES" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "TOTAL GÉNÉRAL (I + II + III + IV)" -msgstr "" +msgstr "TOTAL GÉNÉRAL (I + II + III + IV)" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_tax @@ -240,74 +240,74 @@ msgstr "Taxe" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Dotations aux amortissements, aux dépréciations et aux provisions" -msgstr "" +msgstr "Dotations aux amortissements, aux dépréciations et aux provisions" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Achats de matières premières et autres approvisionnements" -msgstr "" +msgstr "Achats de matières premières et autres approvisionnements" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Avances et acomptes reçus sur commandes en cours" -msgstr "" +msgstr "Avances et acomptes reçus sur commandes en cours" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Quotes-parts de résultat sur opérations faites en commun (II)" -msgstr "" +msgstr "Quotes-parts de résultat sur opérations faites en commun (II)" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "VALEURS MOBILIÈRES DE PLACEMENT" -msgstr "" +msgstr "VALEURS MOBILIÈRES DE PLACEMENT" #. module: l10n_fr #: rml:l10n.fr.bilan:0 #: rml:l10n.fr.cdr:0 msgid "TOTAL I" -msgstr "" +msgstr "TOTAL I" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Autres intérêts et produits assimilés" -msgstr "" +msgstr "Autres intérêts et produits assimilés" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Dettes sur immobilisations et comptes rattachés" -msgstr "" +msgstr "Dettes sur immobilisations et comptes rattachés" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Créances clients et comptes rattachés" -msgstr "" +msgstr "Créances clients et comptes rattachés" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Report à nouveau" -msgstr "" +msgstr "Report à nouveau" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "IMMOBILISATIONS INCORPORELLES" -msgstr "" +msgstr "IMMOBILISATIONS INCORPORELLES" #. module: l10n_fr #: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_1 #: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_5 msgid "France" -msgstr "" +msgstr "France" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "rêts" -msgstr "" +msgstr "Prêts" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Sous-total A - Montant net du chiffre d'affaires" -msgstr "" +msgstr "Sous-total A - Montant net du chiffre d'affaires" #. module: l10n_fr #: wizard_button:l10n.fr.bilan.report,init,report:0 @@ -318,32 +318,32 @@ msgstr "Imprimer" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Amortissements et dépréciations" -msgstr "" +msgstr "Amortissements et dépréciations" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Net" -msgstr "" +msgstr "Net" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "TOTAL I ( A + B )" -msgstr "" +msgstr "TOTAL I ( A + B )" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "itres immobilisés de l'activité de portefeuille" -msgstr "" +msgstr "Titres immobilisés de l'activité de portefeuille" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "( VI )" -msgstr "" +msgstr "( VI )" #. module: l10n_fr #: constraint:account.account.template:0 msgid "Error ! You can not create recursive account templates." -msgstr "" +msgstr "Erreur ! Vous ne pouvez pas créer de modèles de compte récursifs" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_provision @@ -353,7 +353,7 @@ msgstr "Provisions" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Variation des stocks" -msgstr "" +msgstr "Variation des stocks" #. module: l10n_fr #: model:ir.actions.report.xml,name:l10n_fr.l10n_fr_pcg_bilan @@ -365,22 +365,22 @@ msgstr "Bilan" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Emprunts obligataires convertibles" -msgstr "" +msgstr "Emprunts obligataires convertibles" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "TOTAL ACTIF (" -msgstr "" +msgstr "TOTAL ACTIF (" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "CHARGES ( hors taxes )" -msgstr "" +msgstr "CHARGES ( hors taxes )" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Produits nets sur cessions de valeurs mobilières de placement" -msgstr "" +msgstr "Produits nets sur cessions de valeurs mobilières de placement" #. module: l10n_fr #: field:l10n.fr.line,report_id:0 @@ -400,27 +400,27 @@ msgstr "Engagements" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Avances et acomptes" -msgstr "" +msgstr "Avances et acomptes" #. module: l10n_fr #: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_7 msgid "TVA sur les encaissements" -msgstr "" +msgstr "TVA sur les encaissements" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Sous-total B" -msgstr "" +msgstr "Sous-total B" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "C" -msgstr "" +msgstr "C" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "M" -msgstr "" +msgstr "M" #. module: l10n_fr #: model:ir.module.module,description:l10n_fr.module_meta_information @@ -433,17 +433,17 @@ msgstr "" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Concessions, brevets, licences,..., droits et valeurs similaires" -msgstr "" +msgstr "Concessions, brevets, licences,..., droits et valeurs similaires" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Instruments de trésorerie" -msgstr "" +msgstr "Instruments de trésorerie" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Écarts de conversion passif" -msgstr "" +msgstr "Écarts de conversion passif" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_expense @@ -453,37 +453,37 @@ msgstr "Charges" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "ACTIF" -msgstr "" +msgstr "ACTIF" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "DETTES" -msgstr "" +msgstr "DETTES" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Sur immobilisations : dotations aux amortissements" -msgstr "" +msgstr "Sur immobilisations : dotations aux amortissements" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "mmobilisations corporelles en cours" -msgstr "" +msgstr "Immobilisations corporelles en cours" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Autres" -msgstr "" +msgstr "Autres" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Dotation aux amortissements et aux dépréciations" -msgstr "" +msgstr "Dotation aux amortissements et aux dépréciations" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "PRODUITS D'EXPLOITATION" -msgstr "" +msgstr "PRODUITS D'EXPLOITATION" #. module: l10n_fr #: rml:l10n.fr.cdr:0 @@ -491,136 +491,138 @@ msgid "" "Reprises sur provisions, dépréciations (et amortissements) et transferts de " "charges" msgstr "" +"Reprises sur provisions, dépréciations (et amortissements) et transferts de " +"charges" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "PRODUITS - CHARGES" -msgstr "" +msgstr "PRODUITS - CHARGES" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "RÉSULTAT DE L'EXERCICE [bénéfice ou perte]" -msgstr "" +msgstr "RÉSULTAT DE L'EXERCICE [bénéfice ou perte]" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Impôts, taxes et versements assimilés" -msgstr "" +msgstr "Impôts, taxes et versements assimilés" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "roduits intermédiaires et finis" -msgstr "" +msgstr "Produits intermédiaires et finis" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "utres" -msgstr "" +msgstr "Autres" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Avances et acomptes versés sur commandes" -msgstr "" +msgstr "Avances et acomptes versés sur commandes" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "onstructions" -msgstr "" +msgstr "Constructions" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Reprises sur provisions, dépréciations et transferts de charges" -msgstr "" +msgstr "Reprises sur provisions, dépréciations et transferts de charges" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "réances rattachées à des participations" -msgstr "" +msgstr "Créances rattachées à des participations" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Dotations aux provisions" -msgstr "" +msgstr "Dotations aux provisions" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "vous sur votre structure juridique et son fonctionnement comptable." -msgstr "" +msgstr "vous sur votre structure juridique et son fonctionnement comptable." #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Sur opérations en capital" -msgstr "" +msgstr "Sur opérations en capital" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Charges constatés d'avance" -msgstr "" +msgstr "Charges constatés d'avance" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "TOTAL II" -msgstr "" +msgstr "TOTAL II" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "CAPITAUX PROPRES" -msgstr "" +msgstr "CAPITAUX PROPRES" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Frais d'établissement" -msgstr "" +msgstr "Frais d'établissement" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Charges à répartir sur plusieurs exercices" -msgstr "" +msgstr "Charges à répartir sur plusieurs exercices" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Subventions d'exploitation" -msgstr "" +msgstr "Subventions d'exploitation" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Provisions réglementées" -msgstr "" +msgstr "Provisions réglementées" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "PRODUITS (hors taxes)" -msgstr "" +msgstr "PRODUITS (hors taxes)" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Écart d'équivalence" -msgstr "" +msgstr "Écart d'équivalence" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Primes d'émission, de fusion, d'apport" -msgstr "" +msgstr "Primes d'émission, de fusion, d'apport" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "utres titres immobilisés" -msgstr "" +msgstr "Autres titres immobilisés" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Réserves réglementées" -msgstr "" +msgstr "Réserves réglementées" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "CHARGES D'EXPLOITATION" -msgstr "" +msgstr "CHARGES D'EXPLOITATION" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "I + II + III + IV + V" -msgstr "" +msgstr "I + II + III + IV + V" #. module: l10n_fr #: rml:l10n.fr.bilan:0 @@ -629,11 +631,14 @@ msgid "" "120 ou 129 (Résultat de l'exercice précédant) dans un compte de report à " "nouveau (compte 110 ou 119) ou dans le compte 108. Renseignez" msgstr "" +"Attention, pour que votre bilan soit correct, vous devez solder les comptes " +"120 ou 129 (Résultat de l'exercice précédant) dans un compte de report à " +"nouveau (compte 110 ou 119) ou dans le compte 108. Renseignez" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Vente de marchandises" -msgstr "" +msgstr "Vente de marchandises" #. module: l10n_fr #: rml:l10n.fr.cdr:0 @@ -678,7 +683,7 @@ msgstr "" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "apital souscrit - non appelé" -msgstr "" +msgstr "Capital souscrit - non appelé" #. module: l10n_fr #: model:ir.model,name:l10n_fr.model_l10n_fr_report @@ -688,27 +693,27 @@ msgstr "Rapport pour l10n_fr" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Compte de résultat" -msgstr "" +msgstr "Compte de résultat" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "CRÉANCES" -msgstr "" +msgstr "CRÉANCES" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Sur opérations de gestion" -msgstr "" +msgstr "Sur opérations de gestion" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Redevances de crédit-bail mobilier" -msgstr "" +msgstr "Redevances de crédit-bail mobilier" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Primes de remboursement des emprunts" -msgstr "" +msgstr "Primes de remboursement des emprunts" #. module: l10n_fr #: field:l10n.fr.report,code:0 @@ -718,27 +723,27 @@ msgstr "Code" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Autres produits" -msgstr "" +msgstr "Autres produits" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Participation des salariés aux résultats" -msgstr "" +msgstr "Participation des salariés aux résultats" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Subventions d'investissement" -msgstr "" +msgstr "Subventions d'investissement" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "STOCK EN COURS" -msgstr "" +msgstr "STOCK EN COURS" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Autres achats et charges externes" -msgstr "" +msgstr "Autres achats et charges externes" #. module: l10n_fr #: wizard_field:l10n.fr.bilan.report,init,fiscalyear:0 @@ -749,17 +754,17 @@ msgstr "Année fiscale" #. module: l10n_fr #: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_3 msgid "DOM-TOM" -msgstr "" +msgstr "DOM-TOM" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Intérêts et charges assimilées" -msgstr "" +msgstr "Intérêts et charges assimilées" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Immobilisations incorporelles en cours" -msgstr "" +msgstr "Immobilisations incorporelles en cours" #. module: l10n_fr #: wizard_button:l10n.fr.bilan.report,init,end:0 @@ -771,17 +776,17 @@ msgstr "Annuler" #: rml:l10n.fr.bilan:0 #: rml:l10n.fr.cdr:0 msgid "au" -msgstr "" +msgstr "au" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Production immobilisée" -msgstr "" +msgstr "Production immobilisée" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Sur actif circulant : dotations aux dépréciations" -msgstr "" +msgstr "Sur actif circulant : dotations aux dépréciations" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_receivable @@ -791,13 +796,13 @@ msgstr "Recevable" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Capital souscrit - appelé , non versé" -msgstr "" +msgstr "Capital souscrit - appelé , non versé" #. module: l10n_fr #: rml:l10n.fr.bilan:0 #: rml:l10n.fr.cdr:0 msgid "( V )" -msgstr "" +msgstr "( V )" #. module: l10n_fr #: constraint:ir.model:0 @@ -815,17 +820,17 @@ msgstr "Définition" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Différences positives de change" -msgstr "" +msgstr "Différences positives de change" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "errains" -msgstr "" +msgstr "Terrains" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Brut" -msgstr "" +msgstr "Brut" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_immobilisations @@ -835,23 +840,23 @@ msgstr "Immobilisations" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "PASSIF" -msgstr "" +msgstr "PASSIF" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Écarts de réévaluation" -msgstr "" +msgstr "Écarts de réévaluation" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Production stockée" -msgstr "" +msgstr "Production stockée" #. module: l10n_fr #: rml:l10n.fr.bilan:0 #: rml:l10n.fr.cdr:0 msgid "Imprimé le :" -msgstr "" +msgstr "Imprimé le :" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_equity @@ -861,38 +866,38 @@ msgstr "Capitaux propres" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Impôts sur les bénéfices" -msgstr "" +msgstr "Impôts sur les bénéfices" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "TOTAL DES PRODUITS ( I + II + III + IV )" -msgstr "" +msgstr "TOTAL DES PRODUITS ( I + II + III + IV )" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Salaires et traitements" -msgstr "" +msgstr "Salaires et traitements" #. module: l10n_fr #: rml:l10n.fr.bilan:0 #: rml:l10n.fr.cdr:0 msgid ")" -msgstr "" +msgstr ")" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Provisions pour risques" -msgstr "" +msgstr "Provisions pour risques" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "n-cours de production [biens et services]" -msgstr "" +msgstr "En-cours de production [biens et services]" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Sur immobilisations : dotations aux dépréciations" -msgstr "" +msgstr "Sur immobilisations : dotations aux dépréciations" #. module: l10n_fr #: field:l10n.fr.line,code:0 @@ -902,7 +907,7 @@ msgstr "Nom de la variable" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "TOTAL CHARGES ( I + II + III" -msgstr "" +msgstr "TOTAL CHARGES ( I + II + III" #. module: l10n_fr #: model:ir.actions.report.xml,name:l10n_fr.l10n_fr_pcg_cdr @@ -918,17 +923,17 @@ msgstr "Lignes de rapport pour l10n_fr" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "A" -msgstr "" +msgstr "A" #. module: l10n_fr #: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_2 msgid "Zone Euro" -msgstr "" +msgstr "Zone Euro" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "E" -msgstr "" +msgstr "E" #. module: l10n_fr #: field:l10n.fr.line,name:0 @@ -939,7 +944,7 @@ msgstr "Nom" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "I" -msgstr "" +msgstr "I" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_stock @@ -964,27 +969,27 @@ msgstr "Comptes spéciaux" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Emprunts et dettes financières diverses" -msgstr "" +msgstr "Emprunts et dettes financières diverses" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Produits constatés d'avance" -msgstr "" +msgstr "Produits constatés d'avance" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Charges nettes sur cessions de valeurs mobilières de placement" -msgstr "" +msgstr "Charges nettes sur cessions de valeurs mobilières de placement" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "archandises" -msgstr "" +msgstr "Marchandises" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Emprunts et dettes auprès des établissements de crédit" -msgstr "" +msgstr "Emprunts et dettes auprès des établissements de crédit" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_view @@ -994,47 +999,47 @@ msgstr "Vue" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "CHARGES FINANCIÈRES" -msgstr "" +msgstr "CHARGES FINANCIÈRES" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Quotes-parts de résultat sur opérations faites en commun ( II )" -msgstr "" +msgstr "Quotes-parts de résultat sur opérations faites en commun ( II )" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "IMMOBILISATIONS CORPORELLES" -msgstr "" +msgstr "IMMOBILISATIONS CORPORELLES" #. module: l10n_fr #: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_6 msgid "TVA sur le débits" -msgstr "" +msgstr "TVA sur le débits" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "Achat de marchandises" -msgstr "" +msgstr "Achat de marchandises" #. module: l10n_fr #: model:ir.module.module,shortdesc:l10n_fr.module_meta_information msgid "France - Plan Comptable Général" -msgstr "" +msgstr "France - Plan Comptable Général" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Écarts de conversion actif" -msgstr "" +msgstr "Écarts de conversion actif" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Autres emprunts obligataires" -msgstr "" +msgstr "Autres emprunts obligataires" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Réserve légale" -msgstr "" +msgstr "Réserve légale" #. module: l10n_fr #: model:account.account.type,name:l10n_fr.account_type_cloture @@ -1044,14 +1049,14 @@ msgstr "Cloture" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "IMMOBILISATIONS FINANCIÉRES" -msgstr "" +msgstr "IMMOBILISATIONS FINANCIÉRES" #. module: l10n_fr #: rml:l10n.fr.cdr:0 msgid "CHARGES EXCEPTIONNELLES" -msgstr "" +msgstr "CHARGES EXCEPTIONNELLES" #. module: l10n_fr #: rml:l10n.fr.bilan:0 msgid "Dettes fiscales et sociales" -msgstr "" +msgstr "Dettes fiscales et sociales" diff --git a/addons/mail_gateway/__openerp__.py b/addons/mail_gateway/__openerp__.py index 27f596a53b6..b5e56a03ee1 100644 --- a/addons/mail_gateway/__openerp__.py +++ b/addons/mail_gateway/__openerp__.py @@ -32,7 +32,7 @@ * Easy Integration with any Module""", 'author': 'Tiny', 'website': 'http://www.openerp.com', - 'depends': ['base','fetchmail'], + 'depends': ['base'], 'init_xml': [], 'update_xml': [ "mail_gateway_view.xml" diff --git a/addons/mail_gateway/mail_gateway.py b/addons/mail_gateway/mail_gateway.py index 81f32d12f60..8534c32c510 100644 --- a/addons/mail_gateway/mail_gateway.py +++ b/addons/mail_gateway/mail_gateway.py @@ -22,60 +22,38 @@ from osv import osv, fields import time +class one2many_domain(fields.one2many): + def set(self, cr, obj, id, field, values, user=None, context=None): + if not values: + return + return super(one2many_domain, self).set(cr, obj, id, field, values, + user=user, context=context) + def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None): + if not context: + context = {} + res = {} + msg_obj = obj.pool.get('mailgate.message') + for thread in obj.browse(cr, user, ids, context=context): + final = msg_obj.search(cr, user, self._domain + [('thread_id', '=', thread.id)], context=context) + res[thread.id] = final + return res + + class mailgate_thread(osv.osv): ''' Mailgateway Thread ''' _name = 'mailgate.thread' _description = 'Mailgateway Thread' - - def _get_log_ids(self, cr, uid, ids, field_names, arg, context=None): - """Gets id for case log from history of particular case - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: List of Case IDs - @param context: A standard dictionary for contextual values - @return:Dictionary of History Ids - """ - if not context: - context = {} - - result = {} - domain = [] - history_obj = False - model_obj = self.pool.get('ir.model') - history_obj = self.pool.get('mailgate.message') - - if 'message_ids' in field_names: - name = 'message_ids' - domain += [('email_to', '!=', False)] - - if 'log_ids' in field_names: - name = 'log_ids' - domain += [('email_to', '=', False)] - - model_ids = model_obj.search(cr, uid, [('model', '=', self._name)]) - domain += [('model_id', '=', model_ids[0])] - for case in self.browse(cr, uid, ids, context): - domain1 = domain + [('res_id', '=', case.id)] - history_ids = history_obj.search(cr, uid, domain1, context=context) - if history_ids: - result[case.id] = {name: history_ids} - else: - result[case.id] = {name: []} - return result + _rec_name = 'thread' _columns = { - 'name':fields.char('Name', size=64), - 'active': fields.boolean('Active'), - 'message_ids': fields.function(_get_log_ids, method=True, type='one2many', \ - multi="message_ids", relation="mailgate.message", string="Messages"), - 'log_ids': fields.function(_get_log_ids, method=True, type='one2many', \ - multi="log_ids", relation="mailgate.message", string="Logs"), - } - + 'thread': fields.char('Thread', size=32, required=False), + 'message_ids': one2many_domain('mailgate.message', 'thread_id', 'Messages', domain=[('history', '=', True)], required=False), + 'log_ids': one2many_domain('mailgate.message', 'thread_id', 'Logs', domain=[('history', '=', False)], required=False), + } + def __history(self, cr, uid, cases, keyword, history=False, email=False, details=None, email_from=False, message_id=False, context={}): """ @param self: The object pointer @@ -89,7 +67,6 @@ class mailgate_thread(osv.osv): @param context: A standard dictionary for contextual values""" if not context: context = {} - # The mailgate sends the ids of the cases and not the object list if all(isinstance(case_id, (int, long)) for case_id in cases) and context.get('model'): cases = self.pool.get(context['model']).browse(cr, uid, cases, context=context) @@ -102,21 +79,19 @@ class mailgate_thread(osv.osv): data = { 'name': keyword, 'user_id': uid, - 'date': time.strftime('%Y-%m-%d %H:%M:%S'), 'model_id' : model_ids and model_ids[0] or False, - 'res_id': case.id, - 'section_id': case.section_id.id, - 'message_id':message_id + 'date': time.strftime('%Y-%m-%d %H:%M:%S'), + 'thread_id': case.thread_id.id, + 'message_id': message_id } if history: + data['history'] = True data['description'] = details or case.description data['email_to'] = email or \ - (case.section_id and case.section_id.reply_to) or \ (case.user_id and case.user_id.address_id and \ case.user_id.address_id.email) or tools.config.get('email_from', False) data['email_from'] = email_from or \ - (case.section_id and case.section_id.reply_to) or \ (case.user_id and case.user_id.address_id and \ case.user_id.address_id.email) or tools.config.get('email_from', False) res = obj.create(cr, uid, data, context) @@ -138,10 +113,10 @@ class mailgate_message(osv.osv): _columns = { 'name':fields.char('Message', size=64), + 'model_id': fields.many2one('ir.model', 'Model'), 'thread_id':fields.many2one('mailgate.thread', 'Thread'), 'date': fields.datetime('Date'), - 'model_id': fields.many2one('ir.model', "Model"), - 'res_id': fields.integer('Resource ID'), + 'history': fields.boolean('Is History?', required=False), 'user_id': fields.many2one('res.users', 'User Responsible', readonly=True), 'message': fields.text('Description'), 'email_from': fields.char('Email From', size=84), diff --git a/addons/mail_gateway/mail_gateway_view.xml b/addons/mail_gateway/mail_gateway_view.xml index e735f75b7f0..8b26d5ee47a 100644 --- a/addons/mail_gateway/mail_gateway_view.xml +++ b/addons/mail_gateway/mail_gateway_view.xml @@ -9,9 +9,8 @@ <form string="maligate message"> <field name="name" /> <field name="date" /> - <field name="model_id" /> - <field name="res_id" /> <field name="user_id" /> + <field name="history" /> <field name="message_id" /> <notebook colspan="4"> <page> @@ -51,20 +50,19 @@ <field name="type">form</field> <field name="arch" type="xml"> <form string="Mailgateway Thread"> - <field name="name" select="1"/> - <separator string="Messages" colspan="4"/> - <field name="message_ids" nolabel="1" colspan="4"> - <tree string="Mailgateway Message"> + <field name="thread" select="1"/> + <separator string="Logs" colspan="4"/> + <field name="log_ids" nolabel="1" colspan="4" domain="[('history', '=', True)]"> + <tree string="Mailgateway Logs"> <field name="name" select="1" /> <field name="date" /> </tree> - <form string="Maligate Message"> + <form string="Maligate Logs"> <field name="name" /> <field name="date" /> - <field name="model_id" /> - <field name="res_id" /> <field name="user_id" /> <field name="message_id" /> + <field name="history" /> <notebook colspan="4"> <page string="Email Details"> <group col="4" colspan="4"> @@ -82,6 +80,35 @@ </notebook> </form> </field> + <separator string="Histories" colspan="4"/> + <field name="message_ids" nolabel="1" colspan="4" domain="[('history', '=', True)]"> + <tree string="Mailgateway Histories"> + <field name="name" select="1" /> + <field name="date" /> + </tree> + <form string="Maligate Histories"> + <field name="name" /> + <field name="date" /> + <field name="user_id" /> + <field name="message_id" /> + <field name="history" /> + <notebook colspan="4"> + <page string="Email Details"> + <group col="4" colspan="4"> + <separator string="Email Details" colspan="4"/> + <field name="email_from" /> + <field name="email_to" /> + <field name="email_cc" /> + <field name="email_bcc" /> + </group> + </page> + <page string="Attachments"> + <separator string="Attachments" colspan="4"/> + <field name="attachment_ids" nolabel="1" colspan="4" /> + </page> + </notebook> + </form> + </field> </form> </field> </record> @@ -92,7 +119,7 @@ <field name="type">tree</field> <field name="arch" type="xml"> <tree string="Mailgateway Thread"> - <field name="name" select="1" /> + <field name="thread" select="1" /> <field name="message_ids" /> </tree> </field> @@ -120,12 +147,12 @@ </record> - <menuitem id="base.menu_crm_configuration" name="Cases" + <!-- <menuitem id="base.menu_crm_configuration" name="Cases" parent="base.menu_base_config" sequence="0"/> <menuitem id="menu_mailgate_thread" name="Mailgateway Threads" action="action_view_mailgate_thread" parent="base.menu_crm_configuration" sequence="20"/> - + --> </data> </openerp> diff --git a/addons/mail_gateway/security/ir.model.access.csv b/addons/mail_gateway/security/ir.model.access.csv new file mode 100644 index 00000000000..badba5d4e3e --- /dev/null +++ b/addons/mail_gateway/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"mail_gateway_mailgate_message","mail_gateway.mailgate.message","model_mailgate_message","base.group_user",1,1,1,1 +"mail_gateway_mailgate_thread","mail_gateway.mailgate.thread","model_mailgate_thread","base.group_user",1,1,1,1 diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py index 7bdf579157f..05ddfd149d3 100755 --- a/addons/marketing_campaign/marketing_campaign.py +++ b/addons/marketing_campaign/marketing_campaign.py @@ -19,10 +19,12 @@ # ############################################################################## import time +import base64 from datetime import datetime from dateutil.relativedelta import relativedelta from osv import fields, osv +import netsvc _intervalTypes = { 'hours': lambda interval: relativedelta(hours=interval), @@ -37,7 +39,7 @@ class marketing_campaign(osv.osv): #{{{ _columns = { 'name': fields.char('Name', size=64, required=True), - 'object_id': fields.many2one('ir.model', 'Objects'), + 'object_id': fields.many2one('ir.model', 'Objects', required=True), 'mode':fields.selection([('test', 'Test'), ('test_realtime', 'Realtime Time'), ('manual', 'Manual'), @@ -53,7 +55,40 @@ class marketing_campaign(osv.osv): #{{{ 'fixed_cost': fields.float('Fixed Cost'), } - + + _defaults = { + 'state': lambda *a: 'draft', + } + + def state_running_set(self, cr, uid, ids, *args): + campaign = self.browse(cr, uid, ids[0]) + if not campaign.activity_ids : + raise osv.except_osv("Error", "There is no associate activitity for the campaign") + act_ids = [ act_id.id for act_id in campaign.activity_ids] + act_ids = self.pool.get('marketing.campaign.activity').search(cr, uid, + [('id', 'in', act_ids), ('start', '=', True)]) + if not act_ids : + raise osv.except_osv("Error", "There is no associate activitity for the campaign") + segment_ids = self.pool.get('marketing.campaign.segment').search(cr, uid, + [('campaign_id', '=', campaign.id), + ('state', '=', 'draft')]) + if not segment_ids : + raise osv.except_osv("Error", "There is no associate semgnet for the campaign") + self.write(cr, uid, ids, {'state': 'running'}) + return True + + def state_done_set(self, cr, uid, ids, *args): + segment_ids = self.pool.get('marketing.campaign.segment').search(cr, uid, + [('campaign_id', 'in', ids), + ('state', '=', 'running')]) + if segment_ids : + raise osv.except_osv("Error", "Camapign cannot be done before all segments are done") + self.write(cr, uid, ids, {'state': 'done'}) + return True + + def state_cancel_set(self, cr, uid, ids, *args): + self.write(cr, uid, ids, {'state': 'cancelled'}) + return True marketing_campaign()#}}} class marketing_campaign_segment(osv.osv): #{{{ @@ -69,8 +104,8 @@ class marketing_campaign_segment(osv.osv): #{{{ string='Object'), 'ir_filter_id': fields.many2one('ir.filters', 'Filter'), 'sync_last_date': fields.datetime('Date'), - 'sync_mode': fields.selection([('create', 'Create'), - ('write', 'Write')], + 'sync_mode': fields.selection([('create_date', 'Create'), + ('write_date', 'Write')], 'Mode'), 'state': fields.selection([('draft', 'Draft'), ('running', 'Running'), @@ -80,6 +115,74 @@ class marketing_campaign_segment(osv.osv): #{{{ 'date_run': fields.datetime('Running'), 'date_done': fields.datetime('Done'), } + + _defaults = { + 'state': lambda *a: 'draft', + 'sync_mode': lambda *a: 'create_date', + } + + def state_running_set(self, cr, uid, ids, *args): + segment = self.browse(cr, uid, ids[0]) + curr_date = time.strftime('%Y-%m-%d %H:%M:%S') + if not segment.date_run: + raise osv.except_osv("Error", "Segment can't be start before giving running date") + if segment.campaign_id.state != 'running' : + raise osv.except_osv("Error", "You have to start campaign first") + if (segment.date_run >= curr_date): + raise osv.except_osv("Error", "Segment cannot start before run date") + if not segment.sync_last_date: + self.write(cr, uid, ids, {'sync_last_date':curr_date}) + self.write(cr, uid, ids, {'state': 'running','date_done': curr_date}) + return True + + def state_done_set(self, cr, uid, ids, *args): + date_done = self.browse(cr, uid, ids[0]).date_done + if (date_done > time.strftime('%Y-%m-%d')): + raise osv.except_osv("Error", "Segment cannot be closed before end date") + + wi_ids = self.pool.get("marketing.campaign.workitem").search(cr, uid, + [('state', 'in', ['inprogress', 'todo']), + ('segment_id', '=', ids[0])]) + if wi_ids : + raise osv.except_osv("Error", "Segment cannot be done before all workitems are processed") + self.write(cr, uid, ids, {'state': 'done'}) + return True + + def state_cancel_set(self, cr, uid, ids, *args): + self.write(cr, uid, ids, {'state': 'cancelled'}) + return True + + def process_segment(self, cr, uid, context={}): + segment_ids = self.search(cr, uid, [('state', '=', 'running')]) + action_date = time.strftime('%Y-%m-%d %H:%M:%S') + last_action_date = (datetime.now() + _intervalTypes['days'](-1) \ + ).strftime('%Y-%m-%d %H:%M:%S') + for segment in self.browse(cr, uid, segment_ids): + act_ids = self.pool.get('marketing.campaign.activity').search(cr, + uid, [('start', '=', True), + ('campaign_id', '=', segment.campaign_id.id)]) + if (segment.sync_last_date and \ + segment.sync_last_date <= action_date )\ + or not segment.sync_last_date : + model_obj = self.pool.get(segment.object_id.model) + object_ids = model_obj.search(cr, uid, [ + (segment.sync_mode, '<=', action_date), + (segment.sync_mode, '>=', last_action_date)]) + for o_ids in model_obj.read(cr, uid, object_ids) : + partner_id = 'partner_id' in o_ids and o_ids['partner_id'] \ + or False + if partner_id: + for act_id in act_ids: + wi_vals = {'segment_id': segment.id, + 'activity_id': act_id, + 'date': action_date, + 'partner_id': partner_id[0], + 'state': 'todo', + } + self.pool.get('marketing.campaign.workitem').create( + cr, uid, wi_vals) + self.write(cr, uid, segment.id, {'sync_last_date':action_date}) + return True marketing_campaign_segment()#}}} @@ -99,7 +202,7 @@ class marketing_campaign_activity(osv.osv): #{{{ ('paper', 'Paper'), ('action', 'Action'), ('subcampaign', 'Sub-Campaign')], - 'Type'), + 'Type', required=True), 'email_template_id': fields.many2one('poweremail.templates','Email Template'), 'report_id': fields.many2one('ir.actions.report.xml', 'Reports'), 'report_directory_id': fields.many2one('document.directory', 'Directory'), @@ -116,6 +219,7 @@ class marketing_campaign_activity(osv.osv): #{{{ 'variable_cost': fields.float('Variable Cost'), 'revenue': fields.float('Revenue') } + def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): @@ -130,7 +234,26 @@ class marketing_campaign_activity(osv.osv): #{{{ return act_ids return super(marketing_campaign_activity, self).search(cr, uid, args, offset, limit, order, context, count) - + + def process(self, cr, uid, act_id, wi_id, context={}): + activity = self.browse(cr, uid, act_id) + workitem = self.pool.get('marketing.campaign.workitem').browse(cr, uid, wi_id) + if activity.type == 'paper' : + service = netsvc.LocalService('report.%s'%activity.report_id.report_name) + (report_data, format) = service.create(cr, uid, [activity.report_id.id], {}, {}) + attach_vals = { + 'name': '%s_%s_%s'%(activity.report_id.report_name, + activity.name,workitem.partner_id.name), + 'datas_fname': '%s.%s'%(activity.report_id.report_name, + activity.report_id.report_type), + 'parent_id': activity.report_directory_id.id, + 'datas': base64.encodestring(report_data), + 'file_type': format + } + self.pool.get('ir.attachment').create(cr, uid, attach_vals) +# elif activity.type == 'email' : + + return True marketing_campaign_activity()#}}} class marketing_campaign_transition(osv.osv): #{{{ @@ -176,16 +299,21 @@ class marketing_campaign_workitem(osv.osv): #{{{ ('exception', 'Exception'), ('done', 'Done'), ('cancelled', 'Cancelled')], 'State') } + _defaults = { + 'state': lambda *a: 'draft', + } def process_chain(self, cr, uid, workitem_id, context={}): workitem = self.browse(cr, uid, workitem_id) - to_ids = [to_ids.id for to_ids in workitem.activity_id.to_ids] mct_obj = self.pool.get('marketing.campaign.transition') - process_to_id = mct_obj.search(cr,uid, [('id', 'in', to_ids), - ('activity_from_id','=', 'activity_id')]) + process_to_id = mct_obj.search(cr,uid, [ + ('activity_from_id','=', workitem.activity_id.id)]) for mct_id in mct_obj.browse(cr, uid, process_to_id): - launch_date = datetime.datetime.now() + _intervalTypes[ \ - mct_id.interval_type](mct_id.interval_nbr) + if mct_id.interval_type and mct_id.interval_nbr : + launch_date = (datetime.now() + _intervalTypes[ \ + mct_id.interval_type](mct_id.interval_nbr) \ + ).strftime('%Y-%m-%d %H:%M:%S') + launch_date = time.strftime('%Y-%m-%d %H:%M:%S') workitem_vals = {'segment_id': workitem.segment_id.id, 'activity_id': mct_id.activity_to_id.id, 'date': launch_date, @@ -195,16 +323,38 @@ class marketing_campaign_workitem(osv.osv): #{{{ self.create(cr, uid, workitem_vals) def process(self, cr, uid, workitem_ids, context={}): - #for wi in self.browse(cr, uid, workitem_ids): - # if wi.state == 'todo'# we searched the wi which are in todo state + for wi in self.browse(cr, uid, workitem_ids): + if wi.state == 'todo' :# we searched the wi which are in todo state #then y v keep this filter again + eval_context = { + 'pool': self.pool, + 'cr': cr, + 'uid': uid, + 'wi': wi, + 'object': wi.activity_id, + 'transition' : wi.activity_id.to_ids + } + val = {} + exec wi.activity_id.condition.replace('\r','') in \ + eval_context, val + if 'action' in val and val['action']: + try : + self.pool.get('marketing.campaign.activity').process(cr, + uid, wi.activity_id.id, wi.id, context) + self.write(cr, uid, wi.id, {'state':'done'}) + self.process_chain(cr, uid, wi.id, context) + except Exception,e: + self.write(cr, uid, wi.id, {'state':'exception'}) + else : + self.write(cr, uid, wi.id, {'state':'cancelled'}) + return True def process_all(self, cr, uid, context={}): - workitem_ids = self.search(cr, uid, [('type', '=', 'todo'), + workitem_ids = self.search(cr, uid, [('state', '=', 'todo'), ('date','<=', time.strftime('%Y-%m-%d %H:%M:%S'))]) if workitem_ids: - self.parocess(cr, uid, workitem_ids, context) + self.process(cr, uid, workitem_ids, context) marketing_campaign_workitem() #}}} # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/marketing_campaign/marketing_campaign_data.xml b/addons/marketing_campaign/marketing_campaign_data.xml index b3e18ee5b5d..81402dd73c2 100644 --- a/addons/marketing_campaign/marketing_campaign_data.xml +++ b/addons/marketing_campaign/marketing_campaign_data.xml @@ -6,13 +6,25 @@ <record model="ir.cron" id="ir_cron_marketing_campaign_every_hour"> <field name="name">Check Workitem</field> - <field name="interval_number">60</field> - <field name="interval_type">minutes</field> + <field name="interval_number">1</field> + <field name="interval_type">hours</field> <field name="numbercall">-1</field> <field name="doall" eval="False"/> <field name="model" eval="'marketing.campaign.workitem'"/> <field name="function" eval="'process_all'"/> <field name="args" eval="'()'"/> </record> + + <record model="ir.cron" id="ir_cron_marketing_campaign_every_day"> + <field name="name">Check Segment</field> + <field name="interval_number">1</field> + <field name="interval_type">days</field><!-- it s every day --> + <field name="numbercall">-1</field> + <field name="doall" eval="False"/> + <field name="model" eval="'marketing.campaign.segment'"/> + <field name="function" eval="'process_segment'"/> + <field name="args" eval="'()'"/> + </record> + </data> </openerp> diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml index abee5a1c124..f013f37e853 100755 --- a/addons/marketing_campaign/marketing_campaign_view.xml +++ b/addons/marketing_campaign/marketing_campaign_view.xml @@ -65,7 +65,12 @@ </tree> </field> <separator string="Status" colspan="4" /> - <field name="state" nolabel = "1" colspan="4" readonly="True"/> + <group col="10" colspan="4"> + <field name="state" readonly="1" select="2" nolabel="1"/> + <button name="state_running_set" string="Run" states="draft" /> + <button name="state_done_set" string="Done" states="running" /> + <button name="state_cancel_set" string="Cancelled" states="running"/> + </group> </form> </field> </record> @@ -138,14 +143,19 @@ <newline/> <field name="ir_filter_id" select="1"/> <newline/> - <field name="date_run"/> + <field name="date_run" attrs="{'readonly':[('date_run','!=',False)]}"/> <field name="date_done"/> <separator string="Synchronization" colspan="4" /> <field name="sync_last_date"/> - <field name="sync_mode"/> + <field name="sync_mode" required="True"/> </group> <separator string="Status" colspan="4" /> - <field name="state" nolabel = "1" colspan="4" readonly="1"/> + <group col="10" colspan="4"> + <field name="state" readonly="1" select="2" nolabel="1"/> + <button name="state_running_set" string="Run" states="draft" /> + <button name="state_done_set" string="Done" states="running" /> + <button name="state_cancel_set" string="Cancelled" states="running" /> + </group> </form> </field> </record> diff --git a/addons/marketing_campaign/report/campaign_analysis.py b/addons/marketing_campaign/report/campaign_analysis.py index 6ed57efa1ad..590a1b47bc0 100644 --- a/addons/marketing_campaign/report/campaign_analysis.py +++ b/addons/marketing_campaign/report/campaign_analysis.py @@ -36,7 +36,7 @@ class campaign_analysis(osv.osv): #{{{ result = {} for ca_obj in self.browse(cr, uid, ids, context): wi_ids = self.pool.get('marketing.campaign.workitem').search(cr, uid, - [('segment_id.campaign_id', '=', ca_obj.campaign_id.id)]) + [('segment_id.campaign_id', '=', ca_obj.campaign_id.id)]) total_cost = ca_obj.activity_id.variable_cost + \ (ca_obj.campaign_id.fixed_cost / len(wi_ids)) result[ca_obj.id] = total_cost @@ -58,14 +58,12 @@ class campaign_analysis(osv.osv): #{{{ readonly=True), 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True), 'country_id': fields.related('partner_id','address', 'country_id', - type='many2one', relation='res.country', - string='Country'), -# 'case_id': fields.many2one('crm.lead', 'Opportunity', readonly=True), -# 'count' : fields.integer('Count', readonly=True), - 'total_cost': fields.function(_total_cost, string='Cost', method=True, - type="float"), + type='many2one', relation='res.country',string='Country'), + 'total_cost' : fields.function(_total_cost, string='Cost', method=True, + type="float" ), 'revenue': fields.float('Revenue',readonly=True), - +# 'case_id': fields.many2one('crm.lead', 'Opportunity', readonly=True), +# 'count' : fields.integer('Count', readonly=True), } def init(self, cr): @@ -87,7 +85,7 @@ class campaign_analysis(osv.osv): #{{{ marketing_campaign_workitem wi left join res_partner p on (p.id=wi.partner_id) left join marketing_campaign_segment s on (s.id=wi.segment_id) - left join marketing_campaign_activity act on (act.id= wi.activity_id), + left join marketing_campaign_activity act on (act.id= wi.activity_id) group by to_char(wi.date, 'YYYY'),to_char(wi.date, 'MM'), s.campaign_id,wi.activity_id,wi.segment_id,wi.partner_id,revenue, diff --git a/addons/marketing_campaign/report/campaign_analysis_view.xml b/addons/marketing_campaign/report/campaign_analysis_view.xml index 8cf0aa9ab46..b66ec89ca6b 100644 --- a/addons/marketing_campaign/report/campaign_analysis_view.xml +++ b/addons/marketing_campaign/report/campaign_analysis_view.xml @@ -6,19 +6,19 @@ <field name="model">campaign.analysis</field> <field name="type">tree</field> <field name="arch" type="xml"> - <tree string="Marketing Reports"> - <field name="month"/> - <field name="year"/> - <field name="date"/> - <field name="campaign_id"/> - <field name="activity_id"/> - <field name="segment_id"/> - <field name="partner_id"/> - <field name="country_id" /> - <!--field name="case_id"/--> - <!--field name="count"/--> - <field name="total_cost"/> - <field name="revenue"/> + <tree string="Marketing Reports"> + <field name="year" invisible="1"/> + <field name="month" invisible="1"/> + <field name="date" invisible="1"/> + <field name="campaign_id" invisible="1"/> + <field name="activity_id" invisible="1"/> + <field name="segment_id" invisible="1"/> + <field name="partner_id" invisible="1"/> + <field name="country_id" invisible="1"/> + <!--field name="case_id"/--> + <!--field name="count"/--> + <field name="total_cost" string="Cost"/><!-- sum="Cost"/--> + <field name="revenue"/> </tree> </field> </record> @@ -46,8 +46,16 @@ <field name="segment_id"/> <field name="partner_id"/> <field name="country_id"/> - <!--field name="case_id"/--> </group> + <newline/> + <group expand="1" string="Group By..." colspan="10" col="12"> + <filter string="Campaign" name="Campaign" icon="terp-sale" context="{'group_by':'campaign_id'}" /> + <filter string="Segment" name ="Segment" icon="terp-sale" context="{'group_by':'segment_id'}" /> + <filter string="Partner" icon="terp-sale" context="{'group_by':'partner_id'}"/> + <separator orientation="vertical"/> + <filter string="Month" icon="terp-sale" context="{'group_by':'month'}"/> + <filter string="Year" icon="terp-sale" context="{'group_by':'year'}"/> + </group> </search> </field> </record> @@ -57,7 +65,7 @@ <field name="res_model">campaign.analysis</field> <field name="view_type">form</field> <field name="view_mode">tree</field> - <field name="context">{'group_by': [], 'search_default_group_campaign': 1, 'search_default_group_segment': 1}</field> + <field name="context">{'group_by': [], 'search_default_Campaign': 1, 'search_default_Segment': 1}</field> <field name="search_view_id" ref="view_campaign_analysis_search"/> </record> diff --git a/addons/mrp/i18n/fr.po b/addons/mrp/i18n/fr.po index 34e0d2ef7aa..5db458c1c57 100644 --- a/addons/mrp/i18n/fr.po +++ b/addons/mrp/i18n/fr.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.1\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2010-03-30 14:06+0000\n" -"Last-Translator: TeMPO <info@tempo-consulting.fr>\n" +"PO-Revision-Date: 2010-05-21 21:09+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 03:57+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: mrp @@ -388,7 +388,7 @@ msgstr "Processus des Approvisionnements" #. module: mrp #: field:mrp.production,date_planned_date:0 msgid "Scheduled Date" -msgstr "" +msgstr "Date planifiée" #. module: mrp #: selection:mrp.procurement,priority:0 @@ -1179,7 +1179,7 @@ msgstr "Approvisionnement" #. module: mrp #: model:ir.actions.wizard,name:mrp.product_procurement_wizard msgid "Procurement Request" -msgstr "" +msgstr "Demande d'approvisionnement" #. module: mrp #: model:ir.actions.wizard,name:mrp.wizard_price @@ -1680,7 +1680,7 @@ msgstr "Arrondi de produit" #. module: mrp #: field:mrp.production.workcenter.line,name:0 msgid "Work Order" -msgstr "" +msgstr "Ordre de fabrication" #. module: mrp #: view:mrp.production:0 @@ -1995,7 +1995,7 @@ msgstr "" #. module: mrp #: field:mrp.production,date_planned_end:0 msgid "Scheduled End" -msgstr "" +msgstr "Planification terminée" #. module: mrp #: selection:mrp.bom,method:0 diff --git a/addons/mrp/i18n/pl.po b/addons/mrp/i18n/pl.po index 59e69651b19..130d6a803dc 100644 --- a/addons/mrp/i18n/pl.po +++ b/addons/mrp/i18n/pl.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-11-17 07:35+0000\n" -"Last-Translator: Piotr Strębski <strebski@o2.pl>\n" +"PO-Revision-Date: 2010-05-21 08:19+0000\n" +"Last-Translator: Grzegorz Grzelak (Cirrus.pl) <Unknown>\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: 2010-04-17 03:58+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: mrp @@ -105,7 +105,7 @@ msgstr "Konfiguracja" #. module: mrp #: field:mrp.production,name:0 msgid "Reference" -msgstr "Odnośnik" +msgstr "Numer" #. module: mrp #: view:mrp.production:0 diff --git a/addons/mrp/report/mrp_production_order.py b/addons/mrp/report/mrp_production_order.py index 7f48b111d43..d754d6a50ad 100644 --- a/addons/mrp/report/mrp_production_order.py +++ b/addons/mrp/report/mrp_production_order.py @@ -27,12 +27,16 @@ class mrp_production_order(osv.osv): _description = "Production Order Report" _auto = False _columns = { - 'name': fields.char('Year',size=64,required=False, readonly=True), + 'year': fields.char('Year',size=64,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), + 'day': fields.char('Day',size=64,readonly=True), 'origin': fields.char('Source Document', size=64), 'nbr': fields.integer('# of Orders', readonly=True), - 'product_id': fields.many2one('product.product', 'Product', readonly=True, domain=[('type','<>','service')]), + 'products_to_consume': fields.integer('Products to Consume', readonly=True), + 'consumed_products': fields.integer('Consumed Products', readonly=True), + 'date': fields.date('Date', readonly=True), + 'product_id': fields.many2one('product.product', 'Product', readonly=True), 'product_qty': fields.float('Product Qty', readonly=True), 'state': fields.selection([('draft','Draft'), ('picking_except', 'Picking Exception'), @@ -43,14 +47,15 @@ class mrp_production_order(osv.osv): ('done','Done')], 'State', readonly=True), 'date_planned':fields.date('Scheduled Date'), - 'location_src_id': fields.many2one('stock.location', 'Raw Materials Location', required=True), + 'location_src_id': fields.many2one('stock.location', 'Raw Materials Location', readonly=True), 'date_start': fields.datetime('Start Date',readonly=True), 'date_finnished': fields.datetime('End Date',readonly=True), - 'location_dest_id': fields.many2one('stock.location', 'Finished Products Location', required=True), + 'location_dest_id': fields.many2one('stock.location', 'Finished Products Location', readonly=True), 'company_id': fields.many2one('res.company','Company',readonly=True), - 'bom_id': fields.many2one('mrp.bom', 'Bill of Material', domain=[('bom_id','=',False)],readonly=True), - 'routing_id': fields.many2one('mrp.routing', string='Routing', on_delete='set null',readonly=True), + 'bom_id': fields.many2one('mrp.bom', 'Bill of Material',readonly=True), + 'routing_id': fields.many2one('mrp.routing', string='Routing',readonly=True), 'picking_id': fields.many2one('stock.picking', 'Picking list', readonly=True), + 'product_uom': fields.many2one('product.uom', 'Product UOM', readonly=True), 'priority': fields.selection([('0','Not urgent'), ('1','Normal'), ('2','Urgent'), @@ -65,12 +70,27 @@ class mrp_production_order(osv.osv): create or replace view mrp_production_order as ( select min(l.id) as id, - to_char(s.create_date, 'YYYY') as name, + to_date(to_char(s.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY') as date, + to_char(s.create_date, 'YYYY') as year, to_char(s.create_date, 'MM') as month, + to_char(s.create_date, 'YYYY-MM-DD') as day, l.product_id as product_id, + l.product_uom, sum(l.product_qty * u.factor) as product_qty, s.company_id as company_id, count(*) as nbr, + (select sum(sm.product_qty) from stock_move as sm + left join mrp_production_move_ids as mv on (sm.id=mv.move_id) + left join mrp_production_product_line as ll on (ll.production_id=mv.production_id) + where sm.product_id=ll.product_id and ll.id=l.id + and sm.state not in ('done','cancel') + group by sm.product_id) as products_to_consume, + (select sum(sm.product_qty)/2 from stock_move as sm + left join mrp_production_move_ids as mv on (sm.id=mv.move_id) + left join mrp_production_product_line as ll on (ll.production_id=mv.production_id) + where sm.product_id=ll.product_id and ll.id=l.id + and sm.state in ('done','cancel') + group by sm.product_id) as consumed_products, s.location_src_id, s.location_dest_id, s.bom_id, @@ -82,16 +102,18 @@ class mrp_production_order(osv.osv): s.origin, s.priority, s.state - from - mrp_production_product_line l - left join - mrp_production s on (s.id=l.production_id) - left join product_uom u on (u.id=l.product_uom) + from mrp_production_product_line l + left join mrp_production s on (s.id=l.production_id) + left join product_uom u on (u.id=l.product_uom) group by to_char(s.create_date, 'YYYY'), to_char(s.create_date, 'MM'), + to_char(s.create_date, 'YYYY-MM-DD'), + to_date(to_char(s.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY'), l.product_id, l.product_uom, + s.id, + l.id, s.bom_id, s.routing_id, s.picking_id, diff --git a/addons/mrp/report/mrp_production_order_view.xml b/addons/mrp/report/mrp_production_order_view.xml index 1ae2e6b32bb..c9c7a3d4400 100644 --- a/addons/mrp/report/mrp_production_order_view.xml +++ b/addons/mrp/report/mrp_production_order_view.xml @@ -21,7 +21,7 @@ <field name="routing_id" invisible="1"/> <field name="picking_id" invisible="1"/> <field name="priority" invisible="1"/> - <field name="name" invisible="1" /> + <field name="year" invisible="1" /> <field name="month" invisible="1"/> <field name="location_src_id" invisible="1"/> <field name="location_dest_id" invisible="1"/> @@ -48,8 +48,8 @@ <field name="arch" type="xml"> <search string="Search"> <group col="16" colspan="6"> - <filter string="This Year" name="this_year" icon="terp-mrp" domain="[('name','=',time.localtime()[0])]"/> - <filter string="This Month" name="this_month" icon="terp-mrp" domain="[('month','=',time.strftime('%%m'))]"/> + <filter string="This Year" icon="terp-mrp" domain="[('year','=',time.localtime()[0])]" default="1" /> + <filter string="This Month" icon="terp-mrp" domain="[('month','=',time.strftime('%%m'))]" default="1"/> <separator orientation="vertical"/> <filter string="Current" icon="terp-mrp" domain="[('state','in',('open','draft'))]"/> <separator orientation="vertical"/> @@ -89,7 +89,7 @@ <separator orientation="vertical"/> <filter string="BOM" icon="terp-mrp" context="{'group_by':'bom_id'}"/> <filter string="Month" icon="terp-mrp" context="{'group_by':'month'}"/> - <filter string="Year" icon="terp-mrp" context="{'group_by':'name'}"/> + <filter string="Year" icon="terp-mrp" context="{'group_by':'year'}"/> </group> </search> </field> @@ -101,8 +101,8 @@ <field name="view_mode">tree,graph</field> <field name="view_id" ref="view_report_mrp_production_order_tree"/> <field name="search_view_id" ref="view_report_mrp_production_order_filter"/> - <field name="context">{'search_default_Product': 1,'search_default_this_year':1,'search_default_this_month':1}</field> - + <field name="context">{'search_default_Product': 1}</field> + </record> <record model="ir.actions.act_window.view" id="action_report_mrp_production_order_tree"> diff --git a/addons/multi_company/i18n/fr.po b/addons/multi_company/i18n/fr.po index 0f63c32dd30..535e5a56cf0 100644 --- a/addons/multi_company/i18n/fr.po +++ b/addons/multi_company/i18n/fr.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2009-12-08 11:46+0000\n" -"PO-Revision-Date: 2010-05-20 14:21+0000\n" +"PO-Revision-Date: 2010-05-21 10:24+0000\n" "Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\n" "Language-Team: French <fr@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-05-21 03:38+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: multi_company @@ -87,27 +87,27 @@ msgstr "" #. module: multi_company #: field:multi_company.default,company_id:0 msgid "Main Company" -msgstr "" +msgstr "Société Principale" #. module: multi_company #: view:multi_company.default:0 msgid "Condition" -msgstr "" +msgstr "Condition" #. module: multi_company #: help:multi_company.default,company_dest_id:0 msgid "Company to store the current record" -msgstr "" +msgstr "Société physique ou sera stocké cet enregistrement" #. module: multi_company #: constraint:ir.ui.view:0 msgid "Invalid XML for View Architecture!" -msgstr "" +msgstr "XML non valide pour l'architecture de la vue !" #. module: multi_company #: field:multi_company.default,name:0 msgid "Name" -msgstr "" +msgstr "Nom" #. module: multi_company #: constraint:product.template:0 @@ -117,80 +117,80 @@ msgstr "" #. module: multi_company #: model:product.category,name:multi_company.Odoo1 msgid "Odoo Offers" -msgstr "" +msgstr "Offre Odoo" #. module: multi_company #: constraint:res.company:0 msgid "Error! You can not create recursive companies." -msgstr "" +msgstr "Erreur ! Vous ne pouvez pas créer de sociétés récursives" #. module: multi_company #: help:multi_company.default,name:0 msgid "Name it to easily find a record" -msgstr "" +msgstr "Nommer le facilement pour trouver l'enregistrement" #. module: multi_company #: model:ir.ui.menu,name:multi_company.menu_custom_multicompany msgid "Multi company" -msgstr "" +msgstr "Multi société" #. module: multi_company #: model:ir.model,name:multi_company.model_multi_company_default msgid "multi_company.default" -msgstr "" +msgstr "multi_company.default" #. module: multi_company #: help:multi_company.default,company_id:0 msgid "Company where the user is connected" -msgstr "" +msgstr "Société ou l'utilisateur sera connecté" #. module: multi_company #: model:ir.actions.act_window,name:multi_company.action_inventory_form msgid "Default Company per Object" -msgstr "" +msgstr "Société par défaut par objet" #. module: multi_company #: field:multi_company.default,expression:0 msgid "Expression" -msgstr "" +msgstr "Expression" #. module: multi_company #: model:product.template,name:multi_company.product_product_odoo1_product_template msgid "Odoo Offer" -msgstr "" +msgstr "Offre Odoo" #. module: multi_company #: field:multi_company.default,sequence:0 msgid "Sequence" -msgstr "" +msgstr "Séquence" #. module: multi_company #: constraint:product.category:0 msgid "Error ! You can not create recursive categories." -msgstr "" +msgstr "Erreur ! Vous ne pouvez pas créer de catégories récursives" #. module: multi_company #: constraint:product.product:0 msgid "Error: Invalid ean code" -msgstr "" +msgstr "Erreur: code EAN non valide" #. module: multi_company #: help:multi_company.default,expression:0 msgid "Expression, must be True to match" -msgstr "" +msgstr "Expression, doit être Vrai pour correspondre" #. module: multi_company #: model:ir.ui.menu,name:multi_company.menu_action_inventory_form msgid "Default company per Object" -msgstr "" +msgstr "Société par défaut par Objet" #. module: multi_company #: code:addons/multi_company/multi_company.py:0 #, python-format msgid " (copy)" -msgstr "" +msgstr " (copie)" #. module: multi_company #: view:multi_company.default:0 msgid "Matching" -msgstr "" +msgstr "Correspondance" diff --git a/addons/olap/i18n/fr.po b/addons/olap/i18n/fr.po new file mode 100644 index 00000000000..e9c187a4eda --- /dev/null +++ b/addons/olap/i18n/fr.po @@ -0,0 +1,1402 @@ +# French translation for openobject-addons +# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2009-11-26 05:24+0000\n" +"PO-Revision-Date: 2010-05-21 14:51+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\n" +"Language-Team: French <fr@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#. module: olap +#: view:olap.database.columns:0 +#: view:olap.database.tables:0 +msgid "Hide" +msgstr "Masquer" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_saved_query_form +#: model:ir.ui.menu,name:olap.menu_action_olap_saved_query_form +#: view:olap.saved.query:0 +msgid "Olap Saved Query" +msgstr "" + +#. module: olap +#: field:olap.query.logs,time:0 +#: field:olap.saved.query,time:0 +msgid "Time" +msgstr "Temps" + +#. module: olap +#: view:bi.auto.configure.wizard:0 +msgid "Auto Configure Structure" +msgstr "" + +#. module: olap +#: view:olap.fact.database:0 +msgid "Olap fact database" +msgstr "" + +#. module: olap +#: help:olap.measure,value_sql:0 +msgid "" +"You can provide valid sql expression. Make sure it have function with fully " +"qualified column name like (sum,avg ...)(tablename.columnname (+,- ...) " +"tablename.columnname)" +msgstr "" + +#. module: olap +#: field:olap.cube.table,schema_id:0 +msgid "Schema id" +msgstr "" + +#. module: olap +#: field:olap.schema,database_id:0 +msgid "Database Connection" +msgstr "Connexion à une base de données" + +#. module: olap +#: selection:olap.fact.database,type:0 +msgid "MySQL" +msgstr "MySQL" + +#. module: olap +#: field:olap.fact.database,db_password:0 +msgid "Database password" +msgstr "Mot de passe de la base de données" + +#. module: olap +#: view:olap.database.tables:0 +msgid "Olap database tables" +msgstr "" + +#. module: olap +#: view:olap.fact.database:0 +msgid "Connection url" +msgstr "URL de connexion" + +#. module: olap +#: view:olap.application.table:0 +msgid "Olap Application Table" +msgstr "" + +#. module: olap +#: field:olap.parameters.config.wizard,host_name:0 +msgid "Server Name" +msgstr "Nom du serveur" + +#. module: olap +#: help:olap.fact.database,db_password:0 +msgid "Password for the login." +msgstr "Mot de passe pour le login" + +#. module: olap +#: field:olap.application.field,application_id:0 +#: field:olap.application.table,application_id:0 +msgid "Application Id" +msgstr "ID de l'application" + +#. module: olap +#: model:ir.actions.todo,note:olap.config_auto_directory +msgid "This wizard will configure the URL of the web client" +msgstr "" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_view_olap_fact_database_form +#: model:ir.ui.menu,name:olap.menu_bi_conf_fact +msgid "Fact Databases" +msgstr "" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_browser_url +msgid "Cube Browser" +msgstr "Explorer le Cube" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_action_olap_dimension_form +msgid "Olap Dimension" +msgstr "Dimension du cube Olap" + +#. module: olap +#: model:ir.model,name:olap.model_olap_database_columns +msgid "Olap Database Columns" +msgstr "" + +#. module: olap +#: view:olap.parameters.config.wizard:0 +msgid "BI Web Client." +msgstr "" + +#. module: olap +#: help:olap.fact.database,db_port:0 +msgid " Port to be used in connection" +msgstr " Port utilisé par la connexion" + +#. module: olap +#: field:olap.database.columns,primary_key:0 +msgid "Primary Key" +msgstr "Clé primaire" + +#. module: olap +#: field:olap.database.columns,table_id:0 +msgid "Table Id" +msgstr "ID de la table" + +#. module: olap +#: view:olap.parameters.config.wizard:0 +msgid "This wizard will automatically configure the web client for BI." +msgstr "Cet assistant configurera automatiquement le client Web pour la BI" + +#. module: olap +#: field:olap.fact.database,type:0 +msgid "Database type" +msgstr "Type de base de données" + +#. module: olap +#: wizard_view:olap.query_builder,back:0 +#: wizard_view:olap.query_builder,init:0 +msgid "Cube Fetcher" +msgstr "" + +#. module: olap +#: wizard_view:olap.load.table,info:0 +#: wizard_view:olap.load.table,ok:0 +msgid "Your database structure has been correctly loaded" +msgstr "" + +#. module: olap +#: model:ir.model,name:olap.model_olap_parameters_config_wizard +msgid "Olap Server Parameters" +msgstr "Paramètres du serveur Olap" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_cube_table_form +msgid "Olap Cube Tables" +msgstr "" + +#. module: olap +#: field:olap.measure,formatstring:0 +msgid "Format string" +msgstr "Foramtage de chaîne" + +#. module: olap +#: wizard_button:olap.query_builder,exec,exec:0 +#: wizard_button:olap.query_builder,ok,exec:0 +msgid "Execute" +msgstr "Exécuter" + +#. module: olap +#: wizard_button:olap.application.configuration,configure,end:0 +#: wizard_button:olap.fact.database.test_connection,init,end:0 +#: wizard_button:olap.load.table,info,end:0 +#: wizard_button:olap.query.logs.clear,info,end:0 +#: wizard_button:olap.query.logs.clear,ok,end:0 +#: view:olap.warehouse.wizard:0 +msgid "Ok" +msgstr "Ok" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_bi_conf_known_application +msgid "Known Application" +msgstr "Application connue" + +#. module: olap +#: wizard_field:olap.query_builder,exec,level:0 +#: wizard_field:olap.query_builder,ok,level:0 +msgid "Level" +msgstr "Niveau" + +#. module: olap +#: field:olap.level,column_id_name:0 +#: field:olap.measure,value_column_id_name:0 +msgid "Column ID" +msgstr "ID de la colonne" + +#. module: olap +#: view:bi.load.db.wizard:0 +msgid "" +"We will load the complete structure of the database by introspection, so " +"that you will be able to work on it, and specify a better structure " +"according to your reporting needs." +msgstr "" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_view_olap_application_form +msgid "Olap Applicatiion" +msgstr "Application Olap" + +#. module: olap +#: field:olap.saved.query,name:0 +msgid "Query Name" +msgstr "Nom de la requête" + +#. module: olap +#: wizard_field:olap.query_builder,exec,mdx_query:0 +#: wizard_field:olap.query_builder,ok,mdx_query:0 +msgid "MDX Query" +msgstr "Requête MDX" + +#. module: olap +#: model:ir.model,name:olap.model_bi_auto_configure_wizard +msgid "bi.auto.configure.wizard" +msgstr "bi.auto.configure.wizard" + +#. module: olap +#: field:olap.hierarchy,primary_key:0 +msgid "Primary key" +msgstr "Clé primaire" + +#. module: olap +#: model:ir.actions.act_window,name:olap.act_bi_auto_configure +msgid "Auto Configuration" +msgstr "Configuration automatique" + +#. module: olap +#: field:olap.schema,note:0 +msgid "Schema description" +msgstr "Description du schéma" + +#. module: olap +#: model:ir.actions.act_window,name:olap.act_bi_load_db_wizard +msgid "Load database Structure" +msgstr "Chargement de la structure de base de données" + +#. module: olap +#: model:ir.model,name:olap.model_olap_level +#: view:olap.level:0 +msgid "Olap level" +msgstr "Niveau Olap" + +#. module: olap +#: selection:olap.measure,formatstring:0 +msgid "None (0000.00)" +msgstr "Aucun (0000.00)" + +#. module: olap +#: field:olap.fact.database,db_host:0 +msgid "Database host" +msgstr "Nom d'hôte de la base de données" + +#. module: olap +#: model:ir.model,name:olap.model_olap_fact_database +msgid "Olap Fact Database" +msgstr "" + +#. module: olap +#: view:bi.auto.configure.wizard:0 +msgid "Auto Congifuring Tables" +msgstr "Configuration automatique des tables" + +#. module: olap +#: field:olap.application,name:0 +msgid "Application name" +msgstr "Nom de l'application" + +#. module: olap +#: field:olap.cube.table,column_link_id:0 +msgid "Relational Column" +msgstr "Colonne relationnelle" + +#. module: olap +#: field:olap.level,type:0 +msgid "Level class" +msgstr "" + +#. module: olap +#: field:olap.cube,name:0 +msgid "Cube name" +msgstr "Nom du cube" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_view_olap_application_table_form +msgid "Olap Applicatiion Table" +msgstr "" + +#. module: olap +#: model:ir.model,name:olap.model_olap_saved_query +msgid "olap.saved.query" +msgstr "olap.saved.query" + +#. module: olap +#: field:olap.level,column_name:0 +msgid "Columns Name" +msgstr "Nom des colonnes" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_hierarchy_form +msgid "Olap Hierarchies" +msgstr "Hiérarchies Olap" + +#. module: olap +#: field:olap.schema,ready:0 +msgid "Ready" +msgstr "Prêt" + +#. module: olap +#: selection:olap.measure,measure_type:0 +#: field:olap.measure,value_column:0 +msgid "Fact Table Column" +msgstr "" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_view_olap_database_tables_form +#: field:olap.application,table_ids:0 +#: view:olap.fact.database:0 +#: field:olap.fact.database,table_ids:0 +msgid "Tables" +msgstr "Tables" + +#. module: olap +#: model:ir.model,name:olap.model_olap_application +msgid "Olap application" +msgstr "Application Olap" + +#. module: olap +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "Nom de modèle invalide pour la définition de l'action" + +#. module: olap +#: selection:olap.schema,state:0 +msgid "Schema is ready to use" +msgstr "Le schéma est prêt a être utilisé" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_designer_url +msgid "Cube Designer" +msgstr "Cube Designer" + +#. module: olap +#: field:olap.fact.database,db_login:0 +msgid "Database login" +msgstr "Connexion à la base de données" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_view_olap_application_table_form +msgid "Application Table" +msgstr "" + +#. module: olap +#: wizard_view:olap.query.logs.clear,info:0 +#: wizard_view:olap.query.logs.clear,ok:0 +msgid "Logs Cleared successfully" +msgstr "Les fichiers journaux ont été effacés avec succès" + +#. module: olap +#: model:ir.model,name:olap.model_olap_schema +#: model:ir.ui.menu,name:olap.menu_action_olap_schema_form +#: view:olap.schema:0 +msgid "Olap Schema" +msgstr "Schéma Olap" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_view_olap_application_form +msgid "Application" +msgstr "Application" + +#. module: olap +#: wizard_field:olap.query_builder,exec,mdx_query_output:0 +#: wizard_field:olap.query_builder,ok,mdx_query_output:0 +msgid "MDX Query Output" +msgstr "Requête MDX en sortie" + +#. module: olap +#: field:olap.hierarchy,primary_key_table:0 +msgid "Primary key table" +msgstr "Table de la clé primaire" + +#. module: olap +#: help:olap.measure,table_name:0 +msgid "" +"The name of the table on which the column is defined. If False, take the " +"table from the cube." +msgstr "" + +#. module: olap +#: view:olap.warehouse.wizard:0 +msgid "Warehouse" +msgstr "Entrepôt" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_dimension_form +msgid "Olap Dimensions" +msgstr "Dimensions Olap" + +#. module: olap +#: field:olap.query.logs,user_id:0 +msgid "Tiny ERP User" +msgstr "Utilisateur Tiny ERP" + +#. module: olap +#: model:ir.actions.wizard,name:olap.bi_application_configuration +msgid "Configure from Application" +msgstr "" + +#. module: olap +#: field:olap.fact.database,db_port:0 +msgid "Database port" +msgstr "Port de connexion à la base" + +#. module: olap +#: help:olap.parameters.config.wizard,host_port:0 +msgid "" +"Put the port for the server. Put 8080 if its not clear." +msgstr "" +"Mettre le port du server. Mettre 8080 if ce n'est pas clair pour vous" + +#. module: olap +#: selection:olap.schema,state:0 +msgid "The Structure is Loaded" +msgstr "La structure est chargée" + +#. module: olap +#: field:olap.dimension,cube_id:0 +#: field:olap.measure,cube_id:0 +#: field:olap.query.logs,cube_id:0 +#: field:olap.saved.query,cube_id:0 +msgid "Cube" +msgstr "Cube" + +#. module: olap +#: field:olap.cube.table,available_table_ids:0 +msgid "Available Tables" +msgstr "Tables disponibles" + +#. module: olap +#: view:olap.schema:0 +msgid "Configure Manually" +msgstr "Coonfigurer manuellement" + +#. module: olap +#: field:olap.database.columns,related_to:0 +msgid "Related To" +msgstr "Lié à" + +#. module: olap +#: view:olap.database.columns:0 +#: view:olap.database.tables:0 +msgid "Olap database columns" +msgstr "Colonne Olap dans la base de données" + +#. module: olap +#: field:olap.cube.table.line,field_id:0 +msgid "Link Field" +msgstr "Lien du champ" + +#. module: olap +#: view:olap.schema:0 +msgid "Mark as Configured" +msgstr "" + +#. module: olap +#: view:olap.application.field:0 +msgid "Olap Application Field" +msgstr "" + +#. module: olap +#: selection:olap.measure,formatstring:0 +msgid "Comma Seperator (0,000)" +msgstr "Séparateur décimal (0,000)" + +#. module: olap +#: field:olap.measure,agregator:0 +msgid "Agregator" +msgstr "Agregateur" + +#. module: olap +#: wizard_view:olap.application.configuration,configure:0 +msgid "Your database structure (Open ERP) has been sucessfully configured." +msgstr "" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_bi_configuration +msgid "Configuration" +msgstr "Configuration" + +#. module: olap +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "XML non valide pour l'architecture de la vue !" + +#. module: olap +#: help:olap.parameters.config.wizard,host_name:0 +msgid "" +"Put here the server address or IP Put localhost if its not " +"clear." +msgstr "" + +#. module: olap +#: view:olap.database.tables:0 +msgid "Database tables" +msgstr "" + +#. module: olap +#: view:olap.schema:0 +msgid "Reload Structure" +msgstr "Recharger la structure" + +#. module: olap +#: wizard_view:olap.application.configuration,init:0 +msgid "This will Auto Configure Application" +msgstr "" + +#. module: olap +#: view:bi.load.db.wizard:0 +msgid "Load Data Structure" +msgstr "Charger la structure de données" + +#. module: olap +#: view:bi.auto.configure.wizard:0 +#: view:bi.load.db.wizard:0 +#: wizard_button:olap.application.configuration,init,end:0 +#: wizard_button:olap.load.table,init,end:0 +#: view:olap.parameters.config.wizard:0 +#: wizard_button:olap.query.logs.clear,init,end:0 +#: wizard_button:olap.query_builder,exec,end:0 +#: wizard_button:olap.query_builder,ok,end:0 +msgid "Cancel" +msgstr "Annuler" + +#. module: olap +#: view:bi.load.db.wizard:0 +msgid "" +"After having loaded the structure, you will be able to hide/show or rename " +"tables and columns to simplify end-users interface. The following database " +"will be loaded:" +msgstr "" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_level_form +#: model:ir.ui.menu,name:olap.menu_action_olap_level_form +#: view:olap.level:0 +msgid "Olap Level" +msgstr "Niveau Olap" + +#. module: olap +#: field:olap.fact.database,loaded:0 +msgid "Loaded" +msgstr "Chargé" + +#. module: olap +#: help:olap.fact.database,db_name:0 +msgid "Name of the database to be used for analysis." +msgstr "Nom de la base de données pour l'analyse." + +#. module: olap +#: help:olap.fact.database,db_login:0 +msgid "Login for the database name specified." +msgstr "" + +#. module: olap +#: field:olap.hierarchy,dimension_id:0 +#: wizard_field:olap.query_builder,exec,dimension:0 +#: wizard_field:olap.query_builder,ok,dimension:0 +msgid "Dimension" +msgstr "Dimension" + +#. module: olap +#: model:ir.model,name:olap.model_olap_application_table +msgid "Olap application table" +msgstr "" + +#. module: olap +#: wizard_view:olap.load.table,init:0 +msgid "" +"We will load the complete structure of the database by introspection, " +"so that you will be able to work on it, and specify a better structure " +"according to your reporting needs." +msgstr "" + +#. module: olap +#: field:olap.saved.query,axis_keys:0 +msgid "Axis Keys" +msgstr "Axe clé" + +#. module: olap +#: field:olap.cube,query_log:0 +msgid "Query Logging" +msgstr "Enregistrer les requêtes" + +#. module: olap +#: field:olap.measure,measure_type:0 +msgid "Measure Type" +msgstr "Type de mesure" + +#. module: olap +#: field:olap.database.tables,fact_database_id:0 +msgid "Database Id" +msgstr "ID de la base de données" + +#. module: olap +#: help:olap.fact.database,db_host:0 +msgid "Give hostname to make connection to the database." +msgstr "" + +#. module: olap +#: field:olap.level,hierarchy_id:0 +msgid "Hierarchy" +msgstr "Hiérarchie" + +#. module: olap +#: selection:olap.schema,state:0 +msgid "The Structure is Configured." +msgstr "La structure est configurée" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_schema_form +msgid "Olap Schemas" +msgstr "Schéma Olap" + +#. module: olap +#: field:olap.cube,table_id:0 +msgid "Fact table" +msgstr "" + +#. module: olap +#: view:bi.auto.configure.wizard:0 +msgid "" +"This will Auto Configure Application. This will help to increase the " +"readability of the tables and columns by giving it meaningful and easy to " +"comprehend name. You can hides particular data and columns by reconfiguring " +"the structure option." +msgstr "" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_view_olap_application_field_form +msgid "Olap Applicatiion Field" +msgstr "" + +#. module: olap +#: field:olap.query.logs,query:0 +#: field:olap.saved.query,query:0 +#: view:olap.warehouse.wizard:0 +#: field:olap.warehouse.wizard,query:0 +msgid "Query" +msgstr "Requête" + +#. module: olap +#: view:olap.schema:0 +msgid "Auto Application Configuration" +msgstr "" + +#. module: olap +#: selection:olap.measure,formatstring:0 +msgid "Postfix Default Currency(0000.00 EUR)" +msgstr "" + +#. module: olap +#: field:bi.load.db.wizard,db_name:0 +#: wizard_field:olap.load.table,init,db_name:0 +msgid "Database Name" +msgstr "" + +#. module: olap +#: field:olap.cube,measure_ids:0 +msgid "Measures" +msgstr "" + +#. module: olap +#: model:ir.actions.wizard,name:olap.bi_conf_cube_query_builder +#: wizard_view:olap.query_builder,exec:0 +#: wizard_view:olap.query_builder,ok:0 +msgid "Query Builder" +msgstr "" + +#. module: olap +#: field:olap.cube,dimension_ids:0 +msgid "Dimensions" +msgstr "" + +#. module: olap +#: model:ir.model,name:olap.model_olap_cube +#: view:olap.cube:0 +msgid "Olap cube" +msgstr "Cube Olap" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_warehouse +#: model:ir.model,name:olap.model_olap_warehouse_wizard +#: model:ir.ui.menu,name:olap.menu_bi_warehouse +msgid "Olap Warehouse" +msgstr "Entrepôt Olap" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_view_olap_application_field_form +msgid "Application Field" +msgstr "Champ d'application" + +#. module: olap +#: model:ir.model,name:olap.model_olap_dimension +#: view:olap.dimension:0 +msgid "Olap dimension" +msgstr "Dimension Olap" + +#. module: olap +#: field:olap.application.field,name:0 +msgid "Application field name" +msgstr "Nom du champ de l'application" + +#. module: olap +#: view:olap.fact.database:0 +msgid "Connection parameters" +msgstr "Paramètres de connexion" + +#. module: olap +#: field:bi.auto.configure.wizard,name:0 +#: field:bi.load.db.wizard,fact_table:0 +#: wizard_field:olap.load.table,init,fact_table:0 +msgid "Fact Name" +msgstr "" + +#. module: olap +#: view:olap.database.columns:0 +msgid "Database columns" +msgstr "Colonnes de la base de données" + +#. module: olap +#: field:olap.application.table,table_name:0 +#: field:olap.cube.table,name:0 +#: field:olap.level,table_name:0 +#: field:olap.measure,table_name:0 +msgid "Table name" +msgstr "Nom de la table" + +#. module: olap +#: help:olap.measure,measure_type:0 +msgid "Select between auto column or sql expression for the measures" +msgstr "" + +#. module: olap +#: model:ir.actions.wizard,name:olap.bi_load_column +msgid "Open Columns" +msgstr "Colonnes ouvertes" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_view_olap_database_columns_form +#: field:olap.database.tables,columns:0 +msgid "Columns" +msgstr "Colonnes" + +#. module: olap +#: model:ir.actions.wizard,name:olap.bi_test_connection +#: view:olap.fact.database:0 +msgid "Test Connection" +msgstr "Test de connexion" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_measure_form +#: model:ir.ui.menu,name:olap.menu_action_olap_measure_form +msgid "Olap Measures" +msgstr "Mesures Olap" + +#. module: olap +#: wizard_button:olap.application.configuration,init,configure:0 +#: view:olap.parameters.config.wizard:0 +msgid "Configure" +msgstr "" + +#. module: olap +#: wizard_view:olap.load.table,init:0 +msgid "" +"After having loaded the structure, you will be able to hide/show or " +"rename tables and columns to simplify end-users interface. The following " +"database will be loaded:" +msgstr "" + +#. module: olap +#: constraint:ir.model:0 +msgid "" +"The Object name must start with x_ and not contain any special character !" +msgstr "" +"Le nom de l'objet doit commencer par x_ et ne doit pas contenir de " +"caractères spéciaux !" + +#. module: olap +#: wizard_field:olap.query_builder,exec,hierarchy:0 +#: wizard_field:olap.query_builder,ok,hierarchy:0 +msgid "Hiearchy" +msgstr "Hiérarchie" + +#. module: olap +#: selection:olap.measure,measure_type:0 +#: field:olap.measure,value_sql:0 +msgid "SQL Expression" +msgstr "Expression SQL" + +#. module: olap +#: model:ir.actions.wizard,name:olap.bi_menu_olap_load_table +msgid "Load Tables" +msgstr "Chargements des tables" + +#. module: olap +#: field:olap.hierarchy,level_ids:0 +msgid "Levels" +msgstr "Niveaux" + +#. module: olap +#: model:ir.model,name:olap.model_olap_application_field +msgid "Olap application field" +msgstr "" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_view_olap_database_columns_form +msgid "Database Columns" +msgstr "Colonnes de base de données" + +#. module: olap +#: field:olap.database.columns,active:0 +#: field:olap.database.tables,active:0 +msgid "Active" +msgstr "Actif" + +#. module: olap +#: selection:olap.measure,datatype:0 +msgid "Integer" +msgstr "Entier" + +#. module: olap +#: wizard_view:olap.application.configuration,init:0 +msgid " Auto Configure " +msgstr "" + +#. module: olap +#: selection:olap.measure,agregator:0 +msgid "Sum" +msgstr "Somme" + +#. module: olap +#: wizard_field:olap.query.logs.clear,init,user_name:0 +#: field:olap.saved.query,user_id:0 +msgid "User" +msgstr "Utilisateur" + +#. module: olap +#: field:olap.query.logs,count:0 +msgid "Count" +msgstr "Compter" + +#. module: olap +#: field:olap.database.tables,name:0 +msgid "End-User Name" +msgstr "" + +#. module: olap +#: selection:olap.measure,formatstring:0 +msgid "Postfix Default Currency with comma seperator (0,000.00 EUR)" +msgstr "" + +#. module: olap +#: field:olap.measure,datatype:0 +msgid "Datatype" +msgstr "Type de données" + +#. module: olap +#: wizard_button:olap.query_builder,back,ok:0 +#: wizard_button:olap.query_builder,init,ok:0 +msgid "Fetch Data" +msgstr "Récupérer les données" + +#. module: olap +#: selection:olap.measure,formatstring:0 +msgid "Prefix Default Currency with comma seperator (EUR 0,000.00)" +msgstr "" + +#. module: olap +#: wizard_view:olap.load.table,info:0 +#: wizard_view:olap.load.table,ok:0 +#: wizard_view:olap.query.logs.clear,info:0 +#: wizard_view:olap.query.logs.clear,ok:0 +msgid "Load Data" +msgstr "Charger les données" + +#. module: olap +#: field:olap.cube,query_ids:0 +msgid "Queries" +msgstr "Requêtes" + +#. module: olap +#: selection:olap.fact.database,type:0 +msgid "Oracle" +msgstr "Oracle" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_cube_form +#: model:ir.ui.menu,name:olap.menu_action_olap_cube_form +#: model:ir.ui.menu,name:olap.menu_bi_conf_cubes +msgid "Olap Cubes" +msgstr "Cubes Olap" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_action_olap_cube_table_form +msgid "Olap Cubes Table" +msgstr "Tables des Cubes Olap" + +#. module: olap +#: field:olap.measure,name:0 +msgid "Measure name" +msgstr "Nom de la mesure" + +#. module: olap +#: selection:olap.fact.database,connection_type:0 +msgid "Socket" +msgstr "" + +#. module: olap +#: field:olap.fact.database,connection_type:0 +msgid "Connection type" +msgstr "Type de connexion" + +#. module: olap +#: selection:olap.measure,agregator:0 +msgid "count" +msgstr "nombre" + +#. module: olap +#: field:olap.fact.database,db_name:0 +msgid "Database name" +msgstr "Nom de la base de données" + +#. module: olap +#: field:olap.database.columns,type:0 +msgid "Type" +msgstr "Type" + +#. module: olap +#: view:olap.database.columns:0 +#: view:olap.database.tables:0 +msgid "Show" +msgstr "Montrer" + +#. module: olap +#: wizard_button:olap.query_builder,exec,back:0 +#: wizard_button:olap.query_builder,ok,back:0 +msgid "Change cube" +msgstr "" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_view_olap_database_tables_form +#: view:olap.cube.table:0 +#: field:olap.cube.table,line_ids:0 +msgid "Database Tables" +msgstr "" + +#. module: olap +#: help:olap.level,table_name:0 +msgid "" +"The name of the table on which the column is defined. If False, take the " +"table from the hierarchy." +msgstr "" + +#. module: olap +#: selection:olap.schema,state:0 +msgid "Nothing has been Configured" +msgstr "" + +#. module: olap +#: field:olap.dimension,name:0 +msgid "Dimension name" +msgstr "" + +#. module: olap +#: wizard_button:olap.load.table,ok,end:0 +msgid "Continue and Configure Structure" +msgstr "" + +#. module: olap +#: model:ir.model,name:olap.model_olap_measure +#: view:olap.measure:0 +msgid "Olap measure" +msgstr "" + +#. module: olap +#: help:olap.cube,table_id:0 +msgid "Table(s) for cube." +msgstr "Table(s) pour le cube" + +#. module: olap +#: wizard_field:olap.query_builder,exec,measure:0 +#: wizard_field:olap.query_builder,ok,measure:0 +msgid "Measure" +msgstr "" + +#. module: olap +#: field:olap.database.columns,column_db_name:0 +msgid "Column DBName" +msgstr "" + +#. module: olap +#: selection:olap.schema,state:0 +msgid "We Can Start building Cube" +msgstr "" + +#. module: olap +#: field:olap.cube.table.line,table_id:0 +msgid "Database Table" +msgstr "" + +#. module: olap +#: field:olap.schema,name:0 +msgid "Schema name" +msgstr "" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_query_logs_my_form +#: model:ir.ui.menu,name:olap.menu_action_olap_query_logs_my_form +#: view:olap.query.logs:0 +msgid "My Logs" +msgstr "Mes journaux" + +#. module: olap +#: view:olap.fact.database:0 +msgid "Information" +msgstr "Information" + +#. module: olap +#: wizard_field:olap.query_builder,back,cube_schema:0 +#: wizard_field:olap.query_builder,init,cube_schema:0 +msgid "Select Cube" +msgstr "Sélectionner le Cube" + +#. module: olap +#: field:olap.hierarchy,table_id:0 +msgid "Fact table(s)" +msgstr "" + +#. module: olap +#: model:ir.actions.url,name:olap.menu_url_cube_designer +msgid "name_menu_url_cube_designer" +msgstr "" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_config_bi_parameters +msgid "Parameters Configuration" +msgstr "" + +#. module: olap +#: view:olap.schema:0 +msgid "Connect to Database" +msgstr "Connexion à la base de données" + +#. module: olap +#: selection:olap.schema,state:0 +msgid "Database Connected" +msgstr "Connecté à la base de données" + +#. module: olap +#: field:olap.application.field,table_name:0 +#: field:olap.application.table,name:0 +msgid "Application table name" +msgstr "" + +#. module: olap +#: help:olap.hierarchy,table_id:0 +msgid "Table(s) to make hierarchy on the cube." +msgstr "" + +#. module: olap +#: view:olap.fact.database:0 +msgid "General information" +msgstr "Informations générales" + +#. module: olap +#: field:olap.application,query:0 +msgid "Application Query" +msgstr "" + +#. module: olap +#: help:olap.cube,query_log:0 +msgid "Enabling this will log all the queries in the browser" +msgstr "" + +#. module: olap +#: field:olap.saved.query,mdx_id:0 +msgid "Module" +msgstr "Module" + +#. module: olap +#: field:olap.application.field,is_hidden:0 +#: field:olap.application.table,is_hidden:0 +#: field:olap.database.columns,hide:0 +#: field:olap.database.tables,hide:0 +msgid "Hidden" +msgstr "Masquer" + +#. module: olap +#: field:olap.dimension,hierarchy_ids:0 +msgid "Hierarchies" +msgstr "Hiérarchies" + +#. module: olap +#: field:olap.query.logs,result_size:0 +msgid "Result Size" +msgstr "" + +#. module: olap +#: view:olap.application:0 +msgid "Olap Application" +msgstr "" + +#. module: olap +#: model:ir.model,name:olap.model_olap_database_tables +msgid "Olap Database Tables" +msgstr "" + +#. module: olap +#: selection:olap.measure,formatstring:0 +msgid "Prefix Default Currency (EUR 0000.00)" +msgstr "" + +#. module: olap +#: view:olap.cube.table:0 +msgid "Olap cube_table" +msgstr "" + +#. module: olap +#: view:olap.parameters.config.wizard:0 +msgid "Parameters Configure" +msgstr "Configurer les paramètres" + +#. module: olap +#: model:ir.model,name:olap.model_olap_hierarchy +#: view:olap.hierarchy:0 +msgid "Olap hierarchy" +msgstr "Hiérarchie Olap" + +#. module: olap +#: model:ir.model,name:olap.model_olap_cube_table +#: model:ir.model,name:olap.model_olap_cube_table_line +msgid "Olap cube table" +msgstr "" + +#. module: olap +#: field:olap.application.field,field_name:0 +msgid "Field name" +msgstr "Nom du champ" + +#. module: olap +#: model:ir.model,name:olap.model_olap_query_logs +msgid "Olap query logs" +msgstr "" + +#. module: olap +#: field:olap.fact.database,name:0 +msgid "Fact name" +msgstr "" + +#. module: olap +#: help:olap.measure,formatstring:0 +msgid " Let you specify how the measure to be displayed in cube browser" +msgstr "" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_bi_server_parameters +msgid "Server Parameters" +msgstr "Paramètres serveur" + +#. module: olap +#: wizard_view:olap.load.table,init:0 +#: wizard_button:olap.load.table,init,ok:0 +#: view:olap.schema:0 +msgid "Load Database Structure" +msgstr "Charger la structure de la base de données" + +#. module: olap +#: field:olap.level,name:0 +msgid "Level name" +msgstr "Nom du niveau" + +#. module: olap +#: field:olap.cube,schema_id:0 +#: field:olap.query.logs,schema_id:0 +#: field:olap.saved.query,schema_id:0 +msgid "Schema" +msgstr "Schéma" + +#. module: olap +#: field:olap.fact.database,connection_url:0 +#: field:olap.schema,app_detect:0 +msgid "Connection URL" +msgstr "URL de connexion" + +#. module: olap +#: field:olap.schema,cube_ids:0 +msgid "Cubes" +msgstr "Cubes" + +#. module: olap +#: view:olap.schema:0 +msgid "ReConfigure Structure" +msgstr "" + +#. module: olap +#: field:olap.application,field_ids:0 +msgid "Fields" +msgstr "Champs" + +#. module: olap +#: selection:olap.measure,agregator:0 +msgid "Average" +msgstr "Moyenne" + +#. module: olap +#: view:bi.load.db.wizard:0 +msgid "Load Database Tables" +msgstr "" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_action_olap_hierarchy_form +msgid "Olap Hierarchy" +msgstr "" + +#. module: olap +#: field:olap.cube.table.line,cube_table_id:0 +msgid "Cube Table" +msgstr "" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_bi +msgid "Businesss Intelligence" +msgstr "" + +#. module: olap +#: model:ir.model,name:olap.model_bi_load_db_wizard +msgid "bi.load.db.wizard" +msgstr "" + +#. module: olap +#: model:ir.actions.url,name:olap.menu_url_cube_browser +msgid "name_menu_url_cube_browser" +msgstr "" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_view_olap_fact_database_form +msgid "Databases" +msgstr "Bases de données" + +#. module: olap +#: field:olap.hierarchy,name:0 +msgid "Hierarchy name" +msgstr "" + +#. module: olap +#: model:ir.module.module,description:olap.module_meta_information +msgid "" +"\n" +" Base module to manage Olap schemas. Cube designer.\n" +" " +msgstr "" + +#. module: olap +#: view:olap.cube.table:0 +msgid "Joined Tables" +msgstr "Tables jointes" + +#. module: olap +#: field:olap.schema,loaded:0 +msgid "Loading Datastructure" +msgstr "" + +#. module: olap +#: view:olap.cube.table:0 +msgid "Joined Table" +msgstr "Tables jointes" + +#. module: olap +#: selection:olap.fact.database,type:0 +msgid "PostgreSQL" +msgstr "PostgreSQL" + +#. module: olap +#: wizard_view:olap.query.logs.clear,init:0 +msgid " To Load Data" +msgstr "" + +#. module: olap +#: field:olap.hierarchy,sequence:0 +#: field:olap.level,sequence:0 +msgid "Sequence" +msgstr "Séquence" + +#. module: olap +#: model:ir.ui.menu,name:olap.menu_bi_conf_tools +msgid "Tools" +msgstr "Outils" + +#. module: olap +#: field:olap.schema,state:0 +msgid "Schema State" +msgstr "" + +#. module: olap +#: selection:olap.measure,datatype:0 +msgid "Float" +msgstr "Décimal" + +#. module: olap +#: model:ir.actions.act_window,name:olap.action_olap_query_logs_form +#: model:ir.ui.menu,name:olap.menu_action_olap_query_logs_form +#: view:olap.query.logs:0 +msgid "All Logs" +msgstr "" + +#. module: olap +#: selection:olap.fact.database,connection_type:0 +#: field:olap.parameters.config.wizard,host_port:0 +msgid "Port" +msgstr "Port" + +#. module: olap +#: view:olap.fact.database:0 +msgid "Fact database" +msgstr "" + +#. module: olap +#: model:ir.module.module,shortdesc:olap.module_meta_information +msgid "olap" +msgstr "olap" + +#. module: olap +#: field:olap.database.columns,name:0 +msgid "Column Name" +msgstr "Nom de colonne" + +#. module: olap +#: field:olap.database.tables,table_db_name:0 +msgid "Table Name" +msgstr "Nom de la table" + +#. module: olap +#: wizard_view:olap.application.configuration,configure:0 +msgid "Auto Configure" +msgstr "Configuration auto" + +#. module: olap +#: field:olap.schema,configure:0 +msgid "Configuring Datastructure" +msgstr "" + +#. module: olap +#: model:ir.actions.wizard,name:olap.bi_load_configuration_table +msgid "Open Configuration" +msgstr "" + +#. module: olap +#: view:olap.schema:0 +msgid "Configure Automatically " +msgstr "" + +#. module: olap +#: model:ir.actions.wizard,name:olap.bi_clear_logs +#: model:ir.ui.menu,name:olap.menu_bi_clear_logs +#: wizard_button:olap.query.logs.clear,init,ok:0 +msgid "Clear Logs" +msgstr "Effacer les journaux" diff --git a/addons/olap_crm/i18n/fr.po b/addons/olap_crm/i18n/fr.po new file mode 100644 index 00000000000..034219dcdcd --- /dev/null +++ b/addons/olap_crm/i18n/fr.po @@ -0,0 +1,34 @@ +# French translation for openobject-addons +# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2009-11-26 05:29+0000\n" +"PO-Revision-Date: 2010-05-21 14:53+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\n" +"Language-Team: French <fr@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#. module: olap_crm +#: model:ir.module.module,description:olap_crm.module_meta_information +msgid "" +"\n" +" Sale module will load the data in olap tables\n" +" " +msgstr "" +"\n" +" Module de vente qui chargera les données dans les tables olap\n" +" " + +#. module: olap_crm +#: model:ir.module.module,shortdesc:olap_crm.module_meta_information +msgid "olap_crm" +msgstr "olap_crm" diff --git a/addons/olap_extract/i18n/fr.po b/addons/olap_extract/i18n/fr.po new file mode 100644 index 00000000000..ec38bffe470 --- /dev/null +++ b/addons/olap_extract/i18n/fr.po @@ -0,0 +1,59 @@ +# French translation for openobject-addons +# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2009-11-26 05:29+0000\n" +"PO-Revision-Date: 2010-05-21 14:54+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\n" +"Language-Team: French <fr@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#. module: olap_extract +#: model:ir.module.module,shortdesc:olap_extract.module_meta_information +msgid "olap_extract" +msgstr "olap_extract" + +#. module: olap_extract +#: wizard_button:olap.extract.schema,init,ok:0 +msgid "OK" +msgstr "OK" + +#. module: olap_extract +#: model:ir.actions.wizard,name:olap_extract.bi_olap_extract_schema +msgid "Olap Extract" +msgstr "Extraction Olap" + +#. module: olap_extract +#: model:ir.module.module,description:olap_extract.module_meta_information +msgid "" +"\n" +" Extracts the schema structure.\n" +" " +msgstr "" +"\n" +" Extraire la structure du schéma.\n" +" " + +#. module: olap_extract +#: wizard_field:olap.extract.schema,init,module_name:0 +msgid "Module Name" +msgstr "Nom du module" + +#. module: olap_extract +#: wizard_button:olap.extract.schema,init,end:0 +msgid "Cancel" +msgstr "Annuler" + +#. module: olap_extract +#: wizard_view:olap.extract.schema,init:0 +msgid "New Module Name" +msgstr "Nouveau nom de module" diff --git a/addons/olap_sale/i18n/fr.po b/addons/olap_sale/i18n/fr.po new file mode 100644 index 00000000000..2a4e7c47c93 --- /dev/null +++ b/addons/olap_sale/i18n/fr.po @@ -0,0 +1,34 @@ +# French translation for openobject-addons +# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2009-11-26 05:29+0000\n" +"PO-Revision-Date: 2010-05-21 15:14+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\n" +"Language-Team: French <fr@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#. module: olap_sale +#: model:ir.module.module,description:olap_sale.module_meta_information +msgid "" +"\n" +" Sale module will load the data in olap tables\n" +" " +msgstr "" +"\n" +" Module de ventes qui chargera les données dans les tables olap\n" +" " + +#. module: olap_sale +#: model:ir.module.module,shortdesc:olap_sale.module_meta_information +msgid "olap_sale" +msgstr "olap_sale" diff --git a/addons/point_of_sale/i18n/fr.po b/addons/point_of_sale/i18n/fr.po index 6ae0cfda0bb..c3eea52b8d2 100644 --- a/addons/point_of_sale/i18n/fr.po +++ b/addons/point_of_sale/i18n/fr.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-11-09 18:58+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" +"PO-Revision-Date: 2010-05-21 10:26+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 04:00+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: point_of_sale @@ -52,7 +52,7 @@ msgstr "Numéro de pièce" #. module: point_of_sale #: constraint:ir.actions.act_window:0 msgid "Invalid model name in the action definition." -msgstr "" +msgstr "Nom du Modèle non valide dans la définition de l'action." #. module: point_of_sale #: field:pos.order,name:0 @@ -92,7 +92,7 @@ msgstr "Ventes (résumé)" #. module: point_of_sale #: help:pos.order,user_id:0 msgid "This is the logged in user (not necessarily the salesman)." -msgstr "" +msgstr "Ceci est l'utilisateur connecté (pas nécessairement le vendeur)." #. module: point_of_sale #: wizard_view:pos.sale.get,init:0 @@ -142,7 +142,7 @@ msgstr "Réf. Partenaire" #. module: point_of_sale #: rml:pos.receipt:0 msgid "Tel : + 32 (0) 2 231 04 35" -msgstr "" +msgstr "Tél : + 32 (0) 2 231 04 35" #. module: point_of_sale #: field:pos.order.line,name:0 @@ -242,7 +242,7 @@ msgstr "Qté" #. module: point_of_sale #: field:pos.order,user_id:0 msgid "Logged in User" -msgstr "" +msgstr "Connecté en tant qu'utilisateur" #. module: point_of_sale #: rml:pos.details:0 @@ -350,7 +350,7 @@ msgstr "Lignes de la commande" #. module: point_of_sale #: rml:pos.invoice:0 msgid "Disc.(%)" -msgstr "" +msgstr "Rem.(%)" #. module: point_of_sale #: model:ir.module.module,shortdesc:point_of_sale.module_meta_information @@ -385,7 +385,7 @@ msgstr "Configuration des Journaux utilisés par les Points de Vente." #. module: point_of_sale #: rml:pos.receipt:0 msgid "Total :" -msgstr "" +msgstr "Total :" #. module: point_of_sale #: wizard_field:pos.config.journal,init,default_journal:0 @@ -447,7 +447,7 @@ msgstr "Ristourne (%)" #. module: point_of_sale #: rml:pos.invoice:0 msgid "Fiscal Position Remark :" -msgstr "" +msgstr "Indiquer la position fiscale :" #. module: point_of_sale #: model:ir.actions.wizard,name:point_of_sale.pos_add_product @@ -487,7 +487,7 @@ msgstr "Point de Vente" #. module: point_of_sale #: field:pos.order,salesman_id:0 msgid "Salesman" -msgstr "" +msgstr "Vendeur" #. module: point_of_sale #: rml:pos.details:0 @@ -929,7 +929,7 @@ msgstr "Actions" #. module: point_of_sale #: help:pos.order,salesman_id:0 msgid "This is the salesman actually making the order." -msgstr "" +msgstr "Indiquer le vendeur de cette vente" #. module: point_of_sale #: rml:pos.details:0 @@ -957,7 +957,7 @@ msgstr "Date d'Impression" #. module: point_of_sale #: rml:pos.receipt:0 msgid "OPERATION N° :" -msgstr "" +msgstr "OPÉRATION N° :" #. module: point_of_sale #: rml:pos.lines:0 diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py index e099b4544aa..128bdb39378 100644 --- a/addons/project/report/project_report.py +++ b/addons/project/report/project_report.py @@ -30,17 +30,16 @@ class report_project_task_user(osv.osv): 'name': fields.char('Task Summary', size=128, readonly=True), 'day': fields.char('Day', size=128, readonly=True), 'year': fields.char('Year',size=64,required=False, readonly=True), - 'user_id':fields.many2one('res.users', 'User', readonly=True), - 'date_start': fields.datetime('Starting Date',readonly=True), + 'user_id':fields.many2one('res.users', 'Assigned To', readonly=True), + 'date_start': fields.date('Starting Date',readonly=True), 'no_of_days': fields.integer('#Days', size=128, readonly=True), 'description': fields.text('Description',readonly=True), - 'date_end': fields.datetime('Ending Date',readonly=True), + 'date_end': fields.date('Ending Date',readonly=True), 'date_deadline': fields.date('Deadline',readonly=True), 'project_id':fields.many2one('project.project', 'Project', readonly=True), 'hours_planned': fields.float('Planned Hours', readonly=True), 'hours_effective': fields.float('Effective Hours', readonly=True), 'hours_delay': fields.float('Avg. Plan.-Eff.', readonly=True), -# 'closing_days': fields.char('Avg Closing Delay', size=64, readonly=True), 'closing_days': fields.float('Avg Closing Delay', digits=(16,2), readonly=True, group_operator="avg", help="Number of Days to close the task"), @@ -102,7 +101,6 @@ class report_project_task_user(osv.osv): t.state, date_trunc('day',t.date_end), to_date(to_char(t.date_deadline, 'dd-MM-YYYY'),'dd-MM-YYYY'), - date_trunc('day',t.date_start), t.company_id, t.partner_id, t.type, diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml index a4a072849b9..89d44963b64 100644 --- a/addons/project/report/project_report_view.xml +++ b/addons/project/report/project_report_view.xml @@ -52,13 +52,13 @@ <field name="arch" type="xml"> <search string="Tasks"> <group> - <filter icon="terp-project" string="This Year" + <filter icon="terp-project" string="Last 365 Days" domain="[('date_start','<=', time.strftime('%%Y-%%m-%%d')),('date_start','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" - help="Tasks performed in this year"/> - <filter icon="terp-project" string="This Month" + help="Tasks performed in last 365 Days"/> + <filter icon="terp-project" string="Last 30 Days" name="month" domain="[('date_start','<=', time.strftime('%%Y-%%m-%%d')), ('date_start','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]" - help="Tasks performed in this month"/> + help="Tasks performed in last 30 days"/> <filter icon="gtk-media-rewind" string=" 7 Days " separator="1" @@ -77,6 +77,10 @@ icon="terp-project" domain="[('state','=','pending')]" help = "Pending tasks"/> + <filter string="Done" + icon="terp-project" + name="done" + domain="[('state','=','done')]"/> <separator orientation="vertical"/> <field name="user_id" widget="selection"> <filter icon="terp-project" @@ -88,7 +92,7 @@ help="Non Assigned Tasks to users" domain="[('user_id','=',False)]"/> </field> - <field name="project_id"> + <field name="project_id" widget="selection"> <filter icon="terp-project" string="My Task" help="My Tasks" @@ -98,25 +102,21 @@ help ="Non assigned tasks to projects" domain="[('project_id','=',False"/> </field> + <field name="company_id" groups="base.group_multi_company" widget="selection"/> </group> <newline/> <group expand="0" string="Extended options..." colspan="10" col="12"> - <filter string="Done" - icon="terp-project" - name="done" - domain="[('state','=','done')]"/> - <filter string="Cancelled" - icon="terp-project" - domain="[('state','=','cancelled')]"/> - <separator orientation="vertical"/> <field name="type" widget="selection"/> - <field name="priority"/> - <field name="partner_id" widget="selection"/> <separator orientation="vertical"/> + <field name="date_start"/> + <separator orientation="vertical"/> <field name="date_deadline"/> <newline/> - <field name="date_start"/> + <field name="priority"/> + <separator orientation="vertical"/> <field name="date_end"/> + <separator orientation="vertical"/> + <field name="partner_id" /> </group> <newline/> <group expand="1" string="Group By..." colspan="10" col="11"> @@ -221,7 +221,7 @@ </record> <!-- Views and action for project dashboard --> - <record id="view_task_by_days_vs_planned_hours_tree" model="ir.ui.view"> + <record id="view_task_by_days_vs_planned_hours_tree" model="ir.ui.view"> <field name="name">task.by.days.vs.planned.hours.tree</field> <field name="model">task.by.days.vs.planned.hours</field> <field name="type">tree</field> @@ -253,5 +253,6 @@ <field name="view_mode">graph,tree</field> <field name="view_id" ref="view_task_by_days_vs_planned_hours_graph"/> </record> + </data> </openerp> diff --git a/addons/project_gtd/i18n/fr.po b/addons/project_gtd/i18n/fr.po index 27f868fbae5..abbd2e8dec7 100644 --- a/addons/project_gtd/i18n/fr.po +++ b/addons/project_gtd/i18n/fr.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-09-08 14:56+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" +"PO-Revision-Date: 2010-05-21 10:32+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 04:14+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: project_gtd @@ -78,7 +78,7 @@ msgstr "Projet par défaut" #. module: project_gtd #: constraint:ir.actions.act_window:0 msgid "Invalid model name in the action definition." -msgstr "" +msgstr "Nom de modèle invalide pour la définition de l'action" #. module: project_gtd #: field:project.gtd.timebox,context4_id:0 @@ -110,12 +110,12 @@ msgstr "Feuilles de temps" #. module: project_gtd #: model:ir.module.module,shortdesc:project_gtd.module_meta_information msgid "Getting Things Done - Time Management Module" -msgstr "" +msgstr "Getting Things Done - Module de Gestion du Temps" #. module: project_gtd #: model:ir.actions.act_window,name:project_gtd.act_timebox_tasks msgid "Timebox Tasks" -msgstr "" +msgstr "Tâche de la Timebox" #. module: project_gtd #: wizard_view:project.gtd.timebox.fill,init:0 @@ -181,7 +181,7 @@ msgstr "Contexte 3" #. module: project_gtd #: wizard_button:project.gtd.timebox.fill,init,process:0 msgid "Add to Timebox" -msgstr "" +msgstr "Ajouter une Timebox" #. module: project_gtd #: field:project.gtd.timebox,context5_id:0 @@ -277,7 +277,7 @@ msgstr "Séquence" #. module: project_gtd #: field:project.gtd.timebox,child_ids:0 msgid "Child Timeboxes" -msgstr "" +msgstr "Timeboxes enfant" #. module: project_gtd #: model:ir.ui.menu,name:project_gtd.menu_open_time_allinbox diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py index b990142e1ea..513bae085bd 100644 --- a/addons/project_issue/__openerp__.py +++ b/addons/project_issue/__openerp__.py @@ -31,8 +31,8 @@ 'author': 'Tiny', 'website': 'http://www.openerp.com', 'depends': [ - 'crm', 'project', + 'hr_timesheet_sheet', ], 'init_xml': [ 'project_issue_data.xml' diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 2de1b9f6b59..f67986526cd 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -36,7 +36,7 @@ class project_issue(osv.osv, crm.crm_case): _name = "project.issue" _description = "Project Issue" _order = "priority, id desc" - _inherit = 'mailgate.thread' + _inherits = {'mailgate.thread': 'thread_id'} def case_open(self, cr, uid, ids, *args): """ @@ -110,6 +110,10 @@ class project_issue(osv.osv, crm.crm_case): return res _columns = { + 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False), + 'id': fields.integer('ID'), + 'name': fields.char('Name', size=128, required=True), + 'active': fields.boolean('Active', required=False), 'create_date': fields.datetime('Creation Date' , readonly=True), 'write_date': fields.datetime('Update Date' , readonly=True), 'date_deadline': fields.date('Deadline'), @@ -138,9 +142,6 @@ class project_issue(osv.osv, crm.crm_case): 'email_cc': fields.text('Watchers Emails', size=252 , help="These people\ will receive a copy of the future" \ " communication between partner and users by email"), - 'stage_id': fields.many2one('crm.case.stage', 'Stage', \ - domain="[('section_id','=',section_id),\ - ('object_id.model', '=', 'crm.phonecall')]"), 'date_open': fields.datetime('Opened', readonly=True), # Project Issue fields 'date_closed': fields.datetime('Closed', readonly=True), @@ -164,13 +165,26 @@ class project_issue(osv.osv, crm.crm_case): method=True, multi='day_close', type="float", store=True), 'assigned_to' : fields.many2one('res.users', 'Assigned to'), } - + def _get_project(self, cr, uid, context): user = self.pool.get('res.users').browse(cr,uid,uid, context=context) if user.context_project_id: return user.context_project_id.id return False + _defaults = { + 'active': lambda *a: 1, + 'user_id': crm.crm_case._get_default_user, + 'partner_id': crm.crm_case._get_default_partner, + 'partner_address_id': crm.crm_case._get_default_partner_address, + 'email_from': crm.crm_case. _get_default_email, + 'state': lambda *a: 'draft', + 'section_id': crm.crm_case. _get_section, + 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c), + 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0], + 'project_id':_get_project, + } + def convert_issue_task(self, cr, uid, ids, context=None): case_obj = self.pool.get('project.issue') data_obj = self.pool.get('ir.model.data') @@ -249,9 +263,5 @@ class project_issue(osv.osv, crm.crm_case): return {'value':{}} return {'value':{}} - _defaults = { - 'project_id':_get_project, - } - project_issue() diff --git a/addons/project_issue/project_issue_demo.xml b/addons/project_issue/project_issue_demo.xml index 7c7764a2e37..ed031672360 100644 --- a/addons/project_issue/project_issue_demo.xml +++ b/addons/project_issue/project_issue_demo.xml @@ -22,7 +22,7 @@ <field eval=""Bug in Accounts module"" name="name"/> <field eval=""agr@agrolait.com"" name="email_from"/> </record> - <record id="crm_case_log_takecorrectiveactions0" model="crm.case.log"> + <record id="crm_case_log_takecorrectiveactions0" model="mailgate.message"> <field eval="time.strftime('%Y-%m-08')" name="date"/> <field name="case_id" ref="crm_case_buginaccountsmodule0"/> <field name="som" ref="base.som_normal"/> diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py index 16dc2eb6ae2..70a08e2c7b4 100644 --- a/addons/project_issue/report/project_issue_report.py +++ b/addons/project_issue/report/project_issue_report.py @@ -66,7 +66,7 @@ class project_issue_report(osv.osv): ('11', 'November'), ('12', 'December')], 'Month', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'create_date': fields.datetime('Create Date', readonly=True), - 'day': fields.char('Day', size=128, readonly=True), + 'day': fields.char('Day', size=128, readonly=True), 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'project.issue')]"), 'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('object_id.model', '=', 'project.issue')]"), 'nbr': fields.integer('# of Issues', readonly=True), diff --git a/addons/project_planning/project_planning_view.xml b/addons/project_planning/project_planning_view.xml index 6302bb7b440..f049f87e5e6 100644 --- a/addons/project_planning/project_planning_view.xml +++ b/addons/project_planning/project_planning_view.xml @@ -112,7 +112,11 @@ <button name="do_reopen" states="done,cancelled" string="Reactivate" type="object" icon="gtk-convert"/> <button name="do_pending" states="open" string="Pending" type="object" icon="gtk-media-pause"/> <button groups="base.group_extended" name="%(project.action_project_task_delegate)d" states="pending,open" string="Delegate" type="action" icon="gtk-sort-descending"/> +<<<<<<< TREE + <button name="do_close" states="pending,open" string="Done" type="object" icon="gtk-jump-to"/> +======= <button name="%(project.action_project_close_task)d" states="pending,open" string="Done" type="action" icon="gtk-jump-to"/> +>>>>>>> MERGE-SOURCE <button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel"/> </group> diff --git a/addons/project_timesheet/report/task_report_view.xml b/addons/project_timesheet/report/task_report_view.xml index e44e399b292..bd94592dee9 100644 --- a/addons/project_timesheet/report/task_report_view.xml +++ b/addons/project_timesheet/report/task_report_view.xml @@ -75,10 +75,6 @@ <filter icon="terp-project" string="This Year" domain="[('year','=',time.strftime('%%Y'))]" help="Tasks performed in this year"/> <filter icon="terp-project" string="This Month" domain="[('month','=',time.strftime('%%m'))]" help="Tasks performed in this month"/> <separator orientation="vertical"/> - <filter string="Start Date" icon="terp-project" domain="[('date_start','=',time.strftime('%%Y/%%m/%%d'))]"/> - <filter string="End Date" icon="terp-project" domain="[('date_end','=',time.strftime('%%Y/%%m/%%d'))]"/> - <filter string="Deadline Date" icon="terp-project" domain="[('date_deadline','=',time.strftime('%%Y/%%m/%%d'))]"/> - <separator orientation="vertical"/> <field name="project_id" select="1"/> <field name="user_id" select="1" widget="selection"> <filter icon="terp-project" string="My Task" domain="[('user_id','=',uid)]" default="1"/> diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py index 76d018680d2..cf177319ea5 100644 --- a/addons/purchase/report/purchase_report.py +++ b/addons/purchase/report/purchase_report.py @@ -54,6 +54,12 @@ class purchase_report(osv.osv): 'location_id': fields.many2one('stock.location', 'Destination', readonly=True), 'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position',readonly=True), 'partner_id':fields.many2one('res.partner', 'Partner', readonly=True), + 'partner_address_id':fields.many2one('res.partner.address', 'Address Contact Name', readonly=True), + 'dest_address_id':fields.many2one('res.partner.address', 'Dest. Address Contact Name',readonly=True), + 'pricelist_id':fields.many2one('product.pricelist', 'Pricelist', readonly=True), + 'date_approve':fields.date('Date Approved', readonly=True), + 'expected_date':fields.date('Expected Date', readonly=True), + 'validator' : fields.many2one('res.users', 'Validated by', readonly=True), 'company_id':fields.many2one('res.company', 'Company', readonly=True), 'user_id':fields.many2one('res.users', 'Responsible', readonly=True), 'quantity': fields.float('# of Products', readonly=True), @@ -76,6 +82,12 @@ class purchase_report(osv.osv): to_char(s.date_order, 'MM') as month, to_char(s.date_order, 'YYYY-MM-DD') as day, s.state, + s.date_approve, + date_trunc('day',s.minimum_planned_date) as expected_date, + s.partner_address_id, + s.dest_address_id, + s.pricelist_id, + s.validator, s.warehouse_id as warehouse_id, s.partner_id as partner_id, s.fiscal_position, @@ -97,6 +109,12 @@ class purchase_report(osv.osv): s.create_uid, s.partner_id, s.location_id, + s.date_approve, + date_trunc('day',s.minimum_planned_date), + s.partner_address_id, + s.pricelist_id, + s.validator, + s.dest_address_id, l.product_id, s.date_order, to_char(s.date_order, 'YYYY'), diff --git a/addons/purchase/report/purchase_report_view.xml b/addons/purchase/report/purchase_report_view.xml index 93918160bd1..70883b5eb05 100644 --- a/addons/purchase/report/purchase_report_view.xml +++ b/addons/purchase/report/purchase_report_view.xml @@ -21,6 +21,8 @@ <field name="arch" type="xml"> <tree string="Purchase Orders Statistics"> <field name="date" invisible="1"/> + <field name="date_approve" invisible="1"/> + <field name="expected_date" invisible="1"/> <field name="user_id" invisible="1"/> <field name="partner_id" invisible="1"/> <field name="product_id" invisible="1"/> @@ -32,6 +34,10 @@ <field name="name" invisible="1"/> <field name="month" invisible="1"/> <field name="warehouse_id" invisible="1"/> + <field name="partner_address_id" invisible="1"/> + <field name="dest_address_id" invisible="1"/> + <field name="pricelist_id" invisible="1"/> + <field name="validator" invisible="1"/> <field name="company_id" invisible="1"/> <field name="state" invisible="1"/> <field name="location_id" invisible="1"/> @@ -46,7 +52,7 @@ <field name="type">search</field> <field name="arch" type="xml"> <search string="Purchase Orders"> - <group> + <group colspan="10" col="12"> <filter icon="terp-purchase" string="This Year" domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" help="Tasks performed in this year"/> @@ -71,6 +77,8 @@ domain="[('state','=','manual')]"/> <separator orientation="vertical"/> + <field name="partner_id" string="Supplier"/> + <field name="product_id"/> <field name="user_id" widget="selection"> <filter icon="terp-purchase" string="My Purchaes" @@ -81,38 +89,52 @@ help="Purchase Non User" domain="[('user_id','=',False)]"/> </field> - <field name="partner_id"/> - <field name="product_id"/> - + <field name="company_id" groups="base.group_multi_company" widget="selection"/> </group> <newline/> <group expand="0" string="Extended options..." colspan="10" col="12"> <filter icon="terp-purchase" string="Shipping Exception" domain="[('state','=','shipping_except')]"/> <filter icon="terp-purchase" string="Done" domain="[('state','=','done')]"/> <separator orientation="vertical"/> + <field name="date_approve"/> + <separator orientation="vertical"/> + <field name="partner_address_id"/> <field name="invoice_method"/> <field name="warehouse_id" widget="selection"/> - <field name="location_id" widget="selection"/> + <field name="validator" widget="selection"/> + <newline/> <filter icon="terp-purchase" string="Invoice Exception " domain="[('state','=','invoice_except')]"/> <filter icon="terp-purchase" string="Cancel" domain="[('state','=','cancel')]"/> <separator orientation="vertical"/> + <field name="expected_date"/> + <separator orientation="vertical"/> + <field name="dest_address_id"/> <field name="fiscal_position" widget="selection"/> - <field name="company_id" groups="base.group_multi_company" widget="selection"/> - <field name="date"/> + <field name="location_id" widget="selection"/> + <field name="pricelist_id" widget="selection"/> + + <newline/> + <field name="date"/> </group> <newline/> <group expand="1" string="Group By..." colspan="10" col="12"> <filter string="Company" icon="terp-purchase" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> <filter string="Warehouse" icon="terp-purchase" context="{'group_by':'warehouse_id'}"/> <filter string="Location" icon="terp-purchase" context="{'group_by':'location_id'}"/> + <separator orientation="vertical"/> <filter string="Responsible" name="Responsible" icon="terp-purchase" context="{'group_by':'user_id'}"/> + <filter string="Pricelist" icon="terp-purchase" context="{'group_by':'pricelist_id'}"/> + <filter string="Validated by" icon="terp-purchase" context="{'group_by':'validator'}"/> <separator orientation="vertical"/> + <filter string="Address Contact Name" icon="terp-purchase" context="{'group_by':'partner_address_id'}"/> + <filter string="Dest. Contact Name" icon="terp-purchase" context="{'group_by':'dest_address_id'}"/> <filter string="Product" icon="terp-purchase" context="{'group_by':'product_id'}"/> - <filter string="Partner" name="partner_id" icon="terp-purchase" context="{'group_by':'partner_id'}"/> + <separator orientation="vertical"/> + <filter string="Supplier" name="partner_id" icon="terp-purchase" context="{'group_by':'partner_id'}"/> <filter string="State" icon="terp-purchase" context="{'group_by':'state'}"/> <filter string="Fiscal Position" icon="terp-purchase" context="{'group_by':'fiscal_position'}"/> - <separator orientation="vertical"/> + <newline/> <filter string="Day" icon="terp-purchase" context="{'group_by':'day'}"/> <filter string="Month" icon="terp-purchase" context="{'group_by':'month'}"/> <filter string="Year" icon="terp-purchase" context="{'group_by':'name'}"/> diff --git a/addons/sale/i18n/fr.po b/addons/sale/i18n/fr.po index 3d9f2727a80..c81d4b09f23 100644 --- a/addons/sale/i18n/fr.po +++ b/addons/sale/i18n/fr.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.4\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-11-17 10:31+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" +"PO-Revision-Date: 2010-05-22 09:28+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 04:09+0000\n" +"X-Launchpad-Export-Date: 2010-05-23 03:57+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: sale @@ -210,7 +210,7 @@ msgstr "Politique d'expédition" #. module: sale #: selection:sale.order,state:0 selection:sale.order.line,state:0 msgid "Cancelled" -msgstr "" +msgstr "Annuler" #. module: sale #: selection:sale.order,state:0 diff --git a/addons/sale/i18n/pl.po b/addons/sale/i18n/pl.po index 2016f908fe8..5a29059512f 100644 --- a/addons/sale/i18n/pl.po +++ b/addons/sale/i18n/pl.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0_rc3\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2010-05-17 14:08+0000\n" +"PO-Revision-Date: 2010-05-21 08:21+0000\n" "Last-Translator: Grzegorz Grzelak (Cirrus.pl) <Unknown>\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: 2010-05-19 05:12+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: sale @@ -222,7 +222,7 @@ msgstr "Wydawanie produktów" #. module: sale #: view:sale.order:0 msgid "Reference" -msgstr "Odnośnik" +msgstr "Numer" #. module: sale #: selection:sale.config.picking_policy,picking_policy:0 diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py index d1081a4b21f..c8b616ced78 100644 --- a/addons/sale/report/sale_report.py +++ b/addons/sale/report/sale_report.py @@ -57,6 +57,12 @@ class sale_report(osv.osv): ('done', 'Done'), ('cancel', 'Cancelled') ], 'Order State', readonly=True), + 'partner_invoice_id': fields.many2one('res.partner.address', 'Invoice Address Name', readonly=True), + 'partner_order_id': fields.many2one('res.partner.address', 'Ordering Contact Name', readonly=True), + 'partner_shipping_id': fields.many2one('res.partner.address', 'Shipping Address Name', readonly=True), + 'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True), + 'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True), + 'date_confirm': fields.date('Confirmation Date', readonly=True) } _order = 'date desc' def init(self, cr): @@ -81,7 +87,13 @@ class sale_report(osv.osv): sum(l.product_uom_qty*l.price_unit) as price_total, (sum(l.product_uom_qty*l.price_unit)/sum(l.product_uom_qty * u.factor))::decimal(16,2) as price_average, count(*) as nbr, - s.state + s.state, + s.partner_invoice_id as partner_invoice_id, + s.partner_order_id as partner_order_id, + s.partner_shipping_id as partner_shipping_id, + s.pricelist_id as pricelist_id, + s.project_id as analytic_account_id, + s.date_confirm as date_confirm from sale_order_line l left join @@ -97,7 +109,13 @@ class sale_report(osv.osv): s.shop_id, s.company_id, s.fiscal_position, - s.payment_term + s.payment_term, + s.partner_invoice_id, + s.partner_order_id, + s.partner_shipping_id, + s.pricelist_id, + s.project_id, + s.date_confirm ) """) sale_report() @@ -167,10 +185,14 @@ class product_bought_by_sale_order(osv.osv): _name = "product.bought.by.sale.order" _description = "Product bought by sale order" _auto = False - _rec_name = 'partner' + _rec_name = 'month' _columns = { 'total_products': fields.integer('Total Products', readonly=True), - 'name': fields.char('Sale order', size=64, readonly=True) + 'product_id':fields.many2one('product.product', 'Product', 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), + 'year': fields.char('Year', size=64, readonly=True) } _order = 'total_products desc' def init(self, cr): @@ -179,8 +201,10 @@ class product_bought_by_sale_order(osv.osv): create or replace view product_bought_by_sale_order as ( select min(s.id) as id, - count(*) as total_products, - s.name as name + l.product_id as product_id, + to_char(l.create_date, 'MM') as month, + to_char(l.create_date, 'YYYY') as year, + count(*) as total_products from sale_order_line l left join @@ -188,7 +212,7 @@ class product_bought_by_sale_order(osv.osv): where s.state='manual' or s.state='progress' group by - s.name + l.product_id, to_char(l.create_date, 'MM'), to_char(l.create_date, 'YYYY') ) """) product_bought_by_sale_order() diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml index 72707f6e01d..332a551ec5d 100644 --- a/addons/sale/report/sale_report_view.xml +++ b/addons/sale/report/sale_report_view.xml @@ -24,6 +24,12 @@ <field name="state" invisible="1"/> <field name="fiscal_position" invisible="1"/> <field name="payment_term" invisible="1"/> + <field name="partner_invoice_id" invisible="1"/> + <field name="partner_order_id" invisible="1"/> + <field name="partner_shipping_id" invisible="1"/> + <field name="pricelist_id" invisible="1"/> + <field name="analytic_account_id" invisible="1"/> + <field name="date_confirm" invisible="1"/> </tree> </field> </record> @@ -97,8 +103,16 @@ <filter icon="terp-sale" string="Done" domain="[('state','=','done')]"/> <filter icon="terp-sale" string="Cancelled" domain="[('state','=','cancel')]"/> <separator orientation="vertical"/> + <field name="partner_invoice_id"/> + <field name="partner_order_id"/> + <field name="partner_shipping_id"/> + <separator orientation="vertical"/> + <field name="pricelist_id" widget="selection"/> + <field name="analytic_account_id"/> + <newline/> <field name="company_id" groups="base.group_multi_company" widget="selection"/> <field name="date"/> + <field name="date_confirm"/> </group> <newline/> <newline/> @@ -113,8 +127,15 @@ <filter string="Payment Term" icon="terp-sale" context="{'group_by':'payment_term'}"/> <filter string="State" icon="terp-sale" context="{'group_by':'state'}"/> <separator orientation="vertical"/> + <filter string="Pricelist" icon="terp-sale" context="{'group_by':'pricelist_id'}"/> + <filter string="Analytic Account" icon="terp-sale" context="{'group_by':'analytic_account_id'}"/> + <newline/> + <filter string="Invoice Address Name" icon="terp-sale" context="{'group_by':'partner_invoice_id'}"/> + <filter string="Ordering Contact Name" icon="terp-sale" context="{'group_by':'partner_order_id'}"/> + <filter string="Shipping Address Name" icon="terp-sale" context="{'group_by':'partner_shipping_id'}"/> + <separator orientation="vertical"/> <filter string="Day" icon="terp-sale" context="{'group_by':'day'}"/> - <filter string="Month" icon="terp-sale" context="{'group_by':'date'}"/> + <filter string="Month" icon="terp-sale" context="{'group_by':'month'}"/> <filter string="Year" icon="terp-sale" context="{'group_by':'year'}"/> </group> </search> @@ -205,7 +226,9 @@ <field name="type">tree</field> <field name="arch" type="xml"> <tree string="Product bought by sale order"> - <field name="name"/> + <field name="product_id"/> + <field name="month"/> + <field name="year"/> <field name="total_products"/> </tree> </field> @@ -217,8 +240,9 @@ <field name="type">graph</field> <field name="arch" type="xml"> <graph string="Product bought by sale order" type="bar"> - <field name="name"/> - <field name="total_products" operator="+"/> + <field name="product_id" select="1"/> + <field name="total_products" select="1"/> + <field name="month" group = "True"/> </graph> </field> </record> @@ -227,7 +251,8 @@ <field name="name">Product bought by sale order</field> <field name="res_model">product.bought.by.sale.order</field> <field name="view_type">form</field> - <field name="view_mode">tree,graph</field> + <field name="view_mode">graph,tree</field> + <field name="domain">[('year','=', time.strftime('%Y'))]</field> <field name="view_id" ref="view_product_bought_by_sale_order_tree"/> </record> diff --git a/addons/scrum/i18n/fr.po b/addons/scrum/i18n/fr.po index 5dd1943ab4a..9d1982fc341 100644 --- a/addons/scrum/i18n/fr.po +++ b/addons/scrum/i18n/fr.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-09-08 13:49+0000\n" -"Last-Translator: nel <nel@tinyerp.com>\n" +"PO-Revision-Date: 2010-05-22 09:49+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 03:59+0000\n" +"X-Launchpad-Export-Date: 2010-05-23 03:57+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: scrum @@ -29,7 +29,7 @@ msgstr "Nom du Rendez-vous" #. module: scrum #: model:process.transition,note:scrum.process_transition_backlogtask0 msgid "From backlog create task." -msgstr "" +msgstr "Créer une tâche à partir du référentiel" #. module: scrum #: model:ir.actions.act_window,name:scrum.action_view_task4 @@ -46,17 +46,17 @@ msgstr "Mes Sprints Ouverts (Directeur de Produit)" #. module: scrum #: model:process.node,note:scrum.process_node_productbacklog0 msgid "Create task from backlogs" -msgstr "" +msgstr "Créer une tâche à partir des référentiels" #. module: scrum #: constraint:ir.actions.act_window:0 msgid "Invalid model name in the action definition." -msgstr "" +msgstr "Nom de modèle invalide pour la définition de l'action" #. module: scrum #: model:ir.module.module,shortdesc:scrum.module_meta_information msgid "Scrum, Agile Development Method" -msgstr "" +msgstr "Scrum, méthode de développement agile" #. module: scrum #: field:scrum.project,progress_rate:0 @@ -69,6 +69,8 @@ msgid "" "Total remaining time, can be re-estimated periodically by the assignee of " "the task." msgstr "" +"Le temps restant total peut être réévalué périodiquement par le prescripteur " +"de la tâche." #. module: scrum #: field:scrum.project,child_id:0 @@ -88,7 +90,7 @@ msgstr "Est-ce que l'estimation du Retard du Sprint est correcte ?" #. module: scrum #: field:scrum.project,members:0 msgid "Project Members" -msgstr "" +msgstr "Membres du projet" #. module: scrum #: view:scrum.project:0 @@ -106,6 +108,8 @@ msgid "" "Header added at the beginning of the email for the warning message sent to " "the customer when a task is closed." msgstr "" +"L'entête est ajouté au début de l'email pour que le message d'avertissement " +"soit envoyer au client lorsque la tâche est fermé." #. module: scrum #: field:scrum.task,priority:0 @@ -127,6 +131,8 @@ msgstr "Voir le Retard du Projet" msgid "" "Project's member. Not used in any computation, just for information purpose." msgstr "" +"Membre du projet. Non utilisé dans aucun calcul, juste proposer à titre " +"d'information" #. module: scrum #: selection:scrum.product.backlog,priority:0 @@ -150,6 +156,8 @@ msgid "" "Estimated time to do the task, usually set by the project manager when the " "task is in draft state." msgstr "" +"Temps estimé pour réaliser la tâche, habituellement fixé par le responsable " +"du projet quand la tâche est à l'état brouillon" #. module: scrum #: field:scrum.project,notes:0 @@ -175,6 +183,8 @@ msgid "" "If you check this field, the project manager will receive a request each " "time a task is completed by his team." msgstr "" +"Si vous cochez ce champs, le responsable du projet recevra une requête " +"chaque fois qu'une tâche est completé par son équipe." #. module: scrum #: selection:scrum.project,state:0 @@ -190,7 +200,7 @@ msgstr "Nom de l'équipe" #. module: scrum #: field:scrum.project,warn_header:0 msgid "Mail Header" -msgstr "" +msgstr "En-tête de courrier" #. module: scrum #: field:scrum.project,sprint_size:0 @@ -205,7 +215,7 @@ msgstr "Date de fin" #. module: scrum #: help:scrum.task,effective_hours:0 msgid "Computed using the sum of the task work done." -msgstr "" +msgstr "Calculé en utilisant la somme du travail de tâche effectuée." #. module: scrum #: help:scrum.project,warn_customer:0 @@ -213,6 +223,8 @@ msgid "" "If you check this, the user will have a popup when closing a task that " "propose a message to send by email to the customer." msgstr "" +"Si vous cochez la case, l'utilisateur verra un menu surgissant quand une " +"tâche sera fermé proposant un message pour envoyer un mail au client." #. module: scrum #: model:ir.actions.act_window,name:scrum.action_sprint_task_open @@ -239,7 +251,7 @@ msgstr "Date limite" #: field:scrum.project,partner_id:0 #: field:scrum.task,partner_id:0 msgid "Partner" -msgstr "" +msgstr "Partenaire" #. module: scrum #: field:scrum.product.backlog,planned_hours:0 @@ -251,7 +263,7 @@ msgstr "Heures planifiés" #. module: scrum #: selection:scrum.project,state:0 msgid "Template" -msgstr "" +msgstr "Modèle" #. module: scrum #: field:scrum.product.backlog,priority:0 @@ -268,11 +280,12 @@ msgstr "État" #: help:scrum.project,progress_rate:0 msgid "Percent of tasks closed according to the total of tasks todo." msgstr "" +"Pourcentage des tâches fermés en accord avec le total des tâches à faire." #. module: scrum #: help:scrum.project,notes:0 msgid "Internal description of the project." -msgstr "" +msgstr "Description interne du projet" #. module: scrum #: field:scrum.sprint,meetings_id:0 @@ -282,7 +295,7 @@ msgstr "Scrum Journalier" #. module: scrum #: help:scrum.task,total_hours:0 msgid "Computed as: Time Spent + Remaining Time." -msgstr "" +msgstr "Calculer comme: Temps passé + Temps restant" #. module: scrum #: field:scrum.task,type:0 @@ -292,7 +305,7 @@ msgstr "Type" #. module: scrum #: view:scrum.project:0 msgid "Scrum Data" -msgstr "" +msgstr "Données Scrum" #. module: scrum #: selection:scrum.product.backlog,priority:0 @@ -303,7 +316,7 @@ msgstr "Moyenne" #. module: scrum #: field:scrum.project,total_hours:0 msgid "Total Time" -msgstr "" +msgstr "Temps Total" #. module: scrum #: model:ir.ui.menu,name:scrum.next_id_67 @@ -356,7 +369,7 @@ msgstr "Voir les tâches du projet" #. module: scrum #: field:scrum.task,delay_hours:0 msgid "Delay Hours" -msgstr "" +msgstr "Delais en heures" #. module: scrum #: field:scrum.project,contact_id:0 @@ -392,18 +405,18 @@ msgstr "Créer tâches" #. module: scrum #: field:scrum.task,progress:0 msgid "Progress (%)" -msgstr "" +msgstr "Progression (%)" #. module: scrum #: help:scrum.task,progress:0 msgid "Computed as: Time Spent / Total Time." -msgstr "" +msgstr "Calculer comme: Temps passé / Temps total" #. module: scrum #: field:scrum.project,scrum:0 #: field:scrum.task,scrum:0 msgid "Is Scrum" -msgstr "" +msgstr "Est Scrum" #. module: scrum #: model:ir.actions.act_window,name:scrum.action_product_backlog_form_draft @@ -482,7 +495,7 @@ msgstr "Mes Tâches Ouvertes" #. module: scrum #: field:scrum.project,manager:0 msgid "Project Manager" -msgstr "" +msgstr "Responsable du projet" #. module: scrum #: selection:scrum.project,state:0 @@ -511,13 +524,13 @@ msgstr "Sprints Ouverts" #. module: scrum #: field:scrum.project,effective_hours:0 msgid "Time Spent" -msgstr "" +msgstr "Temps écoulé" #. module: scrum #: field:scrum.project,complete_name:0 #: field:scrum.project,name:0 msgid "Project Name" -msgstr "" +msgstr "Nom du Projet" #. module: scrum #: field:scrum.project,product_owner_id:0 @@ -561,6 +574,9 @@ msgid "" "Computed as: Total Time - Estimated Time. It gives the difference of the " "time estimated by the project manager and the real time to close the task." msgstr "" +"Calculer comme: Temps total - Temps estimé. Cela donne la différence de " +"temps estimé par le responsable projet et le temps réel pour fermer cette " +"tâche." #. module: scrum #: field:scrum.task,timebox_id:0 @@ -576,7 +592,7 @@ msgstr "Sprints Brouillon" #. module: scrum #: field:scrum.project,timesheet_id:0 msgid "Working Time" -msgstr "" +msgstr "Temps de travail" #. module: scrum #: field:scrum.task,work_ids:0 @@ -591,7 +607,7 @@ msgstr "Voir les retards du sprint" #. module: scrum #: field:scrum.task,delegated_user_id:0 msgid "Delegated To" -msgstr "" +msgstr "Déléguer à" #. module: scrum #: field:scrum.task,date_close:0 @@ -611,7 +627,7 @@ msgstr "Retard Correct" #. module: scrum #: help:scrum.project,effective_hours:0 msgid "Sum of spent hours of all tasks related to this project." -msgstr "" +msgstr "Total des heures passés de toutes les tâches reliés à ce projet" #. module: scrum #: help:scrum.task,project_id:0 @@ -619,16 +635,18 @@ msgid "" "If you have [?] in the project name, it means there are no analytic account " "linked to this project." msgstr "" +"Si vous avez [?] dans le nom du projet, cela signifie que vous n'avez pas de " +"compte analytique lié à ce projet" #. module: scrum #: help:scrum.project,planned_hours:0 msgid "Sum of planned hours of all tasks related to this project." -msgstr "" +msgstr "Somme des tâches planifiés de toutes les tâches relier à ce projet." #. module: scrum #: field:scrum.project,warn_customer:0 msgid "Warn Partner" -msgstr "" +msgstr "Avertir le partenaire" #. module: scrum #: model:ir.actions.act_window,name:scrum.action_sprint_open_tree4 @@ -648,6 +666,10 @@ msgid "" "projects. It enables you to connect projects with budgets, planning, cost " "and revenue analysis, timesheets on projects, etc." msgstr "" +"Lier ce projet à un compte analytique si vous souhaitez une gestion " +"financière sur les projets. Il vous active la gestion des projets avec les " +"budgets, agenda, coût, analyse de revenu, feuilles de temps sur le projet, " +"etc." #. module: scrum #: selection:scrum.product.backlog,state:0 @@ -680,12 +702,12 @@ msgstr "Heures effectives" #. module: scrum #: field:scrum.project,warn_manager:0 msgid "Warn Manager" -msgstr "" +msgstr "Avertir le responsable" #. module: scrum #: selection:scrum.task,state:0 msgid "In Progress" -msgstr "" +msgstr "En cours" #. module: scrum #: field:scrum.sprint,review:0 diff --git a/addons/smtpclient/i18n/fr.po b/addons/smtpclient/i18n/fr.po new file mode 100644 index 00000000000..ceed71ebce5 --- /dev/null +++ b/addons/smtpclient/i18n/fr.po @@ -0,0 +1,871 @@ +# French translation for openobject-addons +# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2009-11-26 06:00+0000\n" +"PO-Revision-Date: 2010-05-22 09:14+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\n" +"Language-Team: French <fr@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2010-05-23 03:57+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#. module: smtpclient +#: field:email.smtpclient.queue,bcc:0 +msgid "BCC to" +msgstr "Copie cachée à" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "__number__ for Invoice / Sales Number" +msgstr "__number__ pour la facture / Numéro de vente" + +#. module: smtpclient +#: field:email.smtpclient,ssl:0 +msgid "Use SSL?" +msgstr "Utiliser SSL?" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Start Server" +msgstr "Démarrer le serveur" + +#. module: smtpclient +#: model:ir.actions.wizard,name:smtpclient.wizard_email_verifycode +msgid "Verify Server" +msgstr "Vérifier le serveur" + +#. module: smtpclient +#: field:email.smtpclient,priority:0 +msgid "Server Priority" +msgstr "Priorité du serveur" + +#. module: smtpclient +#: help:email.sendcode,init,emailto:0 +msgid "Enter the address Email where you want to get the Verification Code" +msgstr "" +"Saisir l'adresse email à laquelle vous voulez envoyer le code de vérification" + +#. module: smtpclient +#: selection:email.smtpclient,auth_type:0 +msgid "Other Mail Servers" +msgstr "Autres serveurs de courrier" + +#. module: smtpclient +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "Nom de modèle invalide pour la définition de l'action" + +#. module: smtpclient +#: field:email.smtpclient.queue,to:0 +msgid "Mail to" +msgstr "Envoyer par email à" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "Message Error!" +msgstr "Erreur de message!" + +#. module: smtpclient +#: field:email.smtpclient,name:0 +msgid "Server Name" +msgstr "Nom du serveur" + +#. module: smtpclient +#: field:email.smtpclient,header_ids:0 +msgid "Default Headers" +msgstr "Entêtes de courrier par défaut" + +#. module: smtpclient +#: wizard_button:email.testemail,init,send:0 +msgid "Send Email" +msgstr "Envoyer un email" + +#. module: smtpclient +#: field:res.company.address,company_id:0 +msgid "Company" +msgstr "Société" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Set to Draft" +msgstr "Mettre en brouillon" + +#. module: smtpclient +#: code:addons/smtpclient/wizard/verifycode.py:0 +#, python-format +msgid "Server already verified!" +msgstr "Serveur déjà vérifié!" + +#. module: smtpclient +#: code:addons/smtpclient/wizard/sendcode.py:0 +#: code:addons/smtpclient/wizard/testemail.py:0 +#, python-format +msgid "Verification Failed. Please check the Server Configuration!" +msgstr "" +"Échec de vérification. Merci de vérifier le serveur de configuration!" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "SMTP Server Error!" +msgstr "Erreur du serveur SMTP!" + +#. module: smtpclient +#: field:email.smtpclient,auth_type:0 +#: field:email.smtpclient,type:0 +msgid "Server Type" +msgstr "Type de serveur" + +#. module: smtpclient +#: field:email.smtpclient,from_email:0 +msgid "Email From" +msgstr "Email de" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "User Information" +msgstr "Information utilisateur" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "OpenERP SMTP server Email Registration Code!" +msgstr "Code d'enregistrement email du serveur SMTP OpenERP!" + +#. module: smtpclient +#: model:ir.model,name:smtpclient.model_report_smtp_server +#: view:report.smtp.server:0 +msgid "Server Statistics" +msgstr "Statistiques du serveur" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Messages" +msgstr "Messages" + +#. module: smtpclient +#: selection:email.smtpclient,type:0 +#: selection:res.company.address,name:0 +msgid "Sale" +msgstr "Vente" + +#. module: smtpclient +#: field:email.headers,value:0 +msgid "Value" +msgstr "Valeur" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Access Permission" +msgstr "Permission d'accès" + +#. module: smtpclient +#: model:ir.model,name:smtpclient.model_email_headers +msgid "Email Headers" +msgstr "Entêtes de courrier" + +#. module: smtpclient +#: field:email.smtpclient,delete_queue:0 +msgid "Queue Option" +msgstr "Option de file d'attente" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "Please configure Email Server Messages [Verification / Test]" +msgstr "" +"Merci de configurer les messages du serveur email [Vérification / Test]" + +#. module: smtpclient +#: code:addons/smtpclient/wizard/verifycode.py:0 +#, python-format +msgid "Verification failed. Invalid Verification Code!" +msgstr "Échec de vérification. Code de vérification non valide!" + +#. module: smtpclient +#: model:ir.actions.act_window,name:smtpclient.act_mail_server_2_mail_history +msgid "Email History" +msgstr "Historique des emails" + +#. module: smtpclient +#: view:email.smtpclient.history:0 +msgid "Server History" +msgstr "Historique du serveur" + +#. module: smtpclient +#: selection:email.smtpclient,auth_type:0 +msgid "Yahoo!!! Server" +msgstr "Serveur Yahoo!" + +#. module: smtpclient +#: view:email.smtpclient:0 +#: field:email.smtpclient,test_email:0 +msgid "Test Message" +msgstr "Message de test" + +#. module: smtpclient +#: field:report.smtp.server,server_id:0 +msgid "Server ID" +msgstr "ID du serveur" + +#. module: smtpclient +#: help:email.smtpclient,delete_queue_period:0 +msgid "delete emails/contents from email queue after specified no of days" +msgstr "" +"effacer les emails/contenu placé en attente après le nombre de jours spécifié" + +#. module: smtpclient +#: field:report.smtp.server,no:0 +msgid "Total No." +msgstr "Nombre total" + +#. module: smtpclient +#: help:email.smtpclient,process_id:0 +msgid "Mail Transport Agent Process" +msgstr "Processus d'agent de transport email" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "__user__ for User Name" +msgstr "__user__ pour le nom d'utilisateur" + +#. module: smtpclient +#: field:email.smtpclient,date_create:0 +msgid "Date Create" +msgstr "Date de création" + +#. module: smtpclient +#: field:email.smtpclient,state:0 +msgid "Server Status" +msgstr "État du serveur" + +#. module: smtpclient +#: field:email.smtpclient.queue,error:0 +msgid "Last Error" +msgstr "Dernière erreur" + +#. module: smtpclient +#: wizard_view:email.sendcode,init:0 +#: wizard_button:email.sendcode,init,send:0 +msgid "Send Code" +msgstr "Envoyer un code" + +#. module: smtpclient +#: field:email.smtpclient.queue,name:0 +msgid "Subject" +msgstr "Sujet" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "Read Error!" +msgstr "Erreur de lecture!" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "Unable to read Server Settings" +msgstr "Impossible de lire les paramètres du serveur" + +#. module: smtpclient +#: field:email.smtpclient,server_statistics:0 +msgid "Statistics" +msgstr "Statistiques" + +#. module: smtpclient +#: wizard_view:email.testemail,init:0 +msgid "Test Email" +msgstr "Email de test" + +#. module: smtpclient +#: field:email.smtpclient.history,server_id:0 +msgid "Smtp Server" +msgstr "Serveur SMTP" + +#. module: smtpclient +#: field:res.company,addresses:0 +msgid "Email Addresses" +msgstr "Adresses email" + +#. module: smtpclient +#: model:ir.actions.act_window,name:smtpclient.action_email_smtpclient_history_tree +#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_server_history +msgid "Email Server History" +msgstr "Historique du serveur email" + +#. module: smtpclient +#: selection:email.smtpclient.queue,state:0 +msgid "Waiting" +msgstr "En attente" + +#. module: smtpclient +#: help:email.testemail,init,emailto:0 +msgid "Enter the address Email where you want to get the Test Email" +msgstr "" +"Saisir l'adresse email à laquelle vous voulez recevoir l'email de test" + +#. module: smtpclient +#: selection:email.smtpclient,state:0 +msgid "Not Verified" +msgstr "Non vérifié" + +#. module: smtpclient +#: field:email.smtpclient.history,email:0 +msgid "Email" +msgstr "Email" + +#. module: smtpclient +#: selection:email.smtpclient.queue,state:0 +msgid "Sent" +msgstr "Envoyé" + +#. module: smtpclient +#: field:email.smtpclient.history,user_id:0 +msgid "Username" +msgstr "Nom d'utilisateur" + +#. module: smtpclient +#: field:res.company.address,name:0 +msgid "Address Type" +msgstr "Type d'adresse" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Permission" +msgstr "Permission" + +#. module: smtpclient +#: view:email.smtpclient.queue:0 +msgid "Message with All Headers" +msgstr "Message avec entêtes complètes" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Message Headers" +msgstr "Entêtes de message" + +#. module: smtpclient +#: field:ir.actions.server,report_id:0 +msgid "Report" +msgstr "Rapport" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Other Information" +msgstr "Autre information" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Configuration" +msgstr "Configuration" + +#. module: smtpclient +#: constraint:ir.cron:0 +msgid "Invalid arguments" +msgstr "Paramètres non valides" + +#. module: smtpclient +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "XML non valide pour l'architecture de la vue !" + +#. module: smtpclient +#: view:email.smtpclient:0 +#: field:email.smtpclient,disclaimers:0 +msgid "Disclaimers" +msgstr "Avertissement de responsabilité limitée" + +#. module: smtpclient +#: field:report.smtp.server,name:0 +msgid "Server" +msgstr "Serveur" + +#. module: smtpclient +#: view:res.company:0 +msgid "SMTP Settings" +msgstr "Paramètres SMTP" + +#. module: smtpclient +#: help:email.smtpclient,body:0 +msgid "" +"The message text that will be send along with the email which is send " +"through this server" +msgstr "Le message texte qui sera envoyé avec l'email envoyé par ce serveur" + +#. module: smtpclient +#: model:ir.actions.wizard,name:smtpclient.wizard_email_testemail +msgid "Send Test Email" +msgstr "Envoyer email de test" + +#. module: smtpclient +#: model:ir.model,name:smtpclient.model_email_smtpclient_queue +msgid "Email Queue" +msgstr "File d'attente email" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Server Information" +msgstr "Information sur le serveur" + +#. module: smtpclient +#: help:email.verifycode,init,code:0 +msgid "Enter the verification code thay you get in your verification Email" +msgstr "" +"Saisir le code de vérification que vous avez reçu dans votre email de " +"vérification" + +#. module: smtpclient +#: model:ir.model,name:smtpclient.model_email_smtpclient_history +msgid "Email Client History" +msgstr "Historique du client email" + +#. module: smtpclient +#: selection:email.smtpclient,delete_queue:0 +msgid "Never Delete Message" +msgstr "Ne jamais effacer le message" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "OpenERP Test Email!" +msgstr "Email de test OpenERP!" + +#. module: smtpclient +#: view:email.smtpclient:0 +#: field:email.smtpclient,body:0 +#: view:email.smtpclient.queue:0 +#: field:email.smtpclient.queue,serialized_message:0 +msgid "Message" +msgstr "Message" + +#. module: smtpclient +#: field:email.smtpclient,process_id:0 +msgid "MTA Process" +msgstr "Processus MTA" + +#. module: smtpclient +#: field:email.headers,server_id:0 +#: view:email.smtpclient:0 +#: field:email.smtpclient,server:0 +#: field:email.smtpclient.queue,server_id:0 +#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_smtp_server +msgid "SMTP Server" +msgstr "Serveur SMTP" + +#. module: smtpclient +#: selection:email.smtpclient,auth_type:0 +msgid "Google Server" +msgstr "Serveur Google" + +#. module: smtpclient +#: selection:email.smtpclient,state:0 +msgid "Verified" +msgstr "Vérifié" + +#. module: smtpclient +#: help:email.smtpclient,priority:0 +msgid "" +"Priority between 0 to 10, will be used to define the MTA process priotiry" +msgstr "" +"Priorité de 0 à 10, utilisé pour définir les priorités des processus MTA" + +#. module: smtpclient +#: field:email.smtpclient,port:0 +msgid "SMTP Port" +msgstr "Port SMTP" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "Email TO Address not Defined !" +msgstr "Adresse d'envoi non définie!" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "SMTP Server Error !" +msgstr "Erreur de serveur SMTP!" + +#. module: smtpclient +#: field:email.smtpclient,auth:0 +msgid "Use Auth" +msgstr "Utiliser l'authentification" + +#. module: smtpclient +#: field:email.smtpclient,pstate:0 +msgid "Server Statue" +msgstr "État du serveur" + +#. module: smtpclient +#: field:email.smtpclient,user:0 +msgid "User Name" +msgstr "Nom d'utilisateur" + +#. module: smtpclient +#: field:email.smtpclient,verify_email:0 +msgid "Verify Message" +msgstr "Vérifiez le message" + +#. module: smtpclient +#: model:ir.model,name:smtpclient.model_email_smtpclient +#: model:ir.module.module,shortdesc:smtpclient.module_meta_information +msgid "Email Client" +msgstr "Client email" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Disclaimers Message" +msgstr "Message sur la limitation de garantie" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "__code__ for Verification Code" +msgstr "__code__ pour le Code de Vérification" + +#. module: smtpclient +#: selection:email.smtpclient.queue,state:0 +msgid "Queued" +msgstr "File d'attente" + +#. module: smtpclient +#: field:email.smtpclient.history,date_create:0 +#: field:email.smtpclient.queue,date_create:0 +msgid "Date" +msgstr "Date" + +#. module: smtpclient +#: field:email.smtpclient.queue,cc:0 +msgid "CC to" +msgstr "En copie à" + +#. module: smtpclient +#: model:email.smtpclient,verify_email:smtpclient.email_smtpclient_sendmailserver0 +msgid "" +"Verification Message. This is the code\n" +"__code__ \n" +"you must copy in the OpenERP Email Server (Verify Server wizard).\n" +"Created by user __user__" +msgstr "" +"Message de vérification. Ceci est le code\n" +"__code__ \n" +"que vous devez saisir dans le serveur email OpenERP (assistant Vérification " +"du Serveur).\n" +"Créé par utilisateur __utilisateur__" + +#. module: smtpclient +#: view:email.smtpclient.queue:0 +#: model:ir.actions.act_window,name:smtpclient.action_email_smtpclient_queue_tree +#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_smtp_server_queue +msgid "Message Queue" +msgstr "File d'attente des messages" + +#. module: smtpclient +#: selection:email.smtpclient,type:0 +#: selection:res.company.address,name:0 +msgid "Default" +msgstr "Défaut" + +#. module: smtpclient +#: selection:email.smtpclient,delete_queue:0 +msgid "Delete Content After" +msgstr "Effacer le contenu après" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "You have no permission to access SMTP Server : %s " +msgstr "Vous n'avez aucune permission d'accès au serveur SMTP : %s " + +#. module: smtpclient +#: field:email.smtpclient,active:0 +msgid "Active" +msgstr "Actif" + +#. module: smtpclient +#: model:ir.actions.act_window,name:smtpclient.act_mail_server_2_mail_queue +msgid "Message Queus" +msgstr "File d'attente des messages" + +#. module: smtpclient +#: code:addons/smtpclient/wizard/sendcode.py:0 +#: code:addons/smtpclient/wizard/testemail.py:0 +#: code:addons/smtpclient/wizard/verifycode.py:0 +#: view:email.smtpclient.queue:0 +#: selection:email.smtpclient.queue,state:0 +#, python-format +msgid "Error" +msgstr "Erreur" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "Server Error!" +msgstr "Erreur serveur !" + +#. module: smtpclient +#: selection:email.smtpclient,delete_queue:0 +msgid "Clear All After" +msgstr "Tout effacer après" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "" +"Please verify Email Server, without verification you can not send Email(s)." +msgstr "" +"Merci de vérifier votre serveur email, sans vérification vous ne pouvez pas " +"envoyer d'email(s)." + +#. module: smtpclient +#: field:email.smtpclient,history_line:0 +#: field:report.smtp.server,history:0 +msgid "History" +msgstr "Historique" + +#. module: smtpclient +#: field:email.smtpclient.queue,priority:0 +msgid "Message Priority" +msgstr "Priorité du message" + +#. module: smtpclient +#: field:ir.actions.server,file_ids:0 +msgid "Attachments" +msgstr "Fichiers attachés" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "__name__ for Customer Name" +msgstr "__name__ pour le Nom du Client" + +#. module: smtpclient +#: view:email.smtpclient.queue:0 +msgid "General" +msgstr "Général" + +#. module: smtpclient +#: field:email.headers,key:0 +msgid "Header" +msgstr "Entête" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "" +"Verification Message. This is the code\n" +"\n" +"__code__\n" +"\n" +"you must copy in the OpenERP Email Server (Verify Server wizard).\n" +"\n" +"Created by user __user__" +msgstr "" +"Message de vérification. Voici le code\n" +"\n" +"__code__\n" +"\n" +"Vous devez le copier dans le serveur de couriel d'Open ERP (Assistant de " +"vérification).\n" +"\n" +"Créer par l'utilisateur __user__" + +#. module: smtpclient +#: selection:res.company.address,name:0 +msgid "Invoice" +msgstr "Facture" + +#. module: smtpclient +#: wizard_view:email.verifycode,init:0 +#: wizard_button:email.verifycode,init,check:0 +msgid "Verify Code" +msgstr "Code de vérification" + +#. module: smtpclient +#: wizard_button:email.sendcode,init,end:0 +#: wizard_button:email.testemail,init,end:0 +#: wizard_button:email.verifycode,init,end:0 +msgid "Cancel" +msgstr "Annuler" + +#. module: smtpclient +#: field:email.smtpclient,delete_queue_period:0 +msgid "Delete after" +msgstr "Effacer après" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "Server is not Verified, Please Verify the Server !" +msgstr "Le serveur n'est pas vérifié, merci de vérifier le serveur!" + +#. module: smtpclient +#: field:email.smtpclient.history,resource_id:0 +msgid "Resource ID" +msgstr "ID de la ressource" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "SMTP Data Error !" +msgstr "Erreur de données SMTP !" + +#. module: smtpclient +#: constraint:ir.model:0 +msgid "" +"The Object name must start with x_ and not contain any special character !" +msgstr "" +"Le nom de l'objet doit commencer par x_ et ne doit pas contenir de " +"caractères spéciaux !" + +#. module: smtpclient +#: selection:email.smtpclient,delete_queue:0 +msgid "Delete when Email Sent" +msgstr "Effacer une fois l'email envoyé" + +#. module: smtpclient +#: selection:email.smtpclient,type:0 +msgid "Account" +msgstr "Compte" + +#. module: smtpclient +#: model:ir.module.module,description:smtpclient.module_meta_information +msgid "" +"Email Client module that provides:\n" +" Sending Email\n" +" Use Multiple Server\n" +" Multi Threading\n" +" Multi Attachment\n" +" " +msgstr "" +"Module de client email qui permet d' :\n" +" Envoyer des emails\n" +" Utiliser plusieurs serveurs\n" +" Utiliser plusieurs files d'envoi (multi-threading)\n" +" Envoyer plusieurs fichiers attachés\n" +" " + +#. module: smtpclient +#: selection:email.smtpclient,type:0 +msgid "Stock" +msgstr "Stock" + +#. module: smtpclient +#: field:email.smtpclient.history,name:0 +msgid "Description" +msgstr "Description" + +#. module: smtpclient +#: field:email.smtpclient,code:0 +#: wizard_field:email.verifycode,init,code:0 +msgid "Verification Code" +msgstr "Code de vérifcation" + +#. module: smtpclient +#: selection:email.smtpclient,pstate:0 +msgid "Stop" +msgstr "Arrêter" + +#. module: smtpclient +#: field:email.smtpclient.queue,body:0 +msgid "Email Text" +msgstr "Texte de l'email" + +#. module: smtpclient +#: selection:res.company.address,name:0 +msgid "Delivery" +msgstr "Livraison" + +#. module: smtpclient +#: selection:email.smtpclient,pstate:0 +msgid "Running" +msgstr "En cours" + +#. module: smtpclient +#: view:email.smtpclient.queue:0 +msgid "Last Error occured" +msgstr "Dernière erreur apparu" + +#. module: smtpclient +#: selection:email.smtpclient,state:0 +msgid "Waiting for Verification" +msgstr "En attente de vérification" + +#. module: smtpclient +#: field:email.smtpclient,password:0 +msgid "Password" +msgstr "Mot de passe" + +#. module: smtpclient +#: field:email.smtpclient,users_id:0 +msgid "Users Allowed" +msgstr "Utilisateurs authorisés" + +#. module: smtpclient +#: code:addons/smtpclient/wizard/sendcode.py:0 +#, python-format +msgid "Verification Code Already Generated !" +msgstr "Génération du code de vérification déjà effectuée!" + +#. module: smtpclient +#: wizard_field:email.sendcode,init,emailto:0 +#: field:email.smtpclient,email:0 +#: wizard_field:email.testemail,init,emailto:0 +#: view:res.company:0 +#: field:res.company.address,email:0 +msgid "Email Address" +msgstr "Adresse courriel" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Verification Message" +msgstr "Message de vérification" + +#. module: smtpclient +#: view:email.smtpclient:0 +msgid "Stop Server" +msgstr "Arrêter le serveur" + +#. module: smtpclient +#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_server +msgid "Email Servers" +msgstr "Serveurs email" + +#. module: smtpclient +#: model:ir.actions.wizard,name:smtpclient.wizard_email_sendcode +msgid "Send Verification Code" +msgstr "Envoyer le code de vérification" + +#. module: smtpclient +#: field:email.smtpclient.history,model:0 +msgid "Model" +msgstr "Modèle" + +#. module: smtpclient +#: model:ir.actions.act_window,name:smtpclient.action_email_smtpclient_tree +#: field:ir.actions.server,email_server:0 +msgid "Email Server" +msgstr "Serveur de couriel" + +#. module: smtpclient +#: code:addons/smtpclient/smtpclient.py:0 +#, python-format +msgid "Permission Error!" +msgstr "Erreur de permission !" + +#. module: smtpclient +#: model:ir.model,name:smtpclient.model_res_company_address +msgid "res.company.address" +msgstr "res.company.address" + +#. module: smtpclient +#: field:email.smtpclient.queue,state:0 +msgid "Message Status" +msgstr "État du message" diff --git a/addons/stock/i18n/fr.po b/addons/stock/i18n/fr.po index 6b82ef00f96..26c85ca75c7 100644 --- a/addons/stock/i18n/fr.po +++ b/addons/stock/i18n/fr.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2010-05-20 06:22+0000\n" -"Last-Translator: Olivier (Open ERP) <Unknown>\n" +"PO-Revision-Date: 2010-05-21 10:35+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-05-21 03:37+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: stock @@ -66,7 +66,7 @@ msgstr "Nom de modèle non valide dans la définition de l'action." #: model:ir.module.module,shortdesc:stock.module_meta_information #: model:ir.ui.menu,name:stock.menu_stock_root msgid "Inventory Management" -msgstr "" +msgstr "Gestion des inventaires" #. module: stock #: selection:stock.location,icon:0 @@ -86,7 +86,7 @@ msgstr "STOCK_MEDIA_FORWARD" #. module: stock #: rml:lot.location:0 msgid "Total :" -msgstr "" +msgstr "Total :" #. module: stock #: selection:stock.location,icon:0 @@ -300,7 +300,7 @@ msgstr "Commande(Origine)" #: rml:lot.stock.overview:0 #: rml:lot.stock.overview_all:0 msgid "Grand Total:" -msgstr "" +msgstr "Total:" #. module: stock #: view:stock.location:0 @@ -744,7 +744,7 @@ msgstr "Depuis" #. module: stock #: rml:stock.picking.list:0 msgid "weight" -msgstr "" +msgstr "poids" #. module: stock #: rml:stock.picking.list:0 @@ -1391,7 +1391,7 @@ msgstr "État de la facturation" #. module: stock #: rml:lot.location:0 msgid "Units" -msgstr "" +msgstr "Unités" #. module: stock #: selection:stock.location,icon:0 @@ -1641,7 +1641,7 @@ msgstr "Incoterms" #: rml:lot.stock.overview:0 #: rml:lot.stock.overview_all:0 msgid "Total:" -msgstr "" +msgstr "Total:" #. module: stock #: selection:stock.location,icon:0 @@ -2275,6 +2275,8 @@ msgid "" "Scheduled date for the movement of the products or real date if the move is " "done." msgstr "" +"Date prévisionnelle pour le mouvement du produit ou la date réelle si le " +"mouvement est terminé." #. module: stock #: view:stock.picking:0 diff --git a/addons/stock/i18n/pl.po b/addons/stock/i18n/pl.po index 942cb5d0730..a4406384e8e 100644 --- a/addons/stock/i18n/pl.po +++ b/addons/stock/i18n/pl.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2010-02-26 17:56+0000\n" +"PO-Revision-Date: 2010-05-21 08:22+0000\n" "Last-Translator: Grzegorz Grzelak (Cirrus.pl) <Unknown>\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: 2010-04-17 03:56+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: stock @@ -126,7 +126,7 @@ msgstr "Przyjmowanie produktów" #: field:stock.picking,name:0 #: field:stock.tracking,serial:0 msgid "Reference" -msgstr "Odnośnik" +msgstr "Numer" #. module: stock #: wizard_field:stock.invoice_onshipping,init,group:0 diff --git a/addons/stock/report/report_stock_picking.py b/addons/stock/report/report_stock_picking.py index 7f4ac801399..b6e2a3d3373 100644 --- a/addons/stock/report/report_stock_picking.py +++ b/addons/stock/report/report_stock_picking.py @@ -30,17 +30,30 @@ class report_stock_picking(osv.osv): '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), 'day': fields.char('Day', size=128, readonly=True), - 'reference': fields.char('Reference', size=64, select=True), 'nbr': fields.integer('# of Lines', readonly=True), 'nbp': fields.integer('# of Picking', readonly=True), 'partner_id':fields.many2one('res.partner', 'Partner', readonly=True), 'product_qty': fields.float('# of Products', readonly=True), + 'product_uos_qty': fields.float('# of Products', readonly=True), + 'product_id': fields.many2one('product.product', 'Product', readonly=True), 'date': fields.date('Date', readonly=True), 'avg_days_to_deliver': fields.float('Avg Days to Deliver', digits=(16,2), readonly=True, group_operator="avg", help="Number of Avg Days to deliver"), - 'origin': fields.char('Origin', size=64), 'state': fields.selection([('draft', 'Draft'),('auto', 'Waiting'),('confirmed', 'Confirmed'),('assigned', 'Available'),('done', 'Done'),('cancel', 'Cancelled')], 'State'), 'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', required=True), + 'company_id': fields.many2one('res.company', 'Company', readonly=True), + 'invoice_state': fields.selection([ + ("invoiced", "Invoiced"), + ("2binvoiced", "To Be Invoiced"), + ("none", "Not from Picking")], "Invoice Status",readonly=True), + 'min_date': fields.date('Expected Date',help="Expected date for Picking. Default it takes current date"), + 'order_date': fields.date('Order Date', help="Date of Order"), + 'date_done': fields.date('Date Done', help="Date of completion"), + 'location_id': fields.many2one('stock.location', 'Source Location', help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."), + 'location_dest_id': fields.many2one('stock.location', 'Dest. Location', help="Location where the system will stock the finished products."), + 'max_date': fields.date('Max.Expected Date'), + 'product_uos': fields.many2one('product.uom', 'Product UOS'), + 'product_uom': fields.many2one('product.uom', 'Product UOM'), } def init(self, cr): tools.drop_view_if_exists(cr, 'report_stock_picking') @@ -48,6 +61,10 @@ class report_stock_picking(osv.osv): create or replace view report_stock_picking as ( select min(sm.id) as id, + date_trunc('day',sp.min_date) as min_date, + date_trunc('day',sp.date) as order_date, + date_trunc('day',sp.date_done) as date_done, + date_trunc('day',sp.max_date) as max_date, to_char(sp.create_date, 'YYYY') as year, to_char(sp.create_date, 'MM') as month, to_char(sp.create_date, 'YYYY-MM-DD') as day, @@ -56,19 +73,37 @@ class report_stock_picking(osv.osv): count(sm.id) as nbr, count(distinct sp.id) as nbp, sum(sm.product_qty) as product_qty, + sum(sm.product_uos_qty) as product_uos_qty, + sm.product_id as product_id, + sm.location_dest_id as location_dest_id, + sm.location_id as location_id, sp.type, - sp.name as reference, - sp.origin, + sm.product_uos, + sm.product_uom, + sp.invoice_state, + sp.company_id as company_id, avg(extract('epoch' from (sp.date_done-sp.create_date)))/(3600*24) as avg_days_to_deliver, sp.state from stock_move as sm left join stock_picking as sp ON (sm.picking_id=sp.id) group by sp.type, - sp.create_date, - sp.address_id, - sp.name, - sp.origin, - sp.state + sp.create_date, + sp.address_id, + sm.product_id, + to_char(sp.create_date, 'YYYY'), + sm.location_dest_id, + sm.location_id, + to_char(sp.create_date, 'MM'), + to_char(sp.create_date, 'YYYY-MM-DD'), + sm.product_uos, + sm.product_uom, + date_trunc('day',sp.min_date), + date_trunc('day',sp.date), + date_trunc('day',sp.date_done), + date_trunc('day',sp.max_date), + sp.invoice_state, + sp.company_id, + sp.state )""") report_stock_picking() diff --git a/addons/stock/report/report_stock_picking_view.xml b/addons/stock/report/report_stock_picking_view.xml index d4116313a7e..62d1b06fd19 100644 --- a/addons/stock/report/report_stock_picking_view.xml +++ b/addons/stock/report/report_stock_picking_view.xml @@ -15,15 +15,20 @@ <field name="month" invisible="1"/> <field name="day" invisible="1"/> <field name="date" invisible="1"/> - <field name="reference" invisible="1"/> + <field name="company_id" invisible="1"/> <field name="partner_id" invisible="1"/> - <field name="origin" invisible="1"/> + <field name="product_id" invisible="1"/> + <field name="min_date" invisible="1"/> + <field name="order_date" invisible="1"/> + <field name="date_done" invisible="1"/> + <field name="max_date" invisible="1"/> <field name="type" invisible="1"/> + <field name="invoice_state" invisible="1"/> <field name="state" invisible="1"/> <field name="product_qty" sum="# of Products" /> <field name="nbp" sum="# of Pickings" /> <field name="nbr" sum="# of Lines" /> - <field name="avg_days_to_deliver" sum='Avg Days to Deliver'/> + <field name="avg_days_to_deliver" avg='Avg Days to Deliver'/> </tree> </field> </record> @@ -49,29 +54,43 @@ <field name="arch" type="xml"> <search string="Search"> <group col="16" colspan="6"> - <filter icon="terp-stock" string="This Year" + <filter icon="terp-stock" string="Last 365 Days" domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" - help="Picking in this year"/> - <filter icon="terp-stock" string="This Month" + help="Picking in last 365 days"/> + <filter icon="terp-stock" string="Last 30 Days" name="month" domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]" - help="Picking in this month"/> + help="Picking in last 30 days"/> <separator orientation="vertical"/> <filter string="Todo" icon="terp-stock" domain="[('state','in',('draft','auto','confirmed','assigned'))]"/> <filter string="Done" icon="terp-stock" domain="[('state','=','done')]"/> <separator orientation="vertical"/> <field name="partner_id"/> - <field name="reference" /> - <field name="origin" /> - <field name="type" groups="base.group_extended"/> + <field name="company_id" groups="base.group_extended" widget="selection"/> </group> <newline/> + <group expand="0" string="Extended options..." colspan="10" col="12"> + <field name="type"/> + <separator orientation="vertical"/> + <field name="min_date"/> + <separator orientation="vertical"/> + <field name="max_date"/> + <newline/> + <field name="invoice_state"/> + <separator orientation="vertical"/> + <field name="order_date"/> + <separator orientation="vertical"/> + <field name="date_done"/> + </group> + <newline/> <group expand="1" string="Group By..." colspan="4" col="5"> <filter string="Partner" name="Partner" icon="terp-stock" domain="[]" context="{'group_by':'partner_id'}"/> - <filter string="State" icon="terp-stock" domain="[]" context="{'group_by':'state'}"/> + <filter string="Company" icon="terp-stock" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> + <filter string="Shipping Type" icon="terp-stock" domain="[]" context="{'group_by':'type'}"/> <separator orientation="vertical"/> - <filter string="Shipping Type" icon="terp-stock" domain="[]" context="{'group_by':'type'}"/> - <filter string="Origin" icon="terp-stock" domain="[]" context="{'group_by':'origin'}"/> + <filter string="Product" icon="terp-stock" domain="[]" context="{'group_by':'product_id'}"/> + <filter string="State" icon="terp-stock" domain="[]" context="{'group_by':'state'}"/> + <filter string="Invoice Status" icon="terp-stock" domain="[]" context="{'group_by':'invoice_state'}"/> <separator orientation="vertical"/> <filter string="Day" icon="terp-stock" domain="[]" context="{'group_by':'day'}"/> <filter string="Month" icon="terp-stock" domain="[]" context="{'group_by':'month'}"/> diff --git a/addons/stock_invoice_directly/i18n/fr.po b/addons/stock_invoice_directly/i18n/fr.po index 3467771b8bb..a7092e8621f 100644 --- a/addons/stock_invoice_directly/i18n/fr.po +++ b/addons/stock_invoice_directly/i18n/fr.po @@ -7,16 +7,16 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2009-08-28 16:01+0000\n" -"PO-Revision-Date: 2009-09-08 14:34+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" +"PO-Revision-Date: 2010-05-21 10:33+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ <Unknown>\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: 2010-04-17 04:20+0000\n" +"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #. module: stock_invoice_directly #: model:ir.module.module,shortdesc:stock_invoice_directly.module_meta_information msgid "Invoice Picking Directly" -msgstr "" +msgstr "Facture la livraison directement" |
