[MERGE]: merging from same branch
bzr revid: mga@tinyerp.com-20100419210635-fv7bhc6474l4blc8
This commit is contained in:
commit
5f197ef01f
|
@ -122,16 +122,16 @@
|
|||
<field name="name" select="1" colspan="4"/>
|
||||
<field name="code" select="1"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="company_id" select="2" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="user_type" select="1"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General Information">
|
||||
<newline/>
|
||||
<field name="currency_id" select="2"/>
|
||||
<field name="currency_mode" select="2"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="currency_mode"/>
|
||||
<field name="reconcile"/>
|
||||
<field name="active" select="2"/>
|
||||
<field name="active"/>
|
||||
<field name="check_history"/>
|
||||
<field name="type" select="1"/>
|
||||
<newline/>
|
||||
|
@ -338,7 +338,7 @@
|
|||
<field name="date" select="1"/>
|
||||
<field name="journal_id" on_change="onchange_journal_id(journal_id)" select="1"/>
|
||||
<field name="currency"/>
|
||||
<field name="period_id" select="2"/>
|
||||
<field name="period_id"/>
|
||||
<group colspan="2" col="3">
|
||||
<!-- <button name="%(action_view_account_statement_from_invoice)d"-->
|
||||
<!-- string="Import Invoice" type="action" attrs="{'invisible':[('state','=','confirm')]}" icon="gtk-open"/>-->
|
||||
|
@ -382,7 +382,7 @@
|
|||
</page>
|
||||
</notebook>
|
||||
<group col="7" colspan="4">
|
||||
<field name="state" select="2"/>
|
||||
<field name="state"/>
|
||||
<field name="balance_end"/>
|
||||
<button name="button_dummy" states="draft" string="Compute" icon="gtk-execute"/>
|
||||
<button name="button_confirm" states="draft" string="Confirm" type="object" icon="gtk-apply"/>
|
||||
|
@ -599,14 +599,14 @@
|
|||
<field name="name" select="1"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="description" select="1"/>
|
||||
<field name="active" select="2"/>
|
||||
<field name="active"/>
|
||||
<field name="tax_group" select="1"/>
|
||||
<field name="type"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Tax Definition">
|
||||
<field name="applicable_type"/>
|
||||
<field name="amount" select="2" attrs="{'readonly':[('type','=','none'),('type','=','code')]}"/>
|
||||
<field name="amount" attrs="{'readonly':[('type','=','none'),('type','=','code')]}"/>
|
||||
<field groups="base.group_extended" name="include_base_amount"/>
|
||||
<field groups="base.group_extended" name="domain"/>
|
||||
<newline/>
|
||||
|
@ -701,23 +701,23 @@
|
|||
<separator colspan="4" string="General Information"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="date" select="1"/>
|
||||
<field name="ref" select="2"/>
|
||||
<field name="invoice" select="2"/>
|
||||
<field name="ref"/>
|
||||
<field name="invoice"/>
|
||||
<field name="account_id" select="1" domain="[('type','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="partner_id" select="1" on_change="onchange_partner_id(False,partner_id,account_id,debit,credit,date)"/>
|
||||
|
||||
<field name="debit" select="2"/>
|
||||
<field name="credit" select="2"/>
|
||||
<field name="debit"/>
|
||||
<field name="credit"/>
|
||||
<field name="company_id" required="1" groups="base.group_multi_company"/>
|
||||
|
||||
<separator colspan="4" string="Optional Information"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="amount_currency"/>
|
||||
<field name="quantity" select="2"/>
|
||||
<field name="quantity"/>
|
||||
<field name="move_id" required="False"/>
|
||||
<newline/>
|
||||
<field name="statement_id" select="2"/>
|
||||
<field name="blocked" select="2"/>
|
||||
<field name="statement_id"/>
|
||||
<field name="blocked"/>
|
||||
<field name="date_maturity"/>
|
||||
<field name="date_created"/>
|
||||
<newline/>
|
||||
|
@ -728,11 +728,11 @@
|
|||
<field name="analytic_account_id"/>
|
||||
|
||||
<separator colspan="4" string="State"/>
|
||||
<field name="journal_id" select="2"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="period_id"/>
|
||||
<field name="reconcile_id"/>
|
||||
<field name="reconcile_partial_id"/>
|
||||
<field name="state" select="2"/>
|
||||
<field name="state"/>
|
||||
</page>
|
||||
<page string="Analytic Lines">
|
||||
<field colspan="4" name="analytic_lines" nolabel="1" context="{'default_general_account_id':account_id, 'default_name': name, 'default_date':date, 'amount': (debit or 0.0)-(credit or 0.0)}"/>
|
||||
|
@ -754,14 +754,14 @@
|
|||
<page string="Information">
|
||||
<separator colspan="4" string="General Information"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="date" select="2"/>
|
||||
<field name="date"/>
|
||||
<field name="journal_id" readonly="False" select="1"/>
|
||||
<field name="period_id" readonly="False" select="2"/>
|
||||
<field name="period_id" readonly="False"/>
|
||||
<field name="account_id" select="1" domain="[('type','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="partner_id" select="2" on_change="onchange_partner_id(False,partner_id,account_id,debit,credit,date)"/>
|
||||
<field name="partner_id" on_change="onchange_partner_id(False,partner_id,account_id,debit,credit,date)"/>
|
||||
<newline/>
|
||||
<field name="debit" select="2"/>
|
||||
<field name="credit" select="2"/>
|
||||
<field name="debit"/>
|
||||
<field name="credit"/>
|
||||
|
||||
<separator colspan="4" string="Optional Information"/>
|
||||
<field name="currency_id"/>
|
||||
|
@ -780,7 +780,7 @@
|
|||
<newline/>
|
||||
<field name="reconcile_id"/>
|
||||
<field name="reconcile_partial_id"/>
|
||||
<field name="state" select="2"/>
|
||||
<field name="state"/>
|
||||
</page>
|
||||
<page string="Analytic Lines">
|
||||
<field colspan="4" name="analytic_lines" nolabel="1"/>
|
||||
|
@ -861,13 +861,13 @@
|
|||
<form string="Account Entry">
|
||||
<group colspan="4" col="6">
|
||||
<field name="name" select="1" readonly="True"/>
|
||||
<field name="period_id" select="2"/>
|
||||
<field name="period_id"/>
|
||||
<field name="journal_id" select="1"/>
|
||||
<field name="company_id" required="1" groups="base.group_multi_company"/>
|
||||
<field name="date" select="1"/>
|
||||
<field name="ref" select="1"/>
|
||||
<field name="to_check" select="2"/>
|
||||
<field name="type" select="2" groups="base.group_extended"/>
|
||||
<field name="to_check"/>
|
||||
<field name="type" groups="base.group_extended"/>
|
||||
</group>
|
||||
<field name="partner_id" invisible="1" select="1"/>
|
||||
<field name="amount" invisible="1" select="1"/>
|
||||
|
@ -917,7 +917,7 @@
|
|||
</tree>
|
||||
</field>
|
||||
<separator colspan="4" string="Narration"/>
|
||||
<field name="narration" select="2" colspan="4" nolabel="1"/>
|
||||
<field name="narration" colspan="4" nolabel="1"/>
|
||||
<separator colspan="4" string="State"/>
|
||||
<field name="state" select="1"/>
|
||||
<group col="2" colspan="2">
|
||||
|
@ -1041,7 +1041,7 @@
|
|||
</page>
|
||||
</notebook>
|
||||
<group col="7" colspan="4">
|
||||
<field name="state" select="2"/>
|
||||
<field name="state"/>
|
||||
<field name="balance_end"/>
|
||||
<button name="button_dummy" states="draft" string="Compute" icon="gtk-execute"/>
|
||||
<button name="button_confirm" states="draft" string="Confirm" type="object" icon="gtk-apply"/>
|
||||
|
@ -1315,7 +1315,7 @@
|
|||
|
||||
<separator colspan="4" string="Subscription Periods"/>
|
||||
<field name="date_start" select="1"/>
|
||||
<field name="period_total" select="2"/>
|
||||
<field name="period_total"/>
|
||||
|
||||
<field name="period_nbr"/>
|
||||
<field name="period_type"/>
|
||||
|
@ -1328,7 +1328,7 @@
|
|||
<field colspan="4" name="lines_id" widget="one2many_list" nolabel="1"/>
|
||||
|
||||
<separator colspan="4" string="State"/>
|
||||
<field name="state" select="2"/>
|
||||
<field name="state"/>
|
||||
<group col="1" colspan="2">
|
||||
<button name="state_draft" states="done" string="Set to Draft" type="object" icon="gtk-convert" />
|
||||
</group>
|
||||
|
@ -1485,6 +1485,7 @@
|
|||
<!-- register configuration wizard -->
|
||||
<record id="config_fiscalyear" model="ir.actions.todo">
|
||||
<field name="action_id" ref="action_account_config_wizard_form"/>
|
||||
<field name="restart">onskip</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_addtmpl_wizard_form" model="ir.ui.view">
|
||||
|
@ -1534,7 +1535,7 @@
|
|||
<field name="type" select="1"/>
|
||||
<field name="user_type" select="1"/>
|
||||
|
||||
<field name="currency_id" select="2"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="reconcile"/>
|
||||
<field name="tax_ids" colspan="4"/>
|
||||
</page>
|
||||
|
@ -1627,13 +1628,13 @@
|
|||
<newline/>
|
||||
<field name="chart_template_id" select="1"/>
|
||||
<field name="tax_group" select="1"/>
|
||||
<field name="type" select="2"/>
|
||||
<field name="type_tax_use" select="2"/>
|
||||
<field name="type"/>
|
||||
<field name="type_tax_use"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Tax Definition">
|
||||
<field name="applicable_type"/>
|
||||
<field name="amount" select="2" attrs="{'readonly':[('type','=','none'),('type','=','code')]}"/>
|
||||
<field name="amount" attrs="{'readonly':[('type','=','none'),('type','=','code')]}"/>
|
||||
<field groups="base.group_extended" name="include_base_amount"/>
|
||||
<field groups="base.group_extended" name="domain"/>
|
||||
<newline/>
|
||||
|
|
|
@ -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-12-17 23:18+0000\n"
|
||||
"Last-Translator: Sianna <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-04-17 18:26+0000\n"
|
||||
"Last-Translator: Boris <boris.t.ivanov@gmail.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:05+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-19 03:45+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
@ -55,7 +55,7 @@ msgstr "Актив"
|
|||
#. module: account
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Невалидно име на модел при задаването на действие."
|
||||
|
||||
#. module: account
|
||||
#: help:account.journal,currency:0
|
||||
|
@ -257,7 +257,7 @@ msgstr "Данъци за доставчици"
|
|||
#. module: account
|
||||
#: view:account.move:0
|
||||
msgid "Total Debit"
|
||||
msgstr ""
|
||||
msgstr "Общ дебит"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.tax.code.entries:0
|
||||
|
@ -370,7 +370,7 @@ msgstr "Аналитична сметка"
|
|||
#: field:account.tax,child_depend:0
|
||||
#: field:account.tax.template,child_depend:0
|
||||
msgid "Tax on Children"
|
||||
msgstr ""
|
||||
msgstr "Данък върху подчинени"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.central.journal:0
|
||||
|
@ -387,7 +387,7 @@ msgstr "Описание на фактура"
|
|||
#. module: account
|
||||
#: constraint:account.analytic.account:0
|
||||
msgid "Error! You can not create recursive analytic accounts."
|
||||
msgstr ""
|
||||
msgstr "Грешка! Не можете да създадете рекурсивни аналитични сметки."
|
||||
|
||||
#. module: account
|
||||
#: field:account.bank.statement.reconcile,total_entry:0
|
||||
|
@ -398,7 +398,7 @@ msgstr "Общо записи"
|
|||
#: field:account.fiscal.position.account,account_src_id:0
|
||||
#: field:account.fiscal.position.account.template,account_src_id:0
|
||||
msgid "Account Source"
|
||||
msgstr ""
|
||||
msgstr "Счетоводен източник"
|
||||
|
||||
#. module: account
|
||||
#: field:account.journal,update_posted:0
|
||||
|
@ -537,7 +537,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:account.action_account_tax_template_form
|
||||
#: model:ir.ui.menu,name:account.menu_action_account_tax_template_form
|
||||
msgid "Tax Templates"
|
||||
msgstr ""
|
||||
msgstr "Шаблони на данъци"
|
||||
|
||||
#. module: account
|
||||
#: field:account.invoice,reconciled:0
|
||||
|
@ -552,13 +552,13 @@ msgstr "Отложен метод"
|
|||
#. module: account
|
||||
#: field:account.tax.template,include_base_amount:0
|
||||
msgid "Include in Base Amount"
|
||||
msgstr ""
|
||||
msgstr "Включване в основната сума"
|
||||
|
||||
#. module: account
|
||||
#: field:account.tax,ref_base_code_id:0
|
||||
#: field:account.tax.template,ref_base_code_id:0
|
||||
msgid "Refund Base Code"
|
||||
msgstr ""
|
||||
msgstr "Базов код на обезщетение"
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice.line:0
|
||||
|
@ -591,7 +591,7 @@ msgstr "account.tax"
|
|||
#. module: account
|
||||
#: rml:account.central.journal:0
|
||||
msgid "Printing Date"
|
||||
msgstr ""
|
||||
msgstr "Дата на отпечатване"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.general.ledger:0
|
||||
|
|
|
@ -7,14 +7,14 @@ 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-12-31 12:45+0000\n"
|
||||
"PO-Revision-Date: 2010-04-18 09:39+0000\n"
|
||||
"Last-Translator: Albert Cervera i Areny - http://www.NaN-tic.com <albert@nan-"
|
||||
"tic.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:05+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-19 03:46+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
@ -41,7 +41,7 @@ msgstr "Codificació assentaments"
|
|||
#. module: account
|
||||
#: model:ir.actions.todo,note:account.config_wizard_account_base_setup_form
|
||||
msgid "Specify The Message for the Overdue Payment Report."
|
||||
msgstr ""
|
||||
msgstr "Especifiquel el missage per als pagaments fora de termini."
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_confirmstatementfromdraft0
|
||||
|
@ -326,7 +326,7 @@ msgstr "Origen"
|
|||
#. module: account
|
||||
#: rml:account.analytic.account.journal:0
|
||||
msgid "Move Name"
|
||||
msgstr ""
|
||||
msgstr "Nom de l'assentament"
|
||||
|
||||
#. module: account
|
||||
#: xsl:account.transfer:0
|
||||
|
@ -436,7 +436,7 @@ msgstr "Negatiu"
|
|||
#. module: account
|
||||
#: rml:account.partner.balance:0
|
||||
msgid "(Account/Partner) Name"
|
||||
msgstr ""
|
||||
msgstr "(Compte/Empresa) Nom"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.move,type:0
|
||||
|
@ -482,7 +482,7 @@ msgstr "Conciliació bancària"
|
|||
#. module: account
|
||||
#: rml:account.invoice:0
|
||||
msgid "Disc.(%)"
|
||||
msgstr ""
|
||||
msgstr "Desc.(%)"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.general.ledger:0
|
||||
|
@ -1160,7 +1160,7 @@ msgstr "Preu un."
|
|||
#. module: account
|
||||
#: rml:account.analytic.account.journal:0
|
||||
msgid "Period from :"
|
||||
msgstr ""
|
||||
msgstr "Període des de:"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.model,name:account.model_wizard_multi_charts_accounts
|
||||
|
@ -1353,7 +1353,7 @@ msgstr "Homòleg centralitzat"
|
|||
#. module: account
|
||||
#: view:wizard.company.setup:0
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
msgstr "Missatge"
|
||||
|
||||
#. module: account
|
||||
#: model:process.node,note:account.process_node_supplierpaymentorder0
|
||||
|
@ -1516,7 +1516,7 @@ msgstr "Tanca estats"
|
|||
#. module: account
|
||||
#: model:ir.model,name:account.model_wizard_company_setup
|
||||
msgid "wizard.company.setup"
|
||||
msgstr ""
|
||||
msgstr "wizard.company.setup"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_account_analytic_account_line_extended_form
|
||||
|
@ -1854,7 +1854,7 @@ msgstr "Compte director"
|
|||
#. module: account
|
||||
#: rml:account.analytic.account.journal:0
|
||||
msgid "to :"
|
||||
msgstr ""
|
||||
msgstr "a:"
|
||||
|
||||
#. module: account
|
||||
#: wizard_field:account.move.line.reconcile,init_full,debit:0
|
||||
|
@ -2186,7 +2186,7 @@ msgstr "Assentament analític"
|
|||
#. module: account
|
||||
#: view:res.company:0 field:res.company,overdue_msg:0
|
||||
msgid "Overdue Payments Message"
|
||||
msgstr ""
|
||||
msgstr "Missatge de pagaments fora de termini"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_tax_code_tree
|
||||
|
@ -2488,7 +2488,7 @@ msgstr "Obre diari"
|
|||
#. 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
|
||||
|
@ -2681,7 +2681,7 @@ msgstr "Patrimoni"
|
|||
#. module: account
|
||||
#: field:wizard.company.setup,overdue_msg:0
|
||||
msgid "Overdue Payment Message"
|
||||
msgstr ""
|
||||
msgstr "Missage dels pagaments fora de termini"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.model,name:account.model_account_tax_code_template
|
||||
|
@ -2743,7 +2743,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
|
||||
|
@ -3898,7 +3898,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:account.action_wizard_company_setup_form
|
||||
#: view:wizard.company.setup:0
|
||||
msgid "Overdue Payment Report Message"
|
||||
msgstr ""
|
||||
msgstr "Missatge de l'informe dels pagaments fora de termini"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.tax,tax_group:0
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"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-04-18 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
|
|
@ -84,23 +84,23 @@
|
|||
</group>
|
||||
<group col="2" colspan="2">
|
||||
<separator string="Customer Credit" colspan="2"/>
|
||||
<field name="credit" select="2"/>
|
||||
<field name="credit_limit" select="2" groups="base.group_extended"/>
|
||||
<field name="credit"/>
|
||||
<field name="credit_limit" groups="base.group_extended"/>
|
||||
</group>
|
||||
<group col="2" colspan="2">
|
||||
<separator string="Supplier Debit" colspan="2"/>
|
||||
<field name="debit" select="2"/>
|
||||
<field name="debit"/>
|
||||
</group>
|
||||
<field colspan="4" context="{'address': address}" name="bank_ids" nolabel="1" select="2">
|
||||
<field colspan="4" context="{'address': address}" name="bank_ids" nolabel="1">
|
||||
<form string="Bank account">
|
||||
<field name="state" select="2"/>
|
||||
<field name="state"/>
|
||||
<newline/>
|
||||
<field name="acc_number" select="1"/>
|
||||
<newline/>
|
||||
<field name="bank"/>
|
||||
<newline/>
|
||||
<field name="sequence"/>
|
||||
<field colspan="4" name="name" select="2"/>
|
||||
<field colspan="4" name="name"/>
|
||||
<separator colspan="4" string="Bank account owner"/>
|
||||
<field colspan="4" name="owner_name"/>
|
||||
<field colspan="4" name="street"/>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<data>
|
||||
<menuitem icon="terp-project" id="base.menu_main_pm" name="Project Management" sequence="1"/>
|
||||
<menuitem id="next_id_71" name="Financial Project Management" parent="base.menu_main_pm" groups="account.group_account_invoice" sequence="20"/>
|
||||
<menuitem id="menu_invoicing" name="Invoicing" parent="next_id_71" sequence="20"/>
|
||||
<menuitem id="menu_invoicing" name="Billing" parent="next_id_71" sequence="20"/>
|
||||
|
||||
<record id="action_hr_tree_invoiced_all" model="ir.actions.act_window">
|
||||
<field name="name">All Uninvoiced Entries</field>
|
||||
|
|
|
@ -39,11 +39,11 @@
|
|||
|
||||
<field name="last_invoice_date"/>
|
||||
|
||||
<field name="last_worked_invoiced_date" select="2"/>
|
||||
<field name="last_worked_invoiced_date"/>
|
||||
<field name="last_worked_date"/>
|
||||
<separator colspan="4" string="To be invoiced"/>
|
||||
<field name="hours_qtt_non_invoiced"/>
|
||||
<field name="ca_to_invoice" select="2"/>
|
||||
<field name="ca_to_invoice"/>
|
||||
|
||||
</page>
|
||||
<page string="Stats by month">
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"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:11+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-18 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_analytic_plans
|
||||
|
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-11-24 12:50+0000\n"
|
||||
"PO-Revision-Date: 2010-03-24 17:25+0000\n"
|
||||
"Last-Translator: relojero <relojero28@gmail.com>\n"
|
||||
"PO-Revision-Date: 2010-04-17 21:08+0000\n"
|
||||
"Last-Translator: Rodrigo Machado Laprebendere <Unknown>\n"
|
||||
"Language-Team: Spanish <es@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-04-17 04:21+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-19 03:46+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
|
@ -38,16 +38,29 @@ msgid ""
|
|||
" when the invoice is created to transfer this amount to the debtor or "
|
||||
"creditor account."
|
||||
msgstr ""
|
||||
"Éste módulo soportará la metodología de contabilización Anglosajona \n"
|
||||
" cambiando la lógica de contabilización con transacciones de acciones. La "
|
||||
"diferencia entre los países de contabilización Anglosajona \n"
|
||||
" y el Rin o también llamados países de contabilización Continental es el "
|
||||
"momento de tomar el Costo de Bienes Vendidos contra el Costo de Ventas. \n"
|
||||
" La contabilización Anglosajona toma el costo cuando la factura de ventas "
|
||||
"es creada, la contabilización Continental tomará el costo en el momento en "
|
||||
"que los bienes son enviados.\n"
|
||||
" Éste módulo agregará esta funcionalidad usando una cuenta provisional, "
|
||||
"para almacenar el valor de los bienes enviados y devolverá esta cuenta "
|
||||
"provisional \n"
|
||||
" cuando la factura sea creada para transferir esta cantidad al deudor o "
|
||||
"acreedor de la cuenta."
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: model:ir.module.module,shortdesc:account_anglo_saxon.module_meta_information
|
||||
msgid "Stock Account"
|
||||
msgstr ""
|
||||
msgstr "Cuenta de Valores"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "¡XML Inválido para la Arquitectura de la Vista!"
|
||||
|
||||
#. module: account_anglo_saxon
|
||||
#: field:product.category,property_account_creditor_price_difference_categ:0
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"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-04-18 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_balance
|
||||
|
|
|
@ -296,7 +296,7 @@
|
|||
|
||||
<!--Menu for project management-->
|
||||
<menuitem icon="terp-project" id="base.menu_main_pm" name="Project Management" sequence="1"/>
|
||||
<menuitem id="base.menu_pm_invoicing" name="Invoicing" parent="base.menu_main_pm" sequence="7"/>
|
||||
<menuitem id="base.menu_pm_invoicing" name="Billing" parent="base.menu_main_pm" sequence="7"/>
|
||||
<menuitem id="menu_pm_budget" name="Budgets" parent="base.menu_pm_invoicing"/>
|
||||
<menuitem action="open_budget_post_form" id="menu_pm_budget_post_form" parent="menu_pm_budget"/>
|
||||
<menuitem parent="menu_pm_budget"
|
||||
|
|
|
@ -0,0 +1,496 @@
|
|||
# Occitan (post 1500) 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-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-04-17 09:13+0000\n"
|
||||
"Last-Translator: Cédric VALMARY (Per Tot en òc) <cvalmary@yahoo.fr>\n"
|
||||
"Language-Team: Occitan (post 1500) <oc@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-04-19 03:45+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Date :"
|
||||
msgstr "Data :"
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_field:account_followup.followup.print.all,next,partner_ids:0
|
||||
msgid "Partners"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Customer Ref :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.actions.act_window,name:account_followup.act_account_partner_account_move_payable_all
|
||||
#: model:ir.ui.menu,name:account_followup.menu_account_move_open_unreconcile_payable
|
||||
msgid "All payable entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr "Nom del Modèl invalid per la definicion de l'accion."
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.followup.line,description:0
|
||||
msgid "Printed Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Amount In Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Due"
|
||||
msgstr "Tèrme"
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account.move.line:0
|
||||
msgid "Total debit"
|
||||
msgstr "Debit total"
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup.line:0
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "%(user_signature)s: User name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "Select partners"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup:0
|
||||
#: field:account_followup.followup,followup_line:0
|
||||
msgid "Follow-Up"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,debit:0
|
||||
msgid "Debit"
|
||||
msgstr "Debit"
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "Email Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,account_type:0
|
||||
msgid "Account Type"
|
||||
msgstr "Tipe de compte"
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Ref"
|
||||
msgstr "Ref."
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "%(followup_amount)s: Total Amount Due"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup.line:0
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "%(date)s: Current Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account.move.line,followup_date:0
|
||||
msgid "Latest Follow-up"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.followup.line,followup_id:0
|
||||
#: field:account_followup.stat,followup_id:0
|
||||
msgid "Follow Ups"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_field:account_followup.followup.print.all,init,date:0
|
||||
msgid "Follow-up Sending Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup:0
|
||||
#: field:account_followup.followup,description:0
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Description"
|
||||
msgstr "Descripcion"
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Balance:"
|
||||
msgstr "Balança :"
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "VAT:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.followup,company_id:0
|
||||
msgid "Company"
|
||||
msgstr "Entrepresa"
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Invoice Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_field:account_followup.followup.print.all,next,email_subject:0
|
||||
msgid "Email Subject"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Paid"
|
||||
msgstr "Pagat"
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "%(line)s: Account Move lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,date_followup:0
|
||||
msgid "Latest followup"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account.move.line:0
|
||||
msgid "Partner entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.model,name:account_followup.model_account_followup_followup_line
|
||||
msgid "Follow-Ups Criteria"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "Partner Selection"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML invalid per l'arquitectura de la vista"
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.followup.line,start:0
|
||||
msgid "Type of Term"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,init:0
|
||||
msgid "Follow-up and Date Selection"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "Select partners to remind"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Li."
|
||||
msgstr "Lit."
|
||||
|
||||
#. module: account_followup
|
||||
#: model:account_followup.followup.line,description:account_followup.demo_followup_line1
|
||||
msgid ""
|
||||
"\n"
|
||||
"Dear %(partner_name)s,\n"
|
||||
"\n"
|
||||
"Exception made if there was a mistake of ours, it seems that the following "
|
||||
"amount staid unpaid. Please, take appropriate measures in order to carry out "
|
||||
"this payment in the next 8 days.\n"
|
||||
"\n"
|
||||
"Would your payment have been carried out after this mail was sent, please "
|
||||
"consider the present one as void. Do not hesitate to contact our accounting "
|
||||
"department at (+32).10.68.94.39.\n"
|
||||
"\n"
|
||||
"Best Regards,\n"
|
||||
"\t\t\t"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
"Lo nom de l'objècte deu començar amb x_ e conténer pas de caractèrs "
|
||||
"especials !"
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_button:account_followup.followup.print.all,summary,end:0
|
||||
msgid "Ok"
|
||||
msgstr "D'acòrdi"
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.followup,name:0
|
||||
#: field:account_followup.followup.line,name:0
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,date_move:0
|
||||
msgid "First move"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: selection:account_followup.followup.line,start:0
|
||||
msgid "End of Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup.line:0
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "%(company_name)s: User's Company name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.actions.act_window,name:account_followup.act_account_partner_account_move_all
|
||||
#: model:ir.ui.menu,name:account_followup.menu_account_move_open_unreconcile
|
||||
msgid "All receivable entries"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup:0
|
||||
msgid "Lines"
|
||||
msgstr "Linhas"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.actions.wizard,name:account_followup.action_account_followup_all_wizard
|
||||
#: model:ir.ui.menu,name:account_followup.account_followup_wizard_menu
|
||||
msgid "Send followups"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account.move.line,followup_line_id:0
|
||||
msgid "Follow-up Level"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,credit:0
|
||||
msgid "Credit"
|
||||
msgstr "Credit"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.model,name:account_followup.model_account_followup_stat
|
||||
msgid "Followup statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_button:account_followup.followup.print.all,init,next:0
|
||||
msgid "Continue"
|
||||
msgstr "Contunhar"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.module.module,shortdesc:account_followup.module_meta_information
|
||||
msgid "Accounting follow-ups management"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,summary:0
|
||||
#: wizard_field:account_followup.followup.print.all,summary,summary:0
|
||||
msgid "Summary"
|
||||
msgstr "Resumit"
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup.line:0
|
||||
msgid "Follow-Up Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Document : Customer account statement"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.stat:0
|
||||
msgid "Follow-Up lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "%(company_currency)s: User's Company Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,balance:0
|
||||
msgid "Balance"
|
||||
msgstr "Balança"
|
||||
|
||||
#. module: account_followup
|
||||
#: help:account_followup.followup.print.all,init,date:0
|
||||
msgid ""
|
||||
"This field allow you to select a forecast date to plan your follow-ups"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account.move.line:0
|
||||
msgid "Total credit"
|
||||
msgstr "Credit total"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:account_followup.followup.line,description:account_followup.demo_followup_line2
|
||||
msgid ""
|
||||
"\n"
|
||||
"Dear %(partner_name)s,\n"
|
||||
"\n"
|
||||
"We are disappointed to see that despite sending a reminder, that your "
|
||||
"account is now seriously overdue.\n"
|
||||
"\n"
|
||||
"It is essential that immediate payment is made, otherwise we will have to "
|
||||
"consider placing a stop on your account which means that we will no longer "
|
||||
"be able to supply your company with (goods/services).\n"
|
||||
"Please, take appropriate measures in order to carry out this payment in the "
|
||||
"next 8 days\n"
|
||||
"\n"
|
||||
"If there is a problem with paying invoice that we are not aware of, do not "
|
||||
"hesitate to contact our accounting department at (+32).10.68.94.39. so that "
|
||||
"we can resolve the matter quickly.\n"
|
||||
"\n"
|
||||
"Details of due payments is printed below.\n"
|
||||
"\n"
|
||||
"Best Regards,\n"
|
||||
"\t\t\t"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Sub-Total:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: selection:account_followup.followup.line,start:0
|
||||
msgid "Net Days"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.actions.act_window,name:account_followup.action_account_followup_definition_form
|
||||
#: model:ir.actions.act_window,name:account_followup.action_followup_stat
|
||||
#: model:ir.model,name:account_followup.model_account_followup_followup
|
||||
#: model:ir.ui.menu,name:account_followup.account_followup_menu
|
||||
#: model:ir.ui.menu,name:account_followup.menu_action_followup_stat
|
||||
msgid "Follow-Ups"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
#: wizard_field:account_followup.followup.print.all,next,email_body:0
|
||||
msgid "Email body"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,date_move_last:0
|
||||
msgid "Last move"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Maturity"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.actions.report.xml,name:account_followup.account_followup_followup_report
|
||||
msgid "Followup Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: model:account_followup.followup.line,description:account_followup.demo_followup_line3
|
||||
msgid ""
|
||||
"\n"
|
||||
"Dear %(partner_name)s,\n"
|
||||
"\n"
|
||||
"Despite several reminders, your account is still not settled.\n"
|
||||
"\n"
|
||||
"Unless full payment is made in next 8 days , then legal action for the "
|
||||
"recovery of the debt, will be taken without further notice.\n"
|
||||
"\n"
|
||||
"I trust that this action will prove unnecessary and details of due payments "
|
||||
"is printed below.\n"
|
||||
"\n"
|
||||
"In case of any queries concerning this matter, do not hesitate to contact "
|
||||
"our accounting department at (+32).10.68.94.39.\n"
|
||||
"\n"
|
||||
"Best Regards,\n"
|
||||
"\t\t\t"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: rml:account_followup.followup.print:0
|
||||
msgid "Maturity Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup.line:0
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "Legend"
|
||||
msgstr "Legenda"
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.followup.line,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr "Sequéncia"
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "%(heading)s: Move line header"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.followup.line:0
|
||||
#: wizard_view:account_followup.followup.print.all,next:0
|
||||
msgid "%(partner_name)s: Partner name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_field:account_followup.followup.print.all,next,email_conf:0
|
||||
msgid "Send email confirmation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_field:account_followup.followup.print.all,init,followup_id:0
|
||||
msgid "Follow-up"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.stat,name:0
|
||||
msgid "Partner"
|
||||
msgstr "Partenari"
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_button:account_followup.followup.print.all,init,end:0
|
||||
#: wizard_button:account_followup.followup.print.all,next,end:0
|
||||
msgid "Cancel"
|
||||
msgstr "Anullar"
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.followup.line,delay:0
|
||||
msgid "Days of delay"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_followup
|
||||
#: wizard_button:account_followup.followup.print.all,next,print:0
|
||||
msgid "Print Follow Ups & Send Mails"
|
||||
msgstr ""
|
|
@ -0,0 +1,313 @@
|
|||
# Occitan (post 1500) 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-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-04-17 09:32+0000\n"
|
||||
"Last-Translator: Cédric VALMARY (Per Tot en òc) <cvalmary@yahoo.fr>\n"
|
||||
"Language-Team: Occitan (post 1500) <oc@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-04-19 03:46+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
msgid "Sub Total"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Invoice Date:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
"Lo nom de l'objècte deu començar amb x_ e conténer pas de caractèrs "
|
||||
"especials !"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Cancelled Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
#: field:notify.message,name:0
|
||||
msgid "Title"
|
||||
msgstr "Títol"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.actions.wizard,name:account_invoice_layout.wizard_notify_message
|
||||
msgid "Invoices with Layout and Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Disc. (%)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "(Incl. taxes):"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
msgid "Note"
|
||||
msgstr "Nòta"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: wizard_button:wizard.notify_message,init,print:0
|
||||
msgid "Print"
|
||||
msgstr "Estampar"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: help:notify.message,msg:0
|
||||
msgid ""
|
||||
"This notification will appear at the bottom of the Invoices when printed."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Unit Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr "Nom del Modèl invalid per la definicion de l'accion."
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.model,name:account_invoice_layout.model_notify_message
|
||||
msgid "Notify By Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "PRO-FORMA"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: field:account.invoice,abstract_line_ids:0
|
||||
msgid "Invoice Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: view:account.invoice.line:0
|
||||
msgid "Seq."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.ui.menu,name:account_invoice_layout.menu_finan_config_notify_message
|
||||
msgid "Notification Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Customer Ref:"
|
||||
msgstr "Referéncia Client :"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid ")"
|
||||
msgstr ")"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: field:account.invoice.line,state:0
|
||||
msgid "Type"
|
||||
msgstr "Tipe"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Price"
|
||||
msgstr "Prètz"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "/ ("
|
||||
msgstr "/ ("
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Taxes:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: field:account.invoice.line,functional_field:0
|
||||
msgid "Source Account"
|
||||
msgstr "Compte d'origina"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.actions.act_window,name:account_invoice_layout.notify_mesage_tree_form
|
||||
msgid "Write Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Base"
|
||||
msgstr "Basa"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Fax :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: field:notify.message,msg:0
|
||||
msgid "Special Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: view:notify.message:0
|
||||
msgid "Write a notification or a wishful message."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Tel. :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML invalid per l'arquitectura de la vista"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
msgid "Page Break"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Document:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: wizard_view:wizard.notify_message,init:0
|
||||
msgid "Select Message"
|
||||
msgstr "Seleccionatz lo Messatge"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: view:notify.message:0
|
||||
msgid "Messages"
|
||||
msgstr "Messatges"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
msgid "Product"
|
||||
msgstr "Produch"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.actions.report.xml,name:account_invoice_layout.account_invoices_1
|
||||
msgid "Invoices with Layout"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Description / Taxes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Amount"
|
||||
msgstr "Soma"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Description/Taxes"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Draft Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: field:account.invoice.line,sequence:0
|
||||
msgid "Sequence Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Quantity"
|
||||
msgstr "Quantitat"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Refund"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "VAT :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: selection:account.invoice.line,state:0
|
||||
msgid "Separator Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Supplier Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Note :"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Tax"
|
||||
msgstr "Impòstes e taxas"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.module.module,shortdesc:account_invoice_layout.module_meta_information
|
||||
msgid "account_invoice_layout"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Total (Excl. taxes):"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Invoice"
|
||||
msgstr "Factura"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: wizard_button:wizard.notify_message,init,end:0
|
||||
msgid "Cancel"
|
||||
msgstr "Anullar"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Supplier Refund"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: wizard_field:wizard.notify_message,init,message:0
|
||||
msgid "Message"
|
||||
msgstr "Messatge"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: rml:account.invoice.layout:0
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
#: model:ir.ui.menu,name:account_invoice_layout.menu_notify_mesage_tree_form
|
||||
msgid "All Notification Messages"
|
||||
msgstr ""
|
|
@ -7,19 +7,19 @@ 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-02-03 06:24+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"PO-Revision-Date: 2010-04-17 18:14+0000\n"
|
||||
"Last-Translator: Valerie Engel <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:05+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-19 03:45+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_tax_include
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "Neplatný XML pro zobrazení architektury"
|
||||
|
||||
#. module: account_tax_include
|
||||
#: field:account.invoice,price_type:0
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"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-04-18 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: analytic_user_function
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"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-04-18 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: analytic_user_function
|
||||
|
|
|
@ -91,7 +91,7 @@ def real_id2base_calendar_id(real_id, recurrent_date):
|
|||
|
||||
if real_id and recurrent_date:
|
||||
recurrent_date = time.strftime("%Y%m%d%H%M%S", \
|
||||
time.strptime(recurrent_date, "%Y-%m-%d %H:%M:%S"))
|
||||
time.strptime(recurrent_date, "%Y-%m-%d %H:%M:%S"))
|
||||
return '%d-%s' % (real_id, recurrent_date)
|
||||
return real_id
|
||||
|
||||
|
@ -253,7 +253,7 @@ class calendar_attendee(osv.osv):
|
|||
result[id][name] = ''
|
||||
continue
|
||||
else:
|
||||
result[id][name] = self._get_address(attdata.sent_by_uid.name, \
|
||||
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:
|
||||
|
@ -327,59 +327,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'),
|
||||
('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='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"),
|
||||
'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'),
|
||||
'parent_ids': fields.many2many('calendar.attendee', 'calendar_attendee_parent_rel',\
|
||||
'attendee_id', 'parent_id', 'Delegrated From'),
|
||||
'child_ids': fields.many2many('calendar.attendee', 'calendar_attendee_child_rel',\
|
||||
'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"),
|
||||
'sent_by_uid': fields.function(_compute_data, method=True, string='Sent By User',\
|
||||
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),
|
||||
'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'),
|
||||
'child_ids': fields.many2many('calendar.attendee', 'calendar_attendee_child_rel', \
|
||||
'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"),
|
||||
'sent_by_uid': fields.function(_compute_data, method=True, string='Sent By User', \
|
||||
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),
|
||||
'dir': fields.char('URI Reference', size=124, help="Reference to the URI\
|
||||
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'),
|
||||
'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"),
|
||||
'event_date': fields.function(_compute_data, method=True, string='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"),
|
||||
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'),
|
||||
'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"),
|
||||
'event_date': fields.function(_compute_data, method=True, string='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"),
|
||||
}
|
||||
_defaults = {
|
||||
'state': lambda *x: 'needs-action',
|
||||
'state': lambda *x: 'needs-action',
|
||||
}
|
||||
|
||||
response_re = re.compile("Are you coming\?.*\n*.*(YES|NO|MAYBE).*", re.UNICODE)
|
||||
|
@ -421,7 +422,7 @@ request was delegated to"),
|
|||
if msg_actions['state'] in ['YES', 'NO', 'MAYBE']:
|
||||
mapping = {'YES': 'accepted', 'NO': 'declined', 'MAYBE': 'tentative'}
|
||||
status = mapping[msg_actions['state']]
|
||||
print 'Got response for invitation id: %s as %s' % (ids, status)
|
||||
print 'Got response for invitation id: %s as %s' % (ids, status)
|
||||
self.write(cr, uid, ids, {'state': status})
|
||||
return True
|
||||
|
||||
|
@ -440,37 +441,37 @@ request was delegated to"),
|
|||
sign = att.sent_by_uid and att.sent_by_uid.signature or ''
|
||||
sign = '<br>'.join(sign and sign.split('\n') or [])
|
||||
res_obj = att.ref
|
||||
sub = '[%s Invitation][%d] %s' % (company, att.id, res_obj.name)
|
||||
sub = '[%s Invitation][%d] %s' % (company, att.id, res_obj.name)
|
||||
att_infos = []
|
||||
other_invitaion_ids = self.search(cr, uid, [('ref','=', att.ref._name + ',' + str(att.ref.id))])
|
||||
other_invitaion_ids = self.search(cr, uid, [('ref', '=', att.ref._name + ',' + str(att.ref.id))])
|
||||
for att2 in self.browse(cr, uid, other_invitaion_ids):
|
||||
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,
|
||||
'company': company
|
||||
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,
|
||||
'company': company
|
||||
}
|
||||
body = html_invitation % body_vals
|
||||
if mail_to and email_from:
|
||||
tools.email_send(
|
||||
email_from,
|
||||
mail_to,
|
||||
sub,
|
||||
body,
|
||||
subtype='html',
|
||||
reply_to=email_from
|
||||
)
|
||||
email_from,
|
||||
mail_to,
|
||||
sub,
|
||||
body,
|
||||
subtype='html',
|
||||
reply_to=email_from
|
||||
)
|
||||
return True
|
||||
def onchange_user_id(self, cr, uid, ids, user_id, *args, **argv):
|
||||
"""
|
||||
Make entry on email and availbility on change of user_id field.
|
||||
Make entry on email and availbility on change of user_id field.
|
||||
@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.
|
||||
|
@ -496,7 +497,7 @@ request was delegated to"),
|
|||
|
||||
def do_accept(self, cr, uid, ids, context=None, *args):
|
||||
"""
|
||||
Update state which value is accepted.
|
||||
Update state which value is accepted.
|
||||
@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.
|
||||
|
@ -512,7 +513,7 @@ request was delegated to"),
|
|||
mod_obj = self.pool.get(vals.ref._name)
|
||||
if vals.ref:
|
||||
if vals.ref.user_id.id != user.id:
|
||||
defaults = {'user_id': user.id}
|
||||
defaults = {'user_id': user.id}
|
||||
new_event = mod_obj.copy(cr, uid, vals.ref.id, default=defaults, context=context)
|
||||
self.write(cr, uid, vals.id, {'state': 'accepted'}, context)
|
||||
|
||||
|
@ -539,7 +540,7 @@ request was delegated to"),
|
|||
context = {}
|
||||
if not vals.get("email") and vals.get("cn"):
|
||||
cnval = vals.get("cn").split(':')
|
||||
email = filter(lambda x:x.__contains__('@'), cnval)
|
||||
email = filter(lambda x:x.__contains__('@'), cnval)
|
||||
vals['email'] = email[0]
|
||||
vals['cn'] = vals.get("cn")
|
||||
res = super(calendar_attendee, self).create(cr, uid, vals, context)
|
||||
|
@ -551,26 +552,30 @@ class res_alarm(osv.osv):
|
|||
_name = 'res.alarm'
|
||||
_description = 'Basic Alarm Information'
|
||||
_columns = {
|
||||
'name':fields.char('Name', size=256, required=True),
|
||||
'trigger_occurs': fields.selection([('before', 'Before'), ('after', 'After')], \
|
||||
'Triggers', required=True),
|
||||
'trigger_interval': fields.selection([('minutes', 'Minutes'), ('hours', 'Hours'), \
|
||||
('days', 'Days')], 'Interval', 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),
|
||||
'name':fields.char('Name', size=256, required=True),
|
||||
'trigger_occurs': fields.selection([('before', 'Before'), \
|
||||
('after', 'After')], \
|
||||
'Triggers', required=True),
|
||||
'trigger_interval': fields.selection([('minutes', 'Minutes'), \
|
||||
('hours', 'Hours'), \
|
||||
('days', 'Days')], 'Interval', \
|
||||
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),
|
||||
'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={}):
|
||||
|
@ -598,20 +603,20 @@ are both optional, but if one occurs, so MUST the other"""),
|
|||
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)
|
||||
|
@ -640,7 +645,7 @@ are both optional, but if one occurs, so MUST the other"""),
|
|||
if alarm_ids:
|
||||
alarm_obj.unlink(cr, uid, alarm_ids)
|
||||
cr.execute('Update %s set base_calendar_alarm_id=NULL, alarm_id=NULL\
|
||||
where id=%s' % (model_obj._table, datas.id))
|
||||
where id=%s' % (model_obj._table, datas.id))
|
||||
cr.commit()
|
||||
return True
|
||||
|
||||
|
@ -653,41 +658,40 @@ class calendar_alarm(osv.osv):
|
|||
__attribute__ = {}
|
||||
|
||||
_columns = {
|
||||
'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"""),
|
||||
'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"),
|
||||
'description': fields.text('Description', help='Provides a more complete \
|
||||
description of the calendar component, than that \
|
||||
provided by the "SUMMARY" property'),
|
||||
'attendee_ids': fields.many2many('calendar.attendee', 'alarm_attendee_rel', \
|
||||
'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"),
|
||||
'state':fields.selection([
|
||||
('draft', 'Draft'),
|
||||
('run', 'Run'),
|
||||
('stop', 'Stop'),
|
||||
('done', 'Done'),
|
||||
], 'State', select=True, readonly=True),
|
||||
}
|
||||
'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"""),
|
||||
'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"),
|
||||
'description': fields.text('Description', help='Provides a more complete \
|
||||
description of the calendar component, than that \
|
||||
provided by the "SUMMARY" property'),
|
||||
'attendee_ids': fields.many2many('calendar.attendee', 'alarm_attendee_rel', \
|
||||
'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"),
|
||||
'state':fields.selection([('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={}):
|
||||
"""
|
||||
|
@ -708,7 +712,7 @@ class calendar_alarm(osv.osv):
|
|||
delta = timedelta(hours=vals['trigger_duration'])
|
||||
if vals['trigger_interval'] == 'minutes':
|
||||
delta = timedelta(minutes=vals['trigger_duration'])
|
||||
trigger_date = dtstart + (vals['trigger_occurs'] == 'after' and delta or -delta)
|
||||
trigger_date = dtstart + (vals['trigger_occurs'] == 'after' and delta or -delta)
|
||||
vals['trigger_date'] = trigger_date
|
||||
res = super(calendar_alarm, self).create(cr, uid, vals, context)
|
||||
return res
|
||||
|
@ -738,12 +742,12 @@ 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,
|
||||
'ref_doc1': '%s,%s' % (alarm.model_id.model, alarm.res_id)
|
||||
'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)
|
||||
request_ids = [request_id]
|
||||
|
@ -755,7 +759,7 @@ class calendar_alarm(osv.osv):
|
|||
request_obj.request_send(cr, uid, request_ids)
|
||||
|
||||
if alarm.action == 'email':
|
||||
sub = '[Openobject Remainder] %s' % (alarm.name)
|
||||
sub = '[Openobject Remainder] %s' % (alarm.name)
|
||||
body = """
|
||||
Name: %s
|
||||
Date: %s
|
||||
|
@ -772,9 +776,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'})
|
||||
|
@ -813,7 +817,7 @@ class calendar_event(osv.osv):
|
|||
if end_date and not duration:
|
||||
end = datetime.strptime(end_date, "%Y-%m-%d %H:%M:%S")
|
||||
diff = end - start
|
||||
duration = float(diff.days)* 24 + (float(diff.seconds) / 3600)
|
||||
duration = float(diff.days)* 24 + (float(diff.seconds) / 3600)
|
||||
value['duration'] = round(duration, 2)
|
||||
elif not end_date:
|
||||
end = start + timedelta(hours=duration)
|
||||
|
@ -825,15 +829,16 @@ class calendar_event(osv.osv):
|
|||
Set rule string.
|
||||
@param self: The object pointer
|
||||
@param cr: the current row, from the database cursor,
|
||||
@param id: List of calendar event's ids.
|
||||
@param id: List of calendar event's ids.
|
||||
@param context: A standard dictionary for contextual values
|
||||
@return: dictionary of rrule value.
|
||||
"""
|
||||
cr.execute("UPDATE %s set freq='',interval=0,count=0,end_date=Null,\
|
||||
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=False,month_list=0 ,byday=False where id=%s" % (self._table, id))
|
||||
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
|
||||
val = {}
|
||||
for part in value.split(';'):
|
||||
|
@ -846,7 +851,9 @@ class calendar_event(osv.osv):
|
|||
ans = value.split(';')
|
||||
for i in ans:
|
||||
val[i.split('=')[0].lower()] = i.split('=')[1].lower()
|
||||
if int(val.get('interval')) > 1: #If interval is other than 1 rule is custom
|
||||
if not val.get('interval'):
|
||||
rrule_type = 'custom'
|
||||
elif int(val.get('interval')) > 1: #If interval is other than 1 rule is custom
|
||||
rrule_type = 'custom'
|
||||
|
||||
qry = "UPDATE %(table)s set rrule_type=\'%(rule_type)s\' "
|
||||
|
@ -873,8 +880,12 @@ class calendar_event(osv.osv):
|
|||
|
||||
if val.get('byday'):
|
||||
d = val.get('byday')
|
||||
new_val['byday'] = d[:1]
|
||||
new_val['week_list'] = d[1:].upper()
|
||||
if '-' in d:
|
||||
new_val['byday'] = d[:2]
|
||||
new_val['week_list'] = d[2:4].upper()
|
||||
else:
|
||||
new_val['byday'] = d[:1]
|
||||
new_val['week_list'] = d[1:3].upper()
|
||||
new_val['select1'] = 'day'
|
||||
|
||||
if val.get('bymonth'):
|
||||
|
@ -901,92 +912,100 @@ class calendar_event(osv.osv):
|
|||
Get rule string.
|
||||
@param self: The object pointer
|
||||
@param cr: the current row, from the database cursor,
|
||||
@param id: List of calendar event's ids.
|
||||
@param id: List of calendar event's ids.
|
||||
@param context: A standard dictionary for contextual values
|
||||
@return: dictionary of rrule value.
|
||||
"""
|
||||
result = {}
|
||||
for datas in self.read(cr, uid, ids):
|
||||
for datas in self.read(cr, uid, ids, context=context):
|
||||
event = datas['id']
|
||||
if datas.get('rrule_type'):
|
||||
if datas.get('rrule_type') == 'none':
|
||||
result[event] = False
|
||||
elif datas.get('rrule_type') == 'custom':
|
||||
rrule_custom = self.compute_rule_string(cr, uid, datas)
|
||||
if datas.get('interval', 0) < 0:
|
||||
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,\
|
||||
context=context)
|
||||
result[event] = rrule_custom
|
||||
else:
|
||||
result[event] = self.compute_rule_string(cr, uid, {'freq':\
|
||||
datas.get('rrule_type').upper(), \
|
||||
'interval': 1}, context=context)
|
||||
result[event] = self.compute_rule_string(cr, uid, {'freq': datas.get('rrule_type').upper(), 'interval': 1}, context=context)
|
||||
|
||||
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=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'),
|
||||
'class': fields.selection([('public', 'Public'), ('private', 'Private'), \
|
||||
('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': fields.selection([('free', 'Free'), ('busy', 'Busy')], \
|
||||
'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 anexception to a recurrence set"),
|
||||
'rrule': fields.function(_get_rulestring, type='char', size=124, method=True,\
|
||||
string='Recurrent Rule', store=True, fnct_inv=_set_rrulestring),
|
||||
rule or repeating pattern for anexception 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'),
|
||||
'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'),
|
||||
'vtimezone': fields.related('user_id', 'context_tz', type='char', size=24,\
|
||||
string='Timezone', store=True),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
('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'),
|
||||
'vtimezone': fields.related('user_id', 'context_tz', type='char', size=24, \
|
||||
string='Timezone', store=True),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
'freq': fields.selection([('None', 'No Repeat'), \
|
||||
('secondly', 'Secondly'), \
|
||||
('minutely', 'Minutely'), \
|
||||
('hourly', 'Hourly'), \
|
||||
('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'),
|
||||
('secondly', 'Secondly'), \
|
||||
('minutely', 'Minutely'), \
|
||||
('hourly', 'Hourly'), \
|
||||
('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'),
|
||||
'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'),
|
||||
('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'),
|
||||
('3', 'Third'), ('4', 'Fourth'), \
|
||||
('5', 'Fifth'), ('-1', 'Last')], 'By day'),
|
||||
'month_list': fields.selection(months.items(), 'Month'),
|
||||
'end_date': fields.date('Repeat Until')
|
||||
}
|
||||
_defaults = {
|
||||
'class': lambda *a: 'public',
|
||||
'show_as': lambda *a: 'busy',
|
||||
'freq': lambda *x: 'None',
|
||||
'select1': lambda *x: 'date',
|
||||
'interval': lambda *x: 1,
|
||||
'class': lambda *a: 'public',
|
||||
'show_as': lambda *a: 'busy',
|
||||
'freq': lambda *x: 'None',
|
||||
'select1': lambda *x: 'date',
|
||||
'interval': lambda *x: 1,
|
||||
}
|
||||
|
||||
def modify_this(self, cr, uid, event_id, defaults, real_date, context=None, *args):
|
||||
|
@ -1004,11 +1023,11 @@ class calendar_event(osv.osv):
|
|||
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',
|
||||
'rrule': ''
|
||||
})
|
||||
'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 []
|
||||
if real_date and defaults.get('date'):
|
||||
exdate.append(real_date)
|
||||
|
@ -1032,7 +1051,7 @@ class calendar_event(osv.osv):
|
|||
defaults.update({'table': self._table})
|
||||
|
||||
qry = "UPDATE %(table)s set name = '%(name)s', \
|
||||
date = '%(date)s', date_deadline = '%(date_deadline)s'"
|
||||
date = '%(date)s', date_deadline = '%(date_deadline)s'"
|
||||
if defaults.get('alarm_id'):
|
||||
qry += ", alarm_id = %(alarm_id)s"
|
||||
if defaults.get('location'):
|
||||
|
@ -1060,7 +1079,7 @@ class calendar_event(osv.osv):
|
|||
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 from " + self._table + \
|
||||
" m where m.id in ("\
|
||||
+ ','.join(map(lambda x: str(x), ids))+")")
|
||||
|
||||
|
@ -1129,7 +1148,7 @@ class calendar_event(osv.osv):
|
|||
@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
|
||||
@return: string value which compute FREQILY;INTERVAL
|
||||
"""
|
||||
|
||||
weekdays = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su']
|
||||
|
@ -1141,9 +1160,8 @@ class calendar_event(osv.osv):
|
|||
if freq == 'None':
|
||||
return ''
|
||||
|
||||
if datas.get('interval') < 1:
|
||||
raise osv.except_osv(_('Error!'), ("Please select proper Interval"))
|
||||
|
||||
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))
|
||||
|
@ -1159,7 +1177,7 @@ class calendar_event(osv.osv):
|
|||
monthstring = ';BYMONTHDAY=' + str(datas.get('day'))
|
||||
|
||||
elif freq == 'yearly':
|
||||
if datas.get('select1')=='date' and (datas.get('day') < 1 or datas.get('day') > 31):
|
||||
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':
|
||||
|
@ -1170,19 +1188,19 @@ class calendar_event(osv.osv):
|
|||
|
||||
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 '') +\
|
||||
enddate = (datas.get('count') and (';COUNT=' + str(datas.get('count'))) or '') +\
|
||||
((datas.get('end_date') and (';UNTIL=' + datas.get('end_date'))) or '')
|
||||
|
||||
rrule_string = 'FREQ=' + freq.upper() + weekstring + ';INTERVAL=' + \
|
||||
str(datas.get('interval')) + enddate + monthstring + yearstring
|
||||
rrule_string = 'FREQ=' + freq.upper() + weekstring + interval_srting \
|
||||
+ enddate + monthstring + yearstring
|
||||
|
||||
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.
|
||||
Overrides orm search method.
|
||||
@param cr: the current row, from the database cursor,
|
||||
@param user: the current user’s ID for security checks,
|
||||
@param args: list of tuples of form [(‘name_of_the_field’, ‘operator’, value), ...].
|
||||
|
@ -1248,7 +1266,7 @@ class calendar_event(osv.osv):
|
|||
|
||||
def browse(self, cr, uid, ids, context=None, list_class=None, fields_process={}):
|
||||
"""
|
||||
Overrides orm browse method.
|
||||
Overrides orm browse 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,
|
||||
|
@ -1269,7 +1287,7 @@ class calendar_event(osv.osv):
|
|||
|
||||
def read(self, cr, uid, ids, fields=None, context={}, load='_classic_read'):
|
||||
"""
|
||||
Overrides orm Read method.Read List of fields for calendar event.
|
||||
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.
|
||||
|
@ -1285,8 +1303,7 @@ class calendar_event(osv.osv):
|
|||
if fields and 'date' not in fields:
|
||||
fields.append('date')
|
||||
for base_calendar_id, real_id in select:
|
||||
res = super(calendar_event, self).read(cr, uid, real_id, fields=fields, context=context, \
|
||||
load=load)
|
||||
res = super(calendar_event, self).read(cr, uid, real_id, fields=fields, context=context, load=load)
|
||||
ls = base_calendar_id2real_id(base_calendar_id, with_date=res.get('duration', 0))
|
||||
if not isinstance(ls, (str, int, long)) and len(ls) >= 2:
|
||||
res['date'] = ls[1]
|
||||
|
@ -1328,7 +1345,7 @@ class calendar_event(osv.osv):
|
|||
for record in self.read(cr, uid, [base_calendar_id2real_id(id)], \
|
||||
['date', 'rrule', 'exdate']):
|
||||
if record['rrule']:
|
||||
exdate = (record['exdate'] and (record['exdate'] + ',') or '') + ''.join((re.compile('\d')).findall(date_new)) + 'Z'
|
||||
exdate = (record['exdate'] and (record['exdate'] + ',') or '') + ''.join((re.compile('\d')).findall(date_new)) + 'Z'
|
||||
if record['date'] == date_new:
|
||||
res = self.write(cr, uid, [base_calendar_id2real_id(id)], {'exdate': exdate})
|
||||
else:
|
||||
|
@ -1396,14 +1413,14 @@ class calendar_todo(osv.osv):
|
|||
"""
|
||||
|
||||
event = self.browse(cr, uid, id, context=context)
|
||||
cr.execute("UPDATE %s set date_start='%s' where id=%s" \
|
||||
% (self._table, value, id))
|
||||
cr.execute("UPDATE %s set date_start='%s' where id=%s" \
|
||||
% (self._table, value, id))
|
||||
return True
|
||||
|
||||
_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__ = {}
|
||||
|
@ -1429,7 +1446,7 @@ 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
|
||||
|
@ -1445,8 +1462,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()
|
||||
|
||||
|
@ -1497,7 +1514,7 @@ 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={},
|
||||
load='_classic_read'):
|
||||
"""
|
||||
Read IR Model
|
||||
|
@ -1557,7 +1574,7 @@ class res_users(osv.osv):
|
|||
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)
|
||||
])
|
||||
|
||||
|
@ -1589,8 +1606,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()
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -35,7 +35,7 @@ class calendar_event_edit_all(osv.osv_memory):
|
|||
context_id = context and context.get('active_id', False) or False
|
||||
if context_id:
|
||||
if context.get('date'):
|
||||
return context.get('date')
|
||||
return context.get('date')
|
||||
else:
|
||||
model = context.get('model', False)
|
||||
model_obj = self.pool.get(model)
|
||||
|
|
|
@ -47,7 +47,10 @@
|
|||
'base_contact_view.xml',
|
||||
'process/base_contact_process.xml'
|
||||
],
|
||||
'demo_xml': ['base_contact_demo.xml'],
|
||||
'demo_xml': ['base_contact_demo.xml'],
|
||||
'test': [
|
||||
'test/base_contact00.yml',
|
||||
],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
'certificate': '0031287885469',
|
|
@ -205,12 +205,12 @@ class res_partner_job(osv.osv):
|
|||
self._order = 'sequence_contact'
|
||||
|
||||
contact_obj = self.pool.get('res.partner.contact')
|
||||
search_arg = ['|', ('first_name', 'ilike', arg[2]), ('name', 'ilike', arg[2])]
|
||||
contact_ids = contact_obj.search(cr, user, search_arg, offset=offset, \
|
||||
limit=limit, order=order, context=context, count=count)
|
||||
contacts = contact_obj.browse(cr, user, contact_ids, context=context)
|
||||
for contact in contacts:
|
||||
job_ids.extend([item.id for item in contact.job_ids])
|
||||
if arg[2] and not count:
|
||||
search_arg = ['|', ('first_name', 'ilike', arg[2]), ('name', 'ilike', arg[2])]
|
||||
contact_ids = contact_obj.search(cr, user, search_arg, offset=offset, limit=limit, order=order, context=context, count=count)
|
||||
contacts = contact_obj.browse(cr, user, contact_ids, context=context)
|
||||
for contact in contacts:
|
||||
job_ids.extend([item.id for item in contact.job_ids])
|
||||
|
||||
res = super(res_partner_job,self).search(cr, user, args, offset=offset,\
|
||||
limit=limit, order=order, context=context, count=count)
|
||||
|
|
|
@ -0,0 +1,96 @@
|
|||
- |
|
||||
I will test base_contact for following cases:
|
||||
*contacts unrelated to a partner,
|
||||
*contacts working at several addresses (possibly for different partners),
|
||||
*contacts with possibly different functions for each of its job's addresses
|
||||
- |
|
||||
In order to assign language to contacts first I will create Language FR
|
||||
(Remove)
|
||||
-
|
||||
!record {model: res.lang, id: res_lang_french0}:
|
||||
code: fr_BE
|
||||
date_format: '%m/%d/%Y'
|
||||
decimal_point: .
|
||||
direction: ltr
|
||||
grouping: '[]'
|
||||
name: French
|
||||
time_format: '%H:%M:%S'
|
||||
- |
|
||||
In order to check contacts first I will create contact unrelated to a partner
|
||||
-
|
||||
!record {model: res.partner.contact, id: res_partner_contact_williams0}:
|
||||
country_id: base.be
|
||||
first_name: Laura
|
||||
job_ids:
|
||||
- email: lwilliams@mydomain.com
|
||||
function_id: base_contact.res_partner_function_privateaddress0
|
||||
phone: (+32).10.45.18.77
|
||||
sequence_contact: 1
|
||||
state: current
|
||||
lang_id: res_lang_french0
|
||||
mobile: (+32).10.45.18.77
|
||||
name: Williams
|
||||
title: Mss
|
||||
- |
|
||||
Now in order to assign this contact to partner I will create one partner assign contact laura to this partner
|
||||
-
|
||||
!record {model: res.partner, id: res_partner_laurascompany0}:
|
||||
address:
|
||||
- city: Namur
|
||||
country_id: base.be
|
||||
phone: (+32).10.45.18.77
|
||||
street: 23, street ways
|
||||
type: default
|
||||
zip: '2324324'
|
||||
job_ids:
|
||||
- address_id: res_partner_address_1
|
||||
function_id: base.function_director
|
||||
contact_id: res_partner_contact_williams0
|
||||
sequence_partner: 2
|
||||
state: current
|
||||
lang: fr_BE
|
||||
name: Laura's Company
|
||||
ref: LC
|
||||
title: ltd
|
||||
- |
|
||||
Now I will check that the new job is assigned properly to contact or not
|
||||
-
|
||||
!assert {model: res.partner.contact, id: res_partner_contact_williams0}:
|
||||
- len(job_ids) > 2
|
||||
- |
|
||||
In order to check contacts working at several addresses for different partners
|
||||
I will create contact with 2 different addresses
|
||||
-
|
||||
!record {model: res.partner.contact, id: res_partner_contact_pauwels0}:
|
||||
country_id: base.be
|
||||
first_name: Nicolas
|
||||
job_ids:
|
||||
- address_id: base.main_address
|
||||
function_id: base.function_it
|
||||
state: current
|
||||
- address_id: base.res_partner_address_3000
|
||||
function_id: base.function_director
|
||||
state: current
|
||||
lang_id: res_lang_french0
|
||||
mobile: (+32).23.44.32.12
|
||||
name: Pauwels
|
||||
title: M.
|
||||
- |
|
||||
In order to check one contact working at one partner with different functions
|
||||
I will create contact with 2 different jobs with different function but the same address
|
||||
-
|
||||
!record {model: res.partner.contact, id: res_partner_contact_mortier0}:
|
||||
country_id: base.be
|
||||
first_name: Christina
|
||||
job_ids:
|
||||
- address_id: base.res_partner_address_1
|
||||
function_id: base.function_director
|
||||
state: past
|
||||
- address_id: base.res_partner_address_1
|
||||
function_id: base.function_it
|
||||
state: current
|
||||
lang_id: base_contact.res_lang_french0
|
||||
mobile: (+32).10.45.18.77
|
||||
name: Mortier
|
||||
title: Mss
|
||||
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"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-04-18 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_merge
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"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:55+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-18 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_publish
|
||||
|
|
|
@ -143,7 +143,7 @@ class base_module_record(osv.osv):
|
|||
obj = dt.browse(cr, uid, dtids[0])
|
||||
self.depends[obj.module] = True
|
||||
return obj.module+'.'+obj.name, obj.noupdate
|
||||
|
||||
|
||||
def _create_record(self, cr, uid, doc, model, data, record_id, noupdate=False):
|
||||
|
||||
data_pool = self.pool.get('ir.model.data')
|
||||
|
@ -384,7 +384,7 @@ class base_module_record(osv.osv):
|
|||
elif rec[3]=='create':
|
||||
id = self._create_id(cr, uid, rec[2],rec[4])
|
||||
record,noupdate = self._create_record(cr, uid, doc, rec[2], rec[4], id)
|
||||
self.ids[(rec[3], result)] = id
|
||||
self.ids[(rec[2], result)] = id
|
||||
record_list += record
|
||||
|
||||
elif rec[3]=='copy':
|
||||
|
@ -446,8 +446,8 @@ class base_module_record(osv.osv):
|
|||
terp.appendChild(data)
|
||||
wkf = doc.createElement('workflow')
|
||||
data.appendChild(wkf)
|
||||
wkf.setAttribute("model", rec[1][3])
|
||||
wkf.setAttribute("action", rec[1][4])
|
||||
wkf.setAttribute("model", rec[1][2])
|
||||
wkf.setAttribute("action", rec[1][3])
|
||||
if noupdate:
|
||||
data.setAttribute("noupdate", "1")
|
||||
wkf.setAttribute("ref", rec_id)
|
||||
|
@ -482,10 +482,12 @@ class base_module_record(osv.osv):
|
|||
continue
|
||||
if self.mode == "workflow":
|
||||
record= self._generate_object_yaml(cr, uid, rec[1],rec[0])
|
||||
yaml_file+="!comment Performing a workflow action %s on module %s"%(record['action'], record['model']) + '''\n'''
|
||||
object=yaml.load(unicode('''\n !workflow %s \n'''%record,'iso-8859-1'))
|
||||
yaml_file += str(object) + '''\n'''
|
||||
yaml_file += str(object) + '''\n\n'''
|
||||
else:
|
||||
record= self._generate_object_yaml(cr, uid, rec[1],rec[3])
|
||||
yaml_file+="!comment Creating an %s record"%(record['model']) + '''\n'''
|
||||
object= yaml.load(unicode('''\n !record %s \n'''%record,'iso-8859-1'))
|
||||
yaml_file += str(object) + '''\n'''
|
||||
attrs=yaml.dump(object.attrs, default_flow_style=False)
|
||||
|
@ -497,7 +499,9 @@ class base_module_record(osv.osv):
|
|||
if line.find('!record') == 0:
|
||||
line = "- \n" + " " + line
|
||||
elif line.find('!workflow') == 0:
|
||||
line = "- \n" + " " + line
|
||||
line = "- \n" + " " + line
|
||||
elif line.find('!comment') == 0:
|
||||
line=line.replace('!comment','- \n ')
|
||||
elif line.find('- -') != -1:
|
||||
line=line.replace('- -',' -')
|
||||
line = " " + line
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"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:03+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-18 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_record
|
||||
|
|
|
@ -37,8 +37,8 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Report Creator">
|
||||
<field name="name" select="1" colspan="4"/>
|
||||
<field name="type" select="2"/>
|
||||
<field name="active" select="2"/>
|
||||
<field name="type"/>
|
||||
<field name="active"/>
|
||||
<notebook colspan="4">
|
||||
<page string="General Configuration">
|
||||
<field name="model_ids" colspan="4"
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
string="You can start configuring the system or connect directly to the database using the default setup."/>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="" colspan="4"/>
|
||||
<button name="menu" icon="gtk-ok" type="object"
|
||||
string="Use Directly"/>
|
||||
<button name="config" icon="gtk-go-forward" type="object"
|
||||
|
|
|
@ -50,8 +50,8 @@ If you don't think you need any of these right now, you can easily install them
|
|||
</record>
|
||||
|
||||
<record id="base_setup_installer_todo" model="ir.actions.todo">
|
||||
<field name="action_id" ref="action_base_setup_installer"/>
|
||||
<field name="sequence">2</field>
|
||||
<field name="action_id" ref="action_base_setup_installer"/>
|
||||
<field name="sequence">2</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<group string="res_config_contents" position="replace">
|
||||
<field name="company_id" invisible="1"/>
|
||||
|
||||
<separator string="Define Main Company" colspan="4"/>
|
||||
<separator string="Configure Your Company" colspan="4"/>
|
||||
<field name="name" colspan="4" required="True"/>
|
||||
<newline/>
|
||||
<field name="street"/>
|
||||
|
@ -54,8 +54,9 @@
|
|||
</record>
|
||||
|
||||
<record id="base_setup_company_todo" model="ir.actions.todo">
|
||||
<field name="action_id" ref="action_base_setup_company"/>
|
||||
<field name="sequence">1</field>
|
||||
<field name="action_id" ref="action_base_setup_company"/>
|
||||
<field name="sequence">1</field>
|
||||
<field name="restart">onskip</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<field name="property_account_payable" position="after">
|
||||
<group colspan="2" col="6">
|
||||
<field name="vat" on_change="vat_change(vat)" select="2" colspan="4" />
|
||||
<field name="vat" on_change="vat_change(vat)" colspan="4" />
|
||||
<field name="vat_subjected" colspan="1"/>
|
||||
</group>
|
||||
</field>
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
* Files by Month (graph)
|
||||
""",
|
||||
'author': 'Tiny',
|
||||
'depends': ['board', 'document', 'report_document'],
|
||||
'depends': ['board', 'document'],
|
||||
'update_xml': ['board_document_view.xml'],
|
||||
'demo_xml': ['board_document_demo.xml'],
|
||||
'installable': True,
|
|
@ -15,24 +15,24 @@
|
|||
<child1>
|
||||
<action
|
||||
string="New Files"
|
||||
name="%(report_document.action_view_all_document_tree1)d"
|
||||
name="%(document.action_view_all_document_tree1)d"
|
||||
view_mode="tree"
|
||||
domain="[('name','=',time.strftime('%%Y-%%m-01'))]"/>
|
||||
domain="[('name','=',time.strftime('%%Y')),('month','=',time.strftime('%%m'))]"/>
|
||||
|
||||
<action
|
||||
string="File Size by Month"
|
||||
name="%(report_document.action_view_size_month)d"
|
||||
name="%(document.action_view_size_month)d"
|
||||
view_mode="graph,tree"/>
|
||||
</child1>
|
||||
<child2>
|
||||
<action
|
||||
string="Files by Resource Type"
|
||||
name="%(report_document.action_view_document_by_resourcetype_graph)d"
|
||||
name="%(document.action_view_document_by_resourcetype_graph)d"
|
||||
view_mode="graph,tree"/>
|
||||
|
||||
<action
|
||||
string="Files by Partner"
|
||||
name="%(report_document.action_view_files_by_partner)d"
|
||||
name="%(document.action_view_files_by_partner)d"
|
||||
view_mode="graph,tree"/>
|
||||
</child2>
|
||||
</hpaned>
|
||||
|
@ -75,19 +75,19 @@
|
|||
<child1>
|
||||
<action
|
||||
string="Wall of Shame"
|
||||
name="%(report_document.action_view_wall)d"
|
||||
name="%(document.action_view_wall)d"
|
||||
view_mode="tree"/>
|
||||
|
||||
</child1>
|
||||
<child2>
|
||||
<action
|
||||
string="Files by Users"
|
||||
name="%(report_document.action_view_user_graph)d"
|
||||
name="%(document.action_view_user_graph)d"
|
||||
view_mode="graph,tree"/>
|
||||
|
||||
<action
|
||||
string="Files by Month"
|
||||
name="%(report_document.action_view_files_by_month_graph)d"
|
||||
name="%(document.action_view_files_by_month_graph)d"
|
||||
view_mode="graph,tree"/>
|
||||
</child2>
|
||||
</hpaned>
|
||||
|
|
|
@ -30,51 +30,51 @@ from tools.translate import _
|
|||
|
||||
MAX_LEVEL = 15
|
||||
AVAILABLE_STATES = [
|
||||
('draft', 'Draft'),
|
||||
('open', 'Open'),
|
||||
('cancel', 'Cancelled'),
|
||||
('done', 'Closed'),
|
||||
('draft', 'Draft'),
|
||||
('open', 'Open'),
|
||||
('cancel', 'Cancelled'),
|
||||
('done', 'Closed'),
|
||||
('pending', 'Pending')
|
||||
]
|
||||
|
||||
AVAILABLE_PRIORITIES = [
|
||||
('5', 'Lowest'),
|
||||
('4', 'Low'),
|
||||
('3', 'Normal'),
|
||||
('2', 'High'),
|
||||
('5', 'Lowest'),
|
||||
('4', 'Low'),
|
||||
('3', 'Normal'),
|
||||
('2', 'High'),
|
||||
('1', 'Highest')
|
||||
]
|
||||
|
||||
class crm_case_section(osv.osv):
|
||||
""" Cases Section"""
|
||||
"""Sales Team"""
|
||||
|
||||
_name = "crm.case.section"
|
||||
_description = "Sales Teams"
|
||||
_order = "name"
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Sales Team', size=64, required=True, translate=True),
|
||||
'code': fields.char('Code', size=8),
|
||||
'name': fields.char('Sales Team', size=64, required=True, translate=True),
|
||||
'code': fields.char('Code', size=8),
|
||||
'active': fields.boolean('Active', help="If the active field is set to \
|
||||
true, it will allow you to hide the sales team without removing it."),
|
||||
'allow_unlink': fields.boolean('Allow Delete', help="Allows to delete non draft cases"),
|
||||
'user_id': fields.many2one('res.users', 'Responsible User'),
|
||||
true, it will allow you to hide the sales team without removing it."),
|
||||
'allow_unlink': fields.boolean('Allow Delete', help="Allows to delete non draft cases"),
|
||||
'user_id': fields.many2one('res.users', 'Responsible User'),
|
||||
'reply_to': fields.char('Reply-To', size=64, help="The email address put \
|
||||
in the 'Reply-To' of all emails sent by Open ERP about cases in this sales team"),
|
||||
'parent_id': fields.many2one('crm.case.section', 'Parent Section'),
|
||||
'child_ids': fields.one2many('crm.case.section', 'parent_id', 'Child Sections'),
|
||||
'parent_id': fields.many2one('crm.case.section', 'Parent Team'),
|
||||
'child_ids': fields.one2many('crm.case.section', 'parent_id', 'Child Teams'),
|
||||
'resource_calendar_id': fields.many2one('resource.calendar', "Resource's Calendar"),
|
||||
'server_id':fields.many2one('email.smtpclient', 'Server ID'),
|
||||
'note': fields.text('Description'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'active': lambda *a: 1,
|
||||
'allow_unlink': lambda *a: 1,
|
||||
'active': lambda *a: 1,
|
||||
'allow_unlink': lambda *a: 1,
|
||||
}
|
||||
|
||||
_sql_constraints = [
|
||||
('code_uniq', 'unique (code)', 'The code of the section must be unique !')
|
||||
('code_uniq', 'unique (code)', 'The code of the sales team must be unique !')
|
||||
]
|
||||
|
||||
def _check_recursion(self, cr, uid, ids):
|
||||
|
@ -100,18 +100,20 @@ class crm_case_section(osv.osv):
|
|||
(_check_recursion, 'Error ! You cannot create recursive sections.', ['parent_id'])
|
||||
]
|
||||
|
||||
def name_get(self, cr, uid, ids, context={}):
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
"""Overrides orm name_get 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 section ids
|
||||
"""
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
if not len(ids):
|
||||
return []
|
||||
reads = self.read(cr, uid, ids, ['name', 'parent_id'], context)
|
||||
res = []
|
||||
if not ids:
|
||||
return res
|
||||
reads = self.read(cr, uid, ids, ['name', 'parent_id'], context)
|
||||
|
||||
for record in reads:
|
||||
name = record['name']
|
||||
|
@ -119,6 +121,7 @@ class crm_case_section(osv.osv):
|
|||
name = record['parent_id'][1] + ' / ' + name
|
||||
res.append((record['id'], name))
|
||||
return res
|
||||
|
||||
crm_case_section()
|
||||
|
||||
|
||||
|
@ -129,13 +132,13 @@ class crm_case_categ(osv.osv):
|
|||
_description = "Category of case"
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Case Category Name', size=64, required=True, translate=True),
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
'object_id': fields.many2one('ir.model', 'Object Name'),
|
||||
'name': fields.char('Case Category Name', size=64, required=True, translate=True),
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
'object_id': fields.many2one('ir.model', 'Object Name'),
|
||||
}
|
||||
def _find_object_id(self, cr, uid, context=None):
|
||||
|
||||
"""
|
||||
"""Finds id for case object
|
||||
@param self: The object pointer
|
||||
@param cr: the current row, from the database cursor,
|
||||
@param uid: the current user’s ID for security checks,
|
||||
|
@ -149,7 +152,7 @@ class crm_case_categ(osv.osv):
|
|||
_defaults = {
|
||||
'object_id' : _find_object_id
|
||||
}
|
||||
#
|
||||
|
||||
crm_case_categ()
|
||||
|
||||
|
||||
|
@ -161,19 +164,17 @@ class crm_case_resource_type(osv.osv):
|
|||
_rec_name = "name"
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Case Resource Type', size=64, required=True, translate=True),
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
'object_id': fields.many2one('ir.model', 'Object Name'),
|
||||
'name': fields.char('Case Resource Type', size=64, required=True, translate=True),
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
'object_id': fields.many2one('ir.model', 'Object Name'),
|
||||
}
|
||||
def _find_object_id(self, cr, uid, context=None):
|
||||
"""
|
||||
"""Finds id for case object
|
||||
@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
|
||||
"""
|
||||
|
||||
|
||||
object_id = context and context.get('object_id', False) or False
|
||||
ids = self.pool.get('ir.model').search(cr, uid, [('model', '=', object_id)])
|
||||
return ids and ids[0]
|
||||
|
@ -194,46 +195,44 @@ class crm_case_stage(osv.osv):
|
|||
_order = "sequence"
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Stage Name', size=64, required=True, translate=True),
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
'name': fields.char('Stage Name', size=64, required=True, translate=True),
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
'sequence': fields.integer('Sequence', help="Gives the sequence order \
|
||||
when displaying a list of case stages."),
|
||||
'object_id': fields.many2one('ir.model', 'Object Name'),
|
||||
'probability': fields.float('Probability (%)', required=True),
|
||||
'on_change': fields.boolean('Change Probability Automatically',\
|
||||
help="Change Probability on next and previous stages."),
|
||||
when displaying a list of case stages."),
|
||||
'object_id': fields.many2one('ir.model', 'Object Name'),
|
||||
'probability': fields.float('Probability (%)', required=True),
|
||||
'on_change': fields.boolean('Change Probability Automatically', \
|
||||
help="Change Probability on next and previous stages."),
|
||||
'requirements': fields.text('Requirements')
|
||||
}
|
||||
def _find_object_id(self, cr, uid, context=None):
|
||||
|
||||
"""
|
||||
"""Finds id for case object
|
||||
@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
|
||||
"""
|
||||
|
||||
object_id = context and context.get('object_id', False) or False
|
||||
ids = self.pool.get('ir.model').search(cr, uid, [('model', '=', object_id)])
|
||||
return ids and ids[0]
|
||||
|
||||
_defaults = {
|
||||
'sequence': lambda *args: 1,
|
||||
'probability': lambda *args: 0.0,
|
||||
'sequence': lambda *args: 1,
|
||||
'probability': lambda *args: 0.0,
|
||||
'object_id' : _find_object_id
|
||||
}
|
||||
|
||||
crm_case_stage()
|
||||
|
||||
def _links_get(self, cr, uid, context={}):
|
||||
def _links_get(self, cr, uid, context=None):
|
||||
"""Gets links value for reference field
|
||||
@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
|
||||
"""
|
||||
@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
|
||||
"""
|
||||
|
||||
|
||||
if not context:
|
||||
context = {}
|
||||
obj = self.pool.get('res.request.link')
|
||||
ids = obj.search(cr, uid, [])
|
||||
res = obj.read(cr, uid, ids, ['object', 'name'], context)
|
||||
|
@ -246,16 +245,13 @@ class crm_case(osv.osv):
|
|||
_description = "Case"
|
||||
|
||||
def _email_last(self, cursor, user, ids, name, arg, context=None):
|
||||
|
||||
"""Return History
|
||||
"""Return last email from History
|
||||
@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’s IDs
|
||||
@param context: A standard dictionary for contextual values
|
||||
"""
|
||||
|
||||
|
||||
res = {}
|
||||
for case in self.browse(cursor, user, ids):
|
||||
if case.history_line:
|
||||
|
@ -264,30 +260,31 @@ class crm_case(osv.osv):
|
|||
res[case.id] = False
|
||||
return res
|
||||
|
||||
def copy(self, cr, uid, id, default=None, context={}):
|
||||
|
||||
"""
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
"""Overrides orm copy 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 case’s IDs
|
||||
@param context: A standard dictionary for contextual values
|
||||
"""
|
||||
|
||||
if not context:
|
||||
context = {}
|
||||
if not default:
|
||||
default = {}
|
||||
default.update({'state': 'draft', 'id': False})
|
||||
return super(crm_case, self).copy(cr, uid, id, default, context)
|
||||
|
||||
def _get_log_ids(self, cr, uid, ids, field_names, arg, context={}):
|
||||
|
||||
"""
|
||||
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 log’s IDs
|
||||
@param ids: List of Case IDs
|
||||
@param context: A standard dictionary for contextual values
|
||||
"""
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
result = {}
|
||||
history_obj = False
|
||||
|
@ -306,7 +303,7 @@ class crm_case(osv.osv):
|
|||
|
||||
for case in self.browse(cr, uid, ids, context):
|
||||
model_ids = model_obj.search(cr, uid, [('model', '=', case._name)])
|
||||
history_ids = history_obj.search(cr, uid, [('model_id', '=', model_ids[0]),\
|
||||
history_ids = history_obj.search(cr, uid, [('model_id', '=', model_ids[0]), \
|
||||
('res_id', '=', case.id)])
|
||||
if history_ids:
|
||||
result[case.id] = {name: history_ids}
|
||||
|
@ -316,64 +313,60 @@ class crm_case(osv.osv):
|
|||
return result
|
||||
|
||||
_columns = {
|
||||
'id': fields.integer('ID', readonly=True),
|
||||
'name': fields.char('Description', size=1024, required=True),
|
||||
'id': fields.integer('ID', readonly=True),
|
||||
'name': fields.char('Description', size=1024, required=True),
|
||||
'active': fields.boolean('Active', help="If the active field is set to\
|
||||
true, it will allow you to hide the case without removing it."),
|
||||
'description': fields.text('Description'),
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team',\
|
||||
true, 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.'),
|
||||
'email_from': fields.char('Email', size=128, help="These people will receive email."),
|
||||
Define Responsible user and Email account for mail gateway.'),
|
||||
'email_from': fields.char('Email', size=128, help="These people will receive email."),
|
||||
'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"),
|
||||
'probability': fields.float('Probability'),
|
||||
'email_last': fields.function(_email_last, method=True,
|
||||
string='Latest E-Mail', type='text'),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner'),
|
||||
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact',\
|
||||
domain="[('partner_id','=',partner_id)]"),
|
||||
'create_date': fields.datetime('Creation Date' , readonly=True),
|
||||
'write_date': fields.datetime('Update Date' , readonly=True),
|
||||
'date_deadline': fields.date('Deadline'),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
'history_line': fields.function(_get_log_ids, method=True, type='one2many',\
|
||||
multi="history_line", relation="crm.case.history", string="Communication"),
|
||||
'log_ids': fields.function(_get_log_ids, method=True, type='one2many',\
|
||||
multi="log_ids", relation="crm.case.log", string="Logs History"),
|
||||
'stage_id': fields.many2one ('crm.case.stage', 'Stage',\
|
||||
" communication between partner and users by email"),
|
||||
'probability': fields.float('Probability'),
|
||||
'email_last': fields.function(_email_last, method=True,
|
||||
string='Latest E-Mail', type='text'),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner'),
|
||||
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \
|
||||
domain="[('partner_id','=',partner_id)]"),
|
||||
'create_date': fields.datetime('Creation Date' , readonly=True),
|
||||
'write_date': fields.datetime('Update Date' , readonly=True),
|
||||
'date_deadline': fields.date('Deadline'),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
'history_line': fields.function(_get_log_ids, method=True, type='one2many', \
|
||||
multi="history_line", relation="crm.case.history", string="Communication"),
|
||||
'log_ids': fields.function(_get_log_ids, method=True, type='one2many', \
|
||||
multi="log_ids", relation="crm.case.log", string="Logs History"),
|
||||
'stage_id': fields.many2one ('crm.case.stage', 'Stage', \
|
||||
domain="[('section_id','=',section_id),\
|
||||
('object_id.model', '=', 'crm.opportunity')]"),
|
||||
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True,
|
||||
('object_id.model', '=', 'crm.opportunity')]"),
|
||||
'state': fields.selection(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\'.\
|
||||
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
|
||||
'company_id': fields.many2one('res.company', 'Company'),
|
||||
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
|
||||
'company_id': fields.many2one('res.company', 'Company'),
|
||||
}
|
||||
def _get_default_partner_address(self, cr, uid, context):
|
||||
|
||||
"""
|
||||
"""Gives id of default address for current user
|
||||
@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
|
||||
"""
|
||||
|
||||
if not context.get('portal', False):
|
||||
return False
|
||||
return self.pool.get('res.users').browse(cr, uid, uid, context).address_id.id
|
||||
|
||||
def _get_default_partner(self, cr, uid, context):
|
||||
|
||||
"""
|
||||
"""Gives id of partner for current user
|
||||
@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
|
||||
"""
|
||||
|
||||
if not context.get('portal', False):
|
||||
return False
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid, context)
|
||||
|
@ -382,14 +375,12 @@ class crm_case(osv.osv):
|
|||
return user.address_id.partner_id.id
|
||||
|
||||
def _get_default_email(self, cr, uid, context):
|
||||
|
||||
"""
|
||||
"""Gives default email address for current user
|
||||
@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
|
||||
"""
|
||||
|
||||
if not context.get('portal', False):
|
||||
return False
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid, context)
|
||||
|
@ -398,63 +389,66 @@ class crm_case(osv.osv):
|
|||
return user.address_id.email
|
||||
|
||||
def _get_default_user(self, cr, uid, context):
|
||||
"""
|
||||
"""Gives current user id
|
||||
@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
|
||||
"""
|
||||
|
||||
if context.get('portal', False):
|
||||
return False
|
||||
return uid
|
||||
|
||||
def _get_section(self, cr, uid, context):
|
||||
"""
|
||||
"""Gives section id for current User
|
||||
@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
|
||||
"""
|
||||
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||
return user.context_section_id.id or False
|
||||
|
||||
_defaults = {
|
||||
'active': lambda *a: 1,
|
||||
'user_id': _get_default_user,
|
||||
'partner_id': _get_default_partner,
|
||||
'partner_address_id': _get_default_partner_address,
|
||||
'email_from': _get_default_email,
|
||||
'state': lambda *a: 'draft',
|
||||
'section_id': _get_section,
|
||||
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c),
|
||||
'active': lambda *a: 1,
|
||||
'user_id': _get_default_user,
|
||||
'partner_id': _get_default_partner,
|
||||
'partner_address_id': _get_default_partner_address,
|
||||
'email_from': _get_default_email,
|
||||
'state': lambda *a: 'draft',
|
||||
'section_id': _get_section,
|
||||
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c),
|
||||
}
|
||||
|
||||
_order = 'date_deadline desc, create_date desc,id desc'
|
||||
|
||||
def unlink(self, cr, uid, ids, context={}):
|
||||
|
||||
"""
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
"""Overrides orm unlink 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 case’s IDs
|
||||
@param context: A standard dictionary for contextual values"""
|
||||
@param ids: List of case IDs
|
||||
@param context: A standard dictionary for contextual values
|
||||
"""
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
for case in self.browse(cr, uid, ids, context):
|
||||
if (not case.section_id.allow_unlink) and (case.state <> 'draft'):
|
||||
raise osv.except_osv(_('Warning !'),
|
||||
raise osv.except_osv(_('Warning !'),
|
||||
_('You can not delete this case. You should better cancel it.'))
|
||||
return super(crm_case, self).unlink(cr, uid, ids, context)
|
||||
|
||||
def stage_next(self, cr, uid, ids, context={}):
|
||||
"""
|
||||
def stage_next(self, cr, uid, ids, context=None):
|
||||
"""This function computes next stage for case from its current stage
|
||||
using available stage for that case type
|
||||
@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 stage next’s IDs
|
||||
@param ids: List of case IDs
|
||||
@param context: A standard dictionary for contextual values"""
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
s = self.get_stage_dict(cr, uid, ids, context=context)
|
||||
for case in self.browse(cr, uid, ids, context):
|
||||
|
@ -465,15 +459,17 @@ class crm_case(osv.osv):
|
|||
self.write(cr, uid, [case.id], {'stage_id': s[section][st]})
|
||||
return True
|
||||
|
||||
def get_stage_dict(self, cr, uid, ids, context={}):
|
||||
"""
|
||||
def get_stage_dict(self, cr, uid, ids, context=None):
|
||||
"""This function gives dictionary for stage according to stage levels
|
||||
@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 stage dict’s IDs
|
||||
@param ids: List of case IDs
|
||||
@param context: A standard dictionary for contextual values"""
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
sid = self.pool.get('crm.case.stage').search(cr, uid,\
|
||||
sid = self.pool.get('crm.case.stage').search(cr, uid, \
|
||||
[('object_id.model', '=', self._name)], context=context)
|
||||
s = {}
|
||||
previous = {}
|
||||
|
@ -484,20 +480,23 @@ class crm_case(osv.osv):
|
|||
previous[section] = stage.id
|
||||
return s
|
||||
|
||||
def stage_previous(self, cr, uid, ids, context={}):
|
||||
"""
|
||||
def stage_previous(self, cr, uid, ids, context=None):
|
||||
"""This function computes previous stage for case from its current stage
|
||||
using available stage for that case type
|
||||
@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 stage previous’s IDs
|
||||
@param ids: List of case IDs
|
||||
@param context: A standard dictionary for contextual values"""
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
s = self.get_stage_dict(cr, uid, ids, context=context)
|
||||
for case in self.browse(cr, uid, ids, context):
|
||||
section = (case.section_id.id or False)
|
||||
|
||||
if section in s:
|
||||
st = case.stage_id.id or False
|
||||
st = case.stage_id.id or False
|
||||
s[section] = dict([(v, k) for (k, v) in s[section].iteritems()])
|
||||
if st in s[section]:
|
||||
self.write(cr, uid, [case.id], {'stage_id': s[section][st]})
|
||||
|
@ -508,12 +507,17 @@ class crm_case(osv.osv):
|
|||
@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 History’s IDs
|
||||
@param ids: List of Case ids
|
||||
@param keyword: Case action keyword e.g.: If case is closed "Close" keyword is used
|
||||
@param history: Value True/False, If True it makes entry in case History otherwise in Case Log
|
||||
@param email: Email address if any
|
||||
@param details: Details of case history if any
|
||||
@param context: A standard dictionary for contextual values"""
|
||||
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
model_obj = self.pool.get('ir.model')
|
||||
|
||||
obj = self.pool.get('crm.case.log')
|
||||
for case in cases:
|
||||
model_ids = model_obj.search(cr, uid, [('model', '=', case._name)])
|
||||
data = {
|
||||
|
@ -526,33 +530,31 @@ class crm_case(osv.osv):
|
|||
'message_id':message_id
|
||||
}
|
||||
|
||||
obj = self.pool.get('crm.case.log')
|
||||
if history:
|
||||
obj = self.pool.get('crm.case.history')
|
||||
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)
|
||||
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)
|
||||
case.user_id.address_id.email) or tools.config.get('email_from', False)
|
||||
res = obj.create(cr, uid, data, context)
|
||||
return True
|
||||
|
||||
_history = __history
|
||||
history = __history
|
||||
|
||||
def create(self, cr, uid, *args, **argv):
|
||||
|
||||
"""
|
||||
"""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 *args: Give Tuple Value
|
||||
@Paran **args: Give Dictionay of Keyword Value
|
||||
@param *args: Tuple Value for additional Params
|
||||
@param **argv: Dictionay of Keyword Params
|
||||
"""
|
||||
|
||||
res = super(crm_case, self).create(cr, uid, *args, **argv)
|
||||
cases = self.browse(cr, uid, [res])
|
||||
cases[0].state # to fill the browse record cache
|
||||
|
@ -560,97 +562,33 @@ class crm_case(osv.osv):
|
|||
return res
|
||||
|
||||
def add_reply(self, cursor, user, ids, context=None):
|
||||
|
||||
"""
|
||||
"""This function finds last email and gives its description value for reply mail
|
||||
@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 cursor: the current row, from the database cursor,
|
||||
@param user: the current user’s ID for security checks
|
||||
@param ids: List of case IDs
|
||||
@param context: A standard dictionary for contextual values
|
||||
"""
|
||||
|
||||
for case in self.browse(cursor, user, ids, context=context):
|
||||
if case.email_last:
|
||||
description = case.email_last
|
||||
self.write(cursor, user, case.id, {
|
||||
'description': '> ' + description.replace('\n', '\n> '),
|
||||
'description': '> ' + description.replace('\n', '\n> '),
|
||||
}, context=context)
|
||||
return True
|
||||
|
||||
def case_log(self, cr, uid, ids, context={}, email=False, *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 context: A standard dictionary for contextual values
|
||||
@param *args: Give Tuple Value
|
||||
"""
|
||||
|
||||
cases = self.browse(cr, uid, ids)
|
||||
self.__history(cr, uid, cases, _('Historize'), history=True, email=email)
|
||||
return self.write(cr, uid, ids, {'description': False, 'som': False,
|
||||
'canal_id': False})
|
||||
|
||||
def case_log_reply(self, cr, uid, ids, context={}, email=False, *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 context: A standard dictionary for contextual values
|
||||
@param *args: Give Tuple Value
|
||||
"""
|
||||
|
||||
cases = self.browse(cr, uid, ids)
|
||||
for case in cases:
|
||||
if not case.email_from:
|
||||
raise osv.except_osv(_('Error!'),
|
||||
_('You must put a Partner eMail to use this action!'))
|
||||
|
||||
if not case.user_id:
|
||||
raise osv.except_osv(_('Error!'),
|
||||
_('You must define a responsible user for this case in order to use this action!'))
|
||||
|
||||
if not case.description:
|
||||
raise osv.except_osv(_('Error!'),
|
||||
_('Can not send mail with empty body,you should have description in the body'))
|
||||
|
||||
self.__history(cr, uid, cases, _('Send'), history=True, email=False)
|
||||
for case in cases:
|
||||
self.write(cr, uid, [case.id], {
|
||||
'description': False,
|
||||
})
|
||||
emails = [case.email_from] + (case.email_cc or '').split(',')
|
||||
emails = filter(None, emails)
|
||||
body = case.description or ''
|
||||
if case.user_id.signature:
|
||||
body += '\n\n%s' % (case.user_id.signature)
|
||||
|
||||
emailfrom = case.user_id.address_id and case.user_id.address_id.email or False
|
||||
if not emailfrom:
|
||||
raise osv.except_osv(_('Error!'),
|
||||
_("No E-Mail ID Found for your Company address!"))
|
||||
|
||||
tools.email_send(
|
||||
emailfrom,
|
||||
emails,
|
||||
'[' + str(case.id) + '] ' + case.name,
|
||||
self.format_body(body),
|
||||
reply_to = case.section_id.reply_to,
|
||||
openobject_id = str(case.id)
|
||||
)
|
||||
self.__history(cr, uid, [case], _('Send'), history=True, email=emails, details=body, email_from=emailfrom)
|
||||
return True
|
||||
|
||||
def onchange_partner_id(self, cr, uid, ids, part, email=False):
|
||||
"""
|
||||
"""This function returns value of partner address based on partner
|
||||
@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 part: Partner's id
|
||||
@email: Partner's email ID
|
||||
"""
|
||||
if not part:
|
||||
return {'value': {'partner_address_id': False,
|
||||
'email_from': False,
|
||||
return {'value': {'partner_address_id': False,
|
||||
'email_from': False,
|
||||
}}
|
||||
addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
|
||||
data = {'partner_address_id': addr['contact']}
|
||||
|
@ -658,29 +596,27 @@ class crm_case(osv.osv):
|
|||
return {'value': data}
|
||||
|
||||
def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
|
||||
|
||||
"""
|
||||
"""This function returns value of partner email based on Partner Address
|
||||
@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 add: Id of Partner's address
|
||||
@email: Partner's email ID
|
||||
"""
|
||||
|
||||
data = {}
|
||||
if not add:
|
||||
return {'value': {'email_from': False}}
|
||||
address = self.pool.get('res.partner.address').browse(cr, uid, add)
|
||||
data['email_from'] = address.email
|
||||
return {'value': data}
|
||||
return {'value': {'email_from': address.email}}
|
||||
|
||||
def case_close(self, cr, uid, ids, *args):
|
||||
"""
|
||||
"""Closes 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's Ids
|
||||
@param *args: Give Tuple Value
|
||||
@param ids: List of case Ids
|
||||
@param *args: Tuple Value for additional Params
|
||||
"""
|
||||
|
||||
cases = self.browse(cr, uid, ids)
|
||||
cases[0].state # to fill the browse record cache
|
||||
self.__history(cr, uid, cases, _('Close'))
|
||||
|
@ -692,14 +628,13 @@ class crm_case(osv.osv):
|
|||
return True
|
||||
|
||||
def case_escalate(self, cr, uid, ids, *args):
|
||||
"""
|
||||
"""Escalates case to top level
|
||||
@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's Ids
|
||||
@param *args: Give Tuple Value
|
||||
@param ids: List of case Ids
|
||||
@param *args: Tuple Value for additional Params
|
||||
"""
|
||||
|
||||
cases = self.browse(cr, uid, ids)
|
||||
for case in cases:
|
||||
data = {'active': True, 'user_id': False}
|
||||
|
@ -710,42 +645,39 @@ class crm_case(osv.osv):
|
|||
data['user_id'] = case.section_id.parent_id.user_id.id
|
||||
else:
|
||||
raise osv.except_osv(_('Error !'), _('You can not escalate this case.\nYou are already at the top level.'))
|
||||
self.write(cr, uid, ids, data)
|
||||
self.write(cr, uid, [case.id], data)
|
||||
cases = self.browse(cr, uid, ids)
|
||||
self.__history(cr, uid, cases, _('Escalate'))
|
||||
self._action(cr, uid, cases, 'escalate')
|
||||
return True
|
||||
|
||||
|
||||
def case_open(self, cr, uid, ids, *args):
|
||||
"""
|
||||
"""Opens 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's Ids
|
||||
@param *args: Give Tuple Value
|
||||
@param ids: List of case Ids
|
||||
@param *args: Tuple Value for additional Params
|
||||
"""
|
||||
|
||||
cases = self.browse(cr, uid, ids)
|
||||
self.__history(cr, uid, cases, _('Open'))
|
||||
|
||||
for case in cases:
|
||||
data = {'state': 'open', 'active': True}
|
||||
if not case.user_id:
|
||||
data['user_id'] = uid
|
||||
self.write(cr, uid, ids, data)
|
||||
self.write(cr, uid, case.id, data)
|
||||
self._action(cr, uid, cases, 'open')
|
||||
return True
|
||||
|
||||
|
||||
def case_cancel(self, cr, uid, ids, *args):
|
||||
"""
|
||||
"""Cancels 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's Ids
|
||||
@param *args: Give Tuple Value
|
||||
@param ids: List of case Ids
|
||||
@param *args: Tuple Value for additional Params
|
||||
"""
|
||||
|
||||
cases = self.browse(cr, uid, ids)
|
||||
cases[0].state # to fill the browse record cache
|
||||
self.__history(cr, uid, cases, _('Cancel'))
|
||||
|
@ -754,15 +686,13 @@ class crm_case(osv.osv):
|
|||
return True
|
||||
|
||||
def case_pending(self, cr, uid, ids, *args):
|
||||
|
||||
"""
|
||||
"""Marks case as pending
|
||||
@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's Ids
|
||||
@param *args: Give Tuple Value
|
||||
@param ids: List of case Ids
|
||||
@param *args: Tuple Value for additional Params
|
||||
"""
|
||||
|
||||
cases = self.browse(cr, uid, ids)
|
||||
cases[0].state # to fill the browse record cache
|
||||
self.__history(cr, uid, cases, _('Pending'))
|
||||
|
@ -771,15 +701,13 @@ class crm_case(osv.osv):
|
|||
return True
|
||||
|
||||
def case_reset(self, cr, uid, ids, *args):
|
||||
|
||||
"""
|
||||
"""Resets case as draft
|
||||
@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's Ids
|
||||
@param *args: Give Tuple Value
|
||||
@param ids: List of case Ids
|
||||
@param *args: Tuple Value for additional Params
|
||||
"""
|
||||
|
||||
cases = self.browse(cr, uid, ids)
|
||||
cases[0].state # to fill the browse record cache
|
||||
self.__history(cr, uid, cases, _('Draft'))
|
||||
|
@ -797,16 +725,16 @@ class crm_case_log(osv.osv):
|
|||
|
||||
_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'),
|
||||
'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'),
|
||||
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
}
|
||||
|
||||
crm_case_log()
|
||||
|
@ -820,14 +748,13 @@ class crm_case_history(osv.osv):
|
|||
_inherits = {'crm.case.log': "log_id"}
|
||||
|
||||
def _note_get(self, cursor, user, ids, name, arg, 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 ids: List of case History’s IDs
|
||||
@param context: A standard dictionary for contextual values
|
||||
""" 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 or '/') + ' (' + str(hist.date) + ')\n'
|
||||
|
@ -850,7 +777,7 @@ class users(osv.osv):
|
|||
_inherit = 'res.users'
|
||||
_description = "Users"
|
||||
_columns = {
|
||||
'context_section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
'context_section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
}
|
||||
users()
|
||||
|
||||
|
@ -858,7 +785,7 @@ users()
|
|||
class res_partner(osv.osv):
|
||||
_inherit = 'res.partner'
|
||||
_columns = {
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
}
|
||||
res_partner()
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ class case(osv.osv):
|
|||
"""
|
||||
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 Section"))
|
||||
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:
|
||||
|
@ -259,11 +259,11 @@ class base_action_rule_line(osv.osv):
|
|||
return res + crm.AVAILABLE_PRIORITIES
|
||||
|
||||
_columns = {
|
||||
'trg_section_id': fields.many2one('crm.case.section', 'Section'),
|
||||
'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 section to'),
|
||||
'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."),
|
||||
|
|
|
@ -1,52 +1,53 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
<data noupdate="1">
|
||||
|
||||
<menuitem id="base.menu_aftersale" name="After-Sale Services"
|
||||
parent="base.menu_base_partner" sequence="6" />
|
||||
<menuitem id="base.menu_aftersale" name="After-Sale Services"
|
||||
groups="base.group_extended"
|
||||
parent="base.menu_base_partner" sequence="6" />
|
||||
|
||||
<!-- Claims Menu -->
|
||||
<!-- Claims Menu -->
|
||||
|
||||
<record model="ir.actions.act_window" id="crm_case_categ_claim0">
|
||||
<field name="name">Claims</field>
|
||||
<field name="res_model">crm.claim</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,calendar,form,graph</field>
|
||||
<field name="view_id" ref="crm_case_claims_tree_view"/>
|
||||
<field name="context">{"search_default_section_id":section_id,"search_default_current":1,"search_default_my_claims":1}</field>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_claims_filter"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window" id="crm_case_categ_claim0">
|
||||
<field name="name">Claims</field>
|
||||
<field name="res_model">crm.claim</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,calendar,form,graph</field>
|
||||
<field name="view_id" ref="crm_case_claims_tree_view"/>
|
||||
<field name="context">{"search_default_section_id":section_id,"search_default_current":1,"search_default_my_claims":1}</field>
|
||||
<field name="search_view_id" ref="crm.view_crm_case_claims_filter"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_claim0">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="crm_case_claims_tree_view"/>
|
||||
<field name="act_window_id" ref="crm_case_categ_claim0"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_claim0">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="crm_case_claims_tree_view"/>
|
||||
<field name="act_window_id" ref="crm_case_categ_claim0"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_calendar_claim0">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">calendar</field>
|
||||
<field name="view_id" ref="crm_case_claims_calendar_view"/>
|
||||
<field name="act_window_id" ref="crm_case_categ_claim0"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_calendar_claim0">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">calendar</field>
|
||||
<field name="view_id" ref="crm_case_claims_calendar_view"/>
|
||||
<field name="act_window_id" ref="crm_case_categ_claim0"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_form_claim0">
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_case_claims_form_view"/>
|
||||
<field name="act_window_id" ref="crm_case_categ_claim0"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_crm_tag_form_claim0">
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="crm_case_claims_form_view"/>
|
||||
<field name="act_window_id" ref="crm_case_categ_claim0"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_crm_sec_graph_view_act_job">
|
||||
<field name="sequence" eval="4"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="crm_case_graph_view_stage_cost"/>
|
||||
<field name="act_window_id" ref="crm_case_categ_claim0"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_crm_sec_graph_view_act_job">
|
||||
<field name="sequence" eval="4"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="crm_case_graph_view_stage_cost"/>
|
||||
<field name="act_window_id" ref="crm_case_categ_claim0"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Claims" id="menu_crm_case_claims"
|
||||
parent="base.menu_aftersale" action="crm_case_categ_claim0" />
|
||||
<menuitem name="Claims" id="menu_crm_case_claims"
|
||||
parent="base.menu_aftersale" action="crm_case_categ_claim0" />
|
||||
|
||||
</data>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -108,7 +108,7 @@
|
|||
</group>
|
||||
<separator colspan="4" string="Status and Categorization"/>
|
||||
<group colspan="4" col="6">
|
||||
<field name="user_id" string="Responsible" select="2"/>
|
||||
<field name="user_id" string="Responsible"/>
|
||||
<field name="section_id" widget="selection"/>
|
||||
<label string="Stage: " align="1.0"/>
|
||||
<group colspan="1" col="2">
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
<!-- MENU -->
|
||||
|
||||
<menuitem id="base.menu_fundrising" name="Fund Raising"
|
||||
parent="base.menu_base_partner" sequence="7" />
|
||||
groups="base.group_extended"
|
||||
parent="base.menu_base_partner" sequence="7" />
|
||||
|
||||
<record model="ir.actions.act_window" id="crm_case_category_act_fund_all1">
|
||||
<field name="name">Funds</field>
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
<menuitem action="crm_fund_categ_action"
|
||||
id="menu_crm_case_fundraising-act"
|
||||
groups="base.group_extended"
|
||||
parent="crm.menu_crm_case_categ" />
|
||||
|
||||
<!-- Fund Stage Form View -->
|
||||
|
@ -29,6 +30,7 @@
|
|||
</record>
|
||||
|
||||
<menuitem action="crm_fundraising_stage_act"
|
||||
groups="base.group_extended"
|
||||
id="menu_crm_fundraising_stage_act"
|
||||
parent="crm.menu_crm_case_stage" />
|
||||
|
||||
|
@ -44,6 +46,7 @@
|
|||
</record>
|
||||
|
||||
<menuitem action="crm_fundraising_resource_act"
|
||||
groups="base.group_extended"
|
||||
id="menu_crm_fundraising_resource_act"
|
||||
parent="crm.menu_crm_case_resource_type" />
|
||||
|
||||
|
@ -78,6 +81,7 @@
|
|||
states="draft,open" type="object" icon="gtk-media-pause" />
|
||||
<button name="case_escalate" string="Escalate"
|
||||
states="open,draft,pending" type="object"
|
||||
groups="base.group_extended"
|
||||
icon="gtk-go-up" />
|
||||
<button name="case_reset" string="Reset to Draft"
|
||||
states="done,cancel" type="object" icon="gtk-convert" />
|
||||
|
@ -117,7 +121,7 @@
|
|||
<field name="probability"/>
|
||||
<separator colspan="4" string="Categorization"/>
|
||||
<group colspan="4" col="6">
|
||||
<field name="user_id" select="2" string="Responsible"/>
|
||||
<field name="user_id" string="Responsible"/>
|
||||
<field name="section_id" colspan="1" widget="selection"/>
|
||||
<field name="categ_id" select="1"
|
||||
widget="selection"
|
||||
|
@ -125,11 +129,11 @@
|
|||
<field name="date"/>
|
||||
<field name="duration"/>
|
||||
</group>
|
||||
<separator colspan="4" string="Details"/>
|
||||
<separator colspan="4" string="Notes"/>
|
||||
<field name="description" nolabel="1" colspan="4"/>
|
||||
<separator colspan="4"/>
|
||||
<group col="8" colspan="4">
|
||||
<field name="state" select="2"/>
|
||||
<field name="state"/>
|
||||
<button name="case_close" string="Done"
|
||||
states="open,draft,pending" type="object"
|
||||
icon="gtk-close" />
|
||||
|
@ -144,6 +148,7 @@
|
|||
icon="gtk-media-pause" />
|
||||
<button name="case_escalate" string="Escalate"
|
||||
states="open,draft,pending" type="object"
|
||||
groups="base.group_extended"
|
||||
icon="gtk-go-up" />
|
||||
<button name="case_reset"
|
||||
string="Reset to Draft" states="done,cancel"
|
||||
|
@ -277,7 +282,7 @@
|
|||
domain="[('user_id','=', False)]"
|
||||
help="Unassigned" />
|
||||
</field>
|
||||
<field name="section_id" select="1" widget="selection" string="Section">
|
||||
<field name="section_id" select="1" widget="selection" string="Sales Team">
|
||||
<filter icon="terp-crm"
|
||||
domain="[('section_id','=',context.get('section_id',False))]"
|
||||
help="My section" />
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
<group colspan="4" col="4">
|
||||
<field colspan="4" name="name" select="1"/>
|
||||
<field name="date" select="1"/>
|
||||
<field name="date_deadline" select="2"/>
|
||||
<field name="date_deadline"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General">
|
||||
|
@ -38,9 +38,9 @@
|
|||
select="1" />
|
||||
<field name="partner_address_id"
|
||||
on_change="onchange_partner_address_id(partner_address_id, email_from)"
|
||||
select="2" />
|
||||
/>
|
||||
|
||||
<field name="email_from" select="2" />
|
||||
<field name="email_from" />
|
||||
<button name="remind_partner"
|
||||
states="open,pending"
|
||||
string="Send Reminder" type="object"
|
||||
|
@ -58,7 +58,7 @@
|
|||
icon="gtk-go-forward" />
|
||||
</group>
|
||||
|
||||
<separator colspan="4" string="Details"/>
|
||||
<separator colspan="4" string="Notes"/>
|
||||
<field name="description" colspan="4"
|
||||
nolabel="1" widget="text_tag" readonly="1" />
|
||||
<separator colspan="4"/>
|
||||
|
@ -88,9 +88,9 @@
|
|||
</page>
|
||||
<page string="History" groups="base.group_extended">
|
||||
<field name="id" select="1"/>
|
||||
<field name="active" select="2"/>
|
||||
<field name="categ_id" select="2"/>
|
||||
<field name="som" select="2"/>
|
||||
<field name="active"/>
|
||||
<field name="categ_id"/>
|
||||
<field name="som"/>
|
||||
<separator colspan="4" string="Dates"/>
|
||||
<field name="create_date"/>
|
||||
<field name="date_closed"/>
|
||||
|
@ -103,8 +103,8 @@
|
|||
<form string="Actions">
|
||||
<separator colspan="4" string="Action Information"/>
|
||||
<field colspan="4" name="name"/>
|
||||
<field name="date" select="2"/>
|
||||
<field name="user_id" select="2"/>
|
||||
<field name="date"/>
|
||||
<field name="user_id"/>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
|
@ -177,6 +177,7 @@
|
|||
states="draft,open" type="object"
|
||||
icon="gtk-media-pause" />
|
||||
<button name="case_escalate" string="Escalate"
|
||||
groups="base.group_extended"
|
||||
states="open,draft,pending" type="object"
|
||||
icon="gtk-go-up" />
|
||||
<button name="case_reset" string="Reset to Draft"
|
||||
|
@ -226,7 +227,7 @@
|
|||
<filter icon="terp-partner" name="my_hd_request"
|
||||
domain="[('user_id','=',uid)]" help="My Helpdesk Requests"/>
|
||||
</field>
|
||||
<field name="section_id" select="1" widget="selection" string="Section">
|
||||
<field name="section_id" select="1" widget="selection" string="Sales Team">
|
||||
<filter icon="terp-crm"
|
||||
domain="[('section_id','=',context.get('section_id',False))]"
|
||||
help="My section" />
|
||||
|
|
|
@ -81,7 +81,8 @@ class crm_lead(osv.osv):
|
|||
resource_id = False
|
||||
if lead.user_id:
|
||||
resource_ids = res_obj.search(cr, uid, [('user_id','=',lead.user_id.id)])
|
||||
resource_id = len(resource_ids) or resource_ids[0]
|
||||
if len(resource_ids):
|
||||
resource_id = resource_ids[0]
|
||||
|
||||
duration = float(ans.days)
|
||||
if lead.section_id.resource_calendar_id:
|
||||
|
@ -122,7 +123,7 @@ class crm_lead(osv.osv):
|
|||
'opportunity_id': fields.many2one('crm.opportunity', 'Opportunity'),
|
||||
|
||||
'user_id': fields.many2one('res.users', 'Salesman'),
|
||||
'referred': fields.char('Referred By', size=32),
|
||||
'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="integer", store=True),
|
||||
|
|
|
@ -25,10 +25,11 @@
|
|||
</record>
|
||||
|
||||
<menuitem id="base.menu_sales" name="Sales"
|
||||
parent="base.menu_base_partner" sequence="1" />
|
||||
parent="base.menu_base_partner" sequence="1" />
|
||||
<menuitem parent="base.menu_sales" name="Leads"
|
||||
id="menu_crm_case_categ0_act_leads"
|
||||
action="crm_case_category_act_leads_all" sequence="1" />
|
||||
groups="base.group_extended"
|
||||
id="menu_crm_case_categ0_act_leads"
|
||||
action="crm_case_category_act_leads_all" sequence="1" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
<field name="context">{'object_id':'crm.lead'}</field>
|
||||
</record>
|
||||
<menuitem action="crm_lead_stage_act" id="menu_crm_lead_stage_act"
|
||||
groups="base.group_extended"
|
||||
parent="crm.menu_crm_case_stage" />
|
||||
|
||||
<!-- Resource Type Form View -->
|
||||
|
@ -27,6 +28,7 @@
|
|||
</record>
|
||||
<menuitem action="crm_lead_resource_act"
|
||||
id="menu_crm_lead_resource_act"
|
||||
groups="base.group_extended"
|
||||
parent="crm.menu_crm_case_resource_type" />
|
||||
|
||||
<!-- CRM Lead Form View -->
|
||||
|
@ -42,18 +44,17 @@
|
|||
<field name="priority"/>
|
||||
<field name="date_deadline"/>
|
||||
<button
|
||||
name="convert_opportunity"
|
||||
string="Convert"
|
||||
help="Convert into Opportunity"
|
||||
icon="gtk-index"
|
||||
type="object"
|
||||
attrs="{'invisible':[('opportunity_id','!=',False)]}"/>
|
||||
name="convert_opportunity"
|
||||
string="Convert"
|
||||
help="Convert to Opportunity"
|
||||
icon="gtk-index"
|
||||
type="object"
|
||||
attrs="{'invisible':[('opportunity_id','!=',False)]}"/>
|
||||
<newline />
|
||||
<field name="section_id" colspan="1"
|
||||
widget="selection" />
|
||||
<field name="user_id" />
|
||||
<field name="stage_id" widget="selection"
|
||||
readonly="1"
|
||||
domain="[('object_id.model', '=', 'crm.lead')]" />
|
||||
<group col="2" colspan="1">
|
||||
<button name="stage_previous" string="Previous"
|
||||
|
@ -102,7 +103,7 @@
|
|||
<field name="description" nolabel="1" colspan="4"/>
|
||||
<separator colspan="4"/>
|
||||
<group col="8" colspan="4">
|
||||
<field name="state" select="2"/>
|
||||
<field name="state"/>
|
||||
<button name="case_close" string="Close"
|
||||
states="open,draft,pending" type="object"
|
||||
icon="gtk-close" />
|
||||
|
@ -117,6 +118,7 @@
|
|||
icon="gtk-media-pause" />
|
||||
<button name="case_escalate" string="Escalate"
|
||||
states="open,draft,pending" type="object"
|
||||
groups="base.group_extended"
|
||||
icon="gtk-go-up" />
|
||||
<button name="case_reset"
|
||||
string="Reset to Draft" states="done,cancel"
|
||||
|
@ -166,9 +168,9 @@
|
|||
<newline/>
|
||||
<field name="description" colspan="4" nolabel="1"/>
|
||||
<button colspan="4"
|
||||
string="Reply to Email"
|
||||
string="Reply to Last Email"
|
||||
name="%(action_crm_send_mail)d"
|
||||
context="{'mail':'reply', 'model': 'crm.lead'}"
|
||||
context="{'mail':'reply', 'model': 'crm.lead', 'include_original' : True}"
|
||||
icon="gtk-undo" type="action" />
|
||||
</form>
|
||||
<tree string="Communication history">
|
||||
|
@ -223,9 +225,9 @@
|
|||
states="open,draft,pending" type="object"
|
||||
icon="gtk-close" />
|
||||
<button string="Convert to Opportunity"
|
||||
name="%(action_crm_lead2opportunity)d"
|
||||
name="convert_opportunity"
|
||||
states="draft,open,pending" icon="gtk-index"
|
||||
type="action" />
|
||||
type="object" />
|
||||
<button name="case_escalate" string="Escalate"
|
||||
states="open,draft,pending" type="object"
|
||||
icon="gtk-go-up" />
|
||||
|
|
|
@ -33,9 +33,7 @@ crm_opportunity()
|
|||
|
||||
class crm_phonecall(osv.osv):
|
||||
""" CRM Phonecall """
|
||||
|
||||
_name = 'crm.phonecall'
|
||||
|
||||
crm_phonecall()
|
||||
|
||||
|
||||
|
|
|
@ -29,7 +29,9 @@
|
|||
colspan="4" />
|
||||
<field name="categ_id" widget="selection"
|
||||
string="Meeting Type"
|
||||
groups="base.group_extended"
|
||||
domain="[('object_id.model', '=', 'crm.meeting')]" />
|
||||
<newline/>
|
||||
<field name="date" string="Start Date" required="1"
|
||||
on_change="onchange_dates(date,duration,False)" />
|
||||
<field name="duration" widget="float_time"
|
||||
|
@ -99,8 +101,9 @@
|
|||
<group col="6" colspan="4">
|
||||
<group col="2" colspan="2">
|
||||
<separator colspan="2" string="Assignment"/>
|
||||
<field name="section_id" widget="selection" />
|
||||
<field name="user_id" />
|
||||
<field name="section_id" widget="selection"
|
||||
groups="base.group_extended"/>
|
||||
</group><group col="2" colspan="2">
|
||||
<separator colspan="2" string="Contacts"/>
|
||||
<field name="partner_id" string="Partner"
|
||||
|
@ -111,18 +114,18 @@
|
|||
<field name="email_from"/>
|
||||
</group><group col="2" colspan="2">
|
||||
<separator colspan="2" string="Visibility"/>
|
||||
<field name="show_as" string="Show time as"/>
|
||||
<field name="class" string="Privacy"/>
|
||||
<field name="show_as" string="Show time as" groups="base.group_extended"/>
|
||||
<field name="rrule" groups="base.group_extended" />
|
||||
<field name="recurrent_id" invisible="1" />
|
||||
<field name="recurrent_uid" invisible="1" />
|
||||
<field name="recurrent_id" invisible="1"/>
|
||||
<field name="recurrent_uid" invisible="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="Description" colspan="4" />
|
||||
<field name="description" nolabel="1" colspan="4" />
|
||||
<separator colspan="4"/>
|
||||
<group col="8" colspan="4">
|
||||
<field name="state" select="2" />
|
||||
<field name="state" />
|
||||
<button name="case_close" string="Done"
|
||||
states="open" type="object"
|
||||
icon="gtk-jump-to" />
|
||||
|
@ -155,7 +158,7 @@
|
|||
<field name="role" select="1" />
|
||||
<separator colspan="4" string="" />
|
||||
<group col="6" colspan="4">
|
||||
<field name="state" select="2" />
|
||||
<field name="state" />
|
||||
<button name="do_tentative"
|
||||
states="needs-action,declined,accepted"
|
||||
string="Uncertain"
|
||||
|
@ -203,14 +206,12 @@
|
|||
<field name="arch" type="xml">
|
||||
<tree string="Meetings"
|
||||
colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
|
||||
<field name="id" widget="char" />
|
||||
<field name="name" string="Subject" />
|
||||
<field name="partner_id" string="Partner" />
|
||||
<field name="section_id" />
|
||||
<field name="date" string="Meeting Date" />
|
||||
<field name="categ_id" />
|
||||
<field name="duration" />
|
||||
<field name="user_id" />
|
||||
<field name="state" />
|
||||
<field name="state" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -39,7 +39,7 @@ class crm_opportunity(osv.osv):
|
|||
|
||||
_name = "crm.opportunity"
|
||||
_description = "Opportunity Cases"
|
||||
_order = "priority,id desc"
|
||||
_order = "priority,date_action,id desc"
|
||||
_inherit = 'crm.case'
|
||||
|
||||
def case_open(self, cr, uid, ids, *args):
|
||||
|
@ -88,7 +88,8 @@ class crm_opportunity(osv.osv):
|
|||
resource_id = False
|
||||
if opportunity.user_id:
|
||||
resource_ids = res_obj.search(cr, uid, [('user_id','=',opportunity.user_id.id)])
|
||||
resource_id = len(resource_ids) and resource_ids[0] or False
|
||||
if resource_ids and len(resource_ids):
|
||||
resource_id = resource_ids[0]
|
||||
|
||||
duration = float(ans.days)
|
||||
if opportunity.section_id.resource_calendar_id:
|
||||
|
@ -118,9 +119,8 @@ class crm_opportunity(osv.osv):
|
|||
'categ_id': fields.many2one('crm.case.categ', 'Category', \
|
||||
domain="[('section_id','=',section_id), \
|
||||
('object_id.model', '=', 'crm.opportunity')]"),
|
||||
'type_id': fields.many2one('crm.case.resource.type', 'Resource Type',\
|
||||
domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.opportunity')]"),
|
||||
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
|
||||
'referred': fields.char('Referred By', size=64),
|
||||
'probability': fields.float('Probability (%)'),
|
||||
'planned_revenue': fields.float('Expected Revenue'),
|
||||
'ref': fields.reference('Reference', selection=crm._links_get, size=128),
|
||||
|
@ -129,6 +129,7 @@ class crm_opportunity(osv.osv):
|
|||
'user_id': fields.many2one('res.users', 'Salesman'),
|
||||
'phone': fields.char("Phone", size=64),
|
||||
'date_deadline': fields.date('Expected Closing'),
|
||||
'date_action': fields.date('Next Action'),
|
||||
'state': fields.selection(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\'.\
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
<field eval=""open"" name="state"/>
|
||||
<field eval="85000.0" name="planned_revenue"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="time.strftime('%Y-%m-07 10:05:15')" name="date"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor1"/>
|
||||
<field name="stage_id" ref="crm.stage_oppor3"/>
|
||||
<field eval=""CONS TRUST (AZ) 529701 - 1000 units"" name="name"/>
|
||||
|
@ -34,7 +33,6 @@
|
|||
<field eval="45000.0" name="planned_revenue"/>
|
||||
<field eval="50" name="probability"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="time.strftime('%Y-%m-05 12:25:15')" name="date"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor5"/>
|
||||
<field name="stage_id" ref="crm.stage_oppor1"/>
|
||||
<field eval=""3rd Round Funding - 1000 units "" name="name"/>
|
||||
|
@ -51,7 +49,6 @@
|
|||
<field eval="55000.0" name="planned_revenue"/>
|
||||
<field eval="70" name="probability"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="time.strftime('%Y-%m-14 13:55:10')" name="date"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor7"/>
|
||||
<field name="stage_id" ref="crm.stage_oppor5"/>
|
||||
<field eval=""Mediapole - 5000 units"" name="name"/>
|
||||
|
@ -68,7 +65,6 @@
|
|||
<field eval=""open"" name="state"/>
|
||||
<field eval="45000.0" name="planned_revenue"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="time.strftime('%Y-%m-23 16:32:23')" name="date"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor5"/>
|
||||
<field name="stage_id" ref="crm.stage_oppor4"/>
|
||||
<field eval=""ABC FUEL CO 829264 - 1000 units "" name="name"/>
|
||||
|
@ -84,7 +80,6 @@
|
|||
<field eval=""done"" name="state"/>
|
||||
<field eval="42000.0" name="planned_revenue"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="time.strftime('%Y-%m-25 16:05:15')" name="date"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor2"/>
|
||||
<field name="stage_id" ref="crm.stage_oppor6"/>
|
||||
<field eval=""Dirt Mining Ltd 271742 - 1000 units"" name="name"/>
|
||||
|
|
|
@ -79,6 +79,10 @@
|
|||
<field name="date_deadline" string="Expected Closing"/>
|
||||
<button string="Schedule Call"
|
||||
name="%(opportunity2phonecall_act)d" icon="gtk-redo" type="action" />
|
||||
|
||||
<newline/>
|
||||
<field name="date_action"/>
|
||||
<field name="priority" string="Priority"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Opportunity">
|
||||
|
@ -94,9 +98,7 @@
|
|||
</group>
|
||||
<group col="2" colspan="2">
|
||||
<separator colspan="2" string="Categorization"/>
|
||||
<field name="type_id" select="1" string="Campaign" groups="base.group_extended"/>
|
||||
<field name="section_id" colspan="1" widget="selection"/>
|
||||
<field name="priority" string="Priority"/>
|
||||
<field name="categ_id" select="1"
|
||||
string="Category" widget="selection"
|
||||
domain="[('object_id.model', '=', 'crm.opportunity')]" />
|
||||
|
@ -107,12 +109,13 @@
|
|||
|
||||
<separator colspan="4"/>
|
||||
<group col="8" colspan="4">
|
||||
<field name="state" select="2"/>
|
||||
<field name="state"/>
|
||||
<button name="case_open" string="Open"
|
||||
states="draft,pending" type="object"
|
||||
icon="gtk-go-forward" />
|
||||
<button name="case_escalate" string="Escalate"
|
||||
states="open,draft,pending" type="object"
|
||||
groups="base.group_extended"
|
||||
icon="gtk-go-up" />
|
||||
<button name="case_pending" string="Pending"
|
||||
states="draft,open" type="object"
|
||||
|
@ -142,6 +145,7 @@
|
|||
<field name="active"/>
|
||||
<field name="day_open"/>
|
||||
<field name="day_close"/>
|
||||
<field name="referred"/>
|
||||
</group>
|
||||
<separator colspan="4" string="References"/>
|
||||
<field name="ref"/>
|
||||
|
@ -207,7 +211,6 @@
|
|||
<field name="partner_id"/>
|
||||
<field name="stage_id"/>
|
||||
<field name="categ_id" invisible="1"/>
|
||||
<field name="type_id" invisible="1"/>
|
||||
<button name="stage_previous" string="Previous"
|
||||
states="open,pending" type="object" icon="gtk-go-back" />
|
||||
<button name="stage_next" string="Next"
|
||||
|
@ -215,7 +218,7 @@
|
|||
icon="gtk-go-forward" />
|
||||
<field name="planned_revenue" sum="Expected Revenue"/>
|
||||
<field name="probability" widget="progressbar" avg="Avg. of Probability"/>
|
||||
<field name="date_deadline" string="Expected Closing"/>
|
||||
<field name="date_action"/>
|
||||
<field name="section_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="priority"/>
|
||||
|
@ -304,8 +307,6 @@
|
|||
<filter string="Category" icon="terp-crm"
|
||||
domain="[]" context="{'group_by':'categ_id'}" />
|
||||
|
||||
<filter string="Campaign" icon="terp-crm"
|
||||
domain="[]" context="{'group_by':'type_id'}" />
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Partner" icon="terp-crm" domain="[]"
|
||||
context="{'group_by':'partner_id'}" />
|
||||
|
|
|
@ -46,7 +46,8 @@
|
|||
</record>
|
||||
|
||||
<menuitem name="Phone Calls" id="menu_crm_case_phone"
|
||||
parent="base.menu_base_partner" sequence="5" />
|
||||
groups="base.group_extended"
|
||||
parent="base.menu_base_partner" sequence="5" />
|
||||
|
||||
<record model="ir.actions.act_window" id="crm_case_categ_phone_incoming0">
|
||||
<field name="name">Inbound</field>
|
||||
|
@ -81,8 +82,8 @@
|
|||
</record>
|
||||
|
||||
<menuitem name="Inbound" id="menu_crm_case_phone_inbound"
|
||||
parent="crm.menu_crm_case_phone"
|
||||
action="crm_case_categ_phone_incoming0" />
|
||||
parent="crm.menu_crm_case_phone"
|
||||
action="crm_case_categ_phone_incoming0" />
|
||||
|
||||
<record model="ir.actions.act_window" id="crm_case_categ_phone_outgoing0">
|
||||
<field name="name">Outbound</field>
|
||||
|
@ -117,8 +118,8 @@
|
|||
</record>
|
||||
|
||||
<menuitem name="Outbound" id="menu_crm_case_phone_outbound"
|
||||
parent="crm.menu_crm_case_phone"
|
||||
action="crm_case_categ_phone_outgoing0" />
|
||||
parent="crm.menu_crm_case_phone"
|
||||
action="crm_case_categ_phone_outgoing0" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -184,7 +184,7 @@
|
|||
help="Unassigned Phonecalls" />
|
||||
</field>
|
||||
<field name="section_id"
|
||||
select="1" widget="selection" string="Section">
|
||||
select="1" widget="selection" string="Sales Team">
|
||||
<filter icon="terp-crm"
|
||||
domain="[('section_id','=',context.get('section_id',False))]"
|
||||
help="My section" />
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<!-- Cases by section and category2 of case Tree View -->
|
||||
|
||||
<record model="ir.ui.view" id="view_crm_case_section_categ_tree">
|
||||
<field name="name">CRM Report - Sections and Type(Tree)</field>
|
||||
<field name="name">CRM Report - Teams and Type(Tree)</field>
|
||||
<field name="model">report.crm.case.section.categ2</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
|
@ -27,7 +27,7 @@
|
|||
<!-- Cases by section and category2 of case Form View -->
|
||||
|
||||
<record model="ir.ui.view" id="view_crm_case_section_categ_form">
|
||||
<field name="name">CRM Report - Sections and Type(Form)</field>
|
||||
<field name="name">CRM Report - Teams and Type(Form)</field>
|
||||
<field name="model">report.crm.case.section.categ2</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<menuitem id="menu_crm_configuration" name="Cases" parent="base.menu_base_config" sequence="0"/>
|
||||
<menuitem id="menu_crm_configuration" name="Cases"
|
||||
parent="base.menu_base_config" sequence="0"/>
|
||||
|
||||
<!-- Case Sections Form View -->
|
||||
|
||||
|
@ -295,6 +296,7 @@
|
|||
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"
|
||||
|
@ -315,7 +317,7 @@
|
|||
<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" select="2"/>
|
||||
<field name="date_deadline"/>
|
||||
<newline />
|
||||
<notebook colspan="4">
|
||||
<page string="General">
|
||||
|
@ -326,10 +328,10 @@
|
|||
<field colspan="3"
|
||||
name="partner_address_id"
|
||||
on_change="onchange_partner_address_id(partner_address_id, email_from)"
|
||||
select="2" />
|
||||
/>
|
||||
<newline />
|
||||
<field colspan="3" name="email_from"
|
||||
select="2" />
|
||||
/>
|
||||
<button name="remind_partner"
|
||||
states="open,pending"
|
||||
string="Send Reminder" type="object"
|
||||
|
@ -362,6 +364,7 @@
|
|||
<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"
|
||||
|
@ -371,15 +374,15 @@
|
|||
</page>
|
||||
<page string="History" groups="base.group_extended">
|
||||
<field name="id" select="1"/>
|
||||
<field name="active" select="2"/>
|
||||
<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" select="2"/>
|
||||
<field name="user_id" select="2"/>
|
||||
<field name="date"/>
|
||||
<field name="user_id"/>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
|
@ -500,11 +503,11 @@
|
|||
<field colspan="4" name="name" select="1"/>
|
||||
<field name="date" select="1"/>
|
||||
<field name="user_id" select="1"/>
|
||||
<field name="model_id" select="2"/>
|
||||
<field name="res_id" select="2"/>
|
||||
<field name="som" select="2"/>
|
||||
<field name="canal_id" select="2"/>
|
||||
<field colspan="4" name="description" select="2"/>
|
||||
<field name="model_id"/>
|
||||
<field name="res_id"/>
|
||||
<field name="som"/>
|
||||
<field name="canal_id"/>
|
||||
<field colspan="4" name="description"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -569,9 +572,9 @@
|
|||
<form string="Partner Segmentation Lines">
|
||||
<field colspan="4" name="name" select="1"/>
|
||||
<group col="2" colspan="4">
|
||||
<field name="expr_name" select="2"/>
|
||||
<field name="expr_operator" select="2"/>
|
||||
<field name="expr_value" select="2"/>
|
||||
<field name="expr_name"/>
|
||||
<field name="expr_operator"/>
|
||||
<field name="expr_value"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="operator"/>
|
||||
|
@ -589,7 +592,7 @@
|
|||
<form string="Partner Segmentation">
|
||||
<group col="6" colspan="4">
|
||||
<field name="name" select="1"/>
|
||||
<field name="categ_id" select="2"/>
|
||||
<field name="categ_id"/>
|
||||
<field name="exclusif"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
|
@ -604,7 +607,7 @@
|
|||
<field colspan="4" name="segmentation_line" widget="one2many_list" nolabel="1"/>
|
||||
</page>
|
||||
<page string="Description">
|
||||
<field colspan="4" name="description" select="2" nolabel="1"/>
|
||||
<field colspan="4" name="description" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<field name="state"/>
|
||||
|
@ -654,6 +657,7 @@
|
|||
</record>
|
||||
<menuitem action="crm_segmentation_tree-act"
|
||||
id="menu_crm_segmentation-act"
|
||||
groups="base.group_extended"
|
||||
parent="crm.menu_crm_configuration" />
|
||||
|
||||
<record model="ir.ui.view" id="view_users_form_simple_modif_inherited1">
|
||||
|
@ -678,7 +682,7 @@
|
|||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="password" position="after">
|
||||
<field name="context_section_id" completion="1" widget="selection"/>
|
||||
<field name="context_section_id" completion="1" widget="selection"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -693,7 +697,8 @@
|
|||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="parent_id" position="after">
|
||||
<field name="section_id" completion="1" widget="selection"/>
|
||||
<field name="section_id" completion="1" widget="selection"
|
||||
groups="base.group_extended"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -706,7 +711,8 @@
|
|||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="lang" position="after">
|
||||
<field name="section_id" completion="1" widget="selection"/>
|
||||
<field name="section_id" completion="1" widget="selection"
|
||||
groups="base.group_extended"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -719,7 +725,8 @@
|
|||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="category_id" position="after">
|
||||
<field name="section_id" completion="1" widget="selection"/>
|
||||
<field name="section_id" completion="1" widget="selection"
|
||||
groups="base.group_extended"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -10,17 +10,17 @@
|
|||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Claims">
|
||||
<field name="name" />
|
||||
<field name="month"/>
|
||||
<field name="section_id" />
|
||||
<field name="name" />
|
||||
<field name="month"/>
|
||||
<field name="section_id" />
|
||||
<field name="user_id" />
|
||||
<field name="company_id" />
|
||||
<field name="partner_id" />
|
||||
<field name="nbr" string="#Claim"/>
|
||||
<field name="delay_close"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="stage_id" invisible="1"/>
|
||||
<field name="categ_id" invisible="1"/>
|
||||
<field name="nbr" string="#Claim"/>
|
||||
<field name="delay_close"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="stage_id" invisible="1"/>
|
||||
<field name="categ_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -34,7 +34,7 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="nbr" position="after">
|
||||
<field name="delay_close"/>
|
||||
<field name="delay_close"/>
|
||||
<field name="amount_revenue"/>
|
||||
<field name="amount_costs"/>
|
||||
<field name="amount_revenue_prob"/>
|
||||
|
@ -67,10 +67,10 @@
|
|||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath
|
||||
expr='//search[@string="Search"]/group[@string="Group By..."]/filter[@string="State"]'
|
||||
position='after'>
|
||||
<filter string="Stage" icon="terp-sale" domain="[]"
|
||||
context="{'group_by':'stage_id'}" />
|
||||
expr='//search[@string="Search"]/group[@string="Group By..."]/filter[@string="State"]'
|
||||
position='after'>
|
||||
<filter string="Stage" icon="terp-sale" domain="[]"
|
||||
context="{'group_by':'stage_id'}" />
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -81,29 +81,30 @@
|
|||
<field name="name">Claims</field>
|
||||
<field name="res_model">crm.claim.report</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="view_id" ref="view_report_crm_claim_tree"/>
|
||||
<field name="context">{"search_default_section_id":section_id,"search_default_this_year":1,"search_default_this_month":1,"search_default_by_user":1}</field>
|
||||
<field name="search_view_id" ref="view_report_crm_claim_filter"/>
|
||||
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_claim_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_crm_claim_tree"/>
|
||||
<field name="act_window_id" ref="action_report_crm_claim"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_claim_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_crm_claim_tree"/>
|
||||
<field name="act_window_id" ref="action_report_crm_claim"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_claim_graph">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_crm_claim_graph"/>
|
||||
<field name="act_window_id" ref="action_report_crm_claim"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_claim_graph">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_crm_claim_graph"/>
|
||||
<field name="act_window_id" ref="action_report_crm_claim"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Claims" id="menu_report_crm_claim_tree"
|
||||
action="action_report_crm_claim" parent="base.next_id_64" />
|
||||
<menuitem name="Claims" id="menu_report_crm_claim_tree"
|
||||
groups="base.group_extended"
|
||||
action="action_report_crm_claim" parent="base.next_id_64" />
|
||||
|
||||
|
||||
</data>
|
||||
|
|
|
@ -9,14 +9,14 @@
|
|||
<field name="model">crm.fundraising.report</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Fundraising">
|
||||
<field name="name" />
|
||||
<field name="month"/>
|
||||
<field name="section_id" />
|
||||
<tree string="Fundraising">
|
||||
<field name="name" />
|
||||
<field name="month"/>
|
||||
<field name="section_id" />
|
||||
<field name="user_id" />
|
||||
<field name="company_id" />
|
||||
<field name="company_id" />
|
||||
<field name="partner_id" />
|
||||
<field name="nbr" string="#Fundraising"/>
|
||||
<field name="nbr" string="#Fundraising"/>
|
||||
<field name="amount_revenue" sum="Total Revenue"/>
|
||||
<field name="probability"/>
|
||||
<field name="amount_revenue_prob"/>
|
||||
|
@ -36,7 +36,7 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="nbr" position="after">
|
||||
<field name="delay_close"/>
|
||||
<field name="delay_close"/>
|
||||
<field name="amount_revenue"/>
|
||||
<field name="amount_revenue_prob"/>
|
||||
<field name="probability"/>
|
||||
|
@ -85,23 +85,24 @@
|
|||
</record>
|
||||
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_fundrising_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_crm_fundraising_tree"/>
|
||||
<field name="act_window_id" ref="action_report_crm_fundraising"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_fundrising_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_crm_fundraising_tree"/>
|
||||
<field name="act_window_id" ref="action_report_crm_fundraising"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_fundrising_graph">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_crm_fundraising_graph"/>
|
||||
<field name="act_window_id" ref="action_report_crm_fundraising"/>
|
||||
</record>
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_crm_fundraising_graph"/>
|
||||
<field name="act_window_id" ref="action_report_crm_fundraising"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Fundraising"
|
||||
action="action_report_crm_fundraising"
|
||||
id="menu_report_crm_fundraising_tree" parent="base.next_id_64" />
|
||||
action="action_report_crm_fundraising"
|
||||
groups="base.group_extended"
|
||||
id="menu_report_crm_fundraising_tree" parent="base.next_id_64" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -10,18 +10,18 @@
|
|||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Helpdesk">
|
||||
<field name="name" />
|
||||
<field name="month"/>
|
||||
<field name="section_id" />
|
||||
<field name="name" />
|
||||
<field name="month"/>
|
||||
<field name="section_id" />
|
||||
<field name="user_id" />
|
||||
<field name="company_id"/>
|
||||
<field name="partner_id" />
|
||||
<field name="date_deadline" invisible="1"/>
|
||||
<field name="priority" invisible="1"/>
|
||||
<field name="nbr" string="#Helpdesk" />
|
||||
<field name="delay_close"/>
|
||||
<field name="nbr" string="#Helpdesk" />
|
||||
<field name="delay_close"/>
|
||||
<field name="state" invisible="1"/>
|
||||
</tree>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="nbr" position="after">
|
||||
<field name="delay_close"/>
|
||||
<field name="delay_close"/>
|
||||
<field name="amount_revenue"/>
|
||||
<field name="amount_revenue_prob"/>
|
||||
<field name="probability"/>
|
||||
|
@ -59,46 +59,46 @@
|
|||
|
||||
<!-- Helpdesk report after Sales Services Search View -->
|
||||
|
||||
<record id="view_report_crm_helpdesk_filter" model="ir.ui.view">
|
||||
<record id="view_report_crm_helpdesk_filter" model="ir.ui.view">
|
||||
<field name="name">crm.helpdesk.report.select</field>
|
||||
<field name="model">crm.helpdesk.report</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search">
|
||||
<group col="16" colspan="9">
|
||||
<filter string="This Year" icon="terp-hr"
|
||||
domain="[('name','=',time.localtime()[0])]"
|
||||
name="this_year" />
|
||||
<filter string="This Year" icon="terp-hr"
|
||||
domain="[('name','=',time.localtime()[0])]"
|
||||
name="this_year" />
|
||||
|
||||
<filter string="This Month" icon="terp-hr"
|
||||
domain="[('month','=',time.strftime('%%m'))]"
|
||||
name="this_month" />
|
||||
<filter string="This Month" icon="terp-hr"
|
||||
domain="[('month','=',time.strftime('%%m'))]"
|
||||
name="this_month" />
|
||||
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Current" icon="terp-hr"
|
||||
domain="[('state','in',('open','draft'))]" />
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Current" icon="terp-hr"
|
||||
domain="[('state','in',('open','draft'))]" />
|
||||
|
||||
<filter string="Won" icon="terp-hr"
|
||||
domain="[('state','=','done')]" />
|
||||
<filter string="Won" icon="terp-hr"
|
||||
domain="[('state','=','done')]" />
|
||||
|
||||
<filter string="Lost" icon="terp-hr"
|
||||
domain="[('state','=','cancel')]" />
|
||||
<filter string="Lost" icon="terp-hr"
|
||||
domain="[('state','=','cancel')]" />
|
||||
|
||||
<filter string="Deadline" icon="terp-hr"
|
||||
domain="[('date_deadline','=',time.strftime('%%m/%%d/%%Y'))]" />
|
||||
<filter string="Deadline" icon="terp-hr"
|
||||
domain="[('date_deadline','=',time.strftime('%%m/%%d/%%Y'))]" />
|
||||
|
||||
<separator orientation="vertical" />
|
||||
<field name="section_id"
|
||||
widget="selection"
|
||||
context="{'invisible_section': False}">
|
||||
<separator orientation="vertical" />
|
||||
<field name="section_id"
|
||||
widget="selection"
|
||||
context="{'invisible_section': False}">
|
||||
|
||||
<filter icon="terp-crm"
|
||||
context="{'invisible_section': False}"
|
||||
domain="[('section_id.user_id','=',uid)]"
|
||||
help="My section" />
|
||||
<filter icon="terp-crm"
|
||||
context="{'invisible_section': False}"
|
||||
domain="[('section_id.user_id','=',uid)]"
|
||||
help="My section" />
|
||||
|
||||
</field>
|
||||
<field name="company_id" widget="selection">
|
||||
</field>
|
||||
<field name="company_id" widget="selection">
|
||||
|
||||
<filter icon="terp-crm"
|
||||
context="{'invisible_section': False}"
|
||||
|
@ -111,24 +111,24 @@
|
|||
<newline/>
|
||||
<group expand="1" string="Extended options..." colspan="4" col="5">
|
||||
<filter icon="terp-sale"
|
||||
string="Lowest"
|
||||
domain="[('priority','=','5')]"/>
|
||||
string="Lowest"
|
||||
domain="[('priority','=','5')]"/>
|
||||
|
||||
<filter icon="terp-sale"
|
||||
string="Low"
|
||||
domain="[('priority','=','4')]"/>
|
||||
<filter icon="terp-sale"
|
||||
string="Low"
|
||||
domain="[('priority','=','4')]"/>
|
||||
|
||||
<filter icon="terp-sale"
|
||||
string="Normal"
|
||||
domain="[('priority','=','3')]"/>
|
||||
<filter icon="terp-sale"
|
||||
string="Normal"
|
||||
domain="[('priority','=','3')]"/>
|
||||
|
||||
<filter icon="terp-sale"
|
||||
string="High"
|
||||
domain="[('priority','=','2')]"/>
|
||||
<filter icon="terp-sale"
|
||||
string="High"
|
||||
domain="[('priority','=','2')]"/>
|
||||
|
||||
<filter icon="terp-sale"
|
||||
string="Highest"
|
||||
domain="[('priority','=','1')]"/>
|
||||
<filter icon="terp-sale"
|
||||
string="Highest"
|
||||
domain="[('priority','=','1')]"/>
|
||||
|
||||
</group>
|
||||
<newline/>
|
||||
|
@ -137,30 +137,30 @@
|
|||
|
||||
<group expand="1" string="Group By..." colspan="4" col="8">
|
||||
<filter string="User" icon="terp-sale"
|
||||
domain="[]" context="{'group_by':'user_id'}" />
|
||||
domain="[]" context="{'group_by':'user_id'}" />
|
||||
|
||||
<filter string="Company" icon="terp-sale"
|
||||
domain="[]"
|
||||
context="{'group_by':'company_id'}" />
|
||||
domain="[]"
|
||||
context="{'group_by':'company_id'}" />
|
||||
|
||||
<filter string="Section" icon="terp-sale"
|
||||
domain="[]"
|
||||
context="{'group_by':'section_id'}" />
|
||||
domain="[]"
|
||||
context="{'group_by':'section_id'}" />
|
||||
|
||||
<separator orientation="vertical" />
|
||||
<filter string="State" icon="terp-sale"
|
||||
domain="[]" context="{'group_by':'state'}" />
|
||||
domain="[]" context="{'group_by':'state'}" />
|
||||
|
||||
<filter string="Partner" icon="terp-sale"
|
||||
domain="[]"
|
||||
context="{'group_by':'partner_id'}" />
|
||||
domain="[]"
|
||||
context="{'group_by':'partner_id'}" />
|
||||
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Month" icon="terp-sale"
|
||||
domain="[]" context="{'group_by':'month'}" />
|
||||
domain="[]" context="{'group_by':'month'}" />
|
||||
|
||||
<filter string="Year" icon="terp-sale"
|
||||
domain="[]" context="{'group_by':'name'}" />
|
||||
domain="[]" context="{'group_by':'name'}" />
|
||||
|
||||
</group>
|
||||
</search>
|
||||
|
@ -179,22 +179,23 @@
|
|||
<field name="search_view_id" ref="view_report_crm_helpdesk_filter"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_helpdesk_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_crm_helpdesk_tree"/>
|
||||
<field name="act_window_id" ref="action_report_crm_helpdesk"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_helpdesk_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_crm_helpdesk_tree"/>
|
||||
<field name="act_window_id" ref="action_report_crm_helpdesk"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_helpdesk_graph">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_crm_helpdesk_graph"/>
|
||||
<field name="act_window_id" ref="action_report_crm_helpdesk"/>
|
||||
</record>
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_crm_helpdesk_graph"/>
|
||||
<field name="act_window_id" ref="action_report_crm_helpdesk"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Helpdesk" action="action_report_crm_helpdesk"
|
||||
id="menu_report_crm_helpdesks_tree" parent="base.next_id_64" />
|
||||
groups="base.group_extended"
|
||||
id="menu_report_crm_helpdesks_tree" parent="base.next_id_64" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -10,16 +10,16 @@
|
|||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Leads">
|
||||
<field name="name" />
|
||||
<field name="month"/>
|
||||
<field name="section_id" />
|
||||
<field name="user_id" />
|
||||
<field name="company_id" />
|
||||
<field name="partner_id" />
|
||||
<field name="nbr" string="#Leads"/>
|
||||
<field name="name" />
|
||||
<field name="month"/>
|
||||
<field name="section_id" />
|
||||
<field name="user_id" />
|
||||
<field name="company_id" />
|
||||
<field name="partner_id" />
|
||||
<field name="nbr" string="#Leads"/>
|
||||
<field name="delay_close"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="stage_id" invisible="1"/>
|
||||
<field name="stage_id" invisible="1"/>
|
||||
<field name="categ_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
@ -34,8 +34,8 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="nbr" position="after">
|
||||
<field name="delay_close"/>
|
||||
<field name="stage_id"/>
|
||||
<field name="delay_close"/>
|
||||
<field name="stage_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -63,12 +63,12 @@
|
|||
<field name="inherit_id" ref="view_crm_case_filter"/>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath
|
||||
expr='//search[@string="Search"]/group[@string="Group By..."]/filter[@string="State"]'
|
||||
position='after'>
|
||||
<filter string="Stage" icon="terp-sale" domain="[]"
|
||||
context="{'group_by':'stage_id'}" />
|
||||
</xpath>
|
||||
<xpath
|
||||
expr='//search[@string="Search"]/group[@string="Group By..."]/filter[@string="State"]'
|
||||
position='after'>
|
||||
<filter string="Stage" icon="terp-sale" domain="[]"
|
||||
context="{'group_by':'stage_id'}" />
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -84,22 +84,23 @@
|
|||
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_lead_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_crm_lead_tree"/>
|
||||
<field name="act_window_id" ref="action_report_crm_lead"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_lead_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_crm_lead_tree"/>
|
||||
<field name="act_window_id" ref="action_report_crm_lead"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_lead_graph">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_crm_lead_graph"/>
|
||||
<field name="act_window_id" ref="action_report_crm_lead"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_lead_graph">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_crm_lead_graph"/>
|
||||
<field name="act_window_id" ref="action_report_crm_lead"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Leads" id="menu_report_crm_leads_tree"
|
||||
parent="base.next_id_64" action="action_report_crm_lead" />
|
||||
<menuitem name="Leads" id="menu_report_crm_leads_tree"
|
||||
groups="base.group_extended"
|
||||
parent="base.next_id_64" action="action_report_crm_lead" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -32,7 +32,8 @@ class crm_opportunity_report(osv.osv):
|
|||
'probability': fields.float('Avg. Probability', readonly=True, group_operator="avg"),
|
||||
'amount_revenue': fields.float('Est.Revenue', readonly=True),
|
||||
'amount_revenue_prob': fields.float('Est. Rev*Prob.', readonly=True),
|
||||
'delay_close': fields.float('Delay to close', digits=(16,2), readonly=True, group_operator="avg"),
|
||||
'delay_close': fields.float('Days to Close', digits=(16,2), readonly=True, group_operator="avg",
|
||||
help="Number of Days to close the opportunities"),
|
||||
'categ_id': fields.many2one('crm.case.categ', 'Category',\
|
||||
domain="[('section_id','=',section_id),\
|
||||
('object_id.model', '=', 'crm.opportunity')]", readonly=True),
|
||||
|
@ -70,7 +71,7 @@ class crm_opportunity_report(osv.osv):
|
|||
sum(planned_revenue) as amount_revenue,
|
||||
sum((planned_revenue*probability)/100.0)::decimal(16,2) as amount_revenue_prob,
|
||||
avg(probability)::decimal(16,2) as probability,
|
||||
avg(extract('epoch' from (date_closed-c.create_date)))/3600 as delay_close
|
||||
avg(extract('epoch' from (date_closed-c.create_date)))/(3600*24) as delay_close
|
||||
from
|
||||
crm_opportunity c
|
||||
group by
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<field name="amount_revenue" sum="Total Revenue"/>
|
||||
<field name="probability" widget="progressbar"/>
|
||||
<field name="amount_revenue_prob"/>
|
||||
<field name="delay_close" widget="float_time"/>
|
||||
<field name="delay_close"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="stage_id" invisible="1"/>
|
||||
<field name="categ_id" invisible="1"/>
|
||||
|
|
|
@ -10,17 +10,17 @@
|
|||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Phone calls">
|
||||
<field name="name" />
|
||||
<field name="month"/>
|
||||
<field name="section_id" />
|
||||
<field name="name" />
|
||||
<field name="month"/>
|
||||
<field name="section_id" />
|
||||
<field name="user_id" />
|
||||
<field name="company_id"/>
|
||||
<field name="partner_id" />
|
||||
<field name="nbr" string="#Phone calls" />
|
||||
<field name="delay_close"/>
|
||||
<field name="nbr" string="#Phone calls" />
|
||||
<field name="delay_close"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="categ_id" invisible="1"/>
|
||||
</tree>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -33,7 +33,7 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="nbr" position="after">
|
||||
<field name="delay_close"/>
|
||||
<field name="delay_close"/>
|
||||
<field name="amount_revenue"/>
|
||||
<field name="amount_revenue_prob"/>
|
||||
<field name="probability"/>
|
||||
|
@ -81,23 +81,24 @@
|
|||
<field name="search_view_id" ref="view_report_crm_phonecall_filter"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_phonecall_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_crm_phonecall_tree"/>
|
||||
<field name="act_window_id" ref="action_report_crm_phonecall"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_phonecall_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_crm_phonecall_tree"/>
|
||||
<field name="act_window_id" ref="action_report_crm_phonecall"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_crm_phonecall_graph">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_crm_phonecall_graph"/>
|
||||
<field name="act_window_id" ref="action_report_crm_phonecall"/>
|
||||
</record>
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_crm_phonecall_graph"/>
|
||||
<field name="act_window_id" ref="action_report_crm_phonecall"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Phone Calls"
|
||||
action="action_report_crm_phonecall"
|
||||
id="menu_report_crm_phonecalls_tree" parent="base.next_id_64" />
|
||||
action="action_report_crm_phonecall"
|
||||
groups="base.group_extended"
|
||||
id="menu_report_crm_phonecalls_tree" parent="base.next_id_64" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -77,6 +77,7 @@ class crm_lead2opportunity(osv.osv_memory):
|
|||
for this in self.browse(cr, uid, ids, context=context):
|
||||
new_opportunity_id = opp_obj.create(cr, uid, {
|
||||
'name': this.name,
|
||||
'referred': this.referred,
|
||||
'planned_revenue': this.planned_revenue,
|
||||
'probability': this.probability,
|
||||
'partner_id': lead.partner_id and lead.partner_id.id or False ,
|
||||
|
@ -89,7 +90,6 @@ class crm_lead2opportunity(osv.osv_memory):
|
|||
'phone': lead.phone,
|
||||
'email_from': lead.email_from
|
||||
})
|
||||
|
||||
new_opportunity = opp_obj.browse(cr, uid, new_opportunity_id)
|
||||
vals = {
|
||||
'partner_id': this.partner_id and this.partner_id.id or False,
|
||||
|
|
|
@ -1,61 +1,63 @@
|
|||
<openerp>
|
||||
<data>
|
||||
<data>
|
||||
|
||||
<!-- Lead to Opportunity view -->
|
||||
<!-- Lead to Opportunity view -->
|
||||
|
||||
<record id="view_crm_lead2opportunity_create" model="ir.ui.view">
|
||||
<field name="name">crm.lead2opportunity.create</field>
|
||||
<field name="model">crm.lead2opportunity</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Convert To Opportunity">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<newline/>
|
||||
<field name="planned_revenue"/>
|
||||
<field name="probability"/>
|
||||
<group col="4" colspan="4">
|
||||
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
|
||||
<button name="action_apply" string="Create Opportunity" type="object" icon="gtk-ok"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Lead to Opportunity action -->
|
||||
|
||||
<record id="action_crm_lead2opportunity" model="ir.actions.act_window">
|
||||
<field name="name">Create Opportunity</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">crm.lead2opportunity</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
<record id="view_crm_lead2opportunity_create" model="ir.ui.view">
|
||||
<field name="name">crm.lead2opportunity.create</field>
|
||||
<field name="model">crm.lead2opportunity</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Convert To Opportunity">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<newline/>
|
||||
<field name="planned_revenue"/>
|
||||
<field name="probability"/>
|
||||
<separator colspan="4"/>
|
||||
<group col="4" colspan="4">
|
||||
<label string="" colspan="2"/>
|
||||
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
|
||||
<button name="action_apply" string="Create Opportunity" type="object" icon="gtk-ok"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Lead to Opportunity action -->
|
||||
|
||||
<record id="action_crm_lead2opportunity" model="ir.actions.act_window">
|
||||
<field name="name">Create Opportunity</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">crm.lead2opportunity</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="view_crm_lead2opportunity_partner" model="ir.ui.view">
|
||||
<field name="name">crm.lead2opportunity.partner.form</field>
|
||||
<field name="model">crm.lead2opportunity.partner</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Create a Partner">
|
||||
<field name="name">crm.lead2opportunity.partner.form</field>
|
||||
<field name="model">crm.lead2opportunity.partner</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Create a Partner">
|
||||
<label string="Are you sure you want to create a partner based on this lead ?" colspan="4"/>
|
||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<newline />
|
||||
<field name="action"/>
|
||||
<group attrs="{'invisible':[('action','!=','exist')]}">
|
||||
<field name="partner_id" attrs="{'required': [('action', '=', 'exist')]}"/>
|
||||
</group>
|
||||
<separator string="" colspan="4" />
|
||||
<group col="4" colspan="4">
|
||||
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
|
||||
<button special="cancel" name="action_skip" string="_Skip" type="object" icon="gtk-goto-last"/>
|
||||
<button name="make_partner" string="Continue" type="object" icon="gtk-ok"/>
|
||||
</group>
|
||||
<field name="action"/>
|
||||
<group attrs="{'invisible':[('action','!=','exist')]}">
|
||||
<field name="partner_id" attrs="{'required': [('action', '=', 'exist')]}"/>
|
||||
</group>
|
||||
<separator string="" colspan="4" />
|
||||
<group col="4" colspan="4">
|
||||
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
|
||||
<button special="cancel" name="action_skip" string="_Skip" type="object" icon="gtk-goto-last"/>
|
||||
<button name="make_partner" string="Continue" type="object" icon="gtk-ok"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -53,42 +53,41 @@ class crm_lead2partner(osv.osv_memory):
|
|||
raise osv.except_osv(_('Warning !'),
|
||||
_('A partner is already defined on this lead.'))
|
||||
|
||||
def _select_partner(self, cr, uid, context=None):
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
"""
|
||||
This function Searches for Partner from selected lead.
|
||||
This function gets default 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 fields: List of fields for default value
|
||||
@param context: A standard dictionary for contextual values
|
||||
|
||||
@return : Partner id if any for selected lead.
|
||||
@return : default values of fields.
|
||||
"""
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
partner_obj = self.pool.get('res.partner')
|
||||
contact_obj = self.pool.get('res.partner.address')
|
||||
rec_ids = context and context.get('active_ids', [])
|
||||
partner_id = False
|
||||
|
||||
for lead in lead_obj.browse(cr, uid, rec_ids, context=context):
|
||||
data = context and context.get('active_ids', []) or []
|
||||
res = super(crm_lead2partner, self).default_get(cr, uid, fields, context=context)
|
||||
|
||||
for lead in lead_obj.browse(cr, uid, data, context=context):
|
||||
partner_ids = partner_obj.search(cr, uid, [('name', '=', lead.partner_name or lead.name)])
|
||||
if not partner_ids and lead.email_from:
|
||||
address_ids = contact_obj.search(cr, uid, [('email', '=', lead.email_from)])
|
||||
if address_ids:
|
||||
addresses = contact_obj.browse(cr, uid, address_ids)
|
||||
partner_ids = addresses and [addresses[0].partner_id.id] or False
|
||||
|
||||
partner_id = partner_ids and partner_ids[0] or False
|
||||
return partner_id
|
||||
|
||||
_defaults = {
|
||||
'action': lambda *a:'exist',
|
||||
'partner_id': _select_partner
|
||||
}
|
||||
|
||||
if 'partner_id' in fields:
|
||||
res.update({'partner_id': partner_id})
|
||||
if 'action' in fields:
|
||||
res.update({'action': partner_id and 'exist' or 'create'})
|
||||
return res
|
||||
|
||||
def open_create_partner(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
This function Opens form of create partner.
|
||||
|
|
|
@ -70,8 +70,8 @@ class crm_send_new_email(osv.osv_memory):
|
|||
|
||||
for data in self.read(cr, uid, ids, context=context):
|
||||
attach = filter(lambda x: x, [data['doc1'], data['doc2'], data['doc3']])
|
||||
attach = map(lambda x: x and ('Attachment'+str(attach.index(x)+1), base64.decodestring(x)), attach)
|
||||
|
||||
attach = map(lambda x: (data['doc' + str(attach.index(x) + 1) \
|
||||
+ '_fname'], base64.decodestring(x)), attach)
|
||||
message_id = None
|
||||
|
||||
case = case_pool.browse(cr, uid, res_id)
|
||||
|
@ -177,6 +177,8 @@ class crm_send_new_email(osv.osv_memory):
|
|||
"""
|
||||
hist_obj = self.pool.get('crm.case.history')
|
||||
res_ids = context and context.get('active_ids', []) or []
|
||||
|
||||
include_original = context and context.get('include_original', False) or False
|
||||
res = {}
|
||||
for hist in hist_obj.browse(cr, uid, res_ids):
|
||||
model = hist.log_id.model_id.model
|
||||
|
@ -188,7 +190,8 @@ class crm_send_new_email(osv.osv_memory):
|
|||
res.update({'email_from': (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 hist.email_to or tools.config.get('email_from',False)})
|
||||
if 'text' in fields:
|
||||
|
||||
if include_original == True and 'text' in fields:
|
||||
header = '-------- Original Message --------'
|
||||
sender = 'From: %s' %(hist.email_from or '')
|
||||
to = 'To: %s' % (hist.email_to or '')
|
||||
|
|
|
@ -161,9 +161,9 @@
|
|||
<field name="name" select="1"/>
|
||||
<field name="exclusif"/>
|
||||
<newline/>
|
||||
<field name="categ_id" select="2" colspan="2"/>
|
||||
<field name="categ_id" colspan="2"/>
|
||||
<newline/>
|
||||
<field name="description" select="2" colspan="4"/>
|
||||
<field name="description" colspan="4"/>
|
||||
<field name="state"/>
|
||||
<group col="3" colspan="2">
|
||||
<button name="process_start"
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"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-04-18 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: crm_profiling
|
||||
|
|
|
@ -124,10 +124,10 @@
|
|||
<field name="model">sale.order</field>
|
||||
<field name="inherit_id" ref="sale.view_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<separator string="Notes" position="before">
|
||||
<group name="logistic" position="inside">
|
||||
<field name="id" invisible="True"/>
|
||||
<field name="carrier_id" context="{'order_id':id}"/>
|
||||
</separator>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ class document_file(osv.osv):
|
|||
|
||||
_columns = {
|
||||
'user_id': fields.many2one('res.users', 'Owner', select=1),
|
||||
'group_ids': fields.many2many('res.groups', 'document_directory_group_rel', 'item_id', 'group_id', 'Groups'),
|
||||
'group_ids': fields.many2many('res.groups', 'document_group_rel', 'item_id', 'group_id', 'Groups'),
|
||||
# the directory id now is mandatory. It can still be computed automatically.
|
||||
'parent_id': fields.many2one('document.directory', 'Directory', select=1, required=True),
|
||||
'file_size': fields.integer('File Size', required=True),
|
||||
|
|
|
@ -52,7 +52,7 @@ class document_directory(osv.osv):
|
|||
'ressource_type_id': fields.many2one('ir.model', 'Directories Mapped to Objects',
|
||||
help="Select an object here and Open ERP will create a mapping for each of these " \
|
||||
"objects, using the given domain, when browsing through FTP."),
|
||||
'resource_field': fields.char('Name field',size=32,help='Field to be used as name on resource directories. If empty, the "name" will be used.'),
|
||||
'resource_field': fields.many2one('ir.model.fields', 'Name field', help='Field to be used as name on resource directories. If empty, the "name" will be used.'),
|
||||
'ressource_parent_type_id': fields.many2one('ir.model', 'Parent Model',
|
||||
help="If you put an object here, this directory template will appear bellow all of these objects. " \
|
||||
"Don't put a parent directory if you select a parent model."),
|
||||
|
@ -61,10 +61,12 @@ class document_directory(osv.osv):
|
|||
help="Check this if you want to use the same tree structure as the object selected in the system."),
|
||||
'dctx_ids': fields.one2many('document.directory.dctx', 'dir_id', 'Context fields'),
|
||||
}
|
||||
|
||||
|
||||
def _get_root_directory(self, cr,uid, context=None):
|
||||
objid=self.pool.get('ir.model.data')
|
||||
try:
|
||||
mid = objid._get_id(cr, uid, 'document', 'dir_root')
|
||||
mid = objid._get_id(cr, uid, 'document', 'dir_root')
|
||||
if not mid:
|
||||
return False
|
||||
root_id = objid.read(cr, uid, mid, ['res_id'])['res_id']
|
||||
|
|
|
@ -103,7 +103,7 @@ class document_storage(osv.osv):
|
|||
'create_date': fields.datetime('Date Created', readonly=True),
|
||||
'create_uid': fields.many2one('res.users', 'Creator', readonly=True),
|
||||
'user_id': fields.many2one('res.users', 'Owner'),
|
||||
'group_ids': fields.many2many('res.groups', 'document_directory_group_rel', 'item_id', 'group_id', 'Groups'),
|
||||
'group_ids': fields.many2many('res.groups', 'document_storage_group_rel', 'item_id', 'group_id', 'Groups'),
|
||||
'dir_ids': fields.one2many('document.directory', 'parent_id', 'Directories'),
|
||||
'type': fields.selection([('db', 'Database'), ('filestore', 'Internal File storage'),
|
||||
('realstore', 'External file storage'), ('virtual', 'Virtual storage')], 'Type', required=True),
|
||||
|
|
|
@ -13,12 +13,16 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Storage Media">
|
||||
<field name="name" select="1" colspan="4"/>
|
||||
<field name="user_id"/>
|
||||
<field name="type" />
|
||||
<field name="online" />
|
||||
<field name="readonly" />
|
||||
<field name="path" />
|
||||
<group colspan="4" col="4">
|
||||
<field name="name" select="1" colspan="4"/>
|
||||
<field name="user_id"/>
|
||||
<field name="type"/>
|
||||
<field name="online"/>
|
||||
<field name="readonly"/>
|
||||
</group>
|
||||
<group colspan="2" attrs="{'invisible':[('type','!=','realstore')]}">
|
||||
<field name="path"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -67,13 +71,13 @@
|
|||
<newline/>
|
||||
<field name="domain" attrs="{'required': [('type','=','ressource')], 'readonly': [('type','=','static')]}"/>
|
||||
<field name="ressource_tree"/>
|
||||
<field name="resource_field"/>
|
||||
<field name="resource_field" domain="[('model_id','=',ressource_type_id), ('ttype', 'in', ('char', 'selection', 'date', 'datetime'))]"/>
|
||||
<field name="ressource_id" select="2" readonly="1"/>
|
||||
<field name="ressource_parent_type_id"/>
|
||||
</page>
|
||||
<page string="Generated Files">
|
||||
<label colspan="4" string="For each entry here, virtual files will appear in this folder." />
|
||||
<field name="content_ids" nolabel="1" colspan="4">
|
||||
<field name="content_ids" nolabel="1" colspan="4" attrs="{'readonly': [('ressource_type_id','=',False)]}">
|
||||
<form string="Contents">
|
||||
<field name="name"/>
|
||||
<field name="sequence"/>
|
||||
|
@ -179,7 +183,7 @@
|
|||
<field name="title" select="1"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="parent_id" select="2"/>
|
||||
<field name="parent_id"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Attachment">
|
||||
|
@ -190,7 +194,7 @@
|
|||
</group>
|
||||
<group col="2" colspan="2">
|
||||
<separator string="Attached To" colspan="2"/>
|
||||
<field name="res_model" select="2" readonly="1"/>
|
||||
<field name="res_model" readonly="1"/>
|
||||
<field name="res_id" readonly="1"/>
|
||||
</group>
|
||||
<separator string="Preview" colspan="4"/>
|
||||
|
|
|
@ -320,7 +320,7 @@ class node_res_dir(node_class):
|
|||
self.content_length = 0
|
||||
self.res_model = dirr.ressource_type_id and dirr.ressource_type_id.model or False
|
||||
self.resm_id = dirr.ressource_id
|
||||
self.namefield = dirr.resource_field or 'name'
|
||||
self.namefield = dirr.resource_field.name or 'name'
|
||||
self.displayname = dirr.name
|
||||
# Important: the domain is evaluated using the *parent* dctx!
|
||||
self.domain = dirr.domain
|
||||
|
@ -508,7 +508,7 @@ class node_res_obj(node_class):
|
|||
where1 = where + [(obj._parent_name, '=', self.res_id)]
|
||||
resids = obj.search(cr,uid, where1, context=ctx)
|
||||
for bo in obj.browse(cr,uid,resids,context=ctx):
|
||||
namefield = directory.resource_field or 'name'
|
||||
namefield = directory.resource_field.name or 'name'
|
||||
if not bo:
|
||||
continue
|
||||
res_name = getattr(bo, namefield)
|
||||
|
|
|
@ -23,7 +23,6 @@ import StringIO
|
|||
import odt2txt
|
||||
from subprocess import Popen, PIPE
|
||||
from content_index import indexer, cntIndex
|
||||
from subprocess import Popen, PIPE
|
||||
|
||||
def _to_unicode(s):
|
||||
try:
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue