diff options
| author | Jigar Amin - OpenERP <jam@tinyerp.com> | 2012-06-27 17:10:52 +0530 |
|---|---|---|
| committer | Jigar Amin - OpenERP <jam@tinyerp.com> | 2012-06-27 17:10:52 +0530 |
| commit | 7c645856fe8dc05c237d070c98c4c22641776a2c (patch) | |
| tree | 359a4bb4e9fafb63d4398a444b595a861466363c | |
| parent | f89c6f0a0b5be2b76fcd4735b9a05616c0191099 (diff) | |
| parent | b22523e08242edb8df5d1d39f6a76121833956d4 (diff) | |
[MERGE] lp:openobject-addons
bzr revid: jam@tinyerp.com-20120627114052-094g4yequ34sr59d
187 files changed, 2013 insertions, 6310 deletions
diff --git a/addons/account/account.py b/addons/account/account.py index 6e96ce73962..caf1d68c45d 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -24,11 +24,12 @@ from datetime import datetime from dateutil.relativedelta import relativedelta from operator import itemgetter -import netsvc +import logging import pooler from osv import fields, osv import decimal_precision as dp from tools.translate import _ +_logger = logging.getLogger(__name__) def check_cycle(self, cr, uid, ids, context=None): """ climbs the ``self._table.parent_id`` chains for 100 levels or @@ -212,7 +213,6 @@ class account_account(osv.osv): _name = "account.account" _description = "Account" _parent_store = True - logger = netsvc.Logger() def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): @@ -295,8 +295,7 @@ class account_account(osv.osv): if aml_query.strip(): wheres.append(aml_query.strip()) filters = " AND ".join(wheres) - self.logger.notifyChannel('addons.'+self._name, netsvc.LOG_DEBUG, - 'Filters: %s'%filters) + _logger.debug('Filters: %s',(filters)) # IN might not work ideally in case there are too many # children_and_consolidated, in that case join on a # values() e.g.: @@ -312,8 +311,7 @@ class account_account(osv.osv): " GROUP BY l.account_id") params = (tuple(children_and_consolidated),) + query_params cr.execute(request, params) - self.logger.notifyChannel('addons.'+self._name, netsvc.LOG_DEBUG, - 'Status: %s'%cr.statusmessage) + _logger.debug('Status: %s',(cr.statusmessage)) for res in cr.dictfetchall(): accounts[res['id']] = res @@ -2095,9 +2093,7 @@ class account_tax(osv.osv): } def compute(self, cr, uid, taxes, price_unit, quantity, product=None, partner=None): - logger = netsvc.Logger() - logger.notifyChannel("warning", netsvc.LOG_WARNING, - "Deprecated, use compute_all(...)['taxes'] instead of compute(...) to manage prices with tax included") + _logger.warning("Deprecated, use compute_all(...)['taxes'] instead of compute(...) to manage prices with tax included") return self._compute(cr, uid, taxes, price_unit, quantity, product, partner) def _compute(self, cr, uid, taxes, price_unit, quantity, product=None, partner=None): diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 250e2cd0df6..a5be9239ed3 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -39,7 +39,7 @@ <field name="quantity"/> <field name="uos_id" groups="product.group_uom"/> <field name="price_unit"/> - <field name="discount"/> + <field name="discount" groups="sale.group_discount_per_so_line"/> <field name="price_subtotal"/> </tree> </field> @@ -61,8 +61,8 @@ on_change="uos_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/> </div> <field name="price_unit"/> - <field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '<>', 'view')]" name="account_id" on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/> - <field name="discount"/> + <field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '<>', 'view')]" name="account_id" on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)" groups="account.group_account_user"/> + <field name="discount" groups="sale.group_discount_per_so_line"/> <field name="invoice_line_tax_id" context="{'type':parent.type}" domain="[('parent_id','=',False),('company_id', '=', parent.company_id)]" widget="many2many_tags"/> <field domain="[('type','<>','view'), ('company_id', '=', parent.company_id), ('parent_id', '!=', False)]" name="account_analytic_id" groups="analytic.group_analytic_accounting"/> <field name="company_id" groups="base.group_multi_company" readonly="1"/> @@ -98,7 +98,7 @@ <group col="4"> <field name="name"/> <field name="sequence"/> - <field name="account_id"/> + <field name="account_id" groups="account.group_account_user"/> <field name="manual"/> <field name="amount"/> <field name="base" readonly="0"/> @@ -190,7 +190,7 @@ <field context="{'partner_id': partner_id, 'price_type': 'price_type' in dir() and price_type or False, 'type': type}" name="invoice_line"> <tree string="Invoice lines"> <field name="product_id" on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/> - <field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '<>', 'view')]" name="account_id" on_change="onchange_account_id(product_id,parent.partner_id,parent.type,parent.fiscal_position,account_id)"/> + <field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '<>', 'view')]" name="account_id" on_change="onchange_account_id(product_id,parent.partner_id,parent.type,parent.fiscal_position,account_id)" groups="base.group_account_user"/> <field name="invoice_line_tax_id" view_mode="2" context="{'type':parent.type}" domain="[('parent_id','=',False)]"/> <field domain="[('type','<>','view'), ('company_id', '=', parent.company_id), ('parent_id', '!=', False)]" name="account_analytic_id" groups="analytic.group_analytic_accounting"/> <field name="quantity"/> @@ -274,11 +274,12 @@ <field name="arch" type="xml"> <form version="7.0"> <header> - <button name="action_invoice_sent" type="object" string="Send by Email" states="open" class="oe_highlight" attrs="{'invisible':['|',('sent','=',True), ('state', '=', 'draft')]}"/> - <button name="invoice_print" string="Print Invoice" type="object" states="open" attrs="{'invisible':['|',('sent','=',True), ('state', '=', 'draft')]}"/> - <button name="invoice_open" states="draft,proforma2" string="Validate" class="oe_highlight"/> - <button name="invoice_proforma2" states="draft" string="PRO-FORMA" groups="account.group_proforma_invoices" class="oe_highlight"/> - <button name="%(action_account_invoice_refund)d" type='action' string='Refund Invoice' states='paid' /> + <button name="action_invoice_sent" type="object" string="Send by Email" states="open" attrs="{'invisible':['|',('sent','=',True), ('state', '=', 'draft')]}" class="oe_highlight"/> + <button name="invoice_print" string="Print Invoice" type="object" states="open" attrs="{'invisible':['|',('sent','=',True), ('state', '=', 'draft')]}" class="oe_highlight"/> + <button name="invoice_open" states="draft" string="Validate" class="oe_highlight"/> + <button name="invoice_open" states="proforma2" string="Validate"/> + <button name="invoice_proforma2" states="draft" string="PRO-FORMA" groups="account.group_proforma_invoices"/> + <button name="%(action_account_invoice_refund)d" type='action' string='Refund Invoice' states='paid'/> <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" groups="base.group_no_one"/> <button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object" /> <button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','<>','paid'), ('reconciled', '=', True)]}" help="This button only appears when the state of the invoice is 'paid' (showing that it has been fully reconciled) and auto-computed boolean 'reconciled' is False (depicting that it's not the case anymore). In other words, the invoice has been dereconciled and it does not fit anymore the 'paid' state. You should press this button to re-open it and let it continue its normal process after having resolved the eventual exceptions it may have created."/> @@ -339,7 +340,7 @@ <field name="tax_line" nolabel="1"> <tree editable="bottom" string="Taxes"> <field name="name"/> - <field name="account_id" groups="account.group_account_invoice"/> + <field name="account_id" groups="account.group_account_user"/> <field name="base" on_change="base_change(base,parent.currency_id,parent.company_id,parent.date_invoice)" readonly="1"/> <field name="amount" on_change="amount_change(amount,parent.currency_id,parent.company_id,parent.date_invoice)"/> <field invisible="True" name="base_amount"/> @@ -357,7 +358,7 @@ <field name="amount_tax"/> <field name="amount_total" class="oe_subtotal_footer_separator"/> - <field name="residual" style="margin-top: 10px"/> + <field name="residual" style="margin-top: 10px" groups="account.group_account_user"/> <field name="reconciled" invisible="1"/> </group> </group> @@ -482,7 +483,12 @@ <field name="domain">[('type','=','out_invoice')]</field> <field name="context">{'default_type':'out_invoice', 'type':'out_invoice', 'journal_type': 'sale'}</field> <field name="search_view_id" ref="view_account_invoice_filter"/> - <field name="help">With Customer Invoices you can create and manage sales invoices issued to your customers. OpenERP can also generate draft invoices automatically from sales orders or deliveries. You should only confirm them before sending them to your customers.</field> + <field name="help"> + Click here to create a new Invoice. + <p> + An invoice can be generated automatically from a sale order or a delivery order. + The invoice can be send by email. + </field> </record> @@ -510,7 +516,12 @@ <field name="domain">[('type','=','in_invoice')]</field> <field name="context">{'default_type': 'in_invoice', 'type': 'in_invoice', 'journal_type': 'purchase'}</field> <field name="search_view_id" ref="view_account_invoice_filter"/> - <field name="help">With Supplier Invoices you can enter and manage invoices issued by your suppliers. OpenERP can also generate draft invoices automatically from purchase orders or receipts. This way, you can control the invoice from your supplier according to what you purchased or received.</field> + <field name="help"> + Click here to create Supplier invoice. + <p> + You can control the invoice from your supplier according to what you purchased or received. + OpenERP can also generate draft invoices automatically from purchase orders or receipts. + </field> </record> <menuitem action="action_invoice_tree2" id="menu_action_invoice_tree2" parent="menu_finance_payables"/> @@ -523,7 +534,12 @@ <field name="domain">[('type','=','out_refund')]</field> <field name="context">{'default_type':'out_refund', 'type':'out_refund', 'journal_type': 'sale_refund'}</field> <field name="search_view_id" ref="view_account_invoice_filter"/> - <field name="help">With Customer Refunds you can manage the credit notes for your customers. A refund is a document that credits an invoice completely or partially. You can easily generate refunds and reconcile them directly from the invoice form.</field> + <field name="help"> + Click here to create a new customer refund. + <p> + A refund is a document that credits an invoice completely or partially. + You can also generate refunds and reconcile them directly from the invoice form. + </field> </record> <record id="action_invoice_tree3_view1" model="ir.actions.act_window.view"> @@ -549,7 +565,12 @@ <field name="domain">[('type','=','in_refund')]</field> <field name="context">{'default_type': 'in_refund', 'type': 'in_refund', 'journal_type': 'purchase_refund'}</field> <field name="search_view_id" ref="view_account_invoice_filter"/> - <field name="help">With Supplier Refunds you can manage the credit notes you receive from your suppliers. A refund is a document that credits an invoice completely or partially. You can easily generate refunds and reconcile them directly from the invoice form.</field> + <field name="help"> + Click here to create a new supplier refund. + <p> + Track refunds you receive from your suppliers. + You can also generate refunds and reconcile them directly from the invoice form. + </field> </record> <menuitem action="action_invoice_tree4" id="menu_action_invoice_tree4" parent="menu_finance_payables"/> diff --git a/addons/account/data/account_data.xml b/addons/account/data/account_data.xml index 12fd558a31f..e8899d0348a 100644 --- a/addons/account/data/account_data.xml +++ b/addons/account/data/account_data.xml @@ -555,19 +555,6 @@ <field eval="1" name="number_increment"/> </record> - <!-- - Sequence for analytic account - --> - <record id="seq_type_analytic_account" model="ir.sequence.type"> - <field name="name">Analytic account</field> - <field name="code">account.analytic.account</field> - </record> - <record id="seq_analytic_account" model="ir.sequence"> - <field name="name">Analytic account sequence</field> - <field name="code">account.analytic.account</field> - <field eval="3" name="padding"/> - <field eval="2708" name="number_next"/> - </record> <!-- Invoice requests (deprecated) diff --git a/addons/account/installer.py b/addons/account/installer.py index 6cf52f58f6c..5a2b0b346c4 100644 --- a/addons/account/installer.py +++ b/addons/account/installer.py @@ -30,11 +30,11 @@ from tools.translate import _ from osv import fields, osv import netsvc import tools +_logger = logging.getLogger(__name__) class account_installer(osv.osv_memory): _name = 'account.installer' _inherit = 'res.config.installer' - __logger = logging.getLogger(_name) def _get_charts(self, cr, uid, context=None): modules = self.pool.get('ir.module.module') @@ -149,7 +149,7 @@ class account_installer(osv.osv_memory): cr, uid, ids, context=context) chart = self.read(cr, uid, ids, ['charts'], context=context)[0]['charts'] - self.__logger.debug('Installing chart of accounts %s', chart) + _logger.debug('Installing chart of accounts %s', chart) return modules | set([chart]) account_installer() diff --git a/addons/account/project/analytic_account_demo.xml b/addons/account/project/analytic_account_demo.xml index ec89d280774..2ca0e50e784 100644 --- a/addons/account/project/analytic_account_demo.xml +++ b/addons/account/project/analytic_account_demo.xml @@ -3,102 +3,85 @@ <data noupdate="1"> <record id="analytic_root" model="account.analytic.account"> <field name="name" model="res.company" use="name" search="[]"/> - <field name="code">0</field> </record> <record id="analytic_absences" model="account.analytic.account"> <field name="name">Leaves</field> - <field name="code">1</field> <field name="type">view</field> <field name="parent_id" ref="analytic_root"/> </record> <record id="analytic_internal" model="account.analytic.account"> <field name="name">Internal</field> - <field name="code">2</field> <field name="type">view</field> <field name="parent_id" ref="analytic_root"/> </record> <record id="analytic_our_super_product" model="account.analytic.account"> <field name="name">Our Super Product</field> - <field name="code">100</field> <field name="state">open</field> <field name="type">view</field> <field name="parent_id" ref="analytic_root"/> </record> <record id="analytic_project_1" model="account.analytic.account"> <field name="name">Project 1</field> - <field name="code">101</field> <field name="type">view</field> <field name="parent_id" ref="analytic_root"/> </record> <record id="analytic_project_2" model="account.analytic.account"> <field name="name">Project 2</field> - <field name="code">102</field> <field name="type">view</field> <field name="parent_id" ref="analytic_root"/> </record> <record id="analytic_journal_trainings" model="account.analytic.account"> <field name="name">Training</field> - <field name="code">4</field> <field name="type">view</field> <field name="parent_id" ref="analytic_internal"/> </record> <record id="analytic_in_house" model="account.analytic.account"> <field name="name">In House</field> - <field name="code">1</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_journal_trainings"/> </record> <record id="analytic_online" model="account.analytic.account"> <field name="name">Online</field> - <field name="code">2</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_journal_trainings"/> </record> <record id="analytic_support" model="account.analytic.account"> <field name="name">Support</field> - <field name="code">support</field> <field name="type">view</field> <field name="parent_id" ref="analytic_our_super_product"/> </record> <record id="analytic_partners" model="account.analytic.account"> <field name="name">Partners</field> - <field name="code">partners</field> <field name="type">view</field> <field name="parent_id" ref="analytic_support"/> </record> <record id="analytic_customers" model="account.analytic.account"> <field name="name">Customers</field> - <field name="code">customers</field> <field name="type">view</field> <field name="parent_id" ref="analytic_support"/> </record> <record id="analytic_support_internal" model="account.analytic.account"> <field name="name">Internal</field> - <field name="code">3</field> - <field name="type">normal</field> + <field name="type">contract</field> <field name="parent_id" ref="analytic_support"/> </record> <record id="analytic_integration" model="account.analytic.account"> <field name="name">Integration</field> - <field name="code">integration</field> <field name="type">view</field> <field name="parent_id" ref="analytic_our_super_product"/> </record> <record id="analytic_consultancy" model="account.analytic.account"> <field name="name">Consultancy</field> - <field name="code">4</field> - <field name="type">normal</field> + <field name="type">contract</field> <field name="parent_id" ref="analytic_our_super_product"/> </record> <record id="analytic_super_product_trainings" model="account.analytic.account"> <field name="name">Training</field> - <field name="code">5</field> - <field name="type">normal</field> + <field name="type">contract</field> <field name="parent_id" ref="analytic_our_super_product"/> </record> <record id="analytic_seagate_p1" model="account.analytic.account"> <field name="name">Seagate P1</field> - <field name="code">1</field> <field name="parent_id" ref="analytic_integration"/> <field name="type">normal</field> <field name="state">open</field> @@ -106,7 +89,6 @@ </record> <record id="analytic_seagate_p2" model="account.analytic.account"> <field name="name">Seagate P2</field> - <field name="code">2</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_integration"/> <field name="state">open</field> @@ -114,14 +96,12 @@ </record> <record id="analytic_magasin_bml_1" model="account.analytic.account"> <field name="name">Magasin BML 1</field> - <field name="code">3</field> <field name="parent_id" ref="analytic_integration"/> <field name="type">normal</field> <field name="partner_id" ref="base.res_partner_15"/> </record> <record id="analytic_integration_c2c" model="account.analytic.account"> <field name="name">CampToCamp</field> - <field name="code">7</field> <field name="type">normal</field> <field eval="str(time.localtime()[0] - 1) + '-08-07'" name="date_start"/> <field eval="time.strftime('%Y-12-31')" name="date"/> @@ -131,28 +111,24 @@ </record> <record id="analytic_agrolait" model="account.analytic.account"> <field name="name">Agrolait</field> - <field name="code">3</field> <field name="parent_id" ref="analytic_customers"/> <field name="type">normal</field> <field name="partner_id" ref="base.res_partner_agrolait"/> </record> <record id="analytic_asustek" model="account.analytic.account"> <field name="name">Asustek</field> - <field name="code">4</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_customers"/> <field name="partner_id" ref="base.res_partner_asus"/> </record> <record id="analytic_distripc" model="account.analytic.account"> <field name="name">DistriPC</field> - <field name="code">7</field> <field name="parent_id" ref="analytic_customers"/> <field name="type">normal</field> <field name="partner_id" ref="base.res_partner_4"/> </record> <record id="analytic_sednacom" model="account.analytic.account"> <field name="name">Sednacom</field> - <field name="code">2</field> <field eval="str(time.localtime()[0] - 1) + '-05-09'" name="date_start"/> <field eval="time.strftime('%Y-05-08')" name="date"/> <field name="parent_id" ref="analytic_partners"/> @@ -162,7 +138,6 @@ </record> <record id="analytic_thymbra" model="account.analytic.account"> <field name="name">Thymbra</field> - <field name="code">3</field> <field eval="time.strftime('%Y-02-01')" name="date_start"/> <field eval="time.strftime('%Y-07-01')" name="date"/> <field name="type">normal</field> @@ -172,7 +147,6 @@ </record> <record id="analytic_leclerc" model="account.analytic.account"> <field name="name">Leclerc</field> - <field name="code">10</field> <field eval="time.strftime('%Y-04-24')" name="date_start"/> <field eval="str(time.localtime()[0] + 1) + '-04-24'" name="date"/> <field name="type">normal</field> @@ -181,7 +155,6 @@ </record> <record id="analytic_desertic_hispafuentes" model="account.analytic.account"> <field name="name">Desertic - Hispafuentes</field> - <field name="code">12</field> <field eval="time.strftime('%Y-02-01')" name="date_start"/> <field eval="str(time.localtime()[0] + 1) + '-02-01'" name="date"/> <field name="type">normal</field> @@ -190,14 +163,12 @@ </record> <record id="analytic_tiny_at_work" model="account.analytic.account"> <field name="name">OpenERP SA AT Work</field> - <field name="code">15</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_partners"/> <field name="partner_id" ref="base.res_partner_tinyatwork"/> </record> <record id="analytic_partners_camp_to_camp" model="account.analytic.account"> <field name="name">Camp to Camp</field> - <field name="code">21</field> <field eval="time.strftime('%Y-%m-%d', time.localtime(time.time() - 365 * 86400))" name="date_start"/> <field eval="time.strftime('%Y-%m-%d')" name="date"/> <field name="type">normal</field> @@ -207,67 +178,56 @@ </record> <record id="analytic_project_2_support" model="account.analytic.account"> <field name="name">Support</field> - <field name="code">1</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_project_2"/> </record> <record id="analytic_project_2_development" model="account.analytic.account"> <field name="name">Development</field> - <field name="code">2</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_project_2"/> </record> <record id="analytic_project_1_trainings" model="account.analytic.account"> <field name="name">Training</field> - <field name="code">1</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_project_1"/> </record> <record id="analytic_project_1_development" model="account.analytic.account"> <field name="name">Development</field> - <field name="code">2</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_project_1"/> </record> <record id="analytic_administratif" model="account.analytic.account"> <field name="name">Administrative</field> - <field name="code">1</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_internal"/> </record> <record id="analytic_commercial_marketing" model="account.analytic.account"> <field name="name">Commercial & Marketing</field> - <field name="code">2</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_internal"/> </record> <record id="analytic_our_super_product_development" model="account.analytic.account"> <field name="name">Our Super Product Development</field> - <field name="code">3</field> <field name="type">view</field> <field name="parent_id" ref="analytic_internal"/> </record> <record id="analytic_stable" model="account.analytic.account"> <field name="name">Stable</field> - <field name="code">1</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_our_super_product_development"/> </record> <record id="analytic_trunk" model="account.analytic.account"> <field name="name">Trunk</field> - <field name="code">2</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_our_super_product_development"/> </record> <record id="analytic_paid" model="account.analytic.account"> <field name="name">Paid</field> - <field name="code">1</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_absences"/> </record> <record id="analytic_unpaid" model="account.analytic.account"> <field name="name">Unpaid</field> - <field name="code">2</field> <field name="type">normal</field> <field name="parent_id" ref="analytic_absences"/> </record> diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml index 2132eecb463..7658ab111d9 100644 --- a/addons/account/project/project_view.xml +++ b/addons/account/project/project_view.xml @@ -19,6 +19,7 @@ <field name="partner_id" invisible="1"/> <field name="state" invisible="1"/> <field name="type" invisible="1"/> + <field name="company_id" groups="base.group_multi_company"/> </tree> </field> </record> @@ -59,7 +60,7 @@ <field name="field_parent">child_complete_ids</field> <field name="arch" type="xml"> <tree colors="blue:state=='pending';grey:state in ('close','cancelled');blue:type=='view'" string="Analytic account" toolbar="1"> - <field name="name"/> + <field name="complete_name"/> <field name="code"/> <field name="debit"/> <field name="credit"/> @@ -71,50 +72,11 @@ <field name="partner_id" invisible="1"/> <field name="parent_id" invisible="1"/> <field name="type"/> + <field name="company_id" groups="base.group_multi_company"/> </tree> </field> </record> - <record id="view_account_analytic_account_form" model="ir.ui.view"> - <field name="name">account.analytic.account.form</field> - <field name="model">account.analytic.account</field> - <field name="type">form</field> - <field name="arch" type="xml"> - <form string="Analytic Account" version="7.0"> - <sheet> - <group> - <group> - <field name="name" colspan="4"/> - <field name="parent_id" on_change="on_change_parent(parent_id)"/> - <field name="company_id" on_change="on_change_company(company_id)" widget="selection" groups="base.group_multi_company" attrs="{'required': [('type','<>','view')]}"/> - </group> - <group> - <field name="type"/> - <field name="code"/> - </group> - </group> - <notebook> - <page string="Account Data"> - <group> - <group string="Contacts"> - <field name="partner_id"/> - <field name="user_id"/> - </group> - <group name="contract" string="Contract Data"> - <field name="date_start"/> - <field name="date"/> - <field name="quantity_max"/> - </group> - </group> - </page> - <page string="Description"> - <field name="description"/> - </page> - </notebook> - </sheet> - </form> - </field> - </record> <record id="action_account_analytic_account_form" model="ir.actions.act_window"> <field name="name">Analytic Accounts</field> @@ -210,6 +172,7 @@ <field domain="[('type','=','normal')]" name="account_id"/> <field name="general_account_id" invisible="context.get('to_invoice', False)"/> <field name="user_id" invisible="1" /> + <field name="company_id" groups="base.group_multi_company"/> </tree> </field> </record> diff --git a/addons/account/project/report/cost_ledger.py b/addons/account/project/report/cost_ledger.py index c7423675c15..6ca17a7ac0a 100644 --- a/addons/account/project/report/cost_ledger.py +++ b/addons/account/project/report/cost_ledger.py @@ -75,10 +75,10 @@ class account_analytic_cost_ledger(report_sxw.rml_parse): return res def _account_sum_debit(self, account, date1, date2): - return self._sum_debit(self, [account], date1, date2) + return self._sum_debit([account], date1, date2) def _account_sum_credit(self, account, date1, date2): - return self._sum_credit(self, [account], date1, date2) + return self._sum_credit([account], date1, date2) def _account_sum_balance(self, account, date1, date2): debit = self._account_sum_debit(account, date1, date2) diff --git a/addons/account/report/account_general_ledger.rml b/addons/account/report/account_general_ledger.rml index 0ba4e4b6a3c..6897e15078d 100644 --- a/addons/account/report/account_general_ledger.rml +++ b/addons/account/report/account_general_ledger.rml @@ -497,7 +497,7 @@ <para style="terp_default_8">[[ strip_name(line['partner_name'],10) ]]</para> </td> <td> - <para style="terp_default_8">[[ strip_name(line['lref'],9) ]]</para> + <para style="terp_default_8">[[ line['lref'] and strip_name(line['lref'],9) ]]</para> </td> <td> <para style="terp_default_8">[[ strip_name(line['move'],9) ]]</para> @@ -590,7 +590,7 @@ <para style="terp_default_8">[[ strip_name(line['partner_name'],20) ]]</para> </td> <td> - <para style="terp_default_8">[[ strip_name(line['lref'],9) ]]</para> + <para style="terp_default_8">[[ line['lref'] and strip_name(line['lref'],9) ]]</para> </td> <td> <para style="terp_default_8">[[ strip_name(line['move'],9) ]]</para> diff --git a/addons/account/report/account_general_ledger_landscape.rml b/addons/account/report/account_general_ledger_landscape.rml index 79003c5aaa6..7ae5db98f20 100644 --- a/addons/account/report/account_general_ledger_landscape.rml +++ b/addons/account/report/account_general_ledger_landscape.rml @@ -505,7 +505,7 @@ <para style="terp_default_Bold_7_Right">[[ formatLang(sum_credit_account(o), digits=get_digits(dp='Account')) ]]</para> </td> <td> - <para style="terp_default_Bold_7_Right">[[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account'), currency = company.currency_id) ]]</para> + <para style="terp_default_Bold_7_Right">[[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account'), currency_obj= company.currency_id) ]]</para> </td> <td> <para style="terp_default_Bold_7_Right">[[ o.currency_id and formatLang(sum_currency_amount_account(o), digits=get_digits(dp='Account'),currency_obj=o.currency_id) or '' ]]</para> @@ -529,7 +529,7 @@ <para style="terp_default_7">[[ strip_name(line['partner_name'],20) ]]</para> </td> <td> - <para style="terp_default_7">[[ strip_name(line['lref'],17) ]]</para> + <para style="terp_default_7">[[ line['lref'] and strip_name(line['lref'],17) ]]</para> </td> <td> <para style="terp_default_7">[[ line['move'] ]]</para> diff --git a/addons/account/report/account_partner_ledger.rml b/addons/account/report/account_partner_ledger.rml index 8fcb41d5ca6..0d7122369c6 100644 --- a/addons/account/report/account_partner_ledger.rml +++ b/addons/account/report/account_partner_ledger.rml @@ -519,7 +519,7 @@ <para style="terp_default_8">[[ line['a_code'] ]]</para> </td> <td> - <para style="terp_default_8">[[ strip_name(line['ref'],10) ]] - [[ strip_name(line['name'],15) ]]</para> + <para style="terp_default_8">[[ line['ref'] and strip_name(line['ref'],10) ]] - [[ strip_name(line['name'],15) ]]</para> </td> <td> <para style="terp_default_Right_8">[[ formatLang((line['debit'])) ]]</para> diff --git a/addons/account/report/account_partner_ledger_other.rml b/addons/account/report/account_partner_ledger_other.rml index c61b8147a69..b878ab44e47 100644 --- a/addons/account/report/account_partner_ledger_other.rml +++ b/addons/account/report/account_partner_ledger_other.rml @@ -524,7 +524,7 @@ <para style="terp_default_8">[[ line['a_code'] ]]</para> </td> <td> - <para style="terp_default_8">[[ strip_name(line['ref'],10) ]] - [[ strip_name(line['name'],15) ]]</para> + <para style="terp_default_8">[[ line['ref'] and strip_name(line['ref'],10) ]] - [[ strip_name(line['name'],15) ]]</para> </td> <td> <para style="terp_default_Right_8">[[ formatLang((line['debit'])) ]]</para> diff --git a/addons/account/report/account_print_invoice.rml b/addons/account/report/account_print_invoice.rml index 7c5007a24fb..0d18a35b8a1 100644 --- a/addons/account/report/account_print_invoice.rml +++ b/addons/account/report/account_print_invoice.rml @@ -162,7 +162,7 @@ </td> <td> <para style="terp_default_8">[[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]</para> - <para style="terp_default_8">[[ display_address(o.partner_id,'invoice') ]]</para> + <para style="terp_default_8">[[ display_address(o.partner_id) ]]</para> <para style="terp_default_8"> <font color="white"> </font> </para> diff --git a/addons/account/wizard/account_fiscalyear_close_state.py b/addons/account/wizard/account_fiscalyear_close_state.py index 68c758eb495..2af649ba19f 100644 --- a/addons/account/wizard/account_fiscalyear_close_state.py +++ b/addons/account/wizard/account_fiscalyear_close_state.py @@ -20,6 +20,7 @@ ############################################################################## from osv import fields, osv +from tools.translate import _ class account_fiscalyear_close_state(osv.osv_memory): """ @@ -53,10 +54,6 @@ class account_fiscalyear_close_state(osv.osv_memory): cr.execute('UPDATE account_fiscalyear ' \ 'SET state = %s WHERE id = %s', ('done', fy_id)) - # Log message for Fiscalyear - fy_pool = self.pool.get('account.fiscalyear') - fy_code = fy_pool.browse(cr, uid, fy_id, context=context).code - fy_pool.log(cr, uid, fy_id, "Fiscal year '%s' is closed, no more modification allowed." % (fy_code)) return {'type': 'ir.actions.act_window_close'} account_fiscalyear_close_state() diff --git a/addons/account/wizard/account_period_close.py b/addons/account/wizard/account_period_close.py index fecf43f07ab..b2c61d9197a 100644 --- a/addons/account/wizard/account_period_close.py +++ b/addons/account/wizard/account_period_close.py @@ -53,11 +53,8 @@ class account_period_close(osv.osv_memory): cr.execute('update account_journal_period set state=%s where period_id=%s', (mode, id)) cr.execute('update account_period set state=%s where id=%s', (mode, id)) - # Log message for Period - for period_id, name in period_pool.name_get(cr, uid, [id]): - period_pool.log(cr, uid, period_id, "Period '%s' is closed, no more modification allowed for this period." % (name)) return {'type': 'ir.actions.act_window_close'} account_period_close() -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py index 20c170cb5c0..6e15fe1d5a5 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis.py +++ b/addons/account_analytic_analysis/account_analytic_analysis.py @@ -98,7 +98,7 @@ class account_analytic_account(osv.osv): WHERE account_analytic_account.id IN %s \ AND account_analytic_line.invoice_id IS NULL \ AND account_analytic_line.to_invoice IS NOT NULL \ - AND account_analytic_journal.type IN ('purchase','general') \ + AND account_analytic_journal.type = 'general' \ GROUP BY account_analytic_account.id;""", (parent_ids,)) for account_id, sum in cr.fetchall(): if account_id not in res: @@ -257,6 +257,12 @@ class account_analytic_account(osv.osv): res[id] = round(res.get(id, 0.0),2) return res + def _remaining_hours_to_invoice_calc(self, cr, uid, ids, name, arg, context=None): + res = {} + for account in self.browse(cr, uid, ids, context=context): + res[account.id] = max(account.hours_qtt_est - account.timesheet_ca_invoiced, account.ca_to_invoice) + return res + def _hours_qtt_invoiced_calc(self, cr, uid, ids, name, arg, context=None): res = {} for account in self.browse(cr, uid, ids, context=context): @@ -291,15 +297,34 @@ class account_analytic_account(osv.osv): res[id] = round(res.get(id, 0.0),2) return res + def _fix_price_to_invoice_calc(self, cr, uid, ids, name, arg, context=None): + sale_obj = self.pool.get('sale.order') + res = {} + for account in self.browse(cr, uid, ids, context=context): + res[account.id] = 0.0 + sale_ids = sale_obj.search(cr, uid, [('project_id','=', account.id), ('partner_id', '=', account.partner_id.id)], context=context) + for sale in sale_obj.browse(cr, uid, sale_ids, context=context): + if not sale.invoiced: + res[account.id] += sale.amount_untaxed + for invoice in sale.invoice_ids: + if invoice.state not in ('draft', 'cancel'): + res[account.id] -= invoice.amount_untaxed + return res + + def _timesheet_ca_invoiced_calc(self, cr, uid, ids, name, arg, context=None): + lines_obj = self.pool.get('account.analytic.line') + res = {} + for account in self.browse(cr, uid, ids, context=context): + res[account.id] = 0.0 + line_ids = lines_obj.search(cr, uid, [('account_id','=', account.id), ('invoice_id','!=',False), ('to_invoice','!=', False), ('journal_id.type', '=', 'general')], context=context) + for line in lines_obj.browse(cr, uid, line_ids, context=context): + res[account.id] += line.invoice_id.amount_untaxed + return res + def _remaining_ca_calc(self, cr, uid, ids, name, arg, context=None): res = {} for account in self.browse(cr, uid, ids, context=context): - if account.amount_max != 0: - res[account.id] = account.amount_max - account.ca_invoiced - else: - res[account.id]=0.0 - for id in ids: - res[id] = round(res.get(id, 0.0),2) + res[account.id] = max(account.amount_max - account.ca_invoiced, account.fix_price_to_invoice) return res def _real_margin_calc(self, cr, uid, ids, name, arg, context=None): @@ -333,6 +358,47 @@ class account_analytic_account(osv.osv): result.add(line.account_id.id) return list(result) + def _get_total_estimation(self, account): + tot_est = 0.0 + if account.fix_price_invoices: + tot_est += account.amount_max + if account.invoice_on_timesheets: + tot_est += account.hours_qtt_est + return tot_est + + def _get_total_invoiced(self, account): + total_invoiced = 0.0 + if account.fix_price_invoices: + total_invoiced += account.ca_invoiced + if account.invoice_on_timesheets: + total_invoiced += account.timesheet_ca_invoiced + return total_invoiced + + def _get_total_remaining(self, account): + total_remaining = 0.0 + if account.fix_price_invoices: + total_remaining += account.remaining_ca + if account.invoice_on_timesheets: + total_remaining += account.remaining_hours_to_invoice + return total_remaining + + def _get_total_toinvoice(self, account): + total_toinvoice = 0.0 + if account.fix_price_invoices: + total_toinvoice += account.fix_price_to_invoice + if account.invoice_on_timesheets: + total_toinvoice += account.ca_to_invoice + return total_toinvoice + + def _sum_of_fields(self, cr, uid, ids, name, arg, context=None): + res = dict([(i, {}) for i in ids]) + for account in self.browse(cr, uid, ids, context=context): + res[account.id]['est_total'] = self._get_total_estimation(account) + res[account.id]['invoiced_total'] = self._get_total_invoiced(account) + res[account.id]['remaining_total'] = self._get_total_remaining(account) + res[account.id]['toinvoice_total'] = self._get_total_toinvoice(account) + return res + _columns = { 'is_overdue_quantity' : fields.function(_is_overdue_quantity, method=True, type='boolean', string='Overdue Quantity', store={ @@ -350,7 +416,7 @@ class account_analytic_account(osv.osv): 'ca_theorical': fields.function(_analysis_all, multi='analytic_analysis', type='float', string='Theoretical Revenue', help="Based on the costs you had on the project, what would have been the revenue if all these costs have been invoiced at the normal sale price provided by the pricelist.", digits_compute=dp.get_precision('Account')), - 'hours_quantity': fields.function(_analysis_all, multi='analytic_analysis', type='float', string='Total Time', + 'hours_quantity': fields.function(_analysis_all, multi='analytic_analysis', type='float', string='Total Worked Time', help="Number of time you spent on the analytic account (from timesheet). It computes quantities on all journal of type 'general'."), 'last_invoice_date': fields.function(_analysis_all, multi='analytic_analysis', type='date', string='Last Invoice Date', help="If invoice from the costs, this is the date of the latest invoiced."), @@ -363,7 +429,13 @@ class account_analytic_account(osv.osv): 'hours_qtt_invoiced': fields.function(_hours_qtt_invoiced_calc, type='float', string='Invoiced Time', help="Number of time (hours/days) that can be invoiced plus those that already have been invoiced."), 'remaining_hours': fields.function(_remaining_hours_calc, type='float', string='Remaining Time', - help="Computed using the formula: Maximum Time - Total Time"), + help="Computed using the formula: Maximum Time - Total Worked Time"), + 'remaining_hours_to_invoice': fields.function(_remaining_hours_to_invoice_calc, type='float', string='Remaining Time', + help="Computed using the formula: Maximum Time - Total Invoiced Time"), + 'fix_price_to_invoice': fields.function(_fix_price_to_invoice_calc, type='float', string='Remaining Time', + help="Sum of quotations for this contract."), + 'timesheet_ca_invoiced': fields.function(_timesheet_ca_invoiced_calc, type='float', string='Remaining Time', + help="Sum of timesheet lines invoiced for this contract."), 'remaining_ca': fields.function(_remaining_ca_calc, type='float', string='Remaining Revenue', help="Computed using the formula: Max Invoice Price - Invoiced Amount.", digits_compute=dp.get_precision('Account')), @@ -379,10 +451,51 @@ class account_analytic_account(osv.osv): 'real_margin_rate': fields.function(_real_margin_rate_calc, type='float', string='Real Margin Rate (%)', help="Computes using the formula: (Real Margin / Total Costs) * 100.", digits_compute=dp.get_precision('Account')), + 'fix_price_invoices' : fields.boolean('Fix Price Invoices'), + 'invoice_on_timesheets' : fields.boolean("Invoice On Timesheets"), 'month_ids': fields.function(_analysis_all, multi='analytic_analysis', type='many2many', relation='account_analytic_analysis.summary.month', string='Month'), 'user_ids': fields.function(_analysis_all, multi='analytic_analysis', type="many2many", relation='account_analytic_analysis.summary.user', string='User'), + 'template_id': fields.many2one('account.analytic.account', 'Template of Contract'), + 'hours_qtt_est': fields.float('Estimation of Hours to Invoice'), + 'est_total' : fields.function(_sum_of_fields, type="float",multi="sum_of_all", string="Total Estimation"), + 'invoiced_total' : fields.function(_sum_of_fields, type="float",multi="sum_of_all", string="Total Invoiced"), + 'remaining_total' : fields.function(_sum_of_fields, type="float",multi="sum_of_all", string="Total Remaining", help="Expectation of remaining income for this contract. Computed as the sum of remaining subtotals which, in turn, are computed as the maximum between '(Estimation - Invoiced)' and 'To Invoice' amounts"), + 'toinvoice_total' : fields.function(_sum_of_fields, type="float",multi="sum_of_all", string="Total to Invoice", help=" Sum of everything that could be invoiced for this contract."), } + def open_sale_order_lines(self,cr,uid,ids,context=None): + if context is None: + context = {} + sale_ids = self.pool.get('sale.order').search(cr,uid,[('project_id','=',context.get('search_default_project_id',False)),('partner_id','=',context.get('search_default_partner_id',False))]) + names = [record.name for record in self.browse(cr, uid, ids, context=context)] + name = _('Sale Order Lines of %s') % ','.join(names) + return { + 'type': 'ir.actions.act_window', + 'name': name, + 'view_type': 'form', + 'view_mode': 'tree,form', + 'context': context, + 'domain' : [('order_id','in',sale_ids)], + 'res_model': 'sale.order.line', + 'nodestroy': True, + } + + def on_change_template(self, cr, uid, ids, template_id, context=None): + if not template_id: + return {} + res = {'value':{}} + template = self.browse(cr, uid, template_id, context=context) + res['value']['date_start'] = template.date_start + res['value']['date'] = template.date + res['value']['fix_price_invoices'] = template.fix_price_invoices + res['value']['invoice_on_timesheets'] = template.invoice_on_timesheets + res['value']['quantity_max'] = template.quantity_max + res['value']['hours_qtt_est'] = template.hours_qtt_est + res['value']['amount_max'] = template.amount_max + res['value']['to_invoice'] = template.to_invoice.id + res['value']['pricelist_id'] = template.pricelist_id.id + res['value']['description'] = template.description + return res account_analytic_account() class account_analytic_account_summary_user(osv.osv): diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml index cf939c2ccfa..c3ac5f5b71c 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml @@ -58,8 +58,8 @@ <field name="res_model">account.analytic.account</field> <field name="view_type">form</field> <field name="view_mode">tree,form,graph</field> - <field name="context">{'search_default_has_partner':1, 'search_default_user_id':uid, 'search_default_draft':1, 'search_default_pending':1, 'search_default_open':1, 'search_default_renew':1}</field> - <field name="domain">[('type','=','normal')]</field> + <field name="context">{'search_default_user_id':uid, 'search_default_draft':1, 'search_default_pending':1, 'search_default_open':1, 'search_default_renew':1}</field> + <field name="domain">[('type','=','contract')]</field> <field name="search_view_id" ref="view_account_analytic_account_overdue_search"/> <field name="help">You will find here the contracts to be renewed because the deadline is passed or the working hours are higher than the allocated hours. OpenERP automatically sets these analytic accounts to the pending state, in order to raise a warning during the timesheets recording. Salesmen should review all pending accounts and reopen or close the according to the negotiation with the customer.</field> </record> @@ -70,8 +70,8 @@ <field name="res_model">account.analytic.account</field> <field name="view_type">form</field> <field name="view_mode">tree,form,graph</field> - <field name="context">{'search_default_has_partner':1, 'search_default_user_id':uid, 'search_default_draft':1, 'search_default_pending':1, 'search_default_open':1}</field> - <field name="domain">[('type','=','normal')]</field> + <field name="context">{'default_type':'contract'}</field> + <field name="domain">[('type','=','contract')]</field> <field name="search_view_id" ref="view_account_analytic_account_overdue_search"/> </record> <menuitem id="base.menu_sales" name="Sales" diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml index cd99299665b..ead87c176e3 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml @@ -4,97 +4,99 @@ <!-- Analytic Account form - - Remove information on Account data => because they move on analysis sheet - create a page with invoicing informations --> - <record id="account_analytic_account_invoice_stat_form" model="ir.ui.view"> - <field name="name">account.analytic.account.invoice.stat.form.inherit</field> - <field name="model">account.analytic.account</field> - <field name="type">form</field> - <field name="inherit_id" ref="hr_timesheet_invoice.account_analytic_account_form_form"/> - <field eval="18" name="priority"/> - <field name="arch" type="xml"> - <group name="invoice_stats" position="inside"> - <field name="hours_qtt_non_invoiced" attrs="{'invisible': [('to_invoice','=',0)]}"/> - <field name="ca_to_invoice" attrs="{'invisible': [('to_invoice','=',0)]}"/> - <label string="" colspan="1"/> - <button - name="%(hr_timesheet_invoice.action_hr_timesheet_invoice_create_final)d" - string="Create Invoice" - type="action" - attrs="{'readonly':[('ca_to_invoice','=',0.0)], 'invisible': [('to_invoice','=',0)]}" - icon="gtk-go-forward"/> - </group> - </field> - </record> + + <act_window + id="action_sales_order" + name="Sales Orders" + res_model="sale.order" + src_model="account.analytic.account" + /> <record id="account_analytic_account_form_form" model="ir.ui.view"> <field name="name">account.analytic.account.invoice.form.inherit</field> <field name="model">account.analytic.account</field> <field name="type">form</field> - <field name="inherit_id" ref="account.view_account_analytic_account_form"/> - <field eval="18" name="priority"/> + <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/> + <field eval="40" name="priority"/> <field name="arch" type="xml"> - <notebook position="inside"> - <page string="Invoice Analysis"> - <separator colspan="4" string="Work Done Stats"/> - - <field name="total_cost"/> - <field name="remaining_ca"/> - <field name="ca_invoiced"/> - <field name="ca_theorical"/> - <newline/> - <field name="hours_quantity"/> - <field name="hours_qtt_invoiced"/> - <field name="remaining_hours"/> - <newline/> - <separator colspan="4" string="Analysis Stats"/> - - <field name="revenue_per_hour"/> - <field name="real_margin"/> - <field name="real_margin_rate"/> - <field name="theorical_margin"/> - <separator colspan="4" string="Key Dates"/> - - <field name="last_invoice_date"/> - <field name="last_worked_invoiced_date"/> - <field name="last_worked_date"/> - </page> - <page string="Stats by month"> - <field colspan="4" name="month_ids" nolabel="1"> - <tree string="Month"> - <field name="month"/> - <field name="unit_amount" widget="float_time"/> - </tree> - </field> - </page> - <page string="Stats by user"> - <field colspan="4" name="user_ids" nolabel="1"> - <tree string="Users"> - <field name="user"/> - <field name="unit_amount" widget="float_time"/> - </tree> - </field> - </page> - </notebook> - - </field> - </record> - - <!-- Add information on Account analytic list for the project management --> - <record id="view_account_analytic_account_tree_c2c_2" model="ir.ui.view"> - <field name="name">account.analytic.account.tree</field> - <field name="model">account.analytic.account</field> - <field name="inherit_id" ref="account.view_account_analytic_account_list"/> - <field name="type">tree</field> - <field name="arch" type="xml"> - <field name="quantity" position="replace"> - <field name="hours_quantity"/> - <field name="hours_qtt_non_invoiced"/> - <field name="remaining_hours"/> - <field name="quantity_max"/> - </field> + <xpath expr='//field[@name="type"]' position='after'> + <field name="template_id" on_change="on_change_template(template_id,context)" domain="[('type','=','template')]" attrs="{'invisible': [('type','in',['view', 'normal','template'])]}" context="{'default_type' : 'template'}"/> + </xpath> + <xpath expr='//div[@name="duration"]' position="after" version="7.0"> + <label for="quantity_max"/> + <div> + <field name="quantity_max" class="oe_inline"/> / Remaining: <field name="remaining_hours" class="oe_inline"/> + </div> + </xpath> + <xpath expr='//group[@name="invoice_on_timesheets"]' position="replace"> + <group name='invoice_on_timesheets' string="Invoice on Timesheets Options" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}" col="4"> + <field name="pricelist_id" attrs="{'required': [('invoice_on_timesheets', '=', True)]}"/> + <field name="to_invoice" widget="selection" attrs="{'required': [('invoice_on_timesheets', '=', True)]}"/> + </group> + </xpath> + <xpath expr='//group[@name="master"]' position='after'> + <separator name="toinvoice" string="Invoicing"/> + <table width="100%%"> + <tr> + <th></th> + <th></th> + <th><label string="Est.Tot"/></th> + <th><label string="Invoiced"/></th> + <th><label string="Remaining"/></th> + <th><label string="To Invoice"/></th> + <th></th> + </tr><tr> + <td> + <label for="fix_price_invoices"/> + </td><td> + <field name="fix_price_invoices" class="oe_inline"/> + </td><td> + <field class="oe_inline" name="amount_max" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + </td><td> + <field class="oe_inline" name="ca_invoiced" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + </td><td> + <field class="oe_inline" name="remaining_ca" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + </td><td> + <field class="oe_inline" name="fix_price_to_invoice" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + </td><td> + <button name="%(action_sales_order)d" string="All Sales" type="action" context="{'default_partner_id': [partner_id], 'search_default_partner_id': [partner_id],'search_default_project_id': [active_id],'default_project_id': [active_id]}" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + <button name="open_sale_order_lines" string="Lines To Invoice" type="object" context="{'default_partner_id': [partner_id],'default_project_id': active_id,'search_default_uninvoiced': 1,'search_default_project_id': active_id,'search_default_partner_id': [partner_id]}" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + </td> + </tr><tr attrs="{'invisible':[('use_timesheets','=',False)]}"> + <td> + <label for="invoice_on_timesheets"/> + </td><td> + <field name="invoice_on_timesheets"/> + </td><td> + <field class="oe_inline" name="hours_qtt_est" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td><td> + <field class="oe_inline" name="timesheet_ca_invoiced" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td><td> + <field class="oe_inline" name="remaining_hours_to_invoice" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td><td> + <field class="oe_inline" name="ca_to_invoice" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td><td> + <button name="%(hr_timesheet.act_hr_timesheet_line_evry1_all_form)d" string="All Timesheets" type="action" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}" context="{'default_account_id': active_id,'search_default_account_id': active_id}"/> + <button name="%(hr_timesheet_invoice.act_acc_analytic_acc_2_report_acc_analytic_line_to_invoice)d" string="Timesheets to Invoice" type="action" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td> + </tr><tr name='total'> + <th> + <label string="Total"/> + </th><td> + </td><td> + <field name="est_total" class="oe_inline" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td><td> + <field name="invoiced_total" class="oe_inline"/> + </td><td> + <field name="remaining_total" class="oe_inline"/> + </td><td> + <field name="toinvoice_total" class="oe_inline"/> + </td><td> + </td> + </tr> + </table> + </xpath> </field> </record> @@ -106,10 +108,20 @@ <field name="arch" type="xml"> <field name="date" position="before"> <field name="last_invoice_date"/> - <field name="ca_to_invoice"/> + <field name="toinvoice_total"/> </field> </field> </record> + <record id="template_of_contract_action" model="ir.actions.act_window"> + <field name="name">Template of Contract</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">account.analytic.account</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="domain">[('type','=','template')]</field> + <field name="context">{'search_default_type':'template','default_type' : 'template'}</field> + </record> + <menuitem action="template_of_contract_action" id="menu_template_of_contract_action" parent="base.menu_base_config"/> </data> </openerp> diff --git a/addons/account_analytic_plans/report/crossovered_analytic.py b/addons/account_analytic_plans/report/crossovered_analytic.py index e2ad9e05b04..3e8eec81c55 100644 --- a/addons/account_analytic_plans/report/crossovered_analytic.py +++ b/addons/account_analytic_plans/report/crossovered_analytic.py @@ -109,7 +109,6 @@ class crossovered_analytic(report_sxw.rml_parse): res['ref_qty'] = info[0]['qty'] res['ref_amt'] = info[0]['amt'] self.base_amount = info[0]['amt'] - result.append(res) return result diff --git a/addons/account_analytic_plans/report/crossovered_analytic.rml b/addons/account_analytic_plans/report/crossovered_analytic.rml index 766fb9f0d0d..48e7c13b0a1 100644 --- a/addons/account_analytic_plans/report/crossovered_analytic.rml +++ b/addons/account_analytic_plans/report/crossovered_analytic.rml @@ -237,10 +237,10 @@ <para style="terp_default_Centre_9">[[ a['ref_code'] ]]</para> </td> <td> - <para style="terp_default_Right_9">[[ formatLang(a['ref_qty']) ]]</para> + <para style="terp_default_Right_9">[[ a['ref_qty'] and formatLang(a['ref_qty']) ]]</para> </td> <td> - <para style="terp_default_Right_9">[[ formatLang(a['ref_amt'], currency_obj=company.currency_id) ]]</para> + <para style="terp_default_Right_9">[[ a['ref_amt'] and formatLang(a['ref_amt'], currency_obj=company.currency_id) ]]</para> </td> <td> <para style="terp_default_Right_9">100.00%</para> diff --git a/addons/account_bank_statement_extensions/account_bank_statement.py b/addons/account_bank_statement_extensions/account_bank_statement.py index d42e188679a..29b4c4fdb84 100644 --- a/addons/account_bank_statement_extensions/account_bank_statement.py +++ b/addons/account_bank_statement_extensions/account_bank_statement.py @@ -23,7 +23,6 @@ import time from osv import osv, fields import decimal_precision as dp -import netsvc from tools.translate import _ class account_bank_statement(osv.osv): diff --git a/addons/account_bank_statement_extensions/report/bank_statement_balance_report.py b/addons/account_bank_statement_extensions/report/bank_statement_balance_report.py index 8e1e4b09e47..5dcaafe4845 100644 --- a/addons/account_bank_statement_extensions/report/bank_statement_balance_report.py +++ b/addons/account_bank_statement_extensions/report/bank_statement_balance_report.py @@ -23,13 +23,13 @@ import time from report import report_sxw import pooler -import netsvc -logger=netsvc.Logger() +import logging +_logger = logging.getLogger(__name__) class bank_statement_balance_report(report_sxw.rml_parse): def set_context(self, objects, data, ids, report_type=None): - #logger.notifyChannel('addons.'+__name__, netsvc.LOG_WARNING, 'set_context, objects = %s, data = %s, ids = %s' % (objects, data, ids)) + #_logger.warning('addons.'+__name__, 'set_context, objects = %s, data = %s, ids = %s' % (objects, data, ids)) cr = self.cr uid = self.uid context = self.context diff --git a/addons/account_budget/account_budget_view.xml b/addons/account_budget/account_budget_view.xml index ffaf48b74c1..cc231b82183 100644 --- a/addons/account_budget/account_budget_view.xml +++ b/addons/account_budget/account_budget_view.xml @@ -274,7 +274,7 @@ <field name="name">account.analytic.account.form.inherot.budget</field> <field name="type">form</field> <field name="model">account.analytic.account</field> - <field name="inherit_id" ref="account.view_account_analytic_account_form"/> + <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/> <field name="arch" type="xml"> <notebook position="inside"> <page string="Budget Lines"> diff --git a/addons/account_cancel/account_cancel_view.xml b/addons/account_cancel/account_cancel_view.xml index 6a214fa56dd..9bf37134920 100644 --- a/addons/account_cancel/account_cancel_view.xml +++ b/addons/account_cancel/account_cancel_view.xml @@ -20,7 +20,7 @@ <field name="inherit_id" ref="account.invoice_form"/> <field name="arch" type="xml"> <xpath expr="//button[@name='invoice_cancel']" position="replace"> - <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel" groups="account.group_account_invoice"/> + <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" groups="account.group_account_invoice"/> </xpath> </field> </record> @@ -32,7 +32,7 @@ <field name="inherit_id" ref="account.invoice_supplier_form"/> <field name="arch" type="xml"> <xpath expr="//button[@name='invoice_cancel']" position="replace"> - <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel" groups="account.group_account_invoice"/> + <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" groups="account.group_account_invoice"/> </xpath> </field> </record> diff --git a/addons/account_coda/account_coda.py b/addons/account_coda/account_coda.py index e3cc6f40a0c..36700c97b84 100644 --- a/addons/account_coda/account_coda.py +++ b/addons/account_coda/account_coda.py @@ -22,9 +22,7 @@ from osv import osv, fields import decimal_precision as dp -import netsvc from tools.translate import _ -logger=netsvc.Logger() class coda_bank_account(osv.osv): _name= 'coda.bank.account' diff --git a/addons/account_coda/wizard/account_coda_import.py b/addons/account_coda/wizard/account_coda_import.py index c49eb9f1dbd..daa8bbd1026 100644 --- a/addons/account_coda/wizard/account_coda_import.py +++ b/addons/account_coda/wizard/account_coda_import.py @@ -24,11 +24,11 @@ import time import base64 from osv import fields,osv from tools.translate import _ -import netsvc +import logging import re from traceback import format_exception from sys import exc_info -logger=netsvc.Logger() +_logger = logging.getLogger(__name__) class account_coda_import(osv.osv_memory): _name = 'account.coda.import' @@ -816,7 +816,7 @@ class account_coda_import(osv.osv_memory): ttype = line['type'] == 'supplier' and 'payment' or 'receipt', date = line['val_date'], context = context) - #logger.notifyChannel('addons.'+self._name, netsvc.LOG_WARNING, 'voucher_dict = %s' % voucher_dict) + #_logger.warning('voucher_dict = %s' % voucher_dict) voucher_line_vals = False if voucher_dict['value']['line_ids']: for line_dict in voucher_dict['value']['line_ids']: @@ -889,22 +889,19 @@ class account_coda_import(osv.osv_memory): nb_err += 1 err_string += _('\nError ! ') + str(e) tb = ''.join(format_exception(*exc_info())) - logger.notifyChannel('addons.'+self._name, netsvc.LOG_ERROR, - 'Application Error while processing Statement %s\n%s' % (statement.get('name', '/'),tb)) + _logger.error('Application Error while processing Statement %s\n%s' % (statement.get('name', '/'),tb)) except Exception, e: cr.rollback() nb_err += 1 err_string += _('\nSystem Error : ') + str(e) tb = ''.join(format_exception(*exc_info())) - logger.notifyChannel('addons.'+self._name, netsvc.LOG_ERROR, - 'System Error while processing Statement %s\n%s' % (statement.get('name', '/'),tb)) + _logger.error('System Error while processing Statement %s\n%s' % (statement.get('name', '/'),tb)) except : cr.rollback() nb_err += 1 err_string = _('\nUnknown Error : ') + str(e) tb = ''.join(format_exception(*exc_info())) - logger.notifyChannel('addons.'+self._name, netsvc.LOG_ERROR, - 'Unknown Error while processing Statement %s\n%s' % (statement.get('name', '/'),tb)) + _logger.error('Unknown Error while processing Statement %s\n%s' % (statement.get('name', '/'),tb)) # end 'for statement in coda_statements' diff --git a/addons/account_invoice_layout/report/report_account_invoice_layout.rml b/addons/account_invoice_layout/report/report_account_invoice_layout.rml index 79bce6248d3..f2539e6d444 100644 --- a/addons/account_invoice_layout/report/report_account_invoice_layout.rml +++ b/addons/account_invoice_layout/report/report_account_invoice_layout.rml @@ -193,7 +193,7 @@ </td> <td> <para style="terp_default_8">[[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]</para> - <para style="terp_default_8">[[ display_address(o.partner_id, 'invoice') ]]</para> + <para style="terp_default_8">[[ display_address(o.partner_id) ]]</para> <para style="terp_default_8"> <font color="white"> </font> </para> diff --git a/addons/account_invoice_layout/report/special_message_invoice.rml b/addons/account_invoice_layout/report/special_message_invoice.rml index 84049b18f0a..8bfcfd17654 100644 --- a/addons/account_invoice_layout/report/special_message_invoice.rml +++ b/addons/account_invoice_layout/report/special_message_invoice.rml @@ -197,7 +197,7 @@ </td> <td> <para style="terp_default_8">[[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]</para> - <para style="terp_default_8">[[ display_address(o.partner_id, 'invoice') ]]</para> + <para style="terp_default_8">[[ display_address(o.partner_id) ]]</para> <para style="terp_default_8"> <font color="white"> </font> </para> diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 9ca30aed099..2cefaf15f0e 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -250,6 +250,7 @@ class account_voucher(osv.osv): _name = 'account.voucher' _description = 'Accounting Voucher' + _inherit = ['mail.thread'] _order = "date desc, id desc" # _rec_name = 'number' _columns = { @@ -323,7 +324,7 @@ class account_voucher(osv.osv): 'amount': _get_amount, 'type':_get_type, 'state': 'draft', - 'pay_now': 'pay_later', + 'pay_now': 'pay_now', 'name': '', 'date': lambda *a: time.strftime('%Y-%m-%d'), 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.voucher',context=c), @@ -334,6 +335,11 @@ class account_voucher(osv.osv): 'payment_rate_currency_id': _get_payment_rate_currency, } + def create(self, cr, uid, vals, context=None): + voucher = super(account_voucher, self).create(cr, uid, vals, context=context) + self.create_send_note(cr, uid, [voucher], context=context) + return voucher + def compute_tax(self, cr, uid, ids, context=None): tax_pool = self.pool.get('account.tax') partner_pool = self.pool.get('res.partner') @@ -556,7 +562,7 @@ class account_voucher(osv.osv): @return: Returns a dict which contains new values, and context """ def _remove_noise_in_o2m(): - """if the line is partially reconciled, then we must pay attention to display it only once and + """if the line is partially reconciled, then we must pay attention to display it only once and in the good o2m. This function returns True if the line is considered as noise and should not be displayed """ @@ -1249,12 +1255,16 @@ class account_voucher(osv.osv): 'state': 'posted', 'number': name, }) + self.post_send_note(cr, uid, [voucher.id], context=context) if voucher.journal_id.entry_posted: move_pool.post(cr, uid, [move_id], context={}) # We automatically reconcile the account move lines. + reconcile = False for rec_ids in rec_list_ids: if len(rec_ids) >= 2: - move_line_pool.reconcile_partial(cr, uid, rec_ids, writeoff_acc_id=voucher.writeoff_acc_id.id, writeoff_period_id=voucher.period_id.id, writeoff_journal_id=voucher.journal_id.id) + reconcile = move_line_pool.reconcile_partial(cr, uid, rec_ids, writeoff_acc_id=voucher.writeoff_acc_id.id, writeoff_period_id=voucher.period_id.id, writeoff_journal_id=voucher.journal_id.id) + if reconcile: + self.reconcile_send_note(cr, uid, [voucher.id], context=context) return True def copy(self, cr, uid, id, default={}, context=None): @@ -1270,6 +1280,32 @@ class account_voucher(osv.osv): default['date'] = time.strftime('%Y-%m-%d') return super(account_voucher, self).copy(cr, uid, id, default, context) + # ----------------------------------------- + # OpenChatter notifications and need_action + # ----------------------------------------- + _document_type = { + 'sale': 'Sales Receipt', + 'purchase': 'Purchase Receipt', + 'payment': 'Supplier Payment', + 'receipt': 'Customer Payment', + False: 'Payment', + } + + def create_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + message = "%s <b>created</b>." % self._document_type[obj.type or False] + self.message_append_note(cr, uid, [obj.id], body=message, context=context) + + def post_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + message = "%s '%s' is <b>posted</b>." % (self._document_type[obj.type or False], obj.move_id.name) + self.message_append_note(cr, uid, [obj.id], body=message, context=context) + + def reconcile_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + message = "%s <b>reconciled</b>." % self._document_type[obj.type or False] + self.message_append_note(cr, uid, [obj.id], body=message, context=context) + account_voucher() class account_voucher_line(osv.osv): diff --git a/addons/account_voucher/account_voucher_pay_invoice.xml b/addons/account_voucher/account_voucher_pay_invoice.xml index d50f6fef864..c6128c4e619 100644 --- a/addons/account_voucher/account_voucher_pay_invoice.xml +++ b/addons/account_voucher/account_voucher_pay_invoice.xml @@ -2,15 +2,18 @@ <openerp> <data> <record id="view_invoice_customer" model="ir.ui.view"> - <field name="name">account.invoice.customer.pay</field> - <field name="model">account.invoice</field> - <field name="type">form</field> - <field name="inherit_id" ref="account.invoice_form"/> - <field name="arch" type="xml"> - <button name="invoice_open" position="after"> - <button name="invoice_pay_customer" type="object" class="oe_highlight" string="Register Payment" states="open" icon="gtk-go-forward"/> - </button> - </field> + <field name="name">account.invoice.customer.pay</field> + <field name="model">account.invoice</field> + <field name="type">form</field> + <field name="inherit_id" ref="account.invoice_form"/> + <field name="arch" type="xml"> + <xpath expr="//button[@name='invoice_open'][last()]" position="after"> + <button name="invoice_pay_customer" type="object" string="Register Payment" + attrs="{'invisible': ['|', ('state','!=','open'), ('sent','=',True)]}"/> + <button name="invoice_pay_customer" type="object" string="Register Payment" + attrs="{'invisible': ['|', ('state','!=','open'), ('sent','=',False)]}" class="oe_highlight"/> + </xpath> + </field> </record> <record id="view_invoice_supplier" model="ir.ui.view"> <field name="name">account.invoice.supplier.pay</field> @@ -18,9 +21,9 @@ <field name="type">form</field> <field name="inherit_id" ref="account.invoice_supplier_form"/> <field name="arch" type="xml"> - <button name="invoice_open" position="after"> - <button name="invoice_pay_customer" type="object" string="Pay" states="open" icon="gtk-go-forward" class="oe_highlight"/> - </button> + <xpath expr="//button[@name='invoice_open'][last()]" position="after"> + <button name="invoice_pay_customer" type="object" string="Pay" states="open" class="oe_highlight"/> + </xpath> </field> </record> </data> diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml index 0c3624b1daf..5f12eb080b3 100644 --- a/addons/account_voucher/account_voucher_view.xml +++ b/addons/account_voucher/account_voucher_view.xml @@ -11,7 +11,7 @@ <field name="number"/> <field name="reference"/> <field name="partner_id"/> - <field name="journal_id"/> + <field name="journal_id" groups="account.group_account_user"/> <field name="period_id" invisible="context.get('visible', True)"/> <field name="type" invisible="context.get('visible', True)"/> <field name="amount" sum="Total Amount"/> @@ -110,7 +110,10 @@ </field> </page> </notebook> - </sheet> + </sheet> + <footer> + <field name="message_ids" widget="ThreadView"/> + </footer> </form> </field> </record> diff --git a/addons/account_voucher/report/account_voucher.py b/addons/account_voucher/report/account_voucher.py index e44adee974e..146fcbc258a 100644 --- a/addons/account_voucher/report/account_voucher.py +++ b/addons/account_voucher/report/account_voucher.py @@ -72,4 +72,4 @@ report_sxw.report_sxw( parser=report_voucher,header="external" ) -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_voucher/report/account_voucher_print.py b/addons/account_voucher/report/account_voucher_print.py index 8bd8644c03c..6a5762be493 100644 --- a/addons/account_voucher/report/account_voucher_print.py +++ b/addons/account_voucher/report/account_voucher_print.py @@ -93,4 +93,4 @@ report_sxw.report_sxw( parser=report_voucher_print,header="external" ) -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index fa22a1b43ad..91e0bad848c 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -183,8 +183,8 @@ <field name="date_original" readonly="1"/> <field name="date_due" readonly="1"/> <field name="amount_original" readonly="1"/> - <field name="amount_unreconciled" readonly="1"/> - <field name="reconcile" on_change="onchange_reconcile(reconcile, amount, amount_unreconciled, context)"/> + <field name="amount_unreconciled" readonly="1" groups="account.group_account_user"/> + <field name="reconcile" on_change="onchange_reconcile(reconcile, amount, amount_unreconciled, context)" groups="account.group_account_user"/> <field name="amount" sum="Total Allocation" on_change="onchange_amount(amount, amount_unreconciled, context)"/> </tree> </field> @@ -199,8 +199,8 @@ <field name="date_original" readonly="1"/> <field name="date_due" readonly="1"/> <field name="amount_original" readonly="1"/> - <field name="amount_unreconciled" readonly="1"/> - <field name="reconcile" on_change="onchange_reconcile(reconcile, amount, amount_unreconciled, context)"/> + <field name="amount_unreconciled" readonly="1" groups="account.group_account_user"/> + <field name="reconcile" on_change="onchange_reconcile(reconcile, amount, amount_unreconciled, context)" groups="account.group_account_user"/> <field name="amount" sum="Total Allocation" on_change="onchange_amount(amount, amount_unreconciled, context)"/> </tree> </field> @@ -257,6 +257,9 @@ </page> </notebook> </sheet> + <footer> + <field name="message_ids" widget="ThreadView"/> + </footer> </form> </field> </record> @@ -270,7 +273,9 @@ <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">The supplier payment form allows you to track the payment you do to your suppliers. When you select a supplier, the payment method and an amount for the payment, OpenERP will propose to reconcile your payment with the open supplier invoices or bills.</field> + <field name="help">Click on "Create" to register a supplier payment. + <p> + Track payments you do to your supplier and amounts you pay.</field> </record> <record id="action_vendor_payment_tree" model="ir.actions.act_window.view"> <field eval="1" name="sequence"/> @@ -425,6 +430,9 @@ </page> </notebook> </sheet> + <footer> + <field name="message_ids" widget="ThreadView"/> + </footer> </form> </field> </record> @@ -438,7 +446,11 @@ <field name="search_view_id" ref="view_voucher_filter_customer_pay"/> <field name="view_id" eval="False"/> <field name="target">current</field> - <field name="help">Sales payment allows you to register the payments you receive from your customers. In order to record a payment, you must enter the customer, the payment method (=the journal) and the payment amount. OpenERP will propose to you automatically the reconciliation of this payment with the open invoices or sales receipts.</field> + <field name="help"> + Click on create to register a payment. + <p> + Enter the customer and the payment method and then, either create manually a payment record or OpenERP will propose to you automatically the reconciliation of this payment with the open invoices or sales receipts. + </field> </record> <record id="action_vendor_receipt_tree" model="ir.actions.act_window.view"> <field eval="1" name="sequence"/> diff --git a/addons/account_voucher/voucher_sales_purchase_view.xml b/addons/account_voucher/voucher_sales_purchase_view.xml index 1bee7ac17da..8499e7feab2 100644 --- a/addons/account_voucher/voucher_sales_purchase_view.xml +++ b/addons/account_voucher/voucher_sales_purchase_view.xml @@ -119,7 +119,7 @@ <page string="Sales Information"> <field name="line_cr_ids" on_change="onchange_price(line_cr_ids, tax_id, partner_id)" context="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}"> <tree string="Sales Lines" editable="bottom"> - <field name="account_id" domain="[('user_type.report_type','=','income'),('type','!=','view')]" widget="selection"/> + <field name="account_id" domain="[('user_type.report_type','=','income'),('type','!=','view')]" widget="selection" groups="account.group_account_user"/> <field name="name"/> <field name="amount" sum="Total"/> <field name="account_analytic_id" groups="analytic.group_analytic_accounting"/> @@ -167,6 +167,9 @@ </page> </notebook> </sheet> + <footer> + <field name="message_ids" widget="ThreadView"/> + </footer> </form> </field> </record> @@ -181,7 +184,11 @@ <field name="view_id" eval="False"/> <field name="search_view_id" ref="view_voucher_filter_sale"/> <field name="target">current</field> - <field name="help">When you sell products to a customer, you can give him a sales receipt or an invoice. When the sales receipt is confirmed, it creates journal items automatically and you can record the customer payment related to this sales receipt.</field> + <field name="help"> + Click here to create a sale receipt. + <p> + When the sales receipt is confirmed, you can record the customer payment related to this sales receipt. + </field> </record> <record id="action_sale_receipt_tree" model="ir.actions.act_window.view"> <field eval="1" name="sequence"/> @@ -259,7 +266,7 @@ <page string="Bill Information"> <field name="line_dr_ids" on_change="onchange_price(line_dr_ids, tax_id, partner_id)" context="{'journal_id':journal_id,'partner_id':partner_id}"> <tree string="Expense Lines" editable="bottom"> - <field name="account_id" widget="selection" domain="[('user_type.report_type','=','expense'), ('type','!=','view')]"/> + <field name="account_id" widget="selection" domain="[('user_type.report_type','=','expense'), ('type','!=','view')]" groups="account.group_account_user"/> <field name="name"/> <field name="amount"/> <field name="account_analytic_id" groups="analytic.group_analytic_accounting"/> @@ -313,6 +320,9 @@ </page> </notebook> </sheet> + <footer> + <field name="message_ids" widget="ThreadView"/> + </footer> </form> </field> </record> @@ -325,6 +335,11 @@ <field name="view_id" eval="False"/> <field name="search_view_id" eval="view_voucher_filter_vendor"/> <field name="target">current</field> + <field name="help"> + Click here to create a purchase receipt. + <p> + When the purchase receipt is confirmed, you can record the supplier payment related to this purchase receipt. + </field> </record> <record id="action_purchase_receipt_tree" model="ir.actions.act_window.view"> <field eval="1" name="sequence"/> diff --git a/addons/analytic/__openerp__.py b/addons/analytic/__openerp__.py index 95983ecdc10..fe9a42fe4c4 100644 --- a/addons/analytic/__openerp__.py +++ b/addons/analytic/__openerp__.py @@ -25,7 +25,7 @@ "author" : "OpenERP SA", "website" : "http://www.openerp.com", "category": 'Hidden/Dependency', - "depends" : ["base", "decimal_precision"], + "depends" : ["base", "decimal_precision", "mail"], "description": """ Module for defining analytic accounting object. =============================================== @@ -37,6 +37,8 @@ that have no counterpart in the general financial accounts. "init_xml" : [], "update_xml": ['security/analytic_security.xml', "security/ir.model.access.csv", + "analytic_sequence.xml", + "analytic_view.xml" ], 'demo_xml': [ ], diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py index 7cb61ee22aa..af8b1615864 100644 --- a/addons/analytic/analytic.py +++ b/addons/analytic/analytic.py @@ -27,6 +27,7 @@ import decimal_precision as dp class account_analytic_account(osv.osv): _name = 'account.analytic.account' + _inherit = ['mail.thread'] _description = 'Analytic Account' def _compute_level_tree(self, cr, uid, ids, child_ids, res, field_names, context=None): @@ -155,7 +156,11 @@ class account_analytic_account(osv.osv): 'name': fields.char('Account Name', size=128, required=True), 'complete_name': fields.function(_complete_name_calc, type='char', string='Full Account Name'), 'code': fields.char('Code/Reference', size=24, select=True), - 'type': fields.selection([('view','View'), ('normal','Normal')], 'Account Type', help='If you select the View Type, it means you won\'t allow to create journal entries using that account.'), + 'type': fields.selection([('view','Analytic View'), ('normal','Analytic Account'),('contract','Contract or Project'),('template','Template of Project')], 'Type of Account', required=True, + help="If you select the View Type, it means you won\'t allow to create journal entries using that account.\n"\ + "The type 'Analytic account' stands for usual accounts that you only want to use in accounting.\n"\ + "If you select Contract or Project, it offers you the possibility to manage the validity and the invoicing options for this account.\n"\ + "The special type 'Template of Project' allows you to define a template with default data that you can reuse easily."), 'description': fields.text('Description'), 'parent_id': fields.many2one('account.analytic.account', 'Parent Analytic Account', select=2), 'child_ids': fields.one2many('account.analytic.account', 'parent_id', 'Child Accounts'), @@ -166,23 +171,28 @@ class account_analytic_account(osv.osv): 'credit': fields.function(_debit_credit_bal_qtty, type='float', string='Credit', multi='debit_credit_bal_qtty', digits_compute=dp.get_precision('Account')), 'quantity': fields.function(_debit_credit_bal_qtty, type='float', string='Quantity', multi='debit_credit_bal_qtty'), 'quantity_max': fields.float('Maximum Time', help='Sets the higher limit of time to work on the contract.'), - 'partner_id': fields.many2one('res.partner', 'Partner'), - 'user_id': fields.many2one('res.users', 'Account Manager'), + 'partner_id': fields.many2one('res.partner', 'Customer'), + 'user_id': fields.many2one('res.users', 'Project Manager'), + 'manager_id': fields.many2one('res.users', 'Account Manager'), 'date_start': fields.date('Date Start'), 'date': fields.date('Date End', select=True), 'company_id': fields.many2one('res.company', 'Company', required=False), #not required because we want to allow different companies to use the same chart of account, except for leaf accounts. - 'state': fields.selection([('template', 'Template'),('draft','New'),('open','Open'), ('cancelled', 'Cancelled'),('pending','Pending'),('close','Closed')], 'Status', required=True, - help='* When an account is created its in \'Draft\' state.\ - \n* If any associated partner is there, it can be in \'Open\' state.\ - \n* If any pending balance is there it can be in \'Pending\'. \ - \n* And finally when all the transactions are over, it can be in \'Close\' state. \ - \n* The project can be in either if the states \'Template\' and \'Running\'.\n If it is template then we can make projects based on the template projects. If its in \'Running\' state it is a normal project.\ - \n If it is to be reviewed then the state is \'Pending\'.\n When the project is completed the state is set to \'Done\'.'), + 'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'), ('cancelled', 'Cancelled'),('pending','To Renew'),('close','Closed')], 'Status', required=True,), 'currency_id': fields.function(_currency, fnct_inv=_set_company_currency, store = { 'res.company': (_get_analytic_account, ['currency_id'], 10), }, string='Currency', type='many2one', relation='res.currency'), } + + def on_change_partner_id(self, cr, uid, ids,partner_id, name, context={}): + res={} + if partner_id: + partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) + if partner.user_id: + res['manager_id'] = partner.user_id.id + if not name: + res['name'] = _('Contract: ') + partner.name + return {'value': res} def _default_company(self, cr, uid, context=None): user = self.pool.get('res.users').browse(cr, uid, uid, context=context) @@ -197,6 +207,7 @@ class account_analytic_account(osv.osv): _defaults = { 'type': 'normal', 'company_id': _default_company, + 'code' : lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'account.analytic.account'), 'state': 'open', 'user_id': lambda self, cr, uid, ctx: uid, 'partner_id': lambda self, cr, uid, ctx: ctx.get('partner_id', False), @@ -266,6 +277,17 @@ class account_analytic_account(osv.osv): account = self.search(cr, uid, args, limit=limit, context=context) return self.name_get(cr, uid, account, context=context) + def create(self, cr, uid, vals, context=None): + contract = super(account_analytic_account, self).create(cr, uid, vals, context=context) + if contract: + self.create_send_note(cr, uid, [contract], context=context) + return contract + + def create_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_subscribe(cr, uid, [obj.id], [obj.user_id.id], context=context) + self.message_append_note(cr, uid, [obj.id], body=_("Contract for <em>%s</em> has been <b>created</b>.") % (obj.partner_id.name), context=context) + account_analytic_account() @@ -290,17 +312,17 @@ class account_analytic_line(osv.osv): } _order = 'date desc' - + def _check_no_view(self, cr, uid, ids, context=None): analytic_lines = self.browse(cr, uid, ids, context=context) for line in analytic_lines: if line.account_id.type == 'view': return False return True - + _constraints = [ (_check_no_view, 'You can not create analytic line on view account.', ['account_id']), - ] + ] account_analytic_line() diff --git a/addons/analytic/analytic_sequence.xml b/addons/analytic/analytic_sequence.xml new file mode 100644 index 00000000000..b4e8358bdf9 --- /dev/null +++ b/addons/analytic/analytic_sequence.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data noupdate="1"> + <record id="seq_type_analytic_account_main" model="ir.sequence.type"> + <field name="name">Analytic account</field> + <field name="code">account.analytic.account</field> + </record> + <record id="seq_analytic_account_base" model="ir.sequence"> + <field name="name">Analytic account sequence</field> + <field name="code">account.analytic.account</field> + <field name="prefix">AA</field> + <field name="padding">3</field> + </record> + + </data> +</openerp> diff --git a/addons/analytic/analytic_view.xml b/addons/analytic/analytic_view.xml new file mode 100644 index 00000000000..85a1520e561 --- /dev/null +++ b/addons/analytic/analytic_view.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <record id="view_account_analytic_account_form" model="ir.ui.view"> + <field name="name">analytic.analytic.account.form</field> + <field name="model">account.analytic.account</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form version="7.0"> + <sheet string="Analytic Account"> + <label for="name" class="oe_edit_only"/> + <h1> + <field name="name"/> + </h1> + <group> + <group> + <field name="partner_id" on_change="on_change_partner_id(partner_id, name)" attrs="{'required':[('type','=','contract')]}"/> + <field name="parent_id" on_change="on_change_parent(parent_id)" attrs="{'invisible': [('type','in',['contract','template'])]}"/> + <field name="type"/> + </group> + <group> + <field name="code"/> + <field name="manager_id"/> + <field name="company_id" on_change="on_change_company(company_id)" widget="selection" groups="base.group_multi_company" attrs="{'required': [('type','<>','view')]}"/> + </group> + </group> + <notebook> + <page string="Contract Information" name="contract_page" attrs="{'invisible':[('type','not in',['contract', 'template'])]}"> + <group name="master"> + <group string="Validity" name="contract"> + <label for="date_start" string="Duration"/> + <div name="duration"> + <field name="date_start" class="oe_inline"/> - <field name="date" class="oe_inline"/> + </div> + </group> + <group name="project"> + <separator string="Project Management" name="project_sep" invisible="1"/> + </group> + </group> + <separator string="Terms and Conditions" name="description"/> + <field name="description"/> + </page> + </notebook> + </sheet> + <footer> + <field name="message_ids" widget="ThreadView"/> + </footer> + </form> + </field> + </record> + </data> +</openerp> diff --git a/addons/analytic_contract_expense_project/__init__.py b/addons/analytic_contract_expense_project/__init__.py new file mode 100644 index 00000000000..05c84916922 --- /dev/null +++ b/addons/analytic_contract_expense_project/__init__.py @@ -0,0 +1,24 @@ +# -*- 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 analytic_contract_expense_project + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/analytic_journal_billing_rate/__openerp__.py b/addons/analytic_contract_expense_project/__openerp__.py index b8e8ab7baf5..41e0bbd084a 100644 --- a/addons/analytic_journal_billing_rate/__openerp__.py +++ b/addons/analytic_contract_expense_project/__openerp__.py @@ -19,28 +19,28 @@ # ############################################################################## + { - 'name': 'Billing Rates on Contracts', - 'version': '1.0', + 'name': 'Projects Management: hr_expense link', + 'version': '1.1', 'category': 'Sales Management', 'description': """ -This module allows you to define what is the default invoicing rate for a specific journal on a given account. -============================================================================================================== - -This is mostly used when a user encodes his timesheet: the values are retrieved and the fields are auto-filled. But the possibility to change these values is still available. +This module is for modifying project view to show some data related to the hr_expense module. +====================================================================================================== -Obviously if no data has been recorded for the current account, the default value is given as usual by the account data so that this module is perfectly compatible with older configurations. - - """, - 'author': 'OpenERP SA', - 'website': 'http://www.openerp.com', - 'images': ['images/analytic_journal_billing_rate.jpeg'], - 'depends': ['analytic_user_function', 'account', 'hr_timesheet_invoice'], - 'init_xml': [], - 'update_xml': ['analytic_journal_billing_rate_view.xml', 'security/ir.model.access.csv'], +""", + "author": "OpenERP S.A.", + "website": "http://www.openerp.com/", + "depends": ["analytic_contract_hr_expense","project"], + "init_xml": [], + "update_xml": [ + "analytic_contract_expense_project_view.xml", + ], 'demo_xml': [], + "css" : [ + ], 'installable': True, - 'auto_install': False, - 'certificate': '0030271787965', + 'auto_install': True, } + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/analytic_contract_expense_project/analytic_contract_expense_project.py b/addons/analytic_contract_expense_project/analytic_contract_expense_project.py new file mode 100644 index 00000000000..efbb8b75a9e --- /dev/null +++ b/addons/analytic_contract_expense_project/analytic_contract_expense_project.py @@ -0,0 +1,37 @@ +# -*- 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 + +class project_project(osv.osv): + _inherit = "project.project" + + def open_hr_expense(self, cr, uid, ids, context=None): + account_ids = [x.analytic_account_id.id for x in self.browse(cr, uid, ids, context=context)] + return self.pool.get('account.analytic.account').open_hr_expense(cr, uid, account_ids, context=context) + + def hr_to_invoice_expense(self, cr, uid, ids, context=None): + account_ids = [x.analytic_account_id.id for x in self.browse(cr, uid, ids, context=context)] + return self.pool.get('account.analytic.account').hr_to_invoice_expense(cr, uid, account_ids, context=context) + +project_project() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/analytic_contract_expense_project/analytic_contract_expense_project_view.xml b/addons/analytic_contract_expense_project/analytic_contract_expense_project_view.xml new file mode 100644 index 00000000000..d4350c7325f --- /dev/null +++ b/addons/analytic_contract_expense_project/analytic_contract_expense_project_view.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <record id="project_form_expense_form" model="ir.ui.view"> + <field name="name">project.project.form.expense.inherit</field> + <field name="model">project.project</field> + <field name="type">form</field> + <field name="inherit_id" ref="analytic_contract_project.project_account_analytic_account_form"/> + <field eval="20" name="priority"/> + <field name="arch" type="xml"> + <xpath expr='//tr[@name="total"]' position='before'> + <tr> + <td> + <label for="charge_expenses"/> + </td><td> + <field name="charge_expenses"/> + </td><td> + <field class="oe_form_inline" name="est_expenses" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + </td><td> + <field class="oe_form_inline" name="expense_invoiced" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + </td><td> + <field class="oe_form_inline" name="remaining_expense" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + </td><td> + <field class="oe_form_inline" name="expense_to_invoice" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + </td><td> + <button name="open_hr_expense" string="All Expenses" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + <button name="hr_to_invoice_expense" string="Expenses to Invoice" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + </td> + </tr> + </xpath> + </field> + </record> + </data> +</openerp> diff --git a/addons/analytic_journal_billing_rate/__init__.py b/addons/analytic_contract_hr_expense/__init__.py index d2b6ac90561..ca4044b0584 100644 --- a/addons/analytic_journal_billing_rate/__init__.py +++ b/addons/analytic_contract_hr_expense/__init__.py @@ -19,6 +19,6 @@ # ############################################################################## -import analytic_journal_billing_rate -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: +import analytic_contract_hr_expense +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/analytic_contract_hr_expense/__openerp__.py b/addons/analytic_contract_hr_expense/__openerp__.py new file mode 100644 index 00000000000..981f7226d6a --- /dev/null +++ b/addons/analytic_contract_hr_expense/__openerp__.py @@ -0,0 +1,47 @@ +# -*- 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': 'Contracts Management: hr_expense link', + 'version': '1.1', + 'category': 'Sales Management', + 'description': """ +This module is for modifying account analytic view to show some data related to the hr_expense module. +====================================================================================================== + +""", + "author": "OpenERP S.A.", + "website": "http://www.openerp.com/", + "depends": ["hr_expense","account_analytic_analysis"], + "init_xml": [], + "update_xml": [ + "analytic_contract_hr_expense_view.xml", + ], + 'demo_xml': [], + "css" : [ + ], + 'installable': True, + 'auto_install': True, + 'certificate': '', +} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py b/addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py new file mode 100644 index 00000000000..8f24f12808b --- /dev/null +++ b/addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py @@ -0,0 +1,160 @@ +# -*- 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 +from osv.orm import intersect, except_orm +import tools.sql +from tools.translate import _ +from decimal_precision import decimal_precision as dp + + +class account_analytic_account(osv.osv): + _name = "account.analytic.account" + _inherit = "account.analytic.account" + + def _get_total_estimation(self, account): + tot_est = super(account_analytic_account, self)._get_total_estimation(account) + if account.charge_expenses: + tot_est += account.est_expenses + return tot_est + + def _get_total_invoiced(self, account): + total_invoiced = super(account_analytic_account, self)._get_total_invoiced(account) + if account.charge_expenses: + total_invoiced += account.expense_invoiced + return total_invoiced + + def _get_total_remaining(self, account): + total_remaining = super(account_analytic_account, self)._get_total_remaining(account) + if account.charge_expenses: + total_remaining += account.remaining_expense + return total_remaining + + def _get_total_toinvoice(self, account): + total_toinvoice = super(account_analytic_account, self)._get_total_toinvoice(account) + if account.charge_expenses: + total_toinvoice += account.expense_to_invoice + return total_toinvoice + + def _remaining_expnse_calc(self, cr, uid, ids, name, arg, context=None): + res = {} + for account in self.browse(cr, uid, ids, context=context): + if account.est_expenses != 0: + res[account.id] = max(account.est_expenses - account.expense_invoiced, account.expense_to_invoice) + else: + res[account.id]=0.0 + return res + + def _expense_to_invoice_calc(self, cr, uid, ids, name, arg, context=None): + res = {} + res_final = {} + child_ids = tuple(ids) #We don't want consolidation for each of these fields because those complex computation is resource-greedy. + for i in child_ids: + res[i] = 0.0 + if not child_ids: + return res + + if child_ids: + cr.execute("""SELECT account_analytic_account.id, \ + COALESCE(SUM (product_template.list_price * \ + account_analytic_line.unit_amount * \ + ((100-hr_timesheet_invoice_factor.factor)/100)), 0.0) \ + AS ca_to_invoice \ + FROM product_template \ + JOIN product_product \ + ON product_template.id = product_product.product_tmpl_id \ + JOIN account_analytic_line \ + ON account_analytic_line.product_id = product_product.id \ + JOIN account_analytic_journal \ + ON account_analytic_line.journal_id = account_analytic_journal.id \ + JOIN account_analytic_account \ + ON account_analytic_account.id = account_analytic_line.account_id \ + JOIN hr_timesheet_invoice_factor \ + ON hr_timesheet_invoice_factor.id = account_analytic_account.to_invoice \ + WHERE account_analytic_account.id IN %s \ + AND account_analytic_line.invoice_id IS NULL \ + AND account_analytic_line.to_invoice IS NOT NULL \ + AND account_analytic_journal.type = 'purchase' \ + GROUP BY account_analytic_account.id;""",(child_ids,)) + for account_id, sum in cr.fetchall(): + res[account_id] = sum + res_final = res + return res_final + + def _expense_invoiced_calc(self, cr, uid, ids, name, arg, context=None): + lines_obj = self.pool.get('account.analytic.line') + res = {} + for account in self.browse(cr, uid, ids, context=context): + res[account.id] = 0.0 + line_ids = lines_obj.search(cr, uid, [('account_id','=', account.id), ('invoice_id','!=',False), ('to_invoice','!=', False), ('journal_id.type', '=', 'purchase')], context=context) + for line in lines_obj.browse(cr, uid, line_ids, context=context): + res[account.id] += line.invoice_id.amount_untaxed + return res + + + _columns = { + 'charge_expenses' : fields.boolean('Charge Expenses'), + 'expense_invoiced' : fields.function(_expense_invoiced_calc, type="float"), + 'expense_to_invoice' : fields.function(_expense_to_invoice_calc, type='float'), + 'remaining_expense' : fields.function(_remaining_expnse_calc, type="float"), + 'est_expenses': fields.float('Estimation of Expenses to Invoice'), + } + + def on_change_template(self, cr, uid, id, template_id, context=None): + res = super(account_analytic_account, self).on_change_template(cr, uid, id, template_id, context=context) + if template_id and 'value' in res: + template = self.browse(cr, uid, template_id, context=context) + res['value']['charge_expenses'] = template.charge_expenses + res['value']['est_expenses'] = template.est_expenses + return res + + def open_hr_expense(self, cr, uid, ids, context=None): + line_ids = self.pool.get('hr.expense.line').search(cr,uid,[('analytic_account', 'in', ids)]) + domain = [('line_ids', 'in', line_ids)] + names = [record.name for record in self.browse(cr, uid, ids, context=context)] + name = _('Expenses of %s') % ','.join(names) + return { + 'type': 'ir.actions.act_window', + 'name': name, + 'view_type': 'form', + 'view_mode': 'tree,form', + 'domain' : domain, + 'res_model': 'hr.expense.expense', + 'nodestroy': True, + } + + def hr_to_invoice_expense(self, cr, uid, ids, context=None): + domain = [('invoice_id','=',False),('to_invoice','!=',False), ('journal_id.type', '=', 'purchase'), ('account_id', 'in', ids)] + names = [record.name for record in self.browse(cr, uid, ids, context=context)] + name = _('Expenses to Invoice of %s') % ','.join(names) + return { + 'type': 'ir.actions.act_window', + 'name': name, + 'view_type': 'form', + 'view_mode': 'tree,form', + 'domain' : domain, + 'res_model': 'account.analytic.line', + 'nodestroy': True, + } + +account_analytic_account() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/analytic_contract_hr_expense/analytic_contract_hr_expense_view.xml b/addons/analytic_contract_hr_expense/analytic_contract_hr_expense_view.xml new file mode 100644 index 00000000000..0148c05d0b4 --- /dev/null +++ b/addons/analytic_contract_hr_expense/analytic_contract_hr_expense_view.xml @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <record id="account_analytic_account_form_expense_form" model="ir.ui.view"> + <field name="name">account.analytic.account.form.expense.inherit</field> + <field name="model">account.analytic.account</field> + <field name="type">form</field> + <field eval="60" name="priority"/> + <field name="arch" type="xml"> + <xpath expr='//tr[@name="total"]' position='before'> + <tr> + <td> + <label for="charge_expenses"/> + </td><td> + <field name="charge_expenses"/> + </td><td> + <field class="oe_form_inline" name="est_expenses" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + </td><td> + <field class="oe_form_inline" name="expense_invoiced" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + </td><td> + <field class="oe_form_inline" name="remaining_expense" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + </td><td> + <field class="oe_form_inline" name="expense_to_invoice" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + </td><td> + <group> + <button name="open_hr_expense" string="All Expenses" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + <button name="hr_to_invoice_expense" string="Expenses to Invoice" type="object" attrs="{'invisible': [('charge_expenses','=',False)]}"/> + </group> + </td> + </tr> + </xpath> + </field> + </record> + + <!--<record id="project_form_expense_form" model="ir.ui.view"> + <field name="name">project.project.form.expense.inherit</field> + <field name="model">project.project</field> + <field name="type">form</field> + <field name="inherit_id" ref="analytic_contract_project.project_account_analytic_account_form"/> + <field eval="20" name="priority"/> + <field name="arch" type="xml"> + <xpath expr='//div[@name="end_of_tabl_hook"]' position='before'> + <tr> + <th class="oe_border_right">Charge Expenses</th> + <td><field name="charge_expenses" nolabel="1"/></td> + <td><field class="oe_th_110px" name="est_expenses" nolabel="1" attrs="{'invisible': [('charge_expenses','=',0)]}"/></td> + <td class="oe_th_110px"><field name="expense_invoiced" nolabel="1" attrs="{'invisible': [('charge_expenses','=',0)]}"/></td> + <td class="oe_th_110px oe_border_right"><field name="remaining_expense" nolabel="1" attrs="{'invisible': [('charge_expenses','=',0)]}"/></td> + <td class="oe_th_110px"><field name="expense_to_invoice" nolabel="1" attrs="{'invisible': [('charge_expenses','=',0)]}"/></td> + <td width="10px"></td> + <td><button icon="gtk-select-all" class= "oe_btn_width" name="open_hr_expense" string="Expenses" type="object" attrs="{'invisible': [('charge_expenses','=',0)]}"/></td> + <td><button icon="terp-dolar" class= "oe_btn_width" name="hr_to_invoiced_expense" string="Invoice Expenses" type="object" attrs="{'invisible': [('charge_expenses','=',0)]}"/></td> + </tr> + </xpath> + </field> + </record>--> + </data> +</openerp> diff --git a/addons/analytic_contract_project/__init__.py b/addons/analytic_contract_project/__init__.py new file mode 100644 index 00000000000..dd60ac32096 --- /dev/null +++ b/addons/analytic_contract_project/__init__.py @@ -0,0 +1,24 @@ +# -*- 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 analytic_contract_project + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/analytic_contract_project/__openerp__.py b/addons/analytic_contract_project/__openerp__.py new file mode 100644 index 00000000000..ccf712dc987 --- /dev/null +++ b/addons/analytic_contract_project/__openerp__.py @@ -0,0 +1,37 @@ +# -*- 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" : "Contract On Project", + "version": "1.1", + "author" : "OpenERP SA", + "website" : "http://www.openerp.com", + "depends" : ["project", "account_analytic_analysis"], + "description": """ + Add "Contract Data" in project view. + """, + "init_xml" : [], + "update_xml": ["analytic_contract_project_view.xml"], + 'demo_xml': [], + 'installable': True, + 'auto_install': True, +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/analytic_contract_project/analytic_contract_project.py b/addons/analytic_contract_project/analytic_contract_project.py new file mode 100644 index 00000000000..6221617637e --- /dev/null +++ b/addons/analytic_contract_project/analytic_contract_project.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import fields, osv +from tools.translate import _ + +class project_project(osv.osv): + _inherit = 'project.project' + + _defaults = { + 'use_timesheets': True, + } + + def open_sale_order_lines(self,cr,uid,ids,context=None): + account_ids = [x.analytic_account_id.id for x in self.browse(cr, uid, ids, context=context)] + return self.pool.get('account.analytic.account').open_sale_order_lines(cr, uid, account_ids, context=context) + + def open_timesheets_to_invoice(self,cr,uid,ids,context=None): + if context is None: + context = {} + analytic_account_id = self.browse(cr, uid, ids[0], context=context).analytic_account_id.id + context.update({'search_default_account_id': analytic_account_id, 'default_account_id': analytic_account_id, 'search_default_to_invoice': 1}) + return { + 'type': 'ir.actions.act_window', + 'name': _('Timesheet Lines to Invoice'), + 'view_type': 'form', + 'view_mode': 'tree,form', + 'context': context, + 'domain' : [('invoice_id','=',False),('to_invoice','!=',False), ('journal_id.type', '=', 'general')], + 'res_model': 'account.analytic.line', + 'nodestroy': True, + } + + def open_timesheets(self, cr, uid, ids, context=None): + """ open Timesheets view """ + project = self.browse(cr, uid, ids[0], context) + try: + journal_id = self.pool.get('ir.model.data').get_object(cr, uid, 'hr_timesheet', 'analytic_journal').id + except ValueError: + journal_id = False + view_context = { + 'search_default_account_id': [project.analytic_account_id.id], + 'default_account_id': project.analytic_account_id.id, + 'default_journal_id': journal_id, + } + return { + 'type': 'ir.actions.act_window', + 'name': _('Bill Tasks Works'), + 'res_model': 'account.analytic.line', + 'view_type': 'form', + 'view_mode': 'tree,form', + 'context': view_context, + 'nodestroy': True, + } +project_project() + +class task(osv.osv): + _inherit = "project.task" + + def create(self, cr, uid, vals, context=None): + task_id = super(task, self).create(cr, uid, vals, context=context) + task_browse = self.browse(cr, uid, task_id, context=context) + self.pool.get('account.analytic.account').message_append_note(cr, uid, [task_browse.project_id.analytic_account_id.id], body=_("Task <em>%s</em> has been <b>created</b>.") % (task_browse.name), context=context) + return task_id +task() diff --git a/addons/analytic_contract_project/analytic_contract_project_view.xml b/addons/analytic_contract_project/analytic_contract_project_view.xml new file mode 100644 index 00000000000..0e61fe08d01 --- /dev/null +++ b/addons/analytic_contract_project/analytic_contract_project_view.xml @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <record id="project_account_analytic_account_form" model="ir.ui.view"> + <field name="name">project.project.form.inherit</field> + <field name="model">project.project</field> + <field name="type">form</field> + <field name="inherit_id" ref="project.edit_project"/> + <field eval="18" name="priority"/> + <field name="arch" type="xml"> + <xpath expr='//page[@name="team"]' position='after'> + <page string="Contract Data"> + <group> + <group string="Validity"> + <label for="date_start" string="Duration"/> + <div name="duration"> + <field name="date_start" class="oe_inline"/> - <field name="date" class="oe_inline"/> + </div> + <label for="quantity_max"/> + <div> + <field name="quantity_max" class="oe_inline"/> + <field name="company_uom_id" readonly="1" class="oe_inline"/> / Remaining: + <field name="remaining_hours" class="oe_inline"/> + <field name="company_uom_id" readonly="1" class="oe_inline"/> + </div> + </group> + <group string="Invoice Options"> + <field name="manager_id" /> + <field name="pricelist_id" attrs="{'invisible': [('invoice_on_timesheets','=',0)]}"/> + <field name="to_invoice" widget="selection" attrs="{'invisible': [('invoice_on_timesheets','=',0)]}"/> + </group> + </group> + <separator name="toinvoice" string="Invoicing"/> + <table width="100%%"> + <tr> + <th></th> + <th></th> + <th><label string="Est.Tot"/></th> + <th><label string="Invoiced"/></th> + <th><label string="Remaining"/></th> + <th><label string="To Invoice"/></th> + <th></th> + </tr><tr> + <td> + <label for="fix_price_invoices"/> + </td><td> + <field name="fix_price_invoices" class="oe_inline"/> + </td><td> + <field class="oe_inline" name="amount_max" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + </td><td> + <field class="oe_inline" name="ca_invoiced" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + </td><td> + <field class="oe_inline" name="remaining_ca" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + </td><td> + <field class="oe_inline" name="fix_price_to_invoice" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + </td><td> + <button name="%(account_analytic_analysis.action_sales_order)d" string="All Sales" type="action" context="{'default_partner_id': [partner_id], 'search_default_partner_id': [partner_id], 'default_project_id': analytic_account_id, 'search_default_project_id': analytic_account_id}" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + <button name="open_sale_order_lines" string="Lines To Invoice" type="object" context="{'default_partner_id': [partner_id],'default_project_id': analytic_account_id,'search_default_uninvoiced': 1,'search_default_project_id': analytic_account_id,'search_default_partner_id': [partner_id]}" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/></td> + </tr><tr attrs="{'invisible':[('use_timesheets','=',False)]}"> + <td> + <label for="invoice_on_timesheets"/> + </td><td> + <field name="invoice_on_timesheets"/> + </td><td> + <field class="oe_inline" name="hours_qtt_est" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td><td> + <field class="oe_inline" name="timesheet_ca_invoiced" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td><td> + <field class="oe_inline" name="remaining_hours_to_invoice" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td><td> + <field class="oe_inline" name="ca_to_invoice" attrs="{'invisible': [('fix_price_invoices','=',False)]}"/> + </td><td> + <button name="%(hr_timesheet.act_hr_timesheet_line_evry1_all_form)d" string="All Timesheets" type="action" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}" context="{'default_account_id': analytic_account_id,'search_default_account_id': analytic_account_id}"/> + <button name="open_timesheets_to_invoice" string="Timesheets to Invoice" type="object" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td> + </tr><tr name="total"> + <th> + <label string="Total"/> + </th><td> + </td><td> + <field name="est_total" class="oe_inline" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/> + </td><td> + <field name="invoiced_total" class="oe_inline"/> + </td><td> + <field name="remaining_total" class="oe_inline"/> + </td><td> + <field name="toinvoice_total" class="oe_inline"/> + </td><td> + </td> + </tr> + </table> + <separator string="Terms and Conditions" name="description"/> + <field name="description"/> + </page> + </xpath> + </field> + </record> + + <record id="project_invoice_form" model="ir.ui.view"> + <field name="name">Inherit project form : Invoicing Data</field> + <field name="model">project.project</field> + <field name="type">form</field> + <field name="inherit_id" ref="project.edit_project"/> + <field name="arch" type="xml"> + <xpath expr='//tr[@name="use_tasks_row"]' position='after'> + <tr> + <td><group><field name="use_timesheets"/></group></td> + <td><button icon="terp-gtk-go-back-rtl" name="open_timesheets" string="Timesheets" type="object" attrs="{'invisible':[('use_timesheets','=', 0)]}"/></td> + </tr> + </xpath> + </field> + </record> + + <record id="contract_inherited_form" model="ir.ui.view"> + <field name="name">Inherit contract form : adding UoM</field> + <field name="model">account.analytic.account</field> + <field name="type">form</field> + <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/> + <field name="priority">50</field> + <field name="arch" type="xml"> + <xpath expr='//field[@name="remaining_hours"]' position='after'> + <field name="company_uom_id" readonly="1" class="oe_inline"/> + </xpath> + </field> + </record> + </data> +</openerp> diff --git a/addons/analytic_journal_billing_rate/analytic_journal_billing_rate.py b/addons/analytic_journal_billing_rate/analytic_journal_billing_rate.py deleted file mode 100644 index 0896e7d443c..00000000000 --- a/addons/analytic_journal_billing_rate/analytic_journal_billing_rate.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- 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 fields,osv - -class analytic_journal_rate_grid(osv.osv): - - _name="analytic_journal_rate_grid" - _description= "Relation table between journals and billing rates" - _columns={ - 'journal_id': fields.many2one('account.analytic.journal', 'Analytic Journal', required=True,), - 'account_id': fields.many2one("account.analytic.account", "Analytic Account", required=True,), - 'rate_id': fields.many2one("hr_timesheet_invoice.factor", "Invoicing Rate",), - } - -analytic_journal_rate_grid() - -class account_analytic_account(osv.osv): - - _inherit = "account.analytic.account" - _columns = { - 'journal_rate_ids': fields.one2many('analytic_journal_rate_grid', 'account_id', 'Invoicing Rate per Journal'), - } - -account_analytic_account() - -class hr_analytic_timesheet(osv.osv): - - _inherit = "hr.analytic.timesheet" - - - def on_change_account_id(self, cr, uid, ids, account_id, user_id=False, unit_amount=0, journal_id=0): - res = {} - if not (account_id): - #avoid a useless call to super - return res - - if not (journal_id): - return super(hr_analytic_timesheet, self).on_change_account_id(cr, uid, ids,account_id, user_id, unit_amount) - - #get the browse record related to journal_id and account_id - temp = self.pool.get('analytic_journal_rate_grid').search(cr, uid, [('journal_id', '=', journal_id),('account_id', '=', account_id) ]) - - if not temp: - #if there isn't any record for this journal_id and account_id - return super(hr_analytic_timesheet, self).on_change_account_id(cr, uid, ids,account_id,user_id, unit_amount) - else: - #get the old values from super and add the value from the new relation analytic_journal_rate_grid - r = self.pool.get('analytic_journal_rate_grid').browse(cr, uid, temp)[0] - res.setdefault('value',{}) - res['value']= super(hr_analytic_timesheet, self).on_change_account_id(cr, uid, ids, account_id, user_id, unit_amount)['value'] - if r.rate_id.id: - res['value']['to_invoice'] = r.rate_id.id - - return res - - - def on_change_journal_id(self, cr, uid, ids, journal_id, account_id): - res = {} - if not (journal_id and account_id): - return res - - #get the browse record related to journal_id and account_id - temp = self.pool.get('analytic_journal_rate_grid').search(cr, uid, [('journal_id', '=', journal_id),('account_id', '=', account_id) ]) - if temp: - #add the value from the new relation analytic_user_funct_grid - r = self.pool.get('analytic_journal_rate_grid').browse(cr, uid, temp)[0] - res.setdefault('value',{}) - if r.rate_id.id: - res['value']['to_invoice'] = r.rate_id.id - return res - to_invoice = self.pool.get('account.analytic.account').read(cr, uid, [account_id], ['to_invoice'])[0]['to_invoice'] - if to_invoice: - res.setdefault('value',{}) - res['value']['to_invoice'] = to_invoice[0] - - return res - -hr_analytic_timesheet() - - -class account_invoice(osv.osv): - _inherit = "account.invoice" - - def _get_analytic_lines(self, cr, uid, id, context=None): - iml = super(account_invoice, self)._get_analytic_lines(cr, uid, id, context=context) - for il in iml: - if il['account_analytic_id'] and il.get('analytic_lines', False): - - #get the browse record related to journal_id and account_id - journal_id = il['analytic_lines'][0][2]['journal_id'] - account_id = il['analytic_lines'][0][2]['account_id'] - if journal_id and account_id: - temp = self.pool.get('analytic_journal_rate_grid').search(cr, uid, [('journal_id', '=', journal_id),('account_id', '=', account_id)], context=context) - - if temp: - r = self.pool.get('analytic_journal_rate_grid').browse(cr, uid, temp, context=context)[0] - il['analytic_lines'][0][2]['to_invoice'] = r.rate_id.id - return iml - -account_invoice() -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/analytic_journal_billing_rate/analytic_journal_billing_rate_view.xml b/addons/analytic_journal_billing_rate/analytic_journal_billing_rate_view.xml deleted file mode 100644 index 13a159a9321..00000000000 --- a/addons/analytic_journal_billing_rate/analytic_journal_billing_rate_view.xml +++ /dev/null @@ -1,82 +0,0 @@ -<?xml version="1.0" ?> -<openerp> - <data> - - <!-- analytic_journal_rate_grid views --> - <record model="ir.ui.view" id="analytic_journal_rate_grid_tree"> - <field name="name">analytic_journal_rate_grid.tree</field> - <field name="model">analytic_journal_rate_grid</field> - <field name="type">tree</field> - <field name="arch" type="xml"> - <tree string="Billing Rate per Journal for this Analytic Account" editable="bottom"> - <field name="journal_id" required="1"/> - <field name="rate_id" /> - </tree> - </field> - </record> - - <record model="ir.ui.view" id="analytic_journal_rate_grid_form"> - <field name="name">analytic_journal_rate_grid.form</field> - <field name="model">analytic_journal_rate_grid</field> - <field name="type">form</field> - <field name="arch" type="xml"> - <form string="Billing Rate per Journal for this Analytic Account"> - <field name="journal_id" required="1"/> - <field name="rate_id" /> - </form> - </field> - </record> - - <!-- account.analytic.account inherited view --> - <record model="ir.ui.view" id="view_account_analytic_account_form_inherit"> - <field name="name">account.analytic.account.form</field> - <field name="model">account.analytic.account</field> - <field name="type">form</field> - <field name="inherit_id" ref="hr_timesheet_invoice.account_analytic_account_form_form"/> - <field name="arch" type="xml"> - <xpath expr="//field[@name='to_invoice']" position="after"> - <field name="journal_rate_ids" nolabel="1" colspan="4"/> - </xpath> - </field> - </record> - - <!-- hr_timesheet_sheet.sheet inherited view --> - <record model="ir.ui.view" id="hr_timesheet_sheet_form_inherit"> - <field name="name">hr.timesheet.sheet.form</field> - <field name="model">hr_timesheet_sheet.sheet</field> - <field name="type">form</field> - <field name="inherit_id" ref="hr_timesheet_sheet.hr_timesheet_sheet_form"/> - <field name="arch" type="xml"> - <xpath expr="/form/sheet/notebook/page/field[@name='timesheet_ids']/tree/field[@name='account_id']" position="replace"> - <field name="account_id" domain="[('type','=','normal'),('state', '<>', 'close')]" on_change="on_change_account_id(account_id, user_id, unit_amount, journal_id)"/> - </xpath> - </field> - </record> - - <!-- hr.analytic.timesheet inherited views --> - <record model="ir.ui.view" id="hr_timesheet_line_form_inherit"> - <field name="name">hr.analytic.timesheet.form</field> - <field name="model">hr.analytic.timesheet</field> - <field name="type">form</field> - <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_form"/> - <field name="arch" type="xml"> - <xpath expr="//page[@string='Information']//field[@name='account_id']" position="replace"> - <field name="account_id" domain="[('type','=','normal'),('state', '<>', 'close')]" on_change="on_change_account_id(account_id, user_id, unit_amount, journal_id)" select="1"/> - </xpath> - </field> - </record> - - <record model="ir.ui.view" id="hr_timesheet_line_form_inherit_2"> - <field name="name">hr.analytic.timesheet.form</field> - <field name="model">hr.analytic.timesheet</field> - <field name="type">form</field> - <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_form"/> - <field name="arch" type="xml"> - <xpath expr="//page[@string='Information']//field[@name='journal_id']" position="replace"> - <field name="journal_id" select="1" required="1" on_change="on_change_journal_id(journal_id, account_id)"/> - </xpath> - </field> - </record> - - </data> -</openerp> diff --git a/addons/analytic_journal_billing_rate/i18n/analytic_journal_billing_rate.pot b/addons/analytic_journal_billing_rate/i18n/analytic_journal_billing_rate.pot deleted file mode 100644 index c83f406c70b..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/analytic_journal_billing_rate.pot +++ /dev/null @@ -1,78 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.1rc1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-02-08 00:35+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - diff --git a/addons/analytic_journal_billing_rate/i18n/ar.po b/addons/analytic_journal_billing_rate/i18n/ar.po deleted file mode 100644 index 76941f061e5..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/ar.po +++ /dev/null @@ -1,89 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-01-05 20:55+0000\n" -"Last-Translator: kifcaliph <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "يومية تحليلية" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "قيمة الفواتير لكل يومية للحساب التحليلي هذا" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "حساب تحليلي" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "جدول العلاقة بين اليوميات ومعدلات الفواتير" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "قيمة الفاتورة لكل يومية" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "فاتورة" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "قيمة الفاتورة" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "خطأ! لا يمكنك إنشاء حسابات تحليلية متكررة." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "خط سجل الدوام" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "خطأ! العملة لابد و أن تكون مثل العملة للشركة المختارة" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "القيم التحليلية للفواتير اليومية, حدد قيمة الفاتورة الافتراضية ليومية محددة" diff --git a/addons/analytic_journal_billing_rate/i18n/bg.po b/addons/analytic_journal_billing_rate/i18n/bg.po deleted file mode 100644 index 8ba12019391..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/bg.po +++ /dev/null @@ -1,93 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-03-01 20:24+0000\n" -"Last-Translator: Dimitar Markov <dimitar.markov@gmail.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Аналитичен дневник" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Аналитична сметка" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Фактура" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Грешка! Не можете да създавате рекурсивни аналитични сметки." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Ред в графика" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Невалиден XML за преглед на архитектурата" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Името на обекта трябва да започва с \"x_\" и да не съдържа никакви специални " -#~ "символи!" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "Грешка! Валутата трябва да бъде същата като валутата на избраната компания" diff --git a/addons/analytic_journal_billing_rate/i18n/bs.po b/addons/analytic_journal_billing_rate/i18n/bs.po deleted file mode 100644 index da239c6ec7d..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/bs.po +++ /dev/null @@ -1,86 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-08-03 00:19+0000\n" -"Last-Translator: Mantavya Gajjar (Open ERP) <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Analitička knjiženja" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Cijana naplate po knjiženju za ovo Analitičko konto" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analitičko konto" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabela relacija između knjiženja i cijene naplate" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Cijena po knjiženju" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Neodgovarajući XML za arhitekturu prikaza!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Naziv objekta mora počinjati sa x_ i ne smije sadržavati specijalne znakove!" diff --git a/addons/analytic_journal_billing_rate/i18n/ca.po b/addons/analytic_journal_billing_rate/i18n/ca.po deleted file mode 100644 index 5b7cc0e6290..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/ca.po +++ /dev/null @@ -1,133 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-09-29 06:30+0000\n" -"Last-Translator: Jordi Esteve (www.zikzakmedia.com) " -"<jesteve@zikzakmedia.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Diari analític" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Taxa de facturació per diari per aquesta compte analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Compte analític" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Taula de relació entre diaris i taxes de facturació" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Taxa de facturació per diari" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Factura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Taxa de facturació" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Error! No podeu crear comptes analítics recursius." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Línia del full de serveis" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML invàlid per a la definició de la vista!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "El nom de l'objecte ha de començar amb x_ i no contenir cap caràcter " -#~ "especial!" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Rati facturació diari analític" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "Error! La moneda ha de ser la mateixa que la moneda de la companyia " -#~ "seleccionada" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Taxa de facturació d'un diari analític. Defineix la taxa de facturació per " -#~ "defecte per a un diari en concret." - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Aquest mòdul us permet definir el percentatge de facturació per a un " -#~ "cert diari en un compte donat. S'utilitza principalment quan un usuari " -#~ "codifica el seu full de serveis: els valors són recuperats i els camps són " -#~ "auto emplenats tot i que la possibilitat de canviar-los està encara " -#~ "disponible.\n" -#~ "\n" -#~ "Òbviament si no s'ha guardat dades per al compte actual, es proporciona el " -#~ "valor per defecte per a les dades del compte com sempre, pel que aquest " -#~ "mòdul és perfectament compatible amb configuracions anteriors.\n" -#~ "\n" -#~ " " diff --git a/addons/analytic_journal_billing_rate/i18n/cs.po b/addons/analytic_journal_billing_rate/i18n/cs.po deleted file mode 100644 index a8a8e0a7357..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/cs.po +++ /dev/null @@ -1,78 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-02-03 06:24+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" diff --git a/addons/analytic_journal_billing_rate/i18n/da.po b/addons/analytic_journal_billing_rate/i18n/da.po deleted file mode 100644 index 76a0270f929..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/da.po +++ /dev/null @@ -1,79 +0,0 @@ -# Danish translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-11-09 21:41+0000\n" -"Last-Translator: OpenERP Danmark / Henning Dinsen <Unknown>\n" -"Language-Team: Danish <da@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Faktura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" diff --git a/addons/analytic_journal_billing_rate/i18n/de.po b/addons/analytic_journal_billing_rate/i18n/de.po deleted file mode 100644 index 61874c71a9a..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/de.po +++ /dev/null @@ -1,133 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-01-13 19:15+0000\n" -"Last-Translator: Ferdinand @ Camptocamp <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "Die Rechnungsnummer muss je Firma eindeutig sein" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Analytisches Journal" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "ungültige BBA Kommunikations Stuktur" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Abrechnungsquote nach Journal" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analytisches Konto" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Relation zwischen Journal und Abrechnungsquote" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Abrechnungsquote nach Journal" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Rechnung" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" -"Bestätigte und abgerechnete Zeitaufzeichungen können nicht geändert werden" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Abrechnungsquote" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Fehler ! Sie können keine rekursiven Analytische Konten definieren." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Zeiterfassung Positionen" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Fehlerhafter xml Code für diese Ansicht!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Der Objekt Name muss mit einem x_ starten und darf keine Sonderzeichen " -#~ "beinhalten" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Analytisches Journal Verrechnungssatz" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Abrechnungsquote für analytische Buchungen. Definieren Sie einen " -#~ "Standardwert je spezifiziertem Journal." - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "Fehler! Die Währung muss der Währung der gewählten Firma entsprechen" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Diese Anwendung ermöglicht Ihnen die Definition einer Standard " -#~ "Abrechnungsquote für ein analytisches Konto bei Buchung im Kontext eines " -#~ "bestimmten Journals. Angewendet wird die Abrechnungsquote meistens, wenn ein " -#~ "Benutzer seine Zeiterfassung auf bestimmte Konten vornimmt. Dabei werden " -#~ "dann die Konten und Beträge automatisch vorausgefüllt, mit der Möglichkeit " -#~ "diese\n" -#~ "individuell anzupassen.\n" -#~ "\n" -#~ " Wenn keine Konfiguration bei der Eingabe eines Kontos gefunden wird, " -#~ "würde weiterhin der Standardwert des Kontos verwendet, so dass dieses Modul " -#~ "gleichzeitig kompatibel mit älteren Konfigurationseinstellungen ist.\n" -#~ "\n" -#~ " " diff --git a/addons/analytic_journal_billing_rate/i18n/el.po b/addons/analytic_journal_billing_rate/i18n/el.po deleted file mode 100644 index e4447dc733b..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/el.po +++ /dev/null @@ -1,92 +0,0 @@ -# Greek translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-12-29 10:33+0000\n" -"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n" -"Language-Team: Greek <el@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Ημερολόγιο Αναλυτικής" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" -"Ποσοστό Τιμολόγησης ανα Ημερολόγιο για αυτόν τον Αναλυτικό Λογαριασμό" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Αναλυτικός Λογαριασμός" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Πίνακας σχέσεων μεταξύ ημερολογίων και ποσοστών χρέωσης" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Ποσό Τιμολόγησης ανα Ημερολόγιο" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Τιμολόγιο" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Ποσό Τιμολόγησης" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Γραμμή Φύλλου Xρόνου Eργασίας" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Ποσό Τιμολόγησης Ημερολόγιου Αναλυτικής" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Άκυρο XML για Αρχιτεκτονική Όψης!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Το όνομα του αντικειμένου θα πρέπει να ξεκινάει με x_ και να μην περιέχει " -#~ "ειδικούς χαρακτήρες!" diff --git a/addons/analytic_journal_billing_rate/i18n/en_GB.po b/addons/analytic_journal_billing_rate/i18n/en_GB.po deleted file mode 100644 index be92d92aa3a..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/en_GB.po +++ /dev/null @@ -1,130 +0,0 @@ -# English (United Kingdom) translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-01-23 13:36+0000\n" -"Last-Translator: mrx5682 <Unknown>\n" -"Language-Team: English (United Kingdom) <en_GB@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "Invoice Number must be unique per Company!" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Analytic Journal" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "Invalid BBA Structured Communication !" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Billing Rate per Journal for this Analytic Account" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analytic Account" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Relation table between journals and billing rates" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Invoicing Rate per Journal" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Invoice" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "You cannot modify an entry in a Confirmed/Done timesheet !." - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Invoicing Rate" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Error! You can not create recursive analytic accounts." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Timesheet Line" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "Error! The currency has to be the same as that of the selected company" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define the default invoicing rate for a " -#~ "specific journal on a given account. This is mostly used when a user encodes " -#~ "their timesheet: the values are retrieved and the fields are auto-filled... " -#~ "but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given by the account data so that this module is perfectly " -#~ "compatible with older configurations.\n" -#~ "\n" -#~ " " - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Analytic Journal Billing Rate" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "The Object name must start with x_ and not contain any special characters!" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Invalid XML for View Architecture!" diff --git a/addons/analytic_journal_billing_rate/i18n/es.po b/addons/analytic_journal_billing_rate/i18n/es.po deleted file mode 100644 index 87fbe32c17d..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/es.po +++ /dev/null @@ -1,133 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-01-11 10:47+0000\n" -"Last-Translator: Borja López Soilán (NeoPolus) <borjalopezsoilan@gmail.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Diario analítico" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Tasa de facturación por diario para esta cuenta analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Cuenta analítica" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabla de relación entre diarios y tasas de facturación" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Tasa de facturación por diario" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Factura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Tasa de facturación" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "¡Error! No puede crear cuentas analíticas recursivas." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Línea hoja de servicios" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML inválido para la definición de la vista!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " -#~ "especial!" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Tasa facturación diario analítico" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Este módulo le permite definir el porcentaje de facturación para un " -#~ "cierto diario en una cuenta dada. Se utiliza principalmente cuando un " -#~ "usuario codifica su hoja de servicios: los valores son recuperados y los " -#~ "campos son auto rellenados aunque la posibilidad de cambiar estos valores " -#~ "está todavía disponible.\n" -#~ "\n" -#~ " Obviamente si no se ha guardado datos para la cuenta actual, se " -#~ "proporciona el valor por defecto para los datos de la cuenta como siempre " -#~ "por lo que este módulo es perfectamente compatible con configuraciones " -#~ "anteriores.\n" -#~ "\n" -#~ " " - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "¡Error! La divisa tiene que ser la misma que la establecida en la compañía " -#~ "seleccionada" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Tasa de facturación de un diario analítico. Define la tasa de facturación " -#~ "por defecto para un diario en concreto." diff --git a/addons/analytic_journal_billing_rate/i18n/es_AR.po b/addons/analytic_journal_billing_rate/i18n/es_AR.po deleted file mode 100644 index cb0058df1a3..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/es_AR.po +++ /dev/null @@ -1,90 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.0\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-09-14 18:33+0000\n" -"Last-Translator: Silvana Herrera <sherrera@thymbra.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Libro Diario analítico" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Tasa de facturación por libro diario para esta cuenta analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Cuenta Analítica" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabla de relación entre libros diarios y tasas de facturación" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Tasa de facturación por libro diario" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Tasa de facturación" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Tasa facturación del libro diario analítico" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML inválido para la definición de la vista!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún caracter " -#~ "especial!" diff --git a/addons/analytic_journal_billing_rate/i18n/es_CR.po b/addons/analytic_journal_billing_rate/i18n/es_CR.po deleted file mode 100644 index 5f24420f6e8..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/es_CR.po +++ /dev/null @@ -1,136 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-02-15 15:53+0000\n" -"Last-Translator: Freddy Gonzalez <freddy.gonzalez@clearcorp.co.cr>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-16 05:06+0000\n" -"X-Generator: Launchpad (build 14781)\n" -"Language: \n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "¡El número de factura debe ser único por compañía!" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Diario analítico" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "¡Estructura de comunicación BBA no válida!" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Tasa de facturación por diario para esta cuenta analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Cuenta analítica" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabla de relación entre diarios y tasas de facturación" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Tasa de facturación por diario" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Factura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" -"No se puede modificar una entrada en un parte de horas Confirmado / ¡Ya " -"está!." - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Tasa de facturación" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "¡Error! No puede crear cuentas analíticas recursivas." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Línea hoja de servicios" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML inválido para la definición de la vista!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " -#~ "especial!" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Tasa facturación diario analítico" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Este módulo le permite definir el porcentaje de facturación para un " -#~ "cierto diario en una cuenta dada. Se utiliza principalmente cuando un " -#~ "usuario codifica su hoja de servicios: los valores son recuperados y los " -#~ "campos son auto rellenados aunque la posibilidad de cambiar estos valores " -#~ "está todavía disponible.\n" -#~ "\n" -#~ " Obviamente si no se ha guardado datos para la cuenta actual, se " -#~ "proporciona el valor por defecto para los datos de la cuenta como siempre " -#~ "por lo que este módulo es perfectamente compatible con configuraciones " -#~ "anteriores.\n" -#~ "\n" -#~ " " - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "¡Error! La divisa tiene que ser la misma que la establecida en la compañía " -#~ "seleccionada" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Tasa de facturación de un diario analítico. Define la tasa de facturación " -#~ "por defecto para un diario en concreto." diff --git a/addons/analytic_journal_billing_rate/i18n/es_EC.po b/addons/analytic_journal_billing_rate/i18n/es_EC.po deleted file mode 100644 index adebfb2920a..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/es_EC.po +++ /dev/null @@ -1,133 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-01-13 03:51+0000\n" -"Last-Translator: Cristian Salamea (Gnuthink) <ovnicraft@gmail.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Diario analítico" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Tasa de facturación por diario para esta cuenta analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Cuenta analítica" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabla de relación entre diarios y tasas de facturación" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Tasa de facturación por diario" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Factura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Tasa de facturación" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "¡Error! No puede crear cuentas analíticas recursivas." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Línea hoja de servicios" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML inválido para la definición de la vista!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " -#~ "especial!" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Tasa facturación diario analítico" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Tasa de facturación diario analítico. Define la tasa de facturación por " -#~ "defecto para un diario en concreto." - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "¡Error! La divisa tiene que ser la misma que la establecida en la compañía " -#~ "seleccionada" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Este módulo le permite definir el porcentaje de facturación para un " -#~ "cierto diario en una cuenta dada. Se utiliza principalmente cuando un " -#~ "usuario codifica su hoja de servicios: los valores son recuperados y los " -#~ "campos son auto rellenados aunque la posibilidad de cambiar estos valores " -#~ "está todavía disponible.\n" -#~ "\n" -#~ " Obviamente si no se ha guardado datos para la cuenta actual, se " -#~ "proporciona el valor por defecto para los datos de la cuenta como siempre " -#~ "por lo que este módulo es perfectamente compatible con configuraciones " -#~ "anteriores.\n" -#~ "\n" -#~ " " diff --git a/addons/analytic_journal_billing_rate/i18n/es_MX.po b/addons/analytic_journal_billing_rate/i18n/es_MX.po deleted file mode 100644 index be708d5fbe7..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/es_MX.po +++ /dev/null @@ -1,124 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2011-01-03 16:56+0000\n" -"PO-Revision-Date: 2011-01-11 10:47+0000\n" -"Last-Translator: Borja López Soilán (NeoPolus) <borjalopezsoilan@gmail.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:37+0000\n" -"X-Generator: Launchpad (build 13830)\n" - -#. module: analytic_journal_billing_rate -#: model:ir.module.module,description:analytic_journal_billing_rate.module_meta_information -msgid "" -"\n" -"\n" -" This module allows you to define what is the default invoicing rate for " -"a specific journal on a given account. This is mostly used when a user " -"encodes his timesheet: the values are retrieved and the fields are auto-" -"filled... but the possibility to change these values is still available.\n" -"\n" -" Obviously if no data has been recorded for the current account, the " -"default value is given as usual by the account data so that this module is " -"perfectly compatible with older configurations.\n" -"\n" -" " -msgstr "" -"\n" -"\n" -" Este módulo le permite definir el porcentaje de facturación para un " -"cierto diario en una cuenta dada. Se utiliza principalmente cuando un " -"usuario codifica su hoja de servicios: los valores son recuperados y los " -"campos son auto rellenados aunque la posibilidad de cambiar estos valores " -"está todavía disponible.\n" -"\n" -" Obviamente si no se ha guardado datos para la cuenta actual, se " -"proporciona el valor por defecto para los datos de la cuenta como siempre " -"por lo que este módulo es perfectamente compatible con configuraciones " -"anteriores.\n" -"\n" -" " - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Diario analítico" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Factura" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Tasa de facturación por diario para esta cuenta analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Cuenta analítica" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabla de relación entre diarios y tasas de facturación" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Tasa de facturación por diario" - -#. module: analytic_journal_billing_rate -#: model:ir.module.module,shortdesc:analytic_journal_billing_rate.module_meta_information -msgid "" -"Analytic Journal Billing Rate, Define the default invoicing rate for a " -"specific journal" -msgstr "" -"Tasa de facturación de un diario analítico. Define la tasa de facturación " -"por defecto para un diario en concreto." - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "" -"Error! The currency has to be the same as the currency of the selected " -"company" -msgstr "" -"¡Error! La divisa tiene que ser la misma que la establecida en la compañía " -"seleccionada" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Tasa de facturación" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "¡Error! No puede crear cuentas analíticas recursivas." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Línea hoja de servicios" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML inválido para la definición de la vista!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " -#~ "especial!" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Tasa facturación diario analítico" diff --git a/addons/analytic_journal_billing_rate/i18n/es_PY.po b/addons/analytic_journal_billing_rate/i18n/es_PY.po deleted file mode 100644 index 3cb80026dca..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/es_PY.po +++ /dev/null @@ -1,121 +0,0 @@ -# Spanish (Paraguay) translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-03-07 23:16+0000\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: Spanish (Paraguay) <es_PY@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Diario analítico" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Tasa de facturación por diario para esta cuenta analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Cuenta Analítica" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabla de relación entre diarios y tasas de facturación" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Tasa de facturación por diario" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Factura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Tasa de facturación" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "¡Error! No puede crear cuentas analíticas recursivas." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Línea hoja de servicios" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Tasa de facturación diario analítico. Define la tasa de facturación por " -#~ "defecto para un diario en concreto." - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "¡Error! La moneda debe ser la misma que la moneda de la compañía seleccionada" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Este módulo le permite definir el porcentaje de facturación para un " -#~ "cierto diario en una cuenta dada. Se utiliza principalmente cuando un " -#~ "usuario codifica su hoja de servicios: los valores son recuperados y los " -#~ "campos son auto rellenados aunque la posibilidad de cambiar estos valores " -#~ "está todavía disponible.\n" -#~ "\n" -#~ " Obviamente si no se ha guardado datos para la cuenta actual, se " -#~ "proporciona el valor por defecto para los datos de la cuenta como siempre " -#~ "por lo que este módulo es perfectamente compatible con configuraciones " -#~ "anteriores.\n" -#~ "\n" -#~ " " diff --git a/addons/analytic_journal_billing_rate/i18n/es_VE.po b/addons/analytic_journal_billing_rate/i18n/es_VE.po deleted file mode 100644 index be708d5fbe7..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/es_VE.po +++ /dev/null @@ -1,124 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2011-01-03 16:56+0000\n" -"PO-Revision-Date: 2011-01-11 10:47+0000\n" -"Last-Translator: Borja López Soilán (NeoPolus) <borjalopezsoilan@gmail.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:37+0000\n" -"X-Generator: Launchpad (build 13830)\n" - -#. module: analytic_journal_billing_rate -#: model:ir.module.module,description:analytic_journal_billing_rate.module_meta_information -msgid "" -"\n" -"\n" -" This module allows you to define what is the default invoicing rate for " -"a specific journal on a given account. This is mostly used when a user " -"encodes his timesheet: the values are retrieved and the fields are auto-" -"filled... but the possibility to change these values is still available.\n" -"\n" -" Obviously if no data has been recorded for the current account, the " -"default value is given as usual by the account data so that this module is " -"perfectly compatible with older configurations.\n" -"\n" -" " -msgstr "" -"\n" -"\n" -" Este módulo le permite definir el porcentaje de facturación para un " -"cierto diario en una cuenta dada. Se utiliza principalmente cuando un " -"usuario codifica su hoja de servicios: los valores son recuperados y los " -"campos son auto rellenados aunque la posibilidad de cambiar estos valores " -"está todavía disponible.\n" -"\n" -" Obviamente si no se ha guardado datos para la cuenta actual, se " -"proporciona el valor por defecto para los datos de la cuenta como siempre " -"por lo que este módulo es perfectamente compatible con configuraciones " -"anteriores.\n" -"\n" -" " - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Diario analítico" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Factura" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Tasa de facturación por diario para esta cuenta analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Cuenta analítica" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabla de relación entre diarios y tasas de facturación" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Tasa de facturación por diario" - -#. module: analytic_journal_billing_rate -#: model:ir.module.module,shortdesc:analytic_journal_billing_rate.module_meta_information -msgid "" -"Analytic Journal Billing Rate, Define the default invoicing rate for a " -"specific journal" -msgstr "" -"Tasa de facturación de un diario analítico. Define la tasa de facturación " -"por defecto para un diario en concreto." - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "" -"Error! The currency has to be the same as the currency of the selected " -"company" -msgstr "" -"¡Error! La divisa tiene que ser la misma que la establecida en la compañía " -"seleccionada" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Tasa de facturación" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "¡Error! No puede crear cuentas analíticas recursivas." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Línea hoja de servicios" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML inválido para la definición de la vista!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " -#~ "especial!" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Tasa facturación diario analítico" diff --git a/addons/analytic_journal_billing_rate/i18n/et.po b/addons/analytic_journal_billing_rate/i18n/et.po deleted file mode 100644 index 73bc7debeac..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/et.po +++ /dev/null @@ -1,86 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-11-09 16:30+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Analüütiline päevik" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Arve esitamise määr päeviku kohta sellel analüütilisel kontol" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analüütiline konto" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Seoste tabel päevikute ja arve esitamise määrade vahel" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Arveldamise määr päeviku kohta" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Arveldamise määr" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Vigane XML vaate arhitektuurile!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Objekti nimi peab algama x_'ga ja ei tohi sisaldada ühtegi erisümbolit !" diff --git a/addons/analytic_journal_billing_rate/i18n/fa.po b/addons/analytic_journal_billing_rate/i18n/fa.po deleted file mode 100644 index d3f1924359b..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/fa.po +++ /dev/null @@ -1,79 +0,0 @@ -# Persian translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-12-18 17:01+0000\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: Persian <fa@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" diff --git a/addons/analytic_journal_billing_rate/i18n/fi.po b/addons/analytic_journal_billing_rate/i18n/fi.po deleted file mode 100644 index fb9cce2592e..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/fi.po +++ /dev/null @@ -1,91 +0,0 @@ -# Finnish translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-08-08 07:40+0000\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: Finnish <fi@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Analyyttinen päiväkirja" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Veloitushinta päiväkirjoittain tälle analyyttiselle tilille" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analyyttinen tili" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Suhdetaulu päiväkirjojen ja veloituhintojen välillä" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Veloitushinta päiväkirjoittain" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Lasku" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Laskutushinta" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Virhe! Et voi luoda sisäkkäisiä analyyttisiä tilejä." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Tuntilistan rivi" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "Virhe! Valuutan tulee olla sama kun valitun yrityksen valutta." - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Analyyttisen päiväkirjan veloitushinta, määrittele oletushinta tietylle " -#~ "päiväkirjalle" diff --git a/addons/analytic_journal_billing_rate/i18n/fr.po b/addons/analytic_journal_billing_rate/i18n/fr.po deleted file mode 100644 index 60d66e52b74..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/fr.po +++ /dev/null @@ -1,133 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-01-18 16:44+0000\n" -"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " -"<maxime.chambreuil@savoirfairelinux.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Journal Analytique" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Taux de Facturation par Journal pour ce Compte Analytique" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Compte Analytique" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tableau de Relations entre les journaux et les taux de Facturations" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Taux de Facturation par Journal" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Facture" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Taux de Facturation" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Erreur ! Vous ne pouvez pas créer de comptes analytiques récursifs." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Ligne de prestation" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML non valide pour l'architecture de la vue" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Le nom de l'objet doit commencer avec x_ et ne pas contenir de charactères " -#~ "spéciaux !" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Taux de Facturation des Journaux Analytiques" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Taux de facturation par journal analytique. Définir le taux de facturation " -#~ "par défaut pour un journal donné" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "Erreur ! La monnaie doit être la même que la monnaie de la société " -#~ "sélectionnée" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Ce module vous permet de définir quel est le taux de facturation par " -#~ "défaut pour un journal spécifique et pour un compte donné. Ceci est surtout " -#~ "utilisé quand un utilisateur saisit sa feuille de temps : les valeurs sont " -#~ "récupérées et les champs sont automatiquement remplis... mais la possibilité " -#~ "de changer ces valeurs est toujours disponible.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " diff --git a/addons/analytic_journal_billing_rate/i18n/gl.po b/addons/analytic_journal_billing_rate/i18n/gl.po deleted file mode 100644 index 9a2ac1d8a96..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/gl.po +++ /dev/null @@ -1,132 +0,0 @@ -# translation of analytic-journal-billing-rate-es.po to Galego -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -# Frco. Javier Rial Rodríguez <fjrial@cesga.es>, 2009. -msgid "" -msgstr "" -"Project-Id-Version: analytic-journal-billing-rate-es\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-02-07 10:37+0000\n" -"Last-Translator: Alberto Luengo Cabanillas (Pexego) <alberto@pexego.es>\n" -"Language-Team: Galego <g11n@mancomun.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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Diario analítico" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Taxa de facturación por diario para esta conta analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Conta analítica" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Táboa de relación entre diarios e taxas de facturación" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Taxa de facturación por diario" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Factura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Taxa de facturación" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "¡Erro! Non pode crear contas analíticas recorrentes." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Liña de parte de horas" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "¡XML non válido para a definición da vista!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "¡O nome do obxecto debe comezar con x_ y e non conter ningún carácter " -#~ "especial!" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Taxa facturación diario analítico" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Taxa Analítico de Diario de Facturación, Define o taxa de facturación por " -#~ "defecto para un diario específico" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "¡Erro! A divisa ten que se-la mesma ca da compañía seleccionada" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Este módulo permítelle establecer cal é a taxa de facturación por " -#~ "defecto para un diario específico nunha determinada conta. Isto é usado " -#~ "sobre todo cando un usuario cubre o seu parte de horas: os valores son " -#~ "recuperados e os campos son cubertos automáticamente... pero a posibilidade " -#~ "de modificar estes valores aínda está dispoñible.\n" -#~ "\n" -#~ " Por suposto, se ningún dato foi rexistrado para a conta actual, o valor " -#~ "por defecto é dado como de costume polos datos da conta para que este módulo " -#~ "sexa perfectamente compatible coas configuracións máis antigas.\n" -#~ "\n" -#~ " " diff --git a/addons/analytic_journal_billing_rate/i18n/gu.po b/addons/analytic_journal_billing_rate/i18n/gu.po deleted file mode 100644 index c8034ae4d0c..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/gu.po +++ /dev/null @@ -1,79 +0,0 @@ -# Gujarati translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-03-06 18:22+0000\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: Gujarati <gu@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-03-07 05:13+0000\n" -"X-Generator: Launchpad (build 14907)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "વિશ્લેષણાત્મક ખાતું" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "ત્રુટિ! તમે અંદરોઅંદર વિશ્લેષણાત્મક ખાતાઓ ન બનાવી શકો." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" diff --git a/addons/analytic_journal_billing_rate/i18n/hr.po b/addons/analytic_journal_billing_rate/i18n/hr.po deleted file mode 100644 index 0962c52b6f7..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/hr.po +++ /dev/null @@ -1,83 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-12-08 15:46+0000\n" -"Last-Translator: Goran Kliska <gkliska@gmail.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Dnevnik analitike" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Stupanj naplate po temeljnici za ovaj analitički račun" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analitički konto" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Relacijska tablica između temeljnica i stupnjeva naplate" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Račun" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Greška! Ne možete kreirati rekurzivna analitička konta." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "Greška! Valuta ne odgovara valuti organizacije." diff --git a/addons/analytic_journal_billing_rate/i18n/hu.po b/addons/analytic_journal_billing_rate/i18n/hu.po deleted file mode 100644 index a2c566dbf22..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/hu.po +++ /dev/null @@ -1,119 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-01-30 18:59+0000\n" -"Last-Translator: NOVOTRADE RENDSZERHÁZ ( novotrade.hu ) " -"<openerp@novotrade.hu>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Gyűjtőnapló" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "A gyűjtőkód naplónkénti számlázási rátája" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Gyűjtőkód" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Naplók és számlázási ráták közötti kapcsolati tábla" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Naplónkénti számlázási ráta" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Számla" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Számlázási ráta" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Hiba! Nem hozhat létre rekurzív gyűjtőkódokat." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Munkaidő-kimutatás sora" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "Hiba! A pénznemnek meg kell egyeznie a kiválasztott vállalat pénznemével." - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Ez a modul lehetővé teszi annak meghatározását, hogy mi a gyűjtőkód " -#~ "naplójának alapértelmezett számlázási rátája. Leginkább akkor használják, " -#~ "amikor a felhasználó berögzíti a munkaidő-kimutatását: az értékek feljönnek " -#~ "és a mezők automatikusan kitöltődnek... De ezeket az értékeket meg lehet " -#~ "változtatni.\n" -#~ "\n" -#~ " Nyilvánvalóan, ha az aktuális gyűjtőkódra nem vittek be adatot, az " -#~ "alapértelmezett érték a könyvelési adatokból kerül meghatározásra.\n" -#~ "\n" -#~ " " - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Gyűjtőnapló számlázási ráta. Az adott naplóra meghatározza az " -#~ "alapértelmezett számlázási rátát." diff --git a/addons/analytic_journal_billing_rate/i18n/id.po b/addons/analytic_journal_billing_rate/i18n/id.po deleted file mode 100644 index 3c4bc6239f9..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/id.po +++ /dev/null @@ -1,86 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-08-03 00:27+0000\n" -"Last-Translator: Mantavya Gajjar (Open ERP) <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Jurnal Analisis" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Akun Analisis" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML tidak sah untuk Menampilkan Arsitektur!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Nama Objek harus berawalan dengan x_ dan tidak mengandung karakter khusus !" diff --git a/addons/analytic_journal_billing_rate/i18n/it.po b/addons/analytic_journal_billing_rate/i18n/it.po deleted file mode 100644 index adb466b3f0b..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/it.po +++ /dev/null @@ -1,97 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-01-17 20:25+0000\n" -"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Giornale conti analitici" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Tasso di fatturazione per Giornale per questo Conto Analitico" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Conto analitico" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabella di relazione tra Giornali e tassi di fatturazione" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Tasso di fatturazione diviso per Giornale" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Fattura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Tasso di fatturazione" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Errore! Non è possibile creare conti analitici ricorsivi." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Linea del Timesheet" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Il nome dell'oggetto deve iniziare per x_ e non deve contenere caratteri " -#~ "speciali!" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML non valido per Visualizzare l'architettura!" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Giornale Conti Analitici Tasso di fatturazione" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "Errore! La valuta deve essere la stessa di quella impostata nell'azienda " -#~ "selezionata" diff --git a/addons/analytic_journal_billing_rate/i18n/ja.po b/addons/analytic_journal_billing_rate/i18n/ja.po deleted file mode 100644 index a61b0106483..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/ja.po +++ /dev/null @@ -1,79 +0,0 @@ -# Japanese translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-04-26 08:50+0000\n" -"Last-Translator: Tomomi Mengelberg <tomomi.mengelberg@aquasys.co.jp>\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-04-27 04:38+0000\n" -"X-Generator: Launchpad (build 15149)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "請求書番号は会社ごとに固有である必要があります。" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "分析仕訳帳" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "無効なBBA(ブロードバンドアクセス)構造の通信" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "この分析アカウントの仕訳ごとの請求割合" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "分析アカウント" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "仕訳帳と請求割合の関連表" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "仕訳ごとの請求割合" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "請求書" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "確認済み/完了した勤務表の記入項目を変更することはできません。" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "請求割合" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "エラー。反復した分析アカウントを作成することはできません。" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "勤務表の行" diff --git a/addons/analytic_journal_billing_rate/i18n/ko.po b/addons/analytic_journal_billing_rate/i18n/ko.po deleted file mode 100644 index d6bffd7b370..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/ko.po +++ /dev/null @@ -1,89 +0,0 @@ -# Korean translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-09-08 14:10+0000\n" -"Last-Translator: ekodaq <ceo@ekosdaq.com>\n" -"Language-Team: Korean <ko@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "분석 저널" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "이 분석 계정을 위한 저널 당 청구 비율" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "분석 계정" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "저널과 청구 비율 간의 관계" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "저널 당 인보이스 비율" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "청구 비율" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "분석 저널 청구 비율" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "오브젝트 이름은 x_로 시작해야 하며, 특수 문자를 포함하면 안 됩니다 !" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "유효하지 않은 뷰 아키텍처를 위한 XML !" diff --git a/addons/analytic_journal_billing_rate/i18n/lt.po b/addons/analytic_journal_billing_rate/i18n/lt.po deleted file mode 100644 index 05afa024123..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/lt.po +++ /dev/null @@ -1,78 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-09-08 14:43+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" diff --git a/addons/analytic_journal_billing_rate/i18n/lv.po b/addons/analytic_journal_billing_rate/i18n/lv.po deleted file mode 100644 index 01b645557dd..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/lv.po +++ /dev/null @@ -1,79 +0,0 @@ -# Latvian translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-05-28 13:45+0000\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: Latvian <lv@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-05-29 04:46+0000\n" -"X-Generator: Launchpad (build 15316)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" diff --git a/addons/analytic_journal_billing_rate/i18n/mn.po b/addons/analytic_journal_billing_rate/i18n/mn.po deleted file mode 100644 index 3d59865b775..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/mn.po +++ /dev/null @@ -1,79 +0,0 @@ -# Mongolian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-12-21 14:39+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" -"Language-Team: Mongolian <mn@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Аналитик Данс" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Нэхэмжлэл" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Алдаа! Та цикл хэлбэрийн аналитик данс үүсгэх боломжгүй." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Цаг бүртгэлийн мөр" diff --git a/addons/analytic_journal_billing_rate/i18n/nl.po b/addons/analytic_journal_billing_rate/i18n/nl.po deleted file mode 100644 index dee199ddb49..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/nl.po +++ /dev/null @@ -1,132 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-02-13 15:06+0000\n" -"Last-Translator: Erwin <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-14 05:45+0000\n" -"X-Generator: Launchpad (build 14781)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "Factuurnummer moet uniek zijn per bedrijf!" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Analytisch dagboek" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "Ongeldige BBA gestructureerde communicatie!" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Doorbelastingsfactor per dagboek voor deze kostenplaats" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Kostenplaats" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Koppelingstabel tussen dagboeken en doorbelastingsfactoren" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Facturerings factor per dagboek" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Factuur" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" -"Het is niet mogelijk een bevestigde/Gereed zijnde boeking van een urenstaat " -"te wijzigen!" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Facturerings factor" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Fout! U kunt geen recursieve kostenplaatsen maken." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Urenstaatregel" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Analytisch dagboek factureringstarief" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "De objectnaam moet beginnen met x_ en mag geen speciale tekens bevatten!" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Ongeldige XML, kan overzicht niet weergeven!" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Kostenplaats dagboek facturatie factor, definieert de standaard facturatie " -#~ "tarief voor een specifiek dagboek" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "Fout! De munteenheid moet hetzelfde zijn als de munteenheid van het " -#~ "geselecteerde bedrijf" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Deze module laat u standaard factuurtarief voor een specifiek dagboek op " -#~ "een gegeven rekening. Dit wordt meestal gebruikt bij het invullen van " -#~ "urenstaten: de waardes worden opgehaald en automatisch ingevuld... met de " -#~ "mogelijkheid hiervan af te wijken.\n" -#~ "\n" -#~ " Natuurlijk wordt bij het ontbreken ervan bij de huidige rekening, de " -#~ "standaard waarde als gebruikelijk bepaald uit de rekening gegevens zodat de " -#~ "module perfect compatibel blijft met oudere configuraties.\n" -#~ "\n" -#~ " " diff --git a/addons/analytic_journal_billing_rate/i18n/nl_BE.po b/addons/analytic_journal_billing_rate/i18n/nl_BE.po deleted file mode 100644 index cd33100480d..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/nl_BE.po +++ /dev/null @@ -1,83 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.0\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-04-24 15:45+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !" diff --git a/addons/analytic_journal_billing_rate/i18n/oc.po b/addons/analytic_journal_billing_rate/i18n/oc.po deleted file mode 100644 index 83be8512443..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/oc.po +++ /dev/null @@ -1,88 +0,0 @@ -# Occitan (post 1500) translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-08-03 00:30+0000\n" -"Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n" -"Language-Team: Occitan (post 1500) <oc@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Jornal analitic" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Compte Analitic" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML invalid per l'arquitectura de la vista" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Lo nom de l'objècte deu començar amb x_ e conténer pas de caractèrs " -#~ "especials !" diff --git a/addons/analytic_journal_billing_rate/i18n/pl.po b/addons/analytic_journal_billing_rate/i18n/pl.po deleted file mode 100644 index a5475a40063..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/pl.po +++ /dev/null @@ -1,90 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-11-17 09:13+0000\n" -"Last-Translator: Mariusz Bednarz <mbednarz@bedmar.pl>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Dziennik analityczny" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Stawki rozliczeniowe na Dziennik dla konta analitycznego" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Konto analityczne" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabela relacji między dziennikiem a stawkami rozliczeniowymi" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Faktura w dzienniku" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Faktura" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML niewłaściwy dla tej architektury wyświetlania!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Nazwa obiektu musi zaczynać się od x_ oraz nie może zawierać znaków " -#~ "specjalnych !" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Stawki rozliczeniowe dziennika analitycznego" diff --git a/addons/analytic_journal_billing_rate/i18n/pt.po b/addons/analytic_journal_billing_rate/i18n/pt.po deleted file mode 100644 index 5d6ee807e34..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/pt.po +++ /dev/null @@ -1,90 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-12-16 05:42+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Diário Analítico" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Taxa de Facturação por Diário para esta Conta Analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Conta Analítica" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabela de Relação entre diários e taxas de facturação" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Taxa de facturação por diário" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Fatura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Taxa de Facturação" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Erro! Não pode criar contas analíticas recursivamente" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML Inválido para a Arquitectura de Vista !" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "O nome do Objecto deve começar com x_ e não pode conter nenhum carácter " -#~ "especial !" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Diário Analítico da Taxa de Faturação" diff --git a/addons/analytic_journal_billing_rate/i18n/pt_BR.po b/addons/analytic_journal_billing_rate/i18n/pt_BR.po deleted file mode 100644 index ca814e34f35..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/pt_BR.po +++ /dev/null @@ -1,92 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-01-19 20:12+0000\n" -"Last-Translator: Emerson <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Diário Analítico" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Taxa de Cobrança por Diário para esta Conta Analítica" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Conta Analítica" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabela de relação entre diários e taxas de cobrança" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Taxa de Faturamento por Diário" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Fatura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Taxa de Faturamento" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Erro! Você não pode criar contas analíticas recursivas" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Linha de Apontamento de Horas" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Invalido XML para Arquitetura da View" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "O nome do objeto precisa iniciar com x_ e não conter nenhum caracter " -#~ "especial!" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "Erro! A moeda deve ser a mesma da empresa selecionada" diff --git a/addons/analytic_journal_billing_rate/i18n/ro.po b/addons/analytic_journal_billing_rate/i18n/ro.po deleted file mode 100644 index 18b684c8b7c..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/ro.po +++ /dev/null @@ -1,131 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-08-03 00:33+0000\n" -"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Jurnal analitic" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Rată facturare per jurnal pentru acest cont analitic" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Cont analitic" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabel de relaţii între jurnale şi ratele de facturare" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Rată facturare per jurnal" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Factură" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Rată facturare" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Eroare! Nu puteti crea conturi analitice recursive." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Linie foaie de pontaj" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Numele obiectului trebuie să înceapă cu x_ şi să nu conţină nici un caracter " -#~ "special !" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Jurnal analitic rată de facturare" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "XML invalid pentru arhitectura machetei de afișare !" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "" -#~ "Eroare! Moneda trebuie sa fie aceeasi ca si moneda companiei selectate" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Rata de facturare in Jurnalul analitic, Definiti rata predefinita de " -#~ "facturare pentru un anumit jurnal" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Acest modul va permite sa definiti rata implicita de facturare pentru un " -#~ "anumit jurnal intr-un cont dat. Acesta este folosit mai ales atunci cand un " -#~ "utilizator isi codeaza propria foaie de pontaj: valorile sunt recuperate, " -#~ "iar campurile sunt completate automat... dar inca aveti posibilitatea de a " -#~ "modifica aceste valori.\n" -#~ "\n" -#~ "Este evident faptul ca, daca nu au fost inregistrate date pentru contul " -#~ "curent, valoarea default este data de obicei de datele contului, astfel ca " -#~ "acest modul este perfect compatibil cu configurarile mai vechi.\n" -#~ "\n" -#~ " " diff --git a/addons/analytic_journal_billing_rate/i18n/ru.po b/addons/analytic_journal_billing_rate/i18n/ru.po deleted file mode 100644 index 01e13b33fcd..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/ru.po +++ /dev/null @@ -1,92 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-08-03 00:33+0000\n" -"Last-Translator: Mantavya Gajjar (Open ERP) <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Книга аналитики" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Счет аналитического учета" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Счет" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Скорость выставления счета" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Ошибка! Вы не можете создавать рекурсивные аналитический счета." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Строка табеля" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Неправильный XML для просмотра архитектуры!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Название объекта должно начинаться с x_ и не должно содержать специальных " -#~ "символов !" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "Ошибка! Валюта должна совпадать с валютой выбранной компании" diff --git a/addons/analytic_journal_billing_rate/i18n/sl.po b/addons/analytic_journal_billing_rate/i18n/sl.po deleted file mode 100644 index da15537789b..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/sl.po +++ /dev/null @@ -1,94 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-12-16 18:05+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Analitični dnevnik" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Tarifa zaračunavanja po dnevnikih za ta analitični konto" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analitični konto" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabela odnosov med dnevniki in tarifami zaračunavanja" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Fakturna stopnja za dnevnik" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Račun" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Fakturna stopnja" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Napaka! Ne morete kreirati rekurzivnih analitičnih kontov." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Postavka časovnice" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Naziv objekta se mora začeti z 'x_' in ne sme vsebovati posebnih znakov." - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Tarifa zaračunavanja analitičnega dnevnika" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Neveljaven XML za arhitekturo pogleda!" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "Napaka! Valuta mora biti enaka kot valuta izbranega podjetja" diff --git a/addons/analytic_journal_billing_rate/i18n/sq.po b/addons/analytic_journal_billing_rate/i18n/sq.po deleted file mode 100644 index f907979e379..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/sq.po +++ /dev/null @@ -1,79 +0,0 @@ -# Albanian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-08-02 14:40+0000\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: Albanian <sq@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" diff --git a/addons/analytic_journal_billing_rate/i18n/sr.po b/addons/analytic_journal_billing_rate/i18n/sr.po deleted file mode 100644 index 7d6baf67750..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/sr.po +++ /dev/null @@ -1,97 +0,0 @@ -# Serbian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-10-27 08:06+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" -"Language-Team: Serbian <sr@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Analiticki Dnevnik" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Stepen naplate po Dnevniku za ovaj Analiticki Konto" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analitički konto" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Relaciona tabela izmedju dnevnika i stepena naplate" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Stepen fakturiranja po Dnevniku" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Faktura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Fakturisanje cene" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Timesheet Linija" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Analiticki Dnevnik obracunate cene" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Nevažeći XML za pregled arhitekture" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Analiticki Dnevnik Obracunate rate, definise podrazumevanu fakturnu vrednost " -#~ "za specificni dnevnik" diff --git a/addons/analytic_journal_billing_rate/i18n/sr@latin.po b/addons/analytic_journal_billing_rate/i18n/sr@latin.po deleted file mode 100644 index 91eda48bf01..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/sr@latin.po +++ /dev/null @@ -1,104 +0,0 @@ -# Serbian latin translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2011-12-27 15:53+0000\n" -"Last-Translator: Milan Milosevic <Unknown>\n" -"Language-Team: Serbian latin <sr@latin@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "Broj fakture mora biti jedinstven po kompaniji" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Analitički dnevnik" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "Nepravilno BBA struktuirana komunikacija !" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Stepen naplate po Dnevniku za ovaj Analitički Konto" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analitički konto" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Tabela odnosa između dnevnika i stepenova naplate" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Stepen fakturiranja po Dnevniku" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Faktura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" -"Ne možete izmeniti unos u kontrolnoj kartici obeleženim kao " -"Potvrđenim/Završenim" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Stepen fakturisanja" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Greška! Ne možete praviti rekurzivne analitičke naloge." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Niz kontrolne kartice" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Nevažeći XML za pregled arhitekture" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Analiticki Dnevnik Obracunate rate, definise podrazumevanu fakturnu vrednost " -#~ "za specificni dnevnik" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Analiticki Dnevnik obracunate cene" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "Greška! Valuta mora biti ista kao i valuta izabranog preduzeća" diff --git a/addons/analytic_journal_billing_rate/i18n/sv.po b/addons/analytic_journal_billing_rate/i18n/sv.po deleted file mode 100644 index 28c03b9dbfa..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/sv.po +++ /dev/null @@ -1,89 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.14\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-12-23 04:55+0000\n" -"Last-Translator: OpenERP Administrators <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Analysjournal" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analys konto" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Faktura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Fel! Du kan inte skapa rekursiva analyskonton." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Tidrapportrad" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Objektnamnet måste börja med x_ och får inte innehålla några specialtecken!" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Felaktig XML för Vyarkitektur!" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "Analytic Journal Billing Rate" diff --git a/addons/analytic_journal_billing_rate/i18n/tlh.po b/addons/analytic_journal_billing_rate/i18n/tlh.po deleted file mode 100644 index a0eaa131125..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/tlh.po +++ /dev/null @@ -1,78 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev_rc3\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-02-03 06:24+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" diff --git a/addons/analytic_journal_billing_rate/i18n/tr.po b/addons/analytic_journal_billing_rate/i18n/tr.po deleted file mode 100644 index 95977462f5a..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/tr.po +++ /dev/null @@ -1,121 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-01-25 00:10+0000\n" -"Last-Translator: Ahmet Altınışık <Unknown>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "Fatura Numarası Her Şirkette Tekil Olmalı!" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "Yevmiye Analizi" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "Geçersiz BBA Yapılı İletişim !" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "Bu Analiz Hesabına ait her yevmiyenin Ödem Oranı" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "Analiz Hesabı" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "Ödeme oranı ve yevmiyeler arası ilişki tablosu" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "Her yevmiye için faturalama oranı" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "Fatura" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" -"Onaylandı/Tamanlandı durumundaki zaman çizelgesini değiştiremezsiniz !." - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "Faturalama Oranı" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "Hata! Yinelenen analiz hesabı oluşturamazsınız." - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "Zaman Çizelgesi Satırı" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Görüntüleme mimarisi için Geçersiz XML" - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "Hata! Para birimi seçilen firmanın para birimiyle aynı olmalı" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " Bu modül verilen bir hesapta belirli bir yevmiye için varsayılan " -#~ "faturalama oranını tanımlar. Bu ençok bir kullanıcı zaman çizelgesi " -#~ "kodlarken kullanılır: Değerler alınır ve alanlar otomatik doldurulur... ama " -#~ "bu değerleri değiştirebilme olanağı henüz yoktur.\n" -#~ "\n" -#~ " Açıkçası geçerli hesap için bilgi kayıt edilmemişse, varsayılan değer " -#~ "olağan şekilde hesap verisi tarafından verilir ki; bu da mbu modülün eski " -#~ "yapılandırmayla uyumlu olduğunu gösterir.\n" -#~ "\n" -#~ " " - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "" -#~ "Analitik Yevmiye Ödeme Oranı, belirli bir yevmiye için varsayılan faturalama " -#~ "oranı tanımlayın." diff --git a/addons/analytic_journal_billing_rate/i18n/uk.po b/addons/analytic_journal_billing_rate/i18n/uk.po deleted file mode 100644 index cc467dce71d..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/uk.po +++ /dev/null @@ -1,86 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-09-08 13:49+0000\n" -"Last-Translator: Eugene Babiy <eugene.babiy@gmail.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Неправильний XML для Архітектури Вигляду!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Назва об'єкту має починатися з x_ і не містити ніяких спеціальних символів!" diff --git a/addons/analytic_journal_billing_rate/i18n/vi.po b/addons/analytic_journal_billing_rate/i18n/vi.po deleted file mode 100644 index 8c4d2e41175..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/vi.po +++ /dev/null @@ -1,79 +0,0 @@ -# Vietnamese translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2010-08-02 14:40+0000\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: Vietnamese <vi@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-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" diff --git a/addons/analytic_journal_billing_rate/i18n/zh_CN.po b/addons/analytic_journal_billing_rate/i18n/zh_CN.po deleted file mode 100644 index a06d9d0c4e5..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/zh_CN.po +++ /dev/null @@ -1,118 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-02-09 15:22+0000\n" -"Last-Translator: Jeff Wang <wjfonhand@hotmail.com>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-10 04:49+0000\n" -"X-Generator: Launchpad (build 14771)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "发票号必须在公司范围内唯一" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "辅助核算账薄" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "BBA传输结构有误!" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "这辅助核算项每个账簿的开单税率" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "辅助核算项" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "账簿和开票税率的关系表" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "每个账簿的开票税率" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "发票" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "已经确认和完成的计工单行不能修改!" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "开票税率" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "错误! 你不能创建递归的辅助核算项" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "计工单明细" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "无效XML视图结构!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "对象名称必须以“x_”开头且不能包含任何特殊字符!" - -#~ msgid "Analytic Journal Billing Rate" -#~ msgstr "辅助核算集合的开票税率" - -#~ msgid "" -#~ "Analytic Journal Billing Rate, Define the default invoicing rate for a " -#~ "specific journal" -#~ msgstr "辅助核算账簿的开票税率,为特定辅助核算账簿定义默认开票税率。" - -#~ msgid "" -#~ "\n" -#~ "\n" -#~ " This module allows you to define what is the default invoicing rate for " -#~ "a specific journal on a given account. This is mostly used when a user " -#~ "encodes his timesheet: the values are retrieved and the fields are auto-" -#~ "filled... but the possibility to change these values is still available.\n" -#~ "\n" -#~ " Obviously if no data has been recorded for the current account, the " -#~ "default value is given as usual by the account data so that this module is " -#~ "perfectly compatible with older configurations.\n" -#~ "\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ "\n" -#~ " 这模块允许您定义辅助核算项目的指定账簿的默认开票税率,这主要用在用户记工单:这值自动检索和填上。。但可以修改。\n" -#~ "\n" -#~ " " - -#~ msgid "" -#~ "Error! The currency has to be the same as the currency of the selected " -#~ "company" -#~ msgstr "错误!此币别必须是选定公司的默认币别。" diff --git a/addons/analytic_journal_billing_rate/i18n/zh_TW.po b/addons/analytic_journal_billing_rate/i18n/zh_TW.po deleted file mode 100644 index a7aee6f1a57..00000000000 --- a/addons/analytic_journal_billing_rate/i18n/zh_TW.po +++ /dev/null @@ -1,78 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * analytic_journal_billing_rate -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2009-01-23 16:16+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n" -"X-Generator: Launchpad (build 14763)\n" - -#. module: analytic_journal_billing_rate -#: sql_constraint:account.invoice:0 -msgid "Invoice Number must be unique per Company!" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,journal_id:0 -msgid "Analytic Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.invoice:0 -msgid "Invalid BBA Structured Communication !" -msgstr "" - -#. module: analytic_journal_billing_rate -#: view:analytic_journal_rate_grid:0 -msgid "Billing Rate per Journal for this Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,account_id:0 -#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account -msgid "Analytic Account" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid -msgid "Relation table between journals and billing rates" -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:account.analytic.account,journal_rate_ids:0 -msgid "Invoicing Rate per Journal" -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice -msgid "Invoice" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:hr.analytic.timesheet:0 -msgid "You cannot modify an entry in a Confirmed/Done timesheet !." -msgstr "" - -#. module: analytic_journal_billing_rate -#: field:analytic_journal_rate_grid,rate_id:0 -msgid "Invoicing Rate" -msgstr "" - -#. module: analytic_journal_billing_rate -#: constraint:account.analytic.account:0 -msgid "Error! You can not create recursive analytic accounts." -msgstr "" - -#. module: analytic_journal_billing_rate -#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet -msgid "Timesheet Line" -msgstr "" diff --git a/addons/analytic_journal_billing_rate/security/ir.model.access.csv b/addons/analytic_journal_billing_rate/security/ir.model.access.csv deleted file mode 100644 index b4a604b2362..00000000000 --- a/addons/analytic_journal_billing_rate/security/ir.model.access.csv +++ /dev/null @@ -1,4 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_analytic_journal_rate_user,analytic journal rate user,model_analytic_journal_rate_grid,account.group_account_manager,1,0,0,0
-access_analytic_journal_rate_manager,analytic journal rate manager,model_analytic_journal_rate_grid,account.group_account_manager,1,1,1,1
-access_analytic_journal_rate_account_manager,analytic journal rateaccount manager,model_analytic_journal_rate_grid,account.group_account_manager,1,1,1,1
diff --git a/addons/analytic_user_function/analytic_user_function_view.xml b/addons/analytic_user_function/analytic_user_function_view.xml index d14ed977776..524f0310401 100644 --- a/addons/analytic_user_function/analytic_user_function_view.xml +++ b/addons/analytic_user_function/analytic_user_function_view.xml @@ -32,7 +32,7 @@ <field name="name">account.analytic.account.form</field> <field name="model">account.analytic.account</field> <field name="type">form</field> - <field name="inherit_id" ref="account.view_account_analytic_account_form"/> + <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/> <field name="arch" type="xml"> <xpath expr="//notebook/page" position="after"> <page string="Users/Products Rel."> diff --git a/addons/auth_openid/controllers/main.py b/addons/auth_openid/controllers/main.py index af30566a643..0ee7f98a020 100644 --- a/addons/auth_openid/controllers/main.py +++ b/addons/auth_openid/controllers/main.py @@ -44,8 +44,8 @@ from .. import utils -_logger = logging.getLogger('web.auth_openid') -oidutil.log = logging.getLogger('openid').debug +_logger = logging.getLogger(__name__) +oidutil.log = _logger.debug class GoogleAppsAwareConsumer(consumer.GenericConsumer): diff --git a/addons/base_crypt/crypt.py b/addons/base_crypt/crypt.py index 9b91f7d3108..8a9d1ac1dc7 100644 --- a/addons/base_crypt/crypt.py +++ b/addons/base_crypt/crypt.py @@ -42,8 +42,10 @@ from osv import fields,osv import pooler from tools.translate import _ from service import security +import logging magic_md5 = '$1$' +_logger = logging.getLogger(__name__) def gen_salt( length=8, symbols=ascii_letters + digits ): seed() @@ -179,8 +181,7 @@ class users(osv.osv): cr = pooler.get_db(db).cursor() return self._login(cr, db, login, password) except Exception: - import logging - logging.getLogger('netsvc').exception('Could not authenticate') + _logger.exception('Could not authenticate') return Exception('Access Denied') finally: if cr is not None: diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/logreport.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/logreport.py index 2aab8596862..42198337450 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/logreport.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/logreport.py @@ -27,21 +27,20 @@ LOG_INFO='info' LOG_WARNING='warn' LOG_ERROR='error' LOG_CRITICAL='critical' +_logger = logging.getLogger(__name__) def log_detail(self): import os - logger = logging.getLogger() logfile_name = os.path.join(tempfile.gettempdir(), "openerp_report_designer.log") hdlr = logging.FileHandler(logfile_name) formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') hdlr.setFormatter(formatter) - logger.addHandler(hdlr) - logger.setLevel(logging.INFO) + _logger.addHandler(hdlr) + _logger.setLevel(logging.INFO) class Logger(object): def log_write(self,name,level,msg): - log = logging.getLogger(name) - getattr(log,level)(msg) + getattr(_logger,level)(msg) def shutdown(self): logging.shutdown() diff --git a/addons/base_vat/base_vat.py b/addons/base_vat/base_vat.py index 7b8363ffd6b..e76442b62fe 100644 --- a/addons/base_vat/base_vat.py +++ b/addons/base_vat/base_vat.py @@ -23,11 +23,12 @@ import logging import string import datetime import re +_logger = logging.getLogger(__name__) try: import vatnumber except ImportError: - logging.getLogger('base_vat').warning("VAT validation partially unavailable because the `vatnumber` Python library cannot be found. " + _logger.warning("VAT validation partially unavailable because the `vatnumber` Python library cannot be found. " "Install it to support more countries, for example with `easy_install vatnumber`.") vatnumber = None diff --git a/addons/caldav/caldav_node.py b/addons/caldav/caldav_node.py index 71e9bdc2468..da5c5f017a6 100644 --- a/addons/caldav/caldav_node.py +++ b/addons/caldav/caldav_node.py @@ -23,6 +23,7 @@ from document_webdav import nodes from document.nodes import _str2time, nodefd_static import logging from orm_utils import get_last_modified +_logger = logging.getLogger(__name__) try: from tools.dict_tools import dict_merge2 @@ -223,7 +224,6 @@ class node_calendar(nodes.node_class): res = [] if not filters: return res - _log = logging.getLogger('caldav.query') if filters.localName == 'calendar-query': res = [] for filter_child in filters.childNodes: diff --git a/addons/caldav/calendar.py b/addons/caldav/calendar.py index 94d28e4ad37..fb98e00a86f 100644 --- a/addons/caldav/calendar.py +++ b/addons/caldav/calendar.py @@ -34,6 +34,7 @@ import logging from caldav_node import res_node_calendar from orm_utils import get_last_modified from tools.safe_eval import safe_eval as eval +_logger = logging.getLogger(__name__) try: import vobject @@ -240,7 +241,6 @@ def map_data(cr, uid, obj, context=None): class CalDAV(object): __attribute__ = {} - _logger = logging.getLogger('document.caldav') def ical_set(self, name, value, type): """ set calendar Attribute @@ -725,13 +725,13 @@ class Calendar(CalDAV, osv.osv): objs.append(cal_children[child.name.lower()]) elif child.name.upper() == 'CALSCALE': if child.value.upper() != 'GREGORIAN': - self._logger.warning('How do I handle %s calendars?',child.value) + _logger.warning('How do I handle %s calendars?',child.value) elif child.name.upper() in ('PRODID', 'VERSION'): pass elif child.name.upper().startswith('X-'): - self._logger.debug("skipping custom node %s", child.name) + _logger.debug("skipping custom node %s", child.name) else: - self._logger.debug("skipping node %s", child.name) + _logger.debug("skipping node %s", child.name) res = [] for obj_name in list(set(objs)): diff --git a/addons/caldav/calendar_collection.py b/addons/caldav/calendar_collection.py index 1abbf573ef0..3a5604b2f67 100644 --- a/addons/caldav/calendar_collection.py +++ b/addons/caldav/calendar_collection.py @@ -23,6 +23,7 @@ from osv import osv, fields from tools.translate import _ import caldav_node import logging +_logger = logging.getLogger(__name__) class calendar_collection(osv.osv): _inherit = 'document.directory' @@ -44,8 +45,7 @@ class calendar_collection(osv.osv): root_cal_dir = self.browse(cr,uid, root_id, context=context) return root_cal_dir.name except Exception: - logger = logging.getLogger('document') - logger.warning('Cannot set root directory for Calendars:', exc_info=True) + _logger.warning('Cannot set root directory for Calendars:', exc_info=True) return False return False diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py index cadd813a959..1e21d535c55 100644 --- a/addons/crm/crm_meeting.py +++ b/addons/crm/crm_meeting.py @@ -26,6 +26,7 @@ import logging from osv import fields, osv import tools from tools.translate import _ +_logger = logging.getLogger(__name__) class crm_lead(base_stage, osv.osv): """ CRM Leads """ @@ -180,7 +181,7 @@ class res_users(osv.osv): 'user_id': user_id}, context=context) except: # Tolerate a missing shortcut. See product/product.py for similar code. - logging.getLogger('orm').debug('Skipped meetings shortcut for user "%s"', data.get('name','<new')) + _logger.debug('Skipped meetings shortcut for user "%s"', data.get('name','<new')) return user_id res_users() diff --git a/addons/crm/crm_meeting_demo.xml b/addons/crm/crm_meeting_demo.xml index 7427afe1e58..a1179fab075 100644 --- a/addons/crm/crm_meeting_demo.xml +++ b/addons/crm/crm_meeting_demo.xml @@ -53,7 +53,7 @@ <field eval="6.0" name="duration"/> <field name="partner_id" ref="base.res_partner_11"/> <field name="user_id" ref="base.user_demo"/> - <field eval=""draft"" name="state"/> + <field eval=""open"" name="state"/> <field name="section_id" ref="crm.section_sales_department"/> <field eval="time.strftime('%Y-%m-20 10:02:02')" name="date"/> <field name="categ_id" ref="crm.categ_meet3"/> diff --git a/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml b/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml index 27a7d057b23..b4bf273af9d 100644 --- a/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml +++ b/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml @@ -13,6 +13,8 @@ <header> <button name="action_schedule" type="object" string="Log call" icon="gtk-ok" attrs="{'invisible' : [('action', '!=', 'log')]}" class="oe_highlight_on_dirty" /> <button name="action_schedule" type="object" string="Schedule Call" icon="gtk-ok" attrs="{'invisible' : [('action', '!=', 'schedule')]}" class="oe_highlight_on_dirty" /> + or + <button name="action_cancel" string="_Cancel" class="oe_link" special="cancel" /> </header> <group> <group> diff --git a/addons/crm_claim/crm_claim_menu.xml b/addons/crm_claim/crm_claim_menu.xml index 75bfd9ce211..d4bfd8f21bb 100644 --- a/addons/crm_claim/crm_claim_menu.xml +++ b/addons/crm_claim/crm_claim_menu.xml @@ -51,9 +51,13 @@ parent="base.menu_aftersale" action="crm_case_categ_claim0" sequence="1"/> <!-- Claim Stages --> - <menuitem id="menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/> - <menuitem id="menu_project_config_project" name="Stages" parent="menu_definitions" sequence="1"/> - <menuitem id="menu_claim_stage_view" name="Claim Stages" action="crm_claim_stage_act" parent="menu_project_config_project" sequence="20"/> + <menuitem + icon="terp-project" id="base.menu_main_pm" + name="Project" sequence="10"/> + + <menuitem id="base.menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/> + <menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1"/> + <menuitem id="menu_claim_stage_view" name="Claim Stages" action="crm_claim_stage_act" parent="base.menu_project_config_project" sequence="20"/> </data> </openerp> diff --git a/addons/document/content_index.py b/addons/document/content_index.py index 64b480ee736..f24c033a7ec 100644 --- a/addons/document/content_index.py +++ b/addons/document/content_index.py @@ -22,7 +22,7 @@ import logging import os import tempfile from subprocess import Popen, PIPE - +_logger = logging.getLogger(__name__) class NhException(Exception): pass @@ -116,7 +116,7 @@ def mime_match(mime, mdict): return (None, None) class contentIndex(object): - __logger = logging.getLogger('addons.document.content_index') + def __init__(self): self.mimes = {} self.exts = {} @@ -132,7 +132,7 @@ class contentIndex(object): f = True if f: - self.__logger.debug('Register content indexer: %r', obj) + _logger.debug('Register content indexer: %r', obj) if not f: raise Exception("Your indexer should at least suport a mimetype or extension") @@ -169,22 +169,22 @@ class contentIndex(object): (result, _) = pop.communicate() mime2 = result.split(';')[0] - self.__logger.debug('File gave us: %s', mime2) + _logger.debug('File gave us: %s', mime2) # Note that the temporary file still exists now. mime,fobj = mime_match(mime2, self.mimes) if not mime: mime = mime2 except Exception: - self.__logger.exception('Cannot determine mime type') + _logger.exception('Cannot determine mime type') try: if fobj: res = (mime, fobj.indexContent(content,filename,fname or realfname) ) else: - self.__logger.debug("Have no object, return (%s, None)", mime) + _logger.debug("Have no object, return (%s, None)", mime) res = (mime, None ) except Exception: - self.__logger.exception("Could not index file %s (%s)", + _logger.exception("Could not index file %s (%s)", filename, fname or realfname) res = None @@ -193,8 +193,7 @@ class contentIndex(object): try: os.unlink(fname) except Exception: - self.__logger.exception("Could not unlink %s", fname) - + _logger.exception("Could not unlink %s", fname) return res cntIndex = contentIndex() diff --git a/addons/document/document.py b/addons/document/document.py index 92ece063a47..fa65f8d9966 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -30,12 +30,15 @@ from tools.translate import _ import nodes import logging +_logger = logging.getLogger(__name__) + DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config['root_path'], 'filestore')) class document_file(osv.osv): _inherit = 'ir.attachment' _rec_name = 'datas_fname' - + + def _attach_parent_id(self, cr, uid, ids=None, context=None): """Migrate ir.attachments to the document module. @@ -54,7 +57,7 @@ class document_file(osv.osv): parent_id = self.pool.get('document.directory')._get_root_directory(cr,uid) if not parent_id: - logging.getLogger('document').warning("at _attach_parent_id(), still not able to set the parent!") + _logger.warning("at _attach_parent_id(), still not able to set the parent!") return False if ids is not None: @@ -140,8 +143,8 @@ class document_file(osv.osv): _defaults = { 'user_id': lambda self, cr, uid, ctx:uid, + 'parent_id': __get_def_directory, 'file_size': lambda self, cr, uid, ctx:0, - 'parent_id': __get_def_directory } _sql_constraints = [ # filename_uniq is not possible in pure SQL @@ -336,7 +339,7 @@ class document_file(osv.osv): if r: unres.append(r) else: - logging.getLogger('document').warning("Unlinking attachment #%s %s that has no storage", + self.loggerdoc.warning("Unlinking attachment #%s %s that has no storage", f.id, f.name) res = super(document_file, self).unlink(cr, uid, ids, context) stor.do_unlink(cr, uid, unres) diff --git a/addons/document/document_data.xml b/addons/document/document_data.xml index ac7a174b05f..a7bc98de6f3 100644 --- a/addons/document/document_data.xml +++ b/addons/document/document_data.xml @@ -104,6 +104,5 @@ <!-- After we have setup the root directory, migrate the attachments to point to that. --> <function model="ir.attachment" name="_attach_parent_id"/> - </data> </openerp> diff --git a/addons/document/document_directory.py b/addons/document/document_directory.py index d09d2cc86d5..03b2dcc47bf 100644 --- a/addons/document/document_directory.py +++ b/addons/document/document_directory.py @@ -22,10 +22,10 @@ from osv import osv, fields from osv.orm import except_orm - +import logging import nodes from tools.translate import _ - +_logger = logging.getLogger(__name__) class document_directory(osv.osv): _name = 'document.directory' _description = 'Directory' @@ -78,9 +78,8 @@ class document_directory(osv.osv): root_id = objid.read(cr, uid, mid, ['res_id'])['res_id'] return root_id except Exception, e: - import netsvc - logger = netsvc.Logger() - logger.notifyChannel("document", netsvc.LOG_WARNING, 'Cannot set directory root:'+ str(e)) + + _logger.warning('Cannot set directory root:'+ str(e)) return False return objid.browse(cr, uid, mid, context=context).res_id diff --git a/addons/document/document_storage.py b/addons/document/document_storage.py index fe757e7876d..339b320e9a7 100644 --- a/addons/document/document_storage.py +++ b/addons/document/document_storage.py @@ -29,18 +29,15 @@ import logging import shutil from StringIO import StringIO import psycopg2 - from tools.misc import ustr from tools.translate import _ - from osv.orm import except_orm - import random import string import pooler import nodes from content_index import cntIndex - +_logger = logging.getLogger(__name__) DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config.get('root_path'), 'filestore')) @@ -130,7 +127,7 @@ class nodefd_file(nodes.node_descriptor): mime, icont = cntIndex.doIndex(None, filename=filename, content_type=None, realfname=fname) except Exception: - logging.getLogger('document.storage').debug('Cannot index file:', exc_info=True) + _logger.debug('Cannot index file:', exc_info=True) pass try: @@ -150,7 +147,7 @@ class nodefd_file(nodes.node_descriptor): cr.commit() cr.close() except Exception: - logging.getLogger('document.storage').warning('Cannot save file indexed content:', exc_info=True) + _logger.warning('Cannot save file indexed content:', exc_info=True) elif self.mode in ('a', 'a+' ): try: @@ -164,7 +161,7 @@ class nodefd_file(nodes.node_descriptor): cr.commit() cr.close() except Exception: - logging.getLogger('document.storage').warning('Cannot save file appended content:', exc_info=True) + _logger.warning('Cannot save file appended content:', exc_info=True) @@ -191,7 +188,7 @@ class nodefd_db(StringIO, nodes.node_descriptor): elif mode == 'a': StringIO.__init__(self, None) else: - logging.getLogger('document.storage').error("Incorrect mode %s specified", mode) + _logger.error("Incorrect mode %s specified", mode) raise IOError(errno.EINVAL, "Invalid file mode") self.mode = mode @@ -217,7 +214,7 @@ class nodefd_db(StringIO, nodes.node_descriptor): mime, icont = cntIndex.doIndex(data, filename=filename, content_type=None, realfname=None) except Exception: - logging.getLogger('document.storage').debug('Cannot index file:', exc_info=True) + _logger.debug('Cannot index file:', exc_info=True) pass try: @@ -241,7 +238,7 @@ class nodefd_db(StringIO, nodes.node_descriptor): (out, len(data), par.file_id)) cr.commit() except Exception: - logging.getLogger('document.storage').exception('Cannot update db file #%d for close:', par.file_id) + _logger.exception('Cannot update db file #%d for close:', par.file_id) raise finally: cr.close() @@ -271,7 +268,7 @@ class nodefd_db64(StringIO, nodes.node_descriptor): elif mode == 'a': StringIO.__init__(self, None) else: - logging.getLogger('document.storage').error("Incorrect mode %s specified", mode) + _logger.error("Incorrect mode %s specified", mode) raise IOError(errno.EINVAL, "Invalid file mode") self.mode = mode @@ -297,7 +294,7 @@ class nodefd_db64(StringIO, nodes.node_descriptor): mime, icont = cntIndex.doIndex(data, filename=filename, content_type=None, realfname=None) except Exception: - logging.getLogger('document.storage').debug('Cannot index file:', exc_info=True) + self.logger.debug('Cannot index file:', exc_info=True) pass try: @@ -320,7 +317,7 @@ class nodefd_db64(StringIO, nodes.node_descriptor): (base64.encodestring(data), len(data), par.file_id)) cr.commit() except Exception: - logging.getLogger('document.storage').exception('Cannot update db file #%d for close:', par.file_id) + _logger.exception('Cannot update db file #%d for close:', par.file_id) raise finally: cr.close() @@ -339,7 +336,6 @@ class document_storage(osv.osv): """ _name = 'document.storage' _description = 'Storage Media' - _doclog = logging.getLogger('document') _columns = { 'name': fields.char('Name', size=64, required=True, select=1), @@ -402,7 +398,7 @@ class document_storage(osv.osv): npath = filter(lambda x: x is not None, npath) # if self._debug: - # self._doclog.debug('Npath: %s', npath) + # self._logger.debug('Npath: %s', npath) for n in npath: if n == '..': raise ValueError("Invalid '..' element in path") @@ -413,7 +409,7 @@ class document_storage(osv.osv): dpath += npath[:-1] path = os.path.join(*dpath) if not os.path.isdir(path): - self._doclog.debug("Create dirs: %s", path) + _logger.debug("Create dirs: %s", path) os.makedirs(path) return path, npath @@ -451,7 +447,7 @@ class document_storage(osv.osv): # try to fix their directory. if mode in ('r','r+'): if ira.file_size: - self._doclog.warning( "ir.attachment #%d does not have a filename, but is at filestore, fix it!" % ira.id) + _logger.warning( "ir.attachment #%d does not have a filename, but is at filestore, fix it!" % ira.id) raise IOError(errno.ENOENT, 'No file can be located') else: store_fname = self.__get_random_fname(boo.path) @@ -493,7 +489,7 @@ class document_storage(osv.osv): # On a migrated db, some files may have the wrong storage type # try to fix their directory. if ira.file_size: - self._doclog.warning( "ir.attachment #%d does not have a filename, but is at filestore, fix it!" % ira.id) + _logger.warning( "ir.attachment #%d does not have a filename, but is at filestore, fix it!" % ira.id) return None fpath = os.path.join(boo.path, ira.store_fname) return file(fpath, 'rb').read() @@ -517,7 +513,7 @@ class document_storage(osv.osv): # On a migrated db, some files may have the wrong storage type # try to fix their directory. if ira.file_size: - self._doclog.warning("ir.attachment #%d does not have a filename, trying the name." %ira.id) + _logger.warning("ir.attachment #%d does not have a filename, trying the name." %ira.id) # sfname = ira.name fpath = os.path.join(boo.path,ira.store_fname or ira.name) if os.path.exists(fpath): @@ -550,7 +546,7 @@ class document_storage(osv.osv): if boo.readonly: raise IOError(errno.EPERM, "Readonly medium") - self._doclog.debug( "Store data for ir.attachment #%d" % ira.id) + _logger.debug( "Store data for ir.attachment #%d" % ira.id) store_fname = None fname = None if boo.type == 'filestore': @@ -563,13 +559,13 @@ class document_storage(osv.osv): fp.write(data) finally: fp.close() - self._doclog.debug( "Saved data to %s" % fname) + _logger.debug( "Saved data to %s" % fname) filesize = len(data) # os.stat(fname).st_size # TODO Here, an old file would be left hanging. except Exception, e: - self._doclog.warning( "Couldn't save data to %s", path, exc_info=True) + _logger.warning( "Couldn't save data to %s", path, exc_info=True) raise except_orm(_('Error!'), str(e)) elif boo.type == 'db': filesize = len(data) @@ -592,12 +588,12 @@ class document_storage(osv.osv): fp.write(data) finally: fp.close() - self._doclog.debug("Saved data to %s", fname) + _logger.debug("Saved data to %s", fname) filesize = len(data) # os.stat(fname).st_size store_fname = os.path.join(*npath) # TODO Here, an old file would be left hanging. except Exception,e : - self._doclog.warning("Couldn't save data:", exc_info=True) + _logger.warning("Couldn't save data:", exc_info=True) raise except_orm(_('Error!'), str(e)) elif boo.type == 'virtual': @@ -616,7 +612,7 @@ class document_storage(osv.osv): mime, icont = cntIndex.doIndex(data, ira.datas_fname, ira.file_type or None, fname) except Exception: - self._doclog.debug('Cannot index file:', exc_info=True) + _logger.debug('Cannot index file:', exc_info=True) pass try: @@ -633,7 +629,7 @@ class document_storage(osv.osv): file_node.content_type = mime return True except Exception, e : - self._doclog.warning("Couldn't save data:", exc_info=True) + self._logger.warning("Couldn't save data:", exc_info=True) # should we really rollback once we have written the actual data? # at the db case (only), that rollback would be safe raise except_orm(_('Error at doc write!'), str(e)) @@ -671,9 +667,9 @@ class document_storage(osv.osv): try: os.unlink(fname) except Exception: - self._doclog.warning("Could not remove file %s, please remove manually.", fname, exc_info=True) + _logger.warning("Could not remove file %s, please remove manually.", fname, exc_info=True) else: - self._doclog.warning("Unknown unlink key %s" % ktype) + _logger.warning("Unknown unlink key %s" % ktype) return True @@ -703,9 +699,9 @@ class document_storage(osv.osv): fname = ira.store_fname if not fname: - self._doclog.warning("Trying to rename a non-stored file") + _logger.warning("Trying to rename a non-stored file") if fname != os.path.join(*npath): - self._doclog.warning("inconsistency in realstore: %s != %s" , fname, repr(npath)) + _logger.warning("inconsistency in realstore: %s != %s" , fname, repr(npath)) oldpath = os.path.join(path, npath[-1]) newpath = os.path.join(path, new_name) @@ -743,7 +739,7 @@ class document_storage(osv.osv): break par = par.parent_id if file_node.storage_id != psto: - self._doclog.debug('Cannot move file %r from %r to %r', file_node, file_node.parent, ndir_bro.name) + _logger.debug('Cannot move file %r from %r to %r', file_node, file_node.parent, ndir_bro.name) raise NotImplementedError('Cannot move files between storage media') if sbro.type in ('filestore', 'db', 'db64'): @@ -756,9 +752,9 @@ class document_storage(osv.osv): fname = ira.store_fname if not fname: - self._doclog.warning("Trying to rename a non-stored file") + _logger.warning("Trying to rename a non-stored file") if fname != os.path.join(*opath): - self._doclog.warning("inconsistency in realstore: %s != %s" , fname, repr(opath)) + _logger.warning("inconsistency in realstore: %s != %s" , fname, repr(opath)) oldpath = os.path.join(path, opath[-1]) @@ -766,12 +762,12 @@ class document_storage(osv.osv): npath = filter(lambda x: x is not None, npath) newdir = os.path.join(*npath) if not os.path.isdir(newdir): - self._doclog.debug("Must create dir %s", newdir) + _logger.debug("Must create dir %s", newdir) os.makedirs(newdir) npath.append(opath[-1]) newpath = os.path.join(*npath) - self._doclog.debug("Going to move %s from %s to %s", opath[-1], oldpath, newpath) + _logger.debug("Going to move %s from %s to %s", opath[-1], oldpath, newpath) shutil.move(oldpath, newpath) store_path = npath[1:] + [opath[-1],] diff --git a/addons/document/nodes.py b/addons/document/nodes.py index ee89f3d4c6c..273be7effa4 100644 --- a/addons/document/nodes.py +++ b/addons/document/nodes.py @@ -41,8 +41,7 @@ from StringIO import StringIO # file: objct = ir.attachement # root: if we are at the first directory of a ressource # - -logger = logging.getLogger('doc2.nodes') +_logger = logging.getLogger(__name__) def _str2time(cre): """ Convert a string with time representation (from db) into time (float) @@ -328,7 +327,7 @@ class node_class(object): if self.DAV_M_NS.has_key(ns): prefix = self.DAV_M_NS[ns] else: - logger.debug('No namespace: %s ("%s")',ns, prop) + _logger.debug('No namespace: %s ("%s")',ns, prop) return None mname = prefix + "_" + prop.replace('-','_') @@ -341,7 +340,7 @@ class node_class(object): r = m(cr) return r except AttributeError: - logger.debug('Property %s not supported' % prop, exc_info=True) + _logger.debug('Property %s not supported' % prop, exc_info=True) return None def get_dav_resourcetype(self, cr): @@ -384,13 +383,13 @@ class node_class(object): def create_child(self, cr, path, data=None): """ Create a regular file under this node """ - logger.warning("Attempted to create a file under %r, not possible.", self) + _logger.warning("Attempted to create a file under %r, not possible.", self) raise IOError(errno.EPERM, "Not allowed to create files here") def create_child_collection(self, cr, objname): """ Create a child collection (directory) under self """ - logger.warning("Attempted to create a collection under %r, not possible.", self) + _logger.warning("Attempted to create a collection under %r, not possible.", self) raise IOError(errno.EPERM, "Not allowed to create folders here") def rm(self, cr): @@ -725,7 +724,7 @@ class node_dir(node_database): assert self.parent if self.parent != ndir_node: - logger.debug('Cannot move dir %r from %r to %r', self, self.parent, ndir_node) + _logger.debug('Cannot move dir %r from %r to %r', self, self.parent, ndir_node) raise NotImplementedError('Cannot move dir to another dir') ret = {} @@ -998,7 +997,7 @@ class node_res_obj(node_class): def get_dav_eprop_DEPR(self, cr, ns, prop): # Deprecated! if ns != 'http://groupdav.org/' or prop != 'resourcetype': - logger.warning("Who asked for %s:%s?" % (ns, prop)) + _logger.warning("Who asked for %s:%s?" % (ns, prop)) return None cntobj = self.context._dirobj.pool.get('document.directory.content') uid = self.context.uid @@ -1328,7 +1327,7 @@ class node_file(node_class): ret = {} if ndir_node and self.parent != ndir_node: if not (isinstance(self.parent, node_dir) and isinstance(ndir_node, node_dir)): - logger.debug('Cannot move file %r from %r to %r', self, self.parent, ndir_node) + _logger.debug('Cannot move file %r from %r to %r', self, self.parent, ndir_node) raise NotImplementedError('Cannot move files between dynamic folders') if not ndir_obj: @@ -1452,6 +1451,7 @@ class node_content(node_class): return '' class nodefd_content(StringIO, node_descriptor): + """ A descriptor to content nodes """ def __init__(self, parent, cr, mode, ctx): @@ -1473,7 +1473,7 @@ class nodefd_content(StringIO, node_descriptor): elif mode == 'a': StringIO.__init__(self, None) else: - logging.getLogger('document.content').error("Incorrect mode %s specified", mode) + _logger.error("Incorrect mode %s specified", mode) raise IOError(errno.EINVAL, "Invalid file mode") self.mode = mode @@ -1499,13 +1499,14 @@ class nodefd_content(StringIO, node_descriptor): raise NotImplementedError cr.commit() except Exception: - logging.getLogger('document.content').exception('Cannot update db content #%d for close:', par.cnt_id) + _logger.exception('Cannot update db content #%d for close:', par.cnt_id) raise finally: cr.close() StringIO.close(self) class nodefd_static(StringIO, node_descriptor): + """ A descriptor to nodes with static data. """ def __init__(self, parent, cr, mode, ctx=None): @@ -1526,7 +1527,7 @@ class nodefd_static(StringIO, node_descriptor): elif mode == 'a': StringIO.__init__(self, None) else: - logging.getLogger('document.nodes').error("Incorrect mode %s specified", mode) + _logger.error("Incorrect mode %s specified", mode) raise IOError(errno.EINVAL, "Invalid file mode") self.mode = mode @@ -1551,7 +1552,7 @@ class nodefd_static(StringIO, node_descriptor): raise NotImplementedError cr.commit() except Exception: - logging.getLogger('document.nodes').exception('Cannot update db content #%d for close:', par.cnt_id) + _logger.exception('Cannot update db content #%d for close:', par.cnt_id) raise finally: cr.close() diff --git a/addons/document/std_index.py b/addons/document/std_index.py index e153d018bf0..49ac9a5c906 100644 --- a/addons/document/std_index.py +++ b/addons/document/std_index.py @@ -25,6 +25,7 @@ import StringIO import odt2txt import sys, zipfile, xml.dom.minidom import logging +_logger = logging.getLogger(__name__) def _to_unicode(s): try: @@ -101,9 +102,9 @@ class DocIndex(indexer): (data, _) = pop.communicate() return _to_unicode(data) except OSError: - logger = logging.getLogger('document.DocIndex') - logger.warn("Failed attempt to execute antiword (MS Word reader). Antiword is necessary to index the file %s of MIME type %s. Detailed error available at DEBUG level.", fname, self._getMimeTypes()[0]) - logger.debug("Trace of the failed file indexing attempt: ", exc_info=True) + + _logger.warn("Failed attempt to execute antiword (MS Word reader). Antiword is necessary to index the file %s of MIME type %s. Detailed error available at DEBUG level.", fname, self._getMimeTypes()[0]) + _logger.debug("Trace of the failed file indexing attempt: ", exc_info=True) return False cntIndex.register(DocIndex()) diff --git a/addons/document_ftp/ftpserver/__init__.py b/addons/document_ftp/ftpserver/__init__.py index 2e09a938a05..59aff85c633 100644 --- a/addons/document_ftp/ftpserver/__init__.py +++ b/addons/document_ftp/ftpserver/__init__.py @@ -23,9 +23,9 @@ import threading import ftpserver import authorizer import abstracted_fs -import netsvc +import logging from tools import config - +_logger = logging.getLogger(__name__) def start_server(): HOST = config.get('ftp_server_host', '127.0.0.1') PORT = int(config.get('ftp_server_port', '8021')) @@ -35,10 +35,7 @@ def start_server(): PASSIVE_PORTS = int(pps[0]), int(pps[1]) class ftp_server(threading.Thread): - def log(self, level, message): - logger = netsvc.Logger() - logger.notifyChannel('FTP', level, message) - + def run(self): autho = authorizer.authorizer() ftpserver.FTPHandler.authorizer = autho @@ -48,17 +45,17 @@ def start_server(): if PASSIVE_PORTS: ftpserver.FTPHandler.passive_ports = PASSIVE_PORTS - ftpserver.log = lambda msg: self.log(netsvc.LOG_INFO, msg) + ftpserver.log = lambda msg: _logger.info(msg) ftpserver.logline = lambda msg: None - ftpserver.logerror = lambda msg: self.log(netsvc.LOG_ERROR, msg) + ftpserver.logerror = lambda msg: _logger.error(msg) ftpd = ftpserver.FTPServer((HOST, PORT), ftpserver.FTPHandler) ftpd.serve_forever() if HOST.lower() == 'none': - netsvc.Logger().notifyChannel("FTP", netsvc.LOG_INFO, "\n Server FTP Not Started\n") + _logger.info("\n Server FTP Not Started\n") else: - netsvc.Logger().notifyChannel("FTP", netsvc.LOG_INFO, "\n Serving FTP on %s:%s\n" % (HOST, PORT)) + _logger.info("\n Serving FTP on %s:%s\n" % (HOST, PORT)) ds = ftp_server() ds.daemon = True ds.start() diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py index 83cd1cde725..429016a2376 100644 --- a/addons/document_ftp/ftpserver/abstracted_fs.py +++ b/addons/document_ftp/ftpserver/abstracted_fs.py @@ -56,7 +56,7 @@ class abstracted_fs(object): self.cwd = '/' self.cwd_node = None self.rnfr = None - self._log = logging.getLogger('FTP.fs') + self._log = logging.getLogger(__name__) # Ok def db_list(self): diff --git a/addons/document_webdav/redirect.py b/addons/document_webdav/redirect.py index 7bc0883f9e8..31f462bcbbe 100644 --- a/addons/document_webdav/redirect.py +++ b/addons/document_webdav/redirect.py @@ -24,9 +24,9 @@ import logging import urlparse from service.websrv_lib import FixSendError, HTTPHandler, HttpOptions from service.http_server import HttpLogHandler - +_logger = logging.getLogger(__name__) class RedirectHTTPHandler(HttpLogHandler, FixSendError, HttpOptions, HTTPHandler): - _logger = logging.getLogger('httpd.well-known') + _HTTP_OPTIONS = { 'Allow': ['OPTIONS', 'GET', 'HEAD', 'PROPFIND'] } redirect_paths = {} @@ -80,7 +80,7 @@ class RedirectHTTPHandler(HttpLogHandler, FixSendError, HttpOptions, HTTPHandler self.send_header("Content-Length", 0) self.end_headers() # Do we need a Cache-content: header here? - self._logger.debug("redirecting %s to %s", self.path, redir_path) + _logger.debug("redirecting %s to %s", self.path, redir_path) return None def do_PROPFIND(self): diff --git a/addons/document_webdav/test_davclient.py b/addons/document_webdav/test_davclient.py index 3c20cfed5b8..a4dda231bd8 100755 --- a/addons/document_webdav/test_davclient.py +++ b/addons/document_webdav/test_davclient.py @@ -43,7 +43,7 @@ from xmlrpclib import Transport, ProtocolError import StringIO import base64 -log = logging.getLogger('http-client') +_logger = logging.getLogger(__name__) class HTTP11(httplib.HTTP): _http_vsn = 11 @@ -62,7 +62,7 @@ class PersistentTransport(Transport): if not self._http.has_key(host): host, extra_headers, x509 = self.get_host_info(host) self._http[host] = HTTP11(host) - log.debug("New connection to %s", host) + _logger.debug("New connection to %s", host) return self._http[host] def get_host_info(self, host): @@ -170,7 +170,7 @@ class SafePersistentTransport(PersistentTransport): if not self._http.has_key(host): host, extra_headers, x509 = self.get_host_info(host) self._http[host] = httplib.HTTPS(host, None, **(x509 or {})) - log.debug("New connection to %s", host) + _logger.debug("New connection to %s", host) return self._http[host] class AuthClient(object): @@ -191,8 +191,8 @@ class BasicAuthClient(AuthClient): return super(BasicAuthClient,self).getAuth(atype, realm) if not self._realm_dict.has_key(realm): - log.debug("realm dict: %r", self._realm_dict) - log.debug("missing key: \"%s\"" % realm) + _logger.debug("realm dict: %r", self._realm_dict) + _logger.debug("missing key: \"%s\"" % realm) self.resolveFailedRealm(realm) return 'Basic '+ self._realm_dict[realm] @@ -239,7 +239,7 @@ class addAuthTransport: # This line will bork if self.setAuthClient has not # been issued. That is a programming error, fix your code! auths = self._auth_client.getAuth(atype, realm) - log.debug("sending authorization: %s", auths) + _logger.debug("sending authorization: %s", auths) h.putheader('Authorization', auths) self.send_content(h, request_body) @@ -255,8 +255,8 @@ class addAuthTransport: log.warning("Why have data on a 401 auth. message?") if realm.startswith('realm="') and realm.endswith('"'): realm = realm[7:-1] - log.debug("Resp: %r %r", resp.version,resp.isclosed(), resp.will_close) - log.debug("Want to do auth %s for realm %s", atype, realm) + _logger.debug("Resp: %r %r", resp.version,resp.isclosed(), resp.will_close) + _logger.debug("Want to do auth %s for realm %s", atype, realm) if atype != 'Basic': raise ProtocolError(host+handler, 403, "Unknown authentication method: %s" % atype, resp.msg) @@ -315,7 +315,7 @@ class HTTPSConnection(httplib.HTTPSConnection): lf = (len(ssl.PEM_FOOTER)+1) if cert[0-lf] != '\n': cert = cert[:0-lf]+'\n'+cert[0-lf:] - log.debug("len-footer: %s cert: %r", lf, cert[0-lf]) + _logger.debug("len-footer: %s cert: %r", lf, cert[0-lf]) return cert @@ -390,7 +390,7 @@ class DAVClient(object): import base64 dbg = self.dbg hdrs.update(self.hdrs) - log.debug("Getting %s http://%s:%d/%s", method, self.host, self.port, path) + _logger.debug("Getting %s http://%s:%d/%s", method, self.host, self.port, path) conn = httplib.HTTPConnection(self.host, port=self.port, timeout=self.timeout) conn.set_debuglevel(dbg) if not path: @@ -409,8 +409,8 @@ class DAVClient(object): data1 = r1.read() if not self.user: raise Exception('Must auth, have no user/pass!') - log.debug("Ver: %s, closed: %s, will close: %s", r1.version,r1.isclosed(), r1.will_close) - log.debug("Want to do auth %s for realm %s", atype, realm) + _logger.debug("Ver: %s, closed: %s, will close: %s", r1.version,r1.isclosed(), r1.will_close) + _logger.debug("Want to do auth %s for realm %s", atype, realm) if atype == 'Basic' : auths = base64.encodestring(self.user + ':' + self.passwd) if auths[-1] == "\n": @@ -422,22 +422,22 @@ class DAVClient(object): else: raise Exception("Unknown auth type %s" %atype) else: - log.warning("Got 401, cannot auth") + _logger.warning("Got 401, cannot auth") raise Exception('No auth') - log.debug("Reponse: %s %s",r1.status, r1.reason) + _logger.debug("Reponse: %s %s",r1.status, r1.reason) data1 = r1.read() if method != 'GET': - log.debug("Body:\n%s\nEnd of body", data1) + _logger.debug("Body:\n%s\nEnd of body", data1) try: ctype = r1.msg.getheader('content-type') if ctype and ';' in ctype: ctype, encoding = ctype.split(';',1) if ctype == 'text/xml': doc = xml.dom.minidom.parseString(data1) - log.debug("XML Body:\n %s", doc.toprettyxml(indent="\t")) + _logger.debug("XML Body:\n %s", doc.toprettyxml(indent="\t")) except Exception: - log.warning("could not print xml", exc_info=True) + _logger.warning("could not print xml", exc_info=True) pass conn.close() return r1.status, r1.msg, data1 @@ -474,7 +474,7 @@ class DAVClient(object): s, m, d = self._http_request(path, method='OPTIONS', hdrs=hdrs) assert s == 200, "Status: %r" % s assert 'OPTIONS' in m.getheader('Allow') - log.debug('Options: %r', m.getheader('Allow')) + _logger.debug('Options: %r', m.getheader('Allow')) if expect: self._assert_headers(expect, m) @@ -493,10 +493,10 @@ class DAVClient(object): for cnod in node.childNodes: if cnod.nodeType != node.ELEMENT_NODE: if strict: - log.debug("Found %r inside <%s>", cnod, node.tagName) + _logger.debug("Found %r inside <%s>", cnod, node.tagName) continue if namespaces and (cnod.namespaceURI not in namespaces): - log.debug("Ignoring <%s> in <%s>", cnod.tagName, node.localName) + _logger.debug("Ignoring <%s> in <%s>", cnod.tagName, node.localName) continue yield cnod @@ -533,10 +533,10 @@ class DAVClient(object): assert htver == 'HTTP/1.1' rstatus = int(sta) else: - log.debug("What is <%s> inside a <propstat>?", pno.tagName) + _logger.debug("What is <%s> inside a <propstat>?", pno.tagName) else: - log.debug("Unknown node: %s", cno.tagName) + _logger.debug("Unknown node: %s", cno.tagName) res.setdefault(href,[]).append((status, res_nss)) @@ -637,7 +637,7 @@ class DAVClient(object): if lsp[1] in davprops: lsline[lsp[0]] = lsp[2] else: - log.debug("Strange status: %s", st) + _logger.debug("Strange status: %s", st) res.append(lsline) diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py index ae75d0b80fc..65ebb49ff5f 100644 --- a/addons/document_webdav/webdav_server.py +++ b/addons/document_webdav/webdav_server.py @@ -54,7 +54,7 @@ from DAV.propfind import PROPFIND # from DAV.constants import DAV_VERSION_1, DAV_VERSION_2 from xml.dom import minidom from redirect import RedirectHTTPHandler - +_logger = logging.getLogger(__name__) khtml_re = re.compile(r' KHTML/([0-9\.]+) ') def OpenDAVConfig(**kw): @@ -73,7 +73,7 @@ def OpenDAVConfig(**kw): class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): verbose = False - _logger = logging.getLogger('webdav') + protocol_version = 'HTTP/1.1' _HTTP_OPTIONS= { 'DAV' : ['1', '2'], 'Allow' : [ 'GET', 'HEAD', 'COPY', 'MOVE', 'POST', 'PUT', @@ -127,10 +127,10 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler): return self.davpath def log_message(self, format, *args): - self._logger.debug(format % args) + _logger.debug(format % args) def log_error(self, format, *args): - self._logger.warning(format % args) + _logger.warning(format % args) def _prep_OPTIONS(self, opts): ret = opts @@ -477,7 +477,7 @@ class dummy_dav_interface(object): uri2 = uri.split('/') if len(uri2) < 3: return True - logging.getLogger('webdav').debug("Requested uri: %s", uri) + _logger.debug("Requested uri: %s", uri) return None # no def is_collection(self, uri): @@ -487,6 +487,7 @@ class dummy_dav_interface(object): class DAVStaticHandler(http_server.StaticHTTPHandler): """ A variant of the Static handler, which will serve dummy DAV requests """ + verbose = False protocol_version = 'HTTP/1.1' _HTTP_OPTIONS= { 'DAV' : ['1', '2'], @@ -573,7 +574,7 @@ try: conf = OpenDAVConfig(**_dc) handler._config = conf reg_http_service(directory, DAVHandler, DAVAuthProvider) - logging.getLogger('webdav').info("WebDAV service registered at path: %s/ "% directory) + _logger.info("WebDAV service registered at path: %s/ "% directory) if not (config.get_misc('webdav', 'no_root_hack', False)): # Now, replace the static http handler with the dav-enabled one. @@ -595,7 +596,7 @@ try: reg_http_service('/', DAVStaticHandler) except Exception, e: - logging.getLogger('webdav').error('Cannot launch webdav: %s' % e) + _logger.error('Cannot launch webdav: %s' % e) def init_well_known(): @@ -616,6 +617,8 @@ def init_well_known(): init_well_known() class PrincipalsRedirect(RedirectHTTPHandler): + + redirect_paths = {} def _find_redirect(self): @@ -639,7 +642,7 @@ def init_principals_redirect(): if dbname: PrincipalsRedirect.redirect_paths[''] = '/webdav/%s/principals' % dbname reg_http_service('/principals', PrincipalsRedirect) - logging.getLogger("web-services").info( + _logger.info( "Registered HTTP redirect handler for /principals to the %s db.", dbname) diff --git a/addons/document_webdav/webdav_view.xml b/addons/document_webdav/webdav_view.xml index 404e60588e3..44af9f2af3a 100644 --- a/addons/document_webdav/webdav_view.xml +++ b/addons/document_webdav/webdav_view.xml @@ -78,7 +78,7 @@ <field name="inherit_id" ref="document.view_document_directory_form" /> <field name="type">form</field> <field name="arch" type="xml"> - <page string="Dynamic context" position="after" version="7.0"> + <xpath expr="/form/notebook/page[@string='Dynamic context']" position="after" version="7.0"> <page string="WebDAV properties"> <label string="These properties will be added to WebDAV requests" colspan="4" /> @@ -98,7 +98,7 @@ </form> </field> </page> - </page> + </xpath> </field> </record> diff --git a/addons/edi/__init__.py b/addons/edi/__init__.py index b4a80c0f1dd..46fabbc2fd0 100644 --- a/addons/edi/__init__.py +++ b/addons/edi/__init__.py @@ -23,12 +23,13 @@ import logging import models import edi_service from models.edi import EDIMixin, edi_document +_logger = logging.getLogger(__name__) # web try: import controllers except ImportError: - logging.getLogger('init.load').warn( + _logger.warn( """Could not load openerp-web section of EDI, EDI will not behave correctly To fix, launch openerp-web in embedded mode""") diff --git a/addons/edi/edi_service.py b/addons/edi/edi_service.py index 074720a03e9..f48cc60950a 100644 --- a/addons/edi/edi_service.py +++ b/addons/edi/edi_service.py @@ -23,7 +23,7 @@ import logging import netsvc import openerp -_logger = logging.getLogger('edi.service') +_logger = logging.getLogger(__name__) class edi(netsvc.ExportService): diff --git a/addons/edi/models/edi.py b/addons/edi/models/edi.py index 589922ff178..383d8c7aaba 100644 --- a/addons/edi/models/edi.py +++ b/addons/edi/models/edi.py @@ -35,6 +35,7 @@ import pooler from osv import osv,fields,orm from tools.translate import _ from tools.safe_eval import safe_eval as eval +_logger = logging.getLogger(__name__) EXTERNAL_ID_PATTERN = re.compile(r'^([^.:]+)(?::([^.]+))?\.(\S+)$') EDI_VIEW_WEB_URL = '%s/edi/view?db=%s&token=%s' @@ -72,7 +73,6 @@ def last_update_for(record): return record_log.get('write_date') or record_log.get('create_date') or False return False -_logger = logging.getLogger('edi') class edi_document(osv.osv): _name = 'edi.document' diff --git a/addons/edi/models/res_partner.py b/addons/edi/models/res_partner.py index 357fdec061b..86d8c81b790 100644 --- a/addons/edi/models/res_partner.py +++ b/addons/edi/models/res_partner.py @@ -24,6 +24,7 @@ from osv import fields,osv from edi import EDIMixin from openerp import SUPERUSER_ID from tools.translate import _ +_logger = logging.getLogger(__name__) RES_PARTNER_EDI_STRUCT = { 'name': True, @@ -63,7 +64,7 @@ class res_partner(osv.osv, EDIMixin): code, label = 'edi_generic', 'Generic Bank Type (auto-created for EDI)' bank_code_ids = res_partner_bank_type.search(cr, uid, [('code','=',code)], context=context) if not bank_code_ids: - logging.getLogger('edi.res_partner').info('Normal bank account type is missing, creating ' + _logger.info('Normal bank account type is missing, creating ' 'a generic bank account type for EDI.') self.res_partner_bank_type.create(cr, SUPERUSER_ID, {'name': label, 'code': label}) @@ -84,7 +85,7 @@ class res_partner(osv.osv, EDIMixin): bank_name, ext_bank_id, context=import_ctx) except osv.except_osv: # failed to import it, try again with unrestricted default type - logging.getLogger('edi.res_partner').warning('Failed to import bank account using' + _logger.warning('Failed to import bank account using' 'bank type: %s, ignoring', import_ctx['default_state'], exc_info=True) return contact_id diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index fff9bdc0f1a..c4ed2eedb85 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -29,11 +29,12 @@ from osv import fields import tools from tools.translate import _ from urllib import quote as quote +_logger = logging.getLogger(__name__) try: from mako.template import Template as MakoTemplate except ImportError: - logging.getLogger('init').warning("email_template: mako templates not available, templating features will not work!") + _logger.warning("email_template: mako templates not available, templating features will not work!") class email_template(osv.osv): "Templates for sending email" @@ -75,7 +76,7 @@ class email_template(osv.osv): result = u'' return result except Exception: - logging.exception("failed to render mako template value %r", template) + _logger.exception("failed to render mako template value %r", template) return u"" def get_email_template(self, cr, uid, template_id=False, record_id=None, context=None): diff --git a/addons/event_sale/event_sale.py b/addons/event_sale/event_sale.py index 0d6497c45f2..9e65a034544 100644 --- a/addons/event_sale/event_sale.py +++ b/addons/event_sale/event_sale.py @@ -78,7 +78,6 @@ class sale_order_line(osv.osv): dic = { 'name': order_line.order_id.partner_invoice_id.name, 'partner_id': order_line.order_id.partner_id.id, - 'contact_id': order_line.order_id.partner_invoice_id.id, 'nb_register': int(order_line.product_uom_qty), 'email': order_line.order_id.partner_id.email, 'phone': order_line.order_id.partner_id.phone, @@ -89,5 +88,5 @@ class sale_order_line(osv.osv): } registration_id = registration_obj.create(cr, uid, dic, context=context) message = _("The registration %s has been created from the Sale Order %s.") % (registration_id, order_line.order_id.name) - registration_obj.log(cr, uid, registration_id, message) + registration_obj.message_append_note(cr, uid, [registration_id], body=message, context=context) return super(sale_order_line, self).button_confirm(cr, uid, ids, context=context) diff --git a/addons/fetchmail/fetchmail.py b/addons/fetchmail/fetchmail.py index 93ebd063051..cddcf642dc4 100644 --- a/addons/fetchmail/fetchmail.py +++ b/addons/fetchmail/fetchmail.py @@ -39,7 +39,7 @@ from osv import osv, fields import tools from tools.translate import _ -logger = logging.getLogger('fetchmail') +_logger = logging.getLogger(__name__) class fetchmail_server(osv.osv): """Incoming POP/IMAP mail server account""" diff --git a/addons/google_docs/__openerp__.py b/addons/google_docs/__openerp__.py index 1df94f34221..8cc5671e08a 100644 --- a/addons/google_docs/__openerp__.py +++ b/addons/google_docs/__openerp__.py @@ -30,6 +30,7 @@ 'web': True, 'js': ['static/src/js/gdocs.js'], 'update_xml': [ + 'security/ir.model.access.csv', 'res_config_user_view.xml' ], 'depends': ['google_base_account'], diff --git a/addons/google_docs/security/ir.model.access.csv b/addons/google_docs/security/ir.model.access.csv new file mode 100644 index 00000000000..9393d586fb8 --- /dev/null +++ b/addons/google_docs/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_google_docs,google.docs.config,model_google_docs_config,,1,0,0,0 +access_google_docs,google.docs.config,model_google_docs_config,base.group_system,1,1,1,1
\ No newline at end of file diff --git a/addons/hr/hr.py b/addons/hr/hr.py index e2bca73a72e..e4c08f60559 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -25,6 +25,7 @@ import logging from osv import fields, osv from PIL import Image import StringIO +_logger = logging.getLogger(__name__) class hr_employee_category(osv.osv): @@ -304,7 +305,7 @@ class res_users(osv.osv): 'user_id': user_id}, context=context) except: # Tolerate a missing shortcut. See product/product.py for similar code. - logging.getLogger('orm').debug('Skipped meetings shortcut for user "%s"', data.get('name','<new')) + _logger.debug('Skipped meetings shortcut for user "%s"', data.get('name','<new')) return user_id diff --git a/addons/hr/hr_demo.xml b/addons/hr/hr_demo.xml index c30c9fd33fb..f9f313646b9 100644 --- a/addons/hr/hr_demo.xml +++ b/addons/hr/hr_demo.xml @@ -67,14 +67,14 @@ <field name="name">Francois</field> <field name="login">fpi</field> <field name="password">fpi</field> - <field name="photo_big">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</field> + <field name="avatar_big">/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gODUK/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxERExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAlgDIAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A+hI4anSEVLGlTqlXzkcpCsNSLD6VOqVIqUcw7FdYqd5QqyqUoSi4WK/le1HlVa2e1Gyi4WKvlUnlg1a2UhXvii4WKpjHpSeUPSrRX2ppWncLFYxj0ppj9qtEYrJ1/XtF0GDztX1G3s0PQSP8zfRRyfwFFwsWTHUbJivLPFPxx0a03RaDYS38nI82b91GPcD7x/HbXk/iL4n+LNYZxPq0tvE2f3VqfKQA9uOSPqTVJCsfS+paxo2nhzfapZW2w4bzZ1Ug+hyawNQ+IPgqz3CXxBaOQOkW6X/0EGvlWa+lbJLZJ5JPeq8l6TzxnueaYcp9Rj4n+Bn3n+2cBDjJt5efp8tVrj4p+CI1kP8AacrbACNttJ8/GeOP54r5fe7cg8gA9hUL3JPH8OehFHMhcp9K6T8XPCd5G7Xr3GmkYx5sZcN9Nmf1FJefFnwbFKI4p7u4yfvRwYH/AI8Qf0r5rN2p4wVx0xTHvMLwSW9TRzByH0hc/FjwZGQBcXcmRklLc4Htz/Tiud1T406LE+2y0i8uOesjrHx68bq8HmumYn09KqyTvnOafOw9mj2jUvjU32iP7JoSLCDmTzZyWYcdMAAHr60V4ZK7Nkk0UvaMPZo/RqPHY5qZMV5pD9pIGS65JICyY/StC31LUbdwn2qQYGQWYEEfQ/0rzli4vc73hJLqegKBUigVx8HiW74LRQMoPJGQf51b/wCEqjXbus3wT1Vx/WtVWg+pi6E10OpAFO4rNsNVtbtB5UmGP8LDB/8Ar/hV3zBWiaexm01uS4HrSEj1rO1fWdN0e0N3ql9b2cA43zSBQT6DPU+w5ry7xX8dtCsWaHQrOXVJB/y1cmKIfTI3H8hTEewkiqOsavpWkW32jVdQtbKLs08oQH6Z6/hXy34n+M/jPVg0cN7HpkJ/gs12H/vskt+RFeeX2p3V3MZbq5lnkPVpHLE/iapRFc+qPEPxq8F6cjiznn1SYcBYIyq592bH5gGvPNd+P2tTMU0rSrKzX1lYzP8AnwP0rw57hjxnmopJiO+KpJBY9Pn+JHxF8RtJbWmp3r4UsyWcSxlV9SUAOPxrg9Qvrx7mVrtpmmDESGTJbd05z3pPC2uXejX017ay7HSBiOAQfwPB/HsTXSeKdYx8NdJlW1gS81qSWS6lK7nIVwcAnpljnjnj3rCdWUJqNtGdUKEJU3K+qOMe5LE8/nVeS5z0NUXmOc5qIyn1Nb3OexdM/PJqN5x/eqmzHP3qTeM0XFYtljsLjp3qPzAVDZyDUBk4OTx+lMLZ7j6UrhYnMh6gHFMd39OahLZPJxQZX2bQBnqT3ouA5idwUkDIzzSTeQIQQ7tITyMcAfWoi7YwRn60wjPTOPpSbuNCTFNgKtknt6UU14j/ABHbkcUUBY+1LLWNOnSRfs0si7fkZYn6+/I/rUk11GkJkXquWPmxnC+nP/1qp2sOrRAql6VDf9Mk44xxxWhFNrg35vImDjBBgX+nNed9SqX6fed/1un5kVvrylVDpHGAMKyIBkfhyRUzT2wkw8jF8HMa5Vge4wRWX/YdyZvOa4jLFs826Y+n+eazvEfhDWddkZr3xHdFCNojWMBQvYcHJH1JrVYKXczeLitkWtR8baHpanfcLNID/qkXe2fz4/HFcprXxj8QNC1vo6pZJ/z1k/eSfhuyB+R+tKfhLKQQNbcZ9YBx/wCPVWn+EFw3/Mf/AANuP/i66aeF5DnqYjnPPNc1rUdWuWutSvp7yf8AvyyFiB6DPQewrKeTABPGefwr0uf4O3WNqa8g/wC3f/7Oqcvwh1BTka3ExHf7P/8AZ1uqbMPaRPOJHU/xE/rVdmHT5h9RXpY+FmoIuJNWhYf9cf8A7Knj4cFYVjllSQqMZUbM/XrmjkkP2kO55fkMpAkOOvAqNmCjOQfxr0if4cADEbAHud/+Aqu3w5DD97cMGHcc5/l/OocZLoWpQfU4ayhkk067uuQigD9QP6/pW/4yVh4E8Mtg4jNzH+qH/Gn6lZR2Hh+5s4lZmW8WDGOSBksfwxmut/seHX/A+mxBF3xTsduCRggZ6fhXBVqe/F+f6HqU6NqT9Dxds980hJx0Nenz+B9LgcicKjZ4Xeyj/wAe/wAatweCNJKBWWDGOrT44+o+tbuvBbnD7GR5E2eaQgn1+levnwHo64drnTwAOA1zkDH0qjL4Q0aGYn7dprZUjC736+2P5UKvF7A6TR5aCQcAc0c7uBmvSz4f0mGVW8u2kA/h8o46Ut1YaU+Cmi2b4YEhS6cenBp876InkXc802Hqoxxg5pFikkkCxoXJPRRzXbavotvcPG1pZRaeoB3IJ3kB9/m/+vUK6HGcGabzNvZySF+gpqTauDikczFp1y0ixNGI5DjiZwnHr8xHFTX2lPaFEnvLL5lz+6nWUA+h2Zrbbw/aGVnFywU9FAA/z9KtfYrSKLy41xkYyBz+eKNe4tF0OUkggfLfa49wA2qwYAnvzjFFdBcWcckex2UgDCryFH+Jop69xXXY+mY0lP8AHg9uKehm3bfPB+i4BqvGDkqWB44JNSJLtX7zD1JHFdaOYtLG6/N5/HU4p7Bv+fjI9AAarpMjEYZZPcLkYp7SRK2RJnHXAwPypiJVAUHMvOPb/CkKsqBjMwHuMfpTXmxHuLZYnPP/ANYVH5u8Bg3HoP8AP+FK5LQj5ILJNkH2qJg23/WEE+9LPOoOWQFVP905FQTT+YpCo5PYlCP51VxWGTbuu8ke4qrIDnHmn6VNKwCjcwyOoPSq0rg4IbH41SZNiCYNyS5GTVSZgoJZ+nXJqeWRQDggk++a5nxJ4i0qztblZL+DMY/ehZASnbBA5yTxihy0HGN3Y57xBBPHpcN7xi71CUD33RkZ/In866+OwbT/AA9psMqFJCjFiBxnivFPGXjy/wBUt7CzskNrawlwm5ssWOPn9AcED8OtdT8PLibYkUl35zSxMxBYk7gw/wAa8ynTftYyfdnt1aqdKUY9l+B2s0zvHsebKn19Kw73SiCZ4EZkXkCJSzH3x0/DFa1yrKQrJnIz8rDFVLtpltZFjIXjpk/XsM16M4xluebFtGCTcpziN0/2xtb8qYtwZTwp3D+HHH8jT7JeXYRyxFTgqS2CT6A8fpUd7DIz+ZvVcf7Rya4JwVzojK6LSQsRukjyP9g4qQfZgMByv15qC3bcgdV5/wBpgB+mTQ6vI3ykjHUKpH86xaa2KvcsNGmPlLSfgMfyqvOkpzuhP0H+eKI4Z0/i/IVYilcDD9R601Jg0UZI04JRx74qB7KVm3BwVxwMHitdzDJ94DpndUEsAK5jc/ic/wA6tMkx57Fsfe/pRVy4WRQc7icdOn40VVxWPaIp12ZLFuBk4/TipGuIEcEyRL6ZOCf0rHTUIwcvIxx0wcD+ZFWjeh/khUh+oO3P412nGaS3LMCYuc8Bt3+PFOV5FzycDgcg4/D/ABzWabt3UI06pg5J3KOfxzViMjepkkGD0JOfyI6UCLqsoBARnbkt0Apks8zpmKMbeufX8cVVmurKEkGQMc9ACSc+/aq0moYH7lSqg8MznP8AOhahojSWR8fvG2nHIB4qpdXqpyCM+nWsya9klYZl2H09B9ce1RmZdqjc0g54GT+tUl3IuWXvlckBnDdMYqtNeJkiOPPqfWmNIvl/MCueMlsfhVMy7M4AJz+nbtVqwWZJJcOeN65xkDaRXz74/kibxdqMcTuY2uiWXOBuA+Y4+pNe7TMzAMsjoc89s14V8Tbea18W3TSNE3nESIVPRSMAH34P1696zq7G1NWZha4D/aUMUcRVY4QOORnJ/wDrivSPAEm29szC8iu8Um8ZxjPJB/KvPy6z35eU/KijO3uCc/8As1em+AIbhnM8srmJISATnli3GPwH61xx+KKO+1oyZ2HPPJz7EVGx56inN0PcVXkDnLqyhR1OP/r12XOMWREkKpI3H8KhsAn/AD3rFuo4grLMQNpxnOOau6jdSrmOJo9mMEo3zH6/y4rJmMezlwn481y1ZJmsERrJFFMBAGdieRVzdeytmOWJE9CuTWQnlpPvklVxnoB1/Stm3VRyoQA88CsXozQmgRwvzusjDrgY/rRKm8ZctntilXeGySCB2AxSyyLgkkAd6loCk3mqpClmHuKhW4JOGcqfrjBq08ysMKykfWqU4GSG2kHn3FSNai3F9tDAruB6Y9qKqTKgxgIw75FFUmxWPV4XVIgXcx5HdiT/ADpyS228Zcybc5w+M+xAJ/UVmW5glwqlnx6gkj8jgVoIYoYh5hijQcZaTB3emP8ACvSucNrl6OeKJC4jCIw5wWz+Oef0pkksBIV0VmIx+8OQfb/Iqo1zBHEr+bIxPClZQR+vJFRGVt7lcHOM5Gc/jj+VLcGi+suxs+XZRDH8CZb8Mnj9ailvUkOBbq2B953wB+FVRtPMssUWOcKBu/maabuxiGPNZj/vqpHHfoaeguVkwkuXYlVgVR/cAGPxwahuBduysHUjPysz8r9OOagfUE3fL9odTwGwNoppuAT8yk+igDB/LkU0xpBI9yPkM2TngAHP5VEZWUeXIzOc8ZcCpDK6DZHtjLdlOP0qCZ8HcEPfHzE5/I0cxaiLNMWbocetcD488NJrWsxTC4aGVowuNm4cE/412M9wVYE7V9MqR/OsS9uDJqIkVslGUj8+lc9epaOh2YSiqlRJ7HMWPw11J9Zlsor6BnhVNxZCAwKg479jiu6tdNv9ML2U5WaVW5dc7fujjntjFa2lTKnja8m6ZhjOP+2a1o+JsLdx3AwRKg6DPI4/wrzMLXlKtaXY9bH4ONLD80F1MBbeRAzsWbHOxcgH61nahdnJBXg9scCtuSVYVLs3/Ac1zmoXImcgACvUlKyPBitSk0inPGao3MpIICY9jV84z1qGVIiSxRWx65rmbN0ULZJJJBlMqDz6VuwFdoxx7VmCWNHwECgf3avRSB0BByDSAuq+V4zUMsYdecg+wB/pTY3YcEDA6HOc053J9hUiKyW/lbgCwB5yWz+nalMfBJIyfenBjkjLN3GV6VGzf3uo96GMpzQIM5DMaKkmOeMY9z1ooSFc7V7tokzNK8fOARwPphev41Vk1eKMth53YdN2Co9eM8VnR23nPuklTH8QV8/oKt29tZRMBvLMvQOrJj8Rz+tejY5GSJfTSMNsTbm/iEfX+fH41ajS7mGNvA43KBn+WKeWit0zs8pDyV3Bs/nmmyagDjy4xECMBgQPzGf60BYcloXzkyH1YKSPoR1/KlFsq/MxOR0O09Ppmq81/tB8y7jPPcnP6Aiqkmp2bHBkLbupKFifoaG0OxoSSqjgbo3z8vHP58ZFK0z4JCvgHspH86zjfhQBDaKrHoWK5/IVWuL66l+Q3CxjP3VxmodQtIv3V3DbjMpCsRnCglsf0qg+rwsMRxOT7qP/ANX86iKwYO/czn+L1qS2giQCSQDPZc8Co5m2VawGOe5Tzbg+UgG4KWySeuSfT2rF025jOpiBnLbDu/D0+netXX7gJpkzDjI25rz3W4Xi0B9UlJZ5pRAgyRtAyS3/AI7j86yrQ5lY7sHWVH32egLqhXxa08S7422oSp6jaAea6+8vIr2yS4gckQMUdeu3OMfyrwbwPdFdXjgfDQz/ACOn17j3HrXqHhq88j7do4/eFlLxyE8nndz+ORXD7H2Uo1F0PTli1iqcqVtXqWdUnBXGWrBLtk5xmpLu782TAyfXFQ5HpXdOVzw4xsOMmPXn2qvLIwJ71MSOoOKZKYyvJFZlIoMWd+oXnn3q5akZwwBI9aqvgMcAnP6U+CTDfNnAoGzUEhIz0HenLIWGDkfSqqOHQdPw5odyuNigj64qSCV3RSCWx9TUZmVyMSKfUdaaz89Mj3qGR9vXoe9ACzMcfJ680VXlfcMKRg9SDzRRcTNiK7gQ7SFk9mmY/oR/KpDq8kWY44gmOm6QsPy7VkmUIAgQIcfwyAj8B/8AXpyXDBNpkOD2bB/pXfzGFrF2S/vGzlmHuCTj6EdKI/tkpyHkkPruyR+dRW2GJkjIDDqyuc/kARUxvVIwxkk+oBB/Hg1LaAsW1izjLrL74bp+VWG+wWgzJuDA8gSZJ+oFUcXk8W4yrbW3dlbbn8zyaqypHGxCybh2JHP5VLlbYpRL8+pSODHb7YEP8KALn6nrUKvI2QrOeex61XjVmHzqFGMYPWpwyp93avuOP61OrK0RYjGwgngjp/n1qUynoapmbjBbA9c1GZFJwJBj8aey0C92LqCpeXFvYzSNEkjEsy9RxVTVdPsbrRn0tm2RAYVtuWU5yG/Ojdv1VPnOUiY5B9SBUknyn5Wy3qeayV+Zs6J2VOKMjwl4ct9Kumu2vUupgCI/kKhAe/J61s6rM8Bhvozh4pFOV9CcEfTmqqSSox3vuGf7oAFMvZfNtZIwc5HSlN3i0FFuNRSRb1Vit7J5AQBjvxnHXmq0U0pUGRAvPP0qS9kjjZTI4XcoCjPXgVXcK64Vyp64yc1jFuyNai99lneCcZxTXUYyWqrko/3yVAxjsKckgUjY7MP4lboB7HrTuZ8qFcKrY4B+tV5WCn075qaeQBeADxxWcznozBt3IIH6VSEzRsZS+ecgd6t5wMbifrWdZSjYwxg+1WXc470iSTzJNxBUBccHPNMlO7grke9R7n9c01nYZ5z7cVKYrCEKgwqgD0AoqCZm4xwO/FFNCHoIGAw+G+oX+tSmWKJRwjn18zn8hxWZ9sLNhFGTxuUbasq8cCB5Q0knVdwwp/qa67mRoRStcHiObjujE4Ht6VMs9raffk+0PjhQTgH3IP8AKscXNzcEgyEJ2VeAPwFWIYgBzgH/AGgam7Y9EXp7uW/IeaTbgYUBTgfzp8RVBlVU/wC0vJqquxf4JPwORTt/IID+xwR/LmmtALnnKTwwP9KaX5IR8fif6VVEmTtbYSR1A/8ArUhkOeXU/Uii4WJy4J+ZgSO+c1Fc7ljzHk5I+YHFMMqsOST7Hn9aTIxweDSbKSsyc3dvG3l+QzGRNvmP1HIIx+Wfx9slA6c/Ov8A3yOKpXDAbSecHjpUgl3ryFrOPum05OdmTttYcOPXpVO5QNkZGMduPennaD/9emkZ78UpMS0I7Yzz7oJctk5UnpjFWECxkoDyDggDvUafK2VbBp38RbPJ6ms7alOTY6RWwXTBwOM+tMZmCjPLH2okYlQPMIAqGR2CjJ5Hf1pBcc0m4cgelVJXG/aFfkdewp+75jj7vX8ahm5GAAfXI61SEx9nMElB6g8Vpblxx+lYWcFiSPbHarVtc5G3aTg07EM0DJn2+tMZzUbP+NRMcg5/Q0CJJG6Hg/jRVUnAIHT0ooQWK63IgJ8pPnHcgf8A66IC80hJOSfU0UVsnqJl0FkwC5/CnCXb1z+QooqrkEizBeSOP90U6OYt0PHb5cfyNFFSxolikCsxPG3qAOD/ACqMSHls/pRRSLsJ5uDyM0vmZNFFA7DZGG0g1HDJ8vTpRRUyKWxIH9qXf14ooqWMN4x0o8w5I9KKKkBjSEcc88VE0uT34FFFAFSSVgCVJGDgc0vm5jV8dQDRRQgKsswUlQCehqe0kxgD+KiimySz5gGM55pkjEg4JFFFIkhDlU+Zi3viiiimmB//2Q==</field> </record> <record id="base.user_jth" model="res.users"> <field name="name">Julien</field> <field name="login">jth</field> <field name="password">jth</field> - <field name="photo_big">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</field> + <field name="avatar_big">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</field> </record> <record id="base.user_ngh" model="res.users"> diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index 1a6c8560afd..dd89a3ab57d 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -14,7 +14,7 @@ <field name="date_value"/> <field name="name"/> <field name="ref"/> - <field domain="[('type','=','normal'), ('parent_id','!=',False)]" name="analytic_account" groups="analytic.group_analytic_accounting"/> + <field domain="[('type','in',['normal','contract']), ('parent_id','!=',False)]" name="analytic_account" groups="analytic.group_analytic_accounting"/> <field name="unit_amount"/> <field name="unit_quantity"/> <field name="total_amount" sum="Total"/> @@ -97,7 +97,7 @@ </group> <group colspan="2" col="2" groups="analytic.group_analytic_accounting"> <separator string="Customer Project" colspan="2"/> - <field domain="[('type','=','normal')]" name="analytic_account"/> + <field domain="[('type','in',['normal','contract'])]" name="analytic_account"/> </group> <group colspan="2" col="2"> <separator string="References" colspan="2"/> diff --git a/addons/hr_timesheet/hr_timesheet.py b/addons/hr_timesheet/hr_timesheet.py index 12fbbcdedef..66911f25ff5 100644 --- a/addons/hr_timesheet/hr_timesheet.py +++ b/addons/hr_timesheet/hr_timesheet.py @@ -190,4 +190,15 @@ class hr_analytic_timesheet(osv.osv): hr_analytic_timesheet() +class account_analytic_account(osv.osv): + + _inherit = 'account.analytic.account' + _description = 'Analytic Account' + + _columns = { + 'use_timesheets': fields.boolean('Timesheets', help="Check this field if this project manages timesheets"), + } + +account_analytic_account() + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_timesheet/hr_timesheet_demo.xml b/addons/hr_timesheet/hr_timesheet_demo.xml index 3ec7664bcb7..077aaf6179c 100644 --- a/addons/hr_timesheet/hr_timesheet_demo.xml +++ b/addons/hr_timesheet/hr_timesheet_demo.xml @@ -12,6 +12,18 @@ <field name="product_id" ref="product.product_consultant"/> <field name="journal_id" ref="analytic_journal"/> </record> + <record id="account.analytic_administratif" model="account.analytic.account"> + <field name="use_timesheets">True</field> + </record> + <record id="account.analytic_partners" model="account.analytic.account"> + <field name="use_timesheets">True</field> + </record> + <record id="account.analytic_consultancy" model="account.analytic.account"> + <field name="use_timesheets">True</field> + </record> + <record id="account.analytic_super_product_trainings" model="account.analytic.account"> + <field name="use_timesheets">True</field> + </record> <record id="working_hours_requirements" model="hr.analytic.timesheet"> <field name="name">Requirements analysis and specification</field> @@ -20,7 +32,7 @@ <field eval="2.00" name="unit_amount"/> <field name="product_id" ref="product.product_consultant"/> <field name="product_uom_id" ref="product.uom_hour"/> - <field name="account_id" model="account.analytic.account" search="[('code','=','1')]"></field> + <field name="account_id" ref="account.analytic_administratif"></field> <field eval="-60.00" name="amount"/> <field name="general_account_id" model="account.account" ref="account.a_expense"/> <field name="journal_id" ref="analytic_journal"/> @@ -33,7 +45,7 @@ <field eval="1.00" name="unit_amount"/> <field name="product_id" ref="product.product_consultant"/> <field name="product_uom_id" ref="product.uom_hour"/> - <field name="account_id" model="account.analytic.account" search="[('code','=','1')]"></field> + <field name="account_id" ref="account.analytic_administratif"></field> <field eval="-30.00" name="amount"/> <field name="general_account_id" model="account.account" ref="account.a_expense"/> <field name="journal_id" ref="analytic_journal"/> @@ -46,7 +58,7 @@ <field eval="03.00" name="unit_amount"/> <field name="product_id" ref="product.product_consultant"/> <field name="product_uom_id" ref="product.uom_hour"/> - <field name="account_id" model="account.analytic.account" search="[('code','=','1')]"></field> + <field name="account_id" ref="account.analytic_administratif"></field> <field eval="-90.00" name="amount"/> <field name="general_account_id" model="account.account" ref="account.a_expense"/> <field name="journal_id" ref="analytic_journal"/> @@ -59,7 +71,7 @@ <field eval="01.00" name="unit_amount"/> <field name="product_id" ref="product.product_consultant"/> <field name="product_uom_id" ref="product.uom_hour"/> - <field name="account_id" model="account.analytic.account" search="[('code','=','1')]"></field> + <field name="account_id" ref="account.analytic_administratif"></field> <field eval="-30.00" name="amount"/> <field name="general_account_id" model="account.account" ref="account.a_expense"/> <field name="journal_id" ref="analytic_journal"/> @@ -72,7 +84,7 @@ <field eval="01.00" name="unit_amount"/> <field name="product_id" ref="product.product_consultant"/> <field name="product_uom_id" ref="product.uom_hour"/> - <field name="account_id" model="account.analytic.account" search="[('code','=','1')]"></field> + <field name="account_id" ref="account.analytic_administratif"></field> <field eval="-30.00" name="amount"/> <field name="general_account_id" model="account.account" ref="account.a_expense"/> <field name="journal_id" ref="analytic_journal"/> diff --git a/addons/hr_timesheet/hr_timesheet_view.xml b/addons/hr_timesheet/hr_timesheet_view.xml index 53def628bfe..a8a361ed633 100644 --- a/addons/hr_timesheet/hr_timesheet_view.xml +++ b/addons/hr_timesheet/hr_timesheet_view.xml @@ -12,7 +12,7 @@ <field name="user_id" on_change="on_change_user_id(user_id)" required="1"/> <field name="journal_id" invisible="1"/> <field name="name"/> - <field domain="[('type','=','normal')]" name="account_id"/> + <field domain="[('type','=','normal'),('use_timesheets','=',1)]" name="account_id" context="{'default_use_timesheets': 1}"/> <field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" required="1" domain="[('type','=','service')]" invisible="1"/> <field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" sum="Total time" widget="float_time"/> <field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" invisible="1"/> @@ -78,6 +78,21 @@ </field> </record> + + <record id="account_analytic_account_timesheet_form" model="ir.ui.view"> + <field name="name">account.analytic.account.invoice.form</field> + <field name="model">account.analytic.account</field> + <field name="type">form</field> + <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/> + <field name="arch" type="xml"> + <xpath expr='//separator[@name="project_sep"]' position='replace'> + <separator name="project_sep" string="Project Management" colspan="4"/> <!-- removal of invisible attribute --> + </xpath> + <xpath expr='//separator[@name="project_sep"]' position='after'> + <field name="use_timesheets"/> + </xpath> + </field> + </record> <record id="act_hr_timesheet_line_evry1_all_form" model="ir.actions.act_window"> <field name="name">Timesheet Lines</field> diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py index 0a58efb782b..f1138d7b246 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py @@ -63,39 +63,58 @@ class account_analytic_account(osv.osv): _inherit = "account.analytic.account" _columns = { - 'pricelist_id': fields.many2one('product.pricelist', 'Customer Pricelist', + 'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', help="The product to invoice is defined on the employee form, the price will be deduced by this pricelist on the product."), 'amount_max': fields.float('Max. Invoice Price', help="Keep empty if this contract is not limited to a total fixed price."), 'amount_invoiced': fields.function(_invoiced_calc, string='Invoiced Amount', help="Total invoiced"), - 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Invoice on Timesheet & Costs', - help="Fill this field if you plan to automatically generate invoices based " \ - "on the costs in this analytic account: timesheets, expenses, ..." \ - "You can configure an automatic invoice rate on analytic accounts."), + 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Timesheet Invoicing Ratio', + help="This field allows you to define the rate in case you plan to reinvoice " \ + "the costs in this analytic account: timesheets, expenses, ..."), } _defaults = { 'pricelist_id': lambda self, cr, uid, ctx: ctx.get('pricelist_id', False), } - def on_change_partner_id(self, cr, uid, id, partner_id, context={}): - res={} - part = self.pool.get('res.partner').browse(cr, uid, partner_id) + + def on_change_use_timesheets(self, cr, uid, ids, use_timesheets, context=None): + res = {'value': {}} + if use_timesheets: + ir_model_obj = self.pool.get('ir.model.data') + res['value']['to_invoice'] = ir_model_obj.get_object_reference(cr, uid, 'hr_timesheet_invoice', 'timesheet_invoice_factor1')[1] + return res + + def on_change_partner_id(self, cr, uid, ids,partner_id, name, context=None): + res = super(account_analytic_account,self).on_change_partner_id(cr, uid, ids,partner_id, name, context=context) + part = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) pricelist = part.property_product_pricelist and part.property_product_pricelist.id or False if pricelist: - res['pricelist_id'] = pricelist - return {'value': res} + res['value']['pricelist_id'] = pricelist + return res def set_close(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state':'close'}, context=context) + self.write(cr, uid, ids, {'state':'close'}, context=context) + message = _("Contract has been <b>closed</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True def set_cancel(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state':'cancelled'}, context=context) + self.write(cr, uid, ids, {'state':'cancelled'}, context=context) + message = _("Contract has been <b>cancelled</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True def set_open(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state':'open'}, context=context) + self.write(cr, uid, ids, {'state':'open'}, context=context) + message = _("Contract has been <b>opened</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True def set_pending(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state':'pending'}, context=context) + self.write(cr, uid, ids, {'state':'pending'}, context=context) + message = _("Contract has been set as <b>pending</b>.") + self.message_append_note(cr, uid, ids, body=message, context=context) + return True account_analytic_account() @@ -107,10 +126,6 @@ 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 unlink(self, cursor, user, ids, context=None): - return super(account_analytic_line,self).unlink(cursor, user, ids, - context=context) - 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_invoice/hr_timesheet_invoice_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml index 6aaf63a0c03..d3d310e6e9a 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml @@ -5,23 +5,18 @@ <field name="name">account.analytic.account.invoice.form</field> <field name="model">account.analytic.account</field> <field name="type">form</field> - <field name="inherit_id" ref="account.view_account_analytic_account_form"/> + <field name="priority">30</field> + <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/> <field name="arch" type="xml"> - <field name="partner_id" position="replace"> - <field name="partner_id" on_change="on_change_partner_id(partner_id, context)"/> - </field> - <group name="contract" position="after"> - <group name="invoice_data"> - <separator colspan="2" string="Invoicing Data"/> + <xpath expr='//separator[@name="description"]' position='before'> + <group string="Invoice on Timesheets Options" name="invoice_on_timesheets" col="4"> + <field name="pricelist_id" /> <field name="to_invoice" widget="selection"/> - <field name="pricelist_id" groups="product.group_sale_pricelist" domain="[('type','=','sale')]" attrs="{'required':[('to_invoice','!=',False)]}"/> - <field name="amount_max"/> - </group> - <group name="invoice_stats"> - <separator colspan="4" string="Invoicing Statistics"/> - <field name="amount_invoiced"/> </group> - </group> + </xpath> + <xpath expr="//field[@name='use_timesheets']" position="replace"> + <field name="use_timesheets" on_change="on_change_use_timesheets(use_timesheets, context)"/> + </xpath> <xpath expr="/form/sheet" position='before'> <header> <button name="set_pending" string="Pending" type="object" states="open" /> @@ -58,7 +53,7 @@ <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_form"/> <field name="arch" type="xml"> <field name="account_id" position="replace"> - <field domain="[('type','=','normal'),('state', '<>', 'close')]" name="account_id" on_change="on_change_account_id(account_id)"/> + <field domain="[('type','in',['normal','contract']),('state', '<>', 'close'),('use_timesheets','=',1)]" name="account_id" on_change="on_change_account_id(account_id)" select="1" context="{'default_use_timesheets': 1}"/> </field> </field> </record> @@ -81,9 +76,8 @@ <field name="type">tree</field> <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_tree"/> <field name="arch" type="xml"> - <field name="account_id" position="replace"> - <field domain="[('type','=','normal'),('state', '<>', 'close')]" name="account_id" on_change="on_change_account_id(account_id)"/> + <field domain="[('type','in',['normal','contract']),('state', '<>', 'close'),('use_timesheets','=',1)]" name="account_id" on_change="on_change_account_id(account_id)" select="1" context="{'default_use_timesheets': 1}"/> </field> </field> </record> diff --git a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml index 0167d4b959e..3462f6603c5 100644 --- a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml +++ b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml @@ -387,7 +387,7 @@ src_model="res.users"/> <act_window - context="{'search_default_account_id': [active_id]}" + context="{'search_default_account_id': [active_id],'default_account_id': [active_id]}" id="act_account_analytic_account_2_report_timehsheet_account" name="Timesheets" res_model="hr.analytic.timesheet" diff --git a/addons/hr_timesheet_invoice/report/report_analytic_view.xml b/addons/hr_timesheet_invoice/report/report_analytic_view.xml index f545edcb899..89d8fa1857e 100644 --- a/addons/hr_timesheet_invoice/report/report_analytic_view.xml +++ b/addons/hr_timesheet_invoice/report/report_analytic_view.xml @@ -133,10 +133,10 @@ </record> <act_window - domain="[('invoice_id','=',False),('to_invoice','<>',False)]" - context="{'search_default_account_id': [active_id], 'default_account_id': active_id}" + domain="[('invoice_id','=',False),('to_invoice','<>',False), ('journal_id.type', '=', 'general')]" + context="{'search_default_account_id': [active_id], 'default_account_id': active_id,'search_default_to_invoice': 1}" id="act_acc_analytic_acc_2_report_acc_analytic_line_to_invoice" - name="Lines to Invoice" + name="Timesheet Lines to Invoice" res_model="account.analytic.line" src_model="account.analytic.account"/> diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml index 4059b539701..42918b300a9 100644 --- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml +++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create_view.xml @@ -11,17 +11,21 @@ <header> <button name="do_create" string="Create Invoices" type="object" icon="terp-gtk-go-back-rtl" class="oe_highlight_on_dirty" /> </header> - <group> - <group string="Do you want to show details of work in invoice?" colspan="4"> - <field name="date"/> - <field name="time"/> - <field name="name"/> - <field name="price"/> - </group> - <group string="Force to use a specific product" colspan="4"> - <field name="product"/> - </group> - </group> + <notebook> + <page string="Billing Data"> + <group> + <group string="Do you want to show details of work in invoice?"> + <field name="date"/> + <field name="time"/> + <field name="name"/> + <field name="price"/> + </group> + <group string="Force to use a specific product"> + <field name="product"/> + </group> + </group> + </page> + </notebook> </form> </field> </record> diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml index 993a6c67408..c43b1206541 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml @@ -99,7 +99,7 @@ <field colspan="4" context="{'date':date_current,'user_id':user_id}" domain="[('name','=',date_current)]" name="timesheet_ids" nolabel="1"> <tree editable="top" string="Timesheet Lines"> <field invisible="1" name="date"/> - <field domain="[('type','=','normal'), ('state', '<>', 'close')]" name="account_id" on_change="on_change_account_id(account_id)"/> + <field domain="[('type','in',['normal', 'contract']), ('state', '<>', 'close'),('use_timesheets','=',1)]" name="account_id" on_change="on_change_account_id(account_id)" context="{'default_use_timesheets': 1}"/> <field name="name"/> <field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time"/> <field name="to_invoice" widget="selection"/> diff --git a/addons/import_base/import_framework.py b/addons/import_base/import_framework.py index 44243aa952c..8bcda79c64e 100644 --- a/addons/import_base/import_framework.py +++ b/addons/import_base/import_framework.py @@ -30,7 +30,7 @@ import logging import StringIO import traceback pp = pprint.PrettyPrinter(indent=4) - +_logger = logging.getLogger(__name__) @@ -60,7 +60,6 @@ class import_framework(Thread): self.context = context or {} self.email = email_to_notify self.table_list = [] - self.logger = logging.getLogger(module_name) self.initialize() """ @@ -165,7 +164,7 @@ class import_framework(Thread): data_i is a map external field_name => value and each data_i have a external id => in data_id['id'] """ - self.logger.info(' Importing %s into %s' % (table, model)) + _logger.info(' Importing %s into %s' % (table, model)) if not datas: return (0, 'No data found') mapping['id'] = 'id_new' @@ -188,7 +187,7 @@ class import_framework(Thread): model_obj = self.obj.pool.get(model) if not model_obj: raise ValueError(_("%s is not a valid model name") % model) - self.logger.debug(_(" fields imported : ") + str(fields)) + _logger.debug(_(" fields imported : ") + str(fields)) (p, r, warning, s) = model_obj.import_data(self.cr, self.uid, fields, res, mode='update', current_module=self.module_name, noupdate=True, context=self.context) for (field, field_name) in self_dependencies: self._import_self_dependencies(model_obj, field, datas) @@ -431,9 +430,9 @@ class import_framework(Thread): 'auto_delete' : True}) email_obj.send(self.cr, self.uid, [email_id]) if error: - self.logger.error(_("Import failed due to an unexpected error")) + _logger.error(_("Import failed due to an unexpected error")) else: - self.logger.info(_("Import finished, notification email sended")) + _logger.info(_("Import finished, notification email sended")) def get_email_subject(self, result, error=False): """ diff --git a/addons/import_sugarcrm/sugar.py b/addons/import_sugarcrm/sugar.py index 35103a41173..df2aa386992 100644 --- a/addons/import_sugarcrm/sugar.py +++ b/addons/import_sugarcrm/sugar.py @@ -33,7 +33,7 @@ import import_sugarcrm import logging import sys - +_logger = logging.getLogger(__name__) debug = False @@ -119,7 +119,7 @@ def get_contact_by_email(portType, username, password, email_address=None): email_list.append(list.Email_address) return email_list except Exception,e: - logging.getLogger('sugarcrm_soap').error('Exception: %s\n' % (tools.ustr(e))) + _logger.error('Exception: %s\n' % (tools.ustr(e))) return False def get_document_revision_search(portType, sessionid, module_id=None): diff --git a/addons/l10n_be_invoice_bba/invoice.py b/addons/l10n_be_invoice_bba/invoice.py index 997036c0cec..4cdbca84c0a 100644 --- a/addons/l10n_be_invoice_bba/invoice.py +++ b/addons/l10n_be_invoice_bba/invoice.py @@ -23,8 +23,8 @@ import re, time, random
from osv import fields, osv
from tools.translate import _
-import netsvc
-logger=netsvc.Logger()
+import logging
+_logger = logging.getLogger(__name__)
"""
account.invoice object:
@@ -41,7 +41,7 @@ class account_invoice(osv.osv): context=context)
res[[i for i,x in enumerate(res) if x[0] == 'none'][0]] = ('none', 'Free Communication')
res.append(('bba', 'BBA Structured Communication'))
- #logger.notifyChannel('addons.'+self._name, netsvc.LOG_WARNING, 'reference_type = %s' %res )
+ #l_logger.warning('reference_type = %s' %res )
return res
def check_bbacomm(self, val):
@@ -68,7 +68,7 @@ class account_invoice(osv.osv): result = super(account_invoice, self).onchange_partner_id(cr, uid, ids, type, partner_id,
date_invoice, payment_term, partner_bank_id, company_id)
# reference_type = self.default_get(cr, uid, ['reference_type'])['reference_type']
-# logger.notifyChannel('addons.'+self._name, netsvc.LOG_WARNING, 'partner_id %s' % partner_id)
+# _logger.warning('partner_id %s' % partner_id)
reference = False
reference_type = 'none'
if partner_id:
@@ -215,5 +215,5 @@ class account_invoice(osv.osv): ]
account_invoice()
- -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: +
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_be_invoice_bba/partner.py b/addons/l10n_be_invoice_bba/partner.py index 04a51c3a6ab..8951be5dfa2 100644 --- a/addons/l10n_be_invoice_bba/partner.py +++ b/addons/l10n_be_invoice_bba/partner.py @@ -24,8 +24,6 @@ from osv import fields, osv import time from tools.translate import _ -import netsvc -logger=netsvc.Logger() class res_partner(osv.osv): """ add field to indicate default 'Communication Type' on customer invoices """ diff --git a/addons/l10n_multilang/l10n_multilang.py b/addons/l10n_multilang/l10n_multilang.py index c4130f2761d..c4c6be74e4b 100644 --- a/addons/l10n_multilang/l10n_multilang.py +++ b/addons/l10n_multilang/l10n_multilang.py @@ -22,8 +22,8 @@ from osv import fields, osv import os from tools.translate import _ -import netsvc -logger=netsvc.Logger() +import logging +_logger = logging.getLogger(__name__) class wizard_multi_charts_accounts(osv.osv_memory): """ @@ -80,8 +80,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): if context.get('lang') == lang: self.pool.get(out_obj._name).write(cr, uid, out_ids[j], {in_field: value[in_id]}) else: - logger.notifyChannel('addons.'+self._name, netsvc.LOG_WARNING, - 'Language: %s. Translation from template: there is no translation available for %s!' %(lang, src[in_id]))#out_obj._name)) + _logger.info('Language: %s. Translation from template: there is no translation available for %s!' %(lang, src[in_id]))#out_obj._name)) return True def execute(self, cr, uid, ids, context=None): diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index f86ae29c80f..e45d4f07807 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -36,7 +36,7 @@ from osv import fields from tools.translate import _ from openerp import SUPERUSER_ID -_logger = logging.getLogger('mail') +_logger = logging.getLogger(__name__) def format_date_tz(date, tz=None): if not date: diff --git a/addons/mail/mail_subscription_view.xml b/addons/mail/mail_subscription_view.xml index 52b72127b78..7dbaea098dc 100644 --- a/addons/mail/mail_subscription_view.xml +++ b/addons/mail/mail_subscription_view.xml @@ -10,7 +10,7 @@ <field name="name">mail.subscription.tree</field> <field name="model">mail.subscription</field> <field name="type">tree</field> - <field name="sequence">10</field> + <field name="priority">10</field> <field name="arch" type="xml"> <tree string="Subscription"> <field name="res_model"/> @@ -28,7 +28,7 @@ <field name="name">mail.notification.tree</field> <field name="model">mail.notification</field> <field name="type">tree</field> - <field name="sequence">10</field> + <field name="priority">10</field> <field name="arch" type="xml"> <tree string="Subscription"> <field name="user_id"/> diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 0f404155f42..e0f2bfaf455 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -68,9 +68,14 @@ class mail_thread(osv.osv): res[id] = self.message_load_ids(cr, uid, [id], context=context) return res + def _search_message_ids(self, cr, uid, obj, name, args, context=None): + msg_obj = self.pool.get('mail.message') + msg_ids = msg_obj.search(cr, uid, ['&', ('res_id', 'in', args[0][2]), ('model', '=', self._name)], context=context) + return [('id', 'in', msg_ids)] + # OpenChatter: message_ids is a dummy field that should not be used _columns = { - 'message_ids': fields.function(_get_message_ids, method=True, + 'message_ids': fields.function(_get_message_ids, method=True, fnct_search=_search_message_ids, type='one2many', obj='mail.message', string='Temp messages', _fields_id = 'res_id'), } @@ -294,7 +299,7 @@ class mail_thread(osv.osv): } to_attach.append(ir_attachment.create(cr, uid, data_attach, context=context)) - partner_id = hasattr(thread, 'partner_id') and (thread.partner_id and thread.partner_id.id or False) or False + partner_id = ('partner_id' in thread._columns.keys()) and (thread.partner_id and thread.partner_id.id or False) or False if not partner_id and thread._name == 'res.partner': partner_id = thread.id data = { diff --git a/addons/portal/wizard/portal_wizard.py b/addons/portal/wizard/portal_wizard.py index 1ec4cbb0e4b..881be3be05f 100644 --- a/addons/portal/wizard/portal_wizard.py +++ b/addons/portal/wizard/portal_wizard.py @@ -27,7 +27,7 @@ from tools.misc import email_re from tools.translate import _ from base.res.res_users import _lang_get - +_logger = logging.getLogger(__name__) # welcome email sent to new portal users (note that calling tools.translate._ @@ -174,7 +174,7 @@ class wizard(osv.osv_memory): body = _(WELCOME_EMAIL_BODY) % data res = mail_message_obj.schedule_with_attach(cr, uid, email_from , [email_to], subject, body, context=context) if not res: - logging.getLogger('res.portal.wizard').warning( + _logger.warning( 'Failed to send email from %s to %s', email_from, email_to) return {'type': 'ir.actions.act_window_close'} diff --git a/addons/portal/wizard/share_wizard.py b/addons/portal/wizard/share_wizard.py index b5c9d165cc6..b2ed8703421 100644 --- a/addons/portal/wizard/share_wizard.py +++ b/addons/portal/wizard/share_wizard.py @@ -21,6 +21,8 @@ from osv import osv, fields from tools.translate import _ +import logging +_logger = logging.getLogger(__name__) UID_ROOT = 1 SHARED_DOCS_MENU = "Documents" @@ -164,19 +166,19 @@ class share_wizard_portal(osv.osv_memory): # v6.1, the algorithm for combining them will OR the rules, hence # extending the visible data. Rules.write(cr, UID_ROOT, share_rule_ids, {'groups': [(4,target_group.id)]}) - self._logger.debug("Linked sharing rules from temporary sharing group to group %s", target_group) + _logger.debug("Linked sharing rules from temporary sharing group to group %s", target_group) # Copy the access rights. This is appropriate too because # groups have the UNION of all permissions granted by their # access right lines. for access_line in share_group.model_access: Rights.copy(cr, UID_ROOT, access_line.id, default={'group_id': target_group.id}) - self._logger.debug("Copied access rights from temporary sharing group to group %s", target_group) + _logger.debug("Copied access rights from temporary sharing group to group %s", target_group) # finally, delete it after removing its users Groups.write(cr, UID_ROOT, [share_group_id], {'users': [(6,0,[])]}) Groups.unlink(cr, UID_ROOT, [share_group_id]) - self._logger.debug("Deleted temporary sharing group %s", share_group_id) + _logger.debug("Deleted temporary sharing group %s", share_group_id) def _finish_result_lines(self, cr, uid, wizard_data, share_group_id, context=None): super(share_wizard_portal,self)._finish_result_lines(cr, uid, wizard_data, share_group_id, context=context) diff --git a/addons/product_visible_discount/i18n/sv.po b/addons/product_visible_discount/i18n/sv.po new file mode 100644 index 00000000000..1b440cb2d4c --- /dev/null +++ b/addons/product_visible_discount/i18n/sv.po @@ -0,0 +1,62 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-02-08 00:37+0000\n" +"PO-Revision-Date: 2012-06-26 22:45+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@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-06-27 05:28+0000\n" +"X-Generator: Launchpad (build 15482)\n" + +#. module: product_visible_discount +#: code:addons/product_visible_discount/product_visible_discount.py:153 +#, python-format +msgid "No Sale Pricelist Found!" +msgstr "Ingen försäljningsprislista funnen!" + +#. module: product_visible_discount +#: field:product.pricelist,visible_discount:0 +msgid "Visible Discount" +msgstr "Synlig rabatt" + +#. module: product_visible_discount +#: code:addons/product_visible_discount/product_visible_discount.py:145 +#, python-format +msgid "No Purchase Pricelist Found!" +msgstr "" + +#. module: product_visible_discount +#: model:ir.model,name:product_visible_discount.model_account_invoice_line +msgid "Invoice Line" +msgstr "Fakturarad" + +#. module: product_visible_discount +#: model:ir.model,name:product_visible_discount.model_product_pricelist +msgid "Pricelist" +msgstr "Prislista" + +#. module: product_visible_discount +#: code:addons/product_visible_discount/product_visible_discount.py:145 +#, python-format +msgid "You must first define a pricelist on the supplier form!" +msgstr "" + +#. module: product_visible_discount +#: model:ir.model,name:product_visible_discount.model_sale_order_line +msgid "Sales Order Line" +msgstr "Orderrad" + +#. module: product_visible_discount +#: code:addons/product_visible_discount/product_visible_discount.py:153 +#, python-format +msgid "You must first define a pricelist on the customer form!" +msgstr "" diff --git a/addons/project/project.py b/addons/project/project.py index 429672d3269..ab02cc870bb 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -165,14 +165,29 @@ class project(osv.osv): res[task.project_id.id] += 1 return res + def _get_followers(self, cr, uid, ids, name, arg, context=None): + ''' + Functional field that computes the users that are 'following' a thread. + ''' + res = {} + for project in self.browse(cr, uid, ids, context=context): + l = set() + for message in project.message_ids: + l.add(message.user_id and message.user_id.id or False) + res[project.id] = list(filter(None, l)) + return res + + def _search_followers(self, cr, uid, obj, name, args, context=None): + project_obj = self.pool.get('project.project') + project_ids = project_obj.search(cr, uid, [('message_ids.user_id.id', 'in', args[0][2])], context=context) + return [('id', 'in', project_ids)] + _columns = { 'complete_name': fields.function(_complete_name, string="Project Name", type='char', size=250), 'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the project without removing it."), 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of Projects."), 'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', help="Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc.", ondelete="cascade", required=True), 'priority': fields.integer('Sequence', help="Gives the sequence order when displaying the list of projects"), - 'warn_manager': fields.boolean('Notify Manager', help="If you check this field, the project manager will receive an email each time a task is completed by his team.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), - 'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members', help="Project's members are users who can have an access to the tasks related to this project.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), 'tasks': fields.one2many('project.task', 'project_id', "Task Activities"), @@ -197,19 +212,18 @@ class project(osv.osv): 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'state'], 20), }), 'resource_calendar_id': fields.many2one('resource.calendar', 'Working Time', help="Timetable working hours to adjust the gantt diagram report", states={'close':[('readonly',True)]} ), - 'warn_customer': fields.boolean('Warn Partner', help="If you check this, the user will have a popup when closing a task that propose a message to send by email to the customer.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), - 'warn_header': fields.text('Mail Header', help="Header added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), - 'warn_footer': fields.text('Mail Footer', help="Footer added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), 'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), - 'use_tasks': fields.boolean('Use Tasks', help="Check this field if this project is aimed at managing tasks"), 'task_count': fields.function(_task_count, type='integer', string="Open Tasks"), 'color': fields.integer('Color Index'), - 'company_uom_id': fields.related('company_id', 'project_time_mode_id', type='many2one', relation='product.uom'), + 'privacy_visibility': fields.selection([('public','Public'), ('followers','Followers Only')], 'Privacy / Visibility'), + 'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'), ('cancelled', 'Cancelled'),('pending','Pending'),('close','Closed')], 'Status', required=True,), + '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 - + def _get_type_common(self, cr, uid, context): ids = self.pool.get('project.task.type').search(cr, uid, [('case_default','=',1)], context=context) return ids @@ -217,10 +231,11 @@ class project(osv.osv): _order = "sequence" _defaults = { 'active': True, + 'type': 'contract', + 'state': 'open', 'priority': 1, 'sequence': 10, 'type_ids': _get_type_common, - 'use_tasks': True, } # TODO: Why not using a SQL contraints ? @@ -894,28 +909,12 @@ class task(base_stage, osv.osv): return True def action_close(self, cr, uid, ids, context=None): - """ This action closes the task, then opens the wizard to send an - email to the partner or the project manager. + """ This action closes the task """ task_id = len(ids) and ids[0] or False self._check_child_task(cr, uid, ids, context=context) if not task_id: return False - task = self.browse(cr, uid, task_id, context=context) - project = task.project_id - res = self.do_close(cr, uid, [task_id], context=context) - if project.warn_manager or project.warn_customer: - return { - 'name': _('Send Email after close task'), - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': 'mail.compose.message', - 'type': 'ir.actions.act_window', - 'target': 'new', - 'nodestroy': True, - 'context': {'active_id': task.id, - 'active_model': 'project.task'} - } - return res + return self.do_close(cr, uid, [task_id], context=context) def do_close(self, cr, uid, ids, context=None): """ Compatibility when changing to case_close. """ @@ -1217,16 +1216,49 @@ class project_work(osv.osv): class account_analytic_account(osv.osv): - _inherit = 'account.analytic.account' _description = 'Analytic Account' + _columns = { + 'use_tasks': fields.boolean('Tasks Management',help="If check,this contract will be available in the project menu and you will be able to manage tasks or track issues"), + 'company_uom_id': fields.related('company_id', 'project_time_mode_id', type='many2one', relation='product.uom'), + } + + def _trigger_project_creation(self, cr, uid, vals, context=None): + ''' + This function is used to decide if a project needs to be automatically created or not when an analytic account is created. It returns True if it needs to be so, False otherwise. + ''' + return vals.get('use_tasks') + + def project_create(self, cr, uid, analytic_account_id, vals, context=None): + ''' + This function is called at the time of analytic account creation and is used to create a project automatically linked to it if the conditions are meet. + ''' + project_pool = self.pool.get('project.project') + project_id = project_pool.search(cr, uid, [('analytic_account_id','=', analytic_account_id)]) + if not project_id and self._trigger_project_creation(cr, uid, vals, context=context): + project_values = { + 'name': vals.get('name'), + 'analytic_account_id': analytic_account_id, + } + return project_pool.create(cr, uid, project_values, context=context) + return False def create(self, cr, uid, vals, context=None): if context is None: context = {} if vals.get('child_ids', False) and context.get('analytic_project_copy', False): vals['child_ids'] = [] - return super(account_analytic_account, self).create(cr, uid, vals, context=context) + analytic_account_id = super(account_analytic_account, self).create(cr, uid, vals, context=context) + self.project_create(cr, uid, analytic_account_id, vals, context=context) + return analytic_account_id + + def write(self, cr, uid, ids, vals, context=None): + name = vals.get('name') + for account in self.browse(cr, uid, ids, context=context): + if not name: + vals['name'] = account.name + self.project_create(cr, uid, account.id, vals, context=context) + return super(account_analytic_account, self).write(cr, uid, ids, vals, context=context) def unlink(self, cr, uid, ids, *args, **kwargs): project_obj = self.pool.get('project.project') diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index f685f14c85b..07951280dc7 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -286,14 +286,12 @@ <record id="project_project_9" model="project.project"> - <field name="warn_manager">1</field> <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"/> </record> <record id="project_project_21" model="project.project"> - <field name="warn_manager">1</field> <field name="priority">10</field> <field name="parent_id" ref="all_projects_account"/> <field name="name">Study + Prototype</field> diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 4c79441ad18..ac67cbe0319 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -10,7 +10,16 @@ web_icon_hover="images/project-hover.png"/> <menuitem id="menu_project_management" name="Project" parent="base.menu_main_pm" sequence="1"/> - <menuitem id="menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/> + <menuitem id="base.menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/> + + <act_window + context="{'search_default_project_id': [active_id], 'default_project_id': active_id}" + id="act_project_project_2_project_task_all" + name="Tasks" + res_model="project.task" + src_model="project.project" + view_mode="kanban,tree,form,calendar,graph" + view_type="form"/> <!-- Project --> <record id="edit_project" model="ir.ui.view"> @@ -34,7 +43,7 @@ <field name="analytic_account_id" invisible="1" required="0"/> <label for="name" class="oe_edit_only" string="Project Name"/> <h1> - <field name="name"/> + <field name="name" string="Project Name"/> </h1> <label for="parent_id" class="oe_edit_only" string="Parent Project"/> <h2> @@ -42,16 +51,28 @@ </h2> <group> <group> + <field name="partner_id" on_change="onchange_partner_id(partner_id)" select="1"/> <field name="user_id" string="Project Manager" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/> - </group><group> - <field name="date_start" string="Start Date" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/> - <field name="date" string="End Date" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/> - <field name="progress_rate" widget="progressbar"/> + <field name="analytic_account_id" invisible="1" required="0"/> + <field name="parent_id" invisible="1" string="Parent" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/> + <field name="privacy_visibility"/> + </group> + <group> + <table> + <tr name="use_tasks_row"> + <td><group><field name="use_tasks"/></group></td> + <td><button icon="terp-gtk-go-back-rtl" name="%(act_project_project_2_project_task_all)d" string="Tasks" type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"/></td> + </tr> + <tr name="use_attachment_row"> + <td/> + <td><button icon="terp-gtk-go-back-rtl" class="oe_btn_width" name="%(base.action_attachment)d" string="Documents" type="action" /></td> + </tr> + </table> </group> </group> - <notebook colspan="4"> - <page string="Members"> - <field colspan="4" name="members" nolabel="1" widget="many2many_kanban"> + <notebook> + <page string="Team" name="team"> + <field colspan="4" name="members" widget="many2many_kanban"> <kanban quick_create="true" create="false"> <field name="name"/> <templates> @@ -69,55 +90,24 @@ </kanban> </field> </page> - <page string="Administration"> + <page string="Other Info"> <group> - <group name="kanban" string="Project Management"> - <field name="use_tasks"/> - </group> - <group string="Performance"> + <group string="Administration"> <field name="planned_hours" widget="float_time"/> <field name="effective_hours" widget="float_time" /> <field name="resource_calendar_id"/> </group> - <newline/> - <group name="misc" string="Miscellaneous"> - <field name="company_id" groups="base.group_multi_company" widget="selection" required="1"/> - <field name="warn_manager"/> + <group string="Miscellaneous" name="misc"> + <field name="company_id" select="1" groups="base.group_multi_company" widget="selection" required="1"/> <field name="priority"/> <field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/> + <field name="currency_id" select="1" groups="base.group_multi_company" required="1"/> </group> </group> </page> - <page string="Billing" groups="account.group_account_invoice"> - <group col="4"> - <field colspan="4" name="partner_id" on_change="onchange_partner_id(partner_id)" string="Customer"/> - <field name="warn_customer"/> - <field name="currency_id" groups="base.group_multi_company" required="1"/> - </group> - <group col="4"> - <separator colspan="2" string="Mail Header"/> - <separator colspan="2" string="Mail Footer"/> - <field name="warn_header" nolabel="1" colspan="2"/> - <field name="warn_footer" nolabel="1" colspan="2"/> - </group> - <group col="3"> - <b> - <label string="Variables you can use for headers and footer." colspan="3"/> - </b> - <label string="Task: %%(name)s"/> - <label string="User: %%(user_id)s"/> - <label string="ID: %%(task_id)s"/> - <label string="Status: %%(state)s"/> - <label string="Date Start: %%(date_start)s"/> - <label string="Date Stop: %%(date)s"/> - </group> - </page> <page string="Tasks Stages"> <field name="type_ids"/> </page> - <page string="Notes"> - <field name="description"/> - </page> </notebook> </sheet> <footer> @@ -624,6 +614,22 @@ </search> </field> </record> + + <record id="analytic_account_inherited_form" model="ir.ui.view"> + <field name="name">account.analytic.account.form.inherit</field> + <field name="model">account.analytic.account</field> + <field name="type">form</field> + <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/> + <field eval="18" name="priority"/> + <field name="arch" type="xml"> + <xpath expr='//separator[@name="project_sep"]' position='replace'> + <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_tasks" /> + </xpath> + </field> + </record> <record id="action_view_task" model="ir.actions.act_window"> <field name="name">Tasks</field> @@ -735,11 +741,11 @@ <field name="help">Define the steps that will be used in the project from the creation of the task, up to the closing of the task or issue. You will use these stages in order to track the progress in solving a task or an issue.</field> </record> - <menuitem id="menu_tasks_config" name="GTD" parent="project.menu_definitions" sequence="1"/> + <menuitem id="menu_tasks_config" name="GTD" parent="base.menu_definitions" sequence="1"/> - <menuitem id="menu_project_config_project" name="Stages" parent="project.menu_definitions" sequence="1"/> + <menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1"/> - <menuitem action="open_task_type_form" name="Task Stages" id="menu_task_types_view" parent="menu_project_config_project" sequence="2"/> + <menuitem action="open_task_type_form" name="Task Stages" id="menu_task_types_view" parent="base.menu_project_config_project" sequence="2"/> <menuitem action="open_view_project_all" id="menu_projects" name="Projects" parent="menu_project_management" sequence="1"/> <act_window context="{'search_default_user_id': active_id, 'default_user_id': active_id}" id="act_res_users_2_project_project" name="User's projects" res_model="project.project" src_model="res.users" view_mode="tree,form" view_type="form"/> diff --git a/addons/project/security/project_security.xml b/addons/project/security/project_security.xml index 199d3c0c422..829ec6c6971 100644 --- a/addons/project/security/project_security.xml +++ b/addons/project/security/project_security.xml @@ -14,7 +14,7 @@ <field name="users" eval="[(4, ref('base.user_root'))]"/> </record> - <record model="ir.ui.menu" id="menu_definitions"> + <record model="ir.ui.menu" id="base.menu_definitions"> <field name="groups_id" eval="[(6,0,[ref('group_project_manager')])]"/> </record> @@ -41,6 +41,13 @@ <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> </record> + <record model="ir.rule" id="project_public_members_rule"> + <field name="name">public Members</field> + <field name="model_id" ref="model_project_project"/> + <field name="global" eval="True"/> + <field name="domain_force">['|','|',('privacy_visibility','in',[False,'public']),('members','in',[user.id]),('followers','in',[user.id])]</field> + </record> + <record model="ir.rule" id="task_comp_rule"> <field name="name" >Task multi-company</field> <field name="model_id" ref="model_project_task"/> diff --git a/addons/project/wizard/__init__.py b/addons/project/wizard/__init__.py index f5324d2b6aa..7a9a734b2bd 100644 --- a/addons/project/wizard/__init__.py +++ b/addons/project/wizard/__init__.py @@ -19,7 +19,6 @@ # ############################################################################## -import mail_compose_message import project_task_delegate import project_task_reevaluate diff --git a/addons/project/wizard/mail_compose_message.py b/addons/project/wizard/mail_compose_message.py deleted file mode 100644 index 1609cc04c1c..00000000000 --- a/addons/project/wizard/mail_compose_message.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2010-Today OpenERP SA (<http://www.openerp.com>) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/> -# -############################################################################## - -from osv import osv -from osv import fields -from tools.translate import _ - -class mail_compose_message(osv.osv_memory): - _inherit = 'mail.compose.message' - - def get_value(self, cr, uid, model, resource_id, context=None): - ''' - To get values of the resource_id for the model - @param model: Object - @param resource_id: id of a record for which values to be read - - @return: Returns a dictionary - ''' - result = super(mail_compose_message, self).get_value(cr, uid, model, resource_id, context=context) - if model == 'project.task' and resource_id: - task_pool = self.pool.get('project.task') - task_data = task_pool.browse(cr, uid, resource_id, context=context) - partner = task_data.partner_id or task_data.project_id.partner_id - if task_data.project_id.warn_manager and (not task_data.project_id.user_id or task_data.project_id.user_id and not task_data.project_id.user_id.user_email) : - raise osv.except_osv(_('Error'), _("Please specify the Project Manager or email address of Project Manager.")) - elif task_data.project_id.warn_customer and (not partner or (partner and not partner.email)): - raise osv.except_osv(_('Error'), _("Please specify the Customer or email address of Customer.")) - - result.update({'email_from': task_data.user_id and task_data.user_id.user_email or False}) - val = { - 'name': task_data.name, - 'user_id': task_data.user_id.name, - 'task_id': "%d/%d" % (task_data.project_id.id, task_data.id), - 'date_start': task_data.date_start, - 'date': task_data.date_end, - 'state': task_data.state - } - header = (task_data.project_id.warn_header or '') % val - footer = (task_data.project_id.warn_footer or '') % val - description = u'%s\n %s\n %s\n\n \n%s' % (header, task_data.description or '', footer, task_data.user_id and task_data.user_id.signature) - if partner : - result.update({'email_to': result.get('email_to',False) and result.get('email_to') + ',' + partner.email}) - result.update({ - 'body_text': description or False, - 'email_to': task_data.project_id.user_id and task_data.project_id.user_id.user_email or False, - 'subject': _("Task '%s' Closed") % task_data.name, - 'model': model, - 'res_id': resource_id, - }) - - return result - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index ad6e7afdbcc..976a706ac54 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -591,14 +591,9 @@ class project(osv.osv): _columns = { 'project_escalation_id' : fields.many2one('project.project','Project Escalation', help='If any issue is escalated from the current Project, it will be listed under the project selected here.', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), 'reply_to' : fields.char('Reply-To Email Address', size=256), - 'use_issues' : fields.boolean('Use Issues', help="Check this field if this project manages issues"), 'issue_count': fields.function(_issue_count, type='integer'), } - _defaults = { - 'use_issues': True, - } - def _check_escalation(self, cr, uid, ids, context=None): project_obj = self.browse(cr, uid, ids[0], context=context) if project_obj.project_escalation_id: @@ -611,4 +606,18 @@ class project(osv.osv): ] 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 _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') + +account_analytic_account() + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index d3f8ebdab33..5e37157d8f2 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -2,7 +2,7 @@ <openerp> <data> - <menuitem id="menu_project_confi" name="Issues" parent="project.menu_definitions" sequence="2"/> + <menuitem id="menu_project_confi" name="Issues" parent="base.menu_definitions" sequence="2"/> <record model="ir.ui.view" id="project_issue_version_search_view"> <field name="name">Issue Version</field> @@ -342,9 +342,12 @@ <field name="type">form</field> <field name="inherit_id" ref="project.edit_project"/> <field name="arch" type="xml"> - <field name="use_tasks" position="after"> - <field name="use_issues"/> - </field> + <xpath expr='//tr[@name="use_tasks_row"]' position='after'> + <tr> + <td><group><field name="use_issues"/></group></td> + <td><button icon="terp-gtk-go-back-rtl" name="%(act_project_project_2_project_issue_all)d" string="Issues" type="action" attrs="{'invisible':[('use_issues','=', 0)]}"/></td> + </tr> + </xpath> <field name="priority" position="before"> <field name="project_escalation_id"/> <field name="reply_to"/> @@ -369,5 +372,20 @@ </xpath> </field> </record> + <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> + <field name="inherit_id" ref="project.analytic_account_inherited_form"/> + <field eval="18" name="priority"/> + <field name="arch" type="xml"> + <xpath expr='//separator[@name="project_sep"]' position='replace'> + <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" /> + </xpath> + </field> + </record> </data> </openerp> diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index 19d58f101ef..a4df1eb6917 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -225,13 +225,9 @@ class project(osv.osv): _columns = { 'phase_ids': fields.one2many('project.phase', 'project_id', "Project Phases"), - 'use_phases': fields.boolean('Use Phases', help="Check this field if project manages phases"), 'phase_count': fields.function(_phase_count, type='integer', string="Open Phases"), } - _defaults = { - 'use_phases': True, - } - + def schedule_phases(self, cr, uid, ids, context=None): context = context or {} if type(ids) in (long, int,): @@ -273,6 +269,19 @@ class project(osv.osv): return True project() +class account_analytic_account(osv.osv): + _inherit = 'account.analytic.account' + _description = 'Analytic Account' + _columns = { + 'use_phases': fields.boolean('Phases Planing', help="Check this field if project manages phases"), + } + + 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_phases') + +account_analytic_account() + class project_task(osv.osv): _inherit = "project.task" _columns = { diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml index aaee541c9e6..e313f8944b2 100644 --- a/addons/project_long_term/project_long_term_view.xml +++ b/addons/project_long_term/project_long_term_view.xml @@ -97,6 +97,13 @@ # ------------------------------------------------------ # Project Phase # ------------------------------------------------------ + <act_window id="act_project_phases" + name="Phases" + src_model="project.project" + res_model="project.phase" + view_type="form" + view_mode="tree,form" + context="{'search_default_project_id': [active_id], 'default_project_id': active_id}"/> <record id="project_phase_form" model="ir.ui.view"> <field name="name">Inherit project form : Phase</field> @@ -104,21 +111,15 @@ <field name="type">form</field> <field name="inherit_id" ref="project.edit_project"/> <field name="arch" type="xml"> - <field name="use_tasks" position="after"> - <field name="use_phases"/> - </field> + <xpath expr='//tr[@name="use_tasks_row"]' position='after'> + <tr> + <td><group><field name="use_phases"/></group></td> + <td><button icon="terp-gtk-go-back-rtl" name="%(act_project_phases)d" string="Phases" type="action" attrs="{'invisible':[('use_phases','=', 0)]}"/></td> + </tr> + </xpath> </field> </record> - <act_window id="act_project_phases" - name="Phases" - src_model="project.project" - res_model="project.phase" - view_type="form" - view_mode="tree,form" - context="{'search_default_project_id': [active_id], 'default_project_id': active_id}" - /> - <record id="view_project_kanban_phase" model="ir.ui.view"> <field name="name">project.project.kanban.inherited</field> <field name="model">project.project</field> @@ -376,6 +377,22 @@ view_mode="tree,form" /> + <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> + <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/> + <field eval="18" name="priority"/> + <field name="arch" type="xml"> + <xpath expr='//separator[@name="project_sep"]' position='replace'> + <separator name="project_sep" string="Project Management" colspan="4"/> <!-- removal of invisible attribute --> + </xpath> + <xpath expr='//separator[@name="project_sep"]' position='after'> + <field name="use_phases"/> + </xpath> + </field> + </record> + # ------------------------------------------------------ # Menu Items # ------------------------------------------------------ @@ -392,7 +409,7 @@ parent="base.menu_project_long_term" sequence="2"/> <menuitem id="menu_pm_users_project1" - name="Resources" parent="project.menu_definitions" sequence="3"/> + name="Resources" parent="base.menu_definitions" sequence="3"/> <menuitem id="menu_phase_schedule" name="Scheduling" parent="base.menu_main_pm" sequence="4" groups="project.group_project_user,project.group_project_manager"/> <menuitem action="resource.action_resource_resource_tree" id="menu_view_resource" parent="menu_pm_users_project1" sequence="2"/> diff --git a/addons/project_timesheet/__openerp__.py b/addons/project_timesheet/__openerp__.py index 2dccbb2e38b..f1a82867a6f 100644 --- a/addons/project_timesheet/__openerp__.py +++ b/addons/project_timesheet/__openerp__.py @@ -36,7 +36,13 @@ the Timesheet line entries for particular date and particular user with the eff 'images': ['images/invoice_task_work.jpeg', 'images/my_timesheet.jpeg', 'images/working_hour.jpeg'], 'depends': ['project', 'hr_timesheet_sheet', 'hr_timesheet_invoice', 'account_analytic_analysis'], 'init_xml': ['project_timesheet_data.xml'], - 'update_xml': ["security/ir.model.access.csv","process/project_timesheet_process.xml", "report/task_report_view.xml", "project_timesheet_view.xml"], + 'update_xml': [ + "security/ir.model.access.csv", + "security/project_timesheet_security.xml", + "process/project_timesheet_process.xml", + "report/task_report_view.xml", + "project_timesheet_view.xml", + ], 'demo_xml': ["project_timesheet_demo.xml"], 'test': [ 'test/worktask_entry_to_timesheetline_entry.yml', diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py index 585b3cd6ec8..31b169d3c0f 100644 --- a/addons/project_timesheet/project_timesheet.py +++ b/addons/project_timesheet/project_timesheet.py @@ -50,14 +50,10 @@ class project_project(osv.osv): return res _columns = { - 'use_timesheets': fields.boolean('Timesheets', help="Check this field if this project manages timesheets"), 'amount_to_invoice': fields.function(_to_invoice, string="Amount to Invoice", multi="sums"), 'time_to_invoice': fields.function(_to_invoice, string="Time to Invoice", multi="sums"), 'timesheet_count': fields.function(_timesheet_count, type='integer', string="Issue"), } - _defaults = { - 'use_timesheets': True, - } def onchange_partner_id(self, cr, uid, ids, part=False, context=None): res = super(project_project, self).onchange_partner_id(cr, uid, ids, part, context) @@ -69,28 +65,6 @@ class project_project(osv.osv): factor_id = data_obj.browse(cr, uid, data_id).res_id res['value'].update({'to_invoice': factor_id}) return res - - def open_timesheets(self, cr, uid, ids, context=None): - """ open Timesheets view """ - project = self.browse(cr, uid, ids[0], context) - try: - journal_id = self.pool.get('ir.model.data').get_object(cr, uid, 'hr_timesheet', 'analytic_journal').id - except ValueError: - journal_id = False - view_context = { - 'search_default_account_id': [project.analytic_account_id.id], - 'default_account_id': project.analytic_account_id.id, - 'default_journal_id': journal_id, - } - return { - 'type': 'ir.actions.act_window', - 'name': _('Bill Tasks Works'), - 'res_model': 'account.analytic.line', - 'view_type': 'form', - 'view_mode': 'tree,form', - 'context': view_context, - 'nodestroy': True, - } project_project() @@ -131,7 +105,7 @@ class project_work(osv.osv): project_obj = self.pool.get('project.project') task_obj = self.pool.get('project.task') uom_obj = self.pool.get('product.uom') - + vals_line = {} context = kwargs.get('context', {}) if not context.get('no_analytic_entry',False): @@ -141,7 +115,7 @@ class project_work(osv.osv): vals_line['user_id'] = vals['user_id'] vals_line['product_id'] = result['product_id'] vals_line['date'] = vals['date'][:10] - + #calculate quantity based on employee's product's uom vals_line['unit_amount'] = vals['hours'] @@ -179,7 +153,7 @@ class project_work(osv.osv): project_obj = self.pool.get('project.project') uom_obj = self.pool.get('product.uom') result = {} - + if isinstance(ids, (long, int)): ids = [ids,] @@ -198,7 +172,7 @@ class project_work(osv.osv): for fld in ('product_id', 'general_account_id', 'journal_id', 'product_uom_id'): if result.get(fld, False): vals_line[fld] = result[fld] - + if 'date' in vals: vals_line['date'] = vals['date'][:10] if 'hours' in vals: @@ -208,7 +182,7 @@ class project_work(osv.osv): if result.get('product_uom_id',False) and (not result['product_uom_id'] == default_uom): vals_line['unit_amount'] = uom_obj._compute_qty(cr, uid, default_uom, vals['hours'], result['product_uom_id']) - + # Compute based on pricetype amount_unit = timesheet_obj.on_change_unit_amount(cr, uid, line_id.id, prod_id=prod_id, company_id=False, @@ -218,7 +192,7 @@ class project_work(osv.osv): vals_line['amount'] = amount_unit['value']['amount'] self.pool.get('hr.analytic.timesheet').write(cr, uid, [line_id.id], vals_line, context=context) - + return super(project_work,self).write(cr, uid, ids, vals, context) def unlink(self, cr, uid, ids, *args, **kwargs): diff --git a/addons/project_timesheet/project_timesheet_view.xml b/addons/project_timesheet/project_timesheet_view.xml index 8b6aa992366..0acf639b507 100644 --- a/addons/project_timesheet/project_timesheet_view.xml +++ b/addons/project_timesheet/project_timesheet_view.xml @@ -1,28 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data> - <record id="project_invoice_form" model="ir.ui.view"> - <field name="name">Inherit project form : Invoicing Data</field> - <field name="model">project.project</field> - <field name="type">form</field> - <field name="inherit_id" ref="project.edit_project"/> - <field name="arch" type="xml"> - <field name="use_tasks" position='after'> - <field name="use_timesheets"/> - <field name="amount_to_invoice" invisible="True"/> - <field name="time_to_invoice" invisible="True"/> - </field> - <field name="warn_customer" position="after"> - <group colspan="4" col="4"> - <separator colspan="4" string="Invoicing Data"/> - <field name="pricelist_id" groups="product.group_sale_pricelist" domain="[('type','=','sale')]" widget="selection"/> - <field name="to_invoice" widget="selection" string="Invoice Task Work"/> - <field name="amount_max"/> - <field name="amount_invoiced"/> - </group> - </field> - </field> - </record> <record id="view_project_kanban_inherited" model="ir.ui.view"> <field name="name">project.project.kanban.inherited</field> @@ -55,10 +33,10 @@ <field name="name">Inherit project form : Customer</field> <field name="model">project.project</field> <field name="type">form</field> - <field name="inherit_id" ref="project_invoice_form"/> + <field name="inherit_id" ref="analytic_contract_project.project_invoice_form"/> <field name="arch" type="xml"> <field name="partner_id" position="replace"> - <field colspan="4" name="partner_id" on_change="onchange_partner_id(partner_id)" select="1" string="Customer" attrs="{'required':[('to_invoice','!=',False)]}"/> + <field name="partner_id" on_change="onchange_partner_id(partner_id)" select="1" string="Customer" attrs="{'required':[('to_invoice','!=',False)]}"/> </field> </field> </record> @@ -115,7 +93,7 @@ <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="domain">[]</field> - <field name="context">{}</field> + <field name="context">{'search_default_to_invoice': 1}</field> <field name="view_id" ref="view_account_analytic_line_tree_inherit_account_id"/> <field name="help">You will find here all works made on tasks that you can invoice. In order to invoice the time spent on a project, you must define the diff --git a/addons/project_timesheet/security/project_timesheet_security.xml b/addons/project_timesheet/security/project_timesheet_security.xml new file mode 100644 index 00000000000..ea1f0a98b4c --- /dev/null +++ b/addons/project_timesheet/security/project_timesheet_security.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data noupdate="0"> + <record model="res.groups" id="base.group_user"> + <field name="implied_ids" eval="[(4, ref('project.group_tasks_work_on_tasks'))]"/> + </record> + </data> +</openerp> + diff --git a/addons/purchase/i18n/sv.po b/addons/purchase/i18n/sv.po index 4792388c664..4277647110e 100644 --- a/addons/purchase/i18n/sv.po +++ b/addons/purchase/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-02-08 01:37+0100\n" -"PO-Revision-Date: 2011-08-03 23:22+0000\n" -"Last-Translator: Stefan Lind <Unknown>\n" +"PO-Revision-Date: 2012-06-26 07:07+0000\n" +"Last-Translator: Anders Wallenquist <anders.wallenquist@vertel.se>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-05-11 04:41+0000\n" -"X-Generator: Launchpad (build 15225)\n" +"X-Launchpad-Export-Date: 2012-06-27 05:28+0000\n" +"X-Generator: Launchpad (build 15482)\n" #. module: purchase #: model:process.transition,note:purchase.process_transition_confirmingpurchaseorder0 @@ -54,13 +54,13 @@ msgstr "Datum när detta dokument blev skapat" #: view:purchase.order:0 view:purchase.order.line:0 view:purchase.report:0 #: view:stock.picking:0 msgid "Group By..." -msgstr "" +msgstr "Gruppera på..." #. module: purchase #: field:purchase.order,create_uid:0 view:purchase.report:0 #: field:purchase.report,user_id:0 msgid "Responsible" -msgstr "" +msgstr "Ansvarig" #. module: purchase #: model:ir.actions.act_window,help:purchase.purchase_rfq @@ -86,7 +86,7 @@ msgstr "" #. module: purchase #: view:purchase.order:0 msgid "Approved purchase order" -msgstr "" +msgstr "Godkänd inköpsorder" #. module: purchase #: view:purchase.order:0 field:purchase.order,partner_id:0 @@ -99,12 +99,12 @@ msgstr "Supplier" #: model:ir.ui.menu,name:purchase.menu_product_pricelist_action2_purchase #: model:ir.ui.menu,name:purchase.menu_purchase_config_pricelist msgid "Pricelists" -msgstr "" +msgstr "Prislistor" #. module: purchase #: view:stock.picking:0 msgid "To Invoice" -msgstr "" +msgstr "Att fakturera" #. module: purchase #: view:purchase.order.line_invoice:0 @@ -128,7 +128,7 @@ msgstr "Leverantörsfakturor" #. module: purchase #: view:purchase.report:0 msgid "Purchase Orders Statistics" -msgstr "" +msgstr "Inköpsorderstatistik" #. module: purchase #: model:process.transition,name:purchase.process_transition_packinginvoice0 @@ -145,7 +145,7 @@ msgstr "No Pricelist !" #. module: purchase #: model:ir.model,name:purchase.model_purchase_config_wizard msgid "purchase.config.wizard" -msgstr "" +msgstr "purchase.config.wizard" #. module: purchase #: view:board.board:0 model:ir.actions.act_window,name:purchase.purchase_draft @@ -155,7 +155,7 @@ msgstr "Offertförfrågan" #. module: purchase #: selection:purchase.config.wizard,default_method:0 msgid "Based on Receptions" -msgstr "" +msgstr "Baserad på mottagning" #. module: purchase #: field:purchase.order,company_id:0 field:purchase.order.line,company_id:0 @@ -172,7 +172,7 @@ msgstr "" #: model:ir.actions.act_window,name:purchase.action_purchase_order_monthly_categ_graph #: view:purchase.report:0 msgid "Monthly Purchase by Category" -msgstr "" +msgstr "Månatlig försäljning per kategori" #. module: purchase #: view:purchase.order:0 @@ -187,7 +187,7 @@ msgstr "Invoice Exception" #. module: purchase #: model:product.pricelist,name:purchase.list0 msgid "Default Purchase Pricelist" -msgstr "Default Purchase Pricelist" +msgstr "Standardinköpslista" #. module: purchase #: help:purchase.order,dest_address_id:0 @@ -217,12 +217,12 @@ msgstr "Fax :" #. module: purchase #: view:purchase.order:0 msgid "To Approve" -msgstr "" +msgstr "Att godkänna" #. module: purchase #: view:res.partner:0 msgid "Purchase Properties" -msgstr "" +msgstr "Inköpsegenskaper" #. module: purchase #: model:ir.model,name:purchase.model_stock_partial_picking @@ -242,22 +242,22 @@ msgstr "Approve Purchase" #. module: purchase #: view:purchase.report:0 field:purchase.report,day:0 msgid "Day" -msgstr "" +msgstr "Dag" #. module: purchase #: selection:purchase.order,invoice_method:0 msgid "Based on generated draft invoice" -msgstr "" +msgstr "Baserad på genererad preleminär faktura" #. module: purchase #: view:purchase.report:0 msgid "Order of Day" -msgstr "" +msgstr "Dagens ordrar" #. module: purchase #: view:board.board:0 msgid "Monthly Purchases by Category" -msgstr "" +msgstr "Månatliga inköp per kategori" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_purchase_line_product_tree @@ -267,7 +267,7 @@ msgstr "Inköp" #. module: purchase #: view:purchase.order:0 msgid "Purchase order which are in draft state" -msgstr "" +msgstr "Preleminära inköpsorder" #. module: purchase #: view:purchase.order:0 @@ -283,7 +283,7 @@ msgstr "Anteckningar" #. module: purchase #: selection:purchase.report,month:0 msgid "September" -msgstr "" +msgstr "september" #. module: purchase #: report:purchase.order:0 field:purchase.order,amount_tax:0 @@ -341,7 +341,7 @@ msgstr "Cancelled" #. module: purchase #: view:purchase.order:0 msgid "Convert to Purchase Order" -msgstr "" +msgstr "Konvertera till inköpsorder" #. module: purchase #: field:purchase.order,pricelist_id:0 field:purchase.report,pricelist_id:0 @@ -356,7 +356,7 @@ msgstr "Shipping Exception" #. module: purchase #: field:purchase.order.line,invoice_lines:0 msgid "Invoice Lines" -msgstr "" +msgstr "Fakturarader" #. module: purchase #: model:process.node,name:purchase.process_node_packinglist0 @@ -382,13 +382,14 @@ msgstr "Reference" #. module: purchase #: model:ir.model,name:purchase.model_stock_move msgid "Stock Move" -msgstr "" +msgstr "Lagertransaktion" #. module: purchase #: code:addons/purchase/purchase.py:419 #, python-format msgid "You must first cancel all invoices related to this purchase order." msgstr "" +"Du måste först avbryta all fakturering med anknytning till denna inköpsorder" #. module: purchase #: field:purchase.report,dest_address_id:0 @@ -404,7 +405,7 @@ msgstr "TVA :" #: code:addons/purchase/purchase.py:326 #, python-format msgid "Purchase order '%s' has been set in draft state." -msgstr "" +msgstr "Inköpsorder '%s' har åter fått status utkast." #. module: purchase #: field:purchase.order.line,account_analytic_id:0 @@ -414,7 +415,7 @@ msgstr "Analytic Account" #. module: purchase #: view:purchase.report:0 field:purchase.report,nbr:0 msgid "# of Lines" -msgstr "" +msgstr "# Rader" #. module: purchase #: code:addons/purchase/purchase.py:754 code:addons/purchase/purchase.py:769 @@ -422,7 +423,7 @@ msgstr "" #: code:addons/purchase/wizard/purchase_order_group.py:47 #, python-format msgid "Warning" -msgstr "" +msgstr "Varning" #. module: purchase #: field:purchase.order,validator:0 view:purchase.report:0 @@ -432,7 +433,7 @@ msgstr "Validerad av" #. module: purchase #: view:purchase.report:0 msgid "Order in last month" -msgstr "" +msgstr "Ordrar under senaste månaden" #. module: purchase #: code:addons/purchase/purchase.py:412 @@ -443,7 +444,7 @@ msgstr "" #. module: purchase #: selection:purchase.order.line,state:0 msgid "Draft" -msgstr "" +msgstr "Preliminär" #. module: purchase #: report:purchase.order:0 @@ -458,7 +459,7 @@ msgstr "Order Line" #. module: purchase #: help:purchase.order,shipped:0 msgid "It indicates that a picking has been done" -msgstr "" +msgstr "Anger att plockningen är klar." #. module: purchase #: view:purchase.order:0 @@ -479,7 +480,7 @@ msgstr "Confirmed" #. module: purchase #: view:purchase.report:0 field:purchase.report,price_average:0 msgid "Average Price" -msgstr "" +msgstr "Snittpris" #. module: purchase #: view:stock.picking:0 @@ -502,17 +503,17 @@ msgstr "Bekräfta" #: model:ir.ui.menu,name:purchase.menu_action_picking_tree4_picking_to_invoice #: selection:purchase.order,invoice_method:0 msgid "Based on receptions" -msgstr "" +msgstr "Baserad på mottagning" #. module: purchase #: constraint:res.company:0 msgid "Error! You can not create recursive companies." -msgstr "" +msgstr "Fel! Du kan inte skapa rekursiva bolagsstrukturer." #. module: purchase #: field:purchase.order,partner_ref:0 msgid "Supplier Reference" -msgstr "" +msgstr "Leverantörens referens" #. module: purchase #: model:process.transition,note:purchase.process_transition_productrecept0 @@ -563,7 +564,7 @@ msgstr "Skriv ut" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_view_purchase_order_group msgid "Merge Purchase orders" -msgstr "" +msgstr "Sammanslagna inköpsordrar" #. module: purchase #: field:purchase.order,order_line:0 @@ -584,32 +585,32 @@ msgstr "Fax:" #. module: purchase #: view:purchase.report:0 field:purchase.report,price_total:0 msgid "Total Price" -msgstr "" +msgstr "Totalt belopp" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_import_create_supplier_installer msgid "Create or Import Suppliers" -msgstr "" +msgstr "Skapa eller importera leverantörer" #. module: purchase #: view:stock.picking:0 msgid "Available" -msgstr "" +msgstr "Tillgänglig" #. module: purchase #: field:purchase.report,partner_address_id:0 msgid "Address Contact Name" -msgstr "" +msgstr "Kontaktadressnamn" #. module: purchase #: report:purchase.order:0 msgid "Shipping address :" -msgstr "Shipping address :" +msgstr "Leveransadress :" #. module: purchase #: help:purchase.order,invoice_ids:0 msgid "Invoices generated for a purchase order" -msgstr "" +msgstr "Fakturor skapade för en inköpsorder" #. module: purchase #: code:addons/purchase/purchase.py:285 code:addons/purchase/purchase.py:348 @@ -639,6 +640,8 @@ msgstr "" #, python-format msgid "There is no purchase journal defined for this company: \"%s\" (id:%d)" msgstr "" +"Det finns ingen inköpssjournal definierad för det här företaget: \"%s\" " +"(id:%d)" #. module: purchase #: model:process.transition,note:purchase.process_transition_invoicefrompackinglist0 @@ -664,7 +667,7 @@ msgstr "" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_configuration_misc msgid "Miscellaneous" -msgstr "" +msgstr "Allmänt" #. module: purchase #: code:addons/purchase/purchase.py:769 @@ -692,7 +695,7 @@ msgstr "Create invoice" #: model:ir.ui.menu,name:purchase.menu_purchase_unit_measure_purchase #: model:ir.ui.menu,name:purchase.menu_purchase_uom_form_action msgid "Units of Measure" -msgstr "" +msgstr "Enhet" #. module: purchase #: field:purchase.order.line,move_dest_id:0 @@ -713,13 +716,13 @@ msgstr "Fiscal Position" #. module: purchase #: selection:purchase.report,month:0 msgid "July" -msgstr "" +msgstr "juli" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_purchase_config_purchase #: view:res.company:0 msgid "Configuration" -msgstr "" +msgstr "Konfiguration" #. module: purchase #: view:purchase.order:0 @@ -756,22 +759,22 @@ msgstr "RFQ" #: code:addons/purchase/edi/purchase_order.py:139 #, python-format msgid "EDI Pricelist (%s)" -msgstr "" +msgstr "EDI-prislista (%s)" #. module: purchase #: selection:purchase.order,state:0 msgid "Waiting Approval" -msgstr "" +msgstr "Väntar på godkännande" #. module: purchase #: selection:purchase.report,month:0 msgid "January" -msgstr "" +msgstr "januari" #. module: purchase #: model:ir.actions.server,name:purchase.ir_actions_server_edi_purchase msgid "Auto-email confirmed purchase orders" -msgstr "" +msgstr "Automatisk e-post bekräftade inköpsorder" #. module: purchase #: model:process.transition,name:purchase.process_transition_approvingpurchaseorder0 @@ -783,18 +786,18 @@ msgstr "" #: field:purchase.order,date_order:0 field:purchase.order.line,date_order:0 #: field:purchase.report,date:0 view:stock.picking:0 msgid "Order Date" -msgstr "" +msgstr "Orderdatum" #. module: purchase #: constraint:stock.move:0 msgid "You must assign a production lot for this product" -msgstr "" +msgstr "Du måste tilldela ett produktionsbatch för denna produkt" #. module: purchase #: model:ir.model,name:purchase.model_res_partner #: field:purchase.order.line,partner_id:0 view:stock.picking:0 msgid "Partner" -msgstr "" +msgstr "Företag" #. module: purchase #: model:process.node,name:purchase.process_node_invoiceafterpacking0 @@ -810,7 +813,7 @@ msgstr "Qty" #. module: purchase #: view:purchase.report:0 msgid "Month-1" -msgstr "" +msgstr "Månad-1" #. module: purchase #: help:purchase.order,minimum_planned_date:0 @@ -824,17 +827,17 @@ msgstr "" #. module: purchase #: model:ir.model,name:purchase.model_purchase_order_group msgid "Purchase Order Merge" -msgstr "" +msgstr "Inköpsorderradsammanslagning" #. module: purchase #: view:purchase.report:0 msgid "Order in current month" -msgstr "" +msgstr "Ordrar i innevarande månad" #. module: purchase #: view:purchase.report:0 field:purchase.report,delay_pass:0 msgid "Days to Deliver" -msgstr "" +msgstr "Dagar för att leverera" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_action_picking_tree_in_move @@ -845,22 +848,22 @@ msgstr "Ta emot Produkter" #. module: purchase #: model:ir.model,name:purchase.model_procurement_order msgid "Procurement" -msgstr "" +msgstr "Anskaffning" #. module: purchase #: view:purchase.order:0 field:purchase.order,invoice_ids:0 msgid "Invoices" -msgstr "" +msgstr "Fakturor" #. module: purchase #: selection:purchase.report,month:0 msgid "December" -msgstr "" +msgstr "december" #. module: purchase #: field:purchase.config.wizard,config_logo:0 msgid "Image" -msgstr "" +msgstr "Bild" #. module: purchase #: view:purchase.report:0 @@ -870,17 +873,17 @@ msgstr "" #. module: purchase #: view:purchase.order:0 msgid "Approved purchase orders" -msgstr "" +msgstr "Godkända inköpsordrar" #. module: purchase #: view:purchase.report:0 field:purchase.report,month:0 msgid "Month" -msgstr "" +msgstr "Månad" #. module: purchase #: model:email.template,subject:purchase.email_template_edi_purchase msgid "${object.company_id.name} Order (Ref ${object.name or 'n/a' })" -msgstr "" +msgstr "${object.company_id.name} Order (Ref ${object.name or 'n/a' })" #. module: purchase #: report:purchase.quotation:0 @@ -895,12 +898,12 @@ msgstr "Inköpsorder för godkännande" #. module: purchase #: view:purchase.order:0 msgid "Total Untaxed amount" -msgstr "" +msgstr "Totalt ex moms" #. module: purchase #: model:res.groups,name:purchase.group_purchase_user msgid "User" -msgstr "" +msgstr "Användare" #. module: purchase #: field:purchase.order,shipped:0 field:purchase.order,shipped_rate:0 @@ -922,18 +925,18 @@ msgstr "" #. module: purchase #: view:stock.picking:0 msgid "Is a Back Order" -msgstr "" +msgstr "Är en restorder" #. module: purchase #: model:process.node,note:purchase.process_node_invoiceafterpacking0 #: model:process.node,note:purchase.process_node_invoicecontrol0 msgid "To be reviewed by the accountant." -msgstr "" +msgstr "Skall granskas av bokföraren." #. module: purchase #: help:purchase.order,amount_total:0 msgid "The total amount" -msgstr "" +msgstr "Den totala summan" #. module: purchase #: report:purchase.order:0 @@ -943,18 +946,18 @@ msgstr "Taxes :" #. module: purchase #: field:purchase.order,invoiced_rate:0 field:purchase.order.line,invoiced:0 msgid "Invoiced" -msgstr "Invoiced" +msgstr "Fakturerad" #. module: purchase #: view:purchase.report:0 field:purchase.report,category_id:0 msgid "Category" -msgstr "" +msgstr "Kategori" #. module: purchase #: model:process.node,note:purchase.process_node_approvepurchaseorder0 #: model:process.node,note:purchase.process_node_confirmpurchaseorder0 msgid "State of the Purchase Order." -msgstr "" +msgstr "Status för inköpsordern." #. module: purchase #: field:purchase.order,dest_address_id:0 @@ -964,12 +967,12 @@ msgstr "Destination Address" #. module: purchase #: field:purchase.report,state:0 msgid "Order State" -msgstr "" +msgstr "Orderstatus" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_product_category_config_purchase msgid "Product Categories" -msgstr "" +msgstr "Produktkategorier" #. module: purchase #: selection:purchase.config.wizard,default_method:0 @@ -979,12 +982,12 @@ msgstr "" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_view_purchase_line_invoice msgid "Create invoices" -msgstr "" +msgstr "Skapa fakturor" #. module: purchase #: sql_constraint:res.company:0 msgid "The company name must be unique !" -msgstr "" +msgstr "Bolagsnamnet måste vara unikt !" #. module: purchase #: model:ir.model,name:purchase.model_purchase_order_line @@ -1005,7 +1008,7 @@ msgstr "" #. module: purchase #: help:purchase.order,amount_untaxed:0 msgid "The amount without tax" -msgstr "" +msgstr "Summa utan moms." #. module: purchase #: code:addons/purchase/purchase.py:754 @@ -1017,7 +1020,7 @@ msgstr "" #: code:addons/purchase/purchase.py:907 #, python-format msgid "PO: %s" -msgstr "" +msgstr "IO: %s" #. module: purchase #: model:process.transition,note:purchase.process_transition_purchaseinvoice0 @@ -1035,22 +1038,22 @@ msgstr "Untaxed Amount" #. module: purchase #: help:purchase.order,invoiced:0 msgid "It indicates that an invoice has been paid" -msgstr "" +msgstr "Anger att en faktura är betald." #. module: purchase #: model:process.node,note:purchase.process_node_packinginvoice0 msgid "Outgoing products to invoice" -msgstr "" +msgstr "Utlevererade produkter att fakturera" #. module: purchase #: selection:purchase.report,month:0 msgid "August" -msgstr "" +msgstr "augusti" #. module: purchase #: constraint:stock.move:0 msgid "You try to assign a lot which is not from the same product" -msgstr "" +msgstr "Du försöker tilldela ett parti som inte är från samma produkt." #. module: purchase #: help:purchase.order,date_order:0 @@ -1060,12 +1063,12 @@ msgstr "Date on which this document has been created." #. module: purchase #: view:res.partner:0 msgid "Sales & Purchases" -msgstr "" +msgstr "Försäljning och inköp" #. module: purchase #: selection:purchase.report,month:0 msgid "June" -msgstr "" +msgstr "juni" #. module: purchase #: model:process.transition,note:purchase.process_transition_invoicefrompurchase0 @@ -1079,17 +1082,17 @@ msgstr "" #: model:ir.actions.act_window,name:purchase.action_email_templates #: model:ir.ui.menu,name:purchase.menu_email_templates msgid "Email Templates" -msgstr "" +msgstr "E-postmallar" #. module: purchase #: model:ir.model,name:purchase.model_purchase_report msgid "Purchases Orders" -msgstr "" +msgstr "Inköpsorder" #. module: purchase #: view:purchase.order.line:0 msgid "Manual Invoices" -msgstr "" +msgstr "Manuella fakturor" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_procurement_management_invoice @@ -1100,17 +1103,17 @@ msgstr "Invoice Control" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_purchase_uom_categ_form_action msgid "UoM Categories" -msgstr "" +msgstr "Enhetskategorier" #. module: purchase #: selection:purchase.report,month:0 msgid "November" -msgstr "" +msgstr "november" #. module: purchase #: view:purchase.report:0 msgid "Extended Filters..." -msgstr "" +msgstr "Utökade filter..." #. module: purchase #: view:purchase.config.wizard:0 @@ -1130,21 +1133,24 @@ msgid "" "can import your existing partners by CSV spreadsheet from \"Import Data\" " "wizard" msgstr "" +"Skapa eller Importera leverantörer och deras kontakter manuellt från detta " +"formulär eller så kan du importera dina befintliga företag med CSV-filer " +"från \"Importera data\" guiden." #. module: purchase #: model:process.transition,name:purchase.process_transition_createpackinglist0 msgid "Pick list generated" -msgstr "" +msgstr "Plocklista skapad" #. module: purchase #: view:purchase.order:0 msgid "Exception" -msgstr "" +msgstr "Undantag" #. module: purchase #: selection:purchase.report,month:0 msgid "October" -msgstr "" +msgstr "oktober" #. module: purchase #: view:purchase.order:0 @@ -1154,17 +1160,17 @@ msgstr "Compute" #. module: purchase #: view:stock.picking:0 msgid "Incoming Shipments Available" -msgstr "" +msgstr "Inkommande leveranser tillgängliga." #. module: purchase #: model:ir.ui.menu,name:purchase.menu_purchase_partner_cat msgid "Address Book" -msgstr "" +msgstr "Adressbok" #. module: purchase #: model:ir.model,name:purchase.model_res_company msgid "Companies" -msgstr "" +msgstr "Bolag" #. module: purchase #: view:purchase.order:0 @@ -1194,12 +1200,12 @@ msgstr "" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_purchase_deshboard msgid "Dashboard" -msgstr "" +msgstr "Infopanel" #. module: purchase #: sql_constraint:stock.picking:0 msgid "Reference must be unique per Company!" -msgstr "" +msgstr "Referensen måste vara unik per bolag!" #. module: purchase #: view:purchase.report:0 field:purchase.report,price_standard:0 @@ -1209,17 +1215,17 @@ msgstr "" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_partner_categories_in_form msgid "Partner Categories" -msgstr "" +msgstr "Företagskategorier" #. module: purchase #: help:purchase.order,amount_tax:0 msgid "The tax amount" -msgstr "" +msgstr "Moms" #. module: purchase #: view:purchase.order:0 view:purchase.report:0 msgid "Quotations" -msgstr "" +msgstr "Offerter" #. module: purchase #: help:purchase.order,invoice_method:0 @@ -1233,7 +1239,7 @@ msgstr "" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_supplier_address_form msgid "Addresses" -msgstr "" +msgstr "Adresser" #. module: purchase #: model:ir.actions.act_window,name:purchase.purchase_rfq @@ -1306,7 +1312,7 @@ msgstr "" #: view:purchase.order.line:0 field:purchase.order.line,state:0 #: view:purchase.report:0 view:stock.picking:0 msgid "State" -msgstr "" +msgstr "Tillstånd" #. module: purchase #: model:process.node,name:purchase.process_node_approvepurchaseorder0 @@ -1318,7 +1324,7 @@ msgstr "Approved" #. module: purchase #: view:purchase.order.line:0 msgid "General Information" -msgstr "" +msgstr "Allmän information" #. module: purchase #: view:purchase.order:0 @@ -1351,7 +1357,7 @@ msgstr "Faktura" #. module: purchase #: model:process.node,note:purchase.process_node_purchaseorder0 msgid "Confirmed purchase order to invoice" -msgstr "" +msgstr "Bekräftade inköpsorder att fakturera" #. module: purchase #: model:process.transition.action,name:purchase.process_transition_action_approvingcancelpurchaseorder0 @@ -1384,12 +1390,12 @@ msgstr "Inköpsordrar" #. module: purchase #: sql_constraint:purchase.order:0 msgid "Order Reference must be unique per Company!" -msgstr "" +msgstr "Orderreferensen måste vara unik per bolag!" #. module: purchase #: field:purchase.order,origin:0 msgid "Source Document" -msgstr "" +msgstr "Källdokument" #. module: purchase #: view:purchase.order.group:0 @@ -1404,7 +1410,7 @@ msgstr "" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_action_picking_tree4 msgid "Incoming Shipments" -msgstr "" +msgstr "Inkommande leveranser" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_purchase_order_by_user_all @@ -1425,7 +1431,7 @@ msgstr "Tél. :" #. module: purchase #: view:purchase.report:0 msgid "Order of Month" -msgstr "" +msgstr "Ordrar denna månad" #. module: purchase #: report:purchase.order:0 @@ -1484,7 +1490,7 @@ msgstr "" #. module: purchase #: field:purchase.order.line,date_planned:0 msgid "Scheduled Date" -msgstr "" +msgstr "Planerat datum" #. module: purchase #: field:purchase.order,product_id:0 view:purchase.order.line:0 @@ -1497,7 +1503,7 @@ msgstr "Product" #: model:process.transition,name:purchase.process_transition_confirmingpurchaseorder0 #: model:process.transition,name:purchase.process_transition_confirmingpurchaseorder1 msgid "Confirmation" -msgstr "" +msgstr "Bekräftan" #. module: purchase #: report:purchase.order:0 field:purchase.order.line,name:0 @@ -1508,7 +1514,7 @@ msgstr "Beskrivning" #. module: purchase #: view:purchase.report:0 msgid "Order of Year" -msgstr "" +msgstr "Ordrar i år" #. module: purchase #: report:purchase.quotation:0 @@ -1518,7 +1524,7 @@ msgstr "Expected Delivery address:" #. module: purchase #: view:stock.picking:0 msgid "Journal" -msgstr "" +msgstr "Journal" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_stock_move_report_po @@ -1529,7 +1535,7 @@ msgstr "Mottagningsanalys" #. module: purchase #: field:res.company,po_lead:0 msgid "Purchase Lead Time" -msgstr "" +msgstr "Leverantörens ledtid" #. module: purchase #: model:ir.actions.act_window,help:purchase.action_supplier_address_form @@ -1547,7 +1553,7 @@ msgstr "Delivery" #. module: purchase #: view:purchase.order:0 msgid "Purchase orders which are in done state." -msgstr "" +msgstr "Klara inköpsordrar" #. module: purchase #: field:purchase.order.line,product_uom:0 @@ -1567,7 +1573,7 @@ msgstr "Väntar" #. module: purchase #: field:purchase.order,partner_address_id:0 msgid "Address" -msgstr "" +msgstr "Adress" #. module: purchase #: field:purchase.report,product_uom:0 @@ -1592,7 +1598,7 @@ msgstr "Untaxed amount" #. module: purchase #: view:stock.picking:0 msgid "Picking to Invoice" -msgstr "" +msgstr "Plockning att fakturera" #. module: purchase #: view:purchase.config.wizard:0 @@ -1611,13 +1617,13 @@ msgstr "" #. module: purchase #: selection:purchase.report,month:0 msgid "February" -msgstr "" +msgstr "februari" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_purchase_order_report_all #: model:ir.ui.menu,name:purchase.menu_action_purchase_order_report_all msgid "Purchase Analysis" -msgstr "" +msgstr "Inköpsanalys" #. module: purchase #: report:purchase.order:0 @@ -1647,17 +1653,17 @@ msgstr "" #. module: purchase #: view:purchase.order:0 msgid "Purchase Control" -msgstr "Purchase Control" +msgstr "Inköpskontroll" #. module: purchase #: selection:purchase.report,month:0 msgid "March" -msgstr "" +msgstr "mars" #. module: purchase #: selection:purchase.report,month:0 msgid "April" -msgstr "" +msgstr "april" #. module: purchase #: view:purchase.order.group:0 @@ -1689,7 +1695,7 @@ msgstr "" #: model:product.pricelist.type,name:purchase.pricelist_type_purchase #: field:res.partner,property_product_pricelist_purchase:0 msgid "Purchase Pricelist" -msgstr "Purchase Pricelist" +msgstr "Inköpsprislista" #. module: purchase #: field:purchase.order,invoice_method:0 @@ -1699,7 +1705,7 @@ msgstr "Invoicing Control" #. module: purchase #: view:stock.picking:0 msgid "Back Orders" -msgstr "" +msgstr "Restordrar" #. module: purchase #: model:process.transition.action,name:purchase.process_transition_action_approvingpurchaseorder0 @@ -1709,7 +1715,7 @@ msgstr "Approve" #. module: purchase #: model:product.pricelist.version,name:purchase.ver0 msgid "Default Purchase Pricelist Version" -msgstr "Default Purchase Pricelist Version" +msgstr "Standardinköpsprislisteversion" #. module: purchase #: view:purchase.order.line:0 @@ -1732,7 +1738,7 @@ msgstr "" #: code:addons/purchase/purchase.py:426 #, python-format msgid "Purchase order '%s' is cancelled." -msgstr "" +msgstr "Inköpsorder '%s' är avbruten." #. module: purchase #: field:purchase.order,amount_total:0 @@ -1742,12 +1748,12 @@ msgstr "Total" #. module: purchase #: model:ir.ui.menu,name:purchase.menu_product_pricelist_action_purhase msgid "Pricelist Versions" -msgstr "" +msgstr "Prislisteversioner" #. module: purchase #: constraint:res.partner:0 msgid "Error ! You cannot create recursive associated members." -msgstr "" +msgstr "Fel ! Du kan inte ansluta medlemmar rekursivt" #. module: purchase #: code:addons/purchase/purchase.py:359 @@ -1839,32 +1845,32 @@ msgstr "" #. module: purchase #: selection:purchase.report,month:0 msgid "May" -msgstr "" +msgstr "maj" #. module: purchase #: model:res.groups,name:purchase.group_purchase_manager msgid "Manager" -msgstr "" +msgstr "Chef" #. module: purchase #: view:purchase.config.wizard:0 msgid "res_config_contents" -msgstr "" +msgstr "res_config_contents" #. module: purchase #: view:purchase.report:0 msgid "Order in current year" -msgstr "" +msgstr "Ordrar i innevarande år" #. module: purchase #: model:process.process,name:purchase.process_process_purchaseprocess0 msgid "Purchase" -msgstr "" +msgstr "Inköp" #. module: purchase #: view:purchase.report:0 field:purchase.report,name:0 msgid "Year" -msgstr "" +msgstr "År" #. module: purchase #: model:ir.actions.act_window,name:purchase.purchase_line_form_action2 @@ -1892,7 +1898,7 @@ msgstr "Välj en öppen säljorder" #. module: purchase #: view:purchase.report:0 msgid "Orders" -msgstr "" +msgstr "Ordrar" #. module: purchase #: help:purchase.order,name:0 @@ -1906,7 +1912,7 @@ msgstr "" #: model:ir.actions.act_window,name:purchase.open_board_purchase #: model:ir.ui.menu,name:purchase.menu_board_purchase msgid "Purchase Dashboard" -msgstr "" +msgstr "Inköpsorder infopanel" #~ msgid "" #~ "The Object name must start with x_ and not contain any special character !" @@ -2177,3 +2183,6 @@ msgstr "" #~ msgid "Products Categories" #~ msgstr "Produktkategorier" + +#~ msgid "Not invoiced" +#~ msgstr "Icke fakturerat" diff --git a/addons/report_intrastat/i18n/sv.po b/addons/report_intrastat/i18n/sv.po index 0df7182c8c0..9b7c0d9e131 100644 --- a/addons/report_intrastat/i18n/sv.po +++ b/addons/report_intrastat/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-02-08 00:37+0000\n" -"PO-Revision-Date: 2012-06-21 15:07+0000\n" +"PO-Revision-Date: 2012-06-26 21:48+0000\n" "Last-Translator: Anders Wallenquist <anders.wallenquist@vertel.se>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-06-22 04:44+0000\n" -"X-Generator: Launchpad (build 15461)\n" +"X-Launchpad-Export-Date: 2012-06-27 05:28+0000\n" +"X-Generator: Launchpad (build 15482)\n" #. module: report_intrastat #: report:account.invoice.intrastat:0 @@ -111,7 +111,7 @@ msgstr "Fakturadatum" #. module: report_intrastat #: selection:report.intrastat,month:0 msgid "June" -msgstr "Juni" +msgstr "juni" #. module: report_intrastat #: report:account.invoice.intrastat:0 @@ -194,7 +194,7 @@ msgstr "Land" #. module: report_intrastat #: selection:report.intrastat,month:0 msgid "September" -msgstr "September" +msgstr "september" #. module: report_intrastat #: report:account.invoice.intrastat:0 diff --git a/addons/report_webkit/webkit_report.py b/addons/report_webkit/webkit_report.py index 4d0bd6295c6..04980695f8f 100644 --- a/addons/report_webkit/webkit_report.py +++ b/addons/report_webkit/webkit_report.py @@ -51,7 +51,7 @@ import tools from tools.translate import _ from osv.osv import except_osv -logger = logging.getLogger('report_webkit') +_logger = logging.getLogger(__name__) def mako_template(text): """Build a Mako template. @@ -248,7 +248,7 @@ class WebKitParser(report_sxw): htmls.append(html) except Exception, e: msg = exceptions.text_error_template().render() - logger.error(msg) + _logger.error(msg) raise except_osv(_('Webkit render'), msg) else: try : @@ -259,7 +259,7 @@ class WebKitParser(report_sxw): htmls.append(html) except Exception, e: msg = exceptions.text_error_template().render() - logger.error(msg) + _logger.error(msg) raise except_osv(_('Webkit render'), msg) head_mako_tpl = mako_template(header) try : @@ -281,7 +281,7 @@ class WebKitParser(report_sxw): **self.parser_instance.localcontext) except: msg = exceptions.text_error_template().render() - logger.error(msg) + _logger.error(msg) raise except_osv(_('Webkit render'), msg) if report_xml.webkit_debug : try : @@ -292,7 +292,7 @@ class WebKitParser(report_sxw): **self.parser_instance.localcontext) except Exception, e: msg = exceptions.text_error_template().render() - logger.error(msg) + _logger.error(msg) raise except_osv(_('Webkit render'), msg) return (deb, 'html') bin = self.get_lib(cursor, uid) diff --git a/addons/sale/res_config.py b/addons/sale/res_config.py index 79837df3bf9..715564150ff 100644 --- a/addons/sale/res_config.py +++ b/addons/sale/res_config.py @@ -95,9 +95,6 @@ class sale_configuration(osv.osv_memory): This is mostly used when a user encodes his timesheet. The values are retrieved and the fields are auto-filled. But the possibility to change these values is still available. This installs the module analytic_user_function."""), - 'module_analytic_journal_billing_rate': fields.boolean("Billing Rates by Contract", - help="""Allows you to define the default invoicing rate for a specific journal on a given account. - This installs the module analytic_journal_billing_rate."""), 'module_project_timesheet': fields.boolean("Project Timesheet"), 'module_project_mrp': fields.boolean("Project MRP"), 'module_project': fields.boolean("Project"), diff --git a/addons/sale/res_config_view.xml b/addons/sale/res_config_view.xml index d05759d742c..e1910b035bc 100644 --- a/addons/sale/res_config_view.xml +++ b/addons/sale/res_config_view.xml @@ -47,7 +47,6 @@ <group string="Contracts"> <field name="module_account_analytic_analysis" on_change="onchange_timesheet(module_account_analytic_analysis)"/> <field name="module_analytic_user_function" attrs="{'invisible':[('module_account_analytic_analysis','=',False)]}"/> - <field name="module_analytic_journal_billing_rate" attrs="{'invisible':[('module_account_analytic_analysis','=',False)]}"/> </group> </group> </field> diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 08c6a5211dc..39d163c8a0b 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -134,7 +134,8 @@ <field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[('customer','=',True)]" context="{'search_default_customer':1}" /> <field domain="[('parent_id','=',partner_id)]" name="partner_invoice_id" groups="sale.group_delivery_invoice_address" options='{"quick_create": false}'/> <field domain="[('parent_id','=',partner_id)]" name="partner_shipping_id" groups="sale.group_delivery_invoice_address" options='{"quick_create": false}'/> - <field name="project_id" context="{'partner_id':partner_id, 'pricelist_id':pricelist_id, 'default_name':name}" groups="sale.group_analytic_accounting" domain="[('parent_id','!=',False)]"/> + <field domain="[('type','=','sale')]" name="pricelist_id" groups="product.group_sale_pricelist" on_change="onchange_pricelist_id(pricelist_id,order_line)"/> + <field name="project_id" context="{'partner_id':partner_id, 'pricelist_id':pricelist_id, 'default_name':name}" groups="sale.group_analytic_accounting" domain="[('type','in',['view','normal','contract'])]"/> </group><group> <field name="date_order"/> <field name="shop_id" on_change="onchange_shop_id(shop_id)" widget="selection" groups="stock.group_locations"/> diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index 07004f333a8..336f56a5f97 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -32,6 +32,7 @@ from osv import expression from tools.translate import _ from tools.safe_eval import safe_eval import openerp +_logger = logging.getLogger(__name__) FULL_ACCESS = ('perm_read', 'perm_write', 'perm_create', 'perm_unlink') READ_WRITE_ACCESS = ('perm_read', 'perm_write') @@ -48,7 +49,6 @@ def generate_random_pass(): return ''.join(random.sample(RANDOM_PASS_CHARACTERS,10)) class share_wizard(osv.osv_memory): - _logger = logging.getLogger('share.wizard') _name = 'share.wizard' _description = 'Share Wizard' @@ -335,7 +335,7 @@ class share_wizard(osv.osv_memory): except Exception: # Note: must catch all exceptions, as UnquoteEvalContext may cause many # different exceptions, as it shadows builtins. - self._logger.debug("Failed to cleanup action context as it does not parse server-side", exc_info=True) + _logger.debug("Failed to cleanup action context as it does not parse server-side", exc_info=True) result = context_str return result @@ -496,8 +496,8 @@ class share_wizard(osv.osv_memory): [x.id for x in current_user.groups_id], target_model_ids, context=context) group_access_map = self._get_access_map_for_groups_and_models(cr, uid, [group_id], target_model_ids, context=context) - self._logger.debug("Current user access matrix: %r", current_user_access_map) - self._logger.debug("New group current access matrix: %r", group_access_map) + _logger.debug("Current user access matrix: %r", current_user_access_map) + _logger.debug("New group current access matrix: %r", group_access_map) # Create required rights if allowed by current user rights and not # already granted @@ -520,7 +520,7 @@ class share_wizard(osv.osv_memory): need_creation = True if need_creation: model_access_obj.create(cr, UID_ROOT, values) - self._logger.debug("Creating access right for model %s with values: %r", model.model, values) + _logger.debug("Creating access right for model %s with values: %r", model.model, values) def _link_or_copy_current_user_rules(self, cr, current_user, group_id, fields_relations, context=None): rule_obj = self.pool.get('ir.rule') @@ -542,13 +542,13 @@ class share_wizard(osv.osv_memory): 'groups': [(6,0,[group_id])], 'domain_force': rule.domain, # evaluated version! }) - self._logger.debug("Copying rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force) + _logger.debug("Copying rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force) else: # otherwise we can simply link the rule to keep it dynamic rule_obj.write(cr, 1, [rule.id], { 'groups': [(4,group_id)] }) - self._logger.debug("Linking rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force) + _logger.debug("Linking rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force) def _check_personal_rule_or_duplicate(self, cr, group_id, rule, context=None): """Verifies that the given rule only belongs to the given group_id, otherwise @@ -567,7 +567,7 @@ class share_wizard(osv.osv_memory): 'groups': [(6,0,[group_id])], 'domain_force': rule.domain_force, # non evaluated! }) - self._logger.debug("Duplicating rule %s (%s) (domain: %s) for modified access ", rule.name, rule.id, rule.domain_force) + _logger.debug("Duplicating rule %s (%s) (domain: %s) for modified access ", rule.name, rule.id, rule.domain_force) # then disconnect from group_id: rule.write({'groups':[(3,group_id)]}) # disconnects, does not delete! return rule_obj.browse(cr, UID_ROOT, new_id, context=context) @@ -602,7 +602,7 @@ class share_wizard(osv.osv_memory): if restrict: continue else: - self._logger.debug("Ignoring sharing rule on model %s with domain: %s the same rule exists already", model_id, domain) + _logger.debug("Ignoring sharing rule on model %s with domain: %s the same rule exists already", model_id, domain) return if restrict: # restricting existing rules is done by adding the clause @@ -614,7 +614,7 @@ class share_wizard(osv.osv_memory): new_clause = expression.normalize(eval(domain, eval_ctx)) combined_domain = expression.AND([new_clause, org_domain]) rule.write({'domain_force': combined_domain, 'name': rule.name + _('(Modified)')}) - self._logger.debug("Combining sharing rule %s on model %s with domain: %s", rule.id, model_id, domain) + _logger.debug("Combining sharing rule %s on model %s with domain: %s", rule.id, model_id, domain) if not rule_ids or not restrict: # Adding the new rule in the group is ok for normal cases, because rules # in the same group and for the same model will be combined with OR @@ -625,7 +625,7 @@ class share_wizard(osv.osv_memory): 'domain_force': domain, 'groups': [(4,group_id)] }) - self._logger.debug("Created sharing rule on model %s with domain: %s", model_id, domain) + _logger.debug("Created sharing rule on model %s with domain: %s", model_id, domain) def _create_indirect_sharing_rules(self, cr, current_user, wizard_data, group_id, fields_relations, context=None): rule_name = _('Indirect sharing filter created by user %s (%s) for group %s') % \ @@ -648,7 +648,7 @@ class share_wizard(osv.osv_memory): group_id, model_id=model.id, domain=str(related_domain), rule_name=rule_name, restrict=True, context=context) except Exception: - self._logger.exception('Failed to create share access') + _logger.exception('Failed to create share access') raise osv.except_osv(_('Sharing access could not be created'), _('Sorry, the current screen and filter you are trying to share are not supported at the moment.\nYou may want to try a simpler filter.')) @@ -852,7 +852,7 @@ class share_wizard(osv.osv_memory): notification_obj.create(cr, uid, {'user_id': result_line.user_id.id, 'message_id': msg_id}, context=context) def send_emails(self, cr, uid, wizard_data, context=None): - self._logger.info('Sending share notifications by email...') + _logger.info('Sending share notifications by email...') mail_message = self.pool.get('mail.message') user = self.pool.get('res.users').browse(cr, UID_ROOT, uid) if not user.user_email: @@ -885,7 +885,7 @@ class share_wizard(osv.osv_memory): msg_ids.append(mail_message.schedule_with_attach(cr, uid, user.user_email, [email_to], subject, body, model='share.wizard', context=context)) # force direct delivery, as users expect instant notification mail_message.send(cr, uid, msg_ids, context=context) - self._logger.info('%d share notification(s) sent.', len(msg_ids)) + _logger.info('%d share notification(s) sent.', len(msg_ids)) def onchange_embed_options(self, cr, uid, ids, opt_title, opt_search, context=None): wizard = self.browse(cr, uid, ids[0], context) diff --git a/addons/stock/i18n/ja.po b/addons/stock/i18n/ja.po index d73bbf6d106..6b009d0dfd7 100644 --- a/addons/stock/i18n/ja.po +++ b/addons/stock/i18n/ja.po @@ -8,13 +8,13 @@ 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-06-24 02:23+0000\n" +"PO-Revision-Date: 2012-06-27 01:22+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-06-25 05:14+0000\n" +"X-Launchpad-Export-Date: 2012-06-27 05:28+0000\n" "X-Generator: Launchpad (build 15482)\n" #. module: stock @@ -886,7 +886,7 @@ msgstr "" #. module: stock #: view:report.stock.inventory:0 view:stock.move:0 view:stock.picking:0 msgid "Scrap" -msgstr "スクラップ" +msgstr "廃棄" #. module: stock #: field:stock.location,child_ids:0 @@ -1256,12 +1256,12 @@ msgstr "梱包の識別" #. module: stock #: report:stock.picking.list:0 msgid "Packing List:" -msgstr "" +msgstr "梱包リスト:" #. module: stock #: selection:stock.move,state:0 msgid "Waiting Another Move" -msgstr "" +msgstr "他の移動待ち" #. module: stock #: help:product.template,property_stock_production:0 @@ -1269,25 +1269,25 @@ msgid "" "For the current product, this stock location will be used, instead of the " "default one, as the source location for stock moves generated by production " "orders" -msgstr "" +msgstr "現在の製品のため、製造オーダーにより在庫移動は生成されるための元の場所として、デフォルトの代わりにこの在庫場所は使用されます。" #. module: stock #: view:product.product:0 msgid "Expected Stock Variations" -msgstr "" +msgstr "予想在庫変動" #. module: stock #: help:stock.move,price_unit:0 msgid "" "Technical field used to record the product cost set by the user during a " "picking confirmation (when average price costing method is used)" -msgstr "" +msgstr "集荷確認(平均価格コスト方式が使われる時)の間に、ユーザによる製品コストの設定を記録するために使用される技術的な項目" #. module: stock #: code:addons/stock/stock.py:1350 #, python-format msgid "is in draft state." -msgstr "" +msgstr "ドラフト状態です。" #. module: stock #: model:ir.actions.act_window,help:stock.action_tracking_form @@ -1299,12 +1299,12 @@ msgstr "これはあなたの全ての梱包リストです。梱包を選択す #. module: stock #: selection:stock.return.picking,invoice_state:0 msgid "To be refunded/invoiced" -msgstr "" +msgstr "返金 / 請求" #. module: stock #: model:stock.location,name:stock.stock_location_shop0 msgid "Shop 1" -msgstr "" +msgstr "店 1" #. module: stock #: view:stock.change.product.qty:0 view:stock.change.standard.price:0 @@ -1313,50 +1313,50 @@ msgstr "" #: view:stock.move:0 view:stock.partial.move:0 view:stock.partial.picking:0 #: view:stock.picking:0 view:stock.return.picking:0 view:stock.split.into:0 msgid "_Cancel" -msgstr "" +msgstr "キャンセル" #. module: stock #: view:stock.move:0 view:stock.picking:0 msgid "Ready" -msgstr "" +msgstr "準備完了" #. module: stock #: view:stock.picking:0 msgid "Calendar View" -msgstr "" +msgstr "カレンダービュー" #. module: stock #: view:stock.picking:0 msgid "Additional Info" -msgstr "" +msgstr "付加情報" #. module: stock #: field:stock.partial.move.line,move_id:0 #: field:stock.partial.picking.line,move_id:0 #: field:stock.return.picking.memory,move_id:0 msgid "Move" -msgstr "" +msgstr "移動" #. module: stock #: field:stock.location.product,from_date:0 msgid "From" -msgstr "" +msgstr "開始" #. module: stock #: view:stock.picking:0 msgid "Incoming Shipments already processed" -msgstr "" +msgstr "内部出荷は処理済です。" #. module: stock #: code:addons/stock/wizard/stock_return_picking.py:99 #, python-format msgid "You may only return pickings that are Confirmed, Available or Done!" -msgstr "" +msgstr "確認済、利用可能、完了の集荷のみ返却できます。" #. module: stock #: view:stock.picking:0 field:stock.picking,invoice_state:0 msgid "Invoice Control" -msgstr "" +msgstr "請求書制御" #. module: stock #: model:ir.model,name:stock.model_stock_production_lot_revision @@ -1366,49 +1366,49 @@ msgstr "製造ロットのリビジョン" #. module: stock #: view:stock.picking:0 msgid "Internal Picking List" -msgstr "" +msgstr "内部集荷リスト" #. module: stock #: selection:report.stock.inventory,state:0 #: selection:report.stock.move,state:0 view:stock.picking:0 msgid "Waiting" -msgstr "" +msgstr "待機中" #. module: stock #: view:stock.move:0 view:stock.picking:0 msgid "Split" -msgstr "" +msgstr "分割" #. module: stock #: view:stock.picking:0 msgid "Search Stock Picking" -msgstr "" +msgstr "在庫集荷の検索" #. module: stock #: code:addons/stock/product.py:92 #, python-format msgid "Company is not specified in Location" -msgstr "" +msgstr "会社が場所に指定されていません。" #. module: stock #: view:report.stock.move:0 msgid "Type" -msgstr "" +msgstr "タイプ" #. module: stock #: view:stock.picking:0 msgid "Available Pickings" -msgstr "" +msgstr "利用可能集荷" #. module: stock #: model:stock.location,name:stock.stock_location_5 msgid "Generic IT Suppliers" -msgstr "" +msgstr "一般的なIT仕入先" #. module: stock #: view:stock.move:0 msgid "Stock to be receive" -msgstr "" +msgstr "受領する在庫" #. module: stock #: help:stock.location,valuation_out_account_id:0 @@ -1419,61 +1419,63 @@ msgid "" "the generic Stock Output Account set on the product. This has no effect for " "internal locations." msgstr "" +"リアルタイム在庫評価のために使用されます。仮想の場所(非内部タイプ)に設定されている場合、このアカウントは製品にセットされる一般的な在庫出力アカウントの代" +"わりに、この場所から内部の場所に移動される製品の価値を保持するために使用されます。" #. module: stock #: report:stock.picking.list:0 msgid "Picking List:" -msgstr "" +msgstr "集荷リスト:" #. module: stock #: field:stock.inventory,date:0 field:stock.move,create_date:0 #: field:stock.production.lot,date:0 field:stock.tracking,date:0 msgid "Creation Date" -msgstr "" +msgstr "作成日" #. module: stock #: field:report.stock.lines.date,id:0 msgid "Inventory Line Id" -msgstr "" +msgstr "在庫行ID" #. module: stock #: help:stock.location,address_id:0 msgid "Address of customer or supplier." -msgstr "" +msgstr "顧客または仕入先住所" #. module: stock #: view:report.stock.move:0 field:report.stock.move,picking_id:0 msgid "Packing" -msgstr "" +msgstr "梱包" #. module: stock #: selection:report.stock.inventory,location_type:0 #: field:res.partner,property_stock_customer:0 #: selection:stock.location,usage:0 msgid "Customer Location" -msgstr "" +msgstr "顧客の場所" #. module: stock #: code:addons/stock/stock.py:2312 #, python-format msgid "You can only delete draft moves." -msgstr "" +msgstr "ドラフト移動のみ削除ができます。" #. module: stock #: model:ir.model,name:stock.model_stock_inventory_line_split_lines msgid "Inventory Split lines" -msgstr "" +msgstr "在庫分割行" #. module: stock #: model:ir.actions.report.xml,name:stock.report_location_overview #: report:lot.stock.overview:0 msgid "Location Inventory Overview" -msgstr "在庫の場所の概観" +msgstr "在庫場所の概要" #. module: stock #: view:stock.inventory:0 msgid "General Informations" -msgstr "" +msgstr "一般情報" #. module: stock #: view:report.stock.inventory:0 @@ -1489,34 +1491,34 @@ msgstr "下流追跡能力" #: code:addons/stock/wizard/stock_invoice_onshipping.py:112 #, python-format msgid "No Invoices were created" -msgstr "" +msgstr "請求書は作成されませんでした。" #. module: stock #: field:stock.location,posy:0 msgid "Shelves (Y)" -msgstr "" +msgstr "棚(Y)" #. module: stock #: help:stock.incoterms,active:0 msgid "" "By unchecking the active field, you may hide an INCOTERM without deleting it." -msgstr "" +msgstr "アクティブな項目のチェックを外すことで、インコタームズを削除することなく非表示にできます。" #. module: stock #: view:stock.move:0 view:stock.picking:0 field:stock.picking,date:0 msgid "Order Date" -msgstr "" +msgstr "オーダー日" #. module: stock #: code:addons/stock/wizard/stock_change_product_qty.py:88 #, python-format msgid "INV: %s" -msgstr "" +msgstr "請求書:%s" #. module: stock #: view:stock.location:0 field:stock.location,location_id:0 msgid "Parent Location" -msgstr "" +msgstr "親の場所" #. module: stock #: help:stock.picking,state:0 @@ -1529,34 +1531,40 @@ msgid "" "* Done: has been processed, can't be modified or cancelled anymore\n" "* Cancelled: has been cancelled, can't be confirmed anymore" msgstr "" +"・ ドラフト:まだ確認されておらず、そして確認されるまでスケジュールされません。\n" +"・ 確認済:製品が利用可能になるのを待っています。\n" +"・ 利用可能:製品が確保され、単純に確認を待っています。\n" +"・ 待機中:自動的に利用可能になる前に(例えばオーダー作成フロー)、処理のために他の移動を待っています。\n" +"・ 完了:処理されたもの。もはや変更もキャンセルもできません。\n" +"・ キャンセル済:キャンセルされたのもの。もはや確認できません。" #. module: stock #: help:stock.location,company_id:0 msgid "Let this field empty if this location is shared between all companies" -msgstr "" +msgstr "この場所が全ての会社間で共有される場合は、この項目を空にしましょう。" #. module: stock #: code:addons/stock/stock.py:2337 #, python-format msgid "Please provide a positive quantity to scrap!" -msgstr "" +msgstr "廃棄するには正の数量を与えて下さい。" #. module: stock #: field:stock.location,chained_delay:0 msgid "Chaining Lead Time" -msgstr "" +msgstr "連鎖的なリードタイム" #. module: stock #: help:product.product,track_outgoing:0 msgid "" "Forces to specify a Production Lot for all moves containing this product and " "going to a Customer Location" -msgstr "" +msgstr "この製品を含む全ての移動と顧客の場所に行くのための製造ロットを強制的に定義します。" #. module: stock #: model:ir.model,name:stock.model_stock_invoice_onshipping msgid "Stock Invoice Onshipping" -msgstr "" +msgstr "出荷される在庫の請求書" #. module: stock #: help:stock.move,state:0 @@ -1568,43 +1576,48 @@ msgid "" " When the picking is done the state is 'Done'. \n" "The state is 'Waiting' if the move is waiting for another one." msgstr "" +"在庫移動が作成された時にはドラフト状態です。\n" +" その後、スケジューラが製品を持つける事ができなかった場合は利用不可にセットされます。\n" +" 製品が確保されると、利用可能にセットされます。\n" +" 集荷が完了すると、状態は完了になります。\n" +"移動が他の移動のために待ち状態になると、状態は待機中となります。" #. module: stock #: selection:report.stock.inventory,location_type:0 #: field:res.partner,property_stock_supplier:0 #: selection:stock.location,usage:0 msgid "Supplier Location" -msgstr "" +msgstr "仕入先の場所" #. module: stock #: code:addons/stock/stock.py:2358 #, python-format msgid "were scrapped" -msgstr "" +msgstr "廃棄されました。" #. module: stock #: help:stock.partial.move.line,currency:0 #: help:stock.partial.picking.line,currency:0 msgid "Currency in which Unit cost is expressed" -msgstr "" +msgstr "単価が表現される通貨" #. module: stock #: selection:report.stock.inventory,month:0 #: selection:report.stock.move,month:0 msgid "September" -msgstr "" +msgstr "9月" #. module: stock #: help:stock.picking,backorder_id:0 msgid "" "If this picking was split this field links to the picking that contains the " "other part that has been processed already." -msgstr "" +msgstr "集荷が分割される場合、この項目は既に処理された他の部分を含む集荷にリンクします。" #. module: stock #: model:ir.model,name:stock.model_report_stock_inventory msgid "Stock Statistics" -msgstr "" +msgstr "在庫の統計値" #. module: stock #: view:report.stock.move:0 @@ -1781,7 +1794,7 @@ msgstr "" #: model:ir.model,name:stock.model_stock_move_scrap view:stock.move:0 #: view:stock.move.scrap:0 view:stock.picking:0 msgid "Scrap Products" -msgstr "" +msgstr "廃棄製品" #. module: stock #: code:addons/stock/stock.py:1157 @@ -2167,7 +2180,7 @@ msgstr "" #: model:stock.location,name:stock.stock_location_scrapped #: field:stock.move,scrapped:0 msgid "Scrapped" -msgstr "" +msgstr "廃棄済" #. module: stock #: view:stock.inventory:0 @@ -2488,7 +2501,7 @@ msgstr "" #. module: stock #: model:ir.actions.act_window,name:stock.move_scrap view:stock.move.scrap:0 msgid "Scrap Move" -msgstr "" +msgstr "廃棄移動" #. module: stock #: model:ir.actions.act_window,name:stock.action_reception_picking_move @@ -3330,7 +3343,7 @@ msgstr "" #: help:stock.location,scrap_location:0 msgid "" "Check this box to allow using this location to put scrapped/damaged goods." -msgstr "" +msgstr "廃棄 / 破損品を置くためにこの場所を使用する場合は、このボックスをチェックします。" #. module: stock #: model:ir.actions.act_window,name:stock.act_relate_picking @@ -3938,7 +3951,7 @@ msgstr "" #. module: stock #: field:stock.location,scrap_location:0 view:stock.move.scrap:0 msgid "Scrap Location" -msgstr "" +msgstr "廃棄場所" #. module: stock #: selection:report.stock.inventory,month:0 diff --git a/addons/stock/security/ir.model.access.csv b/addons/stock/security/ir.model.access.csv index a391f117393..593dc7eb9f3 100644 --- a/addons/stock/security/ir.model.access.csv +++ b/addons/stock/security/ir.model.access.csv @@ -12,7 +12,11 @@ access_stock_tracking_user,stock.tracking user,model_stock_tracking,stock.group_ access_stock_tracking_manager,stock.tracking manager,model_stock_tracking,stock.group_stock_manager,1,0,0,0
access_stock_tracking_sales_user,stock.tracking sales.user,model_stock_tracking,base.group_sale_salesman,1,1,1,0
access_stock_picking_user,stock.picking user,model_stock_picking,stock.group_stock_user,1,1,1,1
+access_stock_picking_in_user,stock.picking.in,model_stock_picking_in,stock.group_stock_user,1,1,1,1
+access_stock_picking_out_user,stock.picking.out,model_stock_picking_out,stock.group_stock_user,1,1,1,1
access_stock_picking_manager,stock.picking manager,model_stock_picking,stock.group_stock_manager,1,1,0,0
+access_stock_picking_in_manager,stock.picking.in manager,model_stock_picking_in,stock.group_stock_manager,1,0,0,0
+access_stock_picking_out_manager,stock.picking.out manager,model_stock_picking_out,stock.group_stock_manager,1,0,0,0
access_stock_production_lot_manager,stock.production.lot manager,model_stock_production_lot,stock.group_stock_manager,1,0,0,0
access_stock_production_lot_user,stock.production.lot user,model_stock_production_lot,stock.group_stock_user,1,1,1,1
access_stock_production_lot_revision,stock.production.lot.revision,model_stock_production_lot_revision,stock.group_stock_user,1,1,1,1
diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 87cf9ade130..a279b8bea6c 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -33,7 +33,7 @@ import tools from tools import float_compare import decimal_precision as dp import logging - +_logger = logging.getLogger(__name__) #---------------------------------------------------------- # Incoterms @@ -419,9 +419,8 @@ class stock_location(osv.osv): # so we ROLLBACK to the SAVEPOINT to restore the transaction to its earlier # state, we return False as if the products were not available, and log it: cr.execute("ROLLBACK TO stock_location_product_reserve") - logger = logging.getLogger('stock.location') - logger.warn("Failed attempt to reserve %s x product %s, likely due to another transaction already in progress. Next attempt is likely to work. Detailed error available at DEBUG level.", product_qty, product_id) - logger.debug("Trace of the failed product reservation attempt: ", exc_info=True) + _logger.warn("Failed attempt to reserve %s x product %s, likely due to another transaction already in progress. Next attempt is likely to work. Detailed error available at DEBUG level.", product_qty, product_id) + _logger.debug("Trace of the failed product reservation attempt: ", exc_info=True) return False # XXX TODO: rewrite this with one single query, possibly even the quantity conversion diff --git a/addons/stock_planning/stock_planning.py b/addons/stock_planning/stock_planning.py index 324aeb0dcd2..e6f3b8d4218 100644 --- a/addons/stock_planning/stock_planning.py +++ b/addons/stock_planning/stock_planning.py @@ -29,7 +29,7 @@ from tools.translate import _ import logging import decimal_precision as dp -_logger = logging.getLogger('mps') +_logger = logging.getLogger(__name__) def rounding(fl, round_value): diff --git a/addons/users_ldap/users_ldap.py b/addons/users_ldap/users_ldap.py index 1d0c1e3acb9..e4615907c79 100644 --- a/addons/users_ldap/users_ldap.py +++ b/addons/users_ldap/users_ldap.py @@ -27,6 +27,7 @@ import pooler import tools from osv import fields, osv from openerp import SUPERUSER_ID +_logger = logging.getLogger(__name__) class CompanyLDAP(osv.osv): _name = 'res.company.ldap' @@ -107,8 +108,7 @@ class CompanyLDAP(osv.osv): except ldap.INVALID_CREDENTIALS: return False except ldap.LDAPError, e: - logger = logging.getLogger('orm.ldap') - logger.error('An LDAP exception occurred: %s', e) + _logger.error('An LDAP exception occurred: %s', e) return entry def query(self, conf, filter, retrieve_attributes=None): @@ -135,7 +135,6 @@ class CompanyLDAP(osv.osv): """ results = [] - logger = logging.getLogger('orm.ldap') try: conn = self.connect(conf) conn.simple_bind_s(conf['ldap_binddn'] or '', @@ -144,9 +143,9 @@ class CompanyLDAP(osv.osv): filter, retrieve_attributes, timeout=60) conn.unbind() except ldap.INVALID_CREDENTIALS: - logger.error('LDAP bind failed.') + _logger.error('LDAP bind failed.') except ldap.LDAPError, e: - logger.error('An LDAP exception occurred: %s', e) + _logger.error('An LDAP exception occurred: %s', e) return results def map_ldap_attributes(self, cr, uid, conf, login, ldap_entry): @@ -188,8 +187,7 @@ class CompanyLDAP(osv.osv): if res[1]: user_id = res[0] elif conf['create_user']: - logger = logging.getLogger('orm.ldap') - logger.debug("Creating new OpenERP user \"%s\" from LDAP" % login) + _logger.debug("Creating new OpenERP user \"%s\" from LDAP" % login) user_obj = self.pool.get('res.users') values = self.map_ldap_attributes(cr, uid, conf, login, ldap_entry) if conf['user']: |
