[MERGE]: Merged with lp:openobject-addons

bzr revid: atp@tinyerp.com-20120917050738-i5730n5sbqvnfsnh
This commit is contained in:
Atul Patel (OpenERP) 2012-09-17 10:37:38 +05:30
commit b4d415ff9b
235 changed files with 1923 additions and 48885 deletions

View File

@ -181,7 +181,7 @@ class account_account_type(osv.osv):
'Balance' will generally be used for cash accounts.
'Detail' will copy each existing journal item of the previous year, even the reconciled ones.
'Unreconciled' will copy only the journal items that were unreconciled on the first day of the new fiscal year."""),
'report_type': fields.function(_get_current_report_type, fnct_inv=_save_report_type, type='selection', string='P&L / BS Category',
'report_type': fields.function(_get_current_report_type, fnct_inv=_save_report_type, type='selection', string='P&L / BS Category', store=True,
selection= [('none','/'),
('income', _('Profit & Loss (Income account)')),
('expense', _('Profit & Loss (Expense account)')),
@ -836,6 +836,8 @@ class account_journal(osv.osv):
@return: Returns a list of tupples containing id, name
"""
if isinstance(ids, (int, long)):
ids = [ids]
result = self.browse(cr, user, ids, context=context)
res = []
for rs in result:

View File

