summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonin Bourguignon <abo@openerp.com>2012-07-31 15:35:08 +0200
committerAntonin Bourguignon <abo@openerp.com>2012-07-31 15:35:08 +0200
commit2e0ab8a6a178e8fd90e047b67af7e63a1743a2ff (patch)
tree47bc85f52500fa25c45dbcb781416988a6b80c25
parent163a8b629ed417743e632543eb21e6772389a461 (diff)
parentf76a672ba467a6a51727b5a36618a0db07945cf2 (diff)
[MERGE] trunk-portal_public_layout-abo (improve portal views, access rights and ir rules)
bzr revid: abo@openerp.com-20120731133508-n2xr4jf1jm4j51ep
-rw-r--r--addons/account/account_cash_statement.py4
-rw-r--r--addons/account/i18n/es_EC.po2
-rw-r--r--addons/account_accountant/__openerp__.py2
-rw-r--r--addons/account_asset/account_asset_invoice_view.xml29
-rw-r--r--addons/account_asset/i18n/es_EC.po2
-rw-r--r--addons/account_voucher/__openerp__.py2
-rw-r--r--addons/account_voucher/voucher_payment_receipt_view.xml69
-rw-r--r--addons/association/profile_association.xml1
-rw-r--r--addons/crm/__openerp__.py2
-rw-r--r--addons/delivery/delivery_view.xml6
-rw-r--r--addons/event/__openerp__.py2
-rw-r--r--addons/event/event.py23
-rw-r--r--addons/event/event_view.xml47
-rw-r--r--addons/event/security/event_security.xml65
-rw-r--r--addons/hr/__openerp__.py2
-rw-r--r--addons/hr/hr_department_view.xml12
-rw-r--r--addons/hr/hr_view.xml32
-rw-r--r--addons/hr_evaluation/__openerp__.py2
-rw-r--r--addons/hr_holidays/__openerp__.py2
-rw-r--r--addons/hr_payroll/i18n/he.po1119
-rw-r--r--addons/hr_recruitment/__openerp__.py2
-rw-r--r--addons/hr_recruitment/hr_recruitment_view.xml110
-rw-r--r--addons/hr_timesheet_invoice/hr_timesheet_invoice.py19
-rw-r--r--addons/hr_timesheet_sheet/__openerp__.py4
-rw-r--r--addons/mail/__openerp__.py2
-rw-r--r--addons/mail/data/mail_demo.xml16
-rw-r--r--addons/mail/mail_thread_view.xml3
-rw-r--r--addons/marketing_campaign/marketing_campaign_view.xml60
-rw-r--r--addons/marketing_campaign/marketing_campaign_workflow.xml29
-rw-r--r--addons/membership/membership.py2
-rw-r--r--addons/membership/membership_view.xml8
-rw-r--r--addons/mrp/__openerp__.py2
-rw-r--r--addons/mrp/mrp_view.xml4
-rw-r--r--addons/mrp_operations/mrp_operations_workflow.xml186
-rw-r--r--addons/point_of_sale/__openerp__.py2
-rw-r--r--addons/portal/__openerp__.py18
-rw-r--r--addons/portal/portal.py30
-rw-r--r--addons/portal/portal_data.xml35
-rw-r--r--addons/portal/portal_demo.xml46
-rw-r--r--addons/portal/portal_view.xml65
-rw-r--r--addons/portal/res_user.py2
-rw-r--r--addons/portal/res_user_view.xml2
-rw-r--r--addons/portal/security/portal_security.xml6
-rw-r--r--addons/portal_claim/__openerp__.py6
-rw-r--r--addons/portal_claim/security/portal_security.xml2
-rw-r--r--addons/portal_crm/__openerp__.py12
-rw-r--r--addons/portal_crm/security/ir.model.access.csv2
-rw-r--r--addons/portal_crm/static/src/css/portal_crm.css42
-rw-r--r--addons/portal_crm/wizard/contact.py94
-rw-r--r--addons/portal_crm/wizard/contact_view.xml83
-rw-r--r--addons/portal_event/__init__.py1
-rw-r--r--addons/portal_event/__openerp__.py3
-rw-r--r--addons/portal_event/event.py39
-rw-r--r--addons/portal_event/event_view.xml23
-rw-r--r--addons/portal_event/portal_event_view.xml2
-rw-r--r--addons/portal_event/security/portal_security.xml8
-rw-r--r--addons/portal_hr_employees/__init__.py22
-rw-r--r--addons/portal_hr_employees/__openerp__.py46
-rw-r--r--addons/portal_hr_employees/hr_employee.py57
-rw-r--r--addons/portal_hr_employees/hr_employee_view.xml62
-rw-r--r--addons/portal_hr_employees/security/ir.model.access.csv6
-rw-r--r--addons/portal_hr_employees/static/src/css/portal_hr_employees.css14
-rw-r--r--addons/portal_hr_recruitment/__openerp__.py5
-rw-r--r--addons/portal_hr_recruitment/portal_jobs_view.xml4
-rw-r--r--addons/portal_project/__openerp__.py4
-rw-r--r--addons/portal_project/security/ir.model.access.csv1
-rw-r--r--addons/portal_project/security/portal_security.xml2
-rw-r--r--addons/portal_project_issue/__openerp__.py5
-rw-r--r--addons/portal_project_issue/portal_project_issue_view.xml63
-rw-r--r--addons/portal_project_issue/security/ir.model.access.csv3
-rw-r--r--addons/portal_project_issue/security/portal_security.xml4
-rw-r--r--addons/portal_project_issue/static/src/css/portal_project_issue.css32
-rw-r--r--addons/portal_sale/portal_sale_view.xml16
-rw-r--r--addons/portal_sale/security/ir.model.access.csv1
-rw-r--r--addons/portal_sale/security/portal_security.xml20
-rw-r--r--addons/product/product_view.xml6
-rw-r--r--addons/product_visible_discount/product_visible_discount_view.xml7
-rw-r--r--addons/project/project.py31
-rw-r--r--addons/project/project_demo.xml185
-rw-r--r--addons/project/project_view.xml13
-rw-r--r--addons/project/static/src/js/project.js70
-rw-r--r--addons/project_issue/__openerp__.py7
-rw-r--r--addons/project_issue/board_project_issue_view.xml2
-rw-r--r--addons/project_issue/project_issue.py38
-rw-r--r--addons/project_issue/project_issue_demo.xml469
-rw-r--r--addons/project_issue/project_issue_view.xml169
-rw-r--r--addons/project_issue/report/project_issue_report.py4
-rw-r--r--addons/project_issue/report/project_issue_report_view.xml15
-rw-r--r--addons/project_issue/static/src/js/project_issue.js13
-rw-r--r--addons/project_long_term/project_long_term_view.xml44
-rw-r--r--addons/purchase/__openerp__.py2
-rw-r--r--addons/purchase/purchase_view.xml129
-rw-r--r--addons/sale/__openerp__.py2
-rw-r--r--addons/sale_crm/i18n/ja.po32
-rw-r--r--addons/sale_margin/i18n/ja.po14
-rw-r--r--addons/stock/__openerp__.py2
-rw-r--r--addons/stock/product_view.xml24
-rw-r--r--addons/stock/stock_demo.xml47
-rw-r--r--addons/stock/stock_view.xml92
-rw-r--r--addons/stock_planning/i18n/ja.po8
-rw-r--r--addons/subscription/subscription_view.xml15
101 files changed, 2929 insertions, 1273 deletions
diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py
index 927ce94db31..ae225cc60de 100644
--- a/addons/account/account_cash_statement.py
+++ b/addons/account/account_cash_statement.py
@@ -32,7 +32,7 @@ class account_cashbox_line(osv.osv):
_name = 'account.cashbox.line'
_description = 'CashBox Line'
- _rec_name = 'number'
+ _rec_name = 'pieces'
def _sub_total(self, cr, uid, ids, name, arg, context=None):
@@ -325,7 +325,7 @@ account_journal()
class account_journal_cashbox_line(osv.osv):
_name = 'account.journal.cashbox.line'
- _rec_name = 'value'
+ _rec_name = 'pieces'
_columns = {
'pieces': fields.float('Values', digits_compute=dp.get_precision('Account')),
'journal_id' : fields.many2one('account.journal', 'Journal', required=True, select=1),
diff --git a/addons/account/i18n/es_EC.po b/addons/account/i18n/es_EC.po
index 5b6bbffea1f..fba1c8ed099 100644
--- a/addons/account/i18n/es_EC.po
+++ b/addons/account/i18n/es_EC.po
@@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-07-30 04:55+0000\n"
+"X-Launchpad-Export-Date: 2012-07-31 04:58+0000\n"
"X-Generator: Launchpad (build 15702)\n"
#. module: account
diff --git a/addons/account_accountant/__openerp__.py b/addons/account_accountant/__openerp__.py
index ff4e3faa3b6..7c97112b875 100644
--- a/addons/account_accountant/__openerp__.py
+++ b/addons/account_accountant/__openerp__.py
@@ -24,7 +24,7 @@
"author" : "OpenERP SA",
"category": 'Accounting & Finance',
"sequence": 10,
- "summary": "Accounts Moves, Journals, Chart of Accounts",
+ "summary": "Financial and Analytic Accounting",
"description": """
Accounting Access Rights.
=========================
diff --git a/addons/account_asset/account_asset_invoice_view.xml b/addons/account_asset/account_asset_invoice_view.xml
index fe1435d4745..40ee51e10b8 100644
--- a/addons/account_asset/account_asset_invoice_view.xml
+++ b/addons/account_asset/account_asset_invoice_view.xml
@@ -1,22 +1,19 @@
<?xml version="1.0"?>
<openerp>
-<data>
+ <data>
- #---------------------------------------------------------
- # Fiscal Year
- #---------------------------------------------------------
-
- <record model="ir.ui.view" id="view_account_invoice_asset_form">
- <field name="name">account.invoice.line.form</field>
- <field name="model">account.invoice.line</field>
- <field name="inherit_id" ref="account.view_invoice_line_form"/>
- <field name="type">form</field>
- <field name="arch" type="xml">
- <field name="account_id" position="after">
- <field name="asset_category_id"/>
+ <!-- Fiscal Year -->
+ <record model="ir.ui.view" id="view_account_invoice_asset_form">
+ <field name="name">account.invoice.line.form</field>
+ <field name="model">account.invoice.line</field>
+ <field name="inherit_id" ref="account.view_invoice_line_form"/>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <field name="account_id" position="after">
+ <field name="asset_category_id"/>
+ </field>
</field>
- </field>
- </record>
+ </record>
-</data>
+ </data>
</openerp>
diff --git a/addons/account_asset/i18n/es_EC.po b/addons/account_asset/i18n/es_EC.po
index b9e3fc013a5..ec12e6c4a58 100644
--- a/addons/account_asset/i18n/es_EC.po
+++ b/addons/account_asset/i18n/es_EC.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-07-30 04:55+0000\n"
+"X-Launchpad-Export-Date: 2012-07-31 04:58+0000\n"
"X-Generator: Launchpad (build 15702)\n"
#. module: account_asset
diff --git a/addons/account_voucher/__openerp__.py b/addons/account_voucher/__openerp__.py
index 0b37bdbd4a2..135c2bc828b 100644
--- a/addons/account_voucher/__openerp__.py
+++ b/addons/account_voucher/__openerp__.py
@@ -23,7 +23,7 @@
"name" : "eInvoicing & Payments",
"version" : "1.0",
"author" : 'OpenERP SA',
- "summary": 'Supplier & Customer Invoices, Payments',
+ "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.
==============================================================================================================================================================================================
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index 372d8aa1937..6cb43ed8e3a 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -22,7 +22,7 @@
<field name="journal_id" widget="selection" context="{'journal_id': self, 'set_visible':False}" domain="[('type','in',('bank','cash'))]"/>
<field name="period_id"/>
</group>
- <newline/>
+ <newline/>
<group expand="0" string="Group By...">
<filter string="Customer" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by':'journal_id'}"/>
@@ -54,7 +54,7 @@
<field name="journal_id" widget="selection" context="{'journal_id': self, 'set_visible':False}" domain="[('type','in',('bank','cash'))]"/>
<field name="period_id"/>
</group>
- <newline/>
+ <newline/>
<group expand="0" string="Group By...">
<filter string="Supplier" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="Journal" icon="terp-folder-orange" domain="[]" context="{'group_by':'journal_id'}"/>
@@ -72,7 +72,7 @@
<field name="arch" type="xml">
<form string="Bill Payment" version="7.0">
<group col="6">
- <field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Supplier" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1, 'invoice_currency': currency_id}" />
+ <field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Supplier" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1, 'invoice_currency': currency_id}"/>
<field name="amount" on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)"/>
<field name="journal_id"
domain="[('type','in',['bank', 'cash'])]"
@@ -94,8 +94,7 @@
<tree string="Open Supplier Journal Entries" editable="bottom" colors="gray:amount==0">
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
on_change="onchange_move_line_id(move_line_id)"
- domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
- />
+ domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"/>
<field name="account_id" domain="[('type','=','payable')]"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
@@ -108,8 +107,7 @@
<tree string="Open Customer Journal Entries" editable="bottom" colors="gray:amount==0">
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
on_change="onchange_move_line_id(move_line_id)"
- domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
- />
+ domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"/>
<field name="account_id" domain="[('type','=','payable')]"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
@@ -156,11 +154,11 @@
<group>
<group>
<field name="partner_id" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" context="{'invoice_currency':currency_id, 'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}" string="Supplier"/>
- <label for="amount" string="Amount"/>
- <div>
+ <label for="amount" string="Amount"/>
+ <div>
<field name="amount" invisible="context.get('line_type', False)" on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)" class="oe_inline"/>
<field name="currency_id" class="oe_inline"/>
- </div>
+ </div>
<field name="journal_id"
domain="[('type','in',['bank', 'cash'])]"
invisible="context.get('line_type', False)"
@@ -182,8 +180,7 @@
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
on_change="onchange_move_line_id(move_line_id)"
domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
- required="1"
- />
+ required="1"/>
<field name="account_id" groups="base.group_no_one" domain="[('type','=','payable')]"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
@@ -198,8 +195,7 @@
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
on_change="onchange_move_line_id(move_line_id)"
domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
- required="1"
- />
+ required="1"/>
<field name="account_id" groups="base.group_no_one" domain="[('type','=','payable')]"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
@@ -278,7 +274,7 @@
<field name="view_id" eval="False"/>
<field name="search_view_id" ref="view_voucher_filter_vendor_pay"/>
<field name="target">current</field>
- <field name="help">Click on "Create" to register a supplier payment.
+ <field name="help">Click on "Create" to register a supplier payment.
&lt;p&gt;
Track payments you do to your supplier and amounts you pay.</field>
</record>
@@ -316,14 +312,13 @@
<group>
<group>
<field name="partner_id" domain="[('customer','=',True)]" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date, context)" string="Customer" context="{'search_default_customer': 1}"/>
- <label for="amount"
- string="Paid Amount"/>
- <div>
+ <label for="amount" string="Paid Amount"/>
+ <div>
<field name="amount" class="oe_inline"
invisible="context.get('line_type', False)"
on_change="onchange_amount(amount, payment_rate, partner_id, journal_id, currency_id, type, date, payment_rate_currency_id, company_id, context)"/>
<field name="currency_id" class="oe_inline"/>
- </div>
+ </div>
<field name="journal_id"
domain="[('type','in',['bank', 'cash'])]"
@@ -347,7 +342,7 @@
</group>
<notebook>
- <page string="Payment Information">
+ <page string="Payment Information" groups="base.group_user">
<field name="line_cr_ids" context="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, currency_id, context)">
<tree string="Invoices and outstanding transactions" editable="bottom" colors="gray:amount==0">
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
@@ -369,8 +364,7 @@
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
on_change="onchange_move_line_id(move_line_id)"
domain="[('account_id.type','in',('receivable','payable')), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
- required="1"
- />
+ required="1"/>
<field name="account_id" groups="base.group_no_one" domain="[('type','=','receivable')]"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
@@ -409,21 +403,21 @@
<field name="audit"/>
</group>
<field name="move_ids" readonly="1">
- <tree string="Journal Items">
- <field name="move_id"/>
- <field name="ref"/>
- <field name="date"/>
- <field name="statement_id"/>
- <field name="partner_id"/>
- <field name="account_id"/>
- <field name="name"/>
- <field name="debit"/>
- <field name="credit"/>
- <field name="state"/>
- <field name="reconcile_id"/>
- <field name="amount_currency"/>
- <field name="currency_id"/>
- </tree>
+ <tree string="Journal Items">
+ <field name="move_id"/>
+ <field name="ref"/>
+ <field name="date"/>
+ <field name="statement_id"/>
+ <field name="partner_id"/>
+ <field name="account_id"/>
+ <field name="name"/>
+ <field name="debit"/>
+ <field name="credit"/>
+ <field name="state"/>
+ <field name="reconcile_id"/>
+ <field name="amount_currency"/>
+ <field name="currency_id"/>
+ </tree>
</field>
</page>
</notebook>
@@ -464,5 +458,6 @@
<menuitem action="action_vendor_receipt" icon="STOCK_JUSTIFY_FILL" sequence="12"
id="menu_action_vendor_receipt" parent="account.menu_finance_receivables"/>
+
</data>
</openerp>
diff --git a/addons/association/profile_association.xml b/addons/association/profile_association.xml
index 099a6f1ac97..0627d3dba51 100644
--- a/addons/association/profile_association.xml
+++ b/addons/association/profile_association.xml
@@ -5,6 +5,7 @@
<!-- Top menu item -->
<menuitem name="Association"
id="base.menu_association"
+ groups="base.group_user"
sequence="70"/>
<menuitem name="Configuration" id="base.menu_event_config" parent="base.menu_association" sequence="30"/>
<menuitem name="Association" id="base.menu_report_association" parent="base.menu_reporting" sequence="23"/>
diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py
index 6b0d0e1e2c9..643908c1098 100644
--- a/addons/crm/__openerp__.py
+++ b/addons/crm/__openerp__.py
@@ -25,7 +25,7 @@
'version': '1.0',
'category': 'Customer Relationship Management',
"sequence": 2,
- "summary": "Agenda, Leads, Opportunities",
+ "summary": "Leads, Opportunities, Agenda",
'description': """
The generic OpenERP Customer Relationship Management.
=====================================================
diff --git a/addons/delivery/delivery_view.xml b/addons/delivery/delivery_view.xml
index 7a37cfcf4c6..ee1597b0b73 100644
--- a/addons/delivery/delivery_view.xml
+++ b/addons/delivery/delivery_view.xml
@@ -15,7 +15,7 @@
</tree>
</field>
</record>
-
+
<record id="view_delivery_carrier_form" model="ir.ui.view">
<field name="name">delivery.carrier.form</field>
<field name="model">delivery.carrier</field>
@@ -90,7 +90,7 @@
</form>
</field>
</record>
-
+
<record id="action_delivery_carrier_form" model="ir.actions.act_window">
<field name="name">Delivery Method</field>
<field name="type">ir.actions.act_window</field>
@@ -299,7 +299,7 @@
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_out_form"/>
<field name="arch" type="xml">
- <xpath expr="/form/header/button[@string='Create Invoice/Refund']" position="after">
+ <xpath expr="/form/header//button[@string='Create Invoice/Refund']" position="after">
<button name="%(report_shipping)d" string="Delivery Order" states="done" type="action" icon="gtk-print"/>
</xpath>
</field>
diff --git a/addons/event/__openerp__.py b/addons/event/__openerp__.py
index 34707d1c0f6..75c79f06835 100644
--- a/addons/event/__openerp__.py
+++ b/addons/event/__openerp__.py
@@ -25,7 +25,7 @@
'name': 'Events Organisation',
'version': '0.1',
'category': 'Tools',
- 'summary': 'Invitations, Subscriptions',
+ 'summary': 'For Trainings, Conferences & Meetings',
'description': """
Organization and management of Events.
======================================
diff --git a/addons/event/event.py b/addons/event/event.py
index 6a8cf9f8a0b..c3942642b3d 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -23,6 +23,7 @@ import time
from osv import fields, osv
from tools.translate import _
import decimal_precision as dp
+from openerp import SUPERUSER_ID
class event_type(osv.osv):
""" Event Type """
@@ -159,7 +160,7 @@ class event_event(osv.osv):
elif field == 'register_prospect':
number = reg_draft
elif field == 'register_avail':
- #the number of ticket is unlimited if the event.register_max field is not set.
+ #the number of ticket is unlimited if the event.register_max field is not set.
#In that cas we arbitrary set it to 9999, it is used in the kanban view to special case the display of the 'subscribe' button
number = event.register_max - reg_open if event.register_max != 0 else 9999
res[event.id][field] = number
@@ -178,7 +179,7 @@ class event_event(osv.osv):
if reg.state in ('open','done'):
res[event.id]= True
continue
- return res
+ return res
_columns = {
'name': fields.char('Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}),
@@ -189,7 +190,7 @@ class event_event(osv.osv):
'register_current': fields.function(_get_register, string='Confirmed Registrations', multi='register_numbers'),
'register_avail': fields.function(_get_register, string='Available Registrations', multi='register_numbers',type='integer'),
'register_prospect': fields.function(_get_register, string='Unconfirmed Registrations', multi='register_numbers'),
- 'register_attended': fields.function(_get_register, string='# of Participations', multi='register_numbers'),
+ 'register_attended': fields.function(_get_register, string='# of Participations', multi='register_numbers'),
'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}),
'date_begin': fields.datetime('Start Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
'date_end': fields.datetime('End Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
@@ -227,18 +228,18 @@ class event_event(osv.osv):
self.check_registration_limits_before(cr, uid, ids, num_of_seats, context=context)
user = user_pool.browse(cr, uid, uid, context=context)
curr_reg_ids = register_pool.search(cr, uid, [('user_id', '=', user.id), ('event_id', '=' , ids[0])])
- #the subscription is done with UID = 1 because in case we share the kanban view, we want anyone to be able to subscribe
+ #the subscription is done with SUPERUSER_ID because in case we share the kanban view, we want anyone to be able to subscribe
if not curr_reg_ids:
- curr_reg_ids = [register_pool.create(cr, 1, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id, 'nb_register': num_of_seats})]
+ curr_reg_ids = [register_pool.create(cr, SUPERUSER_ID, {'event_id': ids[0] ,'email': user.user_email, 'name':user.name, 'user_id': user.id, 'nb_register': num_of_seats})]
else:
register_pool.write(cr, uid, curr_reg_ids, {'nb_register': num_of_seats}, context=context)
- return register_pool.confirm_registration(cr, 1, curr_reg_ids, context=context)
+ return register_pool.confirm_registration(cr, SUPERUSER_ID, curr_reg_ids, context=context)
def unsubscribe_to_event(self, cr, uid, ids, context=None):
register_pool = self.pool.get('event.registration')
- #the unsubscription is done with UID = 1 because in case we share the kanban view, we want anyone to be able to unsubscribe
- curr_reg_ids = register_pool.search(cr, 1, [('user_id', '=', uid), ('event_id', '=', ids[0])])
- return register_pool.button_reg_cancel(cr, 1, curr_reg_ids, context=context)
+ #the unsubscription is done with SUPERUSER_ID because in case we share the kanban view, we want anyone to be able to unsubscribe
+ curr_reg_ids = register_pool.search(cr, SUPERUSER_ID, [('user_id', '=', uid), ('event_id', '=', ids[0])])
+ return register_pool.button_reg_cancel(cr, SUPERUSER_ID, curr_reg_ids, context=context)
def _check_closing_date(self, cr, uid, ids, context=None):
for event in self.browse(cr, uid, ids, context=context):
@@ -260,7 +261,7 @@ class event_event(osv.osv):
'register_max': type_info.default_registration_max,
}
return {'value': dic}
-
+
# ----------------------------------------
# OpenChatter methods and notifications
# ----------------------------------------
@@ -415,7 +416,7 @@ class event_registration(osv.osv):
return {}
event_obj = self.pool.get('event.event')
data_event = event_obj.browse(cr, uid, event_id, context=context)
- return {'value':
+ return {'value':
{'event_begin_date': data_event.date_begin,
'event_end_date': data_event.date_end,
'company_id': data_event.company_id and data_event.company_id.id or False,
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index 890cb1be9e6..a5181e7dded 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
<openerp>
<data>
+
<act_window
id="act_event_list_register_event"
name="Registration"
@@ -13,6 +14,7 @@
<!-- Top menu item -->
<menuitem name="Events"
id="event_main_menu"
+ groups="base.group_user"
sequence="80"/>
<menuitem name="Events Organisation" id="base.menu_event_main" parent="event_main_menu"/>
@@ -102,10 +104,12 @@
<field name="arch" type="xml">
<form string="Events" version="7.0">
<header>
- <button string="Confirm Event" name="button_confirm" states="draft" type="object" class="oe_highlight"/>
- <button string="Event Ended" name="button_done" states="confirm" type="object" class="oe_highlight"/>
- <button string="Set To Draft" name="button_draft" states="cancel,done" type="object" />
- <button string="Cancel Event" name="button_cancel" states="draft,confirm" type="object"/>
+ <span groups="base.user_group">
+ <button string="Confirm Event" name="button_confirm" states="draft" type="object" class="oe_highlight"/>
+ <button string="Event Ended" name="button_done" states="confirm" type="object" class="oe_highlight"/>
+ <button string="Set To Draft" name="button_draft" states="cancel,done" type="object" />
+ <button string="Cancel Event" name="button_cancel" states="draft,confirm" type="object"/>
+ </span>
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,done"/>
</header>
<sheet>
@@ -126,20 +130,20 @@
<field name="address_id" widget="many2one_address_google_map" widget_option="{'placeholder':'.oe_google_map'}"/>
<field name="street" placeholder="Street..."/>
<div>
- <field name="zip" class="oe_inline" placeholder="Zip"/>
- <field name="city" class="oe_inline" placeholder="City"/>
+ <field name="zip" class="oe_inline" placeholder="Zip"/>
+ <field name="city" class="oe_inline" placeholder="City"/>
</div>
</div>
</group>
<group>
- <field name="type" on_change="onchange_event_type(type,context)"/>
- <field name="register_min"/>
- <field name="register_max"/>
- <label for="register_current" string="Current Registrations"/>
- <div>
- Confirmed: <field name="register_current" class="oe_inline"/>, Unconfirmed: <field name="register_prospect" class="oe_inline"/>
- </div>
- </group>
+ <field name="type" on_change="onchange_event_type(type,context)"/>
+ <field name="register_min"/>
+ <field name="register_max"/>
+ <label for="register_current" string="Current Registrations" groups="base.group_user"/>
+ <div groups="base.group_user">
+ Confirmed: <field name="register_current" class="oe_inline"/>, Unconfirmed: <field name="register_prospect" class="oe_inline"/>
+ </div>
+ </group>
</group>
</div>
<!-- <div class="oe_right" style="height: 200px"></div> -->
@@ -474,8 +478,8 @@
<div>
<field name="email" class="oe_inline"/>
<button class="oe_inline oe_right" string="Send Email"
- name="%(mail.action_email_compose_message_wizard)d"
- icon="terp-mail-message-new" context= '{"default_email_to":email}' type="action"/>
+ name="%(mail.action_email_compose_message_wizard)d"
+ icon="terp-mail-message-new" context= '{"default_email_to":email}' type="action"/>
</div>
</group>
<group>
@@ -541,9 +545,9 @@
<filter icon="terp-check" string="New" name="draft" domain="[('state','=','draft')]" help="Registrations in unconfirmed state"/>
<filter icon="terp-camera_test" string="Confirmed" domain="[('state','=','open')]" help="Confirmed registrations"/>
<filter icon="terp-personal"
- string="My Registrations"
- help="My Registrations"
- domain="[('user_id','=',uid)]"/>
+ string="My Registrations"
+ help="My Registrations"
+ domain="[('user_id','=',uid)]"/>
<separator orientation="vertical"/>
<field name="event_id" widget="selection"/>
<field name="user_id"/>
@@ -571,12 +575,11 @@
<field name="search_view_id" ref="view_registration_search"/>
</record>view_
- <menuitem
- name="Registrations"
+ <menuitem name="Registrations"
id="menu_action_registration" parent="base.menu_event_main"
action="action_registration" groups="event.group_event_manager,event.group_event_user"/>
-
<menuitem name="Reporting" id="base.menu_report_association" parent="event_main_menu" sequence="20"/>
+
</data>
</openerp>
diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml
index e0d17c3bacb..f46bc5fff96 100644
--- a/addons/event/security/event_security.xml
+++ b/addons/event/security/event_security.xml
@@ -1,45 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
-<data noupdate="0">
+ <data>
- <record model="ir.module.category" id="module_category_event_management">
+ <record model="ir.module.category" id="module_category_event_management">
<field name="name">Event</field>
<field name="description">Helps you manage your Events.</field>
<field name="sequence">3</field>
</record>
- <record id="group_event_user" model="res.groups">
- <field name="name">User</field>
- <field name="category_id" ref="module_category_event_management"/>
- </record>
+ <record id="group_event_user" model="res.groups">
+ <field name="name">User</field>
+ <field name="category_id" ref="module_category_event_management"/>
+ </record>
+
+ <record id="group_event_manager" model="res.groups">
+ <field name="name">Manager</field>
+ <field name="category_id" ref="module_category_event_management"/>
+ <field name="implied_ids" eval="[(4, ref('group_event_user'))]"/>
+ <field name="users" eval="[(4, ref('base.user_root'))]"/>
+ </record>
- <record id="group_event_manager" model="res.groups">
- <field name="name">Manager</field>
- <field name="category_id" ref="module_category_event_management"/>
- <field name="implied_ids" eval="[(4, ref('group_event_user'))]"/>
- <field name="users" eval="[(4, ref('base.user_root'))]"/>
- </record>
+ <!-- Multi - Company Rules -->
+ <record model="ir.rule" id="event_event_comp_rule">
+ <field name="name">Event multi-company</field>
+ <field name="model_id" ref="model_event_event"/>
+ <field name="global" eval="True"/>
+ <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
+ </record>
- <!-- Multi - Company Rules -->
+ <record model="ir.rule" id="event_registration_comp_rule">
+ <field name="name">Event Registration multi-company</field>
+ <field name="model_id" ref="model_event_registration"/>
+ <field name="global" eval="True"/>
+ <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
+ </record>
- <record model="ir.rule" id="event_event_comp_rule">
- <field name="name">Event multi-company</field>
- <field name="model_id" ref="model_event_event"/>
- <field name="global" eval="True"/>
- <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
- </record>
- <record model="ir.rule" id="event_registration_comp_rule">
- <field name="name">Event Registration multi-company</field>
- <field name="model_id" ref="model_event_registration"/>
- <field name="global" eval="True"/>
- <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
- </record>
+ <record model="ir.rule" id="report_event_registration_comp_rule">
+ <field name="name">Report Event Registration multi-company</field>
+ <field name="model_id" ref="model_report_event_registration"/>
+ <field name="global" eval="True"/>
+ <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
+ </record>
- <record model="ir.rule" id="report_event_registration_comp_rule">
- <field name="name">Report Event Registration multi-company</field>
- <field name="model_id" ref="model_report_event_registration"/>
- <field name="global" eval="True"/>
- <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
- </record>-->
-</data>
+ </data>
</openerp>
diff --git a/addons/hr/__openerp__.py b/addons/hr/__openerp__.py
index ebf8d7ba83e..39dad795c0b 100644
--- a/addons/hr/__openerp__.py
+++ b/addons/hr/__openerp__.py
@@ -26,7 +26,7 @@
"category": "Human Resources",
"sequence": 12,
"website": "http://www.openerp.com",
- "summary": "Hierarchy, Jobs, Departments",
+ "summary": "All Infos on Employees",
"description": """
Module for Human Resource Management.
=====================================
diff --git a/addons/hr/hr_department_view.xml b/addons/hr/hr_department_view.xml
index bbf66f0d4c3..6d9141238b1 100644
--- a/addons/hr/hr_department_view.xml
+++ b/addons/hr/hr_department_view.xml
@@ -2,11 +2,7 @@
<openerp>
<data>
- <!--
- ======================
- department
- ======================
- -->
+ <!-- Department -->
<record id="view_department_form" model="ir.ui.view">
<field name="name">hr.department.form</field>
<field name="model">hr.department</field>
@@ -37,7 +33,7 @@
</tree>
</field>
</record>
- <record id="view_department_filter" model="ir.ui.view">
+ <record id="view_department_filter" model="ir.ui.view">
<field name="name">Departments</field>
<field name="model">hr.department</field>
<field name="type">search</field>
@@ -48,7 +44,7 @@
<field name="manager_id" />
</search>
</field>
- </record>
+ </record>
<record id="open_module_tree_department" model="ir.actions.act_window">
<field name="name">Departments</field>
@@ -60,5 +56,5 @@
<menuitem action="open_module_tree_department" id="menu_hr_department_tree" parent="hr.menu_hr_configuration" sequence="5"/>
- </data>
+ </data>
</openerp>
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index f160eda6301..1c145694a44 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -11,7 +11,7 @@
<menuitem id="menu_hr_configuration" name="Configuration" parent="hr.menu_hr_root" groups="base.group_hr_manager" sequence="50"/>
<menuitem id="menu_hr_management" name="Human Resources" parent="hr.menu_hr_configuration" groups="base.group_no_one" sequence="25"/>
<menuitem id="menu_hr_reporting_timesheet" name="Reports"
- parent="menu_hr_reporting" sequence="6" />
+ parent="menu_hr_reporting" sequence="6"/>
<!--Employee form view -->
<record id="view_employee_form" model="ir.ui.view">
@@ -40,9 +40,9 @@
<!-- Put here related buttons -->
</div>
<group colspan="4" col="4">
- <field name="work_email" widget="email" />
+ <field name="work_email" widget="email"/>
<field name="work_phone"/>
- <field name="address_id" on_change="onchange_address_id(address_id)" />
+ <field name="address_id" on_change="onchange_address_id(address_id)"/>
<field name="mobile_phone"/>
</group>
<notebook>
@@ -50,7 +50,7 @@
<group>
<group>
<field name="user_id" on_change="onchange_user(user_id)"/>
- <field name="parent_id" />
+ <field name="parent_id"/>
<field name="coach_id"/>
</group>
<group>
@@ -142,7 +142,9 @@
<a type="edit"><img t-att-src="kanban_image('hr.employee', 'photo', record.id.value)" class="oe_employee_picture"/></a>
</div>
<div class="oe_employee_details">
- <h4><a type="edit"><field name="name"/> (<field name="login"/>)</a></h4>
+ <h4>
+ <a type="edit"><field name="name"/><t t-if="record.login.raw_value"> (<field name="login"/>)</t></a>
+ </h4>
<ul>
<li id="last_login">
<span t-if="record.last_login.raw_value &amp;&amp; record.last_login.raw_value.is().today()" class="oe_kanban_button" style="font-size: 100%%">
@@ -225,12 +227,7 @@
<field name="res_id" ref="hr.menu_open_view_employee_list_my"/>
</record>
- <!--
- =======================
- Employee architecture
- =======================
- -->
-
+ <!-- Employee architecture -->
<record id="view_partner_tree2" model="ir.ui.view">
<field name="name">hr.employee.tree</field>
<field name="model">hr.employee</field>
@@ -269,12 +266,7 @@
<field eval="True" name="replace"/>
</ir_set>
- <!--
- ============
- Employee Category
- ============
- -->
-
+ <!-- Employee Category -->
<record id="view_employee_category_form" model="ir.ui.view">
<field name="name">hr.employee.category.form</field>
<field name="model">hr.employee.category</field>
@@ -373,8 +365,8 @@
</h1>
<group>
<group>
- <field name="no_of_employee"/>
- <field name="expected_employees"/>
+ <field name="no_of_employee" groups="base.group_user"/>
+ <field name="expected_employees" groups="base.group_user"/>
<field name="no_of_recruitment" on_change="on_change_expected_employee(no_of_recruitment,no_of_employee)"/>
</group>
<group>
@@ -427,7 +419,7 @@
help="In Recruitment"/>
<separator orientation="vertical"/>
<field name="department_id" widget="selection"/>
- <newline />
+ <newline/>
<group expand="0" string="Group By...">
<filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
diff --git a/addons/hr_evaluation/__openerp__.py b/addons/hr_evaluation/__openerp__.py
index 4748883b1ce..bb1322bccf3 100644
--- a/addons/hr_evaluation/__openerp__.py
+++ b/addons/hr_evaluation/__openerp__.py
@@ -25,7 +25,7 @@
"author": "OpenERP SA",
"category": "Human Resources",
"website": "http://www.openerp.com",
- "summary": "Top-Down and Bottom-Up Evaluation",
+ "summary": "Periodical Evaluations, Surveys",
"images": ["images/hr_evaluation_analysis.jpeg","images/hr_evaluation.jpeg"],
"depends": ["hr","base_calendar","survey"],
"description": """
diff --git a/addons/hr_holidays/__openerp__.py b/addons/hr_holidays/__openerp__.py
index c8c2bad3489..45dd9ea39a5 100644
--- a/addons/hr_holidays/__openerp__.py
+++ b/addons/hr_holidays/__openerp__.py
@@ -26,7 +26,7 @@
"author": "OpenERP SA",
"category": "Human Resources",
"sequence": 28,
- "summary": "Allocation and Leave Requests, Reporting by Department",
+ "summary": "Holidays, Allocation and Leave Requests",
"website": "http://www.openerp.com",
"description": """
This module allows you to manage leaves and leave's requests.
diff --git a/addons/hr_payroll/i18n/he.po b/addons/hr_payroll/i18n/he.po
new file mode 100644
index 00000000000..9b54273f823
--- /dev/null
+++ b/addons/hr_payroll/i18n/he.po
@@ -0,0 +1,1119 @@
+# Hebrew 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:37+0100\n"
+"PO-Revision-Date: 2012-07-31 03:12+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Hebrew <he@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-07-31 04:58+0000\n"
+"X-Generator: Launchpad (build 15702)\n"
+
+#. module: hr_payroll
+#: field:hr.payslip.line,condition_select:0
+#: field:hr.salary.rule,condition_select:0
+msgid "Condition Based on"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Monthly"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 field:hr.payslip,line_ids:0
+#: model:ir.actions.act_window,name:hr_payroll.act_contribution_reg_payslip_lines
+msgid "Payslip Lines"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.line:0
+#: model:ir.model,name:hr_payroll.model_hr_salary_rule_category
+#: report:paylip.details:0
+msgid "Salary Rule Category"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.salary.rule.category,parent_id:0
+msgid ""
+"Linking a salary category to its parent is used only for the reporting "
+"purpose."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.payslip.line:0 view:hr.salary.rule:0
+msgid "Group By..."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "States"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,input_ids:0 view:hr.salary.rule:0
+#: field:hr.salary.rule,input_ids:0
+msgid "Inputs"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,parent_rule_id:0
+#: field:hr.salary.rule,parent_rule_id:0
+msgid "Parent Salary Rule"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.employee,slip_ids:0 view:hr.payslip:0 view:hr.payslip.run:0
+#: field:hr.payslip.run,slip_ids:0
+#: model:ir.actions.act_window,name:hr_payroll.act_hr_employee_payslip_list
+msgid "Payslips"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payroll.structure,parent_id:0
+#: field:hr.salary.rule.category,parent_id:0
+msgid "Parent"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "("
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.contribution.register,company_id:0
+#: field:hr.payroll.structure,company_id:0 field:hr.payslip,company_id:0
+#: field:hr.payslip.line,company_id:0 field:hr.salary.rule,company_id:0
+#: field:hr.salary.rule.category,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Done Slip"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid ","
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.payslip.run:0
+msgid "Set to Draft"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.model,name:hr_payroll.model_hr_salary_rule
+msgid "hr.salary.rule"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,payslip_run_id:0
+#: model:ir.model,name:hr_payroll.model_hr_payslip_run
+msgid "Payslip Batches"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.employees:0
+msgid ""
+"This wizard will generate payslips for all selected employee(s) based on the "
+"dates and credit note specified on Payslips Run."
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 report:paylip.details:0
+#: report:payslip:0
+msgid "Quantity/Rate"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.input,payslip_id:0 field:hr.payslip.line,slip_id:0
+#: field:hr.payslip.worked_days,payslip_id:0
+#: model:ir.model,name:hr_payroll.model_hr_payslip report:payslip:0
+msgid "Pay Slip"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.employees:0
+msgid "Generate"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,amount_percentage_base:0
+#: help:hr.salary.rule,amount_percentage_base:0
+msgid "result will be affected to a variable"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0
+msgid "Total:"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,name:hr_payroll.act_children_salary_rules
+msgid "All Children Rules"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.salary.rule:0
+msgid "Input Data"
+msgstr ""
+
+#. module: hr_payroll
+#: constraint:hr.payslip:0
+msgid "Payslip 'Date From' must be before 'Date To'."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.salary.rule.category:0
+msgid "Notes"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Salary Computation"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 field:hr.payslip.input,amount:0
+#: field:hr.payslip.line,amount:0 report:paylip.details:0 report:payslip:0
+msgid "Amount"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.payslip.line:0
+#: model:ir.model,name:hr_payroll.model_hr_payslip_line
+msgid "Payslip Line"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Other Information"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,amount_select:0 help:hr.salary.rule,amount_select:0
+msgid "The computation method for the rule amount."
+msgstr ""
+
+#. module: hr_payroll
+#: view:payslip.lines.contribution.register:0
+msgid "Contribution Register's Payslip Lines"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py:52
+#, python-format
+msgid "Warning !"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0
+msgid "Details by Salary Rule Category:"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "Note"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payroll.structure,code:0 field:hr.payslip,number:0
+#: report:paylip.details:0 report:payslip:0
+msgid "Reference"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Draft Slip"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:422
+#, python-format
+msgid "Normal Working Days paid at 100%"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,condition_range_max:0
+#: field:hr.salary.rule,condition_range_max:0
+msgid "Maximum Range"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "Identification No"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,struct_id:0
+msgid "Structure"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.employee,total_wage:0
+msgid "Sum of all current contract's wage of employee."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Total Working Days"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,code:0 help:hr.salary.rule,code:0
+msgid ""
+"The code of salary rules can be used as reference in computation of other "
+"rules. In that case, it is case sensitive."
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Weekly"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,rate:0
+msgid "Rate (%)"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Confirm"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.report.xml,name:hr_payroll.payslip_report
+msgid "Employee PaySlip"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,condition_range_max:0
+#: help:hr.salary.rule,condition_range_max:0
+msgid "The maximum amount, applied for this rule."
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,condition_python:0
+#: help:hr.salary.rule,condition_python:0
+msgid ""
+"Applied this rule for calculation if condition is true. You can specify "
+"condition like basic > 1000."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.employees:0
+msgid "Payslips by Employees"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Quarterly"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,state:0 field:hr.payslip.run,state:0
+msgid "State"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.salary.rule,quantity:0
+msgid ""
+"It is used in computation for percentage and fixed amount.For e.g. A rule "
+"for Meal Voucher having fixed amount of 1€ per worked day can have its "
+"quantity defined in expression like worked_days.WORK100.number_of_days."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule:0
+msgid "Search Salary Rule"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,employee_id:0 field:hr.payslip.line,employee_id:0
+#: model:ir.model,name:hr_payroll.model_hr_employee
+msgid "Employee"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Semi-annually"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule:0
+msgid "Children Definition"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "Email"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.run:0
+msgid "Search Payslip Batches"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,amount_percentage_base:0
+#: field:hr.salary.rule,amount_percentage_base:0
+msgid "Percentage based on"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,amount_percentage:0
+#: help:hr.salary.rule,amount_percentage:0
+msgid "For example, enter 50.0 to apply a percentage of 50%"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,paid:0
+msgid "Made Payment Order ? "
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0
+msgid "PaySlip Lines by Contribution Register"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip,state:0
+msgid ""
+"* When the payslip is created the state is 'Draft'. \n"
+"* If the payslip is under verification, the state is 'Waiting'. "
+"\n"
+"* If the payslip is confirmed then state is set to 'Done'. \n"
+"* When user cancel payslip the state is 'Rejected'."
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.worked_days,number_of_days:0
+msgid "Number of Days"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.payslip,state:0
+msgid "Rejected"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payroll.structure:0 field:hr.payroll.structure,rule_ids:0
+#: view:hr.salary.rule:0
+#: model:ir.actions.act_window,name:hr_payroll.action_salary_rule_form
+#: model:ir.ui.menu,name:hr_payroll.menu_action_hr_salary_rule_form
+msgid "Salary Rules"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:337
+#, python-format
+msgid "Refund: "
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.model,name:hr_payroll.model_payslip_lines_contribution_register
+msgid "PaySlip Lines by Contribution Registers"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 selection:hr.payslip,state:0 view:hr.payslip.run:0
+msgid "Done"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,appears_on_payslip:0
+#: field:hr.salary.rule,appears_on_payslip:0
+msgid "Appears on Payslip"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,amount_fix:0
+#: selection:hr.payslip.line,amount_select:0 field:hr.salary.rule,amount_fix:0
+#: selection:hr.salary.rule,amount_select:0
+msgid "Fixed Amount"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,active:0 help:hr.salary.rule,active:0
+msgid ""
+"If the active field is set to false, it will allow you to hide the salary "
+"rule without removing it."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Worked Days & Inputs"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,details_by_salary_rule_category:0
+msgid "Details by Salary Rule Category"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,name:hr_payroll.action_payslip_lines_contribution_register
+msgid "PaySlip Lines"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,register_id:0 help:hr.salary.rule,register_id:0
+msgid "Eventual third party involved in the salary payment of the employees."
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.worked_days,number_of_hours:0
+msgid "Number of Hours"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "PaySlip Batch"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,condition_range_min:0
+#: field:hr.salary.rule,condition_range_min:0
+msgid "Minimum Range"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,child_ids:0 field:hr.salary.rule,child_ids:0
+msgid "Child Salary Rule"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 field:hr.payslip,date_to:0
+#: field:hr.payslip.run,date_end:0 report:paylip.details:0 report:payslip:0
+#: field:payslip.lines.contribution.register,date_to:0
+msgid "Date To"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.payslip.line,condition_select:0
+#: selection:hr.salary.rule,condition_select:0
+msgid "Range"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_structure_tree
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_structure_tree
+msgid "Salary Structures Hierarchy"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Payslip"
+msgstr ""
+
+#. module: hr_payroll
+#: constraint:hr.contract:0
+msgid "Error! contract start-date must be lower then contract end-date."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.contract:0
+msgid "Payslip Info"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,name:hr_payroll.act_payslip_lines
+msgid "Payslip Computation Details"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:872
+#, python-format
+msgid "Wrong python code defined for salary rule %s (%s) "
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.model,name:hr_payroll.model_hr_payslip_input
+msgid "Payslip Input"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule.category:0
+#: model:ir.actions.act_window,name:hr_payroll.action_hr_salary_rule_category
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_salary_rule_category
+msgid "Salary Rule Categories"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.input,contract_id:0
+#: help:hr.payslip.worked_days,contract_id:0
+msgid "The contract for which applied this input"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule:0
+msgid "Computation"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.input,amount:0
+msgid ""
+"It is used in computation. For e.g. A rule for sales having 1% commission of "
+"basic salary for per product can defined in expression like result = "
+"inputs.SALEURO.amount * contract.wage*0.01."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.line:0 field:hr.payslip.line,amount_select:0
+#: field:hr.salary.rule,amount_select:0
+msgid "Amount Type"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,category_id:0 view:hr.salary.rule:0
+#: field:hr.salary.rule,category_id:0
+msgid "Category"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.run,credit_note:0
+msgid ""
+"If its checked, indicates that all payslips generated from here are refund "
+"payslips."
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_structure_list_form
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_structure_view
+msgid "Salary Structures"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.run:0
+msgid "Draft Payslip Batches"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 selection:hr.payslip,state:0 view:hr.payslip.run:0
+#: selection:hr.payslip.run,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 field:hr.payslip,date_from:0
+#: field:hr.payslip.run,date_start:0 report:paylip.details:0 report:payslip:0
+#: field:payslip.lines.contribution.register,date_from:0
+msgid "Date From"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.run:0
+msgid "Done Payslip Batches"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0
+msgid "Payslip Lines by Contribution Register:"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule:0
+msgid "Conditions"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,amount_percentage:0
+#: selection:hr.payslip.line,amount_select:0
+#: field:hr.salary.rule,amount_percentage:0
+#: selection:hr.salary.rule,amount_select:0
+msgid "Percentage (%)"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Worked Day"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payroll.structure:0
+msgid "Employee Function"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,credit_note:0 field:hr.payslip.run,credit_note:0
+msgid "Credit Note"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Compute Sheet"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,active:0 field:hr.salary.rule,active:0
+msgid "Active"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule:0
+msgid "Child Rules"
+msgstr ""
+
+#. module: hr_payroll
+#: constraint:hr.employee:0
+msgid "Error ! You cannot create recursive Hierarchy of Employees."
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.report.xml,name:hr_payroll.payslip_details_report
+msgid "PaySlip Details"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,condition_range_min:0
+#: help:hr.salary.rule,condition_range_min:0
+msgid "The minimum amount, applied for this rule."
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.payslip.line,condition_select:0
+#: selection:hr.salary.rule,condition_select:0
+msgid "Python Expression"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "Designation"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py:52
+#, python-format
+msgid "You must select employee(s) to generate payslip(s)"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:861
+#, python-format
+msgid "Wrong quantity defined for salary rule %s (%s)"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Companies"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "Authorized Signature"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,contract_id:0 field:hr.payslip.input,contract_id:0
+#: field:hr.payslip.line,contract_id:0
+#: field:hr.payslip.worked_days,contract_id:0
+#: model:ir.model,name:hr_payroll.model_hr_contract
+msgid "Contract"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "Credit"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.contract,schedule_pay:0
+msgid "Scheduled Pay"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:861
+#: code:addons/hr_payroll/hr_payroll.py:866
+#: code:addons/hr_payroll/hr_payroll.py:872
+#: code:addons/hr_payroll/hr_payroll.py:889
+#: code:addons/hr_payroll/hr_payroll.py:895
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,condition_python:0
+#: field:hr.salary.rule,condition_python:0
+msgid "Python Condition"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.contribution.register:0
+msgid "Contribution"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:347
+#, python-format
+msgid "Refund Payslip"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.rule.input,input_id:0
+#: model:ir.model,name:hr_payroll.model_hr_rule_input
+msgid "Salary Rule Input"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:895
+#, python-format
+msgid "Wrong python condition defined for salary rule %s (%s)"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,quantity:0 field:hr.salary.rule,quantity:0
+msgid "Quantity"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Refund"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule:0
+msgid "Company Contribution"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 field:hr.payslip.input,code:0
+#: field:hr.payslip.line,code:0 field:hr.payslip.worked_days,code:0
+#: field:hr.rule.input,code:0 field:hr.salary.rule,code:0
+#: field:hr.salary.rule.category,code:0 report:paylip.details:0
+#: report:payslip:0
+msgid "Code"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,amount_python_compute:0
+#: selection:hr.payslip.line,amount_select:0
+#: field:hr.salary.rule,amount_python_compute:0
+#: selection:hr.salary.rule,amount_select:0
+msgid "Python Code"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.input,sequence:0 field:hr.payslip.line,sequence:0
+#: field:hr.payslip.worked_days,sequence:0 field:hr.salary.rule,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 report:paylip.details:0
+msgid "Register Name"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule:0
+msgid "General"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:664
+#, python-format
+msgid "Salary Slip of %s for %s"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.model,name:hr_payroll.model_hr_payslip_employees
+msgid "Generate payslips for all selected employees"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.contract,struct_id:0 view:hr.payroll.structure:0 view:hr.payslip:0
+#: view:hr.payslip.line:0
+#: model:ir.model,name:hr_payroll.model_hr_payroll_structure
+msgid "Salary Structure"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.contribution.register,register_line_ids:0
+msgid "Register Line"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.payslip.employees:0
+#: view:payslip.lines.contribution.register:0
+msgid "Cancel"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.run:0 selection:hr.payslip.run,state:0
+msgid "Close"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip,struct_id:0
+msgid ""
+"Defines the rules that have to be applied to this payslip, accordingly to "
+"the contract chosen. If you let empty the field contract, this field isn't "
+"mandatory anymore and thus the rules applied will be all the rules set on "
+"the structure of all contracts of the employee valid for the chosen period"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payroll.structure,children_ids:0
+#: field:hr.salary.rule.category,children_ids:0
+msgid "Children"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip,credit_note:0
+msgid "Indicates this payslip has a refund of another"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Bi-monthly"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0
+msgid "Pay Slip Details"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payslip_form
+#: model:ir.ui.menu,name:hr_payroll.menu_department_tree
+msgid "Employee Payslips"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.line:0 field:hr.payslip.line,register_id:0
+#: field:hr.salary.rule,register_id:0
+#: model:ir.model,name:hr_payroll.model_hr_contribution_register
+msgid "Contribution Register"
+msgstr ""
+
+#. module: hr_payroll
+#: view:payslip.lines.contribution.register:0
+msgid "Print"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,help:hr_payroll.action_contribution_register_form
+msgid ""
+"A contribution register is a third party involved in the salary payment of "
+"the employees. It can be the social security, the estate or anyone that "
+"collect or inject money on payslips."
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:889
+#, python-format
+msgid "Wrong range condition defined for salary rule %s (%s)"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.line:0
+msgid "Calculations"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Worked Days"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Search Payslips"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.run:0
+#: model:ir.actions.act_window,name:hr_payroll.action_hr_payslip_run_tree
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_payslip_run
+msgid "Payslips Batches"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.contribution.register:0 field:hr.contribution.register,note:0
+#: field:hr.payroll.structure,note:0 field:hr.payslip,name:0
+#: field:hr.payslip,note:0 field:hr.payslip.input,name:0
+#: view:hr.payslip.line:0 field:hr.payslip.line,note:0
+#: field:hr.payslip.worked_days,name:0 field:hr.rule.input,name:0
+#: view:hr.salary.rule:0 field:hr.salary.rule,note:0
+#: field:hr.salary.rule.category,note:0
+msgid "Description"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid ")"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.contribution.register:0
+#: model:ir.actions.act_window,name:hr_payroll.action_contribution_register_form
+#: model:ir.ui.menu,name:hr_payroll.menu_action_hr_contribution_register_form
+msgid "Contribution Registers"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_reporting
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_root_payroll
+#: model:ir.ui.menu,name:hr_payroll.payroll_configure
+msgid "Payroll"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.report.xml,name:hr_payroll.contribution_register
+msgid "PaySlip Lines By Conribution Register"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.payslip,state:0
+msgid "Waiting"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "Address"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:866
+#, python-format
+msgid "Wrong percentage base or quantity defined for salary rule %s (%s)"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,worked_days_line_ids:0
+#: model:ir.model,name:hr_payroll.model_hr_payslip_worked_days
+msgid "Payslip Worked Days"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule.category:0
+msgid "Salary Categories"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 field:hr.contribution.register,name:0
+#: field:hr.payroll.structure,name:0 field:hr.payslip.line,name:0
+#: field:hr.payslip.run,name:0 field:hr.salary.rule,name:0
+#: field:hr.salary.rule.category,name:0 report:paylip.details:0
+#: report:payslip:0
+msgid "Name"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payroll.structure:0
+msgid "Payroll Structures"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.payslip.employees:0
+#: field:hr.payslip.employees,employee_ids:0 view:hr.payslip.line:0
+msgid "Employees"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "Bank Account"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,sequence:0 help:hr.salary.rule,sequence:0
+msgid "Use to arrange calculation sequence"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,condition_range:0
+#: help:hr.salary.rule,condition_range:0
+msgid ""
+"This will be used to compute the % fields values; in general it is on basic, "
+"but you can also use categories code fields in lowercase as a variable names "
+"(hra, ma, lta, etc.) and the variable basic."
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Annually"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,input_line_ids:0
+msgid "Payslip Inputs"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,salary_rule_id:0
+msgid "Rule"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,name:hr_payroll.action_hr_salary_rule_category_tree_view
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_salary_rule_category_tree_view
+msgid "Salary Rule Categories Hierarchy"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 field:hr.payslip.line,total:0
+#: report:paylip.details:0 report:payslip:0
+msgid "Total"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,appears_on_payslip:0
+#: help:hr.salary.rule,appears_on_payslip:0
+msgid "Used for the display of rule on payslip"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.line:0
+msgid "Search Payslip Lines"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Details By Salary Rule Category"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.input,code:0 help:hr.payslip.worked_days,code:0
+#: help:hr.rule.input,code:0
+msgid "The code that can be used in the salary rules"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.run:0
+#: model:ir.actions.act_window,name:hr_payroll.action_hr_payslip_by_employees
+msgid "Generate Payslips"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Bi-weekly"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.employee,total_wage:0
+msgid "Total Basic Salary"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.payslip.line,condition_select:0
+#: selection:hr.salary.rule,condition_select:0
+msgid "Always True"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0
+msgid "PaySlip Name"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,condition_range:0
+#: field:hr.salary.rule,condition_range:0
+msgid "Range Based on"
+msgstr ""
diff --git a/addons/hr_recruitment/__openerp__.py b/addons/hr_recruitment/__openerp__.py
index fe6c86c684d..0de2eb5c94e 100644
--- a/addons/hr_recruitment/__openerp__.py
+++ b/addons/hr_recruitment/__openerp__.py
@@ -24,7 +24,7 @@
'version': '1.0',
'category': 'Human Resources',
"sequence": 24,
- "summary": "Job Descriptions, Recruitment Process",
+ "summary": "Recruitment Process, Job Descriptions",
'description': """
Manages job positions and the recruitment process.
==================================================
diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml
index 4617011c2f9..fd68dc5136c 100644
--- a/addons/hr_recruitment/hr_recruitment_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_view.xml
@@ -1,23 +1,21 @@
<?xml version="1.0"?>
<openerp>
<data>
- <menuitem
- id="menu_hr_recruitment_recruitment"
- name="Recruitment"
- parent="hr.menu_hr_configuration"
- sequence="40" />
- <act_window
- id="act_hr_applicant_to_meeting"
- name="Meetings"
- res_model="crm.meeting"
- src_model="hr.applicant"
- view_mode="tree,form,calendar,graph"
- view_type="form"/>
+ <menuitem name="Recruitment"
+ id="menu_hr_recruitment_recruitment"
+ parent="hr.menu_hr_configuration"
+ sequence="40"/>
- # ------------------------------------------------------
- # Stage
- # ------------------------------------------------------
+ <act_window
+ id="act_hr_applicant_to_meeting"
+ name="Meetings"
+ res_model="crm.meeting"
+ src_model="hr.applicant"
+ view_mode="tree,form,calendar,graph"
+ view_type="form"/>
+
+ <!-- Stage -->
<record id="hr_job_stage_act" model="ir.actions.act_window">
<field name="name">Recruitment / Applicants Stages</field>
<field name="res_model">hr.recruitment.stage</field>
@@ -28,10 +26,7 @@
</record>
- # ------------------------------------------------------
- # Jobs
- # ------------------------------------------------------
-
+ <!-- Jobs -->
<!-- Applicant Read/Unread actions -->
<record id="actions_server_applicant_unread" model="ir.actions.server">
<field name="name">Mark unread</field>
@@ -44,9 +39,9 @@
<record id="action_applicant_unread" model="ir.values">
<field name="name">action_project_unread</field>
<field name="action_id" ref="actions_server_applicant_unread"/>
- <field name="value" eval="'ir.actions.server,' + str(ref('actions_server_applicant_unread'))" />
+ <field name="value" eval="'ir.actions.server,' + str(ref('actions_server_applicant_unread'))"/>
<field name="key">action</field>
- <field name="model_id" ref="model_hr_applicant" />
+ <field name="model_id" ref="model_hr_applicant"/>
<field name="model">hr.applicant</field>
<field name="key2">client_action_multi</field>
</record>
@@ -62,9 +57,9 @@
<record id="action_applicant_read" model="ir.values">
<field name="name">action_project_read</field>
<field name="action_id" ref="actions_server_applicant_read"/>
- <field name="value" eval="'ir.actions.server,' + str(ref('actions_server_applicant_read'))" />
+ <field name="value" eval="'ir.actions.server,' + str(ref('actions_server_applicant_read'))"/>
<field name="key">action</field>
- <field name="model_id" ref="model_hr_applicant" />
+ <field name="model_id" ref="model_hr_applicant"/>
<field name="model">hr.applicant</field>
<field name="key2">client_action_multi</field>
</record>
@@ -175,12 +170,12 @@
<group string="Contract">
<label for="salary_expected"/>
<div>
- <field name="salary_expected" class="oe_inline"/>,
+ <field name="salary_expected" class="oe_inline"/>,
<field name="salary_expected_extra" class="oe_inline" placeholder="Extra advantages..."/>
</div>
<label for="salary_proposed"/>
<div>
- <field name="salary_proposed" class="oe_inline"/>,
+ <field name="salary_proposed" class="oe_inline"/>,
<field name="salary_proposed_extra" class="oe_inline" placeholder="Extra advantages..."/>
</div>
</group>
@@ -222,10 +217,10 @@
<filter icon="terp-document-new" string="New" name="filter_new"/>
<field name="partner_name" filter_domain="['|','|',('name','ilike',self),('partner_name','ilike',self),('email_from','ilike',self)]" string="Subject / Applicant"/>
<separator orientation="vertical"/>
- <filter icon="terp-document-new" string="New"
+ <filter icon="terp-document-new" string="New"
domain="[('state','=','draft')]"
help="All Initial Jobs"/>
- <filter icon="terp-camera_test" string="In Progress"
+ <filter icon="terp-camera_test" string="In Progress"
domain="[('state','=','open')]"
help="Open Jobs"/>
<filter icon="terp-gtk-media-pause" string="Pending"
@@ -260,7 +255,6 @@
</record>
<!-- CRM Lead Calendar View -->
-
<record model="ir.ui.view" id="hr_applicant_calendar_view">
<field name="name">Hr Applicants Calendar</field>
<field name="model">hr.applicant</field>
@@ -269,15 +263,14 @@
<field name="arch" type="xml">
<calendar string="Applicants"
date_start="date_action" color="user_id">
- <field name="name" />
- <field name="partner_name" />
+ <field name="name"/>
+ <field name="partner_name"/>
<field name="title_action"/>
</calendar>
</field>
</record>
- <!-- hr Applicant Kanban View -->
-
+ <!-- Hr Applicant Kanban View -->
<record model="ir.ui.view" id="hr_kanban_view_applicant">
<field name="name">Hr Applicants kanban</field>
<field name="model">hr.applicant</field>
@@ -346,10 +339,7 @@
</field>
</record>
- # ------------------------------------------------------
- # HR Job
- # ------------------------------------------------------
-
+ <!-- HR Job -->
<record id="hr_job_survey" model="ir.ui.view">
<field name="name">hr.job.form1</field>
<field name="model">hr.job</field>
@@ -357,20 +347,19 @@
<field name="inherit_id" ref="hr.view_hr_job_form"/>
<field name="arch" type="xml">
<field name="no_of_recruitment" version="7.0" position="after">
- <label for="survey_id" />
- <div>
- <field name="survey_id" class="oe_inline"/>
- <button class="oe_inline"
- string="Interview" icon="gtk-print"
- name="action_print_survey" type="object"
- attrs="{'invisible':[('survey_id','=',False)]}"/>
- </div>
+ <label for="survey_id" groups="base.group_user"/>
+ <div groups="base.group_user">
+ <field name="survey_id" class="oe_inline"/>
+ <button class="oe_inline"
+ string="Interview" icon="gtk-print"
+ name="action_print_survey" type="object"
+ attrs="{'invisible':[('survey_id','=',False)]}"/>
+ </div>
</field>
</field>
</record>
-<!-- Stage Tree View -->
-
+ <!-- Stage Tree View -->
<record model="ir.ui.view" id="hr_recruitment_stage_tree">
<field name="name">hr.recruitment.stage.tree</field>
<field name="model">hr.recruitment.stage</field>
@@ -385,8 +374,7 @@
</field>
</record>
-<!-- Stage Form View -->
-
+ <!-- Stage Form View -->
<record model="ir.ui.view" id="hr_recruitment_stage_form">
<field name="name">hr.recruitment.stage.form</field>
<field name="model">hr.recruitment.stage</field>
@@ -405,8 +393,7 @@
</field>
</record>
-<!-- Stage Action -->
-
+ <!-- Stage Action -->
<record id="hr_recruitment_stage_act" model="ir.actions.act_window">
<field name="name">Stages</field>
<field name="res_model">hr.recruitment.stage</field>
@@ -422,8 +409,7 @@
action="hr_recruitment_stage_act"
sequence="1" groups="base.group_no_one"/>
-<!-- Degree Tree View -->
-
+ <!-- Degree Tree View -->
<record model="ir.ui.view" id="hr_recruitment_degree_tree">
<field name="name">hr.recruitment.degree.tree</field>
<field name="model">hr.recruitment.degree</field>
@@ -436,8 +422,7 @@
</field>
</record>
-<!-- Degree Form View -->
-
+ <!-- Degree Form View -->
<record model="ir.ui.view" id="hr_recruitment_degree_form">
<field name="name">hr.recruitment.degree.form</field>
<field name="model">hr.recruitment.degree</field>
@@ -452,8 +437,7 @@
</field>
</record>
-<!-- Degree Action -->
-
+ <!-- Degree Action -->
<record id="hr_recruitment_degree_action" model="ir.actions.act_window">
<field name="name">Degree</field>
<field name="res_model">hr.recruitment.degree</field>
@@ -468,8 +452,7 @@
action="hr_recruitment_degree_action"
sequence="5" groups="base.group_no_one"/>
-<!-- Source Tree View -->
-
+ <!-- Source Tree View -->
<record model="ir.ui.view" id="hr_recruitment_source_tree">
<field name="name">hr.recruitment.source.tree</field>
<field name="model">hr.recruitment.source</field>
@@ -496,11 +479,12 @@
<field name="view_type">form</field>
</record>
- <menuitem
- id="menu_hr_recruitment_source"
- parent="menu_hr_recruitment_recruitment"
- action="hr_recruitment_source_action"
- sequence="10" groups="base.group_no_one"/>
+ <menuitem
+ id="menu_hr_recruitment_source"
+ parent="menu_hr_recruitment_recruitment"
+ action="hr_recruitment_source_action"
+ groups="base.group_no_one"
+ sequence="10"/>
</data>
</openerp>
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
index 54257f5efba..a4f08a854ec 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
@@ -126,6 +126,25 @@ class account_analytic_line(osv.osv):
'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing', help="It allows to set the discount while making invoice"),
}
+ def _default_journal(self, cr, uid, context=None):
+ proxy = self.pool.get('hr.employee')
+ record_ids = proxy.search(cr, uid, [('user_id', '=', uid)], context=context)
+ employee = proxy.browse(cr, uid, record_ids[0], context=context)
+ return employee.journal_id and employee.journal_id.id or False
+
+ def _default_general_account(self, cr, uid, context=None):
+ proxy = self.pool.get('hr.employee')
+ record_ids = proxy.search(cr, uid, [('user_id', '=', uid)], context=context)
+ employee = proxy.browse(cr, uid, record_ids[0], context=context)
+ if employee.product_id and employee.product_id.property_account_income:
+ return employee.product_id.property_account_income.id
+ return False
+
+ _defaults = {
+ 'journal_id' : _default_journal,
+ 'general_account_id' : _default_general_account,
+ }
+
def write(self, cr, uid, ids, vals, context=None):
self._check_inv(cr, uid, ids, vals)
return super(account_analytic_line,self).write(cr, uid, ids, vals,
diff --git a/addons/hr_timesheet_sheet/__openerp__.py b/addons/hr_timesheet_sheet/__openerp__.py
index cc788d95a83..1acaa5780b8 100644
--- a/addons/hr_timesheet_sheet/__openerp__.py
+++ b/addons/hr_timesheet_sheet/__openerp__.py
@@ -21,11 +21,11 @@
{
- 'name': 'Timesheets Validation',
+ 'name': 'Timesheets',
'version': '1.0',
'category': 'Human Resources',
"sequence": 16,
- "summary": "Attendances, Activities, Timing",
+ "summary": "Timesheets, Attendances, Activities",
'description': """
This module helps you to easily encode and validate timesheet and attendances within the same view.
===================================================================================================
diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py
index ee22b0c153f..323a647c334 100644
--- a/addons/mail/__openerp__.py
+++ b/addons/mail/__openerp__.py
@@ -24,7 +24,7 @@
'version': '1.0',
'category':'Social Network',
"sequence": 2,
- "summary": "Discussions, Feeds, Alerts",
+ "summary": "Discussions, Mailing Lists, News",
'description': """
A bussiness oriented Social Networking with a fully-integrated email
and message management.
diff --git a/addons/mail/data/mail_demo.xml b/addons/mail/data/mail_demo.xml
index 274259e544e..f9edb8b9e2f 100644
--- a/addons/mail/data/mail_demo.xml
+++ b/addons/mail/data/mail_demo.xml
@@ -29,10 +29,10 @@
<field name="model">mail.group</field>
<field name="res_id" ref="group_all_company"/>
<field name="content_subtype">html</field>
- <field name="body_html"><![CDATA[Lorem ipsum dolor <b>sit amet</b>, consectetur <em>adipiscing elit</em>. Pellentesque et quam sapien, in sagittis tellus.
- Praesent vel massa sed massa consequat egestas in tristique orci. Praesent iaculis libero et neque vehicula iaculis. Vivamus placerat tincidunt orci ac ornare. Proin ut dolor fringilla velit ultricies consequat. Maecenas sit amet ipsum non leo interdum imperdiet. Donec sapien mi, varius a consequat id, consectetur sit amet nulla.
+ <field name="body_html"><![CDATA[Lorem ipsum dolor <b>sit amet</b>, consectetur <em>adipiscing elit</em>. Pellentesque et quam sapien, in sagittis tellus.
+Praesent vel massa sed massa consequat egestas in tristique orci. Praesent iaculis libero et neque vehicula iaculis. Vivamus placerat tincidunt orci ac ornare. Proin ut dolor fringilla velit ultricies consequat. Maecenas sit amet ipsum non leo interdum imperdiet. Donec sapien mi, varius a consequat id, consectetur sit amet nulla.
-Fusce tempus elit volutpat mi auctor adipiscing. Nam congue luctus suscipit. Duis vestibulum dapibus enim vitae dignissim. Sed tellus libero, venenatis ut mollis ut, luctus quis dui. Sed rhoncus pulvinar orci in consectetur.
+Fusce tempus elit volutpat mi auctor adipiscing. Nam congue luctus suscipit. Duis vestibulum dapibus enim vitae dignissim. Sed tellus libero, venenatis ut mollis ut, luctus quis dui. Sed rhoncus pulvinar orci in consectetur.
Nulla turpis leo, rhoncus ut egestas sit amet, consectetur vitae urna. Mauris in dolor in sapien tempus vehicula.]]></field>
<field name="type">comment</field>
@@ -54,11 +54,11 @@ Nulla turpis leo, rhoncus ut egestas sit amet, consectetur vitae urna. Mauris in
<field name="model">mail.group</field>
<field name="res_id" ref="group_all_company"/>
<field name="content_subtype">html</field>
- <field name="body_html"><![CDATA[Agreed !
+ <field name="body_html"><![CDATA[Agreed !
Would it be possible to learn more about the author ? (second comment)]]></field>
<field name="parent_id" ref="message_blogpost0"/>
<field name="type">comment</field>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" ref="base.user_demo"/>
</record>
<record id="message_blogpost0_comment2_attachment0" model="ir.attachment">
@@ -76,10 +76,10 @@ Would it be possible to learn more about the author ? (second comment)]]></fiel
<field name="model">mail.group</field>
<field name="res_id" ref="group_all_company"/>
<field name="content_subtype">html</field>
- <field name="body_html"><![CDATA[Sure: Curabitur tempor bibendum diam, et euismod ante rutrum vel.
+ <field name="body_html"><![CDATA[Sure: Curabitur tempor bibendum diam, et euismod ante rutrum vel.
-In quis purus neque. Integer sodales dolor eu elit fringilla blandit. Maecenas lacus nisi, facilisis sit amet viverra eu, tristique vel augue.
-Donec viverra congue dui eu blandit. In lacinia molestie nulla, ut sagittis risus feugiat eu.
+In quis purus neque. Integer sodales dolor eu elit fringilla blandit. Maecenas lacus nisi, facilisis sit amet viverra eu, tristique vel augue.
+Donec viverra congue dui eu blandit. In lacinia molestie nulla, ut sagittis risus feugiat eu.
Check the file in attachment for more information ! (third comment)]]></field>
<field name="parent_id" ref="message_blogpost0"/>
diff --git a/addons/mail/mail_thread_view.xml b/addons/mail/mail_thread_view.xml
index f07e1e467ee..68727832e53 100644
--- a/addons/mail/mail_thread_view.xml
+++ b/addons/mail/mail_thread_view.xml
@@ -9,7 +9,8 @@
sequence="10"/>
<!-- left-side menu: Feeds !-->
- <menuitem id="mail_feeds" name="Feeds" parent="mail_feeds_main"/>
+ <menuitem id="mail_feeds" name="Feeds" parent="mail_feeds_main" groups="base.group_user" sequence="10"/>
+
<record id="mail_wallfeeds" model="ir.ui.menu">
<field name="name">News Feed</field>
<field name="sequence" eval="10"/>
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index 6a06cb33f1d..66a62c5b12d 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -4,19 +4,14 @@
<menuitem name="Configuration" id="menu_marketing_configuration" parent="base.marketing_menu" sequence="1"/>
- <!--
- ======================
- Marketing Campaign
- ======================
- -->
+ <!-- Marketing Campaign -->
<act_window name="All Segments"
res_model="marketing.campaign.segment"
src_model="marketing.campaign"
view_type="form"
view_mode="tree,form"
id="act_marketing_campaing_segment_opened"
- context="{'search_default_campaign_id': [active_id], 'default_campaign_id': active_id}"
- />
+ context="{'search_default_campaign_id': [active_id], 'default_campaign_id': active_id}"/>
<!-- Campaign Followups -->
<act_window
@@ -24,7 +19,7 @@
id="act_marketing_campaing_followup"
name="Campaign Follow-up" res_model="marketing.campaign.workitem"
src_model="marketing.campaign" view_mode="tree,form"
- view_type="form" />
+ view_type="form"/>
<record model="ir.ui.view" id="view_marketing_campaign_form">
<field name="name">marketing.campaign.form</field>
@@ -43,10 +38,10 @@
<div class="oe_right oe_button_box" name="button_box">
<button type="action"
name="%(act_marketing_campaing_followup)d"
- string="Follow-Up" />
+ string="Follow-Up"/>
<button type="action"
name="%(act_marketing_campaing_segment_opened)d"
- string="Segments" />
+ string="Segments"/>
</div>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
@@ -61,10 +56,10 @@
<field name="object_id"/>
<field name="partner_field_id"/>
<field name="unique_field_id"/>
- </group>
+ </group>
</group>
<separator string="Activities"/>
- <field name="activity_ids" context="{'default_object_id': object_id, 'default_campaign_id': active_id}" />
+ <field name="activity_ids" context="{'default_object_id': object_id, 'default_campaign_id': active_id}"/>
</sheet>
</form>
</field>
@@ -146,14 +141,9 @@
</record>
<menuitem name="Campaigns" id="menu_marketing_campaign" parent="base.marketing_menu"/>
- <menuitem id="menu_marketing_campaign_form" parent="menu_marketing_campaign" action="action_marketing_campaign_form" sequence="30" />
-
- <!--
- ======================
- Marketing Segments
- ======================
- -->
+ <menuitem id="menu_marketing_campaign_form" parent="menu_marketing_campaign" action="action_marketing_campaign_form" sequence="30"/>
+ <!-- Marketing Segments -->
<record model="ir.ui.view" id="view_marketing_campaign_segment_form">
<field name="name">marketing.campaign.segment.form</field>
<field name="model">marketing.campaign.segment</field>
@@ -202,7 +192,7 @@
<field name="campaign_id"/>
<field name="date_run"/>
<field name="sync_last_date"/>
- <field name="state" />
+ <field name="state"/>
</tree>
</field>
</record>
@@ -248,16 +238,12 @@
<field name="context">{'group_by': []}</field>
</record>
- <menuitem id="menu_marketing_campaign_segment_form" parent="menu_marketing_campaign" action="action_marketing_campaign_segment_form" sequence="20" />
+ <menuitem id="menu_marketing_campaign_segment_form" parent="menu_marketing_campaign" action="action_marketing_campaign_segment_form" sequence="20"/>
<!--
- ======================
- Marketing Activities
- ======================
-
- these views are not intended to be used outside the campaign context.
+ Marketing Activities
+ These views are not intended to be used outside the campaign context.
-->
-
<record model="ir.ui.view" id="view_marketing_campaign_activity_form">
<field name="name">marketing.campaign.activity.form</field>
<field name="model">marketing.campaign.activity</field>
@@ -285,7 +271,7 @@
<group>
<field name="type"/>
<field name="email_template_id" attrs="{'required':[('type','=','email')], 'invisible':[('type','!=','email')]}"
- context="{'default_model_id':object_id}" />
+ context="{'default_model_id':object_id}"/>
<field name="server_action_id" attrs="{'required':[('type','=','action')],'invisible':[('type','!=','action')]}" domain="[('model_id','=',object_id)]"/>
<field name="report_id" attrs="{'required':[('type','=','report')],'invisible':[('type','!=','report')]}" context="{'object_id':object_id}"/>
<field name="report_directory_id" attrs="{'required':[('type','=','report')],'invisible':[('type','!=','report')]}"/>
@@ -344,12 +330,7 @@
</record>
- <!--
- ======================
- Marketing Workitems
- ======================
- -->
-
+ <!-- Marketing Workitems -->
<record model="ir.ui.view" id="view_marketing_campaign_workitem_tree">
<field name="name">marketing.campaign.workitem.tree</field>
<field name="model">marketing.campaign.workitem</field>
@@ -358,10 +339,10 @@
<tree colors="red:state == 'exception';black:state == 'todo';gray:state == 'cancelled'" string="Marketing Campaign Activities">
<field name="campaign_id"/>
<field name="segment_id"/>
- <field name="activity_id" />
+ <field name="activity_id"/>
<field name="object_id" invisible="1"/>
<field name="res_id" invisible="1"/>
- <field name="res_name" />
+ <field name="res_name"/>
<field name="partner_id"/>
<field name="date"/>
<field name="state"/>
@@ -464,8 +445,7 @@
view_type="form"
view_mode="tree,form"
id="act_marketing_campaing_segment_opened"
- context="{'search_default_campaign_id': [active_id], 'default_campaign_id': active_id}"
- />
+ context="{'search_default_campaign_id': [active_id], 'default_campaign_id': active_id}"/>
<!-- Campaign Follow-ups -->
<act_window
@@ -473,7 +453,7 @@
id="act_marketing_campaing_followup"
name="Campaign Follow-up" res_model="marketing.campaign.workitem"
src_model="marketing.campaign" view_mode="tree,form"
- view_type="form" />
+ view_type="form"/>
<!-- Campaign Statistics -->
<act_window
@@ -481,7 +461,7 @@
id="act_marketing_campaing_stat"
name="Campaign Statistics" res_model="campaign.analysis"
src_model="marketing.campaign" view_mode="tree,form"
- view_type="form" />
+ view_type="form"/>
</data>
</openerp>
diff --git a/addons/marketing_campaign/marketing_campaign_workflow.xml b/addons/marketing_campaign/marketing_campaign_workflow.xml
index 4db60dbfa27..ad3fb0ddcca 100644
--- a/addons/marketing_campaign/marketing_campaign_workflow.xml
+++ b/addons/marketing_campaign/marketing_campaign_workflow.xml
@@ -1,16 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
-
- <!-- ==================Marketing Campaigns================== -->
-
+
+ <!-- Marketing Campaigns -->
<record id="wkf_marketing_campaign" model="workflow">
<field name="name">marketing.campaign.basic</field>
<field name="osv">marketing.campaign</field>
<field name="on_create">True</field>
</record>
- <!-- Activity -->
+ <!-- Activity -->
<record id="act_marketing_campaign_draft" model="workflow.activity">
<field name="wkf_id" ref="wkf_marketing_campaign"/>
<field name="flow_start">True</field>
@@ -32,7 +31,7 @@
<field name="kind">function</field>
<field name="action">state_done_set()</field>
</record>
-
+
<record id="act_marketing_campaign_cancel" model="workflow.activity">
<field name="wkf_id" ref="wkf_marketing_campaign"/>
<field name="name">cancel</field>
@@ -41,19 +40,19 @@
<field name="action">state_cancel_set()</field>
</record>
- <!-- Transition -->
+ <!-- Transition -->
<record id="trans_marketing_campaign_draft_running" model="workflow.transition">
<field name="act_from" ref="act_marketing_campaign_draft"/>
<field name="act_to" ref="act_marketing_campaign_running"/>
<field name="signal">state_running_set</field>
</record>
-
+
<record id="trans_campaign_running_done" model="workflow.transition">
<field name="act_from" ref="act_marketing_campaign_running"/>
<field name="act_to" ref="act_marketing_campaign_done"/>
<field name="signal">state_done_set</field>
</record>
-
+
<record id="trans_campaign_running_cancel" model="workflow.transition">
<field name="act_from" ref="act_marketing_campaign_running"/>
<field name="act_to" ref="act_marketing_campaign_cancel"/>
@@ -72,15 +71,14 @@
<field name="signal">state_draft_set</field>
</record>
- <!-- ==================Marketing Campaign Segment================== -->
-
+ <!-- Marketing Campaign Segment -->
<record id="wkf_marketing_campaign_segment" model="workflow">
<field name="name">marketing.campaign.segment.basic</field>
<field name="osv">marketing.campaign.segment</field>
<field name="on_create">True</field>
</record>
- <!-- Activity -->
+ <!-- Activity -->
<record id="act_marketing_campaign_segment_draft" model="workflow.activity">
<field name="wkf_id" ref="wkf_marketing_campaign_segment"/>
<field name="flow_start">True</field>
@@ -102,7 +100,7 @@
<field name="kind">function</field>
<field name="action">state_done_set()</field>
</record>
-
+
<record id="act_marketing_campaign_segment_cancel" model="workflow.activity">
<field name="wkf_id" ref="wkf_marketing_campaign_segment"/>
<field name="name">cancel</field>
@@ -111,19 +109,19 @@
<field name="flow_stop" eval="False"/>
</record>
- <!-- Transition -->
+ <!-- Transition -->
<record id="trans_marketing_campaign_segment_draft_running" model="workflow.transition">
<field name="act_from" ref="act_marketing_campaign_segment_draft"/>
<field name="act_to" ref="act_marketing_campaign_segment_running"/>
<field name="signal">state_running_set</field>
</record>
-
+
<record id="trans_campaign_segment_running_done" model="workflow.transition">
<field name="act_from" ref="act_marketing_campaign_segment_running"/>
<field name="act_to" ref="act_marketing_campaign_segment_done"/>
<field name="signal">state_done_set</field>
</record>
-
+
<record id="trans_campaign_segment_running_cancel" model="workflow.transition">
<field name="act_from" ref="act_marketing_campaign_segment_running"/>
<field name="act_to" ref="act_marketing_campaign_segment_cancel"/>
@@ -141,5 +139,6 @@
<field name="act_to" ref="act_marketing_campaign_segment_draft"/>
<field name="signal">state_draft_set</field>
</record>
+
</data>
</openerp>
diff --git a/addons/membership/membership.py b/addons/membership/membership.py
index 06b84ec80c5..b75a813f285 100644
--- a/addons/membership/membership.py
+++ b/addons/membership/membership.py
@@ -146,7 +146,7 @@ class membership_line(osv.osv):
'date_to': fields.date('To', readonly=True),
'date_cancel': fields.date('Cancel date'),
'date': fields.date('Join Date', help="Date on which member has joined the membership"),
- 'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Sale Price'), required=True, help='Amount for the membership'),
+ 'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Sale Price'), required=True, help='Amount for the membership'),
'account_invoice_line': fields.many2one('account.invoice.line', 'Account Invoice line', readonly=True),
'account_invoice_id': fields.related('account_invoice_line', 'invoice_id', type='many2one', relation='account.invoice', string='Invoice', readonly=True),
'state': fields.function(_state,
diff --git a/addons/membership/membership_view.xml b/addons/membership/membership_view.xml
index 5eea7170367..26fc7883ef1 100644
--- a/addons/membership/membership_view.xml
+++ b/addons/membership/membership_view.xml
@@ -19,9 +19,9 @@
<field name="categ_id" widget="selection" operator="child_of"/>
<newline/>
<group expand='0' string='Group by...'>
- <filter string='Category' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'categ_id'}" />
+ <filter string='Category' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'categ_id'}"/>
<separator orientation="vertical"/>
- <filter string='Date From' icon="terp-go-month" domain="[]" context="{'group_by' : 'membership_date_from'}" />
+ <filter string='Date From' icon="terp-go-month" domain="[]" context="{'group_by' : 'membership_date_from'}"/>
</group>
</search>
</field>
@@ -177,7 +177,7 @@
<filter icon="terp-personal" name="all_non_members" domain="[('membership_state', 'in', ['none','canceled','old','waiting'])]" string="All non Members" help="None/Canceled/Old/Waiting"/>
<filter icon="terp-personal" name="all_members" domain="[('membership_state', 'in', ['invoiced','paid','free'])]" string="All Members" help="Invoiced/Paid/Free"/>
<group expand="0" string="Group By..." colspan="10" col="8">
- <filter string="Salesperson" icon="terp-personal" domain="[]" context="{'group_by' : 'user_id'}" />
+ <filter string="Salesperson" icon="terp-personal" domain="[]" context="{'group_by' : 'user_id'}"/>
<filter string="Associate Member" name = "associate" icon="terp-partner" domain="[]" context="{'group_by':'associate_member'}"/>
<separator orientation="vertical"/>
<filter string=" Membership State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'membership_state'}"/>
@@ -288,7 +288,7 @@
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
<field name="list_price" position="after">
- <field name="member_price"/>
+ <field name="member_price" groups="base.group_user"/>
</field>
</field>
</record>
diff --git a/addons/mrp/__openerp__.py b/addons/mrp/__openerp__.py
index d7a14237eb0..eae0d004836 100644
--- a/addons/mrp/__openerp__.py
+++ b/addons/mrp/__openerp__.py
@@ -27,7 +27,7 @@
"website" : "http://www.openerp.com",
"category" : "Manufacturing",
"sequence": 18,
- "summary": "Manufacturing, Production, Bill of Materials",
+ "summary": "Manufacturing Orders, Bill of Materials, Routing",
"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": """
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index 3177d578997..0449f590127 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -686,8 +686,8 @@
</group>
<notebook>
<page string="Consumed Products">
- <group>
- <group groups="stock.group_locations">
+ <group groups="stock.group_locations">
+ <group>
<field name="bom_id" domain="[('product_id','=',product_id)]" context="{'default_product_id': product_id}" on_change="bom_id_change(bom_id)"/>
</group>
<group>
diff --git a/addons/mrp_operations/mrp_operations_workflow.xml b/addons/mrp_operations/mrp_operations_workflow.xml
index a728ee6f3a4..8d022558cf9 100644
--- a/addons/mrp_operations/mrp_operations_workflow.xml
+++ b/addons/mrp_operations/mrp_operations_workflow.xml
@@ -1,112 +1,106 @@
<?xml version="1.0"?>
<openerp>
<data>
- # -----------------------------------------------------------
- # Activities
- # -----------------------------------------------------------
+ <!-- Activities -->
<record model="workflow" id="wkf_prod_workcenter">
<field name="name">mrp.production.workcenter.line.basic</field>
<field name="osv">mrp.production.workcenter.line</field>
<field name="on_create">True</field>
</record>
- <record model="workflow.activity" id="prod_act_wc_draft">
- <field name="wkf_id" ref="wkf_prod_workcenter"/>
- <field name="flow_start">True</field>
- <field name="name">draft</field>
- <field name="kind">function</field>
- <field name="action">action_draft()</field>
- </record>
- <record model="workflow.activity" id="prod_act_wc_start">
- <field name="wkf_id" ref="wkf_prod_workcenter"/>
- <field name="name">startworking</field>
- <field name="kind">function</field>
- <field name="action">action_start_working()</field>
- </record>
- <record model="workflow.activity" id="prod_act_wc_cancel">
- <field name="wkf_id" ref="wkf_prod_workcenter"/>
- <field name="name">cancel</field>
- <field name="kind">function</field>
- <field name="action">action_cancel()</field>
- </record>
- <record model="workflow.activity" id="prod_act_wc_pause">
- <field name="wkf_id" ref="wkf_prod_workcenter"/>
- <field name="name">pause</field>
- <field name="kind">function</field>
- <field name="action">action_pause()</field>
- </record>
- <record model="workflow.activity" id="prod_act_wc_resume">
- <field name="wkf_id" ref="wkf_prod_workcenter"/>
- <field name="name">resume</field>
- <field name="kind">function</field>
- <field name="action">action_resume()</field>
- </record>
- <record model="workflow.activity" id="prod_act_wc_done">
- <field name="wkf_id" ref="wkf_prod_workcenter"/>
- <field name="name">done</field>
- <field name="kind">function</field>
- <field name="flow_stop">True</field>
- <field name="action">action_done()</field>
- </record>
-
- # -----------------------------------------------------------
- # Transition
- # -----------------------------------------------------------
-
- <record model="workflow.transition" id="prod_trans_wc_draft_start">
- <field name="act_from" ref="prod_act_wc_draft"/>
- <field name="act_to" ref="prod_act_wc_start"/>
- <field name="signal">button_start_working</field>
- </record>
- <record model="workflow.transition" id="prod_trans_wc_start_done">
- <field name="act_from" ref="prod_act_wc_start"/>
- <field name="act_to" ref="prod_act_wc_done"/>
- <field name="signal">button_done</field>
- </record>
- <record model="workflow.transition" id="prod_trans_wc_draft_cancel">
- <field name="act_from" ref="prod_act_wc_draft"/>
- <field name="act_to" ref="prod_act_wc_cancel"/>
- <field name="signal">button_cancel</field>
- </record>
- <record model="workflow.transition" id="prod_trans_wc_cancel_draft">
- <field name="act_from" ref="prod_act_wc_cancel"/>
- <field name="act_to" ref="prod_act_wc_draft"/>
- <field name="signal">button_draft</field>
- </record>
- <record model="workflow.transition" id="prod_trans_wc_start_cancel">
- <field name="act_from" ref="prod_act_wc_start"/>
- <field name="act_to" ref="prod_act_wc_cancel"/>
- <field name="signal">button_cancel</field>
- </record>
- <record model="workflow.transition" id="prod_trans_wc_start_pause">
- <field name="act_from" ref="prod_act_wc_start"/>
- <field name="act_to" ref="prod_act_wc_pause"/>
- <field name="signal">button_pause</field>
- </record>
+ <record model="workflow.activity" id="prod_act_wc_draft">
+ <field name="wkf_id" ref="wkf_prod_workcenter"/>
+ <field name="flow_start">True</field>
+ <field name="name">draft</field>
+ <field name="kind">function</field>
+ <field name="action">action_draft()</field>
+ </record>
+ <record model="workflow.activity" id="prod_act_wc_start">
+ <field name="wkf_id" ref="wkf_prod_workcenter"/>
+ <field name="name">startworking</field>
+ <field name="kind">function</field>
+ <field name="action">action_start_working()</field>
+ </record>
+ <record model="workflow.activity" id="prod_act_wc_cancel">
+ <field name="wkf_id" ref="wkf_prod_workcenter"/>
+ <field name="name">cancel</field>
+ <field name="kind">function</field>
+ <field name="action">action_cancel()</field>
+ </record>
+ <record model="workflow.activity" id="prod_act_wc_pause">
+ <field name="wkf_id" ref="wkf_prod_workcenter"/>
+ <field name="name">pause</field>
+ <field name="kind">function</field>
+ <field name="action">action_pause()</field>
+ </record>
+ <record model="workflow.activity" id="prod_act_wc_resume">
+ <field name="wkf_id" ref="wkf_prod_workcenter"/>
+ <field name="name">resume</field>
+ <field name="kind">function</field>
+ <field name="action">action_resume()</field>
+ </record>
+ <record model="workflow.activity" id="prod_act_wc_done">
+ <field name="wkf_id" ref="wkf_prod_workcenter"/>
+ <field name="name">done</field>
+ <field name="kind">function</field>
+ <field name="flow_stop">True</field>
+ <field name="action">action_done()</field>
+ </record>
- <record model="workflow.transition" id="prod_trans_wc_pause_resume">
- <field name="act_from" ref="prod_act_wc_pause"/>
- <field name="act_to" ref="prod_act_wc_resume"/>
- <field name="signal">button_resume</field>
- </record>
+ <!-- Transition -->
+ <record model="workflow.transition" id="prod_trans_wc_draft_start">
+ <field name="act_from" ref="prod_act_wc_draft"/>
+ <field name="act_to" ref="prod_act_wc_start"/>
+ <field name="signal">button_start_working</field>
+ </record>
+ <record model="workflow.transition" id="prod_trans_wc_start_done">
+ <field name="act_from" ref="prod_act_wc_start"/>
+ <field name="act_to" ref="prod_act_wc_done"/>
+ <field name="signal">button_done</field>
+ </record>
+ <record model="workflow.transition" id="prod_trans_wc_draft_cancel">
+ <field name="act_from" ref="prod_act_wc_draft"/>
+ <field name="act_to" ref="prod_act_wc_cancel"/>
+ <field name="signal">button_cancel</field>
+ </record>
+ <record model="workflow.transition" id="prod_trans_wc_cancel_draft">
+ <field name="act_from" ref="prod_act_wc_cancel"/>
+ <field name="act_to" ref="prod_act_wc_draft"/>
+ <field name="signal">button_draft</field>
+ </record>
+ <record model="workflow.transition" id="prod_trans_wc_start_cancel">
+ <field name="act_from" ref="prod_act_wc_start"/>
+ <field name="act_to" ref="prod_act_wc_cancel"/>
+ <field name="signal">button_cancel</field>
+ </record>
+ <record model="workflow.transition" id="prod_trans_wc_start_pause">
+ <field name="act_from" ref="prod_act_wc_start"/>
+ <field name="act_to" ref="prod_act_wc_pause"/>
+ <field name="signal">button_pause</field>
+ </record>
- <record model="workflow.transition" id="prod_trans_wc_resume_pause">
- <field name="act_from" ref="prod_act_wc_resume"/>
- <field name="act_to" ref="prod_act_wc_pause"/>
- <field name="signal">button_pause</field>
- </record>
- <record model="workflow.transition" id="prod_trans_wc_resume_cancel">
- <field name="act_from" ref="prod_act_wc_resume"/>
- <field name="act_to" ref="prod_act_wc_cancel"/>
- <field name="signal">button_cancel</field>
- </record>
- <record model="workflow.transition" id="prod_trans_wc_resume_done">
- <field name="act_from" ref="prod_act_wc_resume"/>
- <field name="act_to" ref="prod_act_wc_done"/>
- <field name="signal">button_done</field>
- </record>
+ <record model="workflow.transition" id="prod_trans_wc_pause_resume">
+ <field name="act_from" ref="prod_act_wc_pause"/>
+ <field name="act_to" ref="prod_act_wc_resume"/>
+ <field name="signal">button_resume</field>
+ </record>
+ <record model="workflow.transition" id="prod_trans_wc_resume_pause">
+ <field name="act_from" ref="prod_act_wc_resume"/>
+ <field name="act_to" ref="prod_act_wc_pause"/>
+ <field name="signal">button_pause</field>
+ </record>
+ <record model="workflow.transition" id="prod_trans_wc_resume_cancel">
+ <field name="act_from" ref="prod_act_wc_resume"/>
+ <field name="act_to" ref="prod_act_wc_cancel"/>
+ <field name="signal">button_cancel</field>
+ </record>
+ <record model="workflow.transition" id="prod_trans_wc_resume_done">
+ <field name="act_from" ref="prod_act_wc_resume"/>
+ <field name="act_to" ref="prod_act_wc_done"/>
+ <field name="signal">button_done</field>
+ </record>
</data>
</openerp>
diff --git a/addons/point_of_sale/__openerp__.py b/addons/point_of_sale/__openerp__.py
index 9a39871f0c0..9d985d40408 100644
--- a/addons/point_of_sale/__openerp__.py
+++ b/addons/point_of_sale/__openerp__.py
@@ -25,7 +25,7 @@
'version': '1.0.1',
'category': 'Point Of Sale',
"sequence": 6,
- "summary": "Touchscreen to Manage your Shop",
+ "summary": "Touchscreen Interface for Shops",
'description': """
This module provides a quick and easy sale process.
===================================================
diff --git a/addons/portal/__openerp__.py b/addons/portal/__openerp__.py
index 70791995958..6dd22a46ca2 100644
--- a/addons/portal/__openerp__.py
+++ b/addons/portal/__openerp__.py
@@ -22,18 +22,20 @@
{
'name' : "Portal",
'version' : "1.0",
- 'depends' : ["base", "share"],
+ 'depends' : ["base", "share", "anonymous"],
'author' : "OpenERP SA",
'category': 'Portal',
'description': """
-This module defines 'portals' to customize the access to your OpenERP database for external users.
-==================================================================================================
+Customize access to your OpenERP database to external users by creating portals.
-A portal defines customized user menu and access rights for a group of users
-(the ones associated to that portal). It also associates user groups to the
-portal users (adding a group in the portal automatically adds it to the portal
-users). That feature is very handy when used in combination with the
-module 'share'.
+A portal defines a specific user menu and access rights for its members. This
+menu can ben seen by portal members, anonymous users and any other user that
+have the access to technical features (e.g. the administrator).
+Also, each portal member is linked to a specific partner.
+
+The module also associates user groups to the portal users (adding a group in
+the portal automatically adds it to the portal users, etc). That feature is
+very handy when used in combination with the module 'share'.
""",
'website': 'http://www.openerp.com',
'data': [
diff --git a/addons/portal/portal.py b/addons/portal/portal.py
index 399377e8ccc..2c8b2db587d 100644
--- a/addons/portal/portal.py
+++ b/addons/portal/portal.py
@@ -32,7 +32,7 @@ class portal(osv.osv):
_name = 'res.portal'
_description = 'Portal'
_inherits = {'res.groups': 'group_id'}
-
+
_columns = {
'group_id': fields.many2one('res.groups', required=True, ondelete='cascade',
string='Group',
@@ -53,40 +53,40 @@ class portal(osv.osv):
string='Widgets',
help='Widgets assigned to portal users'),
}
-
+
def copy(self, cr, uid, id, values, context=None):
""" override copy(): menu_action_id must be different """
values['menu_action_id'] = None
return super(portal, self).copy(cr, uid, id, values, context)
-
+
def create(self, cr, uid, values, context=None):
""" extend create() to assign the portal menu to users """
if context is None:
context = {}
-
+
# create portal (admin should not be included)
context['noadmin'] = True
portal_id = super(portal, self).create(cr, uid, values, context)
-
+
# assign menu action and widgets to users
if values.get('users') or values.get('menu_action_id'):
self._assign_menu(cr, uid, [portal_id], context)
if values.get('users') or values.get('widget_ids'):
self._assign_widgets(cr, uid, [portal_id], context)
-
+
return portal_id
-
+
def write(self, cr, uid, ids, values, context=None):
""" extend write() to reflect changes on users """
# first apply portal changes
super(portal, self).write(cr, uid, ids, values, context)
-
+
# assign menu action and widgets to users
if values.get('users') or values.get('menu_action_id'):
self._assign_menu(cr, uid, ids, context)
if values.get('users') or values.get('widget_ids'):
self._assign_widgets(cr, uid, ids, context)
-
+
# if parent_menu_id has changed, apply the change on menu_action_id
if 'parent_menu_id' in values:
act_window_obj = self.pool.get('ir.actions.act_window')
@@ -95,7 +95,7 @@ class portal(osv.osv):
if action_ids:
action_values = {'domain': [('parent_id', '=', values['parent_menu_id'])]}
act_window_obj.write(cr, uid, action_ids, action_values, context)
-
+
return True
def _assign_menu(self, cr, uid, ids, context=None):
@@ -131,26 +131,26 @@ portal()
class portal_override_menu(osv.osv):
"""
- extend res.portal with a boolean field 'Override Users Menu', that
+ Extend res.portal with a boolean field 'Override Users Menu', that
triggers the creation or removal of menu_action_id
"""
_name = 'res.portal'
_inherit = 'res.portal'
-
+
def _get_override_menu(self, cr, uid, ids, field_name, arg, context=None):
assert field_name == 'override_menu'
result = {}
for p in self.browse(cr, uid, ids, context):
result[p.id] = bool(p.menu_action_id)
return result
-
+
def _set_override_menu(self, cr, uid, id, field_name, field_value, arg, context=None):
assert field_name == 'override_menu'
if field_value:
self.create_menu_action(cr, uid, id, context)
else:
self.write(cr, uid, [id], {'menu_action_id': False}, context)
-
+
def create_menu_action(self, cr, uid, id, context=None):
""" create, if necessary, a menu action that opens the menu items below
parent_menu_id """
@@ -169,7 +169,7 @@ class portal_override_menu(osv.osv):
}
action_id = actions_obj.create(cr, uid, action_values, context)
self.write(cr, uid, [id], {'menu_action_id': action_id}, context)
-
+
_columns = {
'override_menu': fields.function(
_get_override_menu, fnct_inv=_set_override_menu,
diff --git a/addons/portal/portal_data.xml b/addons/portal/portal_data.xml
index 2cba3a1945a..74e08bc5343 100644
--- a/addons/portal/portal_data.xml
+++ b/addons/portal/portal_data.xml
@@ -1,13 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
- <data noupdate="1">
+ <data>
<record id="portal" model="res.portal">
<field name="name">Portal</field>
<field name="group_id" ref="group_portal_member"/>
- <field name="override_menu" eval="True"/>
- <field name="parent_menu_id" ref="portal_members_root_menu"/>
+ <field name="override_menu" eval="False"/>
</record>
+ <!-- Mail group for the company's news -->
+ <record id="company_news_feed" model="mail.group">
+ <field name="name">Company's news feed</field>
+ </record>
+
+ <record id="action_news" model="ir.actions.act_window">
+ <field name="name">News</field>
+ <field name="res_model">mail.group</field>
+ <field name="res_id" ref="company_news_feed"/>
+ <field name="view_mode">form</field>
+ </record>
+
+ <!-- Top menu item -->
+ <menuitem name="Portal"
+ id="portal_menu"
+ groups="base.group_no_one,portal.group_portal_member,anonymous.group_anonymous"
+ sequence="20"/>
+
+ <menuitem name="Our company" id="portal_company" parent="portal_menu" sequence="10"/>
+ <menuitem name="News" id="portal_company_news" parent="portal_company" sequence="10" action="action_news"/>
+
+ <!--
+ Create menu items that we'll leave empty for now - they'll be
+ filled up by other portal modules.
+ -->
+ <menuitem name="Orders" id="portal_orders" parent="portal_menu" sequence="20"/>
+ <menuitem name="Invoices and Payments" id="portal_invoices_payements" parent="portal_menu" sequence="30"/>
+ <menuitem name="Projects" id="portal_projects" parent="portal_menu" sequence="40"/>
+ <menuitem name="After Sale Services" id="portal_after_sales" parent="portal_menu" sequence="50"/>
+
</data>
</openerp>
diff --git a/addons/portal/portal_demo.xml b/addons/portal/portal_demo.xml
index 1776493eb32..e5b5ea2fe70 100644
--- a/addons/portal/portal_demo.xml
+++ b/addons/portal/portal_demo.xml
@@ -2,18 +2,58 @@
<openerp>
<data>
- <record id="portal_demo_user" model="res.users">
+ <!-- Create a portal member attached to a partner -->
+ <record id="demo_user0" model="res.users">
<field name="name">Demo Portal User</field>
<field name="login">portal</field>
<field name="password">portal</field>
<field name="avatar">/9j/4AAQSkZJRgABAQEASABIAAD/4RJ/RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAMAAAAcgEyAAIAAAAUAAAAfodpAAQAAAABAAAAkgAAANQAAABIAAAAAQAAAEgAAAABR0lNUCAyLjYuMTIAMjAxMjowNToyOSAxMjoxMjoyNgAABZAAAAcAAAAEMDIxMKAAAAcAAAAEMDEwMKABAAMAAAABAAEAAKACAAQAAAABAAAAlqADAAQAAAABAAAAlgAAAAAABgEDAAMAAAABAAYAAAEaAAUAAAABAAABIgEbAAUAAAABAAABKgEoAAMAAAABAAIAAAIBAAQAAAABAAABMgICAAQAAAABAAARRQAAAAAAAABIAAAAAQAAAEgAAAAB/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACWAJYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwCp9tT/AJ9lpftUROfs6j8BVEkggAZzXN+JtXeAmyiO3gGQ9zntXOlc2LGt+IlmLW2nW6LyQ85Ayf8Ad/xrlXTc5LyAtnLHr/OqjSlzy7Y9zShGznIxjuau1hXuXAQowkig46VXYgMffqaQDy17EnvinpGXDYXJCknHakMhDlicD6CnfcA+XFdf4I8Ow6v9rnm5WLau33OTn9K7FPCOnxEbYR05JwSaynWjF2ZrChKaujx7d6/qKsW975LLvBKKe3avUL/wRpV0rYjMbnowPINeda74futDuNkvzwv9yQdD7expwqxnognRlDUsrL55LLkgdqnsVR3PmDjNYum3fkvsY9Tge4rSSXYj4+8TV9TI2/Jsdy43deOa9fb7x+teH2ZJnijkkOXcAE9smvbyeTUTEx1A5pM8UqH+dZiJF4OPUUpOTmmKQGPrTu/FUgFD7Rk0UjEA4opiPNWU7cDrXmWsXZutSuJt2QznHbgcD9BXpsZDY9a8juQ3mtwSFJA/CtYFS2HpIoONuSenrU0Qd5ACAoHOAar26HfuatGBQASABVMSEK9T6Vu+GrQXtrrEITdL9iZ4/wDgDoxH5VkzQMtlFPg7ZHYfXGK3vB0hstQllP3fs8gI9cqT/wCy1nN+7oawXvJM3fhfOqrqsG4Bj5TAeo+YH+n5135IIryfwjLLpPipLeQECfMTD68j9cV6r0UCuOuvfudlB+5Yjk71ha5p8Wp2EtrKMBh8rd1bsa3D19ap3KrtLMwCjqT2rKLs7o2aurM8LuYZLO7khlXbJG5Vh7g1rQN5yCTHXk1d8b21t9tjvLSWORZQVl2MDhh0J+o/lWTo04dXtnbB/h969KL5o3PLnHlk0bVuUkvbQjAxKn8xXtp5NeJ2Vk5vrUZ585MD8RXtneokQHSlUkGk70Z54rMBwJ3/AI1JnmowpLufQZp8BBlwRnIqkDF6mik6Eiii4jzKKAQAnex57mvMb1JYr+eIRk7JXXdj0YivUQ28EVwWtJ5eq3Azwzlh+PNbR0LZkIkhPOEHp1JrVsbWS7mSCJSzMQOKzywBznjtXe+A7aPM1w4+ZRgE9hU1JcquVThzSsVNY09IoooI2UpasIgo/icqCx/M4/A1Qglm3tFZoSW6tnG5cFcD67sVcvrmO4SParOgLEKuSXdySf5kfifSq1lLdQaiLa2tzNqkpysZYBYxz1PT/JqVexo9zS1PQ9ditkvdtuZ4G879wDvXpx7gYHHtW9oPia+1Qobm3jVHHEiHv9Kxpp9Vt7j7OdRtnugceUqNjIbb97I/i4/XFR6FO8d0yiIx+ZIf3eOEkHVfy/lWdSL5feNac4uXunoEkyrGWrkdTs5NXuybq8ZLRTxEp6/h61015FI2lsU++FzXGXVrPdStGxdbZEEjYBxKcj5M/TNYUtzeo7Iq60fD/wDZk1haxQJOqbkZWBfcOefriuMsUJvAynBUhvwzg/zrtJrCO+09bRoofOWSNonhgK7MMdxyegK7eO5GfeuXubMad4jmtuQkb8f7pGR+hFdsbL3bnBNuS5mrG9pd3u1SzD9fPjA/76Fez5OTXjWnRRvfWDIMYuYz/wCPCvZCfmNKZkLSg9aTPNKCd341kMQkl8etTQ584D0qF1xJTlY7simIex+c+lFNH0opDPMGkYMF2nHrTP7I0a7ZJ7+zurmVkK4jkKoqg9cKQSev59KlfcnJGc1b0XUQI5/MhbfGjBffOP8A69VUbSujooKMpWkchr/hiws0S+0u5d7dn2tE5BK/Q/nwea29IhlstOKtuQHLNjqQKr6qklxeW8kwVUmcCOJVCgcjnjvyefet64yJDj7pI/LNQ5PlVzdU0puxqaHodlaWdu0kQN0EG5jztOOQPSlvtCtriYTwBobhekkZ2n86gS/IxzWhBeB8e9YOTvc2UFaxhtolyLnzZLqZzu3gAADd64A68DmtXTdNjtdrsgO05BPJz61qLIr9ajuJkiQbjtBIGfTNS6kpbgqcY7I0ktftNs0mAFx0J61zRtCs8kBxlTke4NT3viOxs0S2jnyOp3Nzj1+lUF1eK41a3jiy7tkNjnApuLWwJ9y4tiqDkAY9K4HxPbwp4tD4HMClj74I/kK9GupdqV5r4kIm18licCNRwf8Ae/xrXD35jHEq0CTSbmN9Y05BjBuoh7ffFeykZ+teGaQg/wCEh00g8fa4eP8AgYr3INk101EeeLjBNKx5FA5zTWrMBW+/7UJ1NIfvD3py9CaXUB2cDiikzkUUAeYfaVfKqckHnilhufKuFdecHnHpTBGquWHeo1i2E7epNatX0LTtqjodRnhvtEWGIxyygbgRCsbDBB28cZyo/wAmqihbiEOpyDyP8/XNZYfBwCQw9DSaJOzS3qu/76KXEgz95Typx69R/OsZ07I64VlJ2e5ohWjbB6VaglxiopMEgigDHIrBnQma8E+cc1adY54mjcAqwwQaxYZCD1ovdUmtYwILZ5XboR0B9z2FTy3ZbZof2XplnbsHZVD8FnPzH8aqltLsRAsU0auOQFOQM+9YMEV9qUplup4UPQB2yfoAOPzNPvtLaK28z7ZDkDBURk/1FacndjUFY2by7zEcnmvPNXJl1OZyTg42/gAP5g109pFJFpWZJvMOTgYxtHp1rm7ho5L5st8qELz9P8a1oqz0OLEO6sS6Rahdb0lhkFryEHJz/Gtez7gDzXkukyIdd0wZBP2uH/0MV6yRk1tM4iUdM0jE8e9N3HbQx4BrIY7kkU/imA8ZpwoEKSBRR+FFOwHkE9+QV8vBBFJb3U5yWUsp5zStarNHlOMcVPxCiRjGTWpRFHd+bKVC4amwyfYPEVrPnMd0PIk/3v4T/SrDR5dWAHFUNVEkkIjiBEoIeNh/Cw5Boeug07O5uzzeRLj+HtUkdyrjrTZFW9s4pwABLGrgD3Gf61jyLNbP8pyK5bJnbdo6FGyetXUClNvr1rl4dVMfDgj61q22sQtjLCpcWUpl+fS2uMYlMY9VHNVW0KBCGaaZyP7z5q8upQlcl1qtc6rbIjEyqPqaFcbaKGqSJaWrkH5QOlcSSHZmb7xOc+9aWsal9umCocRL09z61mooZhuPBrqpxsrnDVnzOyNLw4pOvaeQM4u4T/4+K9nA4rx/w5GU8R2WPu/aE/nXr6mie5kOOQOlHVaU9OPSmjmoYIcQOPenjtTCeQKdnmgBCeaKQmigDyzeiZ/hFJsVpA5bJxxSSoJDt6il8pQPfFalCs2DjNMYgEcZoTHJbrU1pZ3OoXIgtoy7n8h7k9hQxo0LOORNGtPNQo+04BOfl3HafxXB/GongE3bmtzVIVjkEcZOyMBFz6AYqjCnzc1xXu7nelZWMo6ej/KwqJ9AJOUcjNbhiHmdKkwR2p8zDlTMAaOIIy0ssjnoFDECoNStVi050RBk46dzmuglTc659azdRj8y3fjPNUpO+pLirHGOSX5BGPWmjcrDb09a65tCh1KNZA5ikIG5lGc/UVc0r4em+uzBFqkSu0bGISwkBmAztJBOOO/P0rojVi3bqck6Uopy6HPeHbrPiHTYyPma5jGf+BCvYwhzXnVr4Yv9D8Saabu0HltcLtljIdDzxyOnTvjpXpLxyQtskRkbGcMMGnNGN09hnPzfSkGSwNBPTHpSK1ZsaHMDuFO5yKQnLCn9xQAzoeaKG+9RTCx5foeh+IPEnm/2RYG4EJAkcyIgUnpyxGfwzXSXnwy1620yO5W7tZ71pNptI2wFHr5jEDPtj6EnivSbee301UhsbOK1tlYEpEgXPufU47mtOaJJUeMcpIv8+h/z7VdOUZp2Kqc0HqcbafDjSNN0qX+0S2pXzp/rA7RpGf8AZAIzzjk9cdBkiqkDW9pbmG1hjhjJyQgxk+/rXYtIzwBZDzjY31HBrg5sx3EqHgq7KcexqMXGyTQ8DUcpSjLcqagN7596oqNrc960ZkLjiqU0ZTtXKegNI5BNDcClAqGYkcChbldAbmoDF5sTjvVkL8nuabbr+9K+tAmNsEMfy4roNLU/2lbBTg78j8OazRb7GBArb0JN2pbv7iE/0qoLmqIxrS5aUn5DvEnmJoN9LG7I0a+ajKeQVYkVIklxdadoxEjbngVnJ5z8oz+pqPxnL9n8L3QBwZgsP4Hj+prVtbcLaWS4x5dqB+i/4V3T+I8qjpD5mbHKG+U8OGKke44qRfvGo71FTUbhB2bP5gH+tEe8dQSK4nWtJpnf7C8VKJYHIB9KUnBGKQEYyDxSZ5rVSTWhjKLjuBOTjvRQvPXrRTEW5L5mTY4zWppd01zZxNn5lZomz27j9QK5bzwWya2NDuA8E6j+CRWP5/8A1q58LJ89jqxcFyXNacATtg8OA4H6H+lcfq9uI9alx0kCyAemRj+Y/WutuOXRh1V2T8M5/oKwtdh23UFx/DsKN+B4/ma7qyvTZ5+Hly115lCK1BXpVbULddvFXEul7cVXuX83vXnHsIxmTbiqznmtKWHg1RK5JpovcauSAKt2kGZc4pkEG4Z960YFCGhiZKYBtrS0K32faZec8IP5/wBRWc0uK39HUDTw+fvuT/T+lb4ZXqHDjZWpNdznPHrf6BYxdnuufwVj/QV1Cj5EA/hgx/KuW8aAy3OmQry3mFgPc8f+zV1eMHA9Y1/8erpl8bOOC/dx+ZiXrA6tdEc/MB+goW4cDAqvdHGo3PP/AC0P86Fcd68ufxs9imvcXoiVpXDA9ifypJXkjw6DPqvr9KN4I6Ch/mWkm07ocoqSsyS3uY51LRtnHBU8FfqKKxLkSLLvjdo26bl64orpVZW1OSWHd9C990E1veF1ElnO2BzMB/Kiipw3xmmL/h/M0r5iiSEfwzx/kxUH+ZrP1UebpcmeoXdn6DP9KKK9H7LPJ2qRaOVSYt2p5cmiivMPcQMcrzUHlDIooqS0SRqEBAqYcAmiimSyJ3bBrq9OyulQ+uzP6UUV14X4mefj/hRzmoL9q8cafC33YlL/AFx0/lXYBQvPrIf0BH9BRRW32mc0fgj6fqzjJJN08sn952P607NFFeW9z2o7IlQ9BUmTj3ooqRlK5XkE/pRRRVok/9n/4Ql7aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pgo8eDp4bXBtZXRhIHhtbG5zOng9J2Fkb2JlOm5zOm1ldGEvJz4KPHJkZjpSREYgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjJz4KCiA8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcD0naHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyc+CiAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1M0IFdpbmRvd3M8L3htcDpDcmVhdG9yVG9vbD4KICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDExLTA1LTExVDAxOjMxOjI1KzAyOjAwPC94bXA6TWV0YWRhdGFEYXRlPgogIDx4bXA6TW9kaWZ5RGF0ZT4yMDExLTA1LTExVDAxOjMxOjI1KzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICA8eG1wOkNyZWF0ZURhdGU+MjAxMS0wNC0yN1QwMTozNzo0OCswMjowMDwveG1wOkNyZWF0ZURhdGU+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcE1NPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vJz4KICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjlGNDk1OTlGNUQ3QkUwMTE4M0E2RkQ1MjM3ODdBREI1PC94bXBNTTpJbnN0YW5jZUlEPgogIDx4bXBNTTpEb2N1bWVudElEIHJkZjpyZXNvdXJjZT0neG1wLmRpZDoyMTUxMUFDRjU4NzBFMDExQjE4OEJBMDcwREM1NDg5MicgLz4KICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6MjE1MTFBQ0Y1ODcwRTAxMUIxODhCQTA3MERDNTQ4OTI8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICA8eG1wTU06SGlzdG9yeT4KICAgPHJkZjpTZXE+CiAgIDwvcmRmOlNlcT4KICA8L3htcE1NOkhpc3Rvcnk+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSdodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyc+CiAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnBob3Rvc2hvcD0naHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyc+CiAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGU+c1JHQiBJRUM2MTk2Ni0yLjE8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiB4bWxuczp0aWZmPSdodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyc+CiAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgPHRpZmY6TmF0aXZlRGlnZXN0PjI1NiwyNTcsMjU4LDI1OSwyNjIsMjc0LDI3NywyODQsNTMwLDUzMSwyODIsMjgzLDI5NiwzMDEsMzE4LDMxOSw1MjksNTMyLDMwNiwyNzAsMjcxLDI3MiwzMDUsMzE1LDMzNDMyO0Q1MDVBNEM2MDlBQzIyNUVGMzcwM0UwMTE0NkQ4RTYzPC90aWZmOk5hdGl2ZURpZ2VzdD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24geG1sbnM6ZXhpZj0naHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8nPgogIDxleGlmOlBpeGVsWERpbWVuc2lvbj4yNTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zNzA8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogIDxleGlmOk5hdGl2ZURpZ2VzdD4zNjg2NCw0MDk2MCw0MDk2MSwzNzEyMSwzNzEyMiw0MDk2Miw0MDk2MywzNzUxMCw0MDk2NCwzNjg2NywzNjg2OCwzMzQzNCwzMzQzNywzNDg1MCwzNDg1MiwzNDg1NSwzNDg1NiwzNzM3NywzNzM3OCwzNzM3OSwzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM5Niw0MTQ4Myw0MTQ4NCw0MTQ4Niw0MTQ4Nyw0MTQ4OCw0MTQ5Miw0MTQ5Myw0MTQ5NSw0MTcyOCw0MTcyOSw0MTczMCw0MTk4NSw0MTk4Niw0MTk4Nyw0MTk4OCw0MTk4OSw0MTk5MCw0MTk5MSw0MTk5Miw0MTk5Myw0MTk5NCw0MTk5NSw0MTk5Niw0MjAxNiwwLDIsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMjAsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMzA7MTM3NUU3MDc1MjVBMTE0RjBBRkNBNzg4RTM2QzAyN0I8L2V4aWY6TmF0aXZlRGlnZXN0PgogPC9yZGY6RGVzY3JpcHRpb24+Cgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSdyJz8+Cv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAABAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAJYAlgMBEQACEQEDEQH/xAAeAAAABwEBAQEAAAAAAAAAAAAEBQYHCAkKAwIBAP/EADQQAAICAgIBAwMCBQQBBQEAAAECAwQFEQYSIQcTMQAIIhRBCRUjMlEWQmFxMxgkQ1KRcv/EAB0BAAEFAQEBAQAAAAAAAAAAAAQCAwUGBwgBAAn/xABBEQACAgEDAwMCBQEGAgoBBQABAgMRIQQSMQAFQRMiUQZhBxQycYFCFSNSkaGxJMEIFjNDcoLR4fDxF1NiY5LC/9oADAMBAAIRAxEAPwBpl9TsR2bvwLGOQdkD9H8f481CAQD8gqCAAQRs/WYxwspJMrLigy3ZNk5ojNc8jxWB1cfTJ4d7yGJNcfJHnji/4rruOfcZndZX4LjYmQeGMGO2uyQ39QVYyqlWbZ+Co8ka6lbxSNe2Zq20TbfqJFHkkkDHFfvyHoQIwd6iTKkFzubBJxWcVkHkUOK6qt+6H7yqnIpLvAvQbhWBxMZnuY3kXqRbo0Hv30i92F6fDkhjCQY6K0Gn/n8xn/mnVDj6sGPLXsg/p9IFctOwdhwmZL+7bmLvQOEZgi1fIUdeVMXdo3YAfpQu6IgPjaBuYf8A7azglrUXVpksWbN2eTMZ+rdyT2ZbOSmlMeQmmsSS+/KblzIyzkTq7+57U0Lk+4ZC3bsjyvrSbBsjKjaQtAxjNIDSAchaCK1ZvLEkj+jGxAllQuLuzbcGxZY7BRAA2n25JWzQyvJDRRocbmsfFLHW96GvIa3eWLr2JWGSvai6KfasQTQJCyzFBAsccxkZDgmi6F1BBuyQprdW725NcEkjOFPRQZUG1WU4BsFTtHAJGWIBrgH7XmkDclrR27B7fjZlVrVjbIolRHjdKik/0WMS2JbE5Kyujg+51KIPmcsbHA27Q15DsCSSBxaoeAdoahYy06i2VRd1uNEKCcWoxtokbj/WBQBGSQx5Ge29ha0DP7T9akMatplEjpIxK/1CzddovZezL2UsAe3t0QCbJNudx/Tiqsg0psHyCR00ypYpSKW2YDz8Ei7wCbBqqySSFG9hj4o1FE1UkVA4EQrv7hHUDTOzAMxI0Z3CJvxINsPXDvncSSDjcNu0HAObo3uFih/UR5bt46XaqAk4yCxNY9wUk/IFk5q6HQZ75Ud5HVVIKqLFeNVkOiYxsO6skqA+04kQF42Idu3REKKwQWJDAjPtzkgUT480CTQvNPUQAKY7qLEMeBd1YH70t+POOnG4b6mf6bs41crBLNhqE6shrntPVjaEwqldhIq/pYCQ705w6x9A0AjYmGx4yh9yhqamC7r+OVNGifm75sdPRSRxMrbbAItTfg5zVC75F4s11J6lnRyeSfI45p7MVcL2ru0paBWjLxH5Oz0O4HClJWH4E6/EDZJF7JArYJBINXySKF8cA0P2s9PTOJpGkVnVMbUUgqATXPJqhubk4JF9Lj0tp4jJZC2mZhEleO52lYkJKo89lDkNIGUsRpf7SfP76+07KFkFqhJY0QMsQRd3WV5sg+AOmVBUMdoJuxuyciwQaI+9efGcdSZbjXo81uj7JvmSO1X/AE6tZufhJ+pUqV7b12dtEa6ks2jrx9LtixoKQENkDdkquQbFAV8gDnk30wu8Kd9CxbVf7Z+Pi7q6HGetfNpmFq5tgdWJGiI3sKrygkAb3+XXyCfG/C9SfqmSggMBgCgrEGsngkXm/jyM9COF9NqW/a33Fk1fzZsZqweLwD9DMPbGhox77H/b/wBgefyB/wCdA/OtD6YmP34LA/GCfP8Asfj4469W9qULO1RXzY/3H3xX369xI8nhdN2lEX5EAB2JIYjbaGnU/J1seP2P21pVtBuWyCfFryD/AKVzefg9KLBSL5yQD8j7WP8A4PFdKKoRDMsIZJGlgd5RH/8AE6SGEpJ4/tLAMmgRphrR+X9Mm1wNwIkU2AaIK82a8f8ApkdNMdoJ2mwwNnzZJIBv4O3jj7kV3klM0sku12ZCP2ABCxgBf30Pj4GwCfG/D5hKzKxIbe24gWCBgXzxYN5zwLo24JVeNlogKKB/8pqsk34+M/IrromQNGBJJEZ/dboo8AKUG32B5DsSHIOvnegCB9PRptdpFa9wrkggXYHH/wAsdBuqlI/UABAYE+WN2MYwoIW+bx9zmenmkrz14ooWmMx20oZeignsCw8b8DWgNEAjYB2Jv1AyHNAeCDk3VCqP8ngWPt1PutELf6lB3YzkA/H/ANY/et374/uKy3F5bHpJx+wMUDUqX+X5COXd3JVclE0lPB1IgCI6bQ+1ayPfubqPHSkgECyJcktBCJow5olnZUWiFpFJdm8+VFA8cDkhidzAdi3vIUe1SSFYhVO6z7hRsnAU5N56qSt5+1kpusuSyqQSnax3bEUkbrKGQbhhljgUExtGIUFgH30iEdlZX9uYVViBAWJn3ZMYqvF025ybPttqqhYZsxxMs5a3faGUBSyMGUn3WLAUfCi1W1sVZAyLHXGeSRZ6wgihCtLdsMIolYRf+3Cr+nqJcIfu0Sri0AliIVgS/wBCNN7tuWN4CCrK0dzMxsoKpKJasnbYUFxwgKzoy2KslmO2wFCqrWqvgWoERDEkiQOpJrBGuHrSdvalmmchpo4PbDl5Nn2xGGl/pf8Axjuzf+MhkH4qxM7SOM+1QQFB80DZoAFuf2BA6XGpQbkFSG1DbVFHybGCQCckHBObsA4xeHtZCHItXpvYmp4a9fuSQxFxUqxVlhaeaRR0jh/WWqsBXsFmtWoIQxmswoUuyxqm6gztsU58MAwJIrPIJ4AOKB6fVHclU3OES3YH9Cx5s5wAzRAgf4hi2PVrf8LX7M+K/cSPVbmHKyLlHhMnF+PrjovdhJt8rq5zISZYTJ2VZIjhkqRrI34w2ZkiCPJ3Wj/WX1DqOxnRQ6ZFMmrEkpkZlIQRvGFiAx+oSWWvFDjb1e/of6Z0ffDrdVrSPT0hhh9Mkr6jzRtI72owY9oU4IoE1ZN3F47+HT6GYGaP9FxaJlEPWzbtJj7d23MyQdy7W6U08WjBGIvYdFEZHho2YnLtb9c/UGoaRXcxoz2FS1VRHdEEPmuaOCQWYUca9pfof6fhRWj06KwH6XCylt65YTNGdrb/AAK24/TjpsvVz+Fp9tvPalw1cFa43lbMc4hzFCxL+tr2pVX+vLKHjjsVTMpmlpWIpYejlqa05x7jP9v/ABB7/pGVWkTWQqob03VUQg3agKBWCfd7R4KupHUd3D8POwa0SCOKWCVrYTQsQyObFbG3A0wYkFdpUGyMbs7P3YfZ56jfatydMRyJ487xHNy2Rxbl9CMw0sq1VBJLRuVS08uLzEdfdh6c8rR2KwmnpWLsVS5NDs3079S6H6h07SQJ6Oph2nU6WU3IoNKrRsKSSJmG0uCXVqEiR7k3Yx9TfSeu+mp0TVBZdJqCfyuvjsRykG2jZATsmRCpKWRglS21kRsPRP1Abjl8Yi5O7JPNHXhjSITmzRncRpFGYkDxtj53inEkolRKLWfaWtBC2prVRtt37Sa9wyfcKJXyP1hXUWRRU0LG3qrJasUN80aJoA+f4r+bNA9SOoZ446jlP0zOly3bf2wjlWiHaQs7SDY0rkDqpDMG2DpQwjNGqushdRtLk5HN2KPHBv7DH8FTyqmOLBFeLUAE+Bir+Meckuh6cSySci4rgM7mZhY5FyPA4+vPNHLYasMlmKVD3FjBUSGESvIE9yIya6e7GOzKWDt9UjaQFYKOP6ML8VfnN+OOht4UMXa/a3OeMgfH+1c11t3sSKZZ9nTvK6rttlSzsSdE/l4Y7Oxsk+R4Ip70yKCdqvgYPIyOMiyOfsfPQUTWKAoDcQOf6hQz58gmv44PcSgQsV05ITz41/YB8bO1AOyDs/JP+DHsCCQxuyT/AP2z8DBNkCvPSwbRCLFKAKObFnGLHNXef9xuNkYhDsa/UxiQt8jfVR5bwAfk9RrY+Tr6KgDpG4qtpJarsGgTxVCybyDZ8Z68BDFGJNqKWwSPGf8AXzwa+3RhVliisWvz9yyJrAdepVRC06iPTKx7EhCzeAFChhve/p2BlUPm2omgo9tsOKF2R+33+Ok6gURmwW+2KFGvizePOPjoWGBkb2lPtmU9A/zrQ0CNEfJXR1sAn4J39PMrOqykkOgpQpG0++9xr9RwBt/2oW1GwVjGopWJJYmmAAs8EAeDzRocV18uzRwOYHX3FVy2gFJDMAP3VlA0ujr/AIG9qR9PSggew7aNHxmv2/38V19FKJK3KCKJAK2VyMWT9/jIHjrNjaqyGoK8DssoZY45FYB104XYZtBd+fJHkbI0R4mwoDEgX5Px4N8f6ngjiupygwCsRQs8ZJAb+KyTyDiq89Zl/uR9QLXPfVnn/J/1vvV8vynIfy+WKSGtJBgsUThsCZJIo4JJHgwtCoPds+xKXkMa/qHkb3bNooBHDGpUKVX3XZBDDfWDfLVtUFjtsgEAdQutJDuSwO81SgBlVeLKkELhTZxXnhS0eOzVJHSstQyySv1gMTma9KCvSKOB5GUKHTfuRsKtEmazGwi9+NHekiclmDbbv3G1Cg5ANYBJ4YW4NAY3dJikiIAI3MSpWssRZahRBCj9RrYBRrbnersHHlslkq0EsUOOrQf+7eCpPAZUEP8A4YGZKbwyREv7jCNq8kbtOys7O7WGTGgT9YZqVS7Koo4BO1TuQggckgkbioLUCEeWRxCFCKTuYKwa6sqT7BuBBLXutAaUsoJZfz1Afcld+kdPu/ZNsiykxuWVgSGYBKyjqT1mVTJ19tl+o0g76IOLGD973H7/APM/x1Ioli/CigMEFic7avijYNUxwDyJ2/ZB6fQeqHDPvB4tWxYv8qP2v8t5VxFwSJza9NPUn0d5lnsRFF7qLI+TxUSUa6D3HtItmFF8NHLW+/ar8rP2OWVysA7zDBMSMbdZou4RRu1E/wDZvTXwNqtd1Vk+nNKNdF9QQogbUf2RLqIeN7DR6nt88kIBwTKoUrndsL8AkGyf+BDyylRqfdRw97cMWTmf0kz9eo7MTZo0j6i4nI2aoO+xqS28THb2Aq/zCiNhu4jpv4nesR2mVVJRjrYGIGA+3SlFLC6HtlZaDYVjjF3T8L2V37vAzAGIaKZaH/aCtQsj2RYCvs5A/WuB4vzlmjkjb8VLOrCPYCaBILAsDvrrqBs9htAuvxByJY5HUszVuLCrLBtqYIJC48/a8/HWwCQK4RaDKBu2mwQvkEZJPPFc+T0hsqocSKoUMpYq3VVXt2A7DqxDbIBYHRUvsaZvobZRIXIrJW7vNWDgA0aomzjHPRyVtsth7zuI5/pJxRx4JwDZABPUGfun9IuO+unppyn065JGsUOUqe7isrGim3gM/UVpcPmqo0W7Y+97TSQArHeom1Smf9NZkVrH9O9xn7RrtPrICxMbASxsxCzxMdsyMeRuSyCSwWQrIoRkVuoX6h7Rpu9dr1HbdVSpOKhmpS+n1KAnT6mPcTukjlAIVtqshaI7UZw+N7mvHc56dc1z3E+Q1P5dn+J567ictWV0lWC9jbrwSSQTOjxzV5vbjlo2xF+ns1GrzvDJHN0bp3Szw6zTQ6qBy8OoiWVG4LJIik7l4UrZQqf0FCopRXXKWt0s+h1M+l1KmPU6aaSGdCbUSROUbbhbj3AtGQtFCpAo0JacVsvyTHQ5pYvbW1Gt26ihQsLSdJHVFEk/SNzIrIGlmKowDOzhtALEYfVUsMyMVI5q6C+Dj5+P8umpCZmU0R6aWSCCtnO7gED4F3+4A6kLxGzjcz6h+lFqu0Vc1/UHhkSPINSOp5Hi9VyIwfx7MOgOgrnyT8lG0gOSQcFjXgC7/wBOLq8A1z0MwKq5JsU3+Xu44+Kz/HW2qQiSd2JBIcn/ALVZG3o/kN70x/c+BrXxVGCsqst0pK1QBrjOcVXH+XPSUSgwBreWu7vK7fOOcCwPNjx1+VghZGBI6NvyQPOwDoHqW6kg+PGwQ37/AEK4J9Q4ULZBzncB+rPH3F0QTnjr1K2Gh5JB5yDRvND3D+OOeu1SeRHKdSVIMh/zskdvAI1tlXXwSW/4P0yjsG9p85skXRXBxVkHwTwRz0tUG0AmhgC+OfOR5APnF3XBERzyfriWADtPLLKvx4ZI+qkA/BK9gCfx2Tskn6WrEMKNH2iqN4AGDX+V/ufull3Ag1VDHBOQcHA8Dn9/HR8kweQgEgBCw8gsG7DWuu/nZ2d/A89m+pUkb/TrlN1BhdhlGLPABujnA4IyCylaa6Iuvkc85ocfN/er69hQ8rMfLdFBLnY+WPgKNk7JO9n5/wAn6QrMHZFyReLF17aLWQLu6rgEfcBQ2hbYlWO3N/q/UDWOPaB444x1m+xNiK+0BZgJDIheNXLMV9wL11tSu9gg7UnYP/BsFMGYm9lDI45yQT4/evFWeJxWUD2glrItixBwTdXxgWABi+L6yR83r33zV9Pamlgx+SuUoImeR4oY8fZ/RLE7ydbLmOOsqbtEyAxBYWid2U3aN1HkAlFAJrmgxAu9lsSTt24oHgDqt6mKV9rHcw3MVU0UwSpsWDgirIxWB5AniOKl/WtkMiXZolk6RJG8E00axtI6yM8ZRYUCsf6sb+2qsW7xoIgJq5rTZHYBos5IIAurAByNxGQxskqAbPRei07bt8i+8AhVoIwXBDWQuBjFHkG8ZkDxapAkEtqOtFX7lE/JITYlWPse08yRrO5WaRykczzlAeiSSKfcEdliFdnIOVJ9qMSVACLhQBliwIySCQBXUpEFLDaKX2hmNbmBFk7iM2bN3kC8AZWvJOJX6XAOKcvWvKtDlHIeS0oZVVilifDnHRRLEGd2lKM90t10rWEaLyYwAIZ1m1UsO4B4Y4XcAV7ZFJFYGao/NUaINmQk0kseig1TB1jnknQNzRVkQEAeVJlNVTMCM7aE8v4a2atemPqlyfkEvYU19G/VPG5GsymSO1Hf4fkeUSR+yxMUryRenTooZBo168bvFELBep/WEY1Xb4oY2/vT3DRMGWgw26mLSlmyDROsWgvtIDVTAnq2/RLx6TuE0ri1/s/XKylmG4mGScqBYBv8kyryQwXcVWj0f/w7c9yD7ffvSwvCMzFPBB6kSXPT/LwIW/Ts2ary5XAETiNUnFTM1MajSxq0ErGYwBlkjsRDfWGmh7t9NPqlIP5StZDuw4VG9KTmipdHdtrLYJUV+non6Nnk7N9Trp3Ubdbu08gBsD1R6kXA2tucKq7aTawKWSCNUquIa0UZLR9/x6lfyIUAr8KejlWKgE68yHf7/WAuArOMlQWA8ZJraSxNHhas5oDPW+RbpXZgOTQbK5JJBN1zzQAJ+BjpM2dF2Vis0fypVtqjEtvZQHyAFDAoQey/jo+fVkIQIRRG7ahu6OOeTjGcHokxttySSMnaxoDxZwAACaz58WB0zvOatBa1m7cuVadGukn6uxZmSvBXjRmklaSaZ0jQJEG8kLvpryV39G6feXWOFGlYgCo1LnIFgDBP6vcLIArIWiG9QAsTPKRCgKsHkICjbe1y5KlVNFrLAVZJI9oy7fxSeE8Bb1D456remvJOO8mpcwpWsBzf/TmaxuTOJ5Xxz24sbfytarcnlqnkGHkiq1WhijrS2OM27Fpo7uSWW5vn4f6nXfkpe36/Tz6dtM6TaUamJ0EmnnILrAWC7hFKGLKw3KdQu1dkZA59/EjQ6P8AtHT9z0U0E6a6N4dU2nkWX0tTAQsMjqCSonipQRYYQOWKSyKzRS+2zk9bIVszwLJX2q2ZFeXDjYY2Krsnv04y4b86zr70ehuSEzNsrXIF018WypgoNim20QGGCaPjNePOCesxindVmTHu3CqH6M8YBIsGj8jGb6mp6X+mWTn9SPS2A2la4/qLwd6dZWSNJpf9T4o14w8oSNTNKEi3LJGiMS7uiKfqOLj05QRkxP4GBTXiquwASRjixd9elAVOWyjUDXGR8Eg/v+4zxtjIRZHVW0WYkkgn/wAjswBA+PwCLr5J2QfP1TJmKjaoxuZmNgUbBXnixVfPjNnpIxwDyT+xOSbPgE8eMAAY65a7O6+NsygHxvXjRA/yCG/Hx5bxvWw0ztgsPaSCwBGQBtI8ZIYmgQcXdZ68G1Vc0QBdCycmjQyfJOM/PFdfWkPvP7eixYxhdAdQBvR0OpBBI2Pgjx5I0Mw2yVdYXHyWRbJ+bs0eBWCOOlgExirznIugM+fg5zRJ6NYqsst/K2u+v0lWOx7YI3IoMcUhVdaJLSqAD4HVv7SDqTEStvkUC4o1lIz71AQGj4INg8V56b9QBYxXuZirEjJIJ8YrjkYOTVVZtxSWOfNx17URlWeCyF7BeitHDKwLdyTpG8L87OvnZ+vICZNQL5ZHo22CVYLVHkGseRkDA6bnX2WCqhaJ5o5o+DRzk0KAJ4oj2ziCaWJ9gxu0ZPbe2jPU6/bXjxrx438n6HjLrI1tWGFsMmmA81fHP+Xnr4xhvb5WsihisDybsk/z8V1mV49xSHiUNmdMpkLjSWFmeS1aknAQDbonukkKWAOt9T42Trza0LybwzMfYSMFbxjJ++fPk31NbFT9IGWsXWCDuoWattoUVm2PWZD1OxfJMH6mc54zBhprSYTn3NMWciabRpJJiOT5jGlY5NtKq94HaZDI0Zk6942VFP1bYnhMSyNKoLRpcd5Fopz5BF1jAJ+buG9aYOYooL9NnTc1KoCuyg15LgbmNgWSRnomxWNzssimz+kxFcSIJoIg9q1ZSORG/TyWWREqpIyqXKTSyKyKDE3iP6akeACqeVqtGchY1u13BAx3NVgAgA7snHSwmoYguY4l/VSe8vtP6aIG0E8nPFVZB6lT6VcAzvqJn8Jw/jdK5kL2ZyNPGqldYllY2ZtswaT2K6M7pI0KSSJG61zG/wCRXUPrtbDooJdTNIqLHGzKZCWHtF5Qe4gteALIFgc9WDtmgk108WnhjZi0iCkAG0PbWN1KLAcJeCV2miQDYh9x/pDjMFhuK8Nwt/H2cV6P5qhwSri6SRxwZfm2S4xjc/yzktq6A1228WfzsGEFedYocbDxnKWFMT2cs1mndm7lJqHk1U0bLJr1bV7pLLRwLM8cERGFUFIjKGvJmiTAWJRbO/aERRw6OFlMPbZE0Y/wSaiTTq+pmumdmjkcwKoLKiad6q5N7DcU5BylMhe476UYie1LknKXMrLYfGQ5njs+MyPDZcBiBHRsZG4/KpecWcQUo1hNcqtfSoYYqFrJ0Z2WKBohJrSxKANsFOY5d8eojllQlQEgOmMpDsFDiMk/3i7ofSTTLIyaUbTISrFbQyxGGTTCJSoLD8wmoZDtB3Bto2bWYSq9c/tY+8jAcTwvqwuP9N5ea+n2cn9S4k9N6uVXmWHkmGEtyYOi0cpx+QxXCocHQlxeJxqqlI4+5Fg3yKXBBbquj+ofp19TL29vzkel1sSaINrGjGlmAMyLISW3xPqjOQXcAvvRmCemSly7h9Od+/s+HusUmgk12inbXlNGs35qyVdooQy+lNHpY41KLEbLJUXqOwXqdv2mffF6w+uz4efn3B+NUcJmqc8lXk/HL0sNebJUzNBej/QSZC+8Xa5WlRopFrNERE0QnhsROaR9S/THbO1CRNHrdU08Mqo2m1CeoQsg3C5AiKQqEOpZySoNjcpHV/8Apj6h13dYIp9To4IIJoxs1OnkXa7Rkoysu9hXqBxiiTtI9rKTY3luR06WKs3ySAsUkqL5G9KW0FQbAJXwyqzbBBUD8hTFhJoFwWwQTW6waWuLAs4I8gmxzannZVBIpTmh/UBwTge0eaIBsDPVRHrj6dZr7h+cXLHqT6qX8P6TYy0j1eGYSxcmjs1UZ/bjOOjkSp/MbSyPWjtTRXbftGIsoZWi+tC7F3GPtcKw9v7dE/cHX+81sipYAw4MjsW2Dml2ogutxoCm980M/c39TW6todAsigaSLLMzfqcqhVSxKlbcu6ncCqgV1E77m5vsgPpFzL0W9N+O8EwPNsZgbOW43lMZmcNe5hHyfjdeTMxw5WdbM120+cXGPjMvDLLaeCvavFYY70MZq3Psy/Urdwg7rrNRqdRppHVNRG6TDTvFNtjLKrqEG0ESRuAEbYp3GNs0L6i/6vSdu1XbdANHHqY4mk04jdWnGoiUyWxDFt0u305AD/3jbaIs0x+leKkn51Uu1JRFNh7mDyrhpREz4x8xBh8j7Y0FeeNMtXtvHIR0pV7uttqF9K1Eh9HYQrb7jNg+2TYWNWTxtoWTnN+eshUb3Y4I2Rm+CQH2kgcm7TNnBOc31an6C+oC3PWL0fq5I9bMnqx6bVKzr5T+tzbAQRsux2Ll3XahW0GJAI+orUaYpFJIhsejISCcmgzMLFk+bJP7fAQzsQ+01SGgADi2NAn7Ch985xezQTye9Ku26l+utDQ6syrvwCP9p8j5HyfqkSkEAkbd1Ekj74v7jxya8fCYXJLEmwHoVXBFkUfFADHN4GCR10V8nyS2/kjzsDY1oDwNnWtb/wA62OzAE5BFNxxbIVGBYvIPPjBNGiEwWWuTZNjnjg3dgYxxfxjtC/UydkLOVX2yNjTb7ed72Py1rf8Ayf2+m4z7rYBjtoFhZNFfJrNCz+3npuUG9oJUbgbH3BBr4+L/AIvoJPZmsXUhUtHJYmjib8ugQF1U9ySoAIOwCSAQCQNb+nLZnIv9RIJAx+xr+mgCRXP+fXgXYoJs1lSQefkXxWbJoDPHHSw46sq52vAHUiBLMPudh1MixSAabR7Lrrt9bKjud7P0TpQxmVFKkjcAQALIwTu+ALaifF18NzMPRcsOaJFZrcAQB9754ujVY6DXJHa7KGIaI92jddsH1IQ5U/uoYnRHz2HkkfQ8jOGNreWAI/8AGxv9jyDQ/wBunRycVnOQf9gPFeBz831nBgt/zCOzGzMVjP8ASiD/AIsf2c7HkdlBADeBs6IKn6uwZTfqEAD2qfmzx4HAOc0M11Jkg0oyRxd3+pc5A48V8Y6ob+5zHphfWv1CrvIiRZHP2s9W9yRndq+cp18i0jNL2X2mtWbYRY2JiaFogsYQBS4GBiXYwIrZe0m9poDB5AA4s+bIz0I9xtltpzV3ZJJq6okHgXf2Gb6jhJaq15El96NY5PMMndAZO5ZkUEeJJD1aP20QKJAuvjsCArEFQGNCiADSkHddVyKOWHll+3XpkUhG3+4tgE0Lo0tGslgt1n7EXd8P8JjheCV+W85ykcaZTG1461S3dVD+go2YrLWp4llj61ppIddZEZ5FqkjavK6rlX1xqZZZoNKrXG7ElVzvdTe3Fltha9oDAE5XFdbN9AaCOLTza2VTvRUAJUbliIa2UkWjE5IsbkK83ZZP1X5nhuZ0sGaeOvZnE1r3IshXx2Ke7cyHJ+aepeby3JsxEYKEbW7c6RckyvFcdRrTQXP1WcykdeaJ+MWY4Z7RaeXQvIzssUhhiV5JCgWDS6OKOEMC5xR06zM7q22NF3KzTjqv6/URaqOMRo8sKtqGURMTJqNTrpnnlUhB6hJ9Y6eJFKvukkMZQ6ckNl6XZ71I4v6p1uBcB4TNzL7n+aW57mB4pPlKWFwXAsbBDkkaxfzFy7XxdA4nHS2Wec3MbRoJYzEVG3DcuxU70hPBpe4aUTTaiOLtEYWNpQheXXTO6FQoWt6u4QsshZ2CoWG3cBE6XUT9r1ex9M8vdnBdIWPpxaGKNGuWZ/cCQoJVVfYvvVASw9SXPJeUfcjw7kz8Hn9ePS7O+qEFwVDw3Ecb5O2PnuY3mTem15KvMbuYw8kVSL1Cg/kctyxiqeRGHf8A1fc4nRwX62ao7/1P7ZPom1ixTJG8Mmo9MvHlSjuoksP7xHuZFO42VRXVKDi//knXDuX5MgiFNQkP5jZQR1ZTSadJFkLqHAPpmO1J9qkbQnvtR5Tl8RzTIUYOO2ONrynmGZjfi4hQ1eHepeMUtyfiVdooQ0S5LGV2yGLx1qvUnrLhJqqCRLMcdagfU8EeqhGyUSz6OBI3ZgVln0ZkZIZpboBoZFaJypbc0wDi1DHU/pedtLKyzRelpe4udRptiMYItY0QkmijJSMhNTAvqwK4Qp6BUUqkC8T1H49m7PozlJ8axbNxYmWyIow3eV1hb3IQe4EW+pi7kH25QOyMAfrJ9NKkXcoBIzGJpFViwA9MWQWAvJJIIPG2ybrGnTRepoZWiSp44meNbYF9qmTaosgEgMBZySAMAjqmPnXBOY85zF7A5Gzm8b6dYLjVLl+VFKlfr0PUfJWstj5bHpw2cryVJMfFc4vHnJBaW3QhsZFcbisllsZVy0lyjsn01qOy6bVRtq5NPCWleFXkkAMSRAn1QpopI8jISzMCVUrGTKQwyr600v1BrO1yjtUM00voRyqkcahpjP6m4B2tJGjjRFWJVdQ8ymVDGrAt/wAn9JMB6qel2P8ATXI8b4SvLcVzX03y3BOQennphluPWeH1cFzDlKc6y65zOpPLiMVyDhX+k62Z4qJ4jyPlmJxvIrGOy1+lPyeO/d5+oe1aWMy6TXaeYR6bVIYI9RGyappIdsUbJA8irsb1ihZgUVkjIHtUZH9NfS/1PrNQ0Xde36zSxyaiB/U1ySpqYW9RJJXi9RVBIYDcsausqIjB2l9WNavec+msXoz913L/AE+RJoMTxXlVk0A25bEnE81STNYAKdAymTDZXGt3ZlkEaSe4zyBllJ7Zrz3LsOj1xYFp4BvYV7dRC5hnaxQJ9ZHBwBm1ChWHTH1B27+yO+a3t4Vh+X1BSLcBY071PAGJJJ3QyRuxBOWRbxRn/wCjPH8BkPUj0HyOLrPWEXrP6U5GJ37d5HHPONu/ul3f8HSJUP7IGcqOxIZTk/lnskkQyXtLEG4yaB3HBJJF48YA6hJAyK+7FALQUEihbXgmjeSTgKeKPWyGR2S1abwR3m/IhegJLgBSPx+PjW/+x8/VJ1JBxXNA+K9woVWCP/sdJhA38YDOOObCgAG81V4J/c569h2LoQQdRn8Qf/zeiQSfJAH/AD43r6DY5OPsTV/ypODxg/bxnotcbicC7sivn5rHQmCWVLCoyk+5NCkZ/ZC4VdAk78sPOv2Gtgb39tOAFs0bGbyfI8CiCDj9+OkOQRYJODkeR84+M+Obuq645Kq0WScjYZ5EdmA30f3HYr4GwV6r/wAAEEHX0okoHVgQwBrxkffHyf8Annr7fagZ+BWPb+1i/Pxj78jaludbayw7QgyAuF66DKwPx+531dtqNeGB87908hDq6NRUOAQCeQQ1eDznFg1RvhJCgVJQQ1f7A4r+RirsfvXQ6MlCXEbyAqoXxsKGAYhVIOvgdiPgjz8j6+c7ACd1YA2gsQAMA4PA8nJFXfJUQWO7FNlSSosXV5r7fH7DrMPbzFuC1XpLRuPATqSeKIlYw/ks/wCSAlSQGBI66IYg7+rhJMaArhlAIprvbbEe04Uk/qzgcZEhHGu9tzAE3V2ATfFjANA1uoE0MA30Sn7dvtS9RLmE5p60elXq76p8ryGAzeJaHiXL8hxrh/HeP4HOX7q37ON4flMHy/Ncpp1/5jK7T5iTDwYfIrFLg7N2rjrCUzu/1V3bRaqbtvbNRpNGIRDMxmgSfUOZowDZnhngj05YhWpBKTHuMiROwOufSf4f9r7p2mLvnd9LqdfHqZtRpI4E1kuk0aNC+1GYaaeCaXUSIxO5p/QEMiL6bsN3UCfu7+xf0V9OKGJ9Zfty55mcv6f5Lk82Jy3DOQ5DGZXJ4Oxcr2bdKvic9Djcbkr9fGT0sjHkMNn6t3P0Korm7lbklWeaSV+mPrDX90mm7X3bTRx6qOASx6mISIkqKVSRniZ2RGkBXZJCVgdlKhU3AmJ+r/oTtvZxH3btE7rp21O2Xt2pAMumnljaRUjlKRyukTxyhknVpREUcvIqnbNj7duM8k9MvSmepdfI4KKWG5n8q8KTQ5KzRoRQx2LTrGhyFWqIKMpo/wBOOeYmQ05Kth62Rq1rXamDVdwVqjlJZYow7exXkY0qkAW11vyFP/eArGF6u3btDqNH2plkDwRlDqJmp1leCMV6pA2Oiemr7Ar+rvBCMjMsy2n/AGs/az6TenfAeBX87xqnN6nVeOUGyuTv/prk/HsheoM2QweARVWniqtR7NinavU4f5hmZFlu5i/kb1iWdq33vvWs7jqNUsU8i6QyOUjjJVZFRj6c0ovc7MoRgrFkQqEVQE29S/Z/pvTdr02kkl06/mhCm9iqu2meVLmihKgLEELMnqRhZJWJkmZ2s9CfVX7UOActz0HNOHw5DhPPccqxVOV8PvWMJmpYmZ2apcv0Ja81uhMJO1ihY/UVJ5I0aaBnDdovtv1N3XtqNDHKDpgblhlVZIyAFb9DqaWwSFBI3BTftFF9y+me0dy2yanSqJRe3UIWil2Hd6iErbbXBojNAFlHurqNFz7W/UCvy08gz/qTzfMWmzcHJIYK8GAxWMkz1daMUPIp8dgcRjaX+pK0mLx9ityA0lzKXqdLJPaa7WisrZP/AMjd1n0p0qyxQx7WXEaNi922PehIB4cHBUFK9N3Q1eP8MfphNYdaNIdTO+12lmaQ7pFFIzlZQJDGATGWVQDTVY2iUvoh6I4TgbUsnkMPXtR42ylqG5kIY72RkyG5ZIshZs21muWLlexYmmivTvJMk09hxKvd2en6rukmonWQSyFyrlirMVZSu1kZQcoTTFBgMoauruvb9PHF6OxRt2FAUQhRGQV24HuQBgjAKQrMo9uerDqHAX5rxLIZ32qlPGiq+oZ50iayJYz2Zu3VCC5RVjjfszHRAbqWC1Hb9RPC/cUCwrEF80Gs7WZQQducgE+44A5p2DXxafUDQlpJGf2j2kqpN0CbJAK7hYuq8DArVsenlipyPOcMsJXWfHzTz1EL9obWEycrPDZhk6lZIXkSapMh7GGWpMqn2iGK11ojii1JJkST2OhGRMqqGsmrui+QFyABdUQIPSZ4iWwRJEOQ0T3tKXfH6SCQRRsAZKmo+ldLHQkyQV4Vi1LFHCiiId1b3XduquSzEr16uSGbbaA+vU1zSFTlVNgFtpvjwCRY+5GeD02dCilpVBLEgkAnx80c/bgeKOeqD/vp4lxfF/fFUyyVYT+s9KOPXMpO2o45MpDj+VYNLUuwEZxheN0aEfvtIQViljaOQRL9bn9BSzaj6fbT7iyx6vULGtkgIzQTMKzQMmodsX+og0K65/8AxPhhg+pF1LKFaTQaB5GANu5XUQhmzViHTRx1RJCfIs8ft65rgb/rv9vOHrew0Uvrx6M0mjKpJTkST1L4zH7EgYGKaOwCY3jkAR1JDABihuGpilTSzq0YG2CW6IAoRtlaB4xXOaH36zGWeJjIVZzuBAG2gLBFg/vVCs1jNdbK7MAn9xVCpISpI0AVaQEnZ1+Xg/J2O2/jQH1R5lZ1AFDJN8iqv4/evOL6+iYIctgkj5zTe7nN0LHAsGz16WuUkk00bCN1XqdgbdPx2dHfl/28j4GwNkPY6NHYHuINXYoGjYHnOMjGQfPTizLIpHuII5POBeQP445BrwB11tysJIHBKsr1mC615WdW2dEnf4sQANfkd60QHGba7MRtp8mvspFg+AATVi8fyhACmwjjdn9mdeL/AG/5ffxccjIqwBaNyJerbP8AUeMCbZ8eAO5UbGu2ydefpGpIDF6wRv8Ai2KqSP8AOwSARdYz0tB7VxVgWDyKFUf2FZ8/vfXzH9e8vQ6PuO2guiEBCsV+AN6B15BI8+QB9N6RgSCg2gszCuQKN1gDkjH3PxhLW6svwQM/amwfv/pzno2M6woBGP8A6hmHhmPX99Hz4Hn/AAdjZ19ETTIiAL7QGpmIIJYA2LBz/i/dj8W3savgMQQFoAWdoHjAPPOf+ecw+R/mOOPvSw/qFn2yiMNuMnRZToEbLAMVY67a/bX1awCWIr2FRijeMZoZx+5/e+pH1VYWqsSpAIFCxRs0M/Y+Pjx07X2y+slWtiebLneJZCPK8UwHLKeJi9r3K2WTkzYuCOU1HiikiNGjDmTMSskEhs0QLaz3Iqj5r9W9vfSd6XuRcPp+4dsfSItBfS1cDHBPDiXTs0gFoXEEigARlpOjPwu7zp+4/S2t+mQBHru2d1h7qbcMZtDrHihMqlY2eP8ALamNIZRTKF1EO0u8xGmg96+Y7N8t51wLNcrhoYzB845BSx3DuE4jF4vjeJoQ0c1jKVXL3YMZQoSz5mvHyO8cnlskt/K3ZcpXhtXJEjSIH9imhg02pjjb1ZdJo39TVE7zsMU8hhTaCFjLQBnUbN0imVt7MZFT9b9tdpO36jUu1avXPFp9Mx2sdkulX8y9gvvRNWFAmIKpqY40SJUYGd3Lmkr5ORqvtinet49fDExjHR36stuqyOyI8XsrYUo6gGMFGhZp5kapgqqq4fcypKbqgZGjcWCazbNkUd1HBwJ+KdpE2n27pId4AIuESIDGaokAK1q2NpyKBAfTF+rNiv7DpOw3pQkZJJVWU9fkxshJQDqdNoKQRsmFeJ2+w+3xXGMj+ceQOerAJYXYEgbjyWxk5o3zknNnn9rf7i3qVFfWIOwLSqF6jejoHx/tYODtSHJ6667VQdQ2rUrvKrShaYGgFBxuofyB7h87GN2+umSYKpO1gSRtxfnB/wAjtHP2sdPFTy1PIlRKsbN10H8HtvTEhv71KgjZDKfyOuygfQDLYCqQVFmr27qAsq2aIJAOMj4HTg0u00ABVAgDxnORRJz4sUP2BJzLkeJwVGD9dYOPrXL1HGtejjMyUhkbUVd7TRe9VE4qrMbCQNPD77r0E8OxIrmijkn1EUG4IHcKSQcKWouOS5ofpIzVX0maFBpppFCs6xyMochB7FP/AHlEICcGwa8DlSz/AKn/AHo+j/ptSxfAcFzR5qoWK/ebK5SF83+jaX2Y71ynUISri47KvCLc0MdOSZpYVld4mX6vOq0U+s07abt8M76QMP79wyeq6iwtlVUA3vCAlqIoCi3Vbgl02k1A1PcNRp0kACBIyHKLlWdgSXBNBWJobgfcxaumKp/cZx7mHrh6fYDjvu5zK5aPKY3KvXjnt16GEsyUnV7FuBBTSxXu162QjR2msw4uK9L/AEYbYd4V+0Saft+rl1LKgiMcyA0hlkW1O1GG4oyu4HklkBA27VPk7jBqdbpo9GDOWMkTsqnZESpZd7gEK5ZQSDyiMw/ViTvPM9+goMiMsewexAAYAEkgM3ldAlGPyDoft9Rel04cqVJYDN5oCwBdecWc4NnOD1J6i1R2O0EClUUKJ8/cg4oUOKByOs133sSQ8k+5mea9alStR4ZxeufZnCNIkI5s9mtMq9ZHDSZ6k6ElUUROpDCRfroT8P4/R7QzhQAdRqRZJ9pYaZENHFEadiP3BOeuaPxSZdV3hI2at2l0llQBiFtc5BINhidSoAJsov8Ak2P27Yyt/wCqT7bZq8/WnH9wfoaUgSbSmaP1U4s8bPoglAxBYabfQr47fV81b/8AB6o+2/y2oO8USB+XbAXyTX8nF4HWYHSkBqkG2rAPOLNeKsGryR1uLr2w8sgLbIMYbY/tZeoH5EjfwR5Otk+CT9ZzbMUBUBTu25ycgixVfcZNfvwgqBe0m9xrFDIxR++Fq+TddGcTrIbQXe2jJ1rZ2APG/wDIPn4+fGgQfoUyZDsgoEqDfABBujyPHOLsGjhaBvaCaCsCwGDk+c/GP3vovtsVBDEoyKiHsuwwHYggHQAIXt4O/HnwQPrzUKQoJ/qZmo+PHnnBx9j0SAGplohiar97o/Hz/nfXuwwNiFv7klVIkYEk9mKRkn/Hzs7O9/8A79Mzi1Cg1aE2b8ngnj5+Mf6oUkoVaw6EhvFbsgmj9h9hxY6G0QixzzFuoUSMoIGpHDhQuwSV6/mdtsH4PnWk6RVjX9VFVZlsXvYsBsNkVYLZHFXdZCWY+0rRyQfAqib5+Qo5zd8DoSr+5Ej6KF+rMh34PXQP7DwNft5B3+5+lsd1lVGTZyGF5BNn7beQDz46UpsfNDB+3xwKIxYOeswX+t8dlWlqUZTNLBZjitIIJo/bYoxRj2HVl/yV/EjW2Gh9W+N5Q4wDuBKnFgVYu7rjir+D8GwRKzkMwBYFiwsAUCaJxWRV2SMEdCuM81fBcox2Ux4/VCnbU5Ja8sUNl6Z2lmGKaaOxCtkxljUezVt1Enjha1TuVhNXkC7toU7tpX003sLrujdwCFdSCGZVolVZQrhWVjFJIgYb93Vj7D3ST6d7ppe5xKziEyetEHI9aCZBFJEWJKIzEI8AeNkTUxxyuG2mMzQ9Z+WcW9U/t2x/FeM2uMcx5XRrNmMdYg9OeJemfLMU+Gz2A5KvFJIePPPib2SyuW4fxrIyZS9bae41S1VpZTEQZm3NFm0aa3s2v9DWQLpoP+z3RxqIGil082l9dX06r+YgkSSVncK0ivIWeN5YNp3WTXab6l7Y2s0esl7hK+1gkkzGdJopYdYsW3VGQaHUAx6dXRTHG6RK0Z9ICTpracOP5lx+HMY6ytqvcijuVABYglhM7yw269mndgr36Fqjkq+Rx96hk6lS/TuULVWzUgtRywLCyo0XqQvlomKkmnsFQ6urI3plHRkZWjd43Vg6SOrBujopI5UjkQ7vXG9Gb+5aiSrRvG2145I5FkjkidQ8ToyMo2tSZgq3sRZeKR+8bsV0VIMTEb0GYaAJXqPOmb+/ZHYsgoVAuiBkZ9383isk1j9hjosyslbkohhRLVf2BY0aoZJXiiQR06vGM8IGhDv1aMaI02+3bt2LKxYDseo6HxsHYC6AU8KuCwI5prH6lNCs/wCEUcg5xwb6mNNqrUA2rKT7cWv8qSCCKzu4/kCRXE+Uo7Rkz/iOoC+SSQVKka2DvbL1Cg9iPAHxESpSkKmLsnFi7NVXgD+fgVmWTVeqqjcLAAo8GvnN5J4Ix+2Q6WTqYTlWHuYLMQwXaGRgapZrzBgrxTbVgWQxvGVPX25UaKSGRUlSRWRWViLekiSqGVozuRtpb3Kysp2lKIFGwdytZBsY6Dn1CR2CUvJwV2shwwIYMCCCc7WzmiL6a8ehX2++m3GLlXL5DE4uDNJJXtZLkWQglzuRlYSmlWmzduN8lJHA7yxVICzQ1oWD+07Rh1lpu5dw1bAKX3RlXKoGUoQBRAiIRd/6qAXfdG8nqK0uk1GsYw6DQyTIAyfoknG2QhZQ7yGmURhUJd94AUEmwobGxe+3b0rg4Jj+Ocr4xQy1N5rePoYu02Sq058hFPTjt2c1DF+jgs2I7tmCae3IosQXJGaR/wAiHHj7vrl1LSJqJlkG6feCjBlkDbQXILLSqwRB7Nm05Dbyouya3RR74tAUXT2Y4yBHILDAlNOzBw5tqbB2NICCXJ6LPUX1AWbDTvNJHJLJDIyyRspEjFwA8ZDeOxP5bOt9mGh5JWi0bxlA9UaJrgLgnJo2o/g3XPUfqO4LqY5PTDArQcPimyKIJtWBGR44rz1np+4qSzm/V7lmYnntmvdkxUeKVXZY5a+NxWPwVwjqQY1GbxeYrqgXbNAZNGGSOWXb/p6RtP2uCNAA4L+oRYILM8qbs5PoSRGyOGKWCCeucPrdjL3ydnBKskJiAND2RLFJVf8A88MwBJyQSKGOnC+3PgNep9w32l3q63K0mS+5T0Bq3TatT2yjXfVrhKGRYJnXSQB2f21ZVcHqCoBIn5ZpX0+pBK50soBC17WjYWebs5o0f4x1THRU3sATSGhusGuQN188jjmqvPWzhbccMxMiqpZo9ft2YSBlJ14+f7f3Ojrwx+qa52+1DZUGrFn55xX71WTd46ZVVNF0IJYYBPPivHR3XZxG0hUo7uSVV/IHwNsNLvyPnZ6+PGvoWQ0p93JsqQCb3WRYIx9vNGzd9LQAFmu7ayCLyD8X+5++Pt1yuyyMYg2mMz6bYAJVPIUeSVGhoHY8fJK/TbSM6kNftII8/qFmyaP+4vgi8uooKGsbSKzijmvvkDjjnr6jyPNCN/gsq6QrsFBIrFlGxolV323ogjXgbCCxYjccChj4/YWLAP7/ADfSX4bjcAc4N/uMcFvP7Ek2ejncSdkAVV/NQDosCx7n51obI35B3+RPU/TyrGHcIaQXtDkbh7qBvHF1xknxXQm59gG3PJIFCrONtkg4Hmh+nkiuck8cOlUglQqsC2tEA68aUf50fn5J8n681DGJIzXkqOAT5u2/jA+3O3pzTgybkF+33CqH6iSRk5AJ8HyBWMZgq+Jx9XI2LtZI1Flf6zKmhIUj0jk612QDqrDe1GwNjQuTooY7TYAFAUADd8ciqrFDOfvJDCg1tYijdEH55wL/AHvx89JungTintvUdDNemMrsys2gQSQSpUhioGifj/P+UQxyDcTIzG+SzHaMAAXZAwBihgfw8ZGNB/cAPaAABSgAYNi6sWPA8AV0Zx5H2XFeCzZrXYgHWWpPNBMjCPQYPGydlBbsEcMnuFWZS0asqtRp9JrIfy+rgXUKCSpcAFXYEEo9h0ZgArMpG4KFbcuOidF3HW9tmGo0Opl00m2m9M3HIi2VWWM+yRAT7Q4IRm3KN1WG+1vlNy5m/WSnmMmzcz4dzuzV5dTWzK0Oe4fmHtZXgHJnxszmpSyq1bGVxdjKYmOD+Z1aEUnI0u5RamUSgfVXbYNA+lXTw1pJYW9BgQxhlj2x6jTmR7eSE7oZESQkxM0iQbUFdaj9Hd8m7jHqm1MwOsjmInICRpLHKGfT6gRoEWGTeJYXeMKJliT1Q7kMJZ5Zq1iWOWuyOHVGOivbe/DfI2dEdhrY6lCWCFfqhvGyMQRRJsjJA+L55HxjJ4z1pSToyiSldiArgnJAsbhR+aJv3DGLz18giWNUljIViQrBiP7o/OgQ6lewYAHYHU9wd7AZku6Zdwwd10QDhsEePvfAoDjovST7FO0AENxzYZji+fcOeAbyfhdcZzFms6lZlO/mI6CqSQSOwLHt2A0T/neyfBE1CD3MVraVB2jJFHaa/pIF2Rk46PE6F9pXaTZu6FnwaHyPPijjr96m+uvKeC4urV4dwLOcuzWQ96GtPRhIwuPuNH2r2uQZlzDQw+Jg/J5bGRuU4H9p4EnjLMUM7XoF1s5iaaDTxqFYvqXETMPIj9VkRmIY3TBloFq9vTMum9UqXE0oZtoGniaZs+3a5jDkDiiRS/qA5uHfFsH6x+tebs8k9ReZ8FwNgR+xUr8kzwyGSEk/9GGjhOK8Wo5Xj1PH1kE5ydnLcqxmTf3K5goWJjZnguI0nbdFHQkZ2c7Aumi9VncFSA0shhQRFTQ/vJaKn01ANNcNAncIY4dPotLHpNLh5JJ5QHZCSxISH83JLNVXFK0OwGtwG4A69UvQq3x/ikedT1W4SbNWlHVt4SjwvK5mSaXu4Ye6/JcRHO7AqZ5Dj1hG29uGJihDMDRBlAilJYEsHmRCBQva3ourYsgBlwaK3dE6qLXVJNNMIo4VLFzpzs27fazP+YVwzE2RTKjDAO1SxP6d4HO8f9GBLneUvySU3Mg2OrS46apDhaiXLEq0BJLlcpNchdJhLBILAjEBigjCrAT9Nalope5MsUBiUIqkliVYEKNyhUjAFY2gEmj5I6yTuWoQGWaOdZjNPIzEIY7MZIJVTIxdWVgTJ7CxwwDbQK4OX2cNl/UfILavRvT49NQxSiZo/caSlj4RcaeYALJKuVnuPKwH/mMihEUCNdQ7Pp2Xt8bGMhphLMfaaIkZglWOCgQgfpraQTWOf/qXUrN3LUAMCkSxQKWK2CkQdtwIHuMhcWaOSpq6Mjvt5zOIf7k/tprGeC1LH9xHoS8aRyRTLHKvqrxNonR1JUOsgBB2OpVSda39SupZV001L7hp5iKB8I2CQD/AJrNAZA6rBDMWYuu1UKlQwybJugSeBRIFfbArWQ8a2JXJ2G6iSMjWw0fbr8bAPdN/Ojrx5+KbKbRWW9xdg1Vmw1EWQPI+OBYxXTKklmsgrYK5GCDVAE1jzVjnnoy/VyfpWbztAHIA0xX8l+d7DeFK9gCPAO/oeaNUY+4kVQv5wbq/4r5FnHK43tsgA77+zDdzeBRo3x58UevtyQ+1FKoACHRI12Hxrf8A0BoefxOiP3H0NkbgQctu4J280PJ84OPjzkkYBojlSfsAp+/+V/J+ehNaXUPvu7BtQRovwNOwQk/HySCdnXx/kkOoAUchbZCBkGua4oD7fcj9+mJAdygD2tZNg5o8fzR5Garz0bRlWUMfHbuCfx7EfABGvjw3cj51s9jr6UoX0lBwSaDeSwBoms0DYHNYPk9NSAgHixRGQAF9u5T9+CMYrJHPXpeoG2jQnZ/u3vRJAJ1+RJ6kknx8aHn6c2CYlZQGK0RtF+AD9h/Bv5AJPTYZkt4yRftIF+M/Y0Lxd4oXjrIXyj1blrPR/khisQy1+0sjufLhV2AFJDdC2mO18/IC+TcFjYglibGLIOcknBPjHxQ8c9S8hbDAEAADI8+QfuPHHPHXDhvOuYStNNfo2MrQlimnSzqM9B36hQVeHaLvoPhvHga12cQrGbBBPkH7V8Dnx5/bHTTb3A8gWLz5v4z/AKED96s1xXqCvIMzPRioCpdU9VaUMGSPYV/cCyMgJkBZQgYlR5PXY+m5Nhtw6m/dtByDxkD4BN3XxR8rQuPaY/aDhjheDjFkfPPjAz0Xccy6+kn3U+mPLxI82D9aMbZ9H+ZaeRfZ5E7xX/T/ACtivErw3JZsjUgwUbTIho4sZGVZSQIpIvv2kXW9l1IRiZ9EF1sQIJqNbGoTNbQImklr3EyLDYz7bD9L699B3vTh9wi1qnQyUWC7pTuixjPqBVBHup5PdVq0seWcjbiWYaBnIxkryNTZl2sCsxAru/Xa+0wCVztWNdUVmkKdmzaOBNUhI/VRvOW2ivHIHnkDrXpNU+mkUf0kA5HHH2vjxxYOfHSiw/OMfkIl1YRWAVt9gobsBsgMerbAAOgz6VSOjEfUbqNC6mkG8Ek0AAy+LPyOWNcHwej9L3IWCGCnhieME1g/Ask+CK810ucXbWd9pISjuAxVjo7PUNvfYOp6/uSAxHyQDGzxkVYYEACqrIPx/Lf6EVRBk4tSJaJbCkYBzZAN/wDm+fgWbz09eNr05aUdPS9LCoJhI3ue4zMy/ksi+Rt9a6/0xvQCsR9MJuR1YhrX9JyQtkEFRZCngk1nFiujhqZSpjRyoBBwSTd2LANXxisZAA6T3KPQW3zARPHyazxqsVLmfGVYZcgf6gLCu8zwwwzP3Co7JN0k0/VjH4kotZHFuZ9P+YkI4llZFteNxAJYCzV8AtXnoUv3YSg6XucmjUCiU2SsVoih6xZUNMaBJOTQ6a639qPDcdPBfyPKec5m3CHLDLclsZGF9kkI0EiGOHs/ZXWFkHWRge4AEZKd1I3JFotHGTRLrCN3NgAnPn7MQD5x0JqtLrJhI2p7z3OYLtWSKTUBYnDkk/3MaolncQ2DV4Oemq9es3ivT3h+YkikjjxlWCMw12ljh96dENStXTopCz2ysNaMIj9pnTqFVvM32vSy67UwRKoDzyUWANKCQzMRX6UCtIxvG0jJYdVPvWri7bpJpXbbDpoZH2s27eKFgXkOzhAoGXfgHqlGzPHkbOQv5FkfIXrE1uWb2gqz3LEjWLL9Y9KolmkdiuwqhyPGtjY4wsMaRKWVI0SOJSbKxKNgF/A4x9+QesGlf8xJPLIwMkrPI9WR6ju0jYUtQ3NgXgcGgepIfZXSmsfcv6BSx1vdNT7gfQ2zII0914q9f1O4xaszCNQ0ntV68Ek80gHWKGFnkZUQsGdYwEE43Nf5eYDGb9M18ACxxjis5HQ8aGMTM6/qjKjINj3/AMcfzZJ4odbOa8CuhcknSR68gdvhmI+QANDe/Gtn/unRtcQJr9TWQM+B/qSLOcDgnpkgs7LgsCAALABb3cHyCD81446EziREZfbATTkk+d+ToHfwdk6B8bGgfJJHk2mUG+HC/wDmIuzZND9ufjz0VkeoFFqRYNiq2qKs4AsePJzZ65t+dcqf96DQJ3ptKfG9AAHyexP0I4BLDGSc38jArFAcHH8eOiIxQDWa2gH5/UF+3j5/y8DvMkaGBAD/AFf06No7VWhaRnbfYDyUXYGuv+Na06ERYzQpigVuSAyNk3dm8eOfnpCsTITd0xOa4bwRd4vgEf79HcRYGL4JGwEJPwoJ34YAHRJ1v9/3BI+vqJI5tRQXIBHu2k2byCbuqsGhnoZiDvWiAaJYg/1FVIF+eD8fY56CSzf1XR2CgdXVvOyJOxC+PkADQ1vRUj9x9LkL+0ICrVbbTX+o5s2c/wD17GilbIBByPH2Njwf9fJyT1kYtcFocnxkc2KMdaSmZq0W9Kxeu5jZZFOwquyHTa11AI3sbt8cheypHv5JFmji65rxnjHF9Skgf+uhZBNEnJBOTnnnOb6XRavxyli8BAYv1k8aRRKSumZwBK5BG2jWVjskNtj534+kOWVqJBDXVVurGcZu/wDnnN9eoNynaMKPcaIv9yQL+R/oBx11s4d5b9C7XjrIsCf1WRFjdjtm+UTz2B8bI2PnQGx5sYkMKC3YrHGeMci7P+/HSWvFeOfjJAF/PPGTXiumN+4CHN5jAQ4HjMFqLkte5jeS8VzFMItnD8s47dXJcfvUZJlkhW5XvVoSPdieIQTTAr3IKO6ZY/d6pDRSb4ZVfcFeGVWSUMR7gDGSjAHdtJqvDju6GOSNikse2SOZctHJGd0bC8e1huo2DVEV1PTNUqXqfwLi/Ma9eKvDzbh/HeW1YIFZY4a/JMLSztaOD3JrD+3GLwii9yxZ8J1ad2DOuMs8nb9bqNOXLHT6qfTuL2srRTPGSxFL7wAwCkkAAMFsA79HGnctBp9YgAE+mg1A9xNLOiybVyWADMwXm1H6mANRDzVblfCr2qE5uVOzFYpCVY9fy69lDdHJOgrI6HZ7FFIH1OxNDqFAf2t7fepFEHBOcmj/AIQeDVeImSGWFq2k/a/GDdjBJ8Zxiz0sONevcuJKRZetYqdfw/rKwVZAw2yyqXjKMQSdv2HgnYDbHn7QJ2LRsrDm1wTVYYVdgj+DZqyKIi7g8RpgRWDdVS4Fbl8XWD9+SOpS8I+5DjFn9Otq5CrqUCsWQgFiSD22rD/cPB0f3GtAQs3aNQl0hNXgX98kkBTfxeRnHUlp+7LQJtGAydoK3Yqq+x5HjPPUlqXrfxZ6aSSZWiymIFZfeVWAYHsrgspI2SwB6+QVA0N/QLaDUO1GNrvgWBkWLoFTxxZPJo+Thr4VLOkgtlN025sZI2ZIWjVEEYvHHTd83+4DgOOoXZ7HIMZAI4XZmmtqkcSoNDtI/QKo/u2i+QECdW0Afpe1ap3WoXJODtQvbGgRgY93tpiNtmwKPQer7zpY4nLTRqALJLhVBX20WI9oABoYAIrAsimj7j/Wt/VXP16ONlki4rinszVUcSRy5G326DIzxFlKQsjsKVbrsIv6idDNMqQ6x9M9qj0Ss86VqnjvG1hCl2VBzbkYcqao0DeTiP1b3qbubbNPIV0qSZJBDTSbgtkA7Ag5Qb7N7if6TG3F0Yrlisb1jUM0rRhIwRIQqbIDDsBs9dEr42B1A2fqxSmmtqKhfaMg+fNHir83XJIHVXhjQA7F9MHBs7rarsV424sAfPkdTF+yzEy437r/AEXWL86A9W+Ae2zq3uH3ORUfZTbaLFANPpf7ip2p6kiapg8E9AioTtzyAGY5/wDDZ5yBRu669kXbG5bPtHGM+7P848cgDPHWvipMfyD7KCKNkHhSGUhTseN72PkbHTyBsbqKHcgQXasbyKPuBzz4o1nnOb6HclH9SxtcA1ROAc82QauvgDAJvo3sMzxhY1LBoEmkIBIADEb7ADXZh1+BvYHx5DboWkjCj9aqW8DdVE5rNqauz8cjpRcASj9RQ0MYojis8cWaAxY8AJEzSe2rkq/bWvgqGIGzvr878jXggEeDv6HmTaxwaxX3NA1zYx818HnouJjtyM7RjzmqPNfOPGLqr6GWJAs8Fdh1ZpCdjbdSEfuvYDYLAA6/5+PA16rqwIJPvayTYxfjFkHORdnJxfTe0qbq8Ys8gZ+f5zX/AC6HrIwkXQbyq6B15VANnfnz/k78+fkgfSnIVwTlGUAHItRQBxkHwAaJyDg315sR0NgDNmrobs1kYyeKzV4vAeWdFA2CzMexY/BGteNDWh4AGvH+f2+lMGkr0yQVsMQDZ3GwORigDzVk4568tVFWoHAFjFeL85s3x4HFDLIMjisWJielGKV2cu4VIjIT+RVW0PyYgnRG2860ARbA6oCy8nHjGbwKFfcknHAuupMI8mMrYs5BJAoeaF55qvsQa64Lj8fcytfJWLyy2o67LUUuoURsY3DKgYg/lo/2nsdH9vpaKs2Wcqy3WLwfgiv2oZ+fnposYVIJDKcmsWcY8/bz8/v12uWXjl9tJwhIIUKVZnJ8A/kCQRo/Gj/k+NfX1hPaylqI92aAonwwJyfjxZ5BCgu8WHZQx/TtBFih5OP3NnNH5BVbsRxPEzwNK0ZV1ZYhIFKeAA7LpT4A0Suzs7H7shj9yDftrNEm65GL8k1k5rL/ADXt3Hg2B/qOSD9jwT1K701w2dxvoB6UnkeMmw+VXC52KClZnjtSHjFfnHKq3Bbyy10EaQ5fg1XjeYq1zuajTyEFK1LPcrTSnI+/SxSd/wC6CF1aMalWZguBO2ngOrjDe7MWr9aMlrOLAqut3+lVm/6udrWVSsjaQbULbmbT/mNR+VaxyG0phdFAHpxuqGmFFM5DidfkIYGsPcA7AdQwLIFAEhKtpiNAMF/yxGz+IcWpaCVmLEoNygCgTfBviheRgbuOj5Iw5NgEk87Tuq8ge6rPGQReDi+kK/pDjMmzUL1dFb3Gj79W9xTs6KgR+NovjsSpI6jX7m/2k8QDxsCGr2ngAWODeKzzYP8Ahuile3xTBYirFtoQtS2LPk1QNYvacXjm0tlftIkkdpcXlJ4PefcTbeN0JP4qohaIdvj8+pOyTvQCkuDv4ohkDEGicVV82bH3K5J8YyI2f6fJJ2SNdEYLNkXml2/xhbA8E2Osf22QcVxc13knJuSZmzI5r0cNXzF6lVaRwRCj/pJUtHrIy9/atKhKhfyZmCuP315pBFBFBEB+uQxIxCDkgvYBIHkcVWemU7BCiNJPJLKFql3sq7qG26CsfduNFjir87kT608Gpcf9Ks3icZjayW5kpGRoYYxPZvDI0LQV7DIHdpJK6xxLM4VUCqZAF2pfZda03dYZppH9PcwUsxIRPRaNiExXtJJoUAP0nA6E7/oFj7HrUghT1WRaCqiu8iyLIiB6H6mQD3GrosfIrZyk8st0CSOxA0AMUqzArNDLGAkqTIVEkUiMjRyLIoZXVgfKsBp+lCWGU2rLvVrBVkYBlKkFhRBBw1fYCrxDUO7MyOjIUIUpIDvV1ABD3RLA3YKoQRRFjovjNupZgWmWaEbm94/kyyHyXAUqdHqpJ3pdEj5JWQEULoWJbcCPIyLAIuiKq8A2QKweo19TKrAbVAFhuQcXkDd7gaoH4AzzUxvs150Z/um+3HAzQFruR9bPTmr+sCMEIscrxnV5G2Q2lUjZ+SW2RsaC1MH/AA07Ajb6Mlhv/A9n73ur4FDByenTJvSm3bmUGqxX9JNC8E/IGBjrYzXxcqzEOQR7RKdfjQKly522z2IP4gAKGOvy39VHYqsdtAEfuePHj/fplzIaVlqyWWiCfuD9h44qsnHXdDKTfKtsJSKxA9d7ZijeBvfhi40CO66BB2QhY9rbgx8+2hVEkjNc5P8A7X16W/VgKf6hRzZHB+TjJFcdBoPdlsw2AP8AySRsRvXTbDY2RoADYOh+xG9kEizqS5FgAE1m7/Sv3N2eft8cPwMFVhkmkv4FgcC6x588+OBlqCT9VXJLMwl93sdkEfmreSd6A8gE62f7j514IHV0HtzQsAgCqIuzjx55+xy8JFYHHFi7wDxRwTkkcc/bHQ1lnLxdfIVZGBOwNFeut6352SDo+ASdFfpckcjER0GABKk0KG4fbnA8/eh0kMgVib920A0LuxfxmhXFV4vaOuZYQSdZFj2Y10CUJGmIbewT/wDXXhT5O9+Pr3TKRvFsDYBPK4sY8fA+RRx0POcgAA8nzYFkZ4x8ZPnrKrn6FXLTmkUE0IfcY/BSZQOw/JlGuvUAed7/AAIXevq1SpGXKKofzbHCuCRi74s5+PnkTEZZFDE0SDd0RRPAGTzk1xnm667jA46GFCzgTpCPbHu/kAigMqkAKSdDwTsjYC/RKRgJQb34AoAkfPOc/Jxz5Bth2LMBRoki8cmrwT4+Of8APAHGiMe7LkAFsI7JGoDABAx6lUJLeV69z5JJ860SUDY+71GBAYCywAIFgsDdUCQDR8mx56WCwVdpYWMkgKecfq20LBAOLqheLWHp76a899YOWRcN9PcDbzmZt9ELos5x+JhlL9s1yG/HDNHhcDTSKaa5kbSqgiqypWSxZMVeULW63t/bYDq9bKungQEqHJEkxBsR6eNyjTSm/wDs1HtB3SenGrODtDpdd3HULpdFE88zMoYC9kKuDUmocArFFSsQz5egsQeR0R7NPXbjdPCZOvgcJJO2D43j8ZxrCm0GaRsXg6UeOoh5Fb2/e/TVlLSKW9xnkP7s31g8EsszS6iYJvnkkmkKDaN8j73IRQF5ZRYFnLE2SOujoUXSQ6eCJCkcEK6dcKDti/ugSSA7EhLYt5NUoCgsnx3GA23SZEBIAMTAdfCkkEgEDQ0QQfOxonW/pxyDivdZzecC8k/azkijz0qTazKY8g0pajktgAX8Hmv3rwRljBQLlO5rxo6OVZU223OtOrOzL1Y68ADrrYHgfSWZglBsUDZ/pGbANH4/yHHHTkFqxCqNyge8g7gTYNDwaFG/jFeFN0kRUUxxkfOyGQjrGWHkuQSOzMNMNH4AB2fIRSKQb3MSbIwCSeD/ACR5GeiJ32OxJBHp7dwWzuwaJ422RZObtukZm6AtXcY8iA9Zy0ngyosYTuzKCejMrAHRKqS5UEDx9P7mXfRA3gKMc5F3/mftijmrDlVjFGR7l5CnGclj82L+3HFiuo4+s+IGW4xmFSs8v/uEJPkOkkcqSRMB0baJ1LnajrretMfqW7VIY54gWrFVixhgSAcWCxGSQR/pC9zVpNHIgXeGKmhe61O6xRB3Up22avJ46Qdr7T+KetOLpZytlrnFM9drVEzOSxlOpfr32r11q/qcniZnqM9xOkQS9BepSPB7guQ3pWryVZLTfVmv7I00DRRanTB2MUbu0UkQclgkU6hyIrJJidJBZsMp3boHW/R2h736er3yafUyrGZ3SOOSOQou1Xk08hiUy7ceojRg0N4ZiskTxfb/APwc5vVbnNzhnHfuP4ji81lOJ8kyPA6/O/TjOY7Hcg5Zh8dYy1XiOZyWB5NyKfA0MhjK1yWzyfH4rkt6u1Qw0eFZF5AhuX0j9XQfU3dD2eaE9v1csE82mB1DamDUPpY21EiA+lA8Tfl4ppQAs9rE1KSQRnv159LH6N7Q/wBRK/8Aa/btPqdHBro0g/K6vRQavUJBHME3zxTEamSDThTJCjST1viTaeiLgP2MetX2r/dr9uFr1Q9NIP5Bf9XeKNg+d8Ut0OY8Gt2f5nfXGSpmMaHs4Gzbt4q3NhqfLcZxvMXmx1izRoyNTmevde5aTU6TSzGVWZDGW9VCrIQfDHlCwwPUCNQ4FUc30Pfuz92haPRalROyqfy0qtDql3kLQVrikUNVtp3kjjG0XtKM+kvIYfN8dsPjc9iclh8gteC2amTpWKNyKtcrxWIZZa1uOKaNZa5jkUSRgqQ0bKsqMi02aN4GZJFZHJU7SjA0wJWweALo3QFVgggE+oH9wIKq7FgM04PpspIH+RBogkgkC+iGaVP6bRsQjVVkbW9sVMhKkkgaPXe9eSf+QCycA45OfsDyf/fi+Qc36wqqxuAahnNtX+RH+xroNSupsDye3Tw2wVHx5+NEsOx//ltkj4Af2udxZVLkjgUScqBkZ55INDoyOOlX/EQu/gUfH74P3/8AU4lcS265dm2ok0OoLFdflG37gMSNEDwCpGiR9P8AqM0kY2lR4s1djkCqyMgfF/z68dxvRwu3I+5Ygiro+xvnIrz0admV4SNP+OlXsCTsnQOz4IBAII2CB+2/p+q23RNgWLFk455q6weTXFdN3aEBqKgEtXNDNV45vkYxddF93v8AqiGLKFQqSSC4YMNKT+XgAtvwB4H02P7pmjYMCpuhfJsmqJwCSDnwDwR0oxmRVK7T+48fNWKs3g5/16y+fav9rH3u/ex/qdfte9GLvqJV4JdxMHLuSZDmPp1wLCYG3mEt2sfTkyvqRzPiEWYuyQU57NnGcXGbyeMrPTuZOlSq5DHy2rbD22actLBb1QO54kUEg37ncBiKJpbJUEcAnqR1XcNJotizyRxs9lFZWbeoFsSFUiMA2F3n3iyAACOrHvUr+Bf96fBvR7j/AKhY71M9JvUH1kzHL4MDd9COL51cJRxGGux1RHmh6zc/yvEOIW+R1b1l1vcQlwmNxj4yNLPGub8qz13HcXtPanSjSxwu86FpZo4jtdQqNIyxx75D7beRlQkA00iA4LuoEXdI9Tq30q6cgx6eXUKaLNIIkMzqIkRttQpJLZk3bVCCMSOim1P0/wD4K32ueiHopyoevE+T+6H1zzXHvbl5PT5Dzr0x4JwDKiq0taH07wHEOVYfJ5oUuRPjZMjyrnN3KT8lw2IWOrxjiOLzfI+N5Wxar6eEXaO6CBmfuz9v1f5OcFv7jWjSynSmNGtHqdUBM6SKLojZujagJ9fxyfUnZd6CPsY7t24dzjCi5e3vqIItcZXRUn2jTvNIRA0KEJ6mz1kjeNpuK3eCenvF7HFfTfi/HuG8fszrduwYCjXqG/bZEia5kpgps5S10jggFzKWLFpa0VeCKaKtGIRx7J3PUa2cTaqefWTMqrv1Ds7RRqv6IgT/AHSUxb01CqWO8ruJPXccHbINCno6TS6fSxKXYx6aMxB3sgs+za0j0oO9yxLKoO5Qo6iV6u1lyd2Swn5o9ydmIB0AzkhgD0D6LMNhG2QA7N3DGU07KEYAg8KDgbcC7xkkgElra7rAoe2SbPuJjSryTVg35o0LF/JABOWSq1lo2dyMCJh+DdgHjO/bPcgggsG6A6KhQmwFcsfWAJFfq2k/FNfgE2cEeMn/AFdSW2UsChF4IpSa22BihjdecljhcAdMgeeKSVVdQBHNJ2CqV2SrkbGip0p2CdFlAOyQO0gd3hJK5VjQzZZVI80KN8fJJ6MhJYlg21qyKwbRTYIu1O4qTgncM9dLpWCIdnHUd3Xbdz4Kgr7nhux7b8l/IPnSgEnTjfZClQaAB8ADJxY8Z4//ANH3VR7UULTAsbIyeAtNzQtc3R5wOekxb1MzsPhUmO10XUlSqnYKqVA0wCgHSk6b8SPSKbDbsljYsjFkVgg0DsGCSKoeESe1CtgbAqn4DVTMpsWCCRZugDVHhAzYAcgwuYgCh5w0yOpT82RgVkXX922ViAANuGYbP5aJikEcyMCaDBvOEv55Nj5OfkXRBlBeF0vkEDAoXnJsc5Gfmv2VHpJjpMIRSaNoxFMqyAkL3/Ng/wCIXQJ34B2eiMCTtth90YSbnWhdsCACAosK2R4AAxVk556Ro1KLtY7aBAF3Q9pBO4GwxrA81fjqwP0EqTN6uenFelK9S03I6tyCWJpQ8UWOgs5KYr7RR1Vq9KdH+V6djKDCsmy/w8hfU/XX0yqEho9ZJOze4MYtFotVrZ13KQR6kUEiN/QUZg4277p34rzpo/wx+s5ZVBR+2rpFsizqe463Rdv0zgNaF4tTqInj9pO9VEdSlGV3fvYOax/21+unJsLksngcjxnFj1E45k8PZnr2qWZ4jzjlfJuO2qtqtapWaAoWatuWKetZjnpCzWlpSt7SVn6n7qvr9s1sDi2l0rKA6oUKldY8ZZD7Tt2o0YIIUqDRBscJfSmofSfU3YdRGWVo+76BSYXMLbHniRwJ4yHVnWVlNEFtzk/razrG5jnHPPSv7N7UecvfzDkXpPw3LclmnkNxsnVn4JxkZGvaNmFkMjZTOVry2URZYjDKsVhfcnLZ5oIGn7b25NRI0rrooT6jAMWdkhUsZaGZGbJJIJLElsySbp3eWMfUf1GVQQwp3TXxJDD+hUj1U8aCiSKHpDa1gDfe1AdnXDFchgsgUrRSrl6mTyGIuVJOsQFrFWbWNnkrq09gNUsz12sUozPJN+nmr++onDqK6O7dvfXantv5qJdZppWhaCU+kzMGXYYy5p1kDrsKBmLH9Aptsoexd2h7fpu6nRySaHVaePUJqoNuojijeyfW9O3gMQDbzIgQMACQCpJ9T6fqrSuvhjEw8nSDtoAeSd91O/OvyK78eUS2Xeyf14vnBAz96ujzVDoeMDYhHlFJvk0oAP8Alz0pox7qVZmVQ8UZHuaH5FliZSRr9j5I878aA8/RUduwLH9DN9uBj/TH/wAoNk4fItwmBf8ASXFmjz7ibP8AkeuskrRSQPHvav3cE/iwUN8+NrvQ8b35H7efpySVoyrAD2sCR85Yf8hx8n+G1o71OABtAHm6JPzdX/F889AJ5VknMbMDIFMhDHQVC2lKnak9iTvZOyp8/wCGBI25rG58ELuyEYsQbya4AvOP3HToJVQAABYAN3wOCK5x8AfYX1O7iHKeC+itTEcY9G/SziHpP6d4nMVMnf43wbj2OwMd1I6dahdyeQkqQV2ymflw9etUsZ/MW8jlb0ECJbyEmhLFSuz/AIi6mL6g7edTIdL2qWT8trFcs8MUE6r/AMRJLbEHTyLDPK5YsYoyGIO4NpvfPoWHWfT/AHCLT1qO7rANRoVRRvfUwkSLCqYB9aL1dPHCVVBJKjja1bJLclwWJ5Dj81gY2eXE8nxMgWQEyKIsistrFZKJXkV4Z6sht1TPGnVYf5BF21GI16Imhj1ME2nZQKiZCGAZgkpCKCM/9i5ZWBH+FbslTzwNXOp0+t08xin08sbRFSpIkiKsjowH6kqNwQbpXYe6iWiuZXI5Pj1fH5mR/wBWtWzx3MN2lQvcxrtgchZiZo42c2LFdLtadUTaMsyARzAratBqnl00EkhBkSOP1KIBE8YO9lsblUMszEEWWCsCKW8l7xp44ddrYY4ysDTzpArHcywSPcKsSDuIidFd6ALgnKHd1Q5yET4fk/KcPKkcUuM5JnsTMK6fpq4/l2Xu0p1rQr+MNcmuRBCmhHEUjB6oCeMfqftMXa/qbvOhgRI4NP3HUnTwjCx6aZzqtGi+0Ui6aZFj4fYBa7q6/Rr6G71L9Q/Rn0v3XUy+tqtX2TQ/m5XIYy6/TxHR62WR8e99dpdQXoH3/Ng9ILkWOlyCF4kMi6YPvzpS2wybGoyx2Wbem+GLN1YMRuQjkH2iitjKmqII+A11jjOLrqwMhLhFUAn2kHCscmx4rn4o+Oma5LiLWPMZaFgHWMr2AJALaG9AFdEs3Yj8kI6kMNhcU4e0YKSikHmmJFUt88ZwBjyCenCjMEEh2sFJB8kUD4zYB4rkEfboFBGdqrqAvTQLsVUSdSSq7/E9gCVPkhgNuD1Ban2l0UEg4FqDfH7g1XJon9WOjtOhRGNXdBEJNDaoUhbFgWNxJ2n3YHSN5HZsRkwwCRmVnIj8jqo6u0aKFHVWZhqTfk/jsr1H1IaZlK+9iwwoKgFseTZFDyM3ef2H1LtuKu1gKSBdkF7sE4B+ME4NkDnoxjp6oDv5msESSglj27k7HbsQdKH6jxoKWIUMOo7uVY17huKJWQTVAeRXN83YAtj0+GJgJX43LZwQNoo1fAYFsAXQBJJov4bUdcxapMp1LI0etFgNv28b/IAsy/3Agg+dj5XLlVZaVh8giqAWift5zVYF8dCKVDVv9rBme6XBFqRRJyM8V4O3p4K/EWx1qGzHFoSOQzdPP4HsGJP77b5K+CPOtLsaRy6bFC2Rb5IARs0Lyb4Axmjm+hlZBIQpsWdtn4Hkea/iqsfHU2vtQxgt+rAtsxMeE4tmrpICuPckFLHq5kYERe21twAo7nRG+gIk0L8I9EifUur1J/Xpu0az0Rt9wl1Eumi2mxgHTvqAAvuZiWJWMNuwv/pCa51+h9DoVO4dx+odCmoBc0NPo9NrtcpVQ1EjVwaUncrKEb2qHqQDv4mec/0j9mvqlXhnapb5zS456boUZWknq8puUMZcjCMPb/pUeU5m04I2yQmbs3RBDuX1Pqxou0dzmIUyRaTUgGrVZRpV0kQo4J9dHagDZLKMkVzT+HXbm7r9c/SehIZkPd9HqZVAPuh0Uo7hMNwN+6HT5thSmjt34lPwTh1anwn0VqLGKycY9B8NTij200cKHE8GikcyMWDBBjjDGzf1HEkmm6Suz1PQQxppYIkz+X08sKnbsG1JCiijRDGOOIEEAl93tBUXf5tS2p1vctS9mTVdz1c7YFh5dVqJaoEf/qSCxwMhWACiOHqhjaOP9VeeYeIkvUzUNlyiBFMuUxWNyzr0LlgzNfJPUKQ/khewI5y+v1/L/V3e0QgAvoJSLwHm7Zop5LXNkmU3ZKkfAO0dT/hsX1P0L9OzSZBh7hHeLC6bvHcdJEAwC0iJp1XABUhh7iCT6w/8zhUvJXsz1mKAShTJKiIwb+5fyYeGbsvZlDaCFuy/QPbPq/u3bwFeQayGxceqLzFQtYWQsZVBBY1vaNWK2jFL6X3n6I7J3Il1QaLUkNU2kAh3M4oepBsMLhSBfsVyLAnQuSHASeN445I5F9ti0hGyCgKLpRGwjfQ8MSqa6jbBSev1ova/rHtPcZAry/2dIyp/dahxsZrt9sw9p22SDIsLG/avgZf3X6H712xTJHD/AGjAoJMmkBaVQuVaTTks5aslIWmVL22BTtyM6l+6Ojq+m7AghQwBVdgaJ/u6+T4K+daP1aiVkJZHDgqrrR3LTAjFfIurrABGDmlshUyIyMGDspVgUa0IVrDAEEHBBAINA56501VyzSJ7kxVSX1siIH+mhJPnqDvYOtkn99loe1iEBLEAknyB4oA5Fi8c3/KlW75Aux5Gef8A5/yrp2sx6r27ePOMycUcw9px7oHR2JU67FuyKpOhv2069SQCpIfnKbWyTIUlJYHcCyAAm6UUij3WWFbQw3tYFMQOpoO1JDLviLjdwu7eAVPIBN38C+L8V1KP0F5/e5rwPil0WCt3G5bkXp9lVsSEPWsRTSX8FZYh555FTJ0MTFAzkWJak0kj9JJnT66z+je8t336e7Nr2VxM2m/Ja0OQ3/Fw79NqZqse2ebSjVx+9nTT6pVJ3gg8lfWnYl7B9V987WQo07zpr9EEUBV0OuQamGLxTQRTtpZDSr62nLKu1lPSn5RHWr8jyArSloM7Ux/JK0DSN2FmzBXwuQMUbE+zWilqcdmswxrEq27k0sgE1iT3b/2uWMNqVYspdkmjA3EmgwlPtulVTHuv2f3j0DbgYx9S6crLpyEH6Hhks17i5MZsjO4llOSaQKSFx1T59xfEI8L9wfKv0wLVeWUeO8ygg/p+zXfKY9sHcjjKdvwtZLjlzJyOAS1nIWXXfbf1h/4taOOH6i0uujjRU1vboiSo2tLLpZZEcnAV29Bo4QWAKRxxKNoVb6i/6Pfc5p/o3uHbpJS57R3vUppod4b0tJ3CDT6rYgq1V9S2tlFkgySTEEHd13wXAobNaPtF2DKryhxoSPvr+TkaO+uwpJH7keNHL3JYbdtKKYDAxeb+a8X9gaHW6BvevJYkNuBr+LwAeOfPm+G29XeG0VqKYUBCdF9xvBQr+BTYGgob8TGxG2GiVdQPodCqDfHZsv5GHIJUfJFFa/fGepONTKTuxIKA+dpA9wHgAUSMg0COTUWb+N/SGMupKh2DFSR2XoSgjB3+Mb6Ib57bOjoEPEl7Y8qoAXyoOST8Ej45Hnx0XoyzHaws+47myTQPijlvOeRzzbc5Rz7zEg7ZdliD2Kx+4nzoEkdfkdgZCCVbWvo6IiOPIGSAMAnIxx+4JNYJ/cdCTwf3zYIBJZVuxiNS1mrouxJ+3HmjCiss8cEXzoaHkb+DH8EkBl0wZixX8gnk7P0MctliArMa4r2gis1zdm/t0+i0IgKUA1RBPtqgKAxdHdd+4EDOS6fp5xJZM2srw7dujbdCG2wBDDY/2p3J35Y+FACjbDSuzsN3sRjV37hjnOdw88+RV101KFFuy+5gFJINLjcQLPmxQAvi8UepQWOKV2runRRI0YHVepk0Ao91Nedr4B1pj/b5B+ko5oYrYcmzlR7aNGq3BjfNUPFmJkAVrU83QHCji9x4/wAs+R1I77UOINQX1F5CwlaUy47jlZCojSMVK8+QuuX7bd53v41de3H+nWBD3m/VkQ73+D+h3aTvevYgHVavQaCNSKUJpYtRPOd7GyXXWw7gtFBGKLB39PlX/pHdy/4z6V7YoUDT6Pu3dpWBJZvzMuk0mmGw0qhDodawayZfUYUgjHqxV/i33mb0z9EuNd3apyP1yRbq+3DKZYcLw/nmWjV9tHJsXcNihGigxyNX6SHRLC0fiDIkXYIhd/ntf2+BkGTs1OobUFWyCLN2xuwORRHVT/AnRif64k1YVTJ2X6e773GJjY96aeLQkjahAoasC7BBcYzfVodKADHYiKsU6Y70ulqq3URQq9l8dBUjC9wNk05I440JkZvxVgzAMOlbGIHtEZyBeDbqMg8qeMAkm7zbmkHqNI90GkEhVmAoe2RycVf96bxwSCKx1DH1PvVbHrb6nT1/6rJnaVaQiEqP1NHj2FrWUCqGI9u1FNECUPdoiwZ+oX65k/ERSfrPveRRft5ALE2f7H7dZGaNfpvjB89de/him36A+nAynK93YMTZpvqLvBLXki73ZO488VXSpy/LVo1jgZApXYCL0I/uIc9eshBGxoN4IBbvp/qnpIVAAsGypFqfnOfBPj5Pm76t8mnikJLpjcRZN84FE/sLIAIyKsjoiv57JV7dWw69qs9gxNKnbpXmKsV94KA5Q/0gRv8Ap9mZihIRlmRDtX9LYAtUsAHFEkZYkrfIHAArp6PTuRIEWwEsxkKS+BZHO4gkkBSKWibK31w5BlMziFjyeKhS1pVOQwzTGBLkagP7uNclhUyClkAZhJXsDvBYiMpimq2rsH1Rqe1SLDOzajSswR4mc3GCw90TEMY3AskgOrjBQtTpRvqb6O0He42m06pptcV9SPURqC0jZuPVKF9TUQnbYKt6qH3pJsV45FHw/nOE5TTmuYa2J3gk/TZDG2ENXLYeynxUy2ODPPSmKgtAxD1bUQM1OzZrhJW1vQ6+LWRDU6ZlkVxWbBUXYDgcP5OSCCCCRnrCO6dr1nadQ2l1cTQyAgh6LRTLRqSCQqoeNjYGQ6bdsiK4ZVTg5XFLZ92Ry7FZCVCBkDMA2t99+B0YMEBkbrrX5BucREu7cQbILWcAgZwBdkc5Nkiyc111oYhF+peFULTE4GDjFbuCb4JA4HUwPtX5bHk+O81pVwobCc04fyCf2w6IsiZSnahZNNE4mWOhIxCrJHIPZEnfcqN0h+FeoL/TLoTaaXvOpQli1FlXQavjAG71DuokbQAaZj1yx+MUH5f600jEkjWdkgnN1dq2s0oFmrW9MFpzuCoCoKgDqT3MH93IYfIxM6yY/P8ALeOlG7RKuNlvNyeEGNSEZkPF8YK8ZDLFBasRp1DSdtg0LFdbGR+p21UMhUn3JNAzFipWiQ8cYs+4bnAzg4B9SKHgdj+pfy7IxWyrP6e4lx7lVi5JAIBYqRfiCP3YcYalzDg3NkQLSGAyvG81KTG3V8TlK1zj8bKSQFEWSzahiz9S6bbtKHelfi1ovzHau1a4D26PWSaUsQuE7hpw7WSu5S0mk0ygmlJBT9W0nSf+jx3Q6b6h+oOzMQB3PtUOs9xJZp+zap4l2CwCh0/c5WYFR+kFsA7mjxvPaaKVjT2leIKPz2B7ZDP+BCKRpW2PhuqroAj6waSNBEx9wI9vtIrBya5HOfHg3kDrFcPk7rsndY4quCSK4+4sWBkN7zfKjPEp7ikM6gopBbuoPwp/FYyCHJ+D/d419DRq8pYN/hIyfKn2mhwduAfdZ5B56lIZNlUbJJJY4sUuMfcULNAAfNBgs3xztDKziNVTtJGVYNJ31shQDoofx7psq34eAOw+lxqVqwTtvcMWVogggkX42gHHkgEWdFLbB4wQ15s0psgWtk8WSccX+/TG2KBkeXv17EvtkA2SpJ+Ou/lifyZgA3wWOvpaahVWsFjQC/4RXNeCf6lwozk8dHhL95oUpOa91iqB5sHjyeMdK3inFzaQ2EOpI5wCpYgsi9mbTBCCEPYgAiPZUtsqOi69RCeFP6hQG4DcCq3zwOaG3J/UegZHWPagLGmJ3D3Mt5psYu/8WaJI6kVxOjHi5O/QhiiqApUaZOwLOe3YbIUADYLMCdAHQhjWiATZJBFDG26qiLAqhdEjNnoCeYEYK4BvcSTnFKKOQbrdRHnPS0vcheAIVbswDdkCFvwUuzMEBcn+wAj4PnSkeSSsarGSUF7QS1k1eQCp2gjNi6zk+OowM7OwNEe3buIAPPkizVf8scie3241a8fpbDk1kdzyDk2WyTh4+nSKu9LGhQQ8jlCcE8wkMSPuZkClfzl6X/DHRDT/AEjo9QxI/PavuGrAChdqwSTdvRQorcrHSlt7GyzOi2gEh4t/HTWDWfiFqtKoTb2rtXaO2vtcMS+oU95Ja6PqIO4iMohNIAWZf09VufxN45s/yz7Z+J49DZyEXK8xyCvVXZ9+1lLEHGaKqArRtZL8uheEFuz+5MAAm9D/AIiyGfTdm0kZAkk772tdpsWmkhKTEvdbQ9AAbizXjqV/AQpou9fWXcZnUafSfRHeFmfaKT81qINTH/S1bl0MxYlSoCgsCPabXTCYpDBGWcyT+m+KcRlEISXl9a1drtLGWYhMdaV5a7u3vVZUEp1NtvIkZonZuA8VgVR2UxqjZwwN4XIIogjoXReyKXeCCul1ZAOc/l2VQGIPutKUUTvrHA6rj51M8Xqp6jMs7SN/q/Myr2lDNr9dMpVdHQ9qNfbTqxZVVUdyE0eXfrRt/wBU98e/aurWMjDbPS08UIBwoxsAJUZzYs9di/h8gj+ivpqDaFb8i8hIJAIn1M+p3ZJORMCWwPNKOulHKQFVaXQIGvbeMMGV1c6OxplLsR0HgjRZQWANWVd0gwLQsFAJoBxS4IGCQAM0KyMHq3upJbYKOCaO0jaykkEcHkggH44PSgGSjkjVDHC4jIKRydHKGGNAjRq7MB/tePaM34ICyn8meKxgAZJFCqJAznhuB+3ij02sbx7gS49RSWIYhveSMlSAST+ogBWU1kYHzIk3K7gJr24igbqCCdhSwI1tiR1lRW6qg/ZfLKRAXLFroFwoAJVbUVtGDWSxJsfGCQLKAgOwMADi8UTYsci/NE8sfgkxH5xHmaOZOSwOYyPHcoBLQlyeLMcN6ehK6TPSnlkSYS13sVoZ1UjcbwgBvL7sHau4ajQMz6dyu6PYVu1BDAt7TYBtVogf4uL90N3Ps+h7rCkOtgGoWKX1FOQwfay4IKkCm93uIZiL/SOns7ipBZk/MhY5pG6v52schbQIA2WcDsfJUeQCBqsC7UXX9I8+dp+Bm/vXjPVsnYvYs0NqgYwCKP3vN3d9Tw+w6tHmOCc5tmOKNpvUXH1n7CQl460fHbTIxSRWVJA8oAVvxeRn8rpB0l+FunVfpg4B9Xueqle79wB0UZDXYvbEVAoqAQ1Bg27k78YXeT62hjZi35fsmijXdVEPJrZBwOA01m7JthYG2pKeqtuehjuR2YCpfF+rPppFCHB1DU5dkeCYHMJBo7WR6nKcvNESVUTz9WJi2DpiSGLUCRSw26mEkAi/eyXRrGCykUAwJJyT1ineNOH0rIxstoZZjgUTB+ZKggV5gAwKChCBuBPUfvX+Ns76NchawUE9LGJm45+oZ4ZsdSkzj/p+4kAa3LgzSn31L071rb95PBH1xok1n0t3mBiFOn07yxOFFxv22Ya1NpGT6iQrp3Jr+6eRc3u6G/CvuUvbPr/6Z1UVt+a17dt1CFiqyw92gn7cSwTbfoyTpq0S9nraeE1tDI1VuN5JYtKoWIBtFezNobUFe3VVPk+C2iASDoKST9cuEspokNZrjFMM/wDt8HPXe5Rbs88/Izng/ANfP+/RvZvzyNGe3VgHkPUnywPU6+NbJYgkE6Yjx+7SgIwIAtnF3nCtnzzmx4voyNCCwJBAsAUD5NeB/wDPB682pffqOZRv3G6b8bAYHZBI3/t0F31KgBtknQbzKsjHa3tZgKIBwCRn7ECvBzuvo+JRQIwSCcYo7iDQ4ojkVWLFHpEtx+uZIthSHLE7B2OpBGiQTtgT5/2nzp/oetzgbmAwxzZNsLB4vJHPI+PJ/rAK/tvaAfgEkAjAOAMfNm7B6UmHqw49J4Y12JSAN66poNpgpB2yjfUnQ8LseD9FiYEJGAckrk/povkHyT9xx+3QUg9Vkdgo2jc1DJJFUPFAChfyT9ulXWZoYZJezfB8g/ntELMx/ZifJ/bZ1saJ+kqCWXdXjgnPzeRz4qv456j9UqbjQIBonPgkivgeaoDx4wEzlMlb9qUBx1C9m2AG2RslSAP9vZepJUg+R/h9jmiWNyKh4UFbA4Gbo83d5u+mkhSwRdFbF/c1kGx48H+erWPRlpKPotw8hy8kfFmu+6dszTDGQTlishkUdpJS3UDooPVAoX8us/pWMaf6W7DAtEf2R26UkggltV6E75tjQknYrRXaCVFgAD88vxBnOr+ufq3UOKZvqHucSAUNq6OaXRxYAC36OmRSQATlj7iSa7PWCmOffxF/QHiV49aHDcVk+WqjuTFYkwj17eOiEaptiMjx2nNKHZUEMksQLeD9Vr6rhMnd/pqJtrJu12rKsLojVQIu1v1blEhok4smyaq5fhvIdN9GfiJqV/VrdX9L9jBBIZYJ5O4NqTfCiSI7bUFixpqVV6t5gow1FjsKCHu8syMkwDB+/wDKsXkMdXXsyqVT2uO0ZAmnEcgbRbZZiWi9mnBY/wB5MwJoWNrOErHACIp4wvz04D/wknn2rz5JeMEn/MnA+3HVNuYyzWeRckzZQu+Y5LyHIH3fylCz5CZ0jdux6lFZEAV2VQCpL9VY8md6dp+996mahv7p3EjFkomrlRd+4t7vaTg1njrtv6ahbR/TX0/AWDGHsXaA5AABdtDC8rLQX9UrOwJAOQcHAHfqGICITGH9sAjy2vgbIKkHTjyD/wBDwCYwQgAHg5JIAvIBJGOcGhYA8V4moJ2LBiMlWYVgUHqiDZJ4ySbz+3Soxzs7RwBmDRKXDkk/I2AB5+V7FgNKzHqV6kkN7d5bJAGCBV2DyCQebzVf7kvsWr1MHcaokijdiubq8XePmh0fLNK8Z0esnZlT8j7fRYkOioUBSAwIIDaYdRpPA9Ql+LUe0Br95JHmgALrJHxwfA0kYViCFIoXyTZz5ORis8DHHTN83oqs0M85UNI2u0IIJ3GHPZHPVfLFdIddUT53oHaMXvjBNpyWJPkjBBBzVm//AFJBmJ3ApjcLIOBdsCRXyAL+/X//2Q==</field>
- <!-- Avoid auto-including this demo user in any default group -->
+ <!-- Avoid auto-including this user in any default group -->
<field name="groups_id" eval="[(5,)]"/>
<field name="partner_id" eval="ref('base.res_partner_agrolait')"/>
</record>
+ <!-- Add the demo user to the portal (and therefore to the portal member group) -->
<record id="portal" model="res.portal">
- <field name="users" eval="[(4,ref('portal_demo_user'))]"/>
+ <field name="users" eval="[(4,ref('demo_user0'))]"/>
+ </record>
+
+ <!-- Company news and comments -->
+ <record id="message_company_news0" model="mail.message">
+ <field name="subject">Our first company's blogpost !</field>
+ <field name="model">mail.group</field>
+ <field name="res_id" ref="company_news_feed"/>
+ <field name="content_subtype">html</field>
+ <field name="body_html"><![CDATA[Hello, and welcome to our company's portal !
+
+Lorem ipsum <b>sit amet</b>, consectetur <em>adipiscing elit</em>. Pellentesque et quam sapien, in sagittis tellus.
+Praesent vel massa sed massa consequat egestas in tristique orci. Praesent iaculis libero et neque vehicula iaculis. Vivamus placerat tincidunt orci ac ornare. Proin ut dolor fringilla velit ultricies consequat. Maecenas sit amet ipsum non leo interdum imperdiet. Donec sapien mi.
+
+Fusce tempus elit volutpat mi auctor adipiscing. Nam congue luctus suscipit. Sed tellus libero, venenatis ut mollis ut, luctus quis dui. Sed rhoncus pulvinar orci in consectetur.
+
+Nulla turpis leo, rhoncus ut egestas sit amet, consectetur vitae urna. Mauris in dolor in sapien tempus vehicula.]]></field>
+ <field name="type">comment</field>
+ <field name="user_id" ref="base.user_root"/>
+ </record>
+
+ <record id="message_company_news0_comment0" model="mail.message">
+ <field name="model">mail.group</field>
+ <field name="res_id" ref="company_news_feed"/>
+ <field name="content_subtype">html</field>
+ <field name="body_html"><![CDATA[Great first blogpost ! (first comment)]]></field>
+ <field name="parent_id" ref="message_company_news0"/>
+ <field name="type">comment</field>
+ <field name="user_id" ref="base.user_demo"/>
+ </record>
+
+ <record id="message_company_news0_comment1" model="mail.message">
+ <field name="model">mail.group</field>
+ <field name="res_id" ref="company_news_feed"/>
+ <field name="content_subtype">html</field>
+ <field name="body_html"><![CDATA[Thanks ! (second comment)]]></field>
+ <field name="parent_id" ref="message_company_news0"/>
+ <field name="type">comment</field>
+ <field name="user_id" ref="base.user_root"/>
</record>
</data>
diff --git a/addons/portal/portal_view.xml b/addons/portal/portal_view.xml
index 794c8ed788b..c8db077edc7 100644
--- a/addons/portal/portal_view.xml
+++ b/addons/portal/portal_view.xml
@@ -2,21 +2,6 @@
<openerp>
<data>
- <!-- menu Administration/Portals/Portals -->
- <record id="portal_list_action" model="ir.actions.act_window">
- <field name="name">Portals</field>
- <field name="res_model">res.portal</field>
- <field name="view_type">form</field>
- <field name="view_mode">tree,form</field>
- <!-- a context is necessary to get the right portal form view -->
- <field name="context">{'form_view_ref': 'portal.portal_form_view'}</field>
- <field name="help">
-A portal helps defining specific views and rules for a group of users (the
-portal group). A portal menu, widgets and specific groups may be assigned to
-the portal's users.
- </field>
- </record>
-
<!-- portal tree view -->
<record id="portal_list_view" model="ir.ui.view">
<field name="name">Portal List</field>
@@ -28,7 +13,6 @@ the portal's users.
</tree>
</field>
</record>
-
<!-- portal form view -->
<record id="portal_form_view" model="ir.ui.view">
<field name="name">Portal Form</field>
@@ -63,42 +47,23 @@ the portal's users.
</page>
</field>
</record>
-
- <record id="company_news_feed" model="mail.group">
- <field name="name">Company's news feed</field>
- </record>
-
- <record id="action_news" model="ir.actions.act_window">
- <field name="name">News</field>
- <field name="res_model">mail.group</field>
- <field name="res_id" ref="company_news_feed"/>
- <field name="view_mode">form</field>
+ <!-- action Administration/Portals/Portals -->
+ <record id="portal_list_action" model="ir.actions.act_window">
+ <field name="name">Portals</field>
+ <field name="res_model">res.portal</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">tree,form</field>
+ <!-- a context is necessary to get the right portal form view -->
+ <field name="context">{'form_view_ref': 'portal.portal_form_view'}</field>
+ <field name="help">
+A portal helps defining specific views and rules for a group of users (the
+portal group). A portal menu, widgets and specific groups may be assigned to
+the portal's users.
+ </field>
</record>
-
-
- <!-- module's menu -->
- <!-- menu Administration/Portals -->
- <menuitem name="Portals Settings" id="portal_menu_settings" parent="base.menu_administration"
- groups="group_portal_manager"/>
-
+ <!-- menu Administration/Portals/Portals -->
+ <menuitem name="Portals Settings" id="portal_menu_settings" parent="base.menu_administration" groups="group_portal_manager"/>
<menuitem name="Portals" id="portal_list_menu" parent="portal_menu_settings" action="portal_list_action"/>
- <!-- root menu for portal members (chrooted in this menu) -->
- <menuitem name="Portal Members Root Menu" id="portal_members_root_menu" parent="portal_menu_settings"/>
- <menuitem name="Portal Member's Menu" id="menu_portal" parent="portal_members_root_menu"/>
- <menuitem name="Our company" id="portal_company"
- parent="menu_portal" sequence="10"/>
- <menuitem name="News" id="portal_company_news"
- parent="portal_company" sequence="10" action="action_news"/>
-
- <menuitem name="Orders" id="portal_orders"
- parent="menu_portal" sequence="20"/>
- <menuitem name="Invoices and Payments" id="portal_invoices_payements"
- parent="menu_portal" sequence="30"/>
- <menuitem name="Projects" id="portal_projects"
- parent="menu_portal" sequence="40"/>
- <menuitem name="After Sale Services" id="portal_after_sales"
- parent="menu_portal" sequence="50"/>
-
</data>
</openerp>
diff --git a/addons/portal/res_user.py b/addons/portal/res_user.py
index 127c3079b29..9ed95a8a740 100644
--- a/addons/portal/res_user.py
+++ b/addons/portal/res_user.py
@@ -30,7 +30,5 @@ class res_users(osv.osv):
string='Related Partner'),
}
-res_users()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/portal/res_user_view.xml b/addons/portal/res_user_view.xml
index 492c2ec5559..d481b865b79 100644
--- a/addons/portal/res_user_view.xml
+++ b/addons/portal/res_user_view.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
+
<!-- add partner field in user form -->
<record id="view_users_form" model="ir.ui.view">
<field name="name">res.portal.users.form</field>
@@ -13,5 +14,6 @@
</field>
</field>
</record>
+
</data>
</openerp>
diff --git a/addons/portal/security/portal_security.xml b/addons/portal/security/portal_security.xml
index 37e94581d77..4a493204d67 100644
--- a/addons/portal/security/portal_security.xml
+++ b/addons/portal/security/portal_security.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
- <data>
+ <data noupdate="1">
- <!-- Don't use any implied_ids here; this group behavior is particular -->
+ <!-- Don't use any implied_ids here; this group's behavior is particular -->
<record id="group_portal_member" model="res.groups">
<field name="name">Portal Member</field>
- <field name="comment">Portal members can access information provided by the portal menu and the others module it's linked with. Also, portal members are chrooted in a specific menu.</field>
+ <field name="comment">Portal members can access information through the portal menu. Also, they are chrooted in this specific menu.</field>
</record>
<record id="module_category_portal" model="ir.module.category">
diff --git a/addons/portal_claim/__openerp__.py b/addons/portal_claim/__openerp__.py
index 9fba57ba9ac..197227cc45f 100644
--- a/addons/portal_claim/__openerp__.py
+++ b/addons/portal_claim/__openerp__.py
@@ -26,15 +26,15 @@
'category': 'Tools',
'complexity': "easy",
'description': """
-This module adds claim menu and features to your portal if claim and portal are
+This module adds claim menu and features to your portal if claim and portal are
installed.
""",
'author': 'OpenERP SA',
'depends': ['crm_claim','portal'],
'data': [
- 'security/portal_security.xml',
'portal_claim_view.xml',
- "security/ir.model.access.csv",
+ 'security/ir.model.access.csv',
+ 'security/portal_security.xml',
],
'installable': True,
'auto_install':True,
diff --git a/addons/portal_claim/security/portal_security.xml b/addons/portal_claim/security/portal_security.xml
index feff94ed43c..e902bd043ad 100644
--- a/addons/portal_claim/security/portal_security.xml
+++ b/addons/portal_claim/security/portal_security.xml
@@ -3,7 +3,7 @@
<data noupdate="1">
<record id="portal_stock_picking_user_rule" model="ir.rule">
- <field name="name">Personal Claims</field>
+ <field name="name">Portal Personal Claims</field>
<field ref="crm_claim.model_crm_claim" name="model_id"/>
<field name="domain_force">[('partner_id','child_of',user.partner_id.id)]</field>
<field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
diff --git a/addons/portal_crm/__openerp__.py b/addons/portal_crm/__openerp__.py
index 044f3280ce3..4fe023ccb48 100644
--- a/addons/portal_crm/__openerp__.py
+++ b/addons/portal_crm/__openerp__.py
@@ -26,18 +26,20 @@
'category': 'Tools',
'complexity': "easy",
'description': """
-This module adds crm menu and features (contact form) to your portal if crm and
-portal are installed.
+This module adds a contact page (with a contact form creating a lead when
+submitted) to your portal if crm and portal are installed.
""",
'author': 'OpenERP SA',
'depends': ['crm','portal'],
'data': [
- 'security/ir.model.access.csv',
'wizard/contact_view.xml',
],
- 'installable': True,
- 'auto_install':True,
+ 'installable': True
+, 'auto_install':True,
'category':'Hidden',
+ 'css': [
+ 'static/src/css/portal_crm.css',
+ ],
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/portal_crm/security/ir.model.access.csv b/addons/portal_crm/security/ir.model.access.csv
deleted file mode 100644
index 08145a00f54..00000000000
--- a/addons/portal_crm/security/ir.model.access.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-
diff --git a/addons/portal_crm/static/src/css/portal_crm.css b/addons/portal_crm/static/src/css/portal_crm.css
new file mode 100644
index 00000000000..0589eb92e71
--- /dev/null
+++ b/addons/portal_crm/static/src/css/portal_crm.css
@@ -0,0 +1,42 @@
+ /* Root container */
+.openerp .oe_portal_crm_contact {
+ width: 800px;
+ margin: auto;
+ padding: 8px 0 0 0;
+}
+
+/* Contact form section */
+.openerp .oe_portal_crm_contact .oe_portal_crm_contact_form {
+ margin-right: 10px;
+}
+.openerp .oe_portal_crm_contact .oe_portal_crm_contact_form input[type="text"] {
+ width: 40%;
+}
+
+/* Offices list section */
+.openerp .oe_portal_crm_contact .oe_portal_crm_office {
+ background: #DDD;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
+ -o-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
+ -box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
+}
+.openerp .oe_portal_crm_contact .oe_portal_crm_office * {
+ background: transparent !important;
+}
+.openerp .oe_portal_crm_contact .oe_portal_crm_office .oe_fold_column.oe_kanban_record {
+ float: none;
+ display: block;
+ width: 100%;
+ margin-bottom: 5px;
+ padding: 5px;
+}
+.openerp .oe_portal_crm_contact .oe_portal_crm_office li:last-child {
+ margin-bottom: 1em;
+}
+.openerp .oe_portal_crm_contact .oe_portal_crm_office ul:last-child li:last-child {
+ margin-bottom: 0;
+}
diff --git a/addons/portal_crm/wizard/contact.py b/addons/portal_crm/wizard/contact.py
index be21decafa9..505bb62bb16 100644
--- a/addons/portal_crm/wizard/contact.py
+++ b/addons/portal_crm/wizard/contact.py
@@ -1,33 +1,90 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2011 OpenERP S.A (<http://www.openerp.com>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
from openerp.osv import osv, fields
+from openerp import SUPERUSER_ID
class crm_contact_us(osv.TransientModel):
""" Create new leads through the "contact us" form """
_name = 'portal_crm.crm_contact_us'
_description = 'Contact form for the portal'
_inherit = 'crm.lead'
+ _columns = {
+ 'company_ids' : fields.many2many('res.company', string='Companies', readonly=True),
+ }
+
+ def _get_companies(self, cr, uid, context=None):
+ """
+ Fetch companies in order to display them in the wizard view
+
+ @return a list of ids of the companies
+ """
+ r = self.pool.get('res.company').search(cr, uid, [], context=context)
+ return r
+
+ def _get_current_user_email(self, cr, uid, context=None):
+ """
+ If the user is logged in (i.e. not anonymous), get the user's email to
+ pre-fill the email_from field.
+
+ @return current user's email if the user isn't "anonymous", None otherwise
+ """
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+
+ if (user.login != 'anonymous'):
+ return user.user_email
+ else:
+ return None
+
+ _defaults = {
+ 'email_from' : _get_current_user_email,
+ 'company_ids' : _get_companies,
+ }
def create(self, cr, uid, values, context=None):
- """
- Since they potentially sensitive, we don't want any user to be able to
- read datas generated through this module. That's why we'll write those
- information in the crm.lead table and leave blank entries in the
- portal_crm.crm_contact_us table. This is why the create() method is
- overridden.
+ """
+ Since they potentially sensitive, we don't want any user to be able to
+ read datas generated through this module. That's why we'll write those
+ information in the crm.lead table and leave blank entries in the
+ portal_crm.crm_contact_us table. This is why the create() method is
+ overwritten.
"""
crm_lead = self.pool.get('crm.lead')
-
- """
- Because of the complex inheritance of the crm.lead model and the other
- models implied (like mail.thread, among others, that performs a read
- when its create() method is called (in method message_get_subscribers()),
- it is quite complicated to set proper rights for this object.
- Therefore, user #1 will perform the creation until a better workaround
- is figured out.
+
+ """
+ Because of the complex inheritance of the crm.lead model and the other
+ models implied (like mail.thread, among others, that performs a read
+ when its create() method is called (in method message_get_subscribers()),
+ it is quite complicated to set proper rights for this object.
+ Therefore, user SUPERUSER_ID will perform the creation until a better
+ workaround is figured out.
"""
- crm_lead.create(cr, 1, dict(values,user_id=False), context)
+ values['contact_name'] = values['name']
+ crm_lead.create(cr, SUPERUSER_ID, dict(values,user_id=False), context)
- """ Create an empty record in the portal_crm.crm_contact_us table """
- return super(crm_contact_us, self).create(cr, uid, {})
+ """
+ Create an empty record in the portal_crm.crm_contact_us table.
+ Since the 'name' field is mandatory, give an empty string to avoid an integrity error.
+ """
+ return super(crm_contact_us, self).create(cr, uid, {'name': ' '})
def submit(self, cr, uid, ids, context=None):
""" When the form is submitted, redirect the user to a "Thanks" message """
@@ -36,5 +93,6 @@ class crm_contact_us(osv.TransientModel):
'view_type': 'form',
'res_model': self._name,
'res_id': ids[0],
- 'view_id': self.pool.get('ir.model.data').get_object_reference(cr, uid, 'portal_crm', 'wizard_contact_form_view_thanks')[1]
+ 'view_id': self.pool.get('ir.model.data').get_object_reference(cr, uid, 'portal_crm', 'wizard_contact_form_view_thanks')[1],
+ 'target': 'inline'
}
diff --git a/addons/portal_crm/wizard/contact_view.xml b/addons/portal_crm/wizard/contact_view.xml
index 904326ea409..96d55722752 100644
--- a/addons/portal_crm/wizard/contact_view.xml
+++ b/addons/portal_crm/wizard/contact_view.xml
@@ -8,16 +8,70 @@
<field name="model">portal_crm.crm_contact_us</field>
<field name="type">form</field>
<field name="arch" type="xml">
- <form string="Contact Us wizard view">
- <group col="2">
- <field name="contact_name" string="Name"/>
- <field name="name" string="Company"/>
- <field name="email_from"/>
- <field name="phone"/>
- <field name="description" string="Your question"/>
- <label string=""/>
- <button string="Submit" name="submit" type="object"/>
- </group>
+ <form string="Contact wizard view" version="7.0">
+ <div class="oe_portal_crm_contact">
+ <h1>Contact us</h1>
+ <table>
+ <tr>
+ <td width="70%%">
+ <div class="oe_portal_crm_contact_form">
+ <group>
+ <field name="name"/>
+ <field name="partner_name"/>
+ <field name="email_from"/>
+ <field name="phone"/>
+ <field name="description"/>
+ <button string="Submit" name="submit" type="object"/>
+ </group>
+ </div>
+ </td>
+ <td>
+ <div class="oe_portal_crm_office">
+ <field name="company_ids" widget="many2many_kanban">
+ <kanban>
+ <field name="name"/>
+ <field name="email"/>
+ <field name="phone"/>
+ <field name="street"/>
+ <field name="street2"/>
+ <field name="zip"/>
+ <field name="city"/>
+ <field name="country_id"/>
+ <field name="state_id"/>
+ <templates>
+ <t t-name="kanban-box">
+ <h4><field name="name"/></h4>
+ <ul class="oe_portal_crm_address">
+ <li t-if="record.street"><field name="street"/></li>
+ <li t-if="record.street2"><field name="street2"/></li>
+ <li t-if="record.zip"><field name="zip"/></li>
+ <li t-if="record.city"><field name="city"/></li>
+ <li t-if="record.country_id"><field name="country_id"/></li>
+ </ul>
+ <ul class="oe_portal_crm_contact_info">
+ <li t-if="record.phone"><field name="phone"/></li>
+ <li t-if="record.email.raw_value">
+ <a title="Mail" t-att-href="'mailto:'+record.email.value">
+ <field name="email"/>
+ </a>
+ </li>
+ </ul>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <div class="oe_portal_crm_team">
+
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
</form>
</field>
</record>
@@ -31,9 +85,9 @@
<field name="priority">99</field>
<field name="arch" type="xml">
<form string="Thank you">
- <!--
- make sure there is at least one field in the view,
- otherwise the orm will try to select all the model's
+ <!--
+ make sure there is at least one field in the view,
+ otherwise the orm will try to select all the model's
records and this will result in a permission denied error
-->
<field name="name" invisible="1"/>
@@ -44,9 +98,10 @@
<!-- wizard action -->
<record id="action_wizard_contact_us" model="ir.actions.act_window">
- <field name="name">Contact Us</field>
+ <field name="name">Contact</field>
<field name="res_model">portal_crm.crm_contact_us</field>
<field name="view_mode">form</field>
+ <field name="target">inline</field>
</record>
<!-- attach it to the portal menu -->
diff --git a/addons/portal_event/__init__.py b/addons/portal_event/__init__.py
index 26c654db9dd..60fb460545a 100644
--- a/addons/portal_event/__init__.py
+++ b/addons/portal_event/__init__.py
@@ -19,3 +19,4 @@
#
##############################################################################
+import event
diff --git a/addons/portal_event/__openerp__.py b/addons/portal_event/__openerp__.py
index 865f18604d6..2f5220c9f36 100644
--- a/addons/portal_event/__openerp__.py
+++ b/addons/portal_event/__openerp__.py
@@ -26,12 +26,13 @@
'category': 'Tools',
'complexity': "easy",
'description': """
-This module adds event menu and features to your portal if event and portal are
+This module adds event menu and features to your portal if event and portal are
installed.
""",
'author': 'OpenERP SA',
'depends': ['event','portal'],
'data': [
+ 'event_view.xml',
'security/portal_security.xml',
'portal_event_view.xml',
'security/ir.model.access.csv',
diff --git a/addons/portal_event/event.py b/addons/portal_event/event.py
new file mode 100644
index 00000000000..6faf83eff36
--- /dev/null
+++ b/addons/portal_event/event.py
@@ -0,0 +1,39 @@
+# -*- 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/>.
+#
+##############################################################################
+
+from osv import osv, fields
+
+class event_event(osv.osv):
+ _description = 'Portal event'
+ _inherit = 'event.event'
+
+ """
+ ``visibility``: defines if the event appears on the portal's event page
+ - 'public' means the event will appear for everyone (anonymous)
+ - 'private' means the event won't appear
+ """
+ _columns = {
+ 'visibility': fields.selection([('public', 'Public'),('private', 'Private')],
+ string='Visibility', help='Event\'s visibility in the portal\'s contact page'),
+ }
+ _defaults = {
+ 'visibility': 'private',
+ }
diff --git a/addons/portal_event/event_view.xml b/addons/portal_event/event_view.xml
new file mode 100644
index 00000000000..6966add58e8
--- /dev/null
+++ b/addons/portal_event/event_view.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <!-- add visibility field to the event form view -->
+ <record id="view_employee_form" model="ir.ui.view">
+ <field name="name">portal.event.form</field>
+ <field name="model">event.event</field>
+ <field name="type">form</field>
+ <field name="inherit_id" ref="event.view_event_form"/>
+ <field name="arch" type="xml">
+ <xpath expr="//page[last()]" position="after">
+ <page string="Portal Settings">
+ <group>
+ <field name="visibility"/>
+ </group>
+ </page>
+ </xpath>
+ </field>
+ </record>
+
+ </data>
+</openerp>
diff --git a/addons/portal_event/portal_event_view.xml b/addons/portal_event/portal_event_view.xml
index 70bb408b32d..8b1f21bbef0 100644
--- a/addons/portal_event/portal_event_view.xml
+++ b/addons/portal_event/portal_event_view.xml
@@ -2,7 +2,7 @@
<openerp>
<data>
- <menuitem name="Events" id="portal_company_events" parent="portal.portal_company"
+ <menuitem name="Events" id="portal_company_events" parent="portal.portal_company"
action="event.action_event_view" sequence="40"/>
</data>
diff --git a/addons/portal_event/security/portal_security.xml b/addons/portal_event/security/portal_security.xml
index 82044fb8b11..6a3ed0ac786 100644
--- a/addons/portal_event/security/portal_security.xml
+++ b/addons/portal_event/security/portal_security.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
- <data>
+ <data noupdate="1">
<record id="portal_event_rule" model="ir.rule">
- <field name="name">Personal Events</field>
+ <field name="name">Portal Visible Events</field>
<field ref="event.model_event_event" name="model_id"/>
- <field name="domain_force">[]</field>
+ <field name="domain_force">[('visibility', '=', 'public')]</field>
<field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
</record>
<record id="portal_registration_rule" model="ir.rule">
- <field name="name">Personal Registrations</field>
+ <field name="name">Portal Personal Registrations</field>
<field ref="event.model_event_registration" name="model_id"/>
<field name="domain_force">[('partner_id','child_of',user.partner_id.id)]</field>
<field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
diff --git a/addons/portal_hr_employees/__init__.py b/addons/portal_hr_employees/__init__.py
new file mode 100644
index 00000000000..f0abe52049a
--- /dev/null
+++ b/addons/portal_hr_employees/__init__.py
@@ -0,0 +1,22 @@
+# -*- 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 hr_employee
diff --git a/addons/portal_hr_employees/__openerp__.py b/addons/portal_hr_employees/__openerp__.py
new file mode 100644
index 00000000000..ec883e78acf
--- /dev/null
+++ b/addons/portal_hr_employees/__openerp__.py
@@ -0,0 +1,46 @@
+# -*- 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': 'Portal HR employees',
+ 'version': '0.1',
+ 'category': 'Tools',
+ 'complexity': "easy",
+ 'description': """
+This module adds a list of employees to your portal's contact page if hr and
+portal_crm (which creates the contact page) are installed.
+ """,
+ 'author': 'OpenERP SA',
+ 'depends': ['hr','portal_crm'],
+ 'data': [
+ 'hr_employee_view.xml',
+ 'security/ir.model.access.csv',
+ ],
+ 'installable': True,
+ 'auto_install':True,
+ 'category':'Hidden',
+ 'css': [
+ 'static/src/css/portal_hr_employees.css',
+ ],
+
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/portal_hr_employees/hr_employee.py b/addons/portal_hr_employees/hr_employee.py
new file mode 100644
index 00000000000..b54e544a744
--- /dev/null
+++ b/addons/portal_hr_employees/hr_employee.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2011 OpenERP S.A (<http://www.openerp.com>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from osv import osv, fields
+
+class crm_contact_us(osv.TransientModel):
+ """ Add employees list to the portal's contact page """
+ _description = 'Contact form for the portal'
+ _inherit = 'portal_crm.crm_contact_us'
+ _columns = {
+ 'employee_ids' : fields.many2many('hr.employee', string='Employees', readonly=True),
+ }
+
+ """ Little trick to display employees in our wizard view """
+ def _get_employee(self, cr, uid, context=None):
+ """ Employees flagged as 'private' won't appear on the contact page """
+ r = self.pool.get('hr.employee').search(cr, uid, [('visibility', '!=', 'private')], context=context)
+ return r
+
+ _defaults = {
+ 'employee_ids' : _get_employee,
+ }
+
+class hr_employee(osv.osv):
+ _description = 'Portal employee'
+ _inherit = 'hr.employee'
+
+ """
+ ``visibility``: defines if the employee appears on the portal's contact page
+ - 'public' means the employee will appear for everyone (anonymous)
+ - 'private' means the employee won't appear
+ """
+ _columns = {
+ 'visibility': fields.selection([('public', 'Public'),('private', 'Private')],
+ string='Visibility', help='Employee\'s visibility in the portal\'s contact page'),
+ }
+ _defaults = {
+ 'visibility': 'private',
+ }
diff --git a/addons/portal_hr_employees/hr_employee_view.xml b/addons/portal_hr_employees/hr_employee_view.xml
new file mode 100644
index 00000000000..849157ad44a
--- /dev/null
+++ b/addons/portal_hr_employees/hr_employee_view.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+
+ <!-- add visibility field to the employee form view -->
+ <record id="view_employee_form" model="ir.ui.view">
+ <field name="name">portal_hr_employees.employee.form</field>
+ <field name="model">hr.employee</field>
+ <field name="type">form</field>
+ <field name="inherit_id" ref="hr.view_employee_form"/>
+ <field name="arch" type="xml">
+ <xpath expr="//page[last()]" position="after">
+ <page string="Portal Settings">
+ <group>
+ <field name="visibility"/>
+ </group>
+ </page>
+ </xpath>
+ </field>
+ </record>
+
+ <!-- a kanban view of the employees to the portal's contact page -->
+ <record id="wizard_contact_form_view_employees_list" model="ir.ui.view">
+ <field name="name">portal_hr_employees.employees_list</field>
+ <field name="model">portal_crm.crm_contact_us</field>
+ <field name="type">form</field>
+ <field name="inherit_id" ref="portal_crm.wizard_contact_form_view"/>
+ <field name="arch" type="xml">
+ <xpath expr="//div[@class='oe_portal_crm_team']" position="inside">
+ <h1>Meet the team</h1>
+ <field name="employee_ids" widget="many2many_kanban">
+ <kanban>
+ <field name="visibility"/>
+
+ <templates>
+ <t t-name="kanban-box">
+ <div class="oe_employee_vignette">
+ <div class="oe_employee_image">
+ <img t-att-src="kanban_image('hr.employee', 'photo', record.id.value)" class="oe_employee_picture"/>
+ </div>
+ <div class="oe_employee_details">
+ <h4>
+ <a type="edit"><field name="name"/><t t-if="record.login.raw_value"> (<field name="login"/>)</t></a>
+ </h4>
+ <ul>
+ <li t-if="record.job_id.raw_value"><field name="job_id"/></li>
+ <li t-if="record.work_phone.raw_value">Tel: <field name="work_phone"/></li>
+ <li t-if="record.mobile_phone.raw_value">Mobile: <field name="mobile_phone"/></li>
+ <li t-if="record.work_email.raw_value"><a t-attf-href="mailto:#{record.work_email.value}"><field name="work_email"/></a></li>
+ </ul>
+ </div>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </xpath>
+ </field>
+ </record>
+
+ </data>
+</openerp>
diff --git a/addons/portal_hr_employees/security/ir.model.access.csv b/addons/portal_hr_employees/security/ir.model.access.csv
new file mode 100644
index 00000000000..6131f49d749
--- /dev/null
+++ b/addons/portal_hr_employees/security/ir.model.access.csv
@@ -0,0 +1,6 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_hr_employee_user,hr.employee user,hr.model_hr_employee,portal.group_portal_member,1,0,0,0
+access_res_partner,res.partner,base.model_res_partner,portal.group_portal_member,1,0,0,0
+access_res_partner_address,res.partner_address,base.model_res_partner_address,portal.group_portal_member,1,0,0,0
+access_res_partner_category,res.partner_category,base.model_res_partner_category,portal.group_portal_member,1,0,0,0
+access_res_partner_title,res.partner_title,base.model_res_partner_title,portal.group_portal_member,1,0,0,0
diff --git a/addons/portal_hr_employees/static/src/css/portal_hr_employees.css b/addons/portal_hr_employees/static/src/css/portal_hr_employees.css
new file mode 100644
index 00000000000..351fd442f20
--- /dev/null
+++ b/addons/portal_hr_employees/static/src/css/portal_hr_employees.css
@@ -0,0 +1,14 @@
+/* Employees list section */
+.openerp .oe_portal_crm_contact .oe_kanban_groups {
+ width: 100%;
+}
+.openerp .oe_portal_crm_contact .oe_portal_crm_team {
+ padding: 8px 0 0 0;
+}
+.openerp .oe_portal_crm_contact .oe_portal_crm_team .oe_employee_details {
+ width: 170px;
+}
+.openerp .oe_portal_crm_contact .oe_portal_crm_team .oe_employee_image {
+ width: 65px;
+ height: 65px;
+}
diff --git a/addons/portal_hr_recruitment/__openerp__.py b/addons/portal_hr_recruitment/__openerp__.py
index 015e76d3d06..0b7fb78b7f0 100644
--- a/addons/portal_hr_recruitment/__openerp__.py
+++ b/addons/portal_hr_recruitment/__openerp__.py
@@ -21,13 +21,12 @@
{
- 'name': 'Portal Jobs',
+ 'name': 'Portal HR recruitment',
'version': '0.1',
'category': 'Tools',
'complexity': "easy",
'description': """
-This module adds applications menu and features to your portal if hr and portal
-are installed.
+This module adds a jobs page to your portal if hr and portal are installed.
""",
'author': 'OpenERP SA',
'depends': ['hr','portal'],
diff --git a/addons/portal_hr_recruitment/portal_jobs_view.xml b/addons/portal_hr_recruitment/portal_jobs_view.xml
index 30976fc1954..e3e9cffb063 100644
--- a/addons/portal_hr_recruitment/portal_jobs_view.xml
+++ b/addons/portal_hr_recruitment/portal_jobs_view.xml
@@ -2,8 +2,8 @@
<openerp>
<data>
- <menuitem name="Jobs" id="portal_company_jobs"
- parent="portal.portal_company" action="hr.action_hr_job"
+ <menuitem name="Jobs" id="portal_company_jobs"
+ parent="portal.portal_company" action="hr.action_hr_job"
sequence="20"/>
</data>
diff --git a/addons/portal_project/__openerp__.py b/addons/portal_project/__openerp__.py
index f90c0cf9df2..4f8774bf99e 100644
--- a/addons/portal_project/__openerp__.py
+++ b/addons/portal_project/__openerp__.py
@@ -21,12 +21,12 @@
{
- 'name': 'Portal Issue',
+ 'name': 'Portal Project',
'version': '0.1',
'category': 'Tools',
'complexity': "easy",
'description': """
-This module adds project menu and features (tasks) to your portal if project
+This module adds project menu and features (tasks) to your portal if project
and portal are installed.
""",
'author': 'OpenERP SA',
diff --git a/addons/portal_project/security/ir.model.access.csv b/addons/portal_project/security/ir.model.access.csv
index 212230634c3..dceca5ba8bb 100644
--- a/addons/portal_project/security/ir.model.access.csv
+++ b/addons/portal_project/security/ir.model.access.csv
@@ -2,3 +2,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_task,tasks,project.model_project_task,portal.group_portal_member,1,0,0,0
access_task_type,task_type,project.model_project_task_type,portal.group_portal_member,1,0,0,0
access_task_work,task_work,project.model_project_task_work,portal.group_portal_member,1,0,0,0
+access_project_category,project_category,project.model_project_category,portal.group_portal_member,1,0,0,0
diff --git a/addons/portal_project/security/portal_security.xml b/addons/portal_project/security/portal_security.xml
index f9983861c68..b995c79bbbc 100644
--- a/addons/portal_project/security/portal_security.xml
+++ b/addons/portal_project/security/portal_security.xml
@@ -3,7 +3,7 @@
<data noupdate="1">
<record id="portal_task_rule" model="ir.rule">
- <field name="name">Personal Task</field>
+ <field name="name">Portal Personal Task</field>
<field ref="project.model_project_task" name="model_id"/>
<field name="domain_force">[('partner_id','child_of',user.partner_id.id)]</field>
<field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
diff --git a/addons/portal_project_issue/__openerp__.py b/addons/portal_project_issue/__openerp__.py
index d1be2ec604d..17ba4b0d5aa 100644
--- a/addons/portal_project_issue/__openerp__.py
+++ b/addons/portal_project_issue/__openerp__.py
@@ -26,7 +26,7 @@
'category': 'Tools',
'complexity': "easy",
'description': """
-This module adds issue menu and features to your portal if project_issue and
+This module adds issue menu and features to your portal if project_issue and
portal are installed.
""",
'author': 'OpenERP SA',
@@ -39,5 +39,8 @@ portal are installed.
'installable': True,
'auto_install':True,
'category':'Hidden',
+ 'css': [
+ 'static/src/css/portal_project_issue.css',
+ ],
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/portal_project_issue/portal_project_issue_view.xml b/addons/portal_project_issue/portal_project_issue_view.xml
index fdbf1037c20..54e7038ed8d 100644
--- a/addons/portal_project_issue/portal_project_issue_view.xml
+++ b/addons/portal_project_issue/portal_project_issue_view.xml
@@ -2,12 +2,71 @@
<openerp>
<data>
+ <record id="portal_project_issue_kanban_view" model="ir.ui.view">
+ <field name="name">Project Issue Kanban</field>
+ <field name="model">project.issue</field>
+ <field name="type">kanban</field>
+ <field name="arch" type="xml">
+ <kanban version="7.0" class="oe_portal_project_issue">
+ <field name="priority"/>
+ <field name="user_email"/>
+ <field name="user_id"/>
+ <field name="date_deadline"/>
+ <field name="create_date"/>
+ <field name="categ_ids"/>
+ <templates>
+ <t t-name="kanban-box">
+ <div class="oe_kanban_card oe_kanban_global_click">
+ <div class="oe_kanban_content">
+ <div>
+ <h1><a type="edit"><field name="name"/></a></h1>
+ <field name="partner_id"/> <br/>
+ <field name="version_id"/>
+ </div>
+ <div class="oe_kanban_footer_left">
+ <div class="oe_left oe_tags">
+ <t t-foreach="record.categ_ids.raw_value" t-as="categ_id">
+ <span class="oe_tag" t-att-data-categ_id="categ_id"></span>
+ </t>
+ </div>
+ <div class="oe_right">
+ Creation: <field name="create_date"/>
+ <span class="oe_kanban_highlight">
+ <t t-set="priority" t-value="record.priority.raw_value || 5"/>
+ <a type="object" name="set_priority" args="['3']" t-if="priority gt 3" title="Normal Priority">
+ <img src="/web/static/src/img/icons/star-off.png" width="16" height="16"/>
+ </a>
+ <a type="object" name="set_priority" args="['5']" t-if="priority lte 3" title="Normal Priority">
+ <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 3 ? 'on' : 'off'}.png" width="16" height="16"/>
+ </a>
+ <a type="object" name="set_priority" args="['2']" title="High Priority">
+ <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 2 ? 'on' : 'off'}.png" width="16" height="16"/>
+ </a>
+ <a type="object" name="set_priority" args="['1']" title="Highest Priority">
+ <img t-attf-src="/web/static/src/img/icons/star-#{priority == 1 ? 'on' : 'off'}.png" width="16" height="16"/>
+ </a>
+ </span>
+ <t t-if="record.date_deadline.raw_value and record.date_deadline.raw_value lt (new Date())">
+ <span t-attf-class="oe_kanban_status oe_kaban_status_red"> </span>
+ </t>
+ <img t-att-src="kanban_image('res.users', 'avatar', record.user_id.raw_value[0])" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
+ </div>
+ </div>
+ </div>
+ <div class="oe_clear"></div>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </record>
+
<record id="project_issue_categ_act0" model="ir.actions.act_window">
<field name="name">Issues</field>
<field name="res_model">project.issue</field>
<field name="view_type">form</field>
- <field name="view_mode">kanban,tree,calendar</field>
- <field name="view_id" eval="False"/>
+ <field name="view_mode">kanban,form</field>
+ <field name="view_id" ref="portal_project_issue_kanban_view"/>
<field name="domain" eval=""/>
<field name="context">{"search_default_user_id":'', "search_default_draft":'', "search_default_todo":''}</field>
<field name="search_view_id" ref="project_issue.view_project_issue_filter"/>
diff --git a/addons/portal_project_issue/security/ir.model.access.csv b/addons/portal_project_issue/security/ir.model.access.csv
index 8ddfff0f398..5257f9b6d02 100644
--- a/addons/portal_project_issue/security/ir.model.access.csv
+++ b/addons/portal_project_issue/security/ir.model.access.csv
@@ -1,2 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_issues,project_issue,project_issue.model_project_issue,portal.group_portal_member,1,0,1,0
+access_issues,project_issue,project_issue.model_project_issue,portal.group_portal_member,1,0,0,0
+access_case_section,crm_case_section,crm.model_crm_case_section,portal.group_portal_member,1,0,0,0
diff --git a/addons/portal_project_issue/security/portal_security.xml b/addons/portal_project_issue/security/portal_security.xml
index 1bae1ef8e8c..4ef8da5e4b6 100644
--- a/addons/portal_project_issue/security/portal_security.xml
+++ b/addons/portal_project_issue/security/portal_security.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
-
+
<record id="portal_issue_rule" model="ir.rule">
- <field name="name">Personal Issues</field>
+ <field name="name">Portal Personal Issues</field>
<field ref="project_issue.model_project_issue" name="model_id"/>
<field name="domain_force">[('partner_id','child_of',user.partner_id.id)]</field>
<field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
diff --git a/addons/portal_project_issue/static/src/css/portal_project_issue.css b/addons/portal_project_issue/static/src/css/portal_project_issue.css
new file mode 100644
index 00000000000..39c12c6076d
--- /dev/null
+++ b/addons/portal_project_issue/static/src/css/portal_project_issue.css
@@ -0,0 +1,32 @@
+.oe_portal_project_issue {
+ width: 960px;
+ margin: 0 auto;
+}
+
+.oe_portal_project_issue .oe_kanban_groups {
+ width: 100%;
+}
+
+.oe_portal_project_issue .oe_fold_column.oe_kanban_record {
+ float: none;
+ display: block;
+ width: 100%;
+ border-width: 1px;
+ border-radius: 4px;
+ border-style: solid;
+ border-bottom-color: #B9B9B9;
+ border-left-color: #D8D8D8;
+ border-right-color: #D8D8D8;
+ border-top-color: #D8D8D8;
+ margin-bottom: 5px;
+}
+
+.oe_portal_project_issue .oe_fold_column.oe_kanban_record .oe_kanban_content {
+ padding: 5px;
+}
+
+.oe_portal_project_issue .oe_fold_column.oe_kanban_record h1 {
+ margin: 0;
+ font-size: 1.2em;
+ font-weight: bold;
+}
diff --git a/addons/portal_sale/portal_sale_view.xml b/addons/portal_sale/portal_sale_view.xml
index a644be7be61..7743573fda6 100644
--- a/addons/portal_sale/portal_sale_view.xml
+++ b/addons/portal_sale/portal_sale_view.xml
@@ -4,10 +4,10 @@
<record id="action_picking_tree" model="ir.actions.act_window">
<field name="name">Delivery Orders</field>
- <field name="res_model">stock.picking</field>
+ <field name="res_model">stock.picking.out</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
- <field name="view_mode">tree</field>
+ <field name="view_mode">tree,form</field>
<field name="domain">[('type','=','out')]</field>
<field name="context">{'default_type': 'out', 'contact_display': 'partner_address'}</field>
<field name="search_view_id" ref="stock.view_picking_out_search"/>
@@ -25,18 +25,18 @@
<field name="help">You must define a Product for everything you buy or sell. Products can be raw materials, stockable products, consumables or services. The Product form contains detailed information about your products related to procurement logistics, sales price, product category, suppliers and so on.</field>
</record>
- <menuitem name="Quotations" id="portal_quotations" parent="portal.portal_orders"
+ <menuitem name="Quotations" id="portal_quotations" parent="portal.portal_orders"
action="sale.action_order_tree5" sequence="10"/>
- <menuitem name="Sales Orders" id="portal_sales_orders" parent="portal.portal_orders"
+ <menuitem name="Sales Orders" id="portal_sales_orders" parent="portal.portal_orders"
action="sale.action_order_form" sequence="20"/>
- <menuitem name="Delivery Orders" id="portal_delivery" parent="portal.portal_orders"
+ <menuitem name="Delivery Orders" id="portal_delivery" parent="portal.portal_orders"
action="action_picking_tree" sequence="30"/>
- <menuitem name="Products" id="portal_products" parent="portal.portal_orders"
+ <menuitem name="Products" id="portal_products" parent="portal.portal_orders"
action="product_normal_action" sequence="40"/>
- <menuitem name="Invoice" id="portal_invoices" parent="portal.portal_invoices_payements"
+ <menuitem name="Invoice" id="portal_invoices" parent="portal.portal_invoices_payements"
action="account.action_invoice_tree1" sequence="10"/>
- <menuitem name="Refund/Payments" id="portal_payments" parent="portal.portal_invoices_payements"
+ <menuitem name="Refund/Payments" id="portal_payments" parent="portal.portal_invoices_payements"
action="account_voucher.action_vendor_receipt" sequence="20"/>
</data>
diff --git a/addons/portal_sale/security/ir.model.access.csv b/addons/portal_sale/security/ir.model.access.csv
index 5a016f00a05..32266499af7 100644
--- a/addons/portal_sale/security/ir.model.access.csv
+++ b/addons/portal_sale/security/ir.model.access.csv
@@ -2,6 +2,7 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sale_order,sale.order,sale.model_sale_order,portal.group_portal_member,1,0,0,0
access_sale_order_line,sale.order.line,sale.model_sale_order_line,portal.group_portal_member,1,0,0,0
access_stock_picking,stock.picking,stock.model_stock_picking,portal.group_portal_member,1,0,0,0
+access_stock_picking.out,stock.picking.out,stock.model_stock_picking_out,portal.group_portal_member,1,0,0,0
access_stock_move,stock.move,stock.model_stock_move,portal.group_portal_member,1,0,0,0
access_stock_warehouse_orderpoint,stock.warehouse.orderpoint,procurement.model_stock_warehouse_orderpoint,portal.group_portal_member,1,0,0,0
access_account_invoice,account.invoice,account.model_account_invoice,portal.group_portal_member,1,0,0,0
diff --git a/addons/portal_sale/security/portal_security.xml b/addons/portal_sale/security/portal_security.xml
index 43e6867dfd9..f69fd283db6 100644
--- a/addons/portal_sale/security/portal_security.xml
+++ b/addons/portal_sale/security/portal_security.xml
@@ -1,39 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
- <data noupdate="1">
+ <data noupdate="1">
<!-- Sale Portal Access Rules -->
-
<record id="portal_sale_order_user_rule" model="ir.rule">
- <field name="name">Personal Quotations/Sales Orders</field>
+ <field name="name">Portal Personal Quotations/Sales Orders</field>
<field ref="sale.model_sale_order" name="model_id"/>
<field name="domain_force">[('partner_id','child_of',user.partner_id.id)]</field>
<field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
</record>
<record id="portal_stock_picking_user_rule" model="ir.rule">
- <field name="name">Personal Delivery Orders</field>
+ <field name="name">Portal Personal Delivery Orders</field>
<field ref="stock.model_stock_picking" name="model_id"/>
<field name="domain_force">[('partner_id','child_of',[user.partner_id.id])]</field>
<field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
</record>
+ <record id="portal_stock_picking_user_rule" model="ir.rule">
+ <field name="name">Portal Personal Delivery Orders Out</field>
+ <field ref="stock.model_stock_picking_out" name="model_id"/>
+ <field name="domain_force">[('partner_id','child_of',[user.partner_id.id])]</field>
+ <field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
+ </record>
+
<record id="portal_account_invoice_user_rule" model="ir.rule">
- <field name="name">Personal Account Invoices</field>
+ <field name="name">Portal Personal Account Invoices</field>
<field ref="account.model_account_invoice" name="model_id"/>
<field name="domain_force">[('partner_id','child_of',user.partner_id.id)]</field>
<field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
</record>
<record id="portal_personal_payment" model="ir.rule">
- <field name="name">Personal Payments</field>
+ <field name="name">Portal Personal Payments</field>
<field ref="account_voucher.model_account_voucher" name="model_id"/>
<field name="domain_force">[('partner_id','child_of',user.partner_id.id)]</field>
<field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
</record>
<record id="portal_personal_contact" model="ir.rule">
- <field name="name">Personal Contacts</field>
+ <field name="name">Portal Personal Contacts</field>
<field ref="base.model_res_partner" name="model_id"/>
<field name="domain_force">[('id','child_of',user.partner_id.id)]</field>
<field name="groups" eval="[(4, ref('portal.group_portal_member'))]"/>
diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml
index 53e57f14309..a2ec5a9d343 100644
--- a/addons/product/product_view.xml
+++ b/addons/product/product_view.xml
@@ -73,7 +73,7 @@
<div class="oe_title">
<div class="oe_edit_only">
- <label for="name" string="Product Name"/>
+ <label for="name" string="Product Name"/>
</div>
<h1>
<field name="name"/>
@@ -95,12 +95,12 @@
</group>
<group string="Procurement">
<field name="type"/>
- <field name="procure_method"/>
+ <field name="procure_method" groups="base.group_user"/>
<field name="supply_method" groups="base.group_user"/>
</group>
<group string="Prices">
<field name="list_price"/>
- <field name="cost_method"/>
+ <field name="cost_method" groups="base.group_user"/>
<field name="standard_price" attrs="{'readonly':[('cost_method','=','average')]}"/>
<field name="price_margin" groups="product.group_product_variant"/>
<field name="price_extra" groups="product.group_product_variant"/>
diff --git a/addons/product_visible_discount/product_visible_discount_view.xml b/addons/product_visible_discount/product_visible_discount_view.xml
index 6607fe3e9b4..2bb9e7b9b12 100644
--- a/addons/product_visible_discount/product_visible_discount_view.xml
+++ b/addons/product_visible_discount/product_visible_discount_view.xml
@@ -2,9 +2,7 @@
<openerp>
<data>
- #---------------------------------------------------------
- # product price list
- #---------------------------------------------------------
+ <!-- Product price list -->
<record model="ir.ui.view" id="product_pricelist_view_tree">
<field name="name">product.pricelist.tree</field>
<field name="model">product.pricelist</field>
@@ -26,5 +24,6 @@
</field>
</field>
</record>
+
</data>
-</openerp> \ No newline at end of file
+</openerp>
diff --git a/addons/project/project.py b/addons/project/project.py
index 09b260597f6..dda2b86c8bb 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -220,7 +220,7 @@ class project(osv.osv):
'followers': fields.function(_get_followers, method=True, fnct_search=_search_followers,
type='many2many', relation='res.users', string='Followers'),
}
-
+
def dummy(self, cr, uid, ids, context):
return True
@@ -566,7 +566,7 @@ class task(base_stage, osv.osv):
# restore order of the search
result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
return result
-
+
def _read_group_user_id(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
res_users = self.pool.get('res.users')
project_id = self._resolve_project_id_from_context(cr, uid, context=context)
@@ -700,6 +700,7 @@ class task(base_stage, osv.osv):
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('project.category', string='Categories'),
'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready To Pull')], 'Kanban State',
help="A task's kanban state indicates special situations affecting it:\n"
" * Normal is the default situation\n"
@@ -903,7 +904,7 @@ class task(base_stage, osv.osv):
return True
def action_close(self, cr, uid, ids, context=None):
- """ This action closes the task
+ """ This action closes the task
"""
task_id = len(ids) and ids[0] or False
self._check_child_task(cr, uid, ids, context=context)
@@ -913,7 +914,7 @@ class task(base_stage, osv.osv):
def do_close(self, cr, uid, ids, context=None):
""" Compatibility when changing to case_close. """
return self.case_close(cr, uid, ids, context=context)
-
+
def case_close(self, cr, uid, ids, context=None):
""" Closes Task """
if not isinstance(ids, list): ids = [ids]
@@ -946,7 +947,7 @@ class task(base_stage, osv.osv):
def do_cancel(self, cr, uid, ids, context=None):
""" Compatibility when changing to case_cancel. """
return self.case_cancel(cr, uid, ids, context=context)
-
+
def case_cancel(self, cr, uid, ids, context=None):
tasks = self.browse(cr, uid, ids, context=context)
self._check_child_task(cr, uid, ids, context=context)
@@ -958,7 +959,7 @@ class task(base_stage, osv.osv):
def do_open(self, cr, uid, ids, context=None):
""" Compatibility when changing to case_open. """
return self.case_open(cr, uid, ids, context=context)
-
+
def case_open(self, cr, uid, ids, context=None):
if not isinstance(ids,list): ids = [ids]
self.case_set(cr, uid, ids, 'open', {'date_start': fields.datetime.now()}, context=context)
@@ -968,7 +969,7 @@ class task(base_stage, osv.osv):
def do_draft(self, cr, uid, ids, context=None):
""" Compatibility when changing to case_draft. """
return self.case_draft(cr, uid, ids, context=context)
-
+
def case_draft(self, cr, uid, ids, context=None):
self.case_set(cr, uid, ids, 'draft', {}, context=context)
self.case_draft_send_note(cr, uid, ids, context=context)
@@ -977,11 +978,11 @@ class task(base_stage, osv.osv):
def do_pending(self, cr, uid, ids, context=None):
""" Compatibility when changing to case_pending. """
return self.case_pending(cr, uid, ids, context=context)
-
+
def case_pending(self, cr, uid, ids, context=None):
self.case_set(cr, uid, ids, 'pending', {}, context=context)
return self.case_pending_send_note(cr, uid, ids, context=context)
-
+
def _delegate_task_attachments(self, cr, uid, task_id, delegated_task_id, context=None):
attachment = self.pool.get('ir.attachment')
attachment_ids = attachment.search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', task_id)], context=context)
@@ -1083,7 +1084,7 @@ class task(base_stage, osv.osv):
new_stage = vals.get('stage_id')
vals_reset_kstate = dict(vals, kanban_state='normal')
for t in self.browse(cr, uid, ids, context=context):
- #TO FIX:Kanban view doesn't raise warning
+ #TO FIX:Kanban view doesn't raise warning
#stages = [stage.id for stage in t.project_id.type_ids]
#if new_stage not in stages:
#raise osv.except_osv(_('Warning !'), _('Stage is not defined in the project.'))
@@ -1130,7 +1131,7 @@ class task(base_stage, osv.osv):
result += "\n"
return result
-
+
# ---------------------------------------------------
# OpenChatter methods and notifications
# ---------------------------------------------------
@@ -1367,3 +1368,11 @@ class project_task_history_cumulative(osv.osv):
)
""")
+
+class project_category(osv.osv):
+ """ Category of project's task (or issue) """
+ _name = "project.category"
+ _description = "Category of project's task, issue, ..."
+ _columns = {
+ 'name': fields.char('Name', size=64, required=True, translate=True),
+ }
diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml
index 7f96ff87198..1f9885d9151 100644
--- a/addons/project/project_demo.xml
+++ b/addons/project/project_demo.xml
@@ -2,50 +2,50 @@
<openerp>
<data noupdate="1">
- <!-- Users -->
+ <!-- Users -->
<record id="base.user_demo" model="res.users">
- <field eval="[(4, ref('base.group_sale_salesman')),(4, ref('group_project_user'))]" name="groups_id"/>
+ <field name="groups_id" eval="[(4, ref('base.group_sale_salesman')),(4, ref('group_project_user'))]"/>
</record>
<record id="base.user_niv" model="res.users">
<field name="name">Nicolas</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_manager')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_manager')])]"/>
<field name="login">niv</field>
<field name="password">niv</field>
</record>
<record id="base.user_al" model="res.users">
<field name="name">Antony</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_manager')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_manager')])]"/>
<field name="login">al</field>
<field name="password">al</field>
</record>
<record id="base.user_qdp" model="res.users">
<field name="name">Quentin</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]"/>
<field name="login">qdp</field>
<field name="password">qdp</field>
</record>
<record id="base.user_fpi" model="res.users">
<field name="name">Francois</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]"/>
<field name="login">fpi</field>
<field name="password">fpi</field>
</record>
<record id="base.user_jth" model="res.users">
<field name="name">Julien</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]"/>
<field name="login">jth</field>
<field name="password">jth</field>
</record>
<record id="base.user_mit" model="res.users">
<field name="name">Minh</field>
- <field eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user'), ref('project.group_project_user')])]"/>
<field name="login">mit</field>
<field name="password">mit</field>
</record>
<record id="base.user_vad" model="res.users">
<field name="name">Valérie</field>
- <field eval="[(6, 0, [ref('base.group_user')])]" name="groups_id"/>
+ <field name="groups_id" eval="[(6, 0, [ref('base.group_user')])]"/>
<field name="login">vad</field>
<field name="password">vad</field>
</record>
@@ -56,68 +56,83 @@
<field name="state">open</field>
<field name="type">normal</field>
<field name="description">Integrate a Sale and Warehouse Management.</field>
- <field eval="[(6, 0, [
+ <field name="members" eval="[(6, 0, [
ref('base.user_niv'),
ref('base.user_al'),
ref('base.user_qdp'),
ref('base.user_fpi'),
ref('base.user_jth'),
ref('base.user_mit'),
- ref('base.user_vad')])]" name="members"/>
+ ref('base.user_vad')])]"/>
<field name="user_id" ref="base.user_al"/>
<field name="name">Integrate a Sale and Warehouse Management.</field>
</record>
- <!-- Tasks -->
+ <!-- Categories -->
+ <record id="project_category_01" model="project.category">
+ <field name="name">Partner's suggestion</field>
+ </record>
+ <record id="project_category_02" model="project.category">
+ <field name="name">Feature request</field>
+ </record>
+ <record id="project_category_03" model="project.category">
+ <field name="name">Experiment</field>
+ </record>
+ <record id="project_category_04" model="project.category">
+ <field name="name">Usability</field>
+ </record>
+ <!-- Tasks -->
<record id="project_task_1" model="project.task">
- <field eval="100.0" name="planned_hours"/>
- <field eval="100.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="100.0"/>
+ <field name="remaining_hours" eval="100.0"/>
<field name="user_id" ref="base.user_niv"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Prepare Requirements Document</field>
<field name="stage_id" ref="project_tt_specification"/>
<field name="color">3</field>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project.project_category_02')])]"/>
</record>
-
<record id="project_task_2" model="project.task">
- <field eval="80.0" name="planned_hours"/>
- <field eval="80.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="80.0"/>
+ <field name="remaining_hours" eval="80.0"/>
<field name="user_id" ref="base.user_niv"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Make SRS</field>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_3" model="project.task">
- <field eval="40.0" name="planned_hours"/>
- <field eval="40.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="40.0"/>
+ <field name="remaining_hours" eval="40.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Design Use Cases</field>
<field name="date_deadline" eval="time.strftime('%Y-%m-24')"/>
<field name="stage_id" ref="project_tt_specification"/>
+ <field name="color">4</field>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project_category_02'),
+ ref('project_category_04')])]"/>
</record>
-
<record id="project_task_4" model="project.task">
- <field eval="25.0" name="planned_hours"/>
- <field eval="25.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="25.0"/>
+ <field name="remaining_hours" eval="25.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Budget Planning</field>
<field name="description">Use the account_budget module</field>
<field name="date_deadline" eval="time.strftime('%Y-%m-19')"/>
- <field name="color">3</field>
+ <field name="color">5</field>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_5" model="project.task">
- <field eval="25.0" name="planned_hours"/>
- <field eval="25.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="25.0"/>
+ <field name="remaining_hours" eval="25.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -127,51 +142,48 @@
<field name="date_deadline" eval="time.strftime('%Y-%m-%d')"/>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_6" model="project.task">
- <field eval="20.0" name="planned_hours"/>
- <field eval="20.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="20.0"/>
+ <field name="remaining_hours" eval="20.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Risk Management Planning</field>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_7" model="project.task">
- <field eval="30.0" name="planned_hours"/>
- <field eval="30.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="30.0"/>
+ <field name="remaining_hours" eval="30.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Create Project Schedules</field>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_8" model="project.task">
- <field eval="10.0" name="planned_hours"/>
- <field eval="10.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="10.0"/>
+ <field name="remaining_hours" eval="10.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Dataflow Design</field>
<field name="priority">0</field>
<field name="stage_id" ref="project_tt_specification"/>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project.project_category_01')])]"/>
</record>
-
<record id="project_task_9" model="project.task">
- <field eval="50.0" name="planned_hours"/>
- <field eval="50.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="50.0"/>
+ <field name="remaining_hours" eval="50.0"/>
<field name="user_id" ref="base.user_al"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">User Interface Design</field>
<field name="stage_id" ref="project_tt_specification"/>
</record>
-
<record id="project_task_10" model="project.task">
- <field eval="40.0" name="planned_hours"/>
- <field eval="40.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="40.0"/>
+ <field name="remaining_hours" eval="40.0"/>
<field name="user_id" ref="base.user_fpi"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -179,56 +191,55 @@
<field name="kanban_state">blocked</field>
<field name="stage_id" ref="project_tt_development"/>
</record>
-
<record id="project_task_11" model="project.task">
- <field eval="90.0" name="planned_hours"/>
- <field eval="90.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="90.0"/>
+ <field name="remaining_hours" eval="90.0"/>
<field name="user_id" ref="base.user_fpi"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Develop module in Warehouse</field>
<field name="stage_id" ref="project_tt_merge"/>
</record>
-
<function model="project.task" name="do_close" eval="[ref('project_task_11')], {'install_mode': True}"/>
-
+
<record id="project_task_12" model="project.task">
- <field eval="20.0" name="planned_hours"/>
- <field eval="20.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="20.0"/>
+ <field name="remaining_hours" eval="20.0"/>
<field name="user_id" ref="base.user_fpi"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Integrate Modules</field>
<field name="stage_id" ref="project_tt_development"/>
+ <field name="color">6</field>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project_category_01'),
+ ref('project_category_03')])]"/>
</record>
-
<function model="project.task" name="do_close" eval="[ref('project_task_12')], {'install_mode': True}"/>
-
+
<record id="project_task_13" model="project.task">
- <field eval="50.0" name="planned_hours"/>
- <field eval="50.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="50.0"/>
+ <field name="remaining_hours" eval="50.0"/>
<field name="user_id" ref="base.user_mit"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Unit Testing</field>
<field name="stage_id" ref="project_tt_development"/>
</record>
-
<function model="project.task" name="do_pending" eval="[ref('project_task_13')], {'install_mode': True}"/>
<record id="project_task_14" model="project.task">
- <field eval="30.0" name="planned_hours"/>
- <field eval="30.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="30.0"/>
+ <field name="remaining_hours" eval="30.0"/>
<field name="user_id" ref="base.user_mit"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
<field name="name">Regression Test</field>
- <field name="stage_id" ref="project_tt_development"/>
+ <field name="stage_id" ref="project_tt_development"/>
</record>
-
<record id="project_task_15" model="project.task">
- <field eval="15.0" name="planned_hours"/>
- <field eval="15.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="15.0"/>
+ <field name="remaining_hours" eval="15.0"/>
<field name="user_id" ref="base.user_fpi"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -236,11 +247,10 @@
<field name="stage_id" ref="project_tt_specification"/>
<field name="date_start">2011-02-06</field>
</record>
-
<record id="project_task_16" model="project.task">
- <field eval="10" name="sequence"/>
- <field eval="40.0" name="planned_hours"/>
- <field eval="40.0" name="remaining_hours"/>
+ <field name="sequence" eval="10"/>
+ <field name="planned_hours" eval="40.0"/>
+ <field name="remaining_hours" eval="40.0"/>
<field name="user_id" ref="base.user_mit"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -251,8 +261,8 @@
<function model="project.task" name="do_open" eval="[ref('project_task_16')], {'install_mode': True}"/>
<record id="project_task_17" model="project.task">
- <field eval="5.0" name="planned_hours"/>
- <field eval="5.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="5.0"/>
+ <field name="remaining_hours" eval="5.0"/>
<field name="user_id" ref="base.user_niv"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -262,8 +272,8 @@
<function model="project.task" name="do_open" eval="[ref('project_task_17')], {'install_mode': True}"/>
<record id="project_task_18" model="project.task">
- <field eval="10.0" name="planned_hours"/>
- <field eval="10.0" name="remaining_hours"/>
+ <field name="planned_hours" eval="10.0"/>
+ <field name="remaining_hours" eval="10.0"/>
<field name="user_id" ref="base.user_niv"/>
<field name="priority">2</field>
<field name="project_id" ref="project.project_integrate_openerp"/>
@@ -271,45 +281,37 @@
<field name="stage_id" ref="project_tt_specification"/>
</record>
- <!--
- Resource: project.project
- -->
+ <!-- Resource: project.project-->
<!-- Projects -->
- <!-- <record id="all_projects_account" model="project.project">
- <field name="name">Projects</field>
- <field name="code">3</field>
- </record> -->
-
-
<record id="project_project_9" model="project.project">
<field name="name">OpenERP Integration</field>
<field name="parent_id" ref="all_projects_account"/>
<field name="user_id" ref="base.user_root"/>
- <field eval="[(6, 0, [ref('project_tt_specification'),ref('project_tt_development'),ref('project_tt_testing'),ref('project_tt_merge')])]" name="type_ids"/>
+ <field name="type_ids" eval="[(6, 0, [ref('project_tt_specification'),ref('project_tt_development'),ref('project_tt_testing'),ref('project_tt_merge')])]"/>
</record>
<record id="project_project_21" model="project.project">
<field name="priority">10</field>
<field name="parent_id" ref="all_projects_account"/>
<field name="name">Study + Prototype</field>
<field name="user_id" ref="base.user_root"/>
- <field eval="[(6, 0, [ref('project_tt_specification'),ref('project_tt_development')])]" name="type_ids"/>
- <field eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]" name="members"/>
+ <field name="type_ids" eval="[(6, 0, [ref('project_tt_specification'),ref('project_tt_development')])]"/>
+ <field name="members" eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]"/>
</record>
<record id="project_project_22" model="project.project">
<field name="priority">20</field>
<field name="parent_id" ref="all_projects_account"/>
<field name="name">Specific Developments</field>
<field name="user_id" ref="base.user_root"/>
- <field eval="[(6, 0, [ref('project_tt_specification'), ref('project_tt_development')])]" name="type_ids"/>
- <field eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]" name="members"/>
+ <field name="type_ids" eval="[(6, 0, [ref('project_tt_specification'), ref('project_tt_development')])]"/>
+ <field name="members" eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]"/>
</record>
<record id="project_project_23" model="project.project">
<field name="priority">30</field>
<field name="parent_id" ref="all_projects_account"/>
<field name="name">Install, data import, configuration</field>
- <field eval="[(6, 0, [ref('project_tt_development')])]" name="type_ids"/>
- <field eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]" name="members"/>
+ <field name="type_ids" eval="[(6, 0, [ref('project_tt_development')])]"/>
+ <field name="members" eval="[(6, 0, [ref('base.user_root'),ref('base.user_demo')])]"/>
</record>
<!-- Tasks -->
@@ -323,7 +325,7 @@
<field name="name">Specific adaptation to MRP</field>
</record>
<function model="project.task" name="do_open" eval="[ref('project_task_116')], {'install_mode': True}"/>
-
+
<record id="project_task_130" model="project.task">
<field name="planned_hours">16.0</field>
<field name="remaining_hours">16.0</field>
@@ -343,7 +345,7 @@
<field name="name">Modifications asked by the customer.</field>
</record>
<function model="project.task" name="do_open" eval="[ref('project_task_131')], {'install_mode': True}"/>
-
+
<record id="project_task_184" model="project.task">
<field name="planned_hours">16.0</field>
<field name="remaining_hours">16.0</field>
@@ -352,7 +354,7 @@
<field name="priority">0</field>
<field name="project_id" ref="project_project_21"/>
<field name="name">Customer analysis + Architecture</field>
- <field name="color">3</field>
+ <field name="color">7</field>
</record>
<record id="project_task_186" model="project.task">
<field name="sequence">15</field>
@@ -362,7 +364,7 @@
<field name="user_id" eval="False"/>
<field name="project_id" ref="project_project_21"/>
<field name="name">Internal testing + Software Install</field>
- <field name="color">4</field>
+ <field name="color">8</field>
</record>
<record id="project_task_188" model="project.task">
<field name="sequence">17</field>
@@ -375,7 +377,7 @@
<field name="name">Analysis, Data Importation</field>
</record>
<function model="project.task" name="do_open" eval="[ref('project_task_188')], {'install_mode': True}"/>
-
+
<record id="project_task_189" model="project.task">
<field name="sequence">20</field>
<field name="planned_hours">16.0</field>
@@ -386,7 +388,7 @@
<field name="stage_id" ref="project_tt_specification"/>
</record>
<function model="project.task" name="do_open" eval="[ref('project_task_189')], {'install_mode': True}"/>
-
+
<record id="project_task_190" model="project.task">
<field name="sequence">20</field>
<field name="planned_hours">32.0</field>
@@ -399,8 +401,7 @@
<!-- Schedule tasks to assign users and dates -->
<function model="project.project" name="schedule_tasks"
- eval="[ref('project_project_21'), ref('project_project_22'), ref('project_project_23')], {'install_mode': True}"
- />
+ eval="[ref('project_project_21'), ref('project_project_22'), ref('project_project_23')], {'install_mode': True}"/>
</data>
</openerp>
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index cc6f5b05ad8..8d35bf69db7 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -431,6 +431,9 @@
<field name="progress" widget="progressbar"
groups="project.group_time_work_estimation_tasks"/>
</group>
+ <group>
+ <field name="categ_ids" widget="many2many_tags"/>
+ </group>
</group>
<notebook>
<page string="Description">
@@ -512,6 +515,7 @@
<field name="date_deadline"/>
<field name="message_summary"/>
<field name="needaction_pending"/>
+ <field name="categ_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">
@@ -554,6 +558,13 @@
<t t-esc="Math.round(record.remaining_hours.raw_value)"/>
</span>
</div>
+ <div class="oe_kanban_footer_left" style="margin-top:5px;">
+ <div class="oe_left oe_tags">
+ <t t-foreach="record.categ_ids.raw_value" t-as="categ_id">
+ <span class="oe_tag" t-att-data-categ_id="categ_id"></span>
+ </t>
+ </div>
+ </div>
</div>
<div class="oe_clear"></div>
</div>
@@ -820,7 +831,7 @@
</field>
</record>
- <!-- User Form-->
+ <!-- User Form -->
<act_window context="{'search_default_user_id': [active_id], 'default_user_id': active_id}" domain="[('state', '&lt;&gt;', 'cancelled'),('state', '&lt;&gt;', 'done')]" id="act_res_users_2_project_task_opened" name="Assigned Tasks" res_model="project.task" src_model="res.users" view_mode="tree,form,gantt,calendar,graph" view_type="form"/>
</data>
diff --git a/addons/project/static/src/js/project.js b/addons/project/static/src/js/project.js
index 510fcbb99e7..c8250edcafd 100644
--- a/addons/project/static/src/js/project.js
+++ b/addons/project/static/src/js/project.js
@@ -1,25 +1,61 @@
openerp.project = function(openerp) {
openerp.web_kanban.KanbanView.include({
- on_groups_started: function() {
+ project_display_members_names: function() {
+ /*
+ * Set avatar title for members.
+ * In kanban views, many2many fields only return a list of ids.
+ * We can implement return value of m2m fields like [(1,"Adminstration"),...].
+ */
var self = this;
- self._super.apply(this, arguments);
- if (this.dataset.model === 'project.project') {
- /* Set avatar title for members.
- In many2many fields, returns only list of ids.
- we can implement return value of m2m fields like [(1,"Adminstration"),...].
- */
- var members_ids = [];
- this.$element.find('.oe_kanban_project_avatars img').each(function() {
- members_ids.push($(this).data('member_id'));
- });
- var dataset = new openerp.web.DataSetSearch(this, 'res.users', self.session.context, [['id', 'in', _.uniq(members_ids)]]);
- dataset.read_slice(['id', 'name']).then(function(result) {
- _.each(result, function(v, k) {
- self.$element.find('.oe_kanban_project_avatars img[data-member_id=' + v.id + ']').attr('title', v.name).tipsy({
- offset: 10
- });
+ var members_ids = [];
+
+ // Collect members ids
+ self.$element.find('img[data-member_id]').each(function() {
+ members_ids.push($(this).data('member_id'));
+ });
+
+ // Find their matching names
+ var dataset = new openerp.web.DataSetSearch(self, 'res.users', self.session.context, [['id', 'in', _.uniq(members_ids)]]);
+ dataset.read_slice(['id', 'name']).then(function(result) {
+ _.each(result, function(v, k) {
+ // Set the proper value in the DOM
+ self.$element.find('img[data-member_id=' + v.id + ']').attr('title', v.name).tipsy({
+ offset: 10
});
});
+ });
+ },
+ project_display_categ_names: function() {
+ /*
+ * Set proper names to project categories.
+ * In kanban views, many2many fields only return a list of ids.
+ * Therefore, we have to fetch the matching data by ourselves.
+ */
+ var self = this;
+ var categ_ids = [];
+
+ // Collect categories ids
+ self.$element.find('span[data-categ_id]').each(function() {
+ categ_ids.push($(this).data('categ_id'));
+ });
+
+ // Find their matching names
+ var dataset = new openerp.web.DataSetSearch(self, 'project.category', self.session.context, [['id', 'in', _.uniq(categ_ids)]]);
+ dataset.read_slice(['id', 'name']).then(function(result) {
+ _.each(result, function(v, k) {
+ // Set the proper value in the DOM and display the element
+ self.$element.find('span[data-categ_id=' + v.id + ']').text(v.name);
+ });
+ });
+ },
+ on_groups_started: function() {
+ var self = this;
+ self._super.apply(self, arguments);
+
+ if (self.dataset.model === 'project.project') {
+ self.project_display_members_names();
+ } else if (self.dataset.model === 'project.task') {
+ self.project_display_categ_names();
}
}
});
diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py
index fa7d002f571..8aeecf2985e 100644
--- a/addons/project_issue/__openerp__.py
+++ b/addons/project_issue/__openerp__.py
@@ -25,7 +25,7 @@
'version': '1.0',
'category': 'Project Management',
"sequence": 22,
- "summary": "Multi Level Support",
+ "summary": "Support, Bug Traker, Helpdesk",
'description': """
This module provides Issues/Bugs Management in Project.
=======================================================
@@ -39,7 +39,7 @@ and decide on their status as they evolve.
'website': 'http://www.openerp.com',
'images': ['images/issue_analysis.jpeg','images/project_issue.jpeg'],
'depends': [
- 'base_status',
+ 'base_status',
'crm',
'project',
],
@@ -66,6 +66,9 @@ and decide on their status as they evolve.
'auto_install': False,
'application': True,
'certificate' : '001236490750848623845',
+ 'js': [
+ 'static/src/js/project_issue.js',
+ ],
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml
index cedcd85d4fc..8bc34177d7d 100644
--- a/addons/project_issue/board_project_issue_view.xml
+++ b/addons/project_issue/board_project_issue_view.xml
@@ -18,7 +18,7 @@
<field name="progress" widget="progressbar" attrs="{'invisible':[('task_id','=',False)]}"/>
<field name="stage_id" widget="selection" readonly="1"/>
<field name="state" groups="base.group_no_one"/>
- <field name="categ_id" invisible="1"/>
+ <field name="categ_ids" invisible="1"/>
<field name="task_id" invisible="1"/>
</tree>
</field>
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index a7c9d2b5bc3..4c973eed068 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -236,7 +236,7 @@ class project_issue(base_stage, osv.osv):
'date_closed': fields.datetime('Closed', readonly=True,select=True),
'date': fields.datetime('Date'),
'channel_id': fields.many2one('crm.case.channel', 'Channel', help="Communication channel."),
- 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('object_id.model', '=', 'crm.project.bug')]"),
+ 'categ_ids': fields.many2many('project.category', string='Categories'),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True),
'version_id': fields.many2one('project.issue.version', 'Version'),
'stage_id': fields.many2one ('project.task.type', 'Stage',
@@ -279,7 +279,6 @@ class project_issue(base_stage, osv.osv):
'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c),
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
'priority': crm.AVAILABLE_PRIORITIES[2][0],
- 'categ_id' : lambda *a: False,
}
_group_by_full = {
@@ -304,11 +303,11 @@ class project_issue(base_stage, osv.osv):
def convert_issue_task(self, cr, uid, ids, context=None):
if context is None:
context = {}
-
+
case_obj = self.pool.get('project.issue')
data_obj = self.pool.get('ir.model.data')
task_obj = self.pool.get('project.task')
-
+
result = data_obj._get_id(cr, uid, 'project', 'view_task_search_form')
res = data_obj.read(cr, uid, result, ['res_id'])
id2 = data_obj._get_id(cr, uid, 'project', 'view_task_form2')
@@ -351,23 +350,6 @@ class project_issue(base_stage, osv.osv):
'nodestroy': True
}
-
- def _convert(self, cr, uid, ids, xml_id, context=None):
- data_obj = self.pool.get('ir.model.data')
- id2 = data_obj._get_id(cr, uid, 'project_issue', xml_id)
- categ_id = False
- if id2:
- categ_id = data_obj.browse(cr, uid, id2, context=context).res_id
- if categ_id:
- self.write(cr, uid, ids, {'categ_id': categ_id})
- return True
-
- def convert_to_feature(self, cr, uid, ids, context=None):
- return self._convert(cr, uid, ids, 'feature_request_categ', context=context)
-
- def convert_to_bug(self, cr, uid, ids, context=None):
- return self._convert(cr, uid, ids, 'bug_categ', context=context)
-
def copy(self, cr, uid, id, default=None, context=None):
issue = self.read(cr, uid, id, ['name'], context=context)
if not default:
@@ -376,7 +358,7 @@ class project_issue(base_stage, osv.osv):
default['name'] = issue['name'] + _(' (copy)')
return super(project_issue, self).copy(cr, uid, id, default=default,
context=context)
-
+
def write(self, cr, uid, ids, vals, context=None):
#Update last action date every time the user change the stage, the state or send a new email
logged_fields = ['stage_id', 'state', 'message_ids']
@@ -463,7 +445,7 @@ class project_issue(base_stage, osv.osv):
# -------------------------------------------------------
# Mail gateway
# -------------------------------------------------------
-
+
def message_new(self, cr, uid, msg, custom_values=None, context=None):
""" Overrides mail_thread message_new that is called by the mailgateway
through message_process.
@@ -485,7 +467,7 @@ class project_issue(base_stage, osv.osv):
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from'), context=context))
res_id = super(project_issue, self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
- self.convert_to_bug(cr, uid, [res_id], context=context)
+ # self.convert_to_bug(cr, uid, [res_id], context=context)
return res_id
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
@@ -515,7 +497,7 @@ class project_issue(base_stage, osv.osv):
update_vals[key] = res.group(2).lower()
return super(project_issue, self).message_update(cr, uid, ids, update_vals=update_vals, context=context)
-
+
# -------------------------------------------------------
# OpenChatter methods and notifications
# -------------------------------------------------------
@@ -588,18 +570,18 @@ project()
class account_analytic_account(osv.osv):
_inherit = 'account.analytic.account'
_description = 'Analytic Account'
-
+
_columns = {
'use_issues' : fields.boolean('Issues Tracking', help="Check this field if this project manages issues"),
}
-
+
def on_change_template(self, cr, uid, ids, template_id, context=None):
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, context=context)
if template_id and 'value' in res:
template = self.browse(cr, uid, template_id, context=context)
res['value']['use_issues'] = template.use_issues
return res
-
+
def _trigger_project_creation(self, cr, uid, vals, context=None):
res = super(account_analytic_account, self)._trigger_project_creation(cr, uid, vals, context=context)
return res or vals.get('use_issues')
diff --git a/addons/project_issue/project_issue_demo.xml b/addons/project_issue/project_issue_demo.xml
index b3fb4582cf2..298dd6a25d9 100644
--- a/addons/project_issue/project_issue_demo.xml
+++ b/addons/project_issue/project_issue_demo.xml
@@ -1,236 +1,239 @@
<?xml version="1.0"?>
<openerp>
-<data noupdate="1">
-
- <record id="crm_case_buginaccountsmodule0" model="project.issue">
- <field eval="time.strftime('%Y-%m-08 10:15:00')" name="date"/>
- <field eval="&quot;5&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_agrolait"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field name="categ_id" ref="bug_categ"/>
- <field name="project_id" ref="project.project_project_22"/>
- <field eval="15.0" name="duration"/>
- <field eval="&quot;Bug in Accounts module&quot;" name="name"/>
- <field eval="&quot;agr@agrolait.com&quot;" name="email_from"/>
- <field name="stage_id" ref="project.project_tt_specification"/>
- </record>
-
- <record id="crm_case_programnotgivingproperoutput0" model="project.issue">
- <field eval="time.strftime('%Y-%m-15 12:50:00')" name="date"/>
- <field eval="&quot;3&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_asus"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="3.5" name="duration"/>
- <field name="categ_id" ref="bug_categ"/>
- <field eval="&quot;Program not giving proper output&quot;" name="name"/>
- <field name="project_id" ref="project.project_project_22"/>
- <field name="stage_id" ref="project.project_tt_specification"/>
- </record>
-
- <record id="crm_case_outputincorrect0" model="project.issue">
- <field eval="time.strftime('%Y-%m-18 14:30:00')" name="date"/>
- <field eval="&quot;4&quot;" name="priority"/>
- <field name="user_id" ref="base.user_demo"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="2.3" name="duration"/>
- <field name="categ_id" ref="bug_categ"/>
- <field name="project_id" ref="project.project_project_23"/>
- <field eval="&quot;Output incorrect&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_development"/>
- </record>
-
- <record id="crm_case_problemloadingpage0" model="project.issue">
- <field eval="time.strftime('%Y-%m-20 15:25:05')" name="date"/>
- <field eval="&quot;3&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_14"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="4.0" name="duration"/>
- <field name="categ_id" ref="bug_categ"/>
- <field name="project_id" ref="project.project_project_22"/>
- <field eval="&quot;Problem loading page&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_testing"/>
- </record>
-
- <record id="crm_case_pagenotfound0" model="project.issue">
- <field eval="time.strftime('%Y-%m-22 18:15:00')" name="date"/>
- <field eval="&quot;3&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_desertic_hispafuentes"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="1.0" name="duration"/>
- <field name="categ_id" ref="bug_categ"/>
- <field name="project_id" ref="project.project_project_22"/>
- <field eval="&quot;Page not Found&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_development"/>
- </record>
-
- <record id="crm_case_programmingerror0" model="project.issue">
- <field eval="time.strftime('%Y-%m-24 09:45:00')" name="date"/>
- <field eval="&quot;3&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_5"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="4.0" name="duration"/>
- <field name="categ_id" ref="bug_categ"/>
- <field name="project_id" ref="project.project_project_22"/>
- <field eval="&quot;Programming Error&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_testing"/>
- </record>
-
- <record id="crm_case_logicalerrorinprogram0" model="project.issue">
- <field eval="time.strftime('%Y-%m-26 11:10:00')" name="date"/>
- <field eval="&quot;2&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_6"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="2.0" name="duration"/>
- <field name="categ_id" ref="bug_categ"/>
- <field name="project_id" ref="project.project_project_9"/>
- <field eval="&quot;Logical Error in Program&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_testing"/>
- </record>
-
- <record id="crm_case_constrainterror0" model="project.issue">
- <field eval="time.strftime('%Y-%m-25 13:35:00')" name="date"/>
- <field eval="&quot;2&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_6"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="7.3" name="duration"/>
- <field name="categ_id" ref="bug_categ"/>
- <field name="project_id" ref="project.project_project_9"/>
- <field eval="&quot;Constraint Error&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_testing"/>
- </record>
-
- <record id="crm_case_errorinprogram0" model="project.issue">
- <field eval="time.strftime('%Y-%m-28 15:40:00')" name="date"/>
- <field eval="&quot;2&quot;" name="priority"/>
- <field name="user_id" ref="base.user_demo"/>
- <field name="partner_id" ref="base.res_partner_5"/>
- <field eval="1" name="active"/>
- <field eval="1.3" name="duration"/>
- <field name="categ_id" ref="feature_request_categ"/>
- <field name="project_id" ref="project.project_project_22"/>
- <field eval="&quot;Error in Program&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_testing"/>
- </record>
-
- <record id="crm_case_patcheserrorinprogram0" model="project.issue">
- <field eval="time.strftime('%Y-%m-28 16:30:00')" name="date"/>
- <field eval="&quot;2&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_2"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="13.0" name="duration"/>
- <field name="categ_id" ref="feature_request_categ"/>
- <field name="project_id" ref="project.project_project_9"/>
- <field eval="&quot;Patches Error in Program&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_testing"/>
- </record>
-
- <record id="crm_case_newfeaturestobeadded0" model="project.issue">
- <field eval="time.strftime('%Y-%m-01 12:15:10')" name="date"/>
- <field eval="&quot;4&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_maxtor"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="3.2" name="duration"/>
- <field name="categ_id" ref="feature_request_categ"/>
- <field name="project_id" ref="project.project_project_21"/>
- <field eval="&quot;New Features To Be Added&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_merge"/>
- </record>
-
- <record id="crm_case_addmenustothemodule0" model="project.issue">
- <field eval="time.strftime('%Y-%m-05 18:00:00')" name="date"/>
- <field eval="&quot;1&quot;" name="priority"/>
- <field name="user_id" ref="base.user_demo"/>
- <field name="partner_id" ref="base.res_partner_9"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="3.0" name="duration"/>
- <field name="categ_id" ref="feature_request_categ"/>
- <field name="project_id" ref="project.project_project_21"/>
- <field eval="&quot;Add menus to the module&quot;" name="name"/>
- <field eval="&quot;info@opensides.be&quot;" name="email_from"/>
- <field name="stage_id" ref="project.project_tt_development"/>
- </record>
-
- <record id="crm_case_includeattendancesheetinproject0" model="project.issue">
- <field eval="time.strftime('%Y-%m-10 17:05:30')" name="date"/>
- <field eval="&quot;3&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_10"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="2.0" name="duration"/>
- <field name="categ_id" ref="feature_request_categ"/>
- <field name="project_id" ref="project.project_project_9"/>
- <field eval="&quot;Include Attendance sheet in Project&quot;" name="name"/>
- <field eval="&quot;contact@tecsas.fr&quot;" name="email_from"/>
- <field name="stage_id" ref="project.project_tt_development"/>
- </record>
-
- <record id="crm_case_createnewobject0" model="project.issue">
- <field eval="time.strftime('%Y-%m-15 10:35:15')" name="date"/>
- <field eval="&quot;3&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_6"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="2.45" name="duration"/>
- <field name="categ_id" ref="feature_request_categ"/>
- <field name="project_id" ref="project.project_project_22"/>
- <field eval="&quot;Create new object&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_specification"/>
- </record>
-
- <record id="crm_case_improvereportsinhrms0" model="project.issue">
- <field eval="time.strftime('%Y-%m-19 12:15:00')" name="date"/>
- <field eval="&quot;4&quot;" name="priority"/>
- <field name="user_id" ref="base.user_root"/>
- <field name="partner_id" ref="base.res_partner_11"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="15.0" name="duration"/>
- <field name="categ_id" ref="feature_request_categ"/>
- <field name="project_id" ref="project.project_project_22"/>
- <field eval="&quot;Improve Reports in HRMS&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_development"/>
- </record>
-
- <record id="crm_case_improvereportsinpms0" model="project.issue">
- <field eval="time.strftime('%Y-%m-21 14:30:00')" name="date"/>
- <field eval="&quot;2&quot;" name="priority"/>
- <field name="user_id" ref="base.user_demo"/>
- <field name="partner_id" ref="base.res_partner_11"/>
- <field name="section_id" ref="crm.section_sales_department"/>
- <field eval="1" name="active"/>
- <field eval="06.15" name="duration"/>
- <field name="categ_id" ref="feature_request_categ"/>
- <field name="project_id" ref="project.project_project_22"/>
- <field eval="&quot;Improve Reports in PMS&quot;" name="name"/>
- <field name="stage_id" ref="project.project_tt_specification"/>
- </record>
-
- <!-- Call Function to set some issues as Unread -->
- <function model="project.issue" name="message_mark_as_unread"
- eval="[ ref('crm_case_improvereportsinhrms0'), ref('crm_case_createnewobject0')], {}"
- />
-
-</data>
+ <data noupdate="1">
+
+ <!-- Categories -->
+ <record id="project_issue_category_01" model="project.category">
+ <field name="name">Little problem</field>
+ </record>
+ <record id="project_issue_category_02" model="project.category">
+ <field name="name">PBCK</field>
+ </record>
+ <record id="project_issue_category_03" model="project.category">
+ <field name="name">Deadly bug</field>
+ </record>
+
+ <!-- Issues -->
+ <record id="crm_case_buginaccountsmodule0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-08 10:15:00')" name="date"/>
+ <field name="priority">5</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_agrolait"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field name="project_id" ref="project.project_project_22"/>
+ <field eval="15.0" name="duration"/>
+ <field name="name">Bug in Accounts module</field>
+ <field name="email_from">agr@agrolait.com</field>
+ <field name="stage_id" ref="project.project_tt_specification"/>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project_issue_category_01')])]"/>
+ </record>
+
+ <record id="crm_case_programnotgivingproperoutput0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-15 12:50:00')" name="date"/>
+ <field name="priority">3</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_asus"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="3.5" name="duration"/>
+ <field name="name">Program not giving proper output</field>
+ <field name="project_id" ref="project.project_project_22"/>
+ <field name="stage_id" ref="project.project_tt_specification"/>
+ </record>
+
+ <record id="crm_case_outputincorrect0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-18 14:30:00')" name="date"/>
+ <field name="priority">4</field>
+ <field name="user_id" ref="base.user_demo"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="2.3" name="duration"/>
+ <field name="project_id" ref="project.project_project_23"/>
+ <field name="name">Output incorrect</field>
+ <field name="stage_id" ref="project.project_tt_development"/>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project_issue_category_01'),
+ ref('project_issue_category_02')])]"/>
+ </record>
+
+ <record id="crm_case_problemloadingpage0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-20 15:25:05')" name="date"/>
+ <field name="priority">3</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_14"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="4.0" name="duration"/>
+ <field name="project_id" ref="project.project_project_22"/>
+ <field name="name">Problem loading page</field>
+ <field name="stage_id" ref="project.project_tt_testing"/>
+ </record>
+
+ <record id="crm_case_pagenotfound0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-22 18:15:00')" name="date"/>
+ <field name="priority">3</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_desertic_hispafuentes"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="1.0" name="duration"/>
+ <field name="project_id" ref="project.project_project_22"/>
+ <field name="name">Page not Found</field>
+ <field name="stage_id" ref="project.project_tt_development"/>
+ </record>
+
+ <record id="crm_case_programmingerror0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-24 09:45:00')" name="date"/>
+ <field name="priority">3</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_5"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="4.0" name="duration"/>
+ <field name="project_id" ref="project.project_project_22"/>
+ <field name="name">Programming Error</field>
+ <field name="stage_id" ref="project.project_tt_testing"/>
+ <field name="categ_ids" eval="[(6, 0, [
+ ref('project_issue_category_02'),
+ ref('project_issue_category_03')])]"/>
+ </record>
+
+ <record id="crm_case_logicalerrorinprogram0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-26 11:10:00')" name="date"/>
+ <field name="priority">2</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_6"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="2.0" name="duration"/>
+ <field name="project_id" ref="project.project_project_9"/>
+ <field name="name">Logical Error in Program</field>
+ <field name="stage_id" ref="project.project_tt_testing"/>
+ </record>
+
+ <record id="crm_case_constrainterror0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-25 13:35:00')" name="date"/>
+ <field name="priority">2</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_6"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="7.3" name="duration"/>
+ <field name="project_id" ref="project.project_project_9"/>
+ <field name="name">Constraint Error</field>
+ <field name="stage_id" ref="project.project_tt_testing"/>
+ </record>
+
+ <record id="crm_case_errorinprogram0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-28 15:40:00')" name="date"/>
+ <field name="priority">2</field>
+ <field name="user_id" ref="base.user_demo"/>
+ <field name="partner_id" ref="base.res_partner_5"/>
+ <field eval="1" name="active"/>
+ <field eval="1.3" name="duration"/>
+ <field name="project_id" ref="project.project_project_22"/>
+ <field name="name">Error in Program</field>
+ <field name="stage_id" ref="project.project_tt_testing"/>
+ </record>
+
+ <record id="crm_case_patcheserrorinprogram0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-28 16:30:00')" name="date"/>
+ <field name="priority">2</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_2"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="13.0" name="duration"/>
+ <field name="project_id" ref="project.project_project_9"/>
+ <field name="name">Patches Error in Program</field>
+ <field name="stage_id" ref="project.project_tt_testing"/>
+ </record>
+
+ <record id="crm_case_newfeaturestobeadded0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-01 12:15:10')" name="date"/>
+ <field name="priority">4</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_maxtor"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="3.2" name="duration"/>
+ <field name="project_id" ref="project.project_project_21"/>
+ <field name="name">New Features To Be Added</field>
+ <field name="stage_id" ref="project.project_tt_merge"/>
+ </record>
+
+ <record id="crm_case_addmenustothemodule0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-05 18:00:00')" name="date"/>
+ <field name="priority">1</field>
+ <field name="user_id" ref="base.user_demo"/>
+ <field name="partner_id" ref="base.res_partner_9"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="3.0" name="duration"/>
+ <field name="project_id" ref="project.project_project_21"/>
+ <field name="name">Add menus to the module</field>
+ <field name="email_from">info@opensides.be</field>
+ <field name="stage_id" ref="project.project_tt_development"/>
+ </record>
+
+ <record id="crm_case_includeattendancesheetinproject0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-10 17:05:30')" name="date"/>
+ <field name="priority">3</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_10"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="2.0" name="duration"/>
+ <field name="project_id" ref="project.project_project_9"/>
+ <field name="name">Include Attendance sheet in Project</field>
+ <field name="email_from">contact@tecsas.fr</field>
+ <field name="stage_id" ref="project.project_tt_development"/>
+ </record>
+
+ <record id="crm_case_createnewobject0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-15 10:35:15')" name="date"/>
+ <field name="priority">3</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_6"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="2.45" name="duration"/>
+ <field name="project_id" ref="project.project_project_22"/>
+ <field name="name">Create new object</field>
+ <field name="stage_id" ref="project.project_tt_specification"/>
+ </record>
+
+ <record id="crm_case_improvereportsinhrms0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-19 12:15:00')" name="date"/>
+ <field name="priority">4</field>
+ <field name="user_id" ref="base.user_root"/>
+ <field name="partner_id" ref="base.res_partner_11"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="15.0" name="duration"/>
+ <field name="project_id" ref="project.project_project_22"/>
+ <field name="name">Improve Reports in HRMS</field>
+ <field name="stage_id" ref="project.project_tt_development"/>
+ </record>
+
+ <record id="crm_case_improvereportsinpms0" model="project.issue">
+ <field eval="time.strftime('%Y-%m-21 14:30:00')" name="date"/>
+ <field name="priority">2</field>
+ <field name="user_id" ref="base.user_demo"/>
+ <field name="partner_id" ref="base.res_partner_11"/>
+ <field name="section_id" ref="crm.section_sales_department"/>
+ <field eval="1" name="active"/>
+ <field eval="06.15" name="duration"/>
+ <field name="project_id" ref="project.project_project_22"/>
+ <field name="name">Improve Reports in PMS</field>
+ <field name="stage_id" ref="project.project_tt_specification"/>
+ </record>
+
+ <!-- Call function to set some issues as 'unread' -->
+ <function model="project.issue" name="message_mark_as_unread"
+ eval="[ ref('crm_case_improvereportsinhrms0'), ref('crm_case_createnewobject0')], {}"/>
+
+ </data>
</openerp>
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index e730805fb46..4cd5bb9ba6a 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -16,9 +16,9 @@
<record id="action_project_issue_unread" model="ir.values">
<field name="name">action_project_issue_unread</field>
<field name="action_id" ref="actions_server_project_issue_unread"/>
- <field name="value" eval="'ir.actions.server,' + str(ref('actions_server_project_issue_unread'))" />
+ <field name="value" eval="'ir.actions.server,' + str(ref('actions_server_project_issue_unread'))"/>
<field name="key">action</field>
- <field name="model_id" ref="model_project_issue" />
+ <field name="model_id" ref="model_project_issue"/>
<field name="model">project.issue</field>
<field name="key2">client_action_multi</field>
</record>
@@ -34,9 +34,9 @@
<record id="action_project_issue_read" model="ir.values">
<field name="name">action_project_issue_read</field>
<field name="action_id" ref="actions_server_project_issue_read"/>
- <field name="value" eval="'ir.actions.server,' + str(ref('actions_server_project_issue_read'))" />
+ <field name="value" eval="'ir.actions.server,' + str(ref('actions_server_project_issue_read'))"/>
<field name="key">action</field>
- <field name="model_id" ref="model_project_issue" />
+ <field name="model_id" ref="model_project_issue"/>
<field name="model">project.issue</field>
<field name="key2">client_action_multi</field>
</record>
@@ -133,15 +133,13 @@
<field name="task_id" on_change="onchange_task_id(task_id)" class="oe_inline"/>
<field name="progress" widget="progressbar" attrs="{'invisible':[('task_id','=',False)]}" class="oe_inline"/>
</div>
+ <field name="categ_ids" widget="many2many_tags"/>
</group>
</group>
<notebook>
<page string="Description">
<group>
<group>
- <field name="categ_id" widget="selection" domain="[('object_id.model', '=', 'project.issue')]"/>
- </group>
- <group>
<field name="version_id" widget="selection"/>
</group>
</group>
@@ -194,7 +192,7 @@
<field name="progress" widget="progressbar" attrs="{'invisible':[('task_id','=',False)]}"/>
<field name="stage_id" widget="selection" readonly="1"/>
<field name="state" groups="base.group_no_one"/>
- <field name="categ_id" invisible="1"/>
+ <field name="categ_ids" invisible="1"/>
<field name="task_id" invisible="1"/>
</tree>
</field>
@@ -216,7 +214,7 @@
<separator orientation="vertical"/>
<filter string="New" icon="terp-document-new" domain="[('state','=','draft')]" help="New Issues"/>
<filter string="To Do" domain="[('state','=','open')]" help="To Do Issues" icon="terp-check"/>
- <filter string="Unassigned Issues" domain="[('user_id','=',False)]" help="Unassigned Issues" icon="terp-personal-" />
+ <filter string="Unassigned Issues" domain="[('user_id','=',False)]" help="Unassigned Issues" icon="terp-personal-"/>
<separator orientation="vertical"/>
<field name="user_id"/>
<field name="project_id"/>
@@ -236,7 +234,7 @@
domain="[]" context="{'group_by':'version_id'}"/>
<separator orientation="vertical"/>
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]"
- context="{'group_by':'categ_id'}"/>
+ context="{'group_by':'categ_ids'}"/>
<filter string="Priority" icon="terp-rating-rated" domain="[]"
context="{'group_by':'priority'}"/>
<filter string="Stage" icon="terp-stage" domain="[]"
@@ -265,79 +263,81 @@
</record>
- <!-- Project Issue Karban View-->
+ <!-- Project Issue Karban View-->
- <record model="ir.ui.view" id="project_issue_kanban_view">
- <field name="name">Project Issue Kanban</field>
- <field name="model">project.issue</field>
- <field name="type">kanban</field>
- <field name="arch" type="xml">
- <kanban default_group_by="stage_id">
- <field name="color"/>
- <field name="priority"/>
- <field name="user_email"/>
- <field name="user_id"/>
- <field name="date_deadline"/>
- <templates>
- <t t-name="kanban-tooltip">
- <ul class="oe_kanban_tooltip">
- <li><b>Project:</b> <field name="project_id"/></li>
- <li><b>Category:</b> <field name="categ_id"/></li>
- </ul>
- </t>
- <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">
- <div class="oe_dropdown_toggle oe_dropdown_kanban">
- <span class="oe_e">i</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>
- </div>
- <div class="oe_kanban_content" tooltip="kanban-tooltip">
- <div>
- <b><field name="name"/></b> <br/>
- <field name="partner_id"/> <br/>
- <field name="version_id"/>
- </div>
- <div class="oe_kanban_footer_left">
- <div class="oe_right">
- <span class="oe_kanban_highlight">
- <t t-set="priority" t-value="record.priority.raw_value || 5"/>
- <a type="object" name="set_priority" args="['3']" t-if="priority gt 3" title="Normal Priority">
- <img src="/web/static/src/img/icons/star-off.png" width="16" height="16"/>
- </a>
- <a type="object" name="set_priority" args="['5']" t-if="priority lte 3" title="Normal Priority">
- <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 3 ? 'on' : 'off'}.png" width="16" height="16"/>
- </a>
- <a type="object" name="set_priority" args="['2']" title="High Priority">
- <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 2 ? 'on' : 'off'}.png" width="16" height="16"/>
- </a>
- <a type="object" name="set_priority" args="['1']" title="Highest Priority">
- <img t-attf-src="/web/static/src/img/icons/star-#{priority == 1 ? 'on' : 'off'}.png" width="16" height="16"/>
- </a>
- </span>
- <t t-if="record.date_deadline.raw_value and record.date_deadline.raw_value lt (new Date())">
- <span t-attf-class="oe_kanban_status oe_kaban_status_red"> </span>
- </t>
- <img t-att-src="kanban_image('res.users', 'avatar', record.user_id.raw_value[0])" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
+ <record model="ir.ui.view" id="project_issue_kanban_view">
+ <field name="name">Project Issue Kanban</field>
+ <field name="model">project.issue</field>
+ <field name="type">kanban</field>
+ <field name="arch" type="xml">
+ <kanban default_group_by="stage_id">
+ <field name="color"/>
+ <field name="priority"/>
+ <field name="user_email"/>
+ <field name="user_id"/>
+ <field name="date_deadline"/>
+ <templates>
+ <t t-name="kanban-tooltip">
+ <ul class="oe_kanban_tooltip">
+ <li><b>Project:</b> <field name="project_id"/></li>
+ <li><b>Category:</b> <field name="categ_ids"/></li>
+ </ul>
+ </t>
+ <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">
+ <div class="oe_dropdown_toggle oe_dropdown_kanban">
+ <span class="oe_e">i</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>
+ </div>
+ <div class="oe_kanban_content" tooltip="kanban-tooltip">
+ <div>
+ <b><field name="name"/></b> <br/>
+ <field name="partner_id"/> <br/>
+ <field name="version_id"/>
+ </div>
+ <div class="oe_kanban_footer_left">
+ <div class="oe_left oe_tags">
+ <t t-foreach="record.categ_ids.raw_value" t-as="categ_id">
+ <span class="oe_tag" t-att-data-categ_id="categ_id"></span>
+ </t>
+ </div>
+ <div class="oe_right">
+ <span class="oe_kanban_highlight">
+ <t t-set="priority" t-value="record.priority.raw_value || 5"/>
+ <a type="object" name="set_priority" args="['3']" t-if="priority gt 3" title="Normal Priority">
+ <img src="/web/static/src/img/icons/star-off.png" width="16" height="16"/>
+ </a>
+ <a type="object" name="set_priority" args="['5']" t-if="priority lte 3" title="Normal Priority">
+ <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 3 ? 'on' : 'off'}.png" width="16" height="16"/>
+ </a>
+ <a type="object" name="set_priority" args="['2']" title="High Priority">
+ <img t-attf-src="/web/static/src/img/icons/star-#{priority lte 2 ? 'on' : 'off'}.png" width="16" height="16"/>
+ </a>
+ <a type="object" name="set_priority" args="['1']" title="Highest Priority">
+ <img t-attf-src="/web/static/src/img/icons/star-#{priority == 1 ? 'on' : 'off'}.png" width="16" height="16"/>
+ </a>
+ </span>
+ <t t-if="record.date_deadline.raw_value and record.date_deadline.raw_value lt (new Date())">
+ <span t-attf-class="oe_kanban_status oe_kaban_status_red"> </span>
+ </t>
+ <img t-att-src="kanban_image('res.users', 'avatar', record.user_id.raw_value[0])" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
+ </div>
</div>
</div>
+ <div class="oe_clear"></div>
</div>
- <div class="oe_clear"></div>
- </div>
- </t>
- </templates>
- </kanban>
- </field>
- </record>
-
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </record>
- # ------------------------------------------------------
- # Feature Requests
- # ------------------------------------------------------
+ <!-- Feature Requests -->
<record model="ir.ui.view" id="project_feature_tree_view">
<field name="name">Project Issue- Feature Tracker Tree</field>
<field name="model">project.issue</field>
@@ -378,7 +378,7 @@
</search>
</field>
</record>
-
+
<act_window id="act_project_project_2_project_issue_all"
name="Issues"
src_model="project.project"
@@ -387,10 +387,7 @@
view_mode="kanban,tree,form,calendar,graph"
context="{'search_default_project_id': [active_id], 'default_project_id': active_id}"/>
- # ------------------------------------------------------
- # Project
- # ------------------------------------------------------
-
+ <!-- Project -->
<record id="view_project_form_inherited" model="ir.ui.view">
<field name="name">project.project.form.inherited</field>
<field name="model">project.project</field>
@@ -409,7 +406,7 @@
</field>
</field>
</record>
-
+
<record id="view_project_kanban_inherited" model="ir.ui.view">
<field name="name">project.project.kanban.inherited</field>
<field name="model">project.project</field>
@@ -427,7 +424,8 @@
</xpath>
</field>
</record>
- <record id="analytic_account_inherited_issue_form" model="ir.ui.view">
+
+ <record id="analytic_account_inherited_issue_form" model="ir.ui.view">
<field name="name">account.analytic.account.issue.form.inherit</field>
<field name="model">account.analytic.account</field>
<field name="type">form</field>
@@ -438,9 +436,10 @@
<separator colspan="4" string="Project Management" name="project_sep"/> <!-- removal of invisible attribute -->
</xpath>
<xpath expr='//separator[@name="project_sep"]' position='after'>
- <field name="use_issues" />
+ <field name="use_issues"/>
</xpath>
</field>
</record>
+
</data>
</openerp>
diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py
index 5957ee284e8..b43cbc51c50 100644
--- a/addons/project_issue/report/project_issue_report.py
+++ b/addons/project_issue/report/project_issue_report.py
@@ -50,7 +50,6 @@ class project_issue_report(osv.osv):
'opening_date': fields.date('Date of Opening', readonly=True),
'creation_date': fields.date('Creation Date', readonly=True),
'date_closed': fields.date('Date of Closing', readonly=True),
- 'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'project.issue')]"),
'stage_id': fields.many2one('project.task.type', 'Stage'),
'nbr': fields.integer('# of Issues', readonly=True),
'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True),
@@ -86,7 +85,6 @@ class project_issue_report(osv.osv):
c.working_hours_open,
c.working_hours_close,
c.section_id,
- c.categ_id,
c.stage_id,
to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,
c.company_id as company_id,
@@ -104,7 +102,7 @@ class project_issue_report(osv.osv):
FROM
project_issue c
- WHERE c.active= 'true' and c.categ_id IN (select id from crm_case_categ where object_id in (select id from ir_model where model = 'project.issue'))
+ WHERE c.active= 'true'
)""")
project_issue_report()
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index 862f52b1931..d01acd6f558 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -17,19 +17,18 @@
<field name="company_id" invisible="1" groups="base.group_multi_company"/>
<field name="section_id" invisible="1"/>
<field name="user_id" invisible="1"/>
- <field name="categ_id" invisible="1"/>
<field name="channel_id" invisible="1"/>
<field name="partner_id" invisible="1"/>
- <field name="task_id" invisible="1"/>
+ <field name="task_id" invisible="1"/>
<field name="date_closed" invisible="1"/>
<field name="state" invisible="1"/>
<field name="day" invisible="1"/>
- <field name="nbr" string="#Project Issues" sum='#Number of Project Issues'/>
- <field name="delay_open" avg='Avg Opening Delay'/>
- <field name="delay_close" avg='Avg Closing Delay'/>
- <field name="working_hours_open" avg='Open Working Hours'/>
- <field name="working_hours_close" avg='Close Working hours'/>
- <field name="email" sum='# Emails'/>
+ <field name="nbr" string="#Project Issues" sum="#Number of Project Issues"/>
+ <field name="delay_open" avg="Avg Opening Delay"/>
+ <field name="delay_close" avg="Avg Closing Delay"/>
+ <field name="working_hours_open" avg="Open Working Hours"/>
+ <field name="working_hours_close" avg="Close Working hours"/>
+ <field name="email" sum="# Emails"/>
</tree>
</field>
</record>
diff --git a/addons/project_issue/static/src/js/project_issue.js b/addons/project_issue/static/src/js/project_issue.js
new file mode 100644
index 00000000000..24e5ff7cc49
--- /dev/null
+++ b/addons/project_issue/static/src/js/project_issue.js
@@ -0,0 +1,13 @@
+openerp.portal_project_issue = function(openerp) {
+ openerp.web_kanban.KanbanView.include({
+ on_groups_started: function() {
+ var self = this;
+ self._super.apply(this, arguments);
+
+ if (self.dataset.model === 'project.issue') {
+ // Load project's categories names from m2m field
+ self.project_display_categ_names();
+ }
+ }
+ });
+};
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index 7d7310465d6..099b09b9418 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -2,12 +2,9 @@
<openerp>
<data>
- <menuitem id="base.menu_project_long_term" name="Long Term Planning" parent="base.menu_main_pm" sequence="3"/>
-
- # ------------------------------------------------------
- # Project User Allocation
- # ------------------------------------------------------
+ <menuitem id="base.menu_project_long_term" name="Long Term Planning" parent="base.menu_main_pm" sequence="3"/>
+ <!-- Project User Allocation -->
<record id="view_project_user_allocation_gantt" model="ir.ui.view">
<field name="name">project.user.allocation.gantt</field>
<field name="model">project.user.allocation</field>
@@ -94,9 +91,7 @@
</record>
- # ------------------------------------------------------
- # Project Phase
- # ------------------------------------------------------
+ <!-- Project Phase -->
<act_window id="act_project_phases"
name="Phases"
src_model="project.project"
@@ -182,7 +177,7 @@
<form string="Project Users" version="7.0">
<group col="4">
<field name="user_id"/>
- <field name="date_start" />
+ <field name="date_start"/>
<field name="date_end"/>
</group>
</form>
@@ -195,7 +190,7 @@
<field name="name"/>
<field name="user_id"/>
<field name="date_start"/>
- <field name="date_end" />
+ <field name="date_end"/>
<field name="planned_hours" widget="float_time"/>
<field name="project_id" invisible="1"/>
<field name="total_hours" sum='Total Hours'/>
@@ -285,7 +280,7 @@
<separator orientation="vertical"/>
<field name="project_id"/>
</group>
- <newline/>
+ <newline/>
<group expand="0" string="Group By...">
<filter string="Project" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}" name="project"/>
<separator orientation="vertical"/>
@@ -317,10 +312,7 @@
</record>
- # ------------------------------------------------------
- # Project Task
- # ------------------------------------------------------
-
+ <!-- Project Task -->
<record id="view_phase_task_form2" model="ir.ui.view">
<field name="name">phase.task.form2</field>
<field name="model">project.task</field>
@@ -368,16 +360,15 @@
</field>
</record>
- <act_window
- context="{'search_default_phase_id': [active_id], 'default_phase_id' : active_id}"
- id="project_phase_task_list"
- name="Related Tasks"
- res_model="project.task"
- src_model="project.phase"
- view_mode="tree,form"
- />
+ <act_window
+ context="{'search_default_phase_id': [active_id], 'default_phase_id' : active_id}"
+ id="project_phase_task_list"
+ name="Related Tasks"
+ res_model="project.task"
+ src_model="project.phase"
+ view_mode="tree,form"/>
- <record id="analytic_account_inherited_phase_form" model="ir.ui.view">
+ <record id="analytic_account_inherited_phase_form" model="ir.ui.view">
<field name="name">account.analytic.account.phase.form.inherit</field>
<field name="model">account.analytic.account</field>
<field name="type">form</field>
@@ -393,10 +384,7 @@
</field>
</record>
- # ------------------------------------------------------
- # Menu Items
- # ------------------------------------------------------
-
+ <!-- Menu Items -->
<menuitem action="act_project_phase_list"
id="menu_project_phase_list" parent="project.menu_project_management" sequence="2"/>
diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py
index cb2e8f093aa..eb8df0ff77b 100644
--- a/addons/purchase/__openerp__.py
+++ b/addons/purchase/__openerp__.py
@@ -25,7 +25,7 @@
'version': '1.1',
'category': 'Purchase Management',
"sequence": 19,
- "summary": "Requests for Quotation, Invoicing Control",
+ "summary": "RfQ, Purchase Orders, Delivery & Invoicing Control",
'description': """
Purchase Management module is for generating a purchase order for purchase of goods from a supplier.
====================================================================================================
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 38a858e94d7..7f8742d3bd8 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -7,6 +7,7 @@
id="base.menu_purchase_root"
groups="group_purchase_manager,group_purchase_user"
sequence="40"/>
+
<menuitem id="menu_procurement_management" name="Purchase"
parent="base.menu_purchase_root" sequence="1" />
@@ -54,12 +55,12 @@
action="base.action_partner_category_form" id="menu_partner_categories_in_form" name="Partner Categories"
parent="purchase.menu_purchase_partner_cat" groups="base.group_no_one"/>
- <!--supplier menu-->
+ <!--Supplier menu-->
<menuitem id="base.menu_procurement_management_supplier_name" name="Suppliers"
parent="menu_procurement_management"
action="base.action_partner_supplier_form" sequence="15"/>
- <!--Inventory control-->
+ <!--Inventory control-->
<menuitem id="menu_procurement_management_inventory" name="Receive Products"
parent="base.menu_purchase_root" sequence="4"/>
<menuitem action="stock.action_picking_tree4" id="menu_action_picking_tree4" parent="menu_procurement_management_inventory"
@@ -80,11 +81,11 @@
<field name="domain">[('type','=','in_invoice')]</field>
<field name="context">{'default_type':'in_invoice', 'type':'in_invoice', 'journal_type': 'purchase', 'search_default_draft': 1}</field>
<field name="search_view_id" ref="account.view_account_invoice_filter"/>
- <field name="help">
- Use this menu to control the invoices to be received from your supplier.
- OpenERP generates draft invoices from your purchase orders or receptions, according to your settings.
- Once you receive a supplier invoice, you can match it with the draft invoice and validate it.
- </field>
+ <field name="help">
+ Use this menu to control the invoices to be received from your supplier.
+ OpenERP generates draft invoices from your purchase orders or receptions, according to your settings.
+ Once you receive a supplier invoice, you can match it with the draft invoice and validate it.
+ </field>
</record>
<menuitem name="Based on Draft Invoices"
@@ -93,7 +94,7 @@
parent="menu_procurement_management_invoice"
sequence="13"/>
- <!--product menu-->
+ <!-- Product menu-->
<menuitem id="menu_procurement_management_product" name="Products"
parent="base.menu_purchase_root" sequence="8"/>
@@ -140,7 +141,7 @@
<field name="key2">client_action_multi</field>
</record>
- <record model="ir.ui.view" id="purchase_order_calendar">
+ <record model="ir.ui.view" id="purchase_order_calendar">
<field name="name">purchase.order.calendar</field>
<field name="model">purchase.order</field>
<field name="type">calendar</field>
@@ -245,7 +246,7 @@
<field name="invoice_method"/>
<field name="invoiced"/>
<field name="fiscal_position"/>
- <!-- we do not need these fields anymore, the information is in open chatter -->
+ <!-- We do not need these fields anymore, the information is in open chatter -->
<field name="validator" groups="base.group_no_one"/>
<field name="date_approve" groups="base.group_no_one"/>
</group>
@@ -256,7 +257,7 @@
</notebook>
</sheet>
<div class="oe_chatter">
- <field name="message_ids" widget="mail_thread"/>
+ <field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
@@ -268,29 +269,29 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Purchase Order">
- <group>
- <field name="name" string="Reference"/>
- <separator orientation="vertical"/>
- <filter icon="terp-document-new" name="draft" string="Quotations" domain="[('state','=','draft')]" help="Purchase order which are in draft state"/>
- <filter icon="terp-check" name="approved" string="Approved" domain="[('state','in',('approved','done'))]" help="Approved purchase order"/>
- <filter icon="terp-gtk-go-back-rtl" name="not_invoiced" string="Not Invoiced" domain="[('invoice_ids','=', False)]" help="Purchase orders that include lines not invoiced."/>
- <filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase order which are in the exception state"/>
- <separator orientation="vertical"/>
- <field name="partner_id"/>
- <field name="product_id"/>
- <field name="create_uid"/>
- </group>
- <newline/>
- <group expand="0" string="Group By...">
- <filter string="Supplier" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
- <separator orientation="vertical"/>
- <filter string="Source" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'origin'}"/>
- <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
- <separator orientation="vertical"/>
- <filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
- <filter string="Expected Date" icon="terp-go-month" domain="[]" context="{'group_by':'minimum_planned_date'}"/>
- </group>
- </search>
+ <group>
+ <field name="name" string="Reference"/>
+ <separator orientation="vertical"/>
+ <filter icon="terp-document-new" name="draft" string="Quotations" domain="[('state','=','draft')]" help="Purchase order which are in draft state"/>
+ <filter icon="terp-check" name="approved" string="Approved" domain="[('state','in',('approved','done'))]" help="Approved purchase order"/>
+ <filter icon="terp-gtk-go-back-rtl" name="not_invoiced" string="Not Invoiced" domain="[('invoice_ids','=', False)]" help="Purchase orders that include lines not invoiced."/>
+ <filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase order which are in the exception state"/>
+ <separator orientation="vertical"/>
+ <field name="partner_id"/>
+ <field name="product_id"/>
+ <field name="create_uid"/>
+ </group>
+ <newline/>
+ <group expand="0" string="Group By...">
+ <filter string="Supplier" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
+ <separator orientation="vertical"/>
+ <filter string="Source" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'origin'}"/>
+ <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
+ <separator orientation="vertical"/>
+ <filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
+ <filter string="Expected Date" icon="terp-go-month" domain="[]" context="{'group_by':'minimum_planned_date'}"/>
+ </group>
+ </search>
</field>
</record>
@@ -300,34 +301,34 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Purchase Order">
- <group>
- <field name="name" string="Reference"/>
- <separator orientation="vertical"/>
- <filter icon="terp-mail-message-new"
- string="Inbox" help="Unread messages"
- name="needaction_pending"
- domain="[('needaction_pending','=',True)]"/>
- <separator orientation="vertical"/>
- <filter icon="terp-document-new" name="draft" string="Quotations" domain="[('state','=','draft')]" help="Purchase orders which are in draft state"/>
- <filter icon="terp-check" name="approved" string="Purchase Orders" domain="[('state','not in',('draft','cancel'))]" help="Approved purchase orders"/>
- <filter icon="terp-gtk-go-back-rtl" name="not_invoiced" string="Not Invoiced" domain="[('invoice_ids','=', False)]" help="Purchase orders that include lines not invoiced."/>
- <filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase orders which are in exception state"/>
- <separator orientation="vertical"/>
- <field name="partner_id"/>
- <field name="product_id"/>
- <field name="create_uid"/>
- </group>
- <newline/>
- <group expand="0" string="Group By...">
- <filter string="Supplier" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
- <separator orientation="vertical"/>
- <filter string="Source" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'origin'}"/>
- <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
- <separator orientation="vertical"/>
- <filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
- <filter string="Expected Date" icon="terp-go-month" domain="[]" context="{'group_by':'minimum_planned_date'}"/>
- </group>
- </search>
+ <group>
+ <field name="name" string="Reference"/>
+ <separator orientation="vertical"/>
+ <filter icon="terp-mail-message-new"
+ string="Inbox" help="Unread messages"
+ name="needaction_pending"
+ domain="[('needaction_pending','=',True)]"/>
+ <separator orientation="vertical"/>
+ <filter icon="terp-document-new" name="draft" string="Quotations" domain="[('state','=','draft')]" help="Purchase orders which are in draft state"/>
+ <filter icon="terp-check" name="approved" string="Purchase Orders" domain="[('state','not in',('draft','cancel'))]" help="Approved purchase orders"/>
+ <filter icon="terp-gtk-go-back-rtl" name="not_invoiced" string="Not Invoiced" domain="[('invoice_ids','=', False)]" help="Purchase orders that include lines not invoiced."/>
+ <filter icon="terp-emblem-important" name="exception" string="Exception" domain="[('state','in',('except_invoice','except_picking'))]" help="Purchase orders which are in exception state"/>
+ <separator orientation="vertical"/>
+ <field name="partner_id"/>
+ <field name="product_id"/>
+ <field name="create_uid"/>
+ </group>
+ <newline/>
+ <group expand="0" string="Group By...">
+ <filter string="Supplier" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
+ <separator orientation="vertical"/>
+ <filter string="Source" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'origin'}"/>
+ <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
+ <separator orientation="vertical"/>
+ <filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
+ <filter string="Expected Date" icon="terp-go-month" domain="[]" context="{'group_by':'minimum_planned_date'}"/>
+ </group>
+ </search>
</field>
</record>
@@ -559,9 +560,7 @@
parent="menu_procurement_management_invoice"
sequence="72"/>
- <!--
- Procurements
- -->
+ <!-- Procurements -->
<record id="view_procurement_form_inherit" model="ir.ui.view">
<field name="name">procurement.order.form.inherit</field>
diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py
index f5bf1adb436..b6be6f7b1e3 100644
--- a/addons/sale/__openerp__.py
+++ b/addons/sale/__openerp__.py
@@ -24,7 +24,7 @@
'version': '1.0',
'category': 'Sales Management',
"sequence": 14,
- "summary": "Quotations, Sales, Invoicing",
+ "summary": "Quotations, Sale Orders, Invoicing",
'description': """
The base module to manage quotations and sales orders.
======================================================
diff --git a/addons/sale_crm/i18n/ja.po b/addons/sale_crm/i18n/ja.po
index 5a7e0b77495..44e1c1cc23a 100644
--- a/addons/sale_crm/i18n/ja.po
+++ b/addons/sale_crm/i18n/ja.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2012-07-06 21:31+0000\n"
+"PO-Revision-Date: 2012-07-30 16:29+0000\n"
"Last-Translator: Akira Hiyama <Unknown>\n"
"Language-Team: Japanese <ja@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-07-14 05:49+0000\n"
-"X-Generator: Launchpad (build 15614)\n"
+"X-Launchpad-Export-Date: 2012-07-31 04:58+0000\n"
+"X-Generator: Launchpad (build 15702)\n"
#. module: sale_crm
#: field:sale.order,categ_id:0
@@ -31,12 +31,12 @@ msgstr "注文参照は、会社ごとに固有でなければなりません。
#: code:addons/sale_crm/wizard/crm_make_sale.py:112
#, python-format
msgid "Converted to Sales Quotation(%s)."
-msgstr "販売見積書(%s)を移動"
+msgstr "受注見積(%s)に変換"
#. module: sale_crm
#: view:crm.make.sale:0
msgid "Convert to Quotation"
-msgstr "見積りへ移動"
+msgstr "見積に変換"
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:89
@@ -48,7 +48,7 @@ msgstr "データ不足です。"
#: code:addons/sale_crm/wizard/crm_make_sale.py:89
#, python-format
msgid "Customer has no addresses defined!"
-msgstr "顧客の住所が不明確です。"
+msgstr "顧客の住所が定義されていません。"
#. module: sale_crm
#: model:ir.model,name:sale_crm.model_crm_make_sale
@@ -58,7 +58,7 @@ msgstr "営業する。"
#. module: sale_crm
#: view:crm.make.sale:0
msgid "_Create"
-msgstr "_作成"
+msgstr "作成"
#. module: sale_crm
#: view:sale.order:0
@@ -69,22 +69,22 @@ msgstr "私の営業チーム"
#: help:crm.make.sale,close:0
msgid ""
"Check this to close the opportunity after having created the sale order."
-msgstr "発注書を作成後、これをチェックしオポチュニティを終了します。"
+msgstr "発注書を作成後、商談を終了するためにこれをチェックします。"
#. module: sale_crm
#: view:board.board:0
msgid "My Opportunities"
-msgstr "私のオポチュニティ"
+msgstr "私の商談"
#. module: sale_crm
#: view:crm.lead:0
msgid "Convert to Quote"
-msgstr "見積りへ移動"
+msgstr "見積に変換"
#. module: sale_crm
#: field:crm.make.sale,shop_id:0
msgid "Shop"
-msgstr "お店"
+msgstr "店"
#. module: sale_crm
#: field:crm.make.sale,partner_id:0
@@ -95,12 +95,12 @@ msgstr "顧客"
#: code:addons/sale_crm/wizard/crm_make_sale.py:92
#, python-format
msgid "Opportunity: %s"
-msgstr "オポチュニティ: %s"
+msgstr "商談:%s"
#. module: sale_crm
#: field:crm.make.sale,close:0
msgid "Close Opportunity"
-msgstr "オポチュニティ成立"
+msgstr "商談を閉じる"
#. module: sale_crm
#: view:board.board:0
@@ -111,7 +111,7 @@ msgstr "段階別私の計画売上高"
#: code:addons/sale_crm/wizard/crm_make_sale.py:110
#, python-format
msgid "Opportunity '%s' is converted to Quotation."
-msgstr "オポチュニティの'%s' は、見積に変換されました。"
+msgstr "商談 %s は見積に変換されました。"
#. module: sale_crm
#: view:sale.order:0
@@ -122,7 +122,7 @@ msgstr "営業チーム"
#. module: sale_crm
#: model:ir.actions.act_window,name:sale_crm.action_crm_make_sale
msgid "Make Quotation"
-msgstr "見積り作成"
+msgstr "見積作成"
#. module: sale_crm
#: view:crm.make.sale:0
@@ -132,4 +132,4 @@ msgstr "キャンセル"
#. module: sale_crm
#: model:ir.model,name:sale_crm.model_sale_order
msgid "Sales Order"
-msgstr "受注"
+msgstr "受注オーダー"
diff --git a/addons/sale_margin/i18n/ja.po b/addons/sale_margin/i18n/ja.po
index 6d04bd6e6e0..e9c76e11755 100644
--- a/addons/sale_margin/i18n/ja.po
+++ b/addons/sale_margin/i18n/ja.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2012-04-20 04:29+0000\n"
-"Last-Translator: Tomomi Mengelberg <tomomi.mengelberg@aquasys.co.jp>\n"
+"PO-Revision-Date: 2012-07-30 16:32+0000\n"
+"Last-Translator: Akira Hiyama <Unknown>\n"
"Language-Team: Japanese <ja@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-07-14 06:17+0000\n"
-"X-Generator: Launchpad (build 15614)\n"
+"X-Launchpad-Export-Date: 2012-07-31 04:58+0000\n"
+"X-Generator: Launchpad (build 15702)\n"
#. module: sale_margin
#: sql_constraint:sale.order:0
msgid "Order Reference must be unique per Company!"
-msgstr "発注参照は、会社ごとにユニークでなければなりません。"
+msgstr "オーダー参照は、会社ごとに固有でなければなりません。"
#. module: sale_margin
#: field:sale.order.line,purchase_price:0
@@ -30,7 +30,7 @@ msgstr "原価"
#. module: sale_margin
#: model:ir.model,name:sale_margin.model_sale_order
msgid "Sales Order"
-msgstr "受注"
+msgstr "受注オーダー"
#. module: sale_margin
#: help:sale.order,margin:0
@@ -48,4 +48,4 @@ msgstr "粗利益"
#. module: sale_margin
#: model:ir.model,name:sale_margin.model_sale_order_line
msgid "Sales Order Line"
-msgstr "受注明細"
+msgstr "受注オーダー行"
diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py
index d061fb4b033..0f0f758f4d6 100644
--- a/addons/stock/__openerp__.py
+++ b/addons/stock/__openerp__.py
@@ -23,7 +23,7 @@
"name" : "Warehouse Management",
"version" : "1.1",
"author" : "OpenERP SA",
- "summary": "Incoming Shipments, Deliveries, Inventory, Stock",
+ "summary": "Inventory, Logistic, Storage",
"description" : """
OpenERP Inventory Management module can manage multi-warehouses, multi and structured stock locations.
======================================================================================================
diff --git a/addons/stock/product_view.xml b/addons/stock/product_view.xml
index 04a0959739a..d5a3545a1b3 100644
--- a/addons/stock/product_view.xml
+++ b/addons/stock/product_view.xml
@@ -105,15 +105,15 @@
<group name="status" position="before" version="7.0">
<group string="Stock and Expected Variations">
<field name="qty_available"/>
- <field name="incoming_qty"/>
- <label for="virtual_available"/>
- <div>
+ <field name="incoming_qty" groups="base.group_user"/>
+ <label for="virtual_available" groups="base.group_user"/>
+ <div groups="base.group_user">
<field name="virtual_available" class="oe_inline"/>
<button name="%(action_view_change_product_quantity)d" string="Update" attrs="{'invisible': [('type', '=', 'service')]}"
type="action" icon="gtk-execute" groups="stock.group_stock_manager,stock.group_stock_user" class="oe_inline"/>
</div>
- <field name="outgoing_qty"/>
+ <field name="outgoing_qty" groups="base.group_user"/>
</group>
<group name="lot" groups="stock.group_tracking_lot,stock.group_production_lot" string="Lots">
<field name="track_production" groups="stock.group_production_lot"/>
@@ -123,7 +123,7 @@
</group>
</field>
</record>
-
+
<record id="action_receive_move" model="ir.actions.act_window">
<field name="name">Receive Products</field>
<field name="res_model">stock.move</field>
@@ -136,7 +136,7 @@
<field name="search_view_id" ref="view_move_search_reception_incoming_picking"/>
<field name="help">Here you can receive individual products, no matter what purchase order or picking order they come from. You will find the list of all products you are waiting for. Once you receive an order, you can filter based on the name of the supplier or the purchase order reference. Then you can confirm all products received using the buttons on the right of each line.</field>
</record>
-
+
<record id="action_deliver_move" model="ir.actions.act_window">
<field name="name">Receive Products</field>
<field name="res_model">stock.move</field>
@@ -215,17 +215,5 @@
</field>
</record>
-<!-- <record id="view_product_valuation_form" model="ir.ui.view">
- <field name="name">product.valuation.stock.form.inherit</field>
- <field name="model">product.product</field>
- <field name="type">form</field>
- <field name="inherit_id" ref="product.product_normal_form_view"/>
- <field name="arch" type="xml">
- <field name="cost_method" position="after">
- <field name="valuation"/>
- </field>
- </field>
- </record>-->
-
</data>
</openerp>
diff --git a/addons/stock/stock_demo.xml b/addons/stock/stock_demo.xml
index ec0860f62c7..03a107b6947 100644
--- a/addons/stock/stock_demo.xml
+++ b/addons/stock/stock_demo.xml
@@ -6,9 +6,9 @@
<field eval="[(4, ref('group_stock_user'))]" name="groups_id"/>
</record>
- <!--
- Resource: stock.location
- -->
+
+ <!-- Resource: stock.location -->
+
<record id="stock_location_3" model="stock.location">
<field name="name">IT Suppliers</field>
<field name="location_id" ref="stock_location_suppliers"/>
@@ -44,16 +44,14 @@
</record>
- <!--
- Resource: stock.inventory
- -->
+ <!-- Resource: stock.inventory -->
<record id="stock_inventory_0" model="stock.inventory">
<field name="name">Starting Inventory</field>
</record>
- <!--
- Resource: stock.inventory.line
- -->
+
+
+ <!-- Resource: stock.inventory.line -->
<record id="stock_inventory_line_0" model="stock.inventory.line">
<field name="product_id" ref="product.product_product_pc1"/>
@@ -185,10 +183,10 @@
<field eval="0" name="supplier"/>
<field name="is_company">1</field>
<field eval="1" name="active"/>
- <field eval="&quot;&quot;&quot;Shop 1&quot;&quot;&quot;" name="name"/>
+ <field name="name">Shop 1</field>
</record>
<record id="res_partner_address_fabien0" model="res.partner">
- <field eval="&quot;&quot;&quot;Felix&quot;&quot;&quot;" name="name"/>
+ <field name="name">Felix</field>
<field name="parent_id" ref="res_partner_tinyshop0"/>
<field name="use_parent_address" eval="1"/>
<field eval="1" name="active"/>
@@ -197,17 +195,17 @@
<field name="currency_id" ref="base.EUR"/>
<field name="partner_id" ref="res_partner_tinyshop0"/>
<field name="parent_id" ref="base.main_company"/>
- <field eval="&quot;&quot;&quot;Shop 1&quot;&quot;&quot;" name="name"/>
+ <field name="name">Shop 1</field>
</record>
<record id="res_partner_tinyshop1" model="res.partner">
<field eval="1" name="customer"/>
<field eval="0" name="supplier"/>
<field eval="1" name="active"/>
<field name="is_company">1</field>
- <field eval="&quot;&quot;&quot;Shop 2&quot;&quot;&quot;" name="name"/>
+ <field name="name">Shop 2</field>
</record>
<record id="res_partner_address_eric0" model="res.partner">
- <field eval="&quot;&quot;&quot;Edwin&quot;&quot;&quot;" name="name"/>
+ <field name="name">Edwin</field>
<field name="parent_id" ref="res_partner_tinyshop1"/>
<field name="use_parent_address" eval="1"/>
<field eval="1" name="active"/>
@@ -216,36 +214,36 @@
<field name="currency_id" ref="base.EUR"/>
<field name="partner_id" ref="res_partner_tinyshop1"/>
<field name="parent_id" ref="base.main_company"/>
- <field eval="&quot;&quot;&quot;Shop 2&quot;&quot;&quot;" name="name"/>
+ <field name="name">Shop 2</field>
</record>
<record id="stock_location_shop0" model="stock.location">
<field model="res.partner" name="partner_id" search="[('name','=','Fabien')]"/>
<field name="location_id" ref="stock.stock_location_locations"/>
<field name="company_id" ref="res_company_shop0"/>
- <field eval="&quot;&quot;&quot;internal&quot;&quot;&quot;" name="usage"/>
- <field eval="&quot;&quot;&quot;none&quot;&quot;&quot;" name="chained_location_type"/>
+ <field name="usage">internal</field>
+ <field name="chained_location_type">none</field>
<field eval="1" name="active"/>
- <field eval="&quot;&quot;&quot;Shop 1&quot;&quot;&quot;" name="name"/>
- <field eval="&quot;&quot;&quot;manual&quot;&quot;&quot;" name="chained_auto_packing"/>
+ <field name="name">Shop 1</field>
+ <field name="chained_auto_packing">manual</field>
</record>
<record id="stock_location_shop1" model="stock.location">
<field model="res.partner" name="partner_id" search="[('name','=','Eric')]"/>
<field name="company_id" ref="res_company_tinyshop0"/>
<field name="location_id" ref="stock.stock_location_locations"/>
- <field eval="&quot;&quot;&quot;internal&quot;&quot;&quot;" name="usage"/>
+ <field name="usage">internal</field>
<field eval="1" name="active"/>
- <field eval="&quot;&quot;&quot;Shop 2&quot;&quot;&quot;" name="name"/>
+ <field name="name">Shop 2</field>
</record>
<record id="stock_location_intermediatelocation0" model="stock.location">
<field name="partner_id" ref="base.main_partner"/>
<field name="location_id" ref="stock.stock_location_locations_partner"/>
- <field eval="&quot;&quot;&quot;procurement&quot;&quot;&quot;" name="usage"/>
- <field eval="&quot;&quot;&quot;Internal Shippings&quot;&quot;&quot;" name="name"/>
+ <field name="usage">procurement</field>
+ <field name="name">Internal Shippings</field>
</record>
<record id="stock_warehouse_shop0" model="stock.warehouse">
<field name="lot_output_id" ref="stock.stock_location_output"/>
- <field eval="&quot;&quot;&quot;Shop 1&quot;&quot;&quot;" name="name"/>
+ <field name="name">Shop 1</field>
<field name="lot_stock_id" ref="stock_location_shop0"/>
<field name="partner_id" ref="res_partner_address_fabien0"/>
<field name="company_id" ref="res_company_shop0"/>
@@ -266,5 +264,6 @@
<field eval="'account.account,'+str(ref('account.stk'))" model="account.account" name="value"/>
<field name="company_id" ref="base.main_company"/>
</record>
+
</data>
</openerp>
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index 6fe610012c1..098b6ea14c8 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -683,14 +683,9 @@
<menuitem action="action_warehouse_form" id="menu_action_warehouse_form" groups="stock.group_locations"
parent="menu_stock_configuration" sequence="1"/>
-<!--
- STOCK PICKING
--->
-
<!--
- #
- # Defaults and Internal Pickings
- #
+ Stock picking
+ Defaults and Internal Pickings
-->
<record model="ir.ui.view" id="stock_picking_calendar">
@@ -733,14 +728,16 @@
<field name="arch" type="xml">
<form string="Internal Picking List" version="7.0">
<header>
- <button name="draft_force_assign" states="draft" string="Confirm" type="object" class="oe_highlight"/>
- <button name="draft_validate" states="draft" string="Confirm &amp; Transfer" type="object" class="oe_highlight"/>
- <!-- <button name="action_assign" states="confirmed" string="Check Availability" type="object"/> -->
- <button name="force_assign" states="confirmed" string="Force Availability" type="object" class="oe_highlight"/>
- <button name="action_process" states="assigned" string="Confirm &amp; Transfer" groups="stock.group_stock_user" type="object" class="oe_highlight"/>
- <button name="%(action_stock_invoice_onshipping)d" string="Create Invoice/Refund" attrs="{'invisible': ['|','|',('state','&lt;&gt;','done'),('invoice_state','=','invoiced'),('invoice_state','=','none')]}" type="action" class="oe_highlight"/>
- <button name="%(act_stock_return_picking)d" string="Reverse Transfer" states="done" type="action"/>
- <button name="button_cancel" states="assigned,confirmed,draft" string="_Cancel"/>
+ <span groups="base.group_user">
+ <button name="draft_force_assign" states="draft" string="Confirm" type="object" class="oe_highlight"/>
+ <button name="draft_validate" states="draft" string="Confirm &amp; Transfer" type="object" class="oe_highlight"/>
+ <!-- <button name="action_assign" states="confirmed" string="Check Availability" type="object"/> -->
+ <button name="force_assign" states="confirmed" string="Force Availability" type="object" class="oe_highlight"/>
+ <button name="action_process" states="assigned" string="Confirm &amp; Transfer" groups="stock.group_stock_user" type="object" class="oe_highlight"/>
+ <button name="%(action_stock_invoice_onshipping)d" string="Create Invoice/Refund" attrs="{'invisible': ['|','|',('state','&lt;&gt;','done'),('invoice_state','=','invoiced'),('invoice_state','=','none')]}" type="action" class="oe_highlight"/>
+ <button name="%(act_stock_return_picking)d" string="Reverse Transfer" states="done" type="action"/>
+ <button name="button_cancel" states="assigned,confirmed,draft" string="_Cancel"/>
+ </span>
<field name="state" widget="statusbar" statusbar_visible="draft,assigned,done" statusbar_colors='{"shipping_except":"red","invoice_except":"red","waiting_date":"blue"}'/>
</header>
<sheet>
@@ -776,7 +773,8 @@
<button name="%(stock.move_scrap)d"
string="Scrap Products" type="action"
icon="gtk-convert" context="{'scrap': True}"
- states="draft,waiting,confirmed,assigned"/>
+ states="draft,waiting,confirmed,assigned"
+ groups="base.group_user"/>
<field name="scrapped" invisible="1"/>
<field name="prodlot_id" groups="stock.group_production_lot"/>
<button
@@ -800,9 +798,11 @@
</tree>
<form string="Stock Moves" version="7.0">
<header>
- <button name="force_assign" states="confirmed" string="Force Availability" type="object" icon="gtk-jump-to"/>
- <button name="action_confirm" states="draft" string="Confirm" type="object" icon="gtk-apply"/>
- <button name="cancel_assign" states="assigned" string="Cancel Availability" type="object" icon="gtk-find"/>
+ <span groups="base.group_user">
+ <button name="force_assign" states="confirmed" string="Force Availability" type="object" icon="gtk-jump-to"/>
+ <button name="action_confirm" states="draft" string="Confirm" type="object" icon="gtk-apply"/>
+ <button name="cancel_assign" states="assigned" string="Cancel Availability" type="object" icon="gtk-find"/>
+ </span>
<field name="state" widget="statusbar" statusbar_visible="draft,assigned,done"/>
</header>
<group>
@@ -816,7 +816,8 @@
<button name="%(stock.move_scrap)d"
string="Scrap" type="action"
icon="gtk-convert" context="{'scrap': True}"
- states="draft,waiting,confirmed,assigned"/>
+ states="draft,waiting,confirmed,assigned"
+ groups="base.group_user"/>
</div>
<label for="product_uos_qty" groups="product.group_uos"/>
<div groups="product.group_uos">
@@ -866,8 +867,8 @@
<group>
<group>
<field name="move_type"/>
- <field name="type"/>
- <field name="auto_picking"/>
+ <field name="type" groups="base.group_user"/>
+ <field name="auto_picking" groups="base.group_user"/>
</group>
<group>
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
@@ -941,11 +942,7 @@
<field name="act_window_id" ref="action_picking_tree6"/>
</record>
- <!--
- #
- # Sending Products
- #
- -->
+ <!-- Sending Products -->
<record id="view_picking_out_tree" model="ir.ui.view">
<field name="name">stock.picking.out.tree</field>
<field name="model">stock.picking</field>
@@ -971,18 +968,18 @@
<field name="type">form</field>
<field name="arch" type="xml">
<data>
- <xpath expr="/form/header/button[@name='%(act_stock_return_picking)d']" position="replace">
+ <xpath expr="/form/header//button[@name='%(act_stock_return_picking)d']" position="replace">
<button name="%(report_picking_list_out)d" string="Print Delivery Slip" type="action" states="done" class="oe_highlight"/>
<button name="%(act_stock_return_picking)d" string="Return Products" states="done" type="action"/>
</xpath>
- <xpath expr="/form/header/button[@name='draft_validate']" position="replace">
+ <xpath expr="/form/header//button[@name='draft_validate']" position="replace">
<button name="draft_validate" states="draft" string="Confirm &amp; Deliver" type="object" class="oe_highlight"/>
<button name="action_assign" states="confirmed" string="Check Availability" type="object" class="oe_highlight"/>
</xpath>
- <xpath expr="/form/header/button[@name='action_process']" position="replace">
+ <xpath expr="/form/header//button[@name='action_process']" position="replace">
<button name="action_process" states="assigned" string="Deliver" type="object" icon="gtk-go-forward" class="oe_highlight"/>
</xpath>
- <xpath expr="/form/header/field[@name='state']" position="replace">
+ <xpath expr="/form/header//field[@name='state']" position="replace">
<field name="state" nolabel="1" readonly="1" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" statusbar_colors='{"auto":"blue", "confirmed":"blue"}'/>
</xpath>
<xpath expr="//field[@name='partner_id']" position="replace">
@@ -1059,11 +1056,7 @@
</record>
<menuitem action="action_picking_tree" id="menu_action_picking_tree" parent="menu_stock_warehouse_mgmt" sequence="3"/>
- <!--
- #
- # Incomming Shipments
- #
- -->
+ <!-- Incomming Shipments -->
<record id="view_picking_in_tree" model="ir.ui.view">
<field name="name">stock.picking.in.tree</field>
<field name="model">stock.picking.in</field>
@@ -1089,7 +1082,7 @@
<field name="type">form</field>
<field name="arch" type="xml">
<data>
- <xpath expr="//button[@name='%(act_stock_return_picking)d']" position="replace">
+ <xpath expr="/form/header//button[@name='%(act_stock_return_picking)d']" position="replace">
<button name="%(act_stock_return_picking)d" string="Return Products" states="done" type="action"/>
</xpath>
<xpath expr="//button[@name='draft_validate']" position="replace">
@@ -1191,8 +1184,7 @@
<button name="%(stock.move_scrap)d"
string="Scrap Products" type="action"
icon="gtk-convert" context="{'scrap': True}"
- states="draft,waiting,confirmed,assigned"
- />
+ states="draft,waiting,confirmed,assigned"/>
<field name="prodlot_id" groups="stock.group_production_lot"/>
<button name="%(track_line)d" string="Split in Serial Numbers" type="action"
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('prodlot_id','&lt;&gt;',False)]}"
@@ -1217,8 +1209,6 @@
</field>
</record>
-<!-- <menuitem id="menu_traceability_low" name="Low Level" parent="menu_traceability"/> -->
-
<record id="view_move_form" model="ir.ui.view">
<field name="name">stock.move.form</field>
<field name="model">stock.move</field>
@@ -1351,13 +1341,10 @@
</record>
<menuitem action="action_move_form2" id="menu_action_move_form2" parent="menu_traceability" sequence="3"/>
- ====================================
- Reception Picking (By Stock Move)
- ====================================
- <!-- from stock_partial_move_view -->
-
-
-
+ <!--
+ Reception Picking (By Stock Move)
+ From stock_partial_move_view
+ -->
<record id="view_move_tree_reception_picking" model="ir.ui.view">
<field name="name">stock.move.tree2</field>
<field name="model">stock.move</field>
@@ -1377,7 +1364,7 @@
<field name="prodlot_id" groups="stock.group_production_lot"/>
<button name="%(track_line)d" string="Split in Serial Numbers" type="action"
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('prodlot_id','&lt;&gt;',False)]}"
- states="draft,waiting,confirmed,assigned,done"
+ states="draft,waiting,confirmed,assigned,done"
groups="stock.group_tracking_lot"/>
<field name="tracking_id" groups="stock.group_tracking_lot"/>
<button name="setlast_tracking" string="Put in current pack" type="object"
@@ -1394,8 +1381,9 @@
</tree>
</field>
</record>
+
<!-- test -->
- <record id="view_move_tree_reception_picking_board" model="ir.ui.view">
+ <record id="view_move_tree_reception_picking_board" model="ir.ui.view">
<field name="name">stock.move.tree3</field>
<field name="model">stock.move</field>
<field name="type">tree</field>
@@ -1499,9 +1487,7 @@
<field name="act_window_id" ref="action_reception_picking_move"/>
</record>
- # -------------------------------------------------------------
- # Stock incoterms
- # -------------------------------------------------------------
+ <!-- Stock incoterms -->
<record id="view_incoterms_tree" model="ir.ui.view">
<field name="name">stock.incoterms.tree</field>
<field name="model">stock.incoterms</field>
diff --git a/addons/stock_planning/i18n/ja.po b/addons/stock_planning/i18n/ja.po
index e3911d336ff..ed3b63ac1bc 100644
--- a/addons/stock_planning/i18n/ja.po
+++ b/addons/stock_planning/i18n/ja.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2012-07-04 23:38+0000\n"
+"PO-Revision-Date: 2012-07-30 16:28+0000\n"
"Last-Translator: Akira Hiyama <Unknown>\n"
"Language-Team: Japanese <ja@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-07-14 06:20+0000\n"
-"X-Generator: Launchpad (build 15614)\n"
+"X-Launchpad-Export-Date: 2012-07-31 04:58+0000\n"
+"X-Generator: Launchpad (build 15702)\n"
#. module: stock_planning
#: code:addons/stock_planning/wizard/stock_planning_createlines.py:73
@@ -1184,7 +1184,7 @@ msgstr "誰がこの予測を作成したのか、検証したのかを示しま
#. module: stock_planning
#: field:stock.sale.forecast,analyzed_team_id:0
msgid "Sales Team"
-msgstr "販売チーム"
+msgstr "営業チーム"
#. module: stock_planning
#: help:stock.planning,incoming_left:0
diff --git a/addons/subscription/subscription_view.xml b/addons/subscription/subscription_view.xml
index 3271096a51a..3de9e9b9651 100644
--- a/addons/subscription/subscription_view.xml
+++ b/addons/subscription/subscription_view.xml
@@ -3,11 +3,7 @@
<data>
<menuitem id="next_id_45" name="Recurring Events" parent="base.menu_tools" sequence="4"/>
- <!--
- =======================================================
- Subscription Views
- =======================================================
- -->
+ <!-- Subscription Views -->
<record id="view_subscription_form" model="ir.ui.view">
<field name="name">subscription.subscription.form</field>
<field name="model">subscription.subscription</field>
@@ -17,7 +13,7 @@
<header>
<button name="set_process" states="draft" string="Process" type="object" class="oe_highlight"/>
<button name="set_done" states="running" string="Stop" type="object" class="oe_highlight"/>
- <button name="set_draft" states="done" string="Set to Draft" type="object" />
+ <button name="set_draft" states="done" string="Set to Draft" type="object"/>
<field name="state" widget="statusbar" statusbar_visible="draft,running"/>
</header>
<sheet>
@@ -103,7 +99,7 @@
<field name="view_type">form</field>
<field name="view_id" ref="view_subscription_tree"/>
<field name="context">{'search_default_User':1}</field>
- <field name="search_view_id" ref="view_subscription_filter" />
+ <field name="search_view_id" ref="view_subscription_filter"/>
</record>
<menuitem action="action_subscription_form" id="menu_action_subscription_form" parent="subscription.next_id_45"/>
@@ -208,11 +204,12 @@
<field name="res_model">subscription.document</field>
<field name="view_type">form</field>
<field name="view_id" ref="document_tree"/>
- <field name="search_view_id" ref="view_subscription_document_filter" />
+ <field name="search_view_id" ref="view_subscription_document_filter"/>
</record>
<menuitem name="Configuration" parent="base.menu_tools"
- id="base.menu_lunch_survey_root" sequence="20" groups="base.group_tool_manager" />
+ id="base.menu_lunch_survey_root" sequence="20" groups="base.group_tool_manager"/>
<menuitem id="config_recuuring_event" name="Recurring Events" parent="base.menu_lunch_survey_root" sequence="4"/>
<menuitem action="action_document_form" id="menu_action_document_form" parent="config_recuuring_event"/>
+
</data>
</openerp>