@ -51,10 +51,10 @@ class account_config_settings(osv.osv_memory):
'code_digits': fields.integer('# of Digits', help="No. of digits to use for account code"),
'tax_calculation_rounding_method': fields.related('company_id',
'tax_calculation_rounding_method', type='selection', selection=[
('round_per_line', 'Round per Line'),
('round_globally', 'Round Globally'),
('round_per_line', 'Round per line'),
('round_globally', 'Round globally'),
], string='Tax calculation rounding method',
help="If you select 'Round per Line' : for each tax, the tax amount will first be computed and rounded for each PO/SO/invoice line and then these rounded amounts will be summed, leading to the total amount for that tax. If you select 'Round Globally': for each tax, the tax amount will be computed for each PO/SO/invoice line, then these amounts will be summed and eventually this total tax amount will be rounded. If you sell with tax included, you should choose 'Round per line' because you certainly want the sum of your tax-included line subtotals to be equal to the total amount with taxes."),
help="If you select 'Round per line' : for each tax, the tax amount will first be computed and rounded for each PO/SO/invoice line and then these rounded amounts will be summed, leading to the total amount for that tax. If you select 'Round globally': for each tax, the tax amount will be computed for each PO/SO/invoice line, then these amounts will be summed and eventually this total tax amount will be rounded. If you sell with tax included, you should choose 'Round per line' because you certainly want the sum of your tax-included line subtotals to be equal to the total amount with taxes."),
'sale_tax': fields.many2one("account.tax.template", "Default sale tax"),
'purchase_tax': fields.many2one("account.tax.template", "Default purchase tax"),
'sale_tax_rate': fields.float('Sales tax (%)'),
@ -72,40 +72,40 @@ class account_config_settings(osv.osv_memory):
'sale_refund_journal_id': fields.many2one('account.journal', 'Sale refund journal'),
'sale_refund_sequence_prefix': fields.related('sale_refund_journal_id', 'sequence_id', 'prefix', type='char', string='Credit note sequence'),
'sale_refund_sequence_next': fields.related('sale_refund_journal_id', 'sequence_id', 'number_next', type='integer', string='Next credit note number'),
'purchase_journal_id': fields.many2one('account.journal', 'Purchase Journal'),
'purchase_journal_id': fields.many2one('account.journal', 'Purchase journal'),
'purchase_sequence_prefix': fields.related('purchase_journal_id', 'sequence_id', 'prefix', type='char', string='Supplier invoice sequence'),
'purchase_sequence_next': fields.related('purchase_journal_id', 'sequence_id', 'number_next', type='integer', string='Next supplier invoice number'),
'purchase_refund_journal_id': fields.many2one('account.journal', 'Purchase refund journal'),
'purchase_refund_sequence_prefix': fields.related('purchase_refund_journal_id', 'sequence_id', 'prefix', type='char', string='Supplier credit note sequence'),
'purchase_refund_sequence_next': fields.related('purchase_refund_journal_id', 'sequence_id', 'number_next', type='integer', string='Next supplier credit note number'),
'module_account_check_writing': fields.boolean('pay your suppliers by check',
'module_account_check_writing': fields.boolean('Pay your suppliers by check',
help="""This allows you to check writing and printing.
This installs the module account_check_writing."""),
'module_account_accountant': fields.boolean('full accounting features: journals, legal statements, chart of accounts, etc.',
'module_account_accountant': fields.boolean('Full accounting features: journals, legal statements, chart of accounts, etc.',
help="""If you do not check this box, you will be able to do invoicing & payments, but not accounting (Journal Items, Chart of Accounts, ...)"""),
'module_account_asset': fields.boolean('assets management',
'module_account_asset': fields.boolean('Assets management',
help="""This allows you to manage the assets owned by a company or a person.
It keeps track of the depreciation occurred on those assets, and creates account move for those depreciation lines.
This installs the module account_asset. If you do not check this box, you will be able to do invoicing & payments,
but not accounting (Journal Items, Chart of Accounts, ...)"""),
'module_account_budget': fields.boolean('budget management',
'module_account_budget': fields.boolean('Budget management',
help="""This allows accountants to manage analytic and crossovered budgets.
Once the master budgets and the budgets are defined,
the project managers can set the planned amount on each analytic account.
This installs the module account_budget."""),
'module_account_payment': fields.boolean('manage payment orders',
'module_account_payment': fields.boolean('Manage payment orders',
help="""This allows you to create and manage your payment orders, with purposes to
* serve as base for an easy plug-in of various automated payment mechanisms, and
* provide a more efficient way to manage invoice payments.
This installs the module account_payment."""),
'module_account_voucher': fields.boolean('manage customer payments',
'module_account_voucher': fields.boolean('Manage customer payments',
help="""This includes all the basic requirements of voucher entries for bank, cash, sales, purchase, expense, contra, etc.
This installs the module account_voucher."""),
'module_account_followup': fields.boolean('manage customer payment follow-ups',
'module_account_followup': fields.boolean('Manage customer payment follow-ups',
help="""This allows to automate letters for unpaid invoices, with multi-level recalls.
This installs the module account_followup."""),
'group_proforma_invoices': fields.boolean('allow pro-forma invoices',
'group_proforma_invoices': fields.boolean('Allow pro-forma invoices',
implied_group='account.group_proforma_invoices',
help="Allows you to put invoices in pro-forma state."),
'default_sale_tax': fields.many2one('account.tax', 'Default sale tax',
@ -114,7 +114,7 @@ class account_config_settings(osv.osv_memory):
help="This purchase tax will be assigned by default on new products."),
'decimal_precision': fields.integer('Decimal precision on journal entries',
help="""As an example, a decimal precision of 2 will allow journal entries like: 9.99 EUR, whereas a decimal precision of 4 will allow journal entries like: 0.0231 EUR."""),
'group_multi_currency': fields.boolean('allow multi currencies',
'group_multi_currency': fields.boolean('Allow multi currencies',
implied_group='base.group_multi_currency',
help="Allows you multi currency environment"),
}

View File

@ -5,6 +5,7 @@
<field name="name">Invoicing &amp; Payments</field>
<field name="category_id" ref="base.module_category_accounting_and_finance"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>
<record id="group_account_user" model="res.groups">
<field name="name">Accountant</field>

View File

@ -82,6 +82,7 @@ access_account_entries_report_invoice,account.entries.report,model_account_entri
access_account_entries_report_employee,account.entries.report employee,model_account_entries_report,base.group_user,1,0,0,0
access_analytic_entries_report_manager,analytic.entries.report,model_analytic_entries_report,account.group_account_manager,1,0,0,0
access_account_cashbox_line,account.cashbox.line,model_account_cashbox_line,account.group_account_user,1,1,1,1
access_account_journal_cashbox_line,account.journal.cashbox.line,model_account_journal_cashbox_line,account.group_account_user,1,1,1,0
access_account_journal_view_invoice,account.journal.view invoice,model_account_journal_view,account.group_account_invoice,1,1,1,1
access_account_journal_column_invoice,account.journal.column invoice,model_account_journal_column,account.group_account_invoice,1,1,1,1
access_account_invoice_tax_accountant,account.invoice.tax accountant,model_account_invoice_tax,account.group_account_user,1,0,0,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
82 access_account_entries_report_employee account.entries.report employee model_account_entries_report base.group_user 1 0 0 0
83 access_analytic_entries_report_manager analytic.entries.report model_analytic_entries_report account.group_account_manager 1 0 0 0
84 access_account_cashbox_line account.cashbox.line model_account_cashbox_line account.group_account_user 1 1 1 1
85 access_account_journal_cashbox_line account.journal.cashbox.line model_account_journal_cashbox_line account.group_account_user 1 1 1 0
86 access_account_journal_view_invoice account.journal.view invoice model_account_journal_view account.group_account_invoice 1 1 1 1
87 access_account_journal_column_invoice account.journal.column invoice model_account_journal_column account.group_account_invoice 1 1 1 1
88 access_account_invoice_tax_accountant account.invoice.tax accountant model_account_invoice_tax account.group_account_user 1 0 0 0

View File

@ -26,15 +26,12 @@
'sequence': 10,
'summary': 'Financial and Analytic Accounting',
'description': """
Accounting Access Rights.
=========================
Accounting Access Rights
========================
It gives the Administrator user access to all accounting features such as journal items and the chart of accounts.
This module gives the Admin user the access to all the accounting features
like the journal items and the chart of accounts.
It assigns manager and user access rights to the Administrator and only
user rights to Demo user.
""",
It assigns manager and user access rights to the Administrator and only user rights to the Demo user.
""",
'website': 'http://www.openerp.com',
'depends' : ['account_voucher'],
'data': [

View File

@ -5,6 +5,7 @@
<!-- Top menu item -->
<menuitem name="Accounting"
id="account.menu_finance"/>
</data>
<data noupdate="1">
@ -14,10 +15,9 @@
<field name="tag">reload</field>
<field name="params" eval="{'menu_id': ref('account.menu_finance')}"/>
</record>
<record id="todo_open_account_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="action_client_account_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
<field name="state">open</field>
</record>
<!-- Notify all employees of module installation -->

View File

@ -465,7 +465,7 @@ class account_analytic_account(osv.osv):
def open_sale_order_lines(self,cr,uid,ids,context=None):
if context is None:
context = {}
sale_ids = self.pool.get('sale.order').search(cr,uid,[('project_id','=',context.get('search_default_project_id',False)),('partner_id','=',context.get('search_default_partner_id',False))])
sale_ids = self.pool.get('sale.order').search(cr,uid,[('project_id','=',context.get('search_default_project_id',False)),('partner_id','in',context.get('search_default_partner_id',False))])
names = [record.name for record in self.browse(cr, uid, ids, context=context)]
name = _('Sale Order Lines of %s') % ','.join(names)
return {

View File

@ -73,9 +73,18 @@
<field name="res_model">account.analytic.account</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
<field name="context">{'default_type':'contract'}</field>
<field name="context">{'default_type':'contract', 'search_default_open':1, 'search_default_pending':1}</field>
<field name="domain">[('type','=','contract')]</field>
<field name="search_view_id" ref="view_account_analytic_account_overdue_search"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new contract.
</p><p>
Use contracts to follow tasks, issues, timesheets or invoicing based on
work done, expenses and/or sales orders. OpenERP will automatically manage
the alerts for the renewal of the contracts to the right salesperson.
</p>
</field>
</record>
<menuitem id="base.menu_sales" name="Sales"
parent="base.menu_base_partner"

View File

@ -140,6 +140,16 @@
<field name="view_mode">tree,form</field>
<field name="domain">[('type','=','template')]</field>
<field name="context">{'search_default_type':'template','default_type' : 'template'}</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click here to create a template of contract.
</p><p>
Templates are used to prefigure contract/project that
can be selected by the salespeople to quickly configure the
terms and conditions of the contract.
</p>
</field>
</record>
<menuitem action="template_of_contract_action" id="menu_template_of_contract_action" parent="base.menu_base_config"/>
</data>

View File

@ -299,7 +299,7 @@
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Budget Lines">
<page string="Budget Lines" groups="account.group_account_user">
<field name="crossovered_budget_line" widget="one2many_list" colspan="4" nolabel="1" mode="tree,graph">
<tree string="Budget Lines" editable="top">
<field name="crossovered_budget_id"/>

View File

@ -4,4 +4,4 @@ access_account_budget_post,account.budget.post,model_account_budget_post,account
access_account_budget_post_accountant,account.budget.post accountant,model_account_budget_post,account.group_account_user,1,1,1,1
access_crossovered_budget_accountant,crossovered.budget accountant,model_crossovered_budget,account.group_account_user,1,1,1,1
access_crossovered_budget_lines_accountant,crossovered.budget.lines accountant,model_crossovered_budget_lines,account.group_account_user,1,1,1,1
access_budget,crossovered.budget.lines manager,model_crossovered_budget_lines,base.group_user,1,0,0,0
access_budget,crossovered.budget.lines manager,model_crossovered_budget_lines,base.group_user,1,1,1,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
4 access_account_budget_post_accountant account.budget.post accountant model_account_budget_post account.group_account_user 1 1 1 1
5 access_crossovered_budget_accountant crossovered.budget accountant model_crossovered_budget account.group_account_user 1 1 1 1
6 access_crossovered_budget_lines_accountant crossovered.budget.lines accountant model_crossovered_budget_lines account.group_account_user 1 1 1 1
7 access_budget crossovered.budget.lines manager model_crossovered_budget_lines base.group_user 1 0 1 0 1 0

View File

@ -0,0 +1,214 @@
# Greek translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
"PO-Revision-Date: 2012-09-15 17:55+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Greek <el@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-16 04:39+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. module: account_sequence
#: view:account.sequence.installer:0
#: model:ir.actions.act_window,name:account_sequence.action_account_seq_installer
msgid "Account Sequence Application Configuration"
msgstr ""
#. module: account_sequence
#: constraint:account.move:0
msgid ""
"You can not create more than one move per period on centralized journal"
msgstr ""
#. module: account_sequence
#: constraint:account.move.line:0
msgid "Company must be the same for its related account and period."
msgstr ""
"Η εταιρία πρέπει να είναι ίδια για τους σχετικούς λογαριασμούς και περίοδο"
#. module: account_sequence
#: help:account.move,internal_sequence_number:0
#: help:account.move.line,internal_sequence_number:0
msgid "Internal Sequence Number"
msgstr ""
#. module: account_sequence
#: help:account.sequence.installer,number_next:0
msgid "Next number of this sequence"
msgstr "Επόμενος αριθμός αυτής της ακολουθίας"
#. module: account_sequence
#: field:account.sequence.installer,number_next:0
msgid "Next Number"
msgstr "Επόμενος Αριθμός"
#. module: account_sequence
#: field:account.sequence.installer,number_increment:0
msgid "Increment Number"
msgstr "Αριθμός Προσαύξησης"
#. module: account_sequence
#: help:account.sequence.installer,number_increment:0
msgid "The next number of the sequence will be incremented by this number"
msgstr ""
#. module: account_sequence
#: view:account.sequence.installer:0
msgid "Configure Your Account Sequence Application"
msgstr ""
#. module: account_sequence
#: view:account.sequence.installer:0
msgid "Configure"
msgstr ""
#. module: account_sequence
#: help:account.sequence.installer,suffix:0
msgid "Suffix value of the record for the sequence"
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,company_id:0
msgid "Company"
msgstr ""
#. module: account_sequence
#: help:account.journal,internal_sequence_id:0
msgid ""
"This sequence will be used to maintain the internal number for the journal "
"entries related to this journal."
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,padding:0
msgid "Number padding"
msgstr ""
#. module: account_sequence
#: model:ir.model,name:account_sequence.model_account_move_line
msgid "Journal Items"
msgstr ""
#. module: account_sequence
#: field:account.move,internal_sequence_number:0
#: field:account.move.line,internal_sequence_number:0
msgid "Internal Number"
msgstr ""
#. module: account_sequence
#: constraint:account.move.line:0
msgid "You can not create journal items on an account of type view."
msgstr ""
#. module: account_sequence
#: help:account.sequence.installer,padding:0
msgid ""
"OpenERP will automatically adds some '0' on the left of the 'Next Number' to "
"get the required padding size."
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,name:0
msgid "Name"
msgstr ""
#. module: account_sequence
#: constraint:account.move.line:0
msgid "You can not create journal items on closed account."
msgstr ""
#. module: account_sequence
#: constraint:account.journal:0
msgid ""
"Configuration error! The currency chosen should be shared by the default "
"accounts too."
msgstr ""
#. module: account_sequence
#: sql_constraint:account.move.line:0
msgid "Wrong credit or debit value in accounting entry !"
msgstr ""
#. module: account_sequence
#: field:account.journal,internal_sequence_id:0
msgid "Internal Sequence"
msgstr ""
#. module: account_sequence
#: help:account.sequence.installer,prefix:0
msgid "Prefix value of the record for the sequence"
msgstr ""
#. module: account_sequence
#: model:ir.model,name:account_sequence.model_account_move
msgid "Account Entry"
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,suffix:0
msgid "Suffix"
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,config_logo:0
msgid "Image"
msgstr ""
#. module: account_sequence
#: view:account.sequence.installer:0
msgid "title"
msgstr ""
#. module: account_sequence
#: sql_constraint:account.journal:0
msgid "The name of the journal must be unique per company !"
msgstr ""
#. module: account_sequence
#: constraint:account.move.line:0
msgid ""
"The selected account of your Journal Entry forces to provide a secondary "
"currency. You should remove the secondary currency on the account or select "
"a multi-currency view on the journal."
msgstr ""
#. module: account_sequence
#: constraint:account.move.line:0
msgid ""
"The date of your Journal Entry is not in the defined period! You should "
"change the date or remove this constraint from the journal."
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,prefix:0
msgid "Prefix"
msgstr ""
#. module: account_sequence
#: sql_constraint:account.journal:0
msgid "The code of the journal must be unique per company !"
msgstr ""
#. module: account_sequence
#: model:ir.model,name:account_sequence.model_account_sequence_installer
msgid "account.sequence.installer"
msgstr ""
#. module: account_sequence
#: model:ir.model,name:account_sequence.model_account_journal
msgid "Journal"
msgstr ""
#. module: account_sequence
#: view:account.sequence.installer:0
msgid "You can enhance the Account Sequence Application by installing ."
msgstr ""

View File

@ -25,13 +25,19 @@
'author' : 'OpenERP SA',
'summary': 'Send Invoices and Track Payments',
'description': """
eInvoicing & Payments module manage all Voucher Entries such as 'Reconciliation Entries', 'Adjustment Entries', 'Closing or Opening Entries' for Sales, Purchase, Bank, Cash, Expense, Contra.
==============================================================================================================================================================================================
Invoicing & Payments by Accounting Voucher & Receipts
======================================================
The specific and easy-to-use Invoicing system in OpenERP allows you to keep track of your accounting, even when you are not an accountant. It provides an easy way to follow up on your suppliers and customers.
* Voucher Entry
* Voucher Receipt [Sales & Purchase]
* Voucher Payment [Customer & Supplier]
* Cheque Register
You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments.
The Invoicing system includes receipts and vouchers (an easy way to keep track of sales and purchases). It also offers you an easy method of registering payments, without having to encode complete abstracts of account.
This module manages:
* Voucher Entry
* Voucher Receipt [Sales & Purchase]
* Voucher Payment [Customer & Supplier]
""",
'category': 'Accounting & Finance',
'sequence': 4,

View File

@ -272,10 +272,9 @@
<field name="tag">reload</field>
<field name="params" eval="{'menu_id': ref('account.menu_finance')}"/>
</record>
<record id="todo_open_invoice_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="action_client_invoice_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
<field name="state">open</field>
</record>
</data>

View File

@ -41,6 +41,7 @@
units is reached, the account manager
is warned by email to renew the contract.
</p>
<field name="date_start"/>
<label for="date" string="End Date"/>
<div name="duration">
<field name="date" class="oe_inline"/>

View File

@ -34,7 +34,8 @@ Allow users to login through Google OAuth2.
'depends': ['base', 'web', 'base_setup'],
'data': [
'auth_oauth_data.xml',
'auth_oauth_view.xml'
'auth_oauth_view.xml',
'security/ir.model.access.csv'
],
'js': ['static/src/js/auth_oauth.js'],
'css': ['static/lib/zocial/css/zocial.css'],

View File

@ -4,7 +4,6 @@
<record model="ir.ui.view" id="view_oauth_provider_form">
<field name="name">auth.oauth.provider.form</field>
<field name="model">auth.oauth.provider</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="arch" version="7.0">
<sheet>
@ -26,7 +25,6 @@
<record model="ir.ui.view" id="view_oauth_provider_list">
<field name="name">auth.oauth.provider.list</field>
<field name="model">auth.oauth.provider</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="arch" version="7.0">
<field name="name" />

View File

@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_auth_oauth_provider,auth_oauth_provider,model_auth_oauth_provider,base.group_system,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_auth_oauth_provider auth_oauth_provider model_auth_oauth_provider base.group_system 1 1 1 1

View File

@ -32,10 +32,6 @@ def message_check(msg, secret):
class res_users(osv.osv):
_inherit = 'res.users'
_sql_constraints = [
('email_uniq', 'UNIQUE (user_email)', 'You can not have two users with the same email!')
]
def _auth_reset_password_secret(self, cr, uid, context=None):
uuid = self.pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid')
res = {
@ -77,6 +73,7 @@ class res_users(osv.osv):
MailMessage.send(cr, uid, [msg_id], context=context)
def send_reset_password_request(self, cr, uid, email, context=None):
# TODO reseting a password knowing only an email is not good enough (email can be shared between multiple logins).
ids = self.pool.get('res.users').search(cr, SUPERUSER_ID, [('user_email', '=', email)], context=context)
if ids:
self._auth_reset_password_send_email(cr, SUPERUSER_ID, email, 'reset_password_email', ids[0], context=context)

View File

@ -22,7 +22,6 @@ or by copy-pasting the following URL in your browser: ${object._auth_reset_passw
<record id="reset_password_wizard_form_view" model="ir.ui.view">
<field name="name">auth.reset_password.form</field>
<field name="model">auth.reset_password</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Reset Password" version="7.0">
<field name="state" invisible="1"/>

View File

@ -25,7 +25,7 @@ class base_config_settings(osv.TransientModel):
_inherit = 'base.config.settings'
_columns = {
'auth_signup_uninvited': fields.boolean('allow public users to sign up', help="If unchecked only invited users may sign up"),
'auth_signup_uninvited': fields.boolean('Allow public users to sign up', help="If unchecked only invited users may sign up"),
'auth_signup_template_user_id': fields.many2one('res.users', 'Template user for new users created through signup'),
}

View File

@ -6,9 +6,6 @@
<record id="base.menu_res_company_global" model="ir.ui.menu">
<field name="groups_id" eval="[(3, ref('base.group_no_one'))]"/>
</record>
<record id="base.menu_publisher_warranty" model="ir.ui.menu">
<field name="groups_id" eval="[(3, ref('base.group_no_one'))]"/>
</record>
<!-- Specify your terminology config wiz -->
<record id="base_setup_terminology_form" model="ir.ui.view">

View File

@ -25,16 +25,16 @@ class base_config_settings(osv.osv_memory):
_name = 'base.config.settings'
_inherit = 'res.config.settings'
_columns = {
'module_multi_company': fields.boolean('manage multiple companies',
'module_multi_company': fields.boolean('Manage multiple companies',
help="""Work in multi-company environments, with appropriate security access between companies.
This installs the module multi_company."""),
'module_share': fields.boolean('allow documents sharing',
'module_share': fields.boolean('Allow documents sharing',
help="""Share or embbed any screen of openerp."""),
'module_portal': fields.boolean('activate the customer/supplier portal',
'module_portal': fields.boolean('Activate the customer/supplier portal',
help="""Give access your customers and suppliers to their documents."""),
'module_auth_anonymous': fields.boolean('activate the public portal',
'module_auth_anonymous': fields.boolean('Activate the public portal',
help="""Enable the public part of openerp, openerp becomes a public website."""),
'module_auth_oauth': fields.boolean('use external authentication providers, sign in with google, facebook, ...'),
'module_auth_oauth': fields.boolean('Use external authentication providers, sign in with google, facebook, ...'),
'module_base_import': fields.boolean("Allow users to import data from CSV files"),
}
@ -57,17 +57,17 @@ class sale_config_settings(osv.osv_memory):
_name = 'sale.config.settings'
_inherit = 'res.config.settings'
_columns = {
'module_web_linkedin': fields.boolean('get contacts automatically from LinkedIn',
'module_web_linkedin': fields.boolean('Get contacts automatically from linkedIn',
help="""When you create a new contact (person or company), you will be able to load all the data from LinkedIn (photos, address, etc)."""),
'module_crm': fields.boolean('CRM'),
'module_plugin_thunderbird': fields.boolean('enable Thunderbird plugin',
'module_plugin_thunderbird': fields.boolean('Enable Thunderbird plugin',
help="""The plugin allows you archive email and its attachments to the selected
OpenERP objects. You can select a partner, or a lead and
attach the selected mail as a .eml file in
the attachment of a selected record. You can create documents for CRM Lead,
Partner from the selected emails.
This installs the module plugin_thunderbird."""),
'module_plugin_outlook': fields.boolean('enable Outlook plugin',
'module_plugin_outlook': fields.boolean('Enable Outlook plugin',
help="""The Outlook plugin allows you to select an object that you would like to add
to your email and its attachments from MS Outlook. You can select a partner,
or a lead object and archive a selected

View File

@ -16,7 +16,7 @@
<div>
<p>
<label string="You will find more options in your company details: address for the header and footer, overdue payments texts, etc."/>
<button type="object" name="open_company" string="Configure Your Company Data" icon="gtk-execute" class="oe_inline oe_link"/>
<button type="object" name="open_company" string="Configure your company data" icon="gtk-execute" class="oe_inline oe_link"/>
</p>
</div>
<group>

View File

@ -9,9 +9,11 @@
<field name="inherit_id" ref="base.res_partner_kanban_view"/>
<field name="arch" type="xml">
<xpath expr="//div[@class='oe_kanban_partner_categories']" position="inside">
<t t-foreach="record.category_id.raw_value" t-as="category">
<span class="oe_tag" t-att-data-category_id="category"/>
</t>
<span class="oe_kanban_list_many2many" data-model="res.partner.category">
<t t-foreach="record.category_id.raw_value" t-as="category">
<span class="oe_tag" t-att-data-list_id="category"/>
</t>
</span>
</xpath>
</field>
</record>

View File

@ -1,24 +0,0 @@
openerp.base_setup = function(openerp) {
/* extend kanban to include the names of partner categories in the kanban view of partners */
openerp.web_kanban.KanbanView.include({
on_groups_started: function() {
var self = this;
self._super.apply(this, arguments);
if (this.dataset.model === 'res.partner') {
/* Set names for partner categories */
var category_ids = [];
this.$el.find('.oe_kanban_partner_categories span').each(function() {
category_ids.push($(this).data('category_id'));
});
var dataset = new openerp.web.DataSetSearch(this, 'res.partner.category', self.session.context);
dataset.name_get(_.uniq(category_ids)).then(function(result) {
_.each(result, function(value) {
self.$el
.find('.oe_kanban_partner_categories span[data-category_id=' + value[0] + ']')
.html(value[1]);
});
});
}
}
});
};

View File

@ -109,6 +109,7 @@ class res_partner(osv.osv):
if not self.check_vat(cr, uid, ids, context=context):
msg = self._construct_constraint_msg(cr, uid, ids, context=context)
raise osv.except_osv(_('Error!'), msg)
return True
def check_vat(self, cr, uid, ids, context=None):
user_company = self.pool.get('res.users').browse(cr, uid, uid).company_id

View File

@ -27,35 +27,24 @@
'sequence': 2,
'summary': 'Leads, Opportunities, Agenda',
'description': """
The generic OpenERP Customer Relationship Management.
The generic OpenERP Customer Relationship Management
=====================================================
This system enables a group of people to intelligently and efficiently manage
leads, opportunities, meeting, phonecall.
This application enables a group of people to intelligently and efficiently manage leads, opportunities, meetings and phone calls.
It manages key tasks such as communication, identification, prioritization,
assignment, resolution and notification.
It manages key tasks such as communication, identification, prioritization, assignment, resolution and notification.
OpenERP ensures that all cases are successfully tracked by users, customers and
suppliers. It can automatically send reminders, escalate the request, trigger
specific methods and lots of other actions based on your own enterprise rules.
OpenERP ensures that all cases are successfully tracked by users, customers and suppliers. It can automatically send reminders, escalate the request, trigger specific methods and many other actions based on your own enterprise rules.
The greatest thing about this system is that users don't need to do anything
special. They can just send email to the request tracker. OpenERP will take
care of thanking them for their message, automatically routing it to the
appropriate staff and make sure all future correspondence gets to the right
place.
The greatest thing about this system is that users don't need to do anything special. The CRM module has an email gateway for the synchronization interface between mails and OpenERP. That way, users can just send emails to the request tracker.
The CRM module has a email gateway for the synchronisation interface
between mails and OpenERP.
OpenERP will take care of thanking them for their message, automatically routing it to the appropriate staff and make sure all future correspondence gets to the right place.
Creates a dashboard for CRM that includes:
------------------------------------------
* List of New Leads
* List of My Opportunities
* List of My Next Meetings
* Planned Revenue by Stage and User (graph)
* Opportunities by Stage (graph)
Dashboard for CRM will include:
-------------------------------
* Planned Revenue by Stage and User (graph)
* Opportunities by Stage (graph)
""",
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',

View File

@ -8,10 +8,9 @@
<field name="tag">reload</field>
<field name="params" eval="{'menu_id': ref('base.menu_base_partner')}"/>
</record>
<record id="todo_open_crm_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="action_client_crm_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
<field name="state">open</field>
</record>
<record model="crm.case.channel" id="crm_case_channel_website">

View File

@ -26,19 +26,19 @@ class crm_configuration(osv.osv_memory):
_inherit = ['sale.config.settings', 'fetchmail.config.settings']
_columns = {
'fetchmail_lead': fields.boolean("create leads from incoming mails",
'fetchmail_lead': fields.boolean("Create leads from incoming mails",
fetchmail_model='crm.lead', fetchmail_name='Incoming Leads',
help="""Allows you to configure your incoming mail server, and create leads from incoming emails."""),
'module_crm_caldav': fields.boolean("applications with Caldav protocol",
'module_crm_caldav': fields.boolean("Applications with Caldav protocol",
help="""Use protocol caldav to synchronize meetings with other calendar applications (like Sunbird).
This installs the module crm_caldav."""),
'module_import_sugarcrm': fields.boolean("SugarCRM",
help="""Import SugarCRM leads, opportunities, users, accounts, contacts, employees, meetings, phonecalls, emails, project and project tasks data.
This installs the module import_sugarcrm."""),
'module_import_google': fields.boolean("Google (Contacts and Calendar)",
'module_import_google': fields.boolean("Google (contacts and calendar)",
help="""Import google contact in partner address and add google calendar events details in Meeting.
This installs the module import_google."""),
'module_google_map': fields.boolean("add google maps on customers",
'module_google_map': fields.boolean("Add google maps on customers",
help="""Locate customers on Google Map.
This installs the module google_map."""),
'group_fund_raising': fields.boolean("Manage Fund Raising",

View File

@ -32,12 +32,6 @@
</div>
</group>
</div>
<div name="Customer Features" position="inside">
<div>
<field name="module_google_map" class="oe_inline"/>
<label for="module_google_map"/>
</div>
</div>
</field>
</record>

View File

@ -3,18 +3,21 @@
<data noupdate="0">
<record id="base.group_sale_salesman" model="res.groups">
<field name="name">User - Own Leads Only</field>
<field name="name">User: Own Leads Only</field>
<field name="category_id" ref="base.module_category_sales_management"/>
<field name="comment">the user will have access to his own data in the sales application.</field>
</record>
<record id="base.group_sale_salesman_all_leads" model="res.groups">
<field name="name">User - All Leads</field>
<field name="name">User: All Leads</field>
<field name="category_id" ref="base.module_category_sales_management"/>
<field name="implied_ids" eval="[(4, ref('base.group_sale_salesman'))]"/>
<field name="comment">the user will have access to all records of everyone in the sales application.</field>
</record>
<record id="base.group_sale_manager" model="res.groups">
<field name="name">Manager</field>
<field name="comment">the user will have an access to the sales configuration as well as statistic reports.</field>
<field name="category_id" ref="base.module_category_sales_management"/>
<field name="implied_ids" eval="[(4, ref('base.group_sale_salesman_all_leads'))]"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>

View File

@ -18,9 +18,9 @@
assert not lead.partner_id, "Customer should be a new"
assert lead.name == "Fournir votre devis avec le meilleur prix.", "Subject does not match"
-
I reply him request with welcome message.
I reply him request with welcome message. TODO revert mail.mail to mail.compose.message (conversion to customer should be automatic).
-
!python {model: mail.compose.message}: |
!python {model: mail.mail}: |
lead_ids = self.pool.get('crm.lead').search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
context.update({'active_model': 'crm.lead','active_id': lead_ids[0]})
id = self.create(cr, uid, {'body': "Merci à l'intérêt pour notre produit.nous vous contacterons bientôt. Merci", 'email_from': 'sales@mycompany.com'}, context=context)

View File

@ -26,7 +26,7 @@ class crm_claim_settings(osv.osv_memory):
_inherit = ['sale.config.settings', 'fetchmail.config.settings']
_columns = {
'fetchmail_claim': fields.boolean("create claims from incoming mails",
'fetchmail_claim': fields.boolean("Create claims from incoming mails",
fetchmail_model='crm.claim', fetchmail_name='Incoming Claims',
help="""Allows you to configure your incoming mail server, and create claims from incoming emails."""),
}

View File

@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-07-28 18:41+0000\n"
"PO-Revision-Date: 2012-09-15 21:58+0000\n"
"Last-Translator: Fábio Martinelli - http://zupy.com.br "
"<webmaster@guaru.net>\n"
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
"X-Generator: Launchpad (build 15914)\n"
"X-Launchpad-Export-Date: 2012-09-16 04:39+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. module: crm_partner_assign
#: field:crm.lead.forward.to.partner,send_to:0
@ -36,7 +36,7 @@ msgstr "Excluir Permanentemente o email após o envio"
#. module: crm_partner_assign
#: field:crm.lead.report.assign,delay_close:0
msgid "Delay to Close"
msgstr "Espera para Fechar"
msgstr "Adiar Fechamento"
#. module: crm_partner_assign
#: help:crm.lead.forward.to.partner,email_to:0
@ -92,12 +92,12 @@ msgstr "Março"
#. module: crm_partner_assign
#: selection:crm.lead.report.assign,type:0
msgid "Lead"
msgstr "Prospécto"
msgstr "Prospecto"
#. module: crm_partner_assign
#: view:crm.lead.report.assign:0
msgid "Delay to close"
msgstr "Atraso para fechar"
msgstr "Adiar o fechamento"
#. module: crm_partner_assign
#: view:crm.partner.report.assign:0
@ -233,7 +233,7 @@ msgstr "Anterior"
#: code:addons/crm_partner_assign/partner_geo_assign.py:36
#, python-format
msgid "Network error"
msgstr "Erro de rede"
msgstr "Erro na rede"
#. module: crm_partner_assign
#: field:crm.lead.forward.to.partner,email_from:0
@ -274,12 +274,12 @@ msgstr "Prioridade"
#: view:crm.lead.report.assign:0
#: field:crm.lead.report.assign,state:0
msgid "State"
msgstr "Status"
msgstr "Situação"
#. module: crm_partner_assign
#: field:crm.lead.report.assign,delay_expected:0
msgid "Overpassed Deadline"
msgstr "Prazo Superado"
msgstr "Prazo Ultrapassado"
#. module: crm_partner_assign
#: field:crm.lead.report.assign,type:0
@ -318,12 +318,12 @@ msgstr "Analisar Prospecções"
#. module: crm_partner_assign
#: field:crm.lead.report.assign,creation_date:0
msgid "Creation Date"
msgstr "Dt. Criação"
msgstr "Data de Criação"
#. module: crm_partner_assign
#: field:crm.lead.forward.to.partner,res_id:0
msgid "Related Document ID"
msgstr "Documento Relacionado"
msgstr "ID do Documento Relacionado"
#. module: crm_partner_assign
#: view:crm.lead.report.assign:0
@ -397,7 +397,7 @@ msgstr "Fechar"
#. module: crm_partner_assign
#: field:crm.lead.forward.to.partner,use_template:0
msgid "Use Template"
msgstr "Usar modelo"
msgstr "Usar Modelo"
#. module: crm_partner_assign
#: model:ir.actions.act_window,name:crm_partner_assign.action_report_crm_opportunity_assign
@ -453,7 +453,7 @@ msgstr "Assunto"
#: view:crm.lead.report.assign:0
#: view:crm.partner.report.assign:0
msgid "Salesman"
msgstr "Vendedor"
msgstr "Representante"
#. module: crm_partner_assign
#: view:crm.lead.report.assign:0
@ -580,7 +580,7 @@ msgstr "# da Oportunidade"
#. module: crm_partner_assign
#: view:crm.lead.report.assign:0
msgid "Lead Assign"
msgstr "Atribuir Prospécto"
msgstr "Atribuir Prospecto"
#. module: crm_partner_assign
#: selection:crm.lead.report.assign,month:0
@ -600,7 +600,7 @@ msgstr "Janeiro"
#. module: crm_partner_assign
#: help:crm.lead,partner_assigned_id:0
msgid "Partner this case has been forwarded/assigned to."
msgstr "O Parceiro desse Caso foi Enviado/Atribuído para."
msgstr "Parceiro para que este caso foi enviado/atribuído"
#. module: crm_partner_assign
#: field:crm.lead.forward.to.partner,date:0
@ -661,7 +661,7 @@ msgstr "Nome da Grade"
#. module: crm_partner_assign
#: help:crm.lead,date_assign:0
msgid "Last date this case was forwarded/assigned to a partner"
msgstr "Última data que este Caso foi Enviado/Atribuído a um parceiro"
msgstr "Última data que este caso foi enviado/atribuído a um parceiro"
#. module: crm_partner_assign
#: selection:crm.lead.report.assign,state:0
@ -679,7 +679,9 @@ msgstr "Cópia oculta da mensagem para os destinatários"
msgid ""
"Full message headers, e.g. SMTP session headers (usually available on "
"inbound messages only)"
msgstr "Cabeçalho completo, Ex Cabecalhos SMTP"
msgstr ""
"Cabeçalho completo da mensagem, Ex. SMTP session headers (geralmente "
"disponível somente para mensagens recebidas)"
#. module: crm_partner_assign
#: field:res.partner,date_localization:0
@ -808,7 +810,7 @@ msgstr "Abril"
#: model:ir.actions.act_window,name:crm_partner_assign.action_report_crm_partner_assign
#: model:ir.ui.menu,name:crm_partner_assign.menu_report_crm_partner_assign_tree
msgid "Partnership Analysis"
msgstr "Analise de Parceria"
msgstr "Análise de Parceria"
#. module: crm_partner_assign
#: model:ir.model,name:crm_partner_assign.model_crm_lead
@ -839,7 +841,7 @@ msgstr ""
#. module: crm_partner_assign
#: constraint:res.partner:0
msgid "Error ! You cannot create recursive associated members."
msgstr "Erro! Você não pode criar recursivamente a membros associados."
msgstr "Erro! Você não pode criar membros associados recursivamente."
#. module: crm_partner_assign
#: selection:crm.lead.forward.to.partner,history:0

View File

@ -0,0 +1,96 @@
# Russian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-09-14 06:29+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-15 04:55+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Задачи"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Резерв времени"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Для отмены задачи"
#. module: crm_todo
#: constraint:project.task:0
msgid "Error ! Task end-date must be greater then task start-date"
msgstr ""
"Ошибка! Дата завершения задачи должна быть позднее чем дата начала задачи"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "crm.lead"
msgstr "crm.lead"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Далее"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Мои задачи"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Задачи"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Сделано"
#. module: crm_todo
#: constraint:project.task:0
msgid "Error ! You cannot create recursive tasks."
msgstr "Ошибка! Вы не можете создавать рекурсивные задачи."
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Отмена"
#. module: crm_todo
#: view:crm.lead:0
msgid "Extra Info"
msgstr "Доп. инфо."
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Кандидат / предложение"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Для смены в состояние \"Сделано\""
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Назад"

View File

@ -69,7 +69,7 @@ class document_directory(osv.osv):
}
def _get_root_directory(self, cr,uid, context=None):
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')
@ -77,9 +77,7 @@ class document_directory(osv.osv):
return False
root_id = objid.read(cr, uid, mid, ['res_id'])['res_id']
return root_id
except Exception, e:
_logger.warning('Cannot set directory root:'+ str(e))
except Exception:
return False
return objid.browse(cr, uid, mid, context=context).res_id

View File

@ -114,7 +114,7 @@
<field name="model">report.document.user</field>
<field name="arch" type="xml">
<graph string="Files by User" type="pie">
<field name="user" />
<field name="user_id" />
<field name="nbr" operator="+"/>
</graph>
</field>

View File

@ -6,7 +6,6 @@
</record>
<record id="demo_category1" model="document.page">
<field name="name">OpenERP Features</field>
<field name="sequence">10</field>
<field name="type">category</field>
<field name="content">
Summary of the feature

View File

@ -65,7 +65,6 @@ class document_page_create_menu(osv.osv_memory):
'view_id': False,
'type': 'ir.actions.act_window',
'target': 'inlineview',
'nodestroy': True,
}
value['domain'] = "[('parent_id','=',%d)]" % (page.id)
value['res_id'] = page.id

View File

@ -25,21 +25,18 @@
'name': 'Events Organisation',
'version': '0.1',
'category': 'Tools',
'summary': 'For Trainings, Conferences & Meetings',
'summary': 'Trainings, Conferences, Meetings, Exhibitions, Registrations',
'description': """
Organization and management of Events.
======================================
This module allows you:
-----------------------
* to manage your events and their registrations
* to use emails to automatically confirm and send acknowledgements for any
registration to an event
The event module allows you to efficiently organise events and all related tasks: planification, registration tracking,
attendances, etc.
Note that:
----------
- You can define new types of events in
**Events** / **Configuration** / **Types of Events**
Key Features
------------
* Manage your Events and Registrations
* Use emails to automatically confirm and send acknowledgements for any event registration
""",
'author': 'OpenERP SA',
'depends': ['base_setup', 'board', 'email_template', 'google_map'],

View File

@ -7,10 +7,9 @@
<field name="tag">reload</field>
<field name="params" eval="{'menu_id': ref('event.event_main_menu')}"/>
</record>
<record id="todo_open_event_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="action_client_event_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
<field name="state">open</field>
</record>
<!-- notify all employees of module installation -->

View File

@ -39,10 +39,9 @@
</record>
<!-- register configuration wizard -->
<record id="config_wizard_config_moodle" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="configure_moodle"/>
<field name="type">automatic</field>
<field name="name">Configuration of moodle</field>
<field name="state">open</field>
</record>
<menuitem name="Moodle Configuration" parent="base.menu_marketing_config_root" id="wizard_moodle" action="configure_moodle"/>

View File

@ -81,8 +81,6 @@ class sale_order_line(osv.osv):
'nb_register': int(order_line.product_uom_qty),
'email': order_line.order_id.partner_id.email,
'phone': order_line.order_id.partner_id.phone,
'street': order_line.order_id.partner_invoice_id.street,
'city': order_line.order_id.partner_invoice_id.city,
'origin': order_line.order_id.name,
'event_id': order_line.event_id.id,
}

View File

@ -38,12 +38,12 @@ class google_login(osv.osv_memory):
def google_login(self, user, password, type='', context=None):
if type == 'group':
gd_client = gdata.contacts.client.ContactsClient(source='OpenERP')
if type == 'contact':
gd_client = gdata.contacts.service.ContactsService()
if type == 'calendar':
elif type == 'contact':
gd_client = gdata.contacts.service.ContactsService()
elif type == 'calendar':
gd_client = gdata.calendar.service.CalendarService()
if type =='docs_client':
elif type =='docs_client':
gd_client = gdata.docs.client.DocsClient()
else:
gd_client = gdata.contacts.service.ContactsService()

View File

@ -26,16 +26,19 @@
'category': 'Human Resources',
'sequence': 12,
'website': 'http://www.openerp.com',
'summary': 'All Infos on Employees',
'summary': 'Jobs, Departments, Employees Details',
'description': """
Module for Human Resource Management.
=====================================
Human Resources Management
=========================
This application enables you to manage important aspects of your company's staff and other details such as their skills, contacts, working time...
You can manage:
---------------
* Employees and hierarchies : You can define your employee with User and display hierarchies
* HR Departments
* HR Jobs
* Employees and hierarchies : You can define your employee with User and display hierarchies
* HR Departments
* HR Jobs
""",
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',

View File

@ -26,23 +26,23 @@ class hr_config_settings(osv.osv_memory):
_inherit = 'res.config.settings'
_columns = {
'module_hr_timesheet_sheet': fields.boolean('allow timesheets validation by managers',
'module_hr_timesheet_sheet': fields.boolean('Allow timesheets validation by managers',
help ="""This installs the module hr_timesheet_sheet."""),
'module_hr_attendance': fields.boolean('track attendances',
'module_hr_attendance': fields.boolean('Track attendances',
help ="""This installs the module hr_attendance."""),
'module_hr_timesheet': fields.boolean('manage timesheets',
'module_hr_timesheet': fields.boolean('Manage timesheets',
help ="""This installs the module hr_timesheet."""),
'module_hr_holidays': fields.boolean('manage holidays, leaves and allocation requests',
'module_hr_holidays': fields.boolean('Manage holidays, leaves and allocation requests',
help ="""This installs the module hr_holidays."""),
'module_hr_expense': fields.boolean('manage employees expenses',
'module_hr_expense': fields.boolean('Manage employees expenses',
help ="""This installs the module hr_expense."""),
'module_hr_recruitment': fields.boolean('manage the recruitment process',
'module_hr_recruitment': fields.boolean('Manage the recruitment process',
help ="""This installs the module hr_recruitment."""),
'module_hr_contract': fields.boolean('record contracts per employee',
'module_hr_contract': fields.boolean('Record contracts per employee',
help ="""This installs the module hr_contract."""),
'module_hr_evaluation': fields.boolean('organize employees periodic evaluation',
'module_hr_evaluation': fields.boolean('Organize employees periodic evaluation',
help ="""This installs the module hr_evaluation."""),
'module_hr_payroll': fields.boolean('manage payroll',
'module_hr_payroll': fields.boolean('Manage payroll',
help ="""This installs the module hr_payroll."""),
}

View File

@ -7,10 +7,9 @@
<field name="tag">reload</field>
<field name="params" eval="{'menu_id': ref('menu_hr_root')}"/>
</record>
<record id="todo_open_hr_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="action_client_hr_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
<field name="state">open</field>
</record>
</data>
<data>

View File

@ -25,19 +25,27 @@
'author': 'OpenERP SA',
'category': 'Human Resources',
'website': 'http://www.openerp.com',
'summary': 'Periodical Evaluations, Surveys',
'summary': 'Periodical Evaluations, Appraisals, Surveys',
'images': ['images/hr_evaluation_analysis.jpeg','images/hr_evaluation.jpeg'],
'depends': ['hr','base_calendar','survey'],
'description': """
Ability to create employees evaluation.
=======================================
Periodical Employees evaluation and appraisals
==============================================
An evaluation can be created by employee for subordinates, juniors as well as
his manager. The evaluation is done under a plan in which various surveys can be
created and it can be defined which level of employee hierarchy fills what and
final review and evaluation is done by the manager. Every evaluation filled by
the employees can be viewed in the form of pdf file.
""",
By using this application you can maintain the motivational process by doing periodical evaluations of your employees' performance. The regular assessment of human resources can benefit your people as well your organization.
An evaluation plan can be assigned to each employee. These plans define the frequency and the way you manage your periodic personal evaluations. You will be able to define steps and attach interview forms to each step.
Manages several types of evaluations: bottom-up, top-down, self-evaluations and the final evaluation by the manager.
Key Features
------------
* Ability to create employees evaluations.
* An evaluation can be created by an employee for subordinates, juniors as well as his manager.
* The evaluation is done according to a plan in which various surveys can be created. Each survey can be answered by a particular level in the employees hierarchy. The final review and evaluation is done by the manager.
* Every evaluation filled by employees can be viewed in a PDF form.
* Interview Requests are generated automatically by OpenERP according to employees evaluation plans. Each user receives automatic emails and requests to perform a periodical evaluation of their colleagues.
""",
"demo": ["hr_evaluation_demo.xml"],
"data": [
'security/ir.model.access.csv',

View File

@ -1,17 +1,10 @@
<?xml version="1.0"?>
<openerp>
<data>
<record id="hr.todo_open_hr_menu" model="ir.actions.todo">
<field name="state">done</field>
</record>
</data>
<data noupdate="1">
<!-- After installation of the module, open the related menu -->
<record id="todo_open_hr_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="hr.action_client_hr_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
<field name="state">open</field>
</record>
<!-- notify all employees of module installation -->
<record model="mail.message" id="module_install_notification">

View File

@ -27,19 +27,21 @@
'sequence': 30,
'summary': 'Expenses Validation, Invoicing',
'description': """
This module aims to manage employee expenses.
=============================================
Manage expenses by Employees
============================
The whole workflow is implemented:
This application allows you to manage your employees' daily expenses. It gives you access to your employees fee notes and give you the right to complete and validate or refuse the notes. After validation it creates an invoice for the employee.
Employee can encode their own expenses and the validation flow puts it automatically in the accounting after validation by managers.
The whole flow is implemented as:
----------------------------------
* Draft expense
* Confirmation of the sheet by the employee
* Validation by his manager
* Validation by the accountant and receipt creation
* Draft expense
* Confirmation of the sheet by the employee
* Validation by his manager
* Validation by the accountant and receipt creation
This module also uses the analytic accounting and is compatible with
the invoice on timesheet module so that you will be able to automatically
re-invoice your customer's expenses if your work by project.
This module also uses analytic accounting and is compatible with the invoice on timesheet module so that you are able to automatically re-invoice your customers' expenses if your work by project.
""",
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',

View File

@ -1,15 +1,9 @@
<openerp>
<data>
<record id="hr.todo_open_hr_menu" model="ir.actions.todo">
<field name="state">done</field>
</record>
</data>
<data noupdate="1">
<!-- After installation of the module, open the related menu -->
<record id="todo_open_hr_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="hr.action_client_hr_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
<field name="state">open</field>
</record>
</data>
<data>

View File

@ -29,33 +29,20 @@
'summary': 'Holidays, Allocation and Leave Requests',
'website': 'http://www.openerp.com',
'description': """
This module allows you to manage leaves and leave requests.
===========================================================
Manage leaves and allocation requests
=====================================
Implements a dashboard for human resource management that includes:
-------------------------------------------------------------------
* Leaves
This application controls the holiday schedule of your company. It allows employees to request holidays. Then, managers can review requests for holidays and approve or reject them. This way you can control the overall holiday planning for the company or department.
Note that:
~~~~~~~~~~
- A synchronisation with an internal agenda (use of the CRM module) is
possible: in order to automatically create a case when an holiday request
is accepted, you have to link the holidays status to a case section. You
can setup this info and your colour preferences in
**Human Resources** / **Configuration** / **Leave Type**
- An employee can make an ask for more off-days by making a new Allocation. It will increase his total of that leave type available (if the request is accepted).
- There are two ways to print the employee's holidays:
* The first will allow to choose employees by department and is used by clicking the menu item located in
**Reporting** / **Human Resources** / **Leaves** / **Leaves by Department**
* The second will allow you to choose the holidays report for specific employees. Go on the list
**Human Resources** / **Human Resources** / **Employees**
then select the ones you want to choose, click on the print icon and select the option
'Leaves Summary'
- The wizard allows you to choose if you want to print either the Approved & Confirmed holidays or both. These states must be set up by a user from the group 'HR'. You can define these features in the security tab from the user data in
**Settings** / **Users** / **Users**
for example, you maybe will do it for the user 'admin'.
You can configure several kinds of leaves (sickness, holidays, paid days, ...) and allocate leaves to an employee or department quickly using allocation requests. An employee can also make a request for more days off by making a new Allocation. It will increase the total of available days for that leave type (if the request is accepted).
You can keep track of leaves in different ways by following reports:
* Leaves Summary
* Leaves by Department
* Leaves Analysis
A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a holiday request is accepted by setting up a type of meeting in Leave Type.
""",
'images': ['images/hr_allocation_requests.jpeg', 'images/hr_leave_requests.jpeg', 'images/leaves_analysis.jpeg'],
'depends': ['hr', 'base_calendar', 'process', 'resource'],

View File

@ -1,16 +1,10 @@
<?xml version="1.0"?>
<openerp>
<data>
<record id="hr.todo_open_hr_menu" model="ir.actions.todo">
<field name="state">done</field>
</record>
</data>
<data noupdate="1">
<!-- After installation of the module, open the related menu -->
<record id="todo_open_hr_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="hr.action_client_hr_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
<field name="state">open</field>
</record>
<!-- notify all employees of module installation -->
<record model="mail.message" id="module_install_notification">

View File

@ -99,8 +99,8 @@
<menuitem
id="menu_hr_payroll_structure_view"
action="action_view_hr_payroll_structure_list_form"
parent="hr.menu_hr_configuration"
sequence="20"
parent="payroll_configure"
sequence="2"
/>
<record id="action_view_hr_payroll_structure_tree" model="ir.actions.act_window">
<field name="name">Salary Structures Hierarchy</field>

View File

@ -24,6 +24,6 @@ from osv import osv, fields
class human_resources_configuration(osv.osv_memory):
_inherit = 'hr.config.settings'
_columns = {
'module_hr_payroll_account': fields.boolean('link your payroll to accounting system',
help ="""Create Journal Entries from Payslips"""),
'module_hr_payroll_account': fields.boolean('Link your payroll to accounting system',
help ="""Create journal entries from payslips"""),
}

View File

@ -25,17 +25,16 @@
'version': '1.0',
'category': 'Human Resources',
'sequence': 24,
'summary': 'Recruitment Process, Job Descriptions',
'summary': 'Jobs, Recruitment, Applications, Job Interviews',
'description': """
Manages job positions and the recruitment process.
==================================================
Manage job positions and the recruitment process
=================================================
It's integrated with the survey module to allow you to define interview for different jobs.
This application allows you to easily keep track of jobs, vacancies, applications, interviews...
This module is integrated with the mail gateway to automatically tracks email
sent to jobs@YOURCOMPANY.com. It's also integrated with the document management
system to store and search in your CV base.
""",
It is integrated with the mail gateway to automatically fetch email sent to <jobs@yourcompany.com> in the list of applications. It's also integrated with the document management system to store and search in the CV base and find the candidate that you are looking for. Similarly, it is integrated with the survey module to allow you to define interviews for different jobs.
You can define the different phases of interviews and easily rate the applicant from the kanban view.
""",
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',
'images': ['images/hr_recruitment_analysis.jpeg','images/hr_recruitment_applicants.jpeg'],

View File

@ -194,7 +194,7 @@ class hr_applicant(base_stage, osv.Model):
When the case is over, the state is set to \'Done\'.\
If the case needs to be reviewed then the state is \
set to \'Pending\'.'),
'categ_ids': fields.many2many('hr.applicant_category', string='Categories'),
'categ_ids': fields.many2many('hr.applicant_category', string='Tags'),
'company_id': fields.many2one('res.company', 'Company'),
'user_id': fields.many2one('res.users', 'Responsible'),
# Applicant Columns
@ -398,7 +398,7 @@ class hr_applicant(base_stage, osv.Model):
for applicant in self.browse(cr, uid, ids, context=context):
address_id = False
if applicant.partner_id:
address_id = applicant.partner_id.address_get(['contact'])['contact']
address_id = self.pool.get('res.partner').address_get(cr,uid,[applicant.partner_id.id],['contact'])['contact']
if applicant.job_id:
applicant.job_id.write({'no_of_recruitment': applicant.job_id.no_of_recruitment - 1})
emp_id = hr_employee.create(cr,uid,{'name': applicant.partner_name or applicant.name,

View File

@ -337,7 +337,7 @@
<field name="no_of_recruitment" version="7.0" position="after">
<label for="survey_id" groups="base.group_user"/>
<div groups="base.group_user">
<field name="survey_id" class="oe_inline"/>
<field name="survey_id" class="oe_inline" domain="[('type','=','Human Resources')]"/>
<button class="oe_inline"
string="Interview"
name="action_print_survey" type="object"

View File

@ -26,10 +26,10 @@ class hr_applicant_settings(osv.osv_memory):
_inherit = ['hr.config.settings', 'fetchmail.config.settings']
_columns = {
'module_document_ftp': fields.boolean('allow the automatic indexation of resumes',
'module_document_ftp': fields.boolean('Allow the automatic indexation of resumes',
help="""Manage your CV's and motivation letter related to all applicants.
This installs the module document_ftp. This will install the knowledge management module in order to allow you to search using specific keywords through the content of all documents (PDF, .DOCx...)"""),
'fetchmail_applicants': fields.boolean('create applicants from an incoming email account',
'fetchmail_applicants': fields.boolean('Create applicants from an incoming email account',
fetchmail_model='hr.applicant', fetchmail_name='Incoming HR Applications',
help ="""Allow applicants to send their job application to an email address (jobs@mycompany.com),
and create automatically application documents in the system."""),

View File

@ -2,17 +2,12 @@
<openerp>
<data noupdate="1">
<!-- After installation of the module, open the related menu -->
<record id="todo_open_hr_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="hr.action_client_hr_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
<field name="state">open</field>
</record>
</data>
<data>
<record id="hr.todo_open_hr_menu" model="ir.actions.todo">
<field name="state">done</field>
</record>
<record id="view_hr_apll_config_settings" model="ir.ui.view">
<field name="name">hr settings for recruitment</field>
<field name="model">hr.config.settings</field>

View File

@ -137,11 +137,13 @@ class hr_analytic_timesheet(osv.osv):
if context is None:
context = {}
emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))], context=context)
if emp_id:
emp = emp_obj.browse(cr, uid, emp_id[0], context=context)
if emp.journal_id:
return emp.journal_id.id
return False
if not emp_id :
raise osv.except_osv(_('Warning!'), _('Please create an employee for this user, using the menu: Human Resources > Employees.'))
emp = emp_obj.browse(cr, uid, emp_id[0], context=context)
if emp.journal_id:
return emp.journal_id.id
else :
raise osv.except_osv(_('Warning!'), _('No analytic journal defined for \'%s\'.\nYou should assign an analytic journal on the employee form.')%(emp.name))
_defaults = {

View File

@ -27,27 +27,21 @@
'sequence': 16,
'summary': 'Timesheets, Attendances, Activities',
'description': """
This module helps you to easily record and validate timesheets and attendances within the same view.
====================================================================================================
Record and validate timesheets and attendances easily
=====================================================
* It will maintain attendances and track (sign in/sign out) events.
* Track the timesheet lines.
This application supplies a new screen enabling you to manage both attendances (Sign in/Sign out) and your work encoding (timesheet) by period. Timesheet entries are made by employees each day. At the end of the defined period, employees validate their sheet and the manager must then approve his team's entries. Periods are defined in the company forms and you can set them to run monthly or weekly.
Other tabs contains statistics views to help you analyse your time or the time of your team:
--------------------------------------------------------------------------------------------
* Time spent by day (with attendances)
* Time spent by project
This module also implements a complete timesheet validation process:
--------------------------------------------------------------------
* Draft sheet
* Confirmation at the end of the period by the employee
* Validation by the project manager
The complete timesheet validation process is:
---------------------------------------------
* Draft sheet
* Confirmation at the end of the period by the employee
* Validation by the project manager
The validation can be configured in the company:
------------------------------------------------
* Period size (day, week, month, year)
* Maximal difference between timesheet and attendances
* Period size (Day, Week, Month)
* Maximal difference between timesheet and attendances
""",
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',

View File

@ -46,7 +46,7 @@
<field name="arch" type="xml">
<form string="Timesheet" version="7.0">
<header>
<button name="button_confirm" states="draft" string="Submited to Manager" type="object" class="oe_highlight"/>
<button name="button_confirm" states="draft" string="Submit to Manager" type="object" class="oe_highlight"/>
<button name="done" states="confirm" string="Approve" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
<button name="action_set_to_draft" states="done" string="Set to Draft" type="object" />
<button name="cancel" states="confirm" string="Refuse" type="workflow" groups="base.group_hr_user" />

View File

@ -976,7 +976,7 @@ msgstr ""
#. module: hr_timesheet_sheet
#: view:hr_timesheet_sheet.sheet:0
msgid "Submited to Manager"
msgid "Submit to Manager"
msgstr ""
#. module: hr_timesheet_sheet

View File

@ -2,16 +2,12 @@
<openerp>
<data noupdate="1">
<!-- After installation of the module, open the related menu -->
<record id="todo_open_hr_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="hr.action_client_hr_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
<field name="state">open</field>
</record>
</data>
<data>
<record id="hr.todo_open_hr_menu" model="ir.actions.todo">
<field name="state">done</field>
</record>
<record id="view_hr_timehseet_config_settings" model="ir.ui.view">
<field name="name">hr settings for timesheets</field>
<field name="model">hr.config.settings</field>

View File

@ -60,7 +60,7 @@
!record {model: hr.attendance, id: hr_attendance_1}:
action: sign_out
employee_id: 'hr.employee_qdp'
name: !eval (datetime.now() + timedelta(hours=8.25)).strftime('%Y-%m-%d %H:%M:%S')
name: !eval (datetime.now() + timedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S')
-
I create Timesheet Entry for time spend on today work.
-
@ -102,6 +102,11 @@
product_id: product.product_product_consultant
general_account_id: account.a_expense
journal_id: hr_timesheet.analytic_journal
-
I set an allowed difference of 25 hours
-
!record {model: res.company, id: base.main_company}:
timesheet_max_difference: 25.00
-
I tried again to confirm the timesheet after modification.
-

View File

@ -421,11 +421,11 @@ class import_framework(Thread):
def _send_notification_email(self, result, error):
if not self.email:
return False
email_obj = self.obj.pool.get('mail.message')
email_obj = self.obj.pool.get('mail.mail')
email_id = email_obj.create(self.cr, self.uid, {
'email_from' : 'import@module.openerp',
'email_to' : self.email,
'body' : self.get_email_body(result, error),
'body_html' : self.get_email_body(result, error),
'subject' : self.get_email_subject(result, error),
'auto_delete' : True})
email_obj.send(self.cr, self.uid, [email_id])

View File

@ -255,7 +255,7 @@ class google_import(import_framework):
'email_from': 'Email',
'date': 'DateStart',
'date_deadline': 'DateEnd',
'categ_id/id': call(self.get_event_category, value('Category')),
'categ_ids/id': call(self.get_event_category, value('Category')),
'recurrency': self.get_rec,
'end_date' : 'end_date',
'end_type' : 'end_type',

View File

@ -110,6 +110,8 @@ class synchronize_google(osv.osv_memory):
_defaults = {
'group_name': 'all',
'customer': True,
'supplier': True,
}
def import_google(self, cr, uid, ids, context=None):

View File

@ -25,16 +25,16 @@ class knowledge_config_settings(osv.osv_memory):
_name = 'knowledge.config.settings'
_inherit = 'res.config.settings'
_columns = {
'module_document_page': fields.boolean('create static web pages',
'module_document_page': fields.boolean('Create static web pages',
help="""This installs the module document_page."""),
'module_document': fields.boolean('manage documents',
'module_document': fields.boolean('Manage documents',
help="""This is a complete document management system, with: user authentication,
full document search (but pptx and docx are not supported), and a document dashboard.
This installs the module document."""),
'module_document_ftp': fields.boolean('share repositories (FTP)',
'module_document_ftp': fields.boolean('Share repositories (FTP)',
help="""Access your documents in OpenERP through an FTP interface.
This installs the module document_ftp."""),
'module_document_webdav': fields.boolean('share repositories (WebDAV)',
'module_document_webdav': fields.boolean('Share repositories (WebDAV)',
help="""Access your documents in OpenERP through WebDAV.
This installs the module document_webdav."""),
}

View File

@ -5,7 +5,6 @@
<record id="view_payment_advice_tree" model="ir.ui.view">
<field name="name">payment.advice.report.tree</field>
<field name="model">payment.advice.report</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree colors="blue:state == 'draft';black:state == 'confirm';gray:state == 'cancel' " string="Advices Analysis">
<field name="nbr" sum="# Payment Lines"/>
@ -31,7 +30,6 @@
<record id="view_payment_advice_search" model="ir.ui.view">
<field name="name">payment.advice.report.search</field>
<field name="model">payment.advice.report</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Advices Analysis">
<group>

View File

@ -5,7 +5,6 @@
<record id="view_payslip_tree" model="ir.ui.view">
<field name="name">payslip.report.tree</field>
<field name="model">payslip.report</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree colors="blue:state == 'draft';black:state == 'done';gray:state == 'cancel' " string="Payslip Analysis">
<field name="nbr" sum="# Payslip Lines"/>
@ -30,7 +29,6 @@
<record id="view_payslip_search" model="ir.ui.view">
<field name="name">payslip.report.search</field>
<field name="model">payslip.report</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Payslip Analysis">
<group>

View File

@ -4,7 +4,6 @@
<record id="view_salary_employee_month" model="ir.ui.view">
<field name="name">Hr monthly Employee Salary</field>
<field name="model">hr.salary.employee.month</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Employee Pay Head Breakup" version="7.0">
<label string="This wizard will print report which displays employees break-up of Net Head for a specified dates."/>

View File

@ -4,7 +4,6 @@
<record id="view_yearly_salary_detail" model="ir.ui.view">
<field name="name">Employee Yearly Salary</field>
<field name="model">yearly.salary.detail</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Pay Head Employee Breakup" version="7.0">
<label string="This wizard will print report which display a pay head employee breakup for a specified dates."/>

View File

@ -0,0 +1,178 @@
# Brazilian Portuguese translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 01:06+0000\n"
"PO-Revision-Date: 2012-09-16 00:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-16 04:39+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
msgid "Template for Fiscal Position"
msgstr "Modelo para Posição Fiscal"
#. module: l10n_multilang
#: sql_constraint:account.account:0
msgid "The code of the account must be unique per company !"
msgstr "O código da conta deve ser único por empresa !"
#. module: l10n_multilang
#: constraint:account.account.template:0
msgid ""
"Configuration Error!\n"
"You can not define children to an account with internal type different of "
"\"View\"! "
msgstr ""
"Erro de configuração!\n"
"Você não pode definir um filho a uma conta com tipo interno diferente de "
"\"Visualização\"! "
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_analytic_journal
msgid "Analytic Journal"
msgstr "Diário Analítico"
#. module: l10n_multilang
#: constraint:account.account.template:0
msgid "Error ! You can not create recursive account templates."
msgstr "Erro! Você não pode criar templates recursivos para contas."
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_journal
msgid "Journal"
msgstr "Diário"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_chart_template
msgid "Templates for Account Chart"
msgstr "Modelos para Plano de Contas"
#. module: l10n_multilang
#: sql_constraint:account.tax:0
msgid "The description must be unique per company!"
msgstr "A descrição deve ser única por empresa!"
#. module: l10n_multilang
#: constraint:account.tax.code.template:0
msgid "Error ! You can not create recursive Tax Codes."
msgstr "Erro ! Você não pode criar Códigos de Impostos recursivos"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_tax_template
msgid "account.tax.template"
msgstr "account.tax.template"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_tax
msgid "account.tax"
msgstr "account.tax"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_account
msgid "Account"
msgstr "Conta Contábil"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
msgid "wizard.multi.charts.accounts"
msgstr "wizard.multi.charts.accounts"
#. module: l10n_multilang
#: constraint:account.journal:0
msgid ""
"Configuration error! The currency chosen should be shared by the default "
"accounts too."
msgstr ""
"Erro de configuração! A moeda escolhida deve ser compartilhada pelas contas "
"padrão também."
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_account_template
msgid "Templates for Accounts"
msgstr "Modelos para Contas"
#. module: l10n_multilang
#: help:account.chart.template,spoken_languages:0
msgid ""
"State here the languages for which the translations of templates could be "
"loaded at the time of installation of this localization module and copied in "
"the final object when generating them from templates. You must provide the "
"language codes separated by ';'"
msgstr ""
"Declare aqui os idiomas para os quais as traduções de modelos poderiam ser "
"carregados no momento da instalação deste módulo de localização e copiado no "
"objeto final, quando gerá-los a partir de modelos. Você deve fornecer os "
"códigos de idioma separados por ';'"
#. module: l10n_multilang
#: constraint:account.account:0
msgid "Error ! You can not create recursive accounts."
msgstr "Erro! Você não pode criar contas recursivas"
#. module: l10n_multilang
#: constraint:account.account:0
msgid ""
"Configuration Error! \n"
"You can not select an account type with a deferral method different of "
"\"Unreconciled\" for accounts with internal type \"Payable/Receivable\"! "
msgstr ""
"Erro de Configuração!\n"
"Você não pode selecionar um tipo de conta com um método de deferimento "
"diferente de \"Não conciliado\" para contas do tipo \"Pagáveis/Recebíveis\" "
#. module: l10n_multilang
#: sql_constraint:account.journal:0
msgid "The name of the journal must be unique per company !"
msgstr "O nome do diário deve ser único por empresa!"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_analytic_account
msgid "Analytic Account"
msgstr "Conta Analítica"
#. module: l10n_multilang
#: sql_constraint:account.journal:0
msgid "The code of the journal must be unique per company !"
msgstr "O código do diário deve ser único por empresa!"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
msgid "Fiscal Position"
msgstr "Posição Fiscal"
#. module: l10n_multilang
#: constraint:account.account:0
msgid ""
"Configuration Error! \n"
"You can not define children to an account with internal type different of "
"\"View\"! "
msgstr ""
"Erro de configuração!\n"
"Você não pode definir um filho a uma conta com tipo interno diferente de "
"\"Visualização\"! "
#. module: l10n_multilang
#: constraint:account.analytic.account:0
msgid "Error! You can not create recursive analytic accounts."
msgstr "Erro! Você não pode criar contas analíticas recursivas."
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_tax_code_template
msgid "Tax Code Template"
msgstr "Modelo do Código do Imposto"
#. module: l10n_multilang
#: field:account.chart.template,spoken_languages:0
msgid "Spoken Languages"
msgstr "Idiomas falados"

View File

@ -26,36 +26,22 @@
'sequence': 2,
'summary': 'Discussions, Mailing Lists, News',
'description': """
A business oriented Social Networking with a fully-integrated email and message management.
===========================================================================================
Business oriented Social Networking
===================================
The Social Networking module provides a unified social network abstraction layer allowing applications to display a complete
communication history on documents with a fully-integrated email and message management system.
The Social Networking module provides an unified social network
abstraction layer allowing applications to display a complete
communication history on documents. It gives the users the possibility
to read and send messages and emails in an unified way.
It enables the users to read and send messages as well as emails. It also provides a feeds page combined to a subscription mechanism that allows to follow documents and to be constantly updated about recent news.
It also provides a feeds page combined to a subscription mechanism, that
allows to follow documents, and to be constantly updated about recent
news.
The main features of the module are:
------------------------------------
* a clean and renewed communication history for any OpenERP
document that can act as a discussion topic,
* a discussion mean on documents,
* a subscription mechanism to be updated about new messages on
interesting documents,
* an unified feeds page to see recent messages and activity
on followed documents,
* user communication through the feeds page,
* a threaded discussion design,
* relies on the global outgoing mail server, an integrated email
management system allowing to send emails with a configurable
scheduler-based processing engine
* includes an extensible generic email composition assistant, that can turn
into a mass-mailing assistant, and is capable of interpreting
simple *placeholder expressions* that will be replaced with
dynamic data when each email is actually sent
Main Features
-------------
* Clean and renewed communication history for any OpenERP document that can act as a discussion topic
* Subscription mechanism to be updated about new messages on interesting documents
* Unified feeds page to see recent messages and activity on followed documents
* User communication through the feeds page
* Threaded discussion design on documents
* Relies on the global outgoing mail server - an integrated email management system - allowing to send emails with a configurable scheduler-based processing engine
* Includes an extensible generic email composition assistant, that can turn into a mass-mailing assistant and is capable of interpreting simple *placeholder expressions* that will be replaced with dynamic data when each email is actually sent.
""",
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',

View File

@ -59,7 +59,7 @@ class mail_alias(osv.Model):
def _get_alias_domain(self, cr, uid, ids, name, args, context=None):
ir_config_parameter = self.pool.get("ir.config_parameter")
domain = ir_config_parameter.get_param(cr, uid, "mail.catchall.domain", context=context)
domain = ir_config_parameter.get_param(cr, uid, "mail.catchall.domain", context=context)
return dict.fromkeys(ids, domain or "")
_columns = {
@ -86,7 +86,7 @@ class mail_alias(osv.Model):
help="Optional ID of a thread (record) to which all incoming "
"messages will be attached, even if they did not reply to it. "
"If set, this will disable the creation of new records completely."),
'alias_domain': fields.function(_get_alias_domain, string="Alias Domain", type='char', size=None),
'alias_domain': fields.function(_get_alias_domain, string="Alias domain", type='char', size=None),
}
_defaults = {

View File

@ -366,6 +366,7 @@ class mail_thread(osv.AbstractModel):
context=context)
msg = self.message_parse(cr, uid, msg_txt, save_original=save_original, context=context)
if strip_attachments: msg.pop('attachments', None)
thread_id = False
for model, thread_id, custom_values, user_id in routes:
if self._name != model:
context.update({'thread_model': model})
@ -378,7 +379,7 @@ class mail_thread(osv.AbstractModel):
else:
thread_id = model_pool.message_new(cr, user_id, msg, custom_values, context=context)
self.message_post(cr, uid, [thread_id], context=context, **msg)
return True
return thread_id
def message_new(self, cr, uid, msg_dict, custom_values=None, context=None):
"""Called by ``message_process`` when a new message is received

View File

@ -1,4 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_mail_global,mail.mail,model_mail_mail,base.group_system,1,1,1,1
access_mail_message_all,mail.message.all,model_mail_message,,1,0,0,0
access_mail_message_group_user,mail.message.group.user,model_mail_message,base.group_user,1,1,1,1
access_mail_thread,mail.thread,model_mail_thread,base.group_user,1,1,1,0
@ -7,3 +8,5 @@ access_mail_notification_all,mail.notification.all,model_mail_notification,,1,1,
access_mail_group,mail.group,model_mail_group,base.group_user,1,1,1,1
access_mail_alias_user,mail.alias,model_mail_alias,base.group_user,1,1,1,0
access_mail_alias_system,mail.alias,model_mail_alias,base.group_system,1,1,1,1
access_mail_mail_user,mail.mail,model_mail_mail,base.group_user,1,1,1,0
access_mail_mail_manager,mail.mail,model_mail_mail,group_mail_manager,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_mail_global mail.mail model_mail_mail base.group_system 1 1 1 1
3 access_mail_message_all mail.message.all model_mail_message 1 0 0 0
4 access_mail_message_group_user mail.message.group.user model_mail_message base.group_user 1 1 1 1
5 access_mail_thread mail.thread model_mail_thread base.group_user 1 1 1 0
8 access_mail_group mail.group model_mail_group base.group_user 1 1 1 1
9 access_mail_alias_user mail.alias model_mail_alias base.group_user 1 1 1 0
10 access_mail_alias_system mail.alias model_mail_alias base.group_system 1 1 1 1
11 access_mail_mail_user mail.mail model_mail_mail base.group_user 1 1 1 0
12 access_mail_mail_manager mail.mail model_mail_mail group_mail_manager 1 1 1 1

View File

@ -25,14 +25,14 @@ class marketing_config_settings(osv.osv_memory):
_name = 'marketing.config.settings'
_inherit = 'res.config.settings'
_columns = {
'module_marketing_campaign': fields.boolean('Marketing Campaigns',
'module_marketing_campaign': fields.boolean('Marketing campaigns',
help="""Provides leads automation through marketing campaigns.
Campaigns can in fact be defined on any resource, not just CRM leads.
This installs the module marketing_campaign."""),
'module_marketing_campaign_crm_demo': fields.boolean('Demo Data for Marketing Campaigns',
'module_marketing_campaign_crm_demo': fields.boolean('Demo data for marketing campaigns',
help="""Installs demo data like leads, campaigns and segments for Marketing Campaigns.
This installs the module marketing_campaign_crm_demo."""),
'module_crm_profiling': fields.boolean('Track Customer Profile to Focus your Campaigns',
'module_crm_profiling': fields.boolean('Track customer profile to focus your campaigns',
help="""Allows users to perform segmentation within partners.
This installs the module crm_profiling."""),
}

View File

@ -31,41 +31,27 @@
'images': ['images/bill_of_materials.jpeg', 'images/manufacturing_order.jpeg', 'images/planning_manufacturing_order.jpeg', 'images/production_analysis.jpeg', 'images/production_dashboard.jpeg','images/routings.jpeg','images/work_centers.jpeg'],
'depends': ['procurement', 'stock', 'resource', 'purchase', 'product','process'],
'description': """
This is the base module to manage the manufacturing process in OpenERP.
=======================================================================
Manage the Manufacturing process in OpenERP
===========================================
Features:
---------
* Make to Stock/Make to Order (by line)
* Multi-level BoMs, no limit
* Multi-level routing, no limit
* Routing and work center integrated with analytic accounting
* Scheduler computation periodically/Just In Time module
* Multi-pos, multi-warehouse
* Different reordering policies
* Cost method by product: standard price, average price
* Easy analysis of troubles or needs
* Very flexible
* Allows to browse Bill of Materials in complete structure that include child and phantom BoMs
The manufacturing module allows you to cover planning, ordering, stocks and the manufacturing or assembly of products from raw materials and components. It handles the consumption and production of products according to a bill of materials and the necessary operations on machinery, tools or human resources according to routings.
It supports complete integration and planification of stockable goods,
consumable of services. Services are completely integrated with the rest
of the software. For instance, you can set up a sub-contracting service
in a BoM to automatically purchase on order the assembly of your production.
It supports complete integration and planification of stockable goods, consumables or services. Services are completely integrated with the rest of the software. For instance, you can set up a sub-contracting service in a bill of materials to automatically purchase on order the assembly of your production.
Reports provided by this module:
--------------------------------
* Bill of Material structure and components
* Load forecast on Work Centers
* Print a production order
* Stock forecasts
* Cost Structure
Key Features
------------
* Make to Stock/Make to Order
* Multi-level bill of materials, no limit
* Multi-level routing, no limit
* Routing and work center integrated with analytic accounting
* Periodical scheduler computation
* Allows to browse bills of materials in a complete structure that includes child and phantom bills of materials
Dashboard provided by this module:
----------------------------------
* List of procurements in exception
* List of next production orders
* Graph of stock value variation
Dashboard / Reports for MRP will include:
-----------------------------------------
* Procurements in Exception (Graph)
* Stock Value Variation (Graph)
* Work Order Analysis
""",
'data': [
'security/mrp_security.xml',

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:49+0000\n"
"PO-Revision-Date: 2011-12-06 10:16+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2012-09-14 07:17+0000\n"
"Last-Translator: Chertykov Denis <chertykov@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: 2012-09-13 04:39+0000\n"
"X-Launchpad-Export-Date: 2012-09-15 04:55+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. module: mrp
@ -308,7 +308,7 @@ msgstr "Позиция на сборочном чертеже или схеме"
#. module: mrp
#: constraint:stock.move:0
msgid "You try to assign a lot which is not from the same product"
msgstr "Вы пытаетесь назначить экземпляр продукции другого типа"
msgstr "Вы пытаетесь назначить партию состоящую из другой продукции"
#. module: mrp
#: model:product.template,name:mrp.product_cloth_product_template

View File

@ -951,7 +951,7 @@
</data>
</field>
</record>
<record id="product_normal_form_supply_view" model="ir.ui.view">
<record id="product.product_normal_form_supply_view" model="ir.ui.view">
<field name="name">product.normal.form.mrp.inherit</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>

View File

@ -28,11 +28,11 @@ class mrp_config_settings(osv.osv_memory):
_inherit = 'res.config.settings'
_columns = {
'module_stock_planning': fields.boolean('manage master production shedule',
'module_stock_planning': fields.boolean('Manage master production shedule',
help ="""This allows to create a manual procurement plan apart of the normal MRP scheduling,
which works automatically based on minimum stock rules.
This installs the module stock_planning."""),
'module_mrp_repair': fields.boolean("manage repairs of products ",
'module_mrp_repair': fields.boolean("Manage repairs of products ",
help="""Allows to manage all product repairs.
* Add/remove products in the reparation
* Impact for stocks
@ -41,34 +41,34 @@ class mrp_config_settings(osv.osv_memory):
* Repair quotation report
* Notes for the technician and for the final customer.
This installs the module mrp_repair."""),
'module_mrp_operations': fields.boolean("allow detailed planning of work order",
'module_mrp_operations': fields.boolean("Allow detailed planning of work order",
help="""This allows to add state, date_start,date_stop in production order operation lines (in the "Work Centers" tab).
This installs the module mrp_operations."""),
'module_mrp_subproduct': fields.boolean("produce several products from one manufacturing order",
'module_mrp_subproduct': fields.boolean("Produce several products from one manufacturing order",
help="""You can configure sub-products in the bill of material.
Without this module: A + B + C -> D.
With this module: A + B + C -> D + E.
This installs the module mrp_subproduct."""),
'module_mrp_jit': fields.boolean("generate procurement in real time",
'module_mrp_jit': fields.boolean("Generate procurement in real time",
help="""This allows Just In Time computation of procurement orders.
All procurement orders will be processed immediately, which could in some
cases entail a small performance impact.
This installs the module mrp_jit."""),
'module_stock_no_autopicking': fields.boolean("manage manual picking to fulfill manufacturing orders ",
'module_stock_no_autopicking': fields.boolean("Manage manual picking to fulfill manufacturing orders ",
help="""This module allows an intermediate picking process to provide raw materials to production orders.
For example to manage production made by your suppliers (sub-contracting).
To achieve this, set the assembled product which is sub-contracted to "No Auto-Picking"
and put the location of the supplier in the routing of the assembly operation.
This installs the module stock_no_autopicking."""),
'group_mrp_routings': fields.boolean("manage routings and work orders ",
'group_mrp_routings': fields.boolean("Manage routings and work orders ",
implied_group='mrp.group_mrp_routings',
help="""Routings allow you to create and manage the manufacturing operations that should be followed
within your work centers in order to produce a product. They are attached to bills of materials
that will define the required raw materials."""),
'group_mrp_properties': fields.boolean("allow several bill of materials per products using properties",
'group_mrp_properties': fields.boolean("Allow several bill of materials per products using properties",
implied_group='product.group_mrp_properties',
help="""The selection of the right Bill of Material to use will depend on the properties specified on the sale order and the Bill of Material."""),
'module_product_manufacturer': fields.boolean("define manufacturers on products ",
'module_product_manufacturer': fields.boolean("Define manufacturers on products ",
help="""This allows you to define the following for a product:
* Manufacturer
* Manufacturer Product Name

View File

@ -7,13 +7,9 @@
<field name="tag">reload</field>
<field name="params" eval="{'menu_id': ref('base.menu_mrp_root')}"/>
</record>
<record id="todo_open_mrp_menu" model="ir.actions.todo">
<record id="base.open_menu" model="ir.actions.todo">
<field name="action_id" ref="action_client_mrp_menu"/>
<field name="type">automatic</field>
<field name="sequence">100</field>
</record>
<record id="purchase.todo_open_purchase_menu" model="ir.actions.todo">
<field name="state">done</field>
<field name="state">open</field>
</record>
</data>
<data>

View File

@ -20,31 +20,31 @@
##############################################################################
{
'name': 'Notes',
'version': '0.1',
'name': 'Memos',
'version': '1.0',
'category': 'Tools',
'description': """
This module allows users to create their own notes inside OpenERP
=================================================================
Use notes to write meeting minutes, organize ideas, organize personnal todo
lists, etc. Each user manages his own personnal notes. Notes are available to
lists, etc. Each user manages his own personnal memos. Notes are available to
their authors only, but they can share notes to others users so that several
people can work on the same note in real time. It's very efficient to share
meeting minutes.
Notes can be found in the 'Home' menu.
Memos can be found in the 'Home' menu.
""",
'author': 'OpenERP SA',
'website': 'http://openerp.com',
'summary': 'Sticky Notes, Collaborative',
'summary': 'Sticky notes, Collaborative, Memos',
'depends': [
'base_tools',
'mail',
'pad',
],
'data': [
'security/note_security.xml',
'security/res.groups.csv',
'security/ir.rule.xml',
'security/ir.model.access.csv',
'note_data.xml',
'note_view.xml',
@ -52,6 +52,8 @@ Notes can be found in the 'Home' menu.
'demo': [
'note_demo.xml',
],
'test': [
],
'css': [
'static/src/css/note.css',
],

View File

@ -21,16 +21,17 @@
from openerp.osv import osv, fields
from tools.translate import _
import re
class note_stage(osv.osv):
""" Category of Note """
_name = "note.stage"
_description = "Note Stage"
_columns = {
'name': fields.char('Category Name', size=64, required=True),
'name': fields.char('Stage Name', required=True),
'sequence': fields.integer('Sequence', help="Used to order the note stages"),
'user_id': fields.many2one('res.users', 'Owner', help="Owner of the note stage.", required=True, readonly=True),
'fold': fields.boolean('Folded'),
'user_id': fields.many2one('res.users', 'Owner', help="Owner of the note stage.", required=True),
'fold': fields.boolean('Folded by Default'),
}
_order = 'sequence asc'
_defaults = {
@ -39,59 +40,150 @@ class note_stage(osv.osv):
'sequence' : 1,
}
class note_tag(osv.osv):
_name = "note.tag"
_description = "Note Tag"
_columns = {
'name' : fields.char('Tag Name', required=True),
}
class note_note(osv.osv):
""" Note """
_name = 'note.note'
_inherit = ['mail.thread','pad.common']
_pad_fields = ['note_pad']
_inherit = ['mail.thread']
_description = "Note"
def _set_note_first_line(self, cr, uid, id, name, value, args, context=None):
return self.write(cr, uid, [id], {'note': value}, context=context)
#writing method (no modification of values)
def name_create(self, cr, uid, name, context=None):
rec_id = self.create(cr, uid, {'memo': name}, context=context)
return self.name_get(cr, uid, [rec_id], context)[0]
def _get_note_first_line(self, cr, uid, ids, name, args, context=None):
#read the first line (convert hml into text)
def _get_note_first_line(self, cr, uid, ids, name="", args={}, context=None):
res = {}
for note in self.browse(cr, uid, ids, context=context):
res[note.id] = (note.note or '').strip().split('\n')[0]
text_note = (note.memo or '').strip().split('\n')[0]
text_note = re.sub(r'(\S?)(<br[ /]*>|<[/]?p>|<[/]?div>|<table>)[\s\S]*',r'\1',text_note)
text_note = re.sub(r'<[^>]+>','',text_note)
res[note.id] = text_note
return res
#unactivate a sticky note and record the date
def onclick_note_is_done(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, { 'active' : False, 'date_done' : fields.date.today() })
self.message_post(cr, uid, ids[0], body='Note is done.', subject=False,
type='notification', parent_id=False, attachments=None, context=context)
return False
#activate a note
def onclick_note_not_done(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'active' : True})
self.message_post(cr, uid, ids[0], body='Note has been activated.', subject=False,
type='notification', parent_id=False, attachments=None, context=context)
return False
#used for undisplay the follower if it's the current user
def _get_my_current_partner(self, cr, uid, ids, name, args, context=None):
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
pid = user.partner_id and user.partner_id.id or False
return dict.fromkeys(ids, pid)
#return the default stage for the uid user
def _get_default_stage_id(self,cr,uid,context=None):
ids = self.pool.get('note.stage').search(cr,uid,[('user_id','=',uid)])
ids = self.pool.get('note.stage').search(cr,uid,[('user_id','=',uid)], context=context)
return ids and ids[0] or False
def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
access_rights_uid = access_rights_uid or uid
stage_obj = self.pool.get('note.stage')
def _set_stage_per_user(self, cr, uid, id, name, value, args=None, context=None):
note = self.browse(cr, uid, id, context=context)
if not value: return False
return self.write(cr, uid, [id], {'stage_ids': [(4, value)]}, context=context)
# only show stage groups not folded and owned by user
search_domain = [('user_id', '=', uid)]
def _get_stage_per_user(self, cr, uid, ids, name, args, context=None):
result = dict.fromkeys(ids, False)
for record in self.browse(cr, uid, ids, context=context):
for stage in record.stage_ids:
if stage.user_id.id == uid:
result[record.id] = stage.id
return result
stage_ids = stage_obj._search(cr, uid, search_domain, order=self._order, access_rights_uid=access_rights_uid, context=context)
result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
fold = {}
for stage in stage_obj.browse(cr, access_rights_uid, stage_ids, context=context):
fold[stage.id] = stage.fold or False
return result, fold
_columns = {
'name': fields.function(_get_note_first_line, fnct_inv=_set_note_first_line, string='Note Summary', type="text"),
'note': fields.text('Pad Content'),
'note_pad_url': fields.char('Pad Url', size=250),
'name': fields.function(_get_note_first_line,
string='Note Summary',
type='text', store=True),
'memo': fields.html('Note Content'),
'sequence': fields.integer('Sequence'),
'stage_id': fields.many2one('note.stage', 'Stage'),
'stage_id': fields.function(_get_stage_per_user,
fnct_inv=_set_stage_per_user,
string='Stage',
type='many2one',
relation='note.stage'),
'stage_ids': fields.many2many('note.stage','note_stage_rel','note_id','stage_id','Stages of Users'),
'active': fields.boolean('Active'),
'date_done': fields.date('Date done'),
'color': fields.integer('Color Index'),
# to be replaced by message_follower_ids
'follower_ids': fields.many2many('res.users', 'mail_subscription', 'res_id', 'user_id', 'Followers')
'tag_ids' : fields.many2many('note.tag','note_tags_rel','note_id','tag_id','Tags'),
'current_partner_id' : fields.function(_get_my_current_partner),
}
_defaults = {
'active' : 1,
'stage_id' : _get_default_stage_id,
'note_pad_url': lambda self, cr, uid, context: self.pad_generate_url(cr, uid, context),
}
_order = 'sequence asc'
_group_by_full = {
'stage_id' : _read_group_stage_ids,
_order = 'sequence'
def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False):
if groupby and groupby[0]=="stage_id":
#search all stages
current_stage_ids = self.pool.get('note.stage').search(cr,uid,[('user_id','=',uid)], context=context)
if current_stage_ids: #if the user have some stages
#dict of stages: map les ids sur les noms
stage_name = dict(self.pool.get('note.stage').name_get(cr, uid, current_stage_ids, context=context))
result = [{ #notes by stage for stages user
'__context': {'group_by': groupby[1:]},
'__domain': domain + [('stage_ids.id', '=', current_stage_id)],
'stage_id': (current_stage_id, stage_name[current_stage_id]),
'stage_id_count': self.search(cr,uid, domain+[('stage_ids', '=', current_stage_id)], context=context, count=True)
} for current_stage_id in current_stage_ids]
#note without user's stage
nb_notes_ws = self.search(cr,uid, domain+[('stage_ids', 'not in', current_stage_ids)], context=context, count=True)
if nb_notes_ws:
result += [{ #notes for unknown stage and if stage_ids is not empty
'__context': {'group_by': groupby[1:]},
'__domain': domain + [('stage_ids', 'not in', current_stage_ids)],
'stage_id': (0, 'Unknown'),
'stage_id_count':nb_notes_ws
}]
else: # if stage_ids is empty
#note without user's stage
nb_notes_ws = self.search(cr,uid, domain, context=context, count=True)
if nb_notes_ws:
result = [{ #notes for unknown stage
'__context': {'group_by': groupby[1:]},
'__domain': domain,
'stage_id': (0, 'Unknown'),
'stage_id_count':nb_notes_ws
}]
else:
result = []
return result
else:
return super(note_note, self).read_group(self, cr, uid, domain, fields, groupby,
offset=offset, limit=limit, context=context, orderby=orderby)
#upgrade config setting page to configure pad, fancy and tags mode
class note_base_config_settings(osv.osv_memory):
_inherit = 'base.config.settings'
_columns = {
'module_note_pad': fields.boolean('Use collaborative pads (etherpad)'),
'group_note_fancy': fields.boolean('Use fancy layouts for notes', implied_group='note.group_note_fancy'),
'group_note_tags': fields.boolean('Allow setting tags on notes', implied_group='note.group_note_tags'),
}

View File

@ -3,19 +3,19 @@
<data>
<record model="note.stage" id="note_stage_01">
<field name="name">Todo today</field>
<field name="name">Today</field>
<field name="sequence">1</field>
<field name="user_id" eval="ref('base.user_root')"/>
</record>
<record model="note.stage" id="note_stage_02">
<field name="name">Todo later</field>
<field name="name">Later</field>
<field name="sequence">2</field>
<field name="user_id" eval="ref('base.user_root')"/>
</record>
<record model="note.stage" id="note_stage_03">
<field name="name">For Info</field>
<field name="name">Notes</field>
<field name="sequence">3</field>
<field name="user_id" eval="ref('base.user_root')"/>
</record>

View File

@ -1,151 +1,150 @@
<?xml version="1.0"?>
<openerp>
<data>
<data noupdate="1">
<record model="note.stage" id="demo_note_stage_01">
<field name="name">Today</field>
<field name="sequence">1</field>
<field name="user_id" eval="ref('base.user_demo')"/>
</record>
<record model="note.stage" id="demo_note_stage_02">
<field name="name">Tomorrow</field>
<field name="sequence">2</field>
<field name="user_id" eval="ref('base.user_demo')"/>
</record>
<record model="note.stage" id="demo_note_stage_03">
<field name="name">Later</field>
<field name="sequence">3</field>
<field name="user_id" eval="ref('base.user_demo')"/>
</record>
<record model="note.stage" id="demo_note_stage_04">
<field name="name">Notes</field>
<field name="sequence">4</field>
<field name="user_id" eval="ref('base.user_demo')"/>
</record>
<record id="note_1" model="note.note">
<field name="note"><![CDATA[Buying list
* coffee
* fruits
* ice cream
* towels
]]>
<field name="name">Customer report #349872</field>
<field name="memo"><![CDATA[Customer report #349872
<br/><br/>* Calendar app in Home
<br/>* The base_calendar module should create a menu in Home, like described above.
<br/>* This module should become a main application (in the first screen at installation)
<br/>* We should use the term Calendar, not Meeting.
]]>
</field>
<field name="note_pad"></field>
<field name="stage_id" ref="note_stage_01"/>
<field name="user_id" ref="base.user_root"/>
<field name="color">2</field>
</record>
<record id="note_2" model="note.note">
<field name="note"><![CDATA[Buying list
* more coffee
* tee
* sugar
* towels
<field name="memo"><![CDATA[Call Fabien
<br/><br/>* Followed by the telephone conversation and mail about D.544.3
]]>
</field>
<field name="note_pad"></field>
<field name="stage_id" ref="note_stage_01"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="note_3" model="note.note">
<field name="note"><![CDATA[Idea to develop
* Phasellus vel eros lorem, vel tristique risus.
* Cras elementum risus ut massa bibendum ac sollicitudin quam feugiat.
* Phasellus ullamcorper mauris quis lectus volutpat non dignissim elit lacinia.
Nulla vitae metus risus, nec placerat diam.
Proin quis nunc sodales dolor tempus eleifend.
Praesent iaculis libero ut orci egestas a dapibus libero ornare.
* Proin at nisl sit amet ante feugiat euismod nec at orci.
* Nam aliquam massa id neque tincidunt eu pellentesque neque euismod.
* Proin eget mi sit amet erat tempus pellentesque.
* Phasellus congue est lectus, vitae semper arcu.
* Suspendisse sodales tortor ut odio volutpat fringilla.
* Vestibulum mattis est quis risus dignissim sit amet faucibus nisl mattis.
* Pellentesque ullamcorper neque neque, vitae rhoncus massa.
Ut id magna massa, quis scelerisque sapien.
]]>
<field name="memo"><![CDATA[Call Marc
<br/><br/>]]>
</field>
<field name="note_pad"></field>
<field name="stage_id" ref="note_stage_01"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="note_4" model="note.note">
<field name="note"><![CDATA[Read some documentation about OpenERP before diving into the code
* Open ERP: a modern approach to integrated business management
* Open ERP for Retail and Industrial Management
]]>
<field name="memo"><![CDATA[Project N.947.5
<br/><br/>]]>
</field>
<field name="note_pad"></field>
<field name="stage_id" ref="note_stage_02"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="note_5" model="note.note">
<field name="note"><![CDATA[New computer specs
* Motherboard
according to processor
* Processor
need to decide
* Graphic card
with great performance for games !
* Hard drive
big, for lot of internet backups
* Tower
silent, better when watching films
* Blueray drive ?
is it interesting yet ?
* Screen
a big one, full of pixels, of course !
]]>
<field name="memo"><![CDATA[Shop for family dinner
<br/>* stuffed turkey
<br/>* wine
]]>
</field>
<field name="note_pad"></field>
<field name="stage_id" ref="note_stage_02"/>
<field name="user_id" ref="base.user_root"/>
<field name="color">3</field>
</record>
<record id="note_6" model="note.note">
<field name="note"><![CDATA[Read those books
* Open ERP: a modern approach to integrated business management
* Open ERP for Retail and Industrial Management
]]>
<field name="memo"><![CDATA[Idea to develop
<br/><br/>* Create a module note_pad
it transforms the html editable memo text field into widget='pad', similar to project_pad depends on 'memo' and 'pad' modules
]]>
</field>
<field name="note_pad"></field>
<field name="stage_id" ref="note_stage_02"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="note_7" model="note.note">
<field name="note"><![CDATA[Read some documentation about OpenERP before diving into the code
* Open ERP: a modern approach to integrated business management
* Open ERP for Retail and Industrial Management
<field name="memo"><![CDATA[Read some documentation about OpenERP before diving into the code
<br/><br/>* Open ERP: a modern approach to integrated business management
<br/>* Open ERP for Retail and Industrial Management
]]>
</field>
<field name="note_pad"></field>
<field name="stage_id" ref="note_stage_03"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="note_8" model="note.note">
<field name="note"><![CDATA[Read those books
* Open ERP: a modern approach to integrated business management
* Open ERP for Retail and Industrial Management
<field name="memo"><![CDATA[New computer specs
<br/><br/>* Motherboard
according to processor
<br/>* Processor
need to decide
<br/>* Graphic card
with great performance for games !
<br/>* Hard drive
big, for lot of internet backups
<br/>* Tower
silent, better when watching films
<br/>* Blueray drive ?
is it interesting yet ?
<br/>* Screen
a big one, full of pixels, of course !
]]>
</field>
<field name="note_pad"></field>
<field name="stage_id" ref="note_stage_03"/>
<field name="user_id" ref="base.user_root"/>
<field name="color">5</field>
<field name="color">3</field>
</record>
<record id="note_9" model="note.note">
<field name="note"><![CDATA[Read some documentation about OpenERP before diving into the code
* Open ERP: a modern approach to integrated business management
* Open ERP for Retail and Industrial Management
<field name="memo"><![CDATA[Read those books
<br/><br/>* Open ERP: a modern approach to integrated business management
<br/>* Open ERP for Retail and Industrial Management
]]>
</field>
<field name="note_pad"></field>
<field name="stage_id" ref="note_stage_03"/>
<field name="user_id" ref="base.user_root"/>
<field name="color">7</field>
<field name="stage_id" ref="note_stage_02"/>
</record>
<record id="note_10" model="note.note">
<field name="note"><![CDATA[Read those books
* Open ERP: a modern approach to integrated business management
* Open ERP for Retail and Industrial Management
<field name="memo"><![CDATA[Read some documentation about OpenERP before diving into the code
<br/><br/>* Open ERP: a modern approach to integrated business management
<br/>* Open ERP for Retail and Industrial Management
]]>
</field>
<field name="stage_id" ref="note_stage_03"/>
</record>
<record id="note_12" model="note.note">
<field name="memo"><![CDATA[Read some documentation about OpenERP before diving into the code
<br/><br/>* Open ERP: a modern approach to integrated business management
<br/>* Open ERP for Retail and Industrial Management
]]>
</field>
<field name="stage_id" ref="note_stage_03"/>
<field name="color">7</field>
</record>
<record id="note_13" model="note.note">
<field name="memo"><![CDATA[Read those books
<br/><br/>* Open ERP: a modern approach to integrated business management
<br/>* Open ERP for Retail and Industrial Management
]]>
</field>
<field name="note_pad"></field>
<field name="stage_id" ref="note_stage_03"/>
<field name="user_id" ref="base.user_root"/>
</record>
</data>

View File

@ -4,7 +4,7 @@
<menuitem name="Organizer" id="note_my_stuff" parent="mail.mail_feeds_main"/>
<!-- Note Stage Form View -->
<!-- note Stage Form View -->
<record model="ir.ui.view" id="view_note_stage_form">
<field name="name">note.stage.form</field>
<field name="model">note.stage</field>
@ -17,117 +17,175 @@
</field>
</record>
<!-- Note Stage Tree View -->
<!-- note Stage Tree View -->
<record model="ir.ui.view" id="view_note_stage_tree">
<field name="name">note.stage.tree</field>
<field name="model">note.stage</field>
<field name="field_parent"></field>
<field name="arch" type="xml">
<tree string="Stages of notes" editable="bottom">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="fold"/>
<tree string="Stages of Notes" editable="bottom">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="fold"/>
</tree>
</field>
</record>
<!-- Note Stage Action -->
<!-- note Stage Action -->
<record model="ir.actions.act_window" id="action_note_stage">
<field name="name">Stages</field>
<field name="res_model">note.stage</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('user_id','=',uid)]</field>
<field name="name">Stages</field>
<field name="res_model">note.stage</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('user_id','=',uid)]</field>
</record>
<menuitem name="Categories"
id="menu_notes_stage" parent="note_my_stuff" action="action_note_stage" sequence="40" groups="base.group_no_one"/>
<menuitem name="Categories" id="menu_notes_stage" parent="note_my_stuff" action="action_note_stage" sequence="40" groups="base.group_no_one"/>
<!-- New Note Kanban View -->
<!-- New note Kanban View -->
<record model="ir.ui.view" id="view_note_note_kanban">
<field name="name">note.note.kanban</field>
<field name="model">note.note</field>
<field name="arch" type="xml">
<kanban default_group_by="stage_id" class="oe_notes" version="7.0">
<kanban default_group_by="stage_id" class="oe_notes oe_kanban_quickcreate_textarea" version="7.0">
<field name="color"/>
<field name="sequence"/>
<field name="name"/>
<field name="stage_id"/>
<field name="active"/>
<field name="note"/>
<field name="follower_ids"/>
<field name="memo"/>
<field name="date_done"/>
<field name="current_partner_id"/>
<field name="message_follower_ids"/>
<field name="tag_ids"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click oe_semantic_html_override">
<!-- dropdown menu -->
<div class="oe_dropdown_toggle oe_dropdown_kanban">
<span class="oe_e">í</span>
<ul class="oe_dropdown_menu">
<li><a type="edit">Edit...</a></li>
<li><a type="delete">Delete</a></li>
<li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
</ul>
<t t-set="record.group_fancy" t-value="1" groups="note.group_note_fancy"/>
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_global_click_edit oe_semantic_html_override oe_kanban_card #{record.group_fancy==1 ? 'oe_kanban_card_fancy' : ''}">
<div class="oe_dropdown_kanban">
<span>
<a name="onclick_note_is_done" type="object" t-if="record.active.raw_value" class="oe_e">W</a>
<a name="onclick_note_not_done" type="object" t-if="!record.active.raw_value" class="oe_e">è</a>
</span>
<!-- dropdown menu -->
<div class="oe_dropdown_toggle">
<span class="oe_e">í</span>
<ul class="oe_dropdown_menu">
<li><a type="delete">Delete</a></li>
<li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
</ul>
</div>
</div>
<!-- kanban note -->
<div class="oe_kanban_content">
<div t-attf-class="oe_kanban_content #{record.active.raw_value ? '' : 'note_text_line_through'}">
<!-- title -->
<field name="name"/>
</div>
<div class="oe_kanban_project_avatars">
<t t-foreach="record.follower_ids.raw_value" t-as="follower">
<img t-att-src="kanban_image('res.users', 'image_small', follower)" t-att-data-member_id="follower"/>
<div widget="many2many_tags" t-att-data="record.tag_ids.raw_value" model="note.tag"/>
<div class="oe_right">
<t t-foreach="record.message_follower_ids.raw_value" t-as="follower">
<img t-if="record.current_partner_id.raw_value!=follower" t-att-src="kanban_image('res.partner', 'image_small', follower)" width="24" height="24" class="oe_kanban_avatar" t-att-data-member_id="follower"/>
</t>
</div>
<div class="oe_clear"></div>
</div>
<div class="oe_clear"></div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- New Note Form View -->
<!-- New note Form View -->
<record model="ir.ui.view" id="view_note_note_tree">
<field name="name">note.note.tree</field>
<field name="model">note.note</field>
<field name="arch" type="xml">
<tree string="Stages">
<field name="name"/>
<field name="active"/>
<field name="stage_id"/>
<field name="tag_ids" widget="many2many_tags" groups="note.group_note_tags"/>
</tree>
</field>
</record>
<!-- New note Form View -->
<record model="ir.ui.view" id="view_note_note_form">
<field name="name">note.note.form</field>
<field name="model">note.note</field>
<field name="arch" type="xml">
<form string="Note" version="7.0">
<header>
<field name="stage_id" domain="[('user_id','=',uid)]" widget="statusbar" clickable="1"/>
<field name="stage_id" domain="[('user_id','=',uid)]" widget="statusbar" clickable="1"/>
</header>
<field name="note"/>
<field name="note_pad_url" invisible="1"/>
<div class="oe_chatter">
<field name="message_ids" widget="mail_thread"/>
</div>
<field name="memo" widget="html"/><!-- editor_width="100%%" editor_height="60%%" -->
<group groups="note.group_note_tags" col="2">
<field name="tag_ids" widget="many2many_tags"/>
</group>
<field name="message_follower_ids" widget="mail_followers"/>
<field class="oe_chatter" name="message_ids" widget="mail_thread"/>
</form>
</field>
</record>
<!-- Search Note -->
<!-- Search note -->
<record model="ir.ui.view" id="view_note_note_filter">
<field name="name">note.note.search</field>
<field name="model">note.note</field>
<field name="arch" type="xml">
<search string="Notes">
<field name="note" string="Note"/>
<field name="memo" string="Note"/>
<field name="tag_ids" groups="note.group_note_tags"/>
<field name="stage_id"/>
<filter name="active_true" string="Active" domain="['|',('active', '=', True),('date_done','=',time.strftime('%%Y-%%m-%%d'))]"/>
<filter name="active_false" string="Old" domain="[('active', '=', False)]"/>
<group expand="0" string="Group By...">
<filter icon="terp-personal" string="Creator" help="By Creators" context="{'group_by':'create_uid'}"/>
<filter icon="terp-stock_symbol-selection" string="Stage" help="By Note Category" context="{'group_by':'stage_id'}"/>
<filter icon="terp-stock_symbol-selection" string="Stage" help="By sticky note Category" context="{'group_by':'stage_id'}"/>
</group>
</search>
</field>
</record>
<!-- Note Action -->
<!-- general settings -->
<record model="ir.ui.view" id="view_general_settings_note_form">
<field name="name">note.view.general_settings.form</field>
<field name="model">base.config.settings</field>
<field name="inherit_id" ref="base_setup.view_general_configuration"/>
<field name="arch" type="xml">
<xpath expr="//label[@string='Authentication']/.." position="after">
<group>
<label for="id" string="Notes"/>
<div name="note">
<div>
<field name="module_note_pad" class="oe_inline"/>
<label for="module_note_pad"/>
</div>
<div>
<field name="group_note_fancy" class="oe_inline"/>
<label for="group_note_fancy"/>
</div>
<div>
<field name="group_note_tags" class="oe_inline"/>
<label for="group_note_tags"/>
</div>
</div>
</group>
</xpath>
</field>
</record>
<!-- Action -->
<record model="ir.actions.act_window" id="action_note_note">
<field name="name">Notes</field>
<field name="res_model">note.note</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
<field name="search_view_id" ref="view_note_note_filter"/>
<field name="context">{'search_default_active_true':True}</field>
</record>
<menuitem name="Notes" id="note_notes" parent="note_my_stuff" sequence="20" action="action_note_note"/>

View File

@ -1,3 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_note_stage_user,note.stage user,model_note_stage,base.group_user,1,1,1,1
access_note_note_user,note.note user,model_note_note,base.group_user,1,1,1,1
access_note_stage,note.stage,model_note_stage,base.group_user,1,1,1,1
access_note_note,note.note,model_note_note,base.group_user,1,1,1,1
access_note_tag,note.tag,model_note_tag,base.group_user,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_note_stage_user access_note_stage note.stage user note.stage model_note_stage base.group_user 1 1 1 1
3 access_note_note_user access_note_note note.note user note.note model_note_note base.group_user 1 1 1 1
4 access_note_tag note.tag model_note_tag base.group_user 1 1 1 1

View File

@ -0,0 +1,12 @@
<?xml version="1.0"?>
<openerp>
<data>
<record id="note_note_rule_global" model="ir.rule">
<field name="name">Only followers can access a sticky notes</field>
<field model="ir.model" ref="model_note_note" name="model_id"/>
<field name="domain_force">['|',('message_follower_ids','=',False),('message_follower_ids','=',user.partner_id.id)]</field>
<field eval="True" name="global"/>
</record>
</data>
</openerp>

View File

@ -1,12 +0,0 @@
<?xml version="1.0"?>
<openerp>
<data>
<record id="note_note_global" model="ir.rule">
<field name="name">My notes</field>
<field ref="model_note_note" name="model_id"/>
<field eval="1" name="global"/>
<field name="domain_force">[('follower_ids','=',user.id)]</field>
</record>
</data>
</openerp>

View File

@ -0,0 +1,3 @@
id,name,implied_ids/id
group_note_tags,Memo / Display tags,
group_note_fancy,Memo / Fancy mode,
1 id name implied_ids/id
2 group_note_tags Memo / Display tags
3 group_note_fancy Memo / Fancy mode

View File

@ -1,3 +1,3 @@
note.css: note.sass
sass -t expanded note.sass note.css
memo.css: memo.sass
sass -t expanded memo.sass memo.css

View File

@ -1,78 +1,143 @@
.openerp .oe_notes .oe_fold_column .oe_kanban_card {
text-decoration:none;
color:#000;
display:block;
padding:1em;
margin-right: 1em;
margin-bottom: 1em;
-moz-box-shadow:5px 5px 7px rgba(33,33,33,1);
-webkit-box-shadow: 5px 5px 7px rgba(33,33,33,.7);
box-shadow: 5px 5px 7px rgba(33,33,33,.7);
@charset "utf-8";
@font-face {
font-family: "mnmliconsRegular";
src: url("/web/static/src/font/mnmliconsv21-webfont.eot") format("eot");
src: url("/web/static/src/font/mnmliconsv21-webfont.woff") format("woff");
src: url("/web/static/src/font/mnmliconsv21-webfont.ttf") format("truetype");
src: url("/web/static/src/font/mnmliconsv21-webfont.svg") format("svg") active;
font-weight: normal;
font-style: normal;
}
.openerp .oe_notes .oe_kanban_record .oe_kanban_card {
-webkit-transform: rotate(-2deg);
-o-transform: rotate(-2deg);
-moz-transform:rotate(-2deg);
@font-face {
font-family: "EntypoRegular";
src: url("/web/static/src/font/entypo-webfont.eot") format("eot");
src: url("/web/static/src/font/entypo-webfont.eot?#iefix") format("embedded-opentype");
src: url("/web/static/src/font/entypo-webfont.woff") format("woff");
src: url("/web/static/src/font/entypo-webfont.ttf") format("truetype");
src: url("/web/static/src/font/entypo-webfont.svg") format("svg") active;
font-weight: normal;
font-style: normal;
}
.openerp .oe_notes .oe_kanban_record:nth-of-type(even) .oe_kanban_card {
-webkit-transform: rotate(1deg);
-o-transform: rotate(1deg);
-moz-transform:rotate(1deg);
@-moz-keyframes bounce {
0% {
-moz-transform: scale(0);
opacity: 0;
}
50% {
-moz-transform: scale(1.3);
opacity: 0.4;
}
75% {
-moz-transform: scale(0.9);
opacity: 0.7;
}
100% {
-moz-transform: scale(1);
opacity: 1;
}
}
.openerp .oe_notes .oe_kanban_record:nth-of-type(3n) .oe_kanban_card {
-webkit-transform: rotate(4deg);
-o-transform: rotate(4deg);
-moz-transform:rotate(4deg);
@-webkit-keyframes bounce {
0% {
-webkit-transform: scale(0);
opacity: 0;
}
50% {
-webkit-transform: scale(1.3);
opacity: 0.4;
}
75% {
-webkit-transform: scale(0.9);
opacity: 0.7;
}
100% {
-webkit-transform: scale(1);
opacity: 1;
}
}
.openerp .oe_notes .oe_kanban_column:nth-of-type(even) .oe_kanban_record .oe_kanban_card {
-webkit-transform: rotate(2deg);
-o-transform: rotate(2deg);
-moz-transform:rotate(2deg);
.oe_kanban_color_2 {
background-color: red;
}
.openerp .oe_notes .oe_kanban_column:nth-of-type(even) .oe_kanban_record:nth-of-type(even) .oe_kanban_card {
-webkit-transform: rotate(-3deg);
-o-transform: rotate(-3deg);
-moz-transform:rotate(-3deg);
.oe_kanban_column .note_text_line_through {
text-decoration: line-through;
}
.openerp .oe_notes .oe_kanban_column:nth-of-type(even) .oe_kanban_record:nth-of-type(3n) .oe_kanban_card {
-webkit-transform: rotate(1deg);
-o-transform: rotate(1deg);
-moz-transform:rotate(1deg);
.openerp .oe_fold_column .oe_kanban_card_fancy {
text-decoration: none;
color: black;
display: block;
padding: 1em;
margin-right: 1em;
margin-bottom: 1em;
-moz-box-shadow: 5px 5px 7px #212121;
-webkit-box-shadow: 5px 5px 7px rgba(33, 33, 33, 0.7);
box-shadow: 5px 5px 7px rgba(33, 33, 33, 0.7);
}
.openerp .oe_notes .oe_kanban_column:nth-of-type(3n) .oe_kanban_record .oe_kanban_card {
-webkit-transform: rotate(-2deg);
-o-transform: rotate(-2deg);
-moz-transform:rotate(-2deg);
.openerp .oe_kanban_record .oe_kanban_card_fancy {
-webkit-transform: rotate(-2deg);
-o-transform: rotate(-2deg);
-moz-transform: rotate(-2deg);
}
.openerp .oe_kanban_record:nth-of-type(even) .oe_kanban_card_fancy {
-webkit-transform: rotate(1deg);
-o-transform: rotate(1deg);
-moz-transform: rotate(1deg);
}
.openerp .oe_kanban_record:nth-of-type(3n) .oe_kanban_card_fancy {
-webkit-transform: rotate(4deg);
-o-transform: rotate(4deg);
-moz-transform: rotate(4deg);
}
.openerp .oe_kanban_column:nth-of-type(even) .oe_kanban_card_fancy {
-webkit-transform: rotate(2deg);
-o-transform: rotate(2deg);
-moz-transform: rotate(2deg);
}
.openerp .oe_kanban_column:nth-of-type(even) .oe_kanban_record:nth-of-type(even) .oe_kanban_card_fancy {
-webkit-transform: rotate(-3deg);
-o-transform: rotate(-3deg);
-moz-transform: rotate(-3deg);
}
.openerp .oe_kanban_column:nth-of-type(even) .oe_kanban_record:nth-of-type(3n) .oe_kanban_card_fancy {
-webkit-transform: rotate(1deg);
-o-transform: rotate(1deg);
-moz-transform: rotate(1deg);
}
.openerp .oe_kanban_column:nth-of-type(3n) .oe_kanban_card_fancy {
-webkit-transform: rotate(-2deg);
-o-transform: rotate(-2deg);
-moz-transform: rotate(-2deg);
}
.openerp .oe_kanban_column:nth-of-type(3n) .oe_kanban_record:nth-of-type(even) .oe_kanban_card_fancy {
-webkit-transform: rotate(1deg);
-o-transform: rotate(1deg);
-moz-transform: rotate(1deg);
}
.openerp .oe_kanban_column:nth-of-type(3n) .oe_kanban_record:nth-of-type(3n) .oe_kanban_card_fancy {
-webkit-transform: rotate(-1deg);
-o-transform: rotate(-1deg);
-moz-transform: rotate(-1deg);
}
.openerp .oe_notes .oe_kanban_column:nth-of-type(3n) .oe_kanban_record:nth-of-type(even) .oe_kanban_card {
-webkit-transform: rotate(1deg);
-o-transform: rotate(1deg);
-moz-transform:rotate(1deg);
}
.openerp .oe_notes .oe_kanban_column:nth-of-type(3n) .oe_kanban_record:nth-of-type(3n) .oe_kanban_card {
-webkit-transform: rotate(-1deg);
-o-transform: rotate(-1deg);
-moz-transform:rotate(-1deg);
}
.openerp .oe_notes .oe_kanban_column .oe_fold_column .oe_kanban_card:hover,
.openerp .oe_notes .oe_kanban_column .oe_fold_column .oe_kanban_card:focus {
box-shadow:10px 10px 7px rgba(0,0,0,.7);
-moz-box-shadow:10px 10px 7px rgba(0,0,0,.7);
-webkit-box-shadow: 10px 10px 7px rgba(0,0,0,.7);
-webkit-transform: rotate(0);
-moz-transform: rotate(0);
-o-transform: rotate(0);
position:relative;
z-index:5;
.openerp .oe_kanban_column .oe_fold_column .oe_kanban_card_fancy:hover,
.openerp .oe_kanban_column .oe_fold_column .oe_kanban_card_fancy:focus {
box-shadow: 10px 10px 7px rgba(0, 0, 0, 0.7);
-moz-box-shadow: 10px 10px 7px rgba(0, 0, 0, 0.7);
-webkit-box-shadow: 10px 10px 7px rgba(0, 0, 0, 0.7);
position: relative;
z-index: 5;
-webkit-transform: rotate(0);
-o-transform: rotate(0);
-moz-transform: rotate(0);
}

View File

@ -42,10 +42,10 @@ $sheet-max-width: 860px
background-color: $startColor
background-image: -webkit-gradient(linear, left top, left bottom, from($startColor), to($endColor)) /* Saf4+, Chrome */
background-image: -webkit-linear-gradient(top, $startColor, $endColor) /* Chrome 10+, Saf5.1+, iOS 5+ */
background-image: -moz-linear-gradient(top, $startColor, $endColor) /* FF3.6 */
background-image: -ms-linear-gradient(top, $startColor, $endColor) /* IE10 */
background-image: -o-linear-gradient(top, $startColor, $endColor) /* Opera 11.10+ */
background-image: linear-gradient(to bottom, $startColor, $endColor)
background-image: -moz-linear-gradient(top, $startColor, $endColor) /* FF3.6 */
background-image: -ms-linear-gradient(top, $startColor, $endColor) /* IE10 */
background-image: -o-linear-gradient(top, $startColor, $endColor) /* Opera 11.10+ */
background-image: linear-gradient(to bottom, $startColor, $endColor)
@mixin radial-gradient($gradient)
background-position: center center
@ -93,7 +93,7 @@ $sheet-max-width: 860px
font-size: 1px
letter-spacing: -1px
color: transparent
&:before
&: before
font: 21px "mnmliconsRegular"
content: $icon-name
color: $color
@ -131,7 +131,79 @@ $sheet-max-width: 860px
.oe_kanban_color_2
background-color:red
background-color: red
// au BufWritePost,FileWritePost *.sass :!sass --style expanded --line-numbers <afile> > "%:p:r.css"
// au BufWritePost,FileWritePost *.sass : !sass --style expanded --line-numbers <afile> > "%: p: r.css"
.oe_kanban_column
.note_text_line_through
text-decoration: line-through
.openerp
.oe_fold_column
.oe_kanban_card_fancy
text-decoration: none
color: #000
display: block
padding: 1em
margin-right: 1em
margin-bottom: 1em
-moz-box-shadow: 5px 5px 7px rgba(33,33,33,1)
-webkit-box-shadow: 5px 5px 7px rgba(33,33,33,.7)
box-shadow: 5px 5px 7px rgba(33,33,33,.7)
@mixin rotate($a)
-webkit-transform: rotate($a)
-o-transform: rotate($a)
-moz-transform: rotate($a)
.openerp
.oe_kanban_record
.oe_kanban_card_fancy
@include rotate(-2deg)
.oe_kanban_record:nth-of-type(even)
.oe_kanban_card_fancy
@include rotate(1deg)
.oe_kanban_record:nth-of-type(3n)
.oe_kanban_card_fancy
@include rotate(4deg)
.oe_kanban_column:nth-of-type(even)
.oe_kanban_card_fancy
@include rotate(2deg)
.oe_kanban_column:nth-of-type(even)
.oe_kanban_record:nth-of-type(even)
.oe_kanban_card_fancy
@include rotate(-3deg)
.oe_kanban_column:nth-of-type(even)
.oe_kanban_record:nth-of-type(3n)
.oe_kanban_card_fancy
@include rotate(1deg)
.oe_kanban_column:nth-of-type(3n)
.oe_kanban_card_fancy
@include rotate(-2deg)
.oe_kanban_column:nth-of-type(3n)
.oe_kanban_record:nth-of-type(even)
.oe_kanban_card_fancy
@include rotate(1deg)
.oe_kanban_column:nth-of-type(3n)
.oe_kanban_record:nth-of-type(3n)
.oe_kanban_card_fancy
@include rotate(-1deg)
@mixin oe_kanban_card_fancy
box-shadow: 10px 10px 7px rgba(0,0,0,.7)
-moz-box-shadow: 10px 10px 7px rgba(0,0,0,.7)
-webkit-box-shadow: 10px 10px 7px rgba(0,0,0,.7)
position: relative
z-index: 5
@include rotate(0)
.openerp
.oe_kanban_column
.oe_fold_column
.oe_kanban_card_fancy:hover,
.oe_kanban_card_fancy:focus
@include oe_kanban_card_fancy

View File

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import note_pad

View File

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Memos pad',
'version': '0.1',
'category': 'Tools',
'description': """
This module update memos inside OpenERP for using an external pad
===================================================================
Use for update your text memo in real time with the following user that you invite.
""",
'author': 'OpenERP SA',
'website': 'http://openerp.com',
'summary': 'Sticky memos, Collaborative',
'depends': [
'base_tools',
'mail',
'pad',
'note',
],
'data': [
'note_pad_view.xml',
],
'installable': True,
'application': False,
'auto_install': False,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

Some files were not shown because too many files have changed in this diff Show More