summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsgo@tinyerp.com <>2013-06-10 10:30:15 +0530
committersgo@tinyerp.com <>2013-06-10 10:30:15 +0530
commitfea1eaf1d65c97743e2d4188c8ae5dc5fc581e2b (patch)
treef07db151ab633b6ddcb0012d281ceac2746c916a
parentd3c7f6becffc7830f8f4c26b6cef7842d4a8ac4a (diff)
parent70f16ce73b0dab305b9e7d63a74416cbcb0448da (diff)
[MERGE]sync with parent
bzr revid: sgo@tinyerp.com-20130610050015-cuk6adbhzsmaas8s
-rw-r--r--addons/account/account.py44
-rw-r--r--addons/account/account_bank_statement.py2
-rw-r--r--addons/account/account_cash_statement.py2
-rw-r--r--addons/account/account_invoice.py48
-rw-r--r--addons/account/account_invoice_view.xml6
-rw-r--r--addons/account/account_move_line.py6
-rw-r--r--addons/account/account_view.xml4
-rw-r--r--addons/account/i18n/ru.po405
-rw-r--r--addons/account/i18n/zh_CN.po351
-rw-r--r--addons/account/installer.py2
-rw-r--r--addons/account/partner_view.xml2
-rw-r--r--addons/account/product_view.xml4
-rw-r--r--addons/account/project/project_view.xml1
-rw-r--r--addons/account/report/account_print_invoice.rml129
-rw-r--r--addons/account/wizard/account_validate_account_move.py2
-rw-r--r--addons/account/wizard/pos_box.py2
-rw-r--r--addons/account_analytic_analysis/account_analytic_analysis.py2
-rw-r--r--addons/account_analytic_plans/account_analytic_plans.py4
-rw-r--r--addons/account_followup/account_followup_customers.xml5
-rw-r--r--addons/account_followup/report/account_followup_report.xml2
-rw-r--r--addons/account_payment/wizard/account_payment_order.py3
-rw-r--r--addons/account_test/i18n/ru.po241
-rw-r--r--addons/account_voucher/account_voucher.py2
-rw-r--r--addons/analytic/analytic.py2
-rw-r--r--addons/analytic_user_function/analytic_user_function.py4
-rw-r--r--addons/anonymization/anonymization.py10
-rw-r--r--addons/auth_signup/res_users.py9
-rw-r--r--addons/auth_signup/static/src/js/auth_signup.js2
-rw-r--r--addons/base_action_rule/base_action_rule.py1
-rw-r--r--addons/base_status/base_state.py2
-rw-r--r--addons/base_status/i18n/ru.po18
-rw-r--r--addons/base_vat/base_vat.py2
-rw-r--r--addons/claim_from_delivery/i18n/ru.po10
-rw-r--r--addons/crm/base_partner_merge.py2
-rw-r--r--addons/crm/crm_lead.py13
-rw-r--r--addons/crm/i18n/ru.po19
-rw-r--r--addons/crm/wizard/crm_lead_to_opportunity.py2
-rw-r--r--addons/crm_helpdesk/i18n/zh_CN.po14
-rw-r--r--addons/crm_partner_assign/i18n/ru.po10
-rw-r--r--addons/crm_partner_assign/wizard/crm_forward_to_partner.py1
-rw-r--r--addons/delivery/sale.py4
-rw-r--r--addons/document_page/document_page_view.xml1
-rw-r--r--addons/edi/models/edi.py2
-rw-r--r--addons/email_template/i18n/ru.po8
-rw-r--r--addons/fetchmail/security/ir.model.access.csv1
-rw-r--r--addons/google_docs/i18n/ln.po188
-rw-r--r--addons/hr_attendance/wizard/hr_attendance_error.py2
-rw-r--r--addons/hr_expense/hr_expense.py47
-rw-r--r--addons/hr_expense/hr_expense_view.xml2
-rw-r--r--addons/hr_holidays/hr_holidays_view.xml4
-rw-r--r--addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py2
-rw-r--r--addons/hr_timesheet_invoice/hr_timesheet_invoice.py2
-rw-r--r--addons/hr_timesheet_sheet/static/src/js/timesheet.js44
-rw-r--r--addons/im/im.py74
-rw-r--r--addons/im/security/ir.model.access.csv2
-rw-r--r--addons/im/static/src/audio/Ting.mp3bin17087 -> 17293 bytes
-rw-r--r--addons/im/static/src/audio/Ting.oggbin12568 -> 17026 bytes
-rw-r--r--addons/im/static/src/js/im.js7
-rw-r--r--addons/im/watcher.py84
-rw-r--r--addons/im_livechat/security/ir.model.access.csv2
-rw-r--r--addons/im_livechat/static/ext/static/audio/Ting.mp3bin17087 -> 17293 bytes
-rw-r--r--addons/im_livechat/static/ext/static/audio/Ting.oggbin12568 -> 17026 bytes
-rw-r--r--addons/im_livechat/static/ext/static/js/livesupport.js7
-rw-r--r--addons/l10n_be/wizard/l10n_be_account_vat_declaration.py2
-rw-r--r--addons/l10n_be/wizard/l10n_be_partner_vat_listing.py6
-rw-r--r--addons/l10n_be/wizard/l10n_be_vat_intra.py4
-rw-r--r--addons/l10n_ca/__openerp__.py4
-rw-r--r--addons/l10n_ca/account_tax_en.xml10
-rw-r--r--addons/l10n_ca/account_tax_fr.xml10
-rw-r--r--addons/l10n_ca/fiscal_templates_en.xml12
-rw-r--r--addons/l10n_ca/fiscal_templates_fr.xml6
-rw-r--r--addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py8
-rw-r--r--addons/l10n_it/__openerp__.py2
-rw-r--r--addons/l10n_it/data/account.tax.code.template.csv31
-rw-r--r--addons/l10n_it/data/account.tax.template.csv135
-rw-r--r--addons/l10n_lu/account_financial_report.xml30
-rw-r--r--addons/l10n_lu/wizard/print_vat.py2
-rw-r--r--addons/mail/mail_mail.py3
-rw-r--r--addons/mail/mail_message.py13
-rw-r--r--addons/mail/mail_thread.py37
-rw-r--r--addons/mail/static/src/js/mail.js11
-rw-r--r--addons/mail/static/src/xml/mail.xml2
-rw-r--r--addons/mail/tests/test_mail_gateway.py12
-rw-r--r--addons/mail/wizard/mail_compose_message.py1
-rw-r--r--addons/mrp/procurement.py5
-rw-r--r--addons/mrp/report/order.rml93
-rw-r--r--addons/mrp_operations/mrp_operations.py4
-rw-r--r--addons/mrp_repair/mrp_repair.py4
-rw-r--r--addons/multi_company/i18n/ru.po16
-rw-r--r--addons/note/i18n/ru.po286
-rw-r--r--addons/point_of_sale/point_of_sale.py6
-rw-r--r--addons/point_of_sale/wizard/pos_open_statement.py2
-rw-r--r--addons/portal/security/portal_security.xml2
-rw-r--r--addons/portal/wizard/portal_wizard.py88
-rw-r--r--addons/portal_hr_employees/hr_employee_view.xml3
-rw-r--r--addons/procurement/procurement.py2
-rw-r--r--addons/procurement/procurement_view.xml1
-rw-r--r--addons/project/project.py29
-rw-r--r--addons/project/report/project_cumulative.xml2
-rw-r--r--addons/project_gtd/wizard/project_gtd_empty.py2
-rw-r--r--addons/project_issue/project_issue.py42
-rw-r--r--addons/project_issue/project_issue_view.xml27
-rw-r--r--addons/project_issue_sheet/project_issue_sheet_view.xml3
-rw-r--r--addons/project_long_term/project_long_term_view.xml5
-rw-r--r--addons/project_timesheet/project_timesheet.py10
-rw-r--r--addons/purchase/report/order.rml84
-rw-r--r--addons/purchase/report/request_quotation.rml55
-rw-r--r--addons/report_webkit/webkit_report.py2
-rw-r--r--addons/sale/i18n/ru.po10
-rw-r--r--addons/sale/report/sale_order.rml93
-rw-r--r--addons/sale/res_partner.py2
-rw-r--r--addons/sale/sale.py6
-rw-r--r--addons/sale_crm/wizard/crm_make_sale.py2
-rw-r--r--addons/sale_journal/i18n/ru.po14
-rw-r--r--addons/sale_margin/sale_margin_view.xml2
-rw-r--r--addons/sale_stock/i18n/ru.po100
-rw-r--r--addons/sale_stock/test/cancel_order_sale_stock.yml4
-rw-r--r--addons/share/wizard/share_wizard.py7
-rw-r--r--addons/stock/stock.py5
-rw-r--r--addons/stock/wizard/stock_partial_picking.py6
-rw-r--r--addons/subscription/subscription.py4
-rw-r--r--addons/warning/warning.py16
122 files changed, 2115 insertions, 1143 deletions
diff --git a/addons/account/account.py b/addons/account/account.py
index f06f5a6186a..35b95b80190 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -648,10 +648,10 @@ class account_account(osv.osv):
if line_obj.search(cr, uid, [('account_id', 'in', account_ids)]):
#Check for 'Closed' type
if old_type == 'closed' and new_type !='closed':
- raise osv.except_osv(_('Warning !'), _("You cannot change the type of account from 'Closed' to any other type as it contains journal items!"))
+ raise osv.except_osv(_('Warning!'), _("You cannot change the type of account from 'Closed' to any other type as it contains journal items!"))
# Forbid to change an account type for restricted_groups as it contains journal items (or if one of its children does)
if (new_type in restricted_groups):
- raise osv.except_osv(_('Warning !'), _("You cannot change the type of account to '%s' type as it contains journal items!") % (new_type,))
+ raise osv.except_osv(_('Warning!'), _("You cannot change the type of account to '%s' type as it contains journal items!") % (new_type,))
return True
@@ -1014,14 +1014,14 @@ class account_period(osv.osv):
if not result:
result = self.search(cr, uid, args, context=context)
if not result:
- raise osv.except_osv(_('Error !'), _('There is no period defined for this date: %s.\nPlease create one.')%dt)
+ raise osv.except_osv(_('Error!'), _('There is no period defined for this date: %s.\nPlease create one.')%dt)
return result
def action_draft(self, cr, uid, ids, *args):
mode = 'draft'
for period in self.browse(cr, uid, ids):
if period.fiscalyear_id.state == 'done':
- raise osv.except_osv(_('Warning !'), _('You can not re-open a period which belongs to closed fiscal year'))
+ raise osv.except_osv(_('Warning!'), _('You can not re-open a period which belongs to closed fiscal year'))
cr.execute('update account_journal_period set state=%s where period_id in %s', (mode, tuple(ids),))
cr.execute('update account_period set state=%s where id in %s', (mode, tuple(ids),))
return True
@@ -1033,9 +1033,15 @@ class account_period(osv.osv):
context = {}
ids = []
if name:
- ids = self.search(cr, user, [('code','ilike',name)]+ args, limit=limit)
+ ids = self.search(cr, user,
+ [('code', 'ilike', name)] + args,
+ limit=limit,
+ context=context)
if not ids:
- ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit)
+ ids = self.search(cr, user,
+ [('name', operator, name)] + args,
+ limit=limit,
+ context=context)
return self.name_get(cr, user, ids, context=context)
def write(self, cr, uid, ids, vals, context=None):
@@ -1058,10 +1064,14 @@ class account_period(osv.osv):
raise osv.except_osv(_('Error!'), _('You should choose the periods that belong to the same company.'))
if period_date_start > period_date_stop:
raise osv.except_osv(_('Error!'), _('Start period should precede then end period.'))
+
+ # /!\ We do not include a criterion on the company_id field below, to allow producing consolidated reports
+ # on multiple companies. It will only work when start/end periods are selected and no fiscal year is chosen.
+
#for period from = january, we want to exclude the opening period (but it has same date_from, so we have to check if period_from is special or not to include that clause or not in the search).
if period_from.special:
- return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('company_id', '=', company1_id)])
- return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('company_id', '=', company1_id), ('special', '=', False)])
+ return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop)])
+ return self.search(cr, uid, [('date_start', '>=', period_date_start), ('date_stop', '<=', period_date_stop), ('special', '=', False)])
class account_journal_period(osv.osv):
@@ -1853,6 +1863,12 @@ class account_tax_code(osv.osv):
_order = 'code'
+def get_precision_tax():
+ def change_digit_tax(cr):
+ res = openerp.registry(cr.dbname)['decimal.precision'].precision_get(cr, SUPERUSER_ID, 'Account')
+ return (16, res+3)
+ return change_digit_tax
+
class account_tax(osv.osv):
"""
A tax object.
@@ -1873,12 +1889,6 @@ class account_tax(osv.osv):
default.update({'name': name + _(' (Copy)')})
return super(account_tax, self).copy_data(cr, uid, id, default=default, context=context)
- def get_precision_tax():
- def change_digit_tax(cr):
- res = openerp.registry(cr.dbname)['decimal.precision'].precision_get(cr, SUPERUSER_ID, 'Account')
- return (16, res+2)
- return change_digit_tax
-
_name = 'account.tax'
_description = 'Tax'
_columns = {
@@ -2306,7 +2316,7 @@ class account_model(osv.osv):
try:
entry['name'] = model.name%{'year': move_date.strftime('%Y'), 'month': move_date.strftime('%m'), 'date': move_date.strftime('%Y-%m')}
except:
- raise osv.except_osv(_('Wrong model !'), _('You have a wrong expression "%(...)s" in your model !'))
+ raise osv.except_osv(_('Wrong Model!'), _('You have a wrong expression "%(...)s" in your model!'))
move_id = account_move_obj.create(cr, uid, {
'ref': entry['name'],
'period_id': period_id,
@@ -2318,7 +2328,7 @@ class account_model(osv.osv):
analytic_account_id = False
if line.analytic_account_id:
if not model.journal_id.analytic_journal_id:
- raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (model.journal_id.name,))
+ raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal!") % (model.journal_id.name,))
analytic_account_id = line.analytic_account_id.id
val = {
'move_id': move_id,
@@ -2794,7 +2804,7 @@ class account_tax_template(osv.osv):
'chart_template_id': fields.many2one('account.chart.template', 'Chart Template', required=True),
'name': fields.char('Tax Name', size=64, required=True),
'sequence': fields.integer('Sequence', required=True, help="The sequence field is used to order the taxes lines from lower sequences to higher ones. The order is important if you have a tax that has several tax children. In this case, the evaluation order is important."),
- 'amount': fields.float('Amount', required=True, digits=(14,4), help="For Tax Type percent enter % ratio between 0-1."),
+ 'amount': fields.float('Amount', required=True, digits_compute=get_precision_tax(), help="For Tax Type percent enter % ratio between 0-1."),
'type': fields.selection( [('percent','Percent'), ('fixed','Fixed'), ('none','None'), ('code','Python Code'), ('balance','Balance')], 'Tax Type', required=True),
'applicable_type': fields.selection( [('true','True'), ('code','Python Code')], 'Applicable Type', required=True, help="If not applicable (computed through a Python code), the tax won't appear on the invoice."),
'domain':fields.char('Domain', size=32, help="This field is only used if you develop your own module allowing developers to create specific taxes in a custom domain."),
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index 023765d73f0..8a15321b9c6 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -420,7 +420,7 @@ class account_bank_statement(osv.osv):
for st_line in st.line_ids:
if st_line.analytic_account_id:
if not st.journal_id.analytic_journal_id:
- raise osv.except_osv(_('No Analytic Journal !'),_("You have to assign an analytic journal on the '%s' journal!") % (st.journal_id.name,))
+ raise osv.except_osv(_('No Analytic Journal!'),_("You have to assign an analytic journal on the '%s' journal!") % (st.journal_id.name,))
if not st_line.amount:
continue
st_line_number = self.get_next_st_line_number(cr, uid, st_number, st_line, context)
diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py
index 40f0ca80738..8e3e250d41c 100644
--- a/addons/account/account_cash_statement.py
+++ b/addons/account/account_cash_statement.py
@@ -252,7 +252,7 @@ class account_cash_statement(osv.osv):
for statement in statement_pool.browse(cr, uid, ids, context=context):
vals = {}
if not self._user_allow(cr, uid, statement.id, context=context):
- raise osv.except_osv(_('Error!'), (_('You do not have rights to open this %s journal !') % (statement.journal_id.name, )))
+ raise osv.except_osv(_('Error!'), (_('You do not have rights to open this %s journal!') % (statement.journal_id.name, )))
if statement.name and statement.name == '/':
c = {'fiscalyear_id': statement.period_id.fiscalyear_id.id}
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index ab6ad97b180..01476374cf4 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -69,7 +69,7 @@ class account_invoice(osv.osv):
tt = type2journal.get(type_inv, 'sale')
result = self.pool.get('account.analytic.journal').search(cr, uid, [('type','=',tt)], context=context)
if not result:
- raise osv.except_osv(_('No Analytic Journal !'),_("You must define an analytic journal of type '%s'!") % (tt,))
+ raise osv.except_osv(_('No Analytic Journal!'),_("You must define an analytic journal of type '%s'!") % (tt,))
return result[0]
def _get_type(self, cr, uid, context=None):
@@ -89,13 +89,43 @@ class account_invoice(osv.osv):
return [('none', _('Free Reference'))]
def _amount_residual(self, cr, uid, ids, name, args, context=None):
+ """Function of the field residua. It computes the residual amount (balance) for each invoice"""
+ if context is None:
+ context = {}
+ ctx = context.copy()
result = {}
+ currency_obj = self.pool.get('res.currency')
for invoice in self.browse(cr, uid, ids, context=context):
+ nb_inv_in_partial_rec = max_invoice_id = 0
result[invoice.id] = 0.0
if invoice.move_id:
- for m in invoice.move_id.line_id:
- if m.account_id.type in ('receivable','payable'):
- result[invoice.id] += m.amount_residual_currency
+ for aml in invoice.move_id.line_id:
+ if aml.account_id.type in ('receivable','payable'):
+ if aml.currency_id and aml.currency_id.id == invoice.currency_id.id:
+ result[invoice.id] += aml.amount_residual_currency
+ else:
+ ctx['date'] = aml.date
+ result[invoice.id] += currency_obj.compute(cr, uid, aml.company_id.currency_id.id, invoice.currency_id.id, aml.amount_residual, context=ctx)
+
+ if aml.reconcile_partial_id.line_partial_ids:
+ #we check if the invoice is partially reconciled and if there are other invoices
+ #involved in this partial reconciliation (and we sum these invoices)
+ for line in aml.reconcile_partial_id.line_partial_ids:
+ if line.invoice:
+ nb_inv_in_partial_rec += 1
+ #store the max invoice id as for this invoice we will make a balance instead of a simple division
+ max_invoice_id = max(max_invoice_id, line.invoice.id)
+ if nb_inv_in_partial_rec:
+ #if there are several invoices in a partial reconciliation, we split the residual by the number
+ #of invoice to have a sum of residual amounts that matches the partner balance
+ new_value = currency_obj.round(cr, uid, invoice.currency_id, result[invoice.id] / nb_inv_in_partial_rec)
+ if invoice.id == max_invoice_id:
+ #if it's the last the invoice of the bunch of invoices partially reconciled together, we make a
+ #balance to avoid rounding errors
+ result[invoice.id] = result[invoice.id] - ((nb_inv_in_partial_rec - 1) * new_value)
+ else:
+ result[invoice.id] = new_value
+
#prevent the residual amount on the invoice to be less than 0
result[invoice.id] = max(result[invoice.id], 0.0)
return result
@@ -600,7 +630,7 @@ class account_invoice(osv.osv):
obj_l = account_obj.browse(cr, uid, inv_line[2]['account_id'])
if obj_l.company_id.id != company_id:
raise osv.except_osv(_('Configuration Error!'),
- _('Invoice line account\'s company and invoice\'s compnay does not match.'))
+ _('Invoice line account\'s company and invoice\'s company does not match.'))
else:
continue
if company_id and type:
@@ -756,7 +786,7 @@ class account_invoice(osv.osv):
else:
ref = self._convert_ref(cr, uid, inv.number)
if not inv.journal_id.analytic_journal_id:
- raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (inv.journal_id.name,))
+ raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal!") % (inv.journal_id.name,))
il['analytic_lines'] = [(0,0, {
'name': il['name'],
'date': inv['date_invoice'],
@@ -882,7 +912,7 @@ class account_invoice(osv.osv):
if not inv.journal_id.sequence_id:
raise osv.except_osv(_('Error!'), _('Please define sequence on the journal related to this invoice.'))
if not inv.invoice_line:
- raise osv.except_osv(_('No Invoice Lines !'), _('Please create some invoice lines.'))
+ raise osv.except_osv(_('No Invoice Lines!'), _('Please create some invoice lines.'))
if inv.move_id:
continue
@@ -903,7 +933,7 @@ class account_invoice(osv.osv):
group_check_total = self.pool.get('res.groups').browse(cr, uid, group_check_total_id, context=context)
if group_check_total and uid in [x.id for x in group_check_total.users]:
if (inv.type in ('in_invoice', 'in_refund') and abs(inv.check_total - inv.amount_total) >= (inv.currency_id.rounding/2.0)):
- raise osv.except_osv(_('Bad total !'), _('Please verify the price of the invoice !\nThe encoded total does not match the computed total.'))
+ raise osv.except_osv(_('Bad Total!'), _('Please verify the price of the invoice!\nThe encoded total does not match the computed total.'))
if inv.payment_term:
total_fixed = total_percent = 0
@@ -1445,7 +1475,7 @@ class account_invoice_line(osv.osv):
context = dict(context)
context.update({'company_id': company_id, 'force_company': company_id})
if not partner_id:
- raise osv.except_osv(_('No Partner Defined !'),_("You must first select a partner !") )
+ raise osv.except_osv(_('No Partner Defined!'),_("You must first select a partner!") )
if not product:
if type in ('in_invoice', 'in_refund'):
return {'value': {}, 'domain':{'product_uom':[]}}
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 96d6324ec7d..a692d8b97f7 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -197,7 +197,7 @@
<field name="name"/>
<field name="company_id" invisible="1"/>
<field name="account_id" groups="account.group_account_user"
- domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '!=', 'view')]"
+ domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '=', 'other')]"
on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
<field name="account_analytic_id" groups="analytic.group_analytic_accounting"
domain="[('type','!=','view'), ('company_id', '=', parent.company_id)]"/>
@@ -320,7 +320,7 @@
<group>
<field string="Customer" name="partner_id"
on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)"
- groups="base.group_user" context="{'search_default_customer':1, 'show_address': 1}"
+ context="{'search_default_customer':1, 'show_address': 1}"
options='{"always_reload": True}'
domain="[('customer', '=', True)]"/>
<field name="fiscal_position" widget="selection" />
@@ -353,7 +353,7 @@
<field name="name"/>
<field name="company_id" invisible="1"/>
<field name="account_id" groups="account.group_account_user"
- domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '!=', 'view')]"
+ domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '=', 'other')]"
on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
<field name="account_analytic_id" groups="analytic.group_analytic_accounting"
domain="[('type','!=','view'), ('company_id', '=', parent.company_id)]"/>
diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py
index d6c25364784..e604cc6d1a4 100644
--- a/addons/account/account_move_line.py
+++ b/addons/account/account_move_line.py
@@ -192,7 +192,7 @@ class account_move_line(osv.osv):
for obj_line in self.browse(cr, uid, ids, context=context):
if obj_line.analytic_account_id:
if not obj_line.journal_id.analytic_journal_id:
- raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal!") % (obj_line.journal_id.name, ))
+ raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal!") % (obj_line.journal_id.name, ))
vals_line = self._prepare_analytic_line(cr, uid, obj_line, context=context)
acc_ana_line_obj.create(cr, uid, vals_line)
return True
@@ -1101,7 +1101,7 @@ class account_move_line(osv.osv):
period = period_obj.browse(cr, uid, period_id, context=context)
for (state,) in result:
if state == 'done':
- raise osv.except_osv(_('Error !'), _('You can not add/modify entries in a closed period %s of journal %s.' % (period.name,journal.name)))
+ raise osv.except_osv(_('Error!'), _('You can not add/modify entries in a closed period %s of journal %s.' % (period.name,journal.name)))
if not result:
jour_period_obj.create(cr, uid, {
'name': (journal.code or journal.name)+':'+(period.name or ''),
@@ -1181,7 +1181,7 @@ class account_move_line(osv.osv):
move_id = move_obj.create(cr, uid, v, context)
vals['move_id'] = move_id
else:
- raise osv.except_osv(_('No piece number !'), _('Cannot create an automatic sequence for this piece.\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece.'))
+ raise osv.except_osv(_('No Piece Number!'), _('Cannot create an automatic sequence for this piece.\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece.'))
ok = not (journal.type_control_ids or journal.account_control_ids)
if ('account_id' in vals):
account = account_obj.browse(cr, uid, vals['account_id'], context=context)
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index d381559fc64..d4da0c2e8d1 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -907,9 +907,7 @@
<label for="type"/>
<div>
<field name="type"/>
- <field name="amount" class="oe_inline"
- attrs="{'invisible':[('type','in',('none', 'code', 'balance'))]}"/>
- <label string="%%" attrs="{'invisible':[('type','&lt;&gt;','percent')]}"/>
+ <field name="amount" attrs="{'invisible':[('type','in',('none', 'code', 'balance'))]}"/>
</div>
<field name="python_compute" attrs="{'invisible':[('type','!=','code')],'required':[('type','=','code')]}"/>
<field name="python_compute_inv" attrs="{'invisible':[('type','!=','code')],'required':[('type','=','code')]}"/>
diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po
index 8f547c224fc..da620808a85 100644
--- a/addons/account/i18n/ru.po
+++ b/addons/account/i18n/ru.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-05-29 13:04+0000\n"
+"PO-Revision-Date: 2013-06-07 12:52+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-05-30 05:45+0000\n"
-"X-Generator: Launchpad (build 16652)\n"
+"X-Launchpad-Export-Date: 2013-06-08 05:52+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@@ -59,7 +59,7 @@ msgid "Residual"
msgstr "Остаток"
#. module: account
-#: code:addons/account/account_bank_statement.py:368
+#: code:addons/account/account_bank_statement.py:369
#, python-format
msgid "Journal item \"%s\" is not valid."
msgstr "Недопустимый элемент журнала \"%s\""
@@ -75,9 +75,9 @@ msgid "Import from invoice or payment"
msgstr "Импорт из счета или платежного поручения"
#. module: account
-#: code:addons/account/account_move_line.py:1061
-#: code:addons/account/account_move_line.py:1146
-#: code:addons/account/account_move_line.py:1213
+#: code:addons/account/account_move_line.py:1058
+#: code:addons/account/account_move_line.py:1143
+#: code:addons/account/account_move_line.py:1210
#, python-format
msgid "Bad Account!"
msgstr "Плохой счет !"
@@ -133,15 +133,15 @@ msgstr ""
#: code:addons/account/account.py:641
#: code:addons/account/account.py:686
#: code:addons/account/account.py:781
-#: code:addons/account/account.py:1049
-#: code:addons/account/account_invoice.py:788
-#: code:addons/account/account_invoice.py:791
-#: code:addons/account/account_invoice.py:794
-#: code:addons/account/account_invoice.py:1514
+#: code:addons/account/account.py:1058
+#: code:addons/account/account_invoice.py:817
+#: code:addons/account/account_invoice.py:820
+#: code:addons/account/account_invoice.py:823
+#: code:addons/account/account_invoice.py:1542
#: code:addons/account/account_move_line.py:98
-#: code:addons/account/account_move_line.py:774
-#: code:addons/account/account_move_line.py:827
-#: code:addons/account/account_move_line.py:867
+#: code:addons/account/account_move_line.py:771
+#: code:addons/account/account_move_line.py:824
+#: code:addons/account/account_move_line.py:864
#: code:addons/account/wizard/account_fiscalyear_close.py:62
#: code:addons/account/wizard/account_invoice_state.py:44
#: code:addons/account/wizard/account_invoice_state.py:68
@@ -153,7 +153,7 @@ msgid "Warning!"
msgstr "Предупреждение!"
#. module: account
-#: code:addons/account/account.py:3159
+#: code:addons/account/account.py:3197
#, python-format
msgid "Miscellaneous Journal"
msgstr "Смешанный журнал"
@@ -441,6 +441,13 @@ msgid ""
"this box, you will be able to do invoicing & payments,\n"
" but not accounting (Journal Items, Chart of Accounts, ...)"
msgstr ""
+"Позволяет Вам управлять активами, принадлежавшими компании или человеку.\n"
+" Отслеживание амортизации активов, создание операций по счету "
+"для позиций амортизации.\n"
+" Устанавливает модуль account_asset. Если вы не установите "
+"этот флажок, вы сможете выставлять \n"
+" счета и делать платежи, но не будет бухгалтерского учета "
+"(Журналов, Плана счетов, ...)"
#. module: account
#: help:account.bank.statement.line,name:0
@@ -465,7 +472,7 @@ msgstr "Шаблона плана счетов"
#. module: account
#: selection:account.invoice.refund,filter_refund:0
msgid "Modify: create refund, reconcile and create a new draft invoice"
-msgstr ""
+msgstr "Изменить: создать возврат, сверить и создать новый счет"
#. module: account
#: help:account.config.settings,tax_calculation_rounding_method:0
@@ -676,7 +683,7 @@ msgid "Profit Account"
msgstr "Счет прибыли"
#. module: account
-#: code:addons/account/account_move_line.py:1159
+#: code:addons/account/account_move_line.py:1156
#, python-format
msgid "No period found or more than one period found for the given date."
msgstr "Для заданной даты период не найден или найдено более одного периода."
@@ -687,13 +694,13 @@ msgid "Report of the Sales by Account Type"
msgstr "Отчет о продажах по типу счета"
#. module: account
-#: code:addons/account/account.py:3163
+#: code:addons/account/account.py:3201
#, python-format
msgid "SAJ"
msgstr "КнП"
#. module: account
-#: code:addons/account/account.py:1553
+#: code:addons/account/account.py:1591
#, python-format
msgid "Cannot create move with currency different from .."
msgstr "Нельзя сделать движение по валюте отличной от.."
@@ -704,6 +711,8 @@ msgid ""
"Invoice_${(object.number or '').replace('/','_')}_${object.state == 'draft' "
"and 'draft' or ''}"
msgstr ""
+"Invoice_${(object.number or '').replace('/','_')}_${object.state == 'draft' "
+"and 'draft' or ''}"
#. module: account
#: view:account.period:0
@@ -731,6 +740,8 @@ msgstr "Период журнала"
msgid ""
"You cannot create more than one move per period on a centralized journal."
msgstr ""
+"Вы не можете создать более одного движения за период в централизованном "
+"журнале."
#. module: account
#: help:account.tax,account_analytic_paid_id:0
@@ -786,7 +797,7 @@ msgid "Are you sure you want to create entries?"
msgstr "Вы действительно хотите создать проводки?"
#. module: account
-#: code:addons/account/account_invoice.py:1330
+#: code:addons/account/account_invoice.py:1358
#, python-format
msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)."
msgstr "Счет частично оплачен: %s%s из %s%s (%s%s остаток)."
@@ -855,7 +866,7 @@ msgid "Type"
msgstr "Тип"
#. module: account
-#: code:addons/account/account_invoice.py:794
+#: code:addons/account/account_invoice.py:823
#, python-format
msgid ""
"Taxes are missing!\n"
@@ -880,7 +891,7 @@ msgid "Supplier Invoices And Refunds"
msgstr "Счета поставщиков и возмещения"
#. module: account
-#: code:addons/account/account_move_line.py:854
+#: code:addons/account/account_move_line.py:851
#, python-format
msgid "Entry is already reconciled."
msgstr "Проводка уже сверена."
@@ -911,6 +922,7 @@ msgid ""
"Print Report with the currency column if the currency differs from the "
"company currency."
msgstr ""
+"Печать отчета с колонкой валюты, если валюта отличается от валюты компании."
#. module: account
#: report:account.analytic.account.quantity_cost_ledger:0
@@ -950,9 +962,13 @@ msgid ""
" </p>\n"
" "
msgstr ""
+"<p>\n"
+" Элементы журнала не найдены.\n"
+" </p>\n"
+" "
#. module: account
-#: code:addons/account/account.py:1639
+#: code:addons/account/account.py:1677
#, python-format
msgid ""
"You cannot unreconcile journal items if they has been generated by the "
@@ -1036,10 +1052,10 @@ msgid "Liability"
msgstr "Обязательства"
#. module: account
-#: code:addons/account/account_invoice.py:867
+#: code:addons/account/account_invoice.py:896
#, python-format
msgid "Please define sequence on the journal related to this invoice."
-msgstr ""
+msgstr "Пожалуйста, определите нумерацию в журнале, связанном с этим счетом."
#. module: account
#: view:account.entries.report:0
@@ -1110,10 +1126,10 @@ msgid "Features"
msgstr "Возможности"
#. module: account
-#: code:addons/account/account.py:2308
-#: code:addons/account/account_bank_statement.py:423
+#: code:addons/account/account.py:2346
+#: code:addons/account/account_bank_statement.py:424
#: code:addons/account/account_invoice.py:74
-#: code:addons/account/account_invoice.py:744
+#: code:addons/account/account_invoice.py:772
#: code:addons/account/account_move_line.py:195
#, python-format
msgid "No Analytic Journal !"
@@ -1160,6 +1176,8 @@ msgid ""
"Check this box if you don't want any tax related to this tax code to appear "
"on invoices"
msgstr ""
+"Отметьте, если Вы не хотите, чтобы налог, связанный с этим кодом налога, "
+"появился в счетах"
#. module: account
#: field:report.account.receivable,name:0
@@ -1239,7 +1257,7 @@ msgstr ""
#. module: account
#: model:account.account.type,name:account.data_account_type_bank
#: selection:account.bank.accounts.wizard,account_type:0
-#: code:addons/account/account.py:3054
+#: code:addons/account/account.py:3092
#, python-format
msgid "Bank"
msgstr "Банковский"
@@ -1517,6 +1535,9 @@ msgid ""
"And after getting confirmation from the bank it will be in 'Confirmed' "
"status."
msgstr ""
+"Когда новый отчет создан - статус станет \"Черновик\".\n"
+"После получения подтверждения из банка, статус измениться на \" "
+"Подтверждено\"."
#. module: account
#: field:account.invoice.report,state:0
@@ -1554,12 +1575,14 @@ msgid "With balance is not equal to 0"
msgstr "С балансом не равным 0"
#. module: account
-#: code:addons/account/account.py:1445
+#: code:addons/account/account.py:1483
#, python-format
msgid ""
"There is no default debit account defined \n"
"on journal \"%s\"."
msgstr ""
+"Дебетовый счет по умолчанию не определен\n"
+"в журнале \"%s\"."
#. module: account
#: view:account.tax:0
@@ -1594,6 +1617,8 @@ msgid ""
"There is nothing to reconcile. All invoices and payments\n"
" have been reconciled, your partner balance is clean."
msgstr ""
+"Все сверено. Все счета и платежи\n"
+" были сверены, баланс партнера чист."
#. module: account
#: field:account.chart.template,code_digits:0
@@ -1662,7 +1687,7 @@ msgstr ""
#. module: account
#: field:account.config.settings,company_footer:0
msgid "Bank accounts footer preview"
-msgstr ""
+msgstr "Просмотр нижнего колонтитула банковских счетов"
#. module: account
#: selection:account.account,type:0
@@ -1778,8 +1803,10 @@ msgstr ""
#: view:account.invoice:0
#: view:account.invoice.report:0
#: field:account.move.line,invoice:0
+#: code:addons/account/account_invoice.py:1154
#: model:ir.model,name:account.model_account_invoice
#: model:res.request.link,name:account.req_link_invoice
+#, python-format
msgid "Invoice"
msgstr "Счет"
@@ -1854,7 +1881,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:857
+#: code:addons/account/account_move_line.py:854
#, python-format
msgid "Some entries are already reconciled."
msgstr "Некоторые записи уже сверены."
@@ -1875,6 +1902,8 @@ msgid ""
"Select a configuration package to setup automatically your\n"
" taxes and chart of accounts."
msgstr ""
+"Выберите конфигурацию установки для настройки автоматически ваших\n"
+" налогов и планов счетов."
#. module: account
#: view:account.analytic.account:0
@@ -1884,7 +1913,7 @@ msgstr "Ожидающие счета"
#. module: account
#: view:account.open.closed.fiscalyear:0
msgid "Cancel Fiscal Year Opening Entries"
-msgstr ""
+msgstr "Отмените записи открытия финансового года"
#. module: account
#: report:account.journal.period.print.sale.purchase:0
@@ -2008,36 +2037,36 @@ msgstr ""
#: code:addons/account/account.py:634
#: code:addons/account/account.py:636
#: code:addons/account/account.py:930
-#: code:addons/account/account.py:1062
-#: code:addons/account/account.py:1064
-#: code:addons/account/account.py:1103
-#: code:addons/account/account.py:1283
-#: code:addons/account/account.py:1297
-#: code:addons/account/account.py:1320
-#: code:addons/account/account.py:1327
-#: code:addons/account/account.py:1549
-#: code:addons/account/account.py:1553
-#: code:addons/account/account.py:1639
-#: code:addons/account/account.py:2320
-#: code:addons/account/account.py:2640
-#: code:addons/account/account.py:3427
+#: code:addons/account/account.py:1071
+#: code:addons/account/account.py:1073
+#: code:addons/account/account.py:1116
+#: code:addons/account/account.py:1319
+#: code:addons/account/account.py:1333
+#: code:addons/account/account.py:1356
+#: code:addons/account/account.py:1363
+#: code:addons/account/account.py:1587
+#: code:addons/account/account.py:1591
+#: code:addons/account/account.py:1677
+#: code:addons/account/account.py:2358
+#: code:addons/account/account.py:2678
+#: code:addons/account/account.py:3465
#: code:addons/account/account_analytic_line.py:89
#: code:addons/account/account_analytic_line.py:98
-#: code:addons/account/account_bank_statement.py:367
-#: code:addons/account/account_bank_statement.py:380
-#: code:addons/account/account_bank_statement.py:418
+#: code:addons/account/account_bank_statement.py:368
+#: code:addons/account/account_bank_statement.py:381
+#: code:addons/account/account_bank_statement.py:419
#: code:addons/account/account_cash_statement.py:256
#: code:addons/account/account_cash_statement.py:300
-#: code:addons/account/account_invoice.py:867
-#: code:addons/account/account_invoice.py:901
-#: code:addons/account/account_invoice.py:1091
-#: code:addons/account/account_move_line.py:578
-#: code:addons/account/account_move_line.py:831
+#: code:addons/account/account_invoice.py:896
+#: code:addons/account/account_invoice.py:930
+#: code:addons/account/account_invoice.py:1121
+#: code:addons/account/account_move_line.py:579
+#: code:addons/account/account_move_line.py:828
+#: code:addons/account/account_move_line.py:851
#: code:addons/account/account_move_line.py:854
-#: code:addons/account/account_move_line.py:857
-#: code:addons/account/account_move_line.py:1122
-#: code:addons/account/account_move_line.py:1124
-#: code:addons/account/account_move_line.py:1159
+#: code:addons/account/account_move_line.py:1119
+#: code:addons/account/account_move_line.py:1121
+#: code:addons/account/account_move_line.py:1156
#: code:addons/account/report/common_report_header.py:92
#: code:addons/account/wizard/account_change_currency.py:38
#: code:addons/account/wizard/account_change_currency.py:59
@@ -2051,8 +2080,8 @@ msgstr ""
#: code:addons/account/wizard/account_report_common.py:158
#: code:addons/account/wizard/account_report_common.py:164
#: code:addons/account/wizard/account_use_model.py:44
-#: code:addons/account/wizard/pos_box.py:32
-#: code:addons/account/wizard/pos_box.py:36
+#: code:addons/account/wizard/pos_box.py:31
+#: code:addons/account/wizard/pos_box.py:35
#, python-format
msgid "Error!"
msgstr "Ошибка!"
@@ -2102,12 +2131,14 @@ msgid "period close"
msgstr "закрытие периода"
#. module: account
-#: code:addons/account/account.py:1049
+#: code:addons/account/account.py:1058
#, python-format
msgid ""
"This journal already contains items for this period, therefore you cannot "
"modify its company field."
msgstr ""
+"Этот журнал уже содержит элементы за этот период, по этому вы не можете "
+"изменить поле компании ."
#. module: account
#: model:ir.actions.act_window,name:account.action_project_account_analytic_line_form
@@ -2174,7 +2205,7 @@ msgid "Analytic account"
msgstr "Счет аналитики"
#. module: account
-#: code:addons/account/account_bank_statement.py:405
+#: code:addons/account/account_bank_statement.py:406
#, python-format
msgid "Please verify that an account is defined in the journal."
msgstr "Пожалуйста, проверьте, что счет определен в журнале."
@@ -2207,7 +2238,7 @@ msgstr "Категория ТМЦ"
msgid ""
"You cannot change the type of account to '%s' type as it contains journal "
"items!"
-msgstr ""
+msgstr "Нельзя изменить тип счета на '%s', так как он содержит записи!"
#. module: account
#: model:ir.model,name:account.model_account_aged_trial_balance
@@ -2322,6 +2353,7 @@ msgid ""
"If you want the journal should be control at opening/closing, check this "
"option"
msgstr ""
+"Если вы хотите контролировать открытие/закрытие журнала, отметьте эту опцию"
#. module: account
#: view:account.bank.statement:0
@@ -2413,7 +2445,7 @@ msgstr "У вас нет прав открыть журнал %s !"
#. module: account
#: model:res.groups,name:account.group_supplier_inv_check_total
msgid "Check Total on supplier invoices"
-msgstr ""
+msgstr "Проверить итог по счетам поставщиков"
#. module: account
#: selection:account.invoice,state:0
@@ -2487,7 +2519,7 @@ msgstr "Cчёт доходов и расходов"
#. module: account
#: help:account.config.settings,default_sale_tax:0
msgid "This sale tax will be assigned by default on new products."
-msgstr ""
+msgstr "Эта налог с продажи будет по умолчанию присвоен новой продукции."
#. module: account
#: report:account.general.ledger_landscape:0
@@ -2577,6 +2609,8 @@ msgid ""
"You cannot change the type of account from 'Closed' to any other type as it "
"contains journal items!"
msgstr ""
+"Вы не можете изменить тип счета «Закрыто» на любой другой тип, поскольку он "
+"содержит элементы журнала !"
#. module: account
#: field:account.invoice.report,account_line_id:0
@@ -2589,7 +2623,7 @@ msgid "Create an Account Based on this Template"
msgstr "Создать счет на основе этого шаблона"
#. module: account
-#: code:addons/account/account_invoice.py:901
+#: code:addons/account/account_invoice.py:930
#, python-format
msgid ""
"Cannot create the invoice.\n"
@@ -2610,7 +2644,7 @@ msgid "Main Sequence"
msgstr "Основная Последовательность"
#. module: account
-#: code:addons/account/account_bank_statement.py:477
+#: code:addons/account/account_bank_statement.py:478
#, python-format
msgid ""
"In order to delete a bank statement, you must first cancel it to delete "
@@ -2636,7 +2670,7 @@ msgid "Fiscal Positions"
msgstr "Системы налогообложения"
#. module: account
-#: code:addons/account/account_move_line.py:578
+#: code:addons/account/account_move_line.py:579
#, python-format
msgid "You cannot create journal items on a closed account %s %s."
msgstr "Нельзя создать элемент журнала по закрытому счету %s %s."
@@ -2744,7 +2778,7 @@ msgid "Account Model Entries"
msgstr "Проводки модели счета"
#. module: account
-#: code:addons/account/account.py:3164
+#: code:addons/account/account.py:3202
#, python-format
msgid "EXJ"
msgstr "ЖР"
@@ -2860,21 +2894,20 @@ msgid "Accounts"
msgstr "Счета"
#. module: account
-#: code:addons/account/account.py:3503
-#: code:addons/account/account_bank_statement.py:404
-#: code:addons/account/account_invoice.py:378
-#: code:addons/account/account_invoice.py:484
-#: code:addons/account/account_invoice.py:582
-#: code:addons/account/account_invoice.py:597
-#: code:addons/account/account_invoice.py:605
-#: code:addons/account/account_invoice.py:627
-#: code:addons/account/account_move_line.py:535
+#: code:addons/account/account.py:3541
+#: code:addons/account/account_bank_statement.py:405
+#: code:addons/account/account_invoice.py:504
+#: code:addons/account/account_invoice.py:606
+#: code:addons/account/account_invoice.py:621
+#: code:addons/account/account_invoice.py:629
+#: code:addons/account/account_invoice.py:654
+#: code:addons/account/account_move_line.py:536
#, python-format
msgid "Configuration Error!"
msgstr "Ошибка конфигурации!"
#. module: account
-#: code:addons/account/account_bank_statement.py:433
+#: code:addons/account/account_bank_statement.py:434
#, python-format
msgid "Statement %s confirmed, journal items were created."
msgstr "Распоряжение %s подтверждено, элементы журнала созданы."
@@ -3067,7 +3100,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account.py:1062
+#: code:addons/account/account.py:1071
#, python-format
msgid "You should choose the periods that belong to the same company."
msgstr "Вы должны выбрать периоды относящиеся к одной компании."
@@ -3080,7 +3113,7 @@ msgid "Sales by Account"
msgstr "Продажи по бух. счетам"
#. module: account
-#: code:addons/account/account.py:1411
+#: code:addons/account/account.py:1449
#, python-format
msgid "You cannot delete a posted journal entry \"%s\"."
msgstr "Нельзя удалить проведенную проводку журнала \"%s\"."
@@ -3096,8 +3129,8 @@ msgid "Sale journal"
msgstr "Журнал продаж"
#. module: account
-#: code:addons/account/account.py:2308
-#: code:addons/account/account_invoice.py:744
+#: code:addons/account/account.py:2346
+#: code:addons/account/account_invoice.py:772
#: code:addons/account/account_move_line.py:195
#, python-format
msgid "You have to define an analytic journal on the '%s' journal!"
@@ -3182,12 +3215,12 @@ msgstr ""
#: view:account.unreconcile:0
#: view:account.unreconcile.reconcile:0
msgid "Unreconcile Transactions"
-msgstr ""
+msgstr "Отменить сверку"
#. module: account
#: field:wizard.multi.charts.accounts,only_one_chart_template:0
msgid "Only One Chart Template Available"
-msgstr ""
+msgstr "доступен только один шаблон плана счетов"
#. module: account
#: view:account.chart.template:0
@@ -3266,7 +3299,7 @@ msgid "Fiscal Position"
msgstr "Система налогообложения"
#. module: account
-#: code:addons/account/account_invoice.py:791
+#: code:addons/account/account_invoice.py:820
#, python-format
msgid ""
"Tax base different!\n"
@@ -3299,6 +3332,7 @@ msgstr "Оборотно-сальдовая ведомость"
#, python-format
msgid "Unable to adapt the initial balance (negative value)."
msgstr ""
+"Не в состоянии адаптироваться начальный баланс (отрицательное значение)."
#. module: account
#: selection:account.invoice,type:0
@@ -3366,7 +3400,7 @@ msgstr ""
"дату. Входящие сделки всегда используют ставку на сегодняшний день."
#. module: account
-#: code:addons/account/account.py:2640
+#: code:addons/account/account.py:2678
#, python-format
msgid "There is no parent code for the template account."
msgstr ""
@@ -3429,7 +3463,7 @@ msgid "View"
msgstr "Вид"
#. module: account
-#: code:addons/account/account.py:3422
+#: code:addons/account/account.py:3460
#: code:addons/account/account_bank.py:95
#, python-format
msgid "BNK"
@@ -3558,7 +3592,7 @@ msgstr ""
#. module: account
#: view:account.period:0
msgid "Account Period"
-msgstr ""
+msgstr "Период счета"
#. module: account
#: help:account.account,currency_id:0
@@ -3700,7 +3734,7 @@ msgstr ""
"иметь названия как и у самого документа"
#. module: account
-#: code:addons/account/account_invoice.py:984
+#: code:addons/account/account_invoice.py:1013
#, python-format
msgid ""
"You cannot create an invoice on a centralized journal. Uncheck the "
@@ -3715,7 +3749,7 @@ msgid "Starting Balance"
msgstr "Начальный баланс"
#. module: account
-#: code:addons/account/account_invoice.py:1434
+#: code:addons/account/account_invoice.py:1462
#, python-format
msgid "No Partner Defined !"
msgstr "Партнер не определен!"
@@ -3768,7 +3802,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:535
+#: code:addons/account/account_move_line.py:536
#, python-format
msgid ""
"Cannot find any account journal of %s type for this company.\n"
@@ -3934,7 +3968,7 @@ msgid "Period Length (days)"
msgstr "Длина периода (в днях)"
#. module: account
-#: code:addons/account/account.py:1327
+#: code:addons/account/account.py:1363
#, python-format
msgid ""
"You cannot modify a posted entry of this journal.\n"
@@ -3964,6 +3998,8 @@ msgid ""
"There is no fiscal year defined for this date.\n"
"Please create one from the configuration of the accounting menu."
msgstr ""
+"Нет финансового года, для этой даты.\n"
+"Пожалуйста, создайте его в меню настройки учета."
#. module: account
#: view:account.addtmpl.wizard:0
@@ -4098,7 +4134,7 @@ msgid "Chart of Accounts Template"
msgstr "Шаблон плана счетов"
#. module: account
-#: code:addons/account/account.py:2320
+#: code:addons/account/account.py:2358
#, python-format
msgid ""
"Maturity date of entry line generated by model line '%s' of model '%s' is "
@@ -4164,7 +4200,7 @@ msgstr ""
#. module: account
#: field:account.config.settings,group_check_supplier_invoice_total:0
msgid "Check the total of supplier invoices"
-msgstr ""
+msgstr "Проверка итога по счетам поставщиков"
#. module: account
#: view:account.tax:0
@@ -4178,6 +4214,8 @@ msgid ""
"When monthly periods are created. The status is 'Draft'. At the end of "
"monthly period it is in 'Done' status."
msgstr ""
+"При создании месячных периодов. Статус - \"Черновик\". В конце месячного "
+"периода статус - \"Сделано\"."
#. module: account
#: view:account.invoice.report:0
@@ -4207,7 +4245,7 @@ msgstr "Счета к оплате"
#: code:addons/account/wizard/account_fiscalyear_close.py:88
#, python-format
msgid "The periods to generate opening entries cannot be found."
-msgstr ""
+msgstr "Не найдены периоды для создания записей открытия."
#. module: account
#: model:process.node,name:account.process_node_supplierpaymentorder0
@@ -4250,7 +4288,7 @@ msgstr ""
#. module: account
#: field:account.config.settings,complete_tax_set:0
msgid "Complete set of taxes"
-msgstr ""
+msgstr "Полный набор налогов"
#. module: account
#: field:account.account,name:0
@@ -4265,7 +4303,7 @@ msgid "Name"
msgstr "Название"
#. module: account
-#: code:addons/account/installer.py:94
+#: code:addons/account/installer.py:115
#, python-format
msgid "No unconfigured company !"
msgstr "Нет ненастроенной компании!"
@@ -4273,7 +4311,7 @@ msgstr "Нет ненастроенной компании!"
#. module: account
#: field:res.company,expects_chart_of_accounts:0
msgid "Expects a Chart of Accounts"
-msgstr ""
+msgstr "Ожидается план счетов"
#. module: account
#: field:account.move.line,date:0
@@ -4336,10 +4374,12 @@ msgid ""
"Check this box if you don't want any tax related to this tax Code to appear "
"on invoices."
msgstr ""
+"Отметьте, если Вы не хотите, чтобы налог, связанный с этим кодом налога, "
+"появился в счетах"
#. module: account
-#: code:addons/account/account_move_line.py:1061
-#: code:addons/account/account_move_line.py:1146
+#: code:addons/account/account_move_line.py:1058
+#: code:addons/account/account_move_line.py:1143
#, python-format
msgid "You cannot use an inactive account."
msgstr "Вы не можете использовать неактивный счет ."
@@ -4369,7 +4409,7 @@ msgid "Consolidated Children"
msgstr "Субсчета"
#. module: account
-#: code:addons/account/account_invoice.py:550
+#: code:addons/account/account_invoice.py:570
#: code:addons/account/wizard/account_invoice_refund.py:146
#, python-format
msgid "Insufficient Data!"
@@ -4581,7 +4621,7 @@ msgid "Cancel the Selected Invoices"
msgstr "Отменить выбранные счета"
#. module: account
-#: code:addons/account/account_bank_statement.py:423
+#: code:addons/account/account_bank_statement.py:424
#, python-format
msgid "You have to assign an analytic journal on the '%s' journal!"
msgstr "Вы должны назначить журнал аналитики для журнал '%s'!"
@@ -4650,8 +4690,8 @@ msgid "Supplier invoice sequence"
msgstr "Нумерация счетов поставщиков"
#. module: account
-#: code:addons/account/account_invoice.py:583
-#: code:addons/account/account_invoice.py:598
+#: code:addons/account/account_invoice.py:607
+#: code:addons/account/account_invoice.py:622
#, python-format
msgid ""
"Cannot find a chart of account, you should create one from Settings\\"
@@ -4714,7 +4754,7 @@ msgid "Account Base Code"
msgstr "Основной код счёта"
#. module: account
-#: code:addons/account/account_move_line.py:867
+#: code:addons/account/account_move_line.py:864
#, python-format
msgid ""
"You have to provide an account for the write off/exchange difference entry."
@@ -4781,7 +4821,7 @@ msgid "Statement from invoice or payment"
msgstr "Документ из счета или платежа"
#. module: account
-#: code:addons/account/installer.py:94
+#: code:addons/account/installer.py:115
#, python-format
msgid ""
"There is currently no company without chart of account. The wizard will "
@@ -4835,7 +4875,7 @@ msgid "Bank statements are entered in the system."
msgstr "Банковские выписки введены в систему."
#. module: account
-#: code:addons/account/wizard/account_reconcile.py:121
+#: code:addons/account/wizard/account_reconcile.py:122
#, python-format
msgid "Reconcile Writeoff"
msgstr "Сверить списание"
@@ -4931,7 +4971,7 @@ msgstr ""
"Нельзя создать счет, который имеет родительский счет другой компании."
#. module: account
-#: code:addons/account/account_invoice.py:627
+#: code:addons/account/account_invoice.py:655
#, python-format
msgid ""
"Cannot find any account journal of %s type for this company.\n"
@@ -4946,7 +4986,7 @@ msgid "Based On"
msgstr "Основан на"
#. module: account
-#: code:addons/account/account.py:3166
+#: code:addons/account/account.py:3204
#, python-format
msgid "ECNJ"
msgstr "ECNJ"
@@ -5012,7 +5052,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account.py:3356
+#: code:addons/account/account.py:3394
#, python-format
msgid "Purchase Tax %.2f%%"
msgstr "Налог на покупку %.2f%%"
@@ -5086,7 +5126,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account.py:3167
+#: code:addons/account/account.py:3205
#, python-format
msgid "MISC"
msgstr "РАЗНОЕ"
@@ -5255,7 +5295,7 @@ msgid "Tax Application"
msgstr "Применение налога"
#. module: account
-#: code:addons/account/account_invoice.py:890
+#: code:addons/account/account_invoice.py:919
#, python-format
msgid ""
"Please verify the price of the invoice !\n"
@@ -5429,7 +5469,7 @@ msgid "Target Moves"
msgstr "Цель операции"
#. module: account
-#: code:addons/account/account.py:1416
+#: code:addons/account/account.py:1454
#, python-format
msgid ""
"Move cannot be deleted if linked to an invoice. (Invoice: %s - Move ID:%s)"
@@ -5510,7 +5550,7 @@ msgid "Internal Name"
msgstr "Внутреннее название"
#. module: account
-#: code:addons/account/account_move_line.py:1188
+#: code:addons/account/account_move_line.py:1185
#, python-format
msgid ""
"Cannot create an automatic sequence for this piece.\n"
@@ -5582,7 +5622,7 @@ msgid "Compute Code (if type=code)"
msgstr "Вычислить код (если тип=код)"
#. module: account
-#: code:addons/account/account_invoice.py:485
+#: code:addons/account/account_invoice.py:505
#, python-format
msgid ""
"Cannot find a chart of accounts for this company, you should create one."
@@ -5715,7 +5755,7 @@ msgid "Recompute taxes and total"
msgstr "Перерасчет налогов и итога"
#. module: account
-#: code:addons/account/account.py:1103
+#: code:addons/account/account.py:1116
#, python-format
msgid "You cannot modify/delete a journal with entries for this period."
msgstr "Нельзя изменить/удалить журнал с проводками за этот период."
@@ -5745,7 +5785,7 @@ msgid "Amount Computation"
msgstr "Расчет суммы"
#. module: account
-#: code:addons/account/account_move_line.py:1108
+#: code:addons/account/account_move_line.py:1105
#, python-format
msgid "You can not add/modify entries in a closed period %s of journal %s."
msgstr "Нельзя добавлять/изменять записи в закрытый период %s журнала %s."
@@ -6042,7 +6082,7 @@ msgid "Fixed Amount"
msgstr "Фиксированная величина"
#. module: account
-#: code:addons/account/account_move_line.py:1059
+#: code:addons/account/account_move_line.py:1056
#, python-format
msgid "You cannot change the tax, you should remove and recreate lines."
msgstr ""
@@ -6093,14 +6133,14 @@ msgid "Child Accounts"
msgstr "Субсчета"
#. module: account
-#: code:addons/account/account_move_line.py:1120
+#: code:addons/account/account_move_line.py:1117
#, python-format
msgid "Move name (id): %s (%s)"
msgstr ""
#. module: account
#: view:account.move.line.reconcile:0
-#: code:addons/account/account_move_line.py:882
+#: code:addons/account/account_move_line.py:879
#, python-format
msgid "Write-Off"
msgstr "Списание"
@@ -6126,7 +6166,7 @@ msgstr "Доход"
#: view:account.config.settings:0
#: view:account.invoice:0
#: view:account.invoice.report:0
-#: code:addons/account/account_invoice.py:355
+#: code:addons/account/account_invoice.py:387
#, python-format
msgid "Supplier"
msgstr "Поставщик"
@@ -6265,7 +6305,7 @@ msgid "Filter by"
msgstr "Фильтровать по"
#. module: account
-#: code:addons/account/account.py:2296
+#: code:addons/account/account.py:2334
#, python-format
msgid "You have a wrong expression \"%(...)s\" in your model !"
msgstr ""
@@ -6313,7 +6353,7 @@ msgid "Number of Days"
msgstr "Кол-во дней"
#. module: account
-#: code:addons/account/account.py:1321
+#: code:addons/account/account.py:1357
#, python-format
msgid ""
"You cannot validate this journal entry because account \"%s\" does not "
@@ -6461,7 +6501,7 @@ msgid "Models"
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:1091
+#: code:addons/account/account_invoice.py:1121
#, python-format
msgid ""
"You cannot cancel an invoice which is partially paid. You need to "
@@ -6633,7 +6673,7 @@ msgid "You cannot create journal items on closed account."
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:606
+#: code:addons/account/account_invoice.py:630
#, python-format
msgid "Invoice line account's company and invoice's compnay does not match."
msgstr ""
@@ -6654,7 +6694,7 @@ msgid "The related account currency if not equal to the company one."
msgstr "Валюта связанного счета, если не одинакова с валютой компании."
#. module: account
-#: code:addons/account/installer.py:48
+#: code:addons/account/installer.py:69
#, python-format
msgid "Custom"
msgstr ""
@@ -6681,7 +6721,7 @@ msgid "Internal Transfers Account"
msgstr ""
#. module: account
-#: code:addons/account/wizard/pos_box.py:33
+#: code:addons/account/wizard/pos_box.py:32
#, python-format
msgid "Please check that the field 'Journal' is set on the Bank Statement"
msgstr ""
@@ -6707,7 +6747,7 @@ msgid "Power"
msgstr "Мощность"
#. module: account
-#: code:addons/account/account.py:3427
+#: code:addons/account/account.py:3465
#, python-format
msgid "Cannot generate an unused journal code."
msgstr ""
@@ -6781,12 +6821,12 @@ msgstr ""
"таком случае важна последовательность вычислений."
#. module: account
-#: code:addons/account/account.py:1410
-#: code:addons/account/account.py:1415
-#: code:addons/account/account.py:1444
-#: code:addons/account/account.py:1451
-#: code:addons/account/account_invoice.py:983
-#: code:addons/account/account_move_line.py:1008
+#: code:addons/account/account.py:1448
+#: code:addons/account/account.py:1453
+#: code:addons/account/account.py:1482
+#: code:addons/account/account.py:1489
+#: code:addons/account/account_invoice.py:1012
+#: code:addons/account/account_move_line.py:1005
#: code:addons/account/wizard/account_automatic_reconcile.py:148
#: code:addons/account/wizard/account_fiscalyear_close.py:88
#: code:addons/account/wizard/account_fiscalyear_close.py:99
@@ -6872,7 +6912,9 @@ msgstr ""
#: report:account.invoice:0
#: selection:account.invoice,type:0
#: selection:account.invoice.report,type:0
+#: code:addons/account/account_invoice.py:1157
#: selection:report.invoice.created,type:0
+#, python-format
msgid "Supplier Refund"
msgstr "Возврат средств от поставщика"
@@ -7017,7 +7059,7 @@ msgstr "Статистика аналитических проводок"
#. module: account
#: code:addons/account/account_analytic_line.py:142
-#: code:addons/account/account_move_line.py:958
+#: code:addons/account/account_move_line.py:955
#, python-format
msgid "Entries: "
msgstr "Проводки: "
@@ -7130,7 +7172,7 @@ msgstr ""
#. module: account
#: code:addons/account/account.py:1024
-#: code:addons/account/account_move_line.py:1108
+#: code:addons/account/account_move_line.py:1105
#, python-format
msgid "Error !"
msgstr "Error !"
@@ -7357,7 +7399,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account.py:2266
+#: code:addons/account/account.py:2304
#, python-format
msgid ""
"You can specify year, month and date in the name of the model using the "
@@ -7436,7 +7478,7 @@ msgid "Done"
msgstr "Сделано"
#. module: account
-#: code:addons/account/account.py:1283
+#: code:addons/account/account.py:1319
#, python-format
msgid ""
"You cannot validate a non-balanced entry.\n"
@@ -7727,7 +7769,7 @@ msgstr "Отчетность"
#. module: account
#. openerp-web
-#: code:addons/account/account_move_line.py:783
+#: code:addons/account/account_move_line.py:780
#: code:addons/account/static/src/js/account_move_reconciliation.js:90
#, python-format
msgid "Warning"
@@ -7792,7 +7834,7 @@ msgid "Use model"
msgstr "Использовать модель"
#. module: account
-#: code:addons/account/account.py:1452
+#: code:addons/account/account.py:1490
#, python-format
msgid ""
"There is no default credit account defined \n"
@@ -7843,7 +7885,7 @@ msgid "Root/View"
msgstr ""
#. module: account
-#: code:addons/account/account.py:3168
+#: code:addons/account/account.py:3206
#, python-format
msgid "OPEJ"
msgstr ""
@@ -7912,7 +7954,7 @@ msgid "Maturity Date"
msgstr ""
#. module: account
-#: code:addons/account/account.py:3155
+#: code:addons/account/account.py:3193
#, python-format
msgid "Sales Journal"
msgstr "Журнал продаж"
@@ -7923,7 +7965,7 @@ msgid "Invoice Tax"
msgstr "Налог по счету"
#. module: account
-#: code:addons/account/account_move_line.py:1188
+#: code:addons/account/account_move_line.py:1185
#, python-format
msgid "No piece number !"
msgstr "Нет номера части !"
@@ -7962,7 +8004,7 @@ msgid "Sales Properties"
msgstr "Свойства продаж"
#. module: account
-#: code:addons/account/account.py:3503
+#: code:addons/account/account.py:3541
#, python-format
msgid ""
"You have to set a code for the bank account defined on the selected chart of "
@@ -7987,7 +8029,7 @@ msgstr "По"
#. module: account
#: selection:account.move.line,centralisation:0
-#: code:addons/account/account.py:1503
+#: code:addons/account/account.py:1541
#, python-format
msgid "Currency Adjustment"
msgstr ""
@@ -8019,7 +8061,7 @@ msgid "May"
msgstr "Май"
#. module: account
-#: code:addons/account/account_invoice.py:788
+#: code:addons/account/account_invoice.py:817
#, python-format
msgid "Global taxes defined, but they are not in invoice lines !"
msgstr ""
@@ -8060,7 +8102,7 @@ msgstr "Провести записи журнала"
#: view:account.config.settings:0
#: view:account.invoice:0
#: view:account.invoice.report:0
-#: code:addons/account/account_invoice.py:353
+#: code:addons/account/account_invoice.py:385
#, python-format
msgid "Customer"
msgstr "Заказчик"
@@ -8076,7 +8118,7 @@ msgstr ""
#: selection:account.bank.accounts.wizard,account_type:0
#: selection:account.entries.report,type:0
#: selection:account.journal,type:0
-#: code:addons/account/account.py:3054
+#: code:addons/account/account.py:3092
#, python-format
msgid "Cash"
msgstr "Наличные"
@@ -8247,6 +8289,7 @@ msgstr "Фиксированный"
#: code:addons/account/account.py:653
#: code:addons/account/account.py:656
#: code:addons/account/account.py:668
+#: code:addons/account/account.py:1031
#, python-format
msgid "Warning !"
msgstr "Warning !"
@@ -8314,7 +8357,7 @@ msgid "Select a currency to apply on the invoice"
msgstr "Выбрать валюту применяемую в счете"
#. module: account
-#: code:addons/account/account_invoice.py:869
+#: code:addons/account/account_invoice.py:898
#, python-format
msgid "No Invoice Lines !"
msgstr "Нет позиций в счете !"
@@ -8338,7 +8381,7 @@ msgid "Tax Use In"
msgstr "Использовать налог в"
#. module: account
-#: code:addons/account/account_bank_statement.py:381
+#: code:addons/account/account_bank_statement.py:382
#, python-format
msgid ""
"The statement balance is incorrect !\n"
@@ -8346,7 +8389,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_bank_statement.py:419
+#: code:addons/account/account_bank_statement.py:420
#, python-format
msgid "The account entries lines are not in valid state."
msgstr "Проводки в ненадлежащем состоянии."
@@ -8390,7 +8433,7 @@ msgid "Associated Partner"
msgstr "Связанный контрагент"
#. module: account
-#: code:addons/account/account_invoice.py:1434
+#: code:addons/account/account_invoice.py:1462
#, python-format
msgid "You must first select a partner !"
msgstr "Сначала вы должны выбрать партнера !"
@@ -8471,13 +8514,13 @@ msgstr ""
"расчетом других налогов."
#. module: account
-#: code:addons/account/account.py:3158
+#: code:addons/account/account.py:3196
#, python-format
msgid "Purchase Refund Journal"
msgstr "Журнал возврата покупок"
#. module: account
-#: code:addons/account/account.py:1297
+#: code:addons/account/account.py:1333
#, python-format
msgid "Please define a sequence on the journal."
msgstr ""
@@ -8722,7 +8765,7 @@ msgid "${object.company_id.name} Invoice (Ref ${object.number or 'n/a'})"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1213
+#: code:addons/account/account_move_line.py:1210
#, python-format
msgid ""
"You cannot use this general account in this journal, check the tab 'Entry "
@@ -8823,7 +8866,7 @@ msgid "The partner account used for this invoice."
msgstr "Бух. счет партнера будет использоваться для этого счета."
#. module: account
-#: code:addons/account/account.py:3353
+#: code:addons/account/account.py:3391
#, python-format
msgid "Tax %.2f%%"
msgstr ""
@@ -8841,7 +8884,7 @@ msgid "Payment Term Line"
msgstr "Позиция условий оплаты"
#. module: account
-#: code:addons/account/account.py:3156
+#: code:addons/account/account.py:3194
#, python-format
msgid "Purchase Journal"
msgstr "Журнал покупок"
@@ -9011,7 +9054,7 @@ msgid "Journal Name"
msgstr "Название журнала"
#. module: account
-#: code:addons/account/account_move_line.py:832
+#: code:addons/account/account_move_line.py:829
#, python-format
msgid "Entry \"%s\" is not valid !"
msgstr "Проводка \"%s\" не верна !"
@@ -9060,7 +9103,7 @@ msgstr ""
"Сумма выражается в дополнительный валюте, если эта проводка мульти-валютная."
#. module: account
-#: code:addons/account/account_move_line.py:1009
+#: code:addons/account/account_move_line.py:1006
#, python-format
msgid "The account move (%s) for centralisation has been confirmed."
msgstr ""
@@ -9122,7 +9165,7 @@ msgid "Reconciled entries"
msgstr "Сверенные проводки"
#. module: account
-#: code:addons/account/account.py:2296
+#: code:addons/account/account.py:2334
#, python-format
msgid "Wrong model !"
msgstr ""
@@ -9144,7 +9187,7 @@ msgid "Print Account Partner Balance"
msgstr "Печать баланс счета партнера"
#. module: account
-#: code:addons/account/account_move_line.py:1124
+#: code:addons/account/account_move_line.py:1121
#, python-format
msgid ""
"You cannot do this modification on a reconciled entry. You can just change "
@@ -9178,7 +9221,7 @@ msgstr "неизвестен"
#. module: account
#: field:account.fiscalyear.close,journal_id:0
-#: code:addons/account/account.py:3160
+#: code:addons/account/account.py:3198
#, python-format
msgid "Opening Entries Journal"
msgstr "Журнал проводок открытия"
@@ -9275,7 +9318,7 @@ msgid "Unit of Currency"
msgstr ""
#. module: account
-#: code:addons/account/account.py:3157
+#: code:addons/account/account.py:3195
#, python-format
msgid "Sales Refund Journal"
msgstr "Журнал возврата продаж"
@@ -9341,13 +9384,13 @@ msgid "Purchase Tax(%)"
msgstr "Налог на покупку(%)"
#. module: account
-#: code:addons/account/account_invoice.py:869
+#: code:addons/account/account_invoice.py:898
#, python-format
msgid "Please create some invoice lines."
msgstr "Пожалуйста, создайте позиции счета"
#. module: account
-#: code:addons/account/wizard/pos_box.py:37
+#: code:addons/account/wizard/pos_box.py:36
#, python-format
msgid ""
"Please check that the field 'Internal Transfers Account' is set on the "
@@ -9360,7 +9403,7 @@ msgid "Display Detail"
msgstr ""
#. module: account
-#: code:addons/account/account.py:3165
+#: code:addons/account/account.py:3203
#, python-format
msgid "SCNJ"
msgstr ""
@@ -9519,8 +9562,8 @@ msgid "Receivable Account"
msgstr "Счет к получению"
#. module: account
-#: code:addons/account/account_move_line.py:774
-#: code:addons/account/account_move_line.py:827
+#: code:addons/account/account_move_line.py:771
+#: code:addons/account/account_move_line.py:824
#, python-format
msgid "To reconcile the entries company should be the same for all entries."
msgstr ""
@@ -9621,7 +9664,7 @@ msgid "Move"
msgstr "Операция"
#. module: account
-#: code:addons/account/account_bank_statement.py:477
+#: code:addons/account/account_bank_statement.py:478
#: code:addons/account/wizard/account_period_close.py:51
#, python-format
msgid "Invalid Action!"
@@ -9717,7 +9760,7 @@ msgid "Balance :"
msgstr "Баланс :"
#. module: account
-#: code:addons/account/account.py:1549
+#: code:addons/account/account.py:1587
#, python-format
msgid "Cannot create moves for different companies."
msgstr ""
@@ -9808,7 +9851,7 @@ msgid "Immediate Payment"
msgstr ""
#. module: account
-#: code:addons/account/account.py:1464
+#: code:addons/account/account.py:1502
#, python-format
msgid " Centralisation"
msgstr ""
@@ -9897,7 +9940,7 @@ msgid "Unreconciled"
msgstr "Не сверенные"
#. module: account
-#: code:addons/account/account_invoice.py:890
+#: code:addons/account/account_invoice.py:919
#, python-format
msgid "Bad total !"
msgstr "Плохой итог !"
@@ -9982,7 +10025,7 @@ msgid "Comparison"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1122
+#: code:addons/account/account_move_line.py:1119
#, python-format
msgid ""
"You cannot do this modification on a confirmed entry. You can just change "
@@ -10071,7 +10114,7 @@ msgid "Journal Entry Model"
msgstr "Модель записи журнала"
#. module: account
-#: code:addons/account/account.py:1064
+#: code:addons/account/account.py:1073
#, python-format
msgid "Start period should precede then end period."
msgstr ""
@@ -10491,7 +10534,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1059
+#: code:addons/account/account_move_line.py:1056
#, python-format
msgid "Unable to change tax!"
msgstr ""
@@ -10560,8 +10603,10 @@ msgstr "Счета системы налогообложения"
#: view:account.invoice:0
#: selection:account.invoice,type:0
#: selection:account.invoice.report,type:0
+#: code:addons/account/account_invoice.py:1155
#: model:process.process,name:account.process_process_supplierinvoiceprocess0
#: selection:report.invoice.created,type:0
+#, python-format
msgid "Supplier Invoice"
msgstr "Счет поставщика"
@@ -10744,7 +10789,7 @@ msgid "Entries Sorted by"
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:1515
+#: code:addons/account/account_invoice.py:1543
#, python-format
msgid ""
"The selected unit of measure is not compatible with the unit of measure of "
@@ -10825,6 +10870,8 @@ msgstr "Искать счет"
#: report:account.invoice:0
#: view:account.invoice:0
#: view:account.invoice.report:0
+#: code:addons/account/account_invoice.py:1156
+#, python-format
msgid "Refund"
msgstr "Возвраты"
@@ -10895,7 +10942,7 @@ msgid "Manual Invoice Taxes"
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:550
+#: code:addons/account/account_invoice.py:570
#, python-format
msgid "The payment term of supplier does not have a payment term line."
msgstr ""
diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po
index 0e216ddb68f..beaeb00ddea 100644
--- a/addons/account/i18n/zh_CN.po
+++ b/addons/account/i18n/zh_CN.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-04-25 09:04+0000\n"
-"Last-Translator: Oliver Yuan <Unknown>\n"
+"PO-Revision-Date: 2013-06-07 09:22+0000\n"
+"Last-Translator: 盈通 ccdos <ccdos@163.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: 2013-04-26 05:34+0000\n"
-"X-Generator: Launchpad (build 16580)\n"
+"X-Launchpad-Export-Date: 2013-06-08 05:52+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@@ -57,7 +57,7 @@ msgid "Residual"
msgstr "余额"
#. module: account
-#: code:addons/account/account_bank_statement.py:368
+#: code:addons/account/account_bank_statement.py:369
#, python-format
msgid "Journal item \"%s\" is not valid."
msgstr "凭证\"%s\"无效"
@@ -73,9 +73,9 @@ msgid "Import from invoice or payment"
msgstr "从发票或付款单导入"
#. module: account
-#: code:addons/account/account_move_line.py:1061
-#: code:addons/account/account_move_line.py:1146
-#: code:addons/account/account_move_line.py:1213
+#: code:addons/account/account_move_line.py:1058
+#: code:addons/account/account_move_line.py:1143
+#: code:addons/account/account_move_line.py:1210
#, python-format
msgid "Bad Account!"
msgstr "坏账"
@@ -129,15 +129,15 @@ msgstr "如果设置为false,该付款条款将会被隐藏。"
#: code:addons/account/account.py:641
#: code:addons/account/account.py:686
#: code:addons/account/account.py:781
-#: code:addons/account/account.py:1049
-#: code:addons/account/account_invoice.py:788
-#: code:addons/account/account_invoice.py:791
-#: code:addons/account/account_invoice.py:794
-#: code:addons/account/account_invoice.py:1514
+#: code:addons/account/account.py:1058
+#: code:addons/account/account_invoice.py:817
+#: code:addons/account/account_invoice.py:820
+#: code:addons/account/account_invoice.py:823
+#: code:addons/account/account_invoice.py:1542
#: code:addons/account/account_move_line.py:98
-#: code:addons/account/account_move_line.py:774
-#: code:addons/account/account_move_line.py:827
-#: code:addons/account/account_move_line.py:867
+#: code:addons/account/account_move_line.py:771
+#: code:addons/account/account_move_line.py:824
+#: code:addons/account/account_move_line.py:864
#: code:addons/account/wizard/account_fiscalyear_close.py:62
#: code:addons/account/wizard/account_invoice_state.py:44
#: code:addons/account/wizard/account_invoice_state.py:68
@@ -149,7 +149,7 @@ msgid "Warning!"
msgstr "警告!"
#. module: account
-#: code:addons/account/account.py:3159
+#: code:addons/account/account.py:3197
#, python-format
msgid "Miscellaneous Journal"
msgstr "其它凭证簿"
@@ -673,7 +673,7 @@ msgid "Profit Account"
msgstr "利润科目"
#. module: account
-#: code:addons/account/account_move_line.py:1159
+#: code:addons/account/account_move_line.py:1156
#, python-format
msgid "No period found or more than one period found for the given date."
msgstr "根据输入的凭证日期没有找到期间或找到了多个期间"
@@ -684,13 +684,13 @@ msgid "Report of the Sales by Account Type"
msgstr "销售报表的科目类型"
#. module: account
-#: code:addons/account/account.py:3163
+#: code:addons/account/account.py:3201
#, python-format
msgid "SAJ"
msgstr "SAJ"
#. module: account
-#: code:addons/account/account.py:1553
+#: code:addons/account/account.py:1591
#, python-format
msgid "Cannot create move with currency different from .."
msgstr "不能不同币种的凭证"
@@ -783,7 +783,7 @@ msgid "Are you sure you want to create entries?"
msgstr "你确定创建分录?"
#. module: account
-#: code:addons/account/account_invoice.py:1330
+#: code:addons/account/account_invoice.py:1358
#, python-format
msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)."
msgstr "发票已经支付:%s%s ,总额: %s%s (剩余:%s%s )。"
@@ -852,7 +852,7 @@ msgid "Type"
msgstr "类型"
#. module: account
-#: code:addons/account/account_invoice.py:794
+#: code:addons/account/account_invoice.py:823
#, python-format
msgid ""
"Taxes are missing!\n"
@@ -875,7 +875,7 @@ msgid "Supplier Invoices And Refunds"
msgstr "供应商发票和退款"
#. module: account
-#: code:addons/account/account_move_line.py:854
+#: code:addons/account/account_move_line.py:851
#, python-format
msgid "Entry is already reconciled."
msgstr "分录已经核销。"
@@ -951,7 +951,7 @@ msgstr ""
" "
#. module: account
-#: code:addons/account/account.py:1639
+#: code:addons/account/account.py:1677
#, python-format
msgid ""
"You cannot unreconcile journal items if they has been generated by the "
@@ -1035,7 +1035,7 @@ msgid "Liability"
msgstr "负债"
#. module: account
-#: code:addons/account/account_invoice.py:867
+#: code:addons/account/account_invoice.py:896
#, python-format
msgid "Please define sequence on the journal related to this invoice."
msgstr "请为这张发票对应的凭证簿选择编号规则"
@@ -1106,10 +1106,10 @@ msgid "Features"
msgstr "特性"
#. module: account
-#: code:addons/account/account.py:2308
-#: code:addons/account/account_bank_statement.py:423
+#: code:addons/account/account.py:2346
+#: code:addons/account/account_bank_statement.py:424
#: code:addons/account/account_invoice.py:74
-#: code:addons/account/account_invoice.py:744
+#: code:addons/account/account_invoice.py:772
#: code:addons/account/account_move_line.py:195
#, python-format
msgid "No Analytic Journal !"
@@ -1139,6 +1139,13 @@ msgid ""
" </p>\n"
" "
msgstr ""
+"<p class=\"oe_view_nocontent_create\">\n"
+" 点击添加一个账户.\n"
+" </p><p>\n"
+" "
+"在处理多币种交易时,由于汇率的变化,可能会产生汇兑收益或者损失。这个菜单提供给你一个假定在今天终结交易预测的损益。只有在账户有多币种时需要设置。\n"
+" </p>\n"
+" "
#. module: account
#: field:account.bank.accounts.wizard,acc_name:0
@@ -1155,7 +1162,7 @@ msgstr "用上个期末余额作期初"
msgid ""
"Check this box if you don't want any tax related to this tax code to appear "
"on invoices"
-msgstr ""
+msgstr "如果你不想该税款编码相关的税务信息显示在发票中, 请选中此项"
#. module: account
#: field:report.account.receivable,name:0
@@ -1233,7 +1240,7 @@ msgstr ""
#. module: account
#: model:account.account.type,name:account.data_account_type_bank
#: selection:account.bank.accounts.wizard,account_type:0
-#: code:addons/account/account.py:3054
+#: code:addons/account/account.py:3092
#, python-format
msgid "Bank"
msgstr "银行"
@@ -1548,7 +1555,7 @@ msgid "With balance is not equal to 0"
msgstr "余额不为0"
#. module: account
-#: code:addons/account/account.py:1445
+#: code:addons/account/account.py:1483
#, python-format
msgid ""
"There is no default debit account defined \n"
@@ -1773,8 +1780,10 @@ msgstr ""
#: view:account.invoice:0
#: view:account.invoice.report:0
#: field:account.move.line,invoice:0
+#: code:addons/account/account_invoice.py:1154
#: model:ir.model,name:account.model_account_invoice
#: model:res.request.link,name:account.req_link_invoice
+#, python-format
msgid "Invoice"
msgstr "发票"
@@ -1849,7 +1858,7 @@ msgid ""
msgstr "这个分类账簿的“合并对方科目”必须被选中,“跳过草稿状态”不能选中。"
#. module: account
-#: code:addons/account/account_move_line.py:857
+#: code:addons/account/account_move_line.py:854
#, python-format
msgid "Some entries are already reconciled."
msgstr "有些分录已经被核销。"
@@ -2004,36 +2013,36 @@ msgstr ""
#: code:addons/account/account.py:634
#: code:addons/account/account.py:636
#: code:addons/account/account.py:930
-#: code:addons/account/account.py:1062
-#: code:addons/account/account.py:1064
-#: code:addons/account/account.py:1103
-#: code:addons/account/account.py:1283
-#: code:addons/account/account.py:1297
-#: code:addons/account/account.py:1320
-#: code:addons/account/account.py:1327
-#: code:addons/account/account.py:1549
-#: code:addons/account/account.py:1553
-#: code:addons/account/account.py:1639
-#: code:addons/account/account.py:2320
-#: code:addons/account/account.py:2640
-#: code:addons/account/account.py:3427
+#: code:addons/account/account.py:1071
+#: code:addons/account/account.py:1073
+#: code:addons/account/account.py:1116
+#: code:addons/account/account.py:1319
+#: code:addons/account/account.py:1333
+#: code:addons/account/account.py:1356
+#: code:addons/account/account.py:1363
+#: code:addons/account/account.py:1587
+#: code:addons/account/account.py:1591
+#: code:addons/account/account.py:1677
+#: code:addons/account/account.py:2358
+#: code:addons/account/account.py:2678
+#: code:addons/account/account.py:3465
#: code:addons/account/account_analytic_line.py:89
#: code:addons/account/account_analytic_line.py:98
-#: code:addons/account/account_bank_statement.py:367
-#: code:addons/account/account_bank_statement.py:380
-#: code:addons/account/account_bank_statement.py:418
+#: code:addons/account/account_bank_statement.py:368
+#: code:addons/account/account_bank_statement.py:381
+#: code:addons/account/account_bank_statement.py:419
#: code:addons/account/account_cash_statement.py:256
#: code:addons/account/account_cash_statement.py:300
-#: code:addons/account/account_invoice.py:867
-#: code:addons/account/account_invoice.py:901
-#: code:addons/account/account_invoice.py:1091
-#: code:addons/account/account_move_line.py:578
-#: code:addons/account/account_move_line.py:831
+#: code:addons/account/account_invoice.py:896
+#: code:addons/account/account_invoice.py:930
+#: code:addons/account/account_invoice.py:1121
+#: code:addons/account/account_move_line.py:579
+#: code:addons/account/account_move_line.py:828
+#: code:addons/account/account_move_line.py:851
#: code:addons/account/account_move_line.py:854
-#: code:addons/account/account_move_line.py:857
-#: code:addons/account/account_move_line.py:1122
-#: code:addons/account/account_move_line.py:1124
-#: code:addons/account/account_move_line.py:1159
+#: code:addons/account/account_move_line.py:1119
+#: code:addons/account/account_move_line.py:1121
+#: code:addons/account/account_move_line.py:1156
#: code:addons/account/report/common_report_header.py:92
#: code:addons/account/wizard/account_change_currency.py:38
#: code:addons/account/wizard/account_change_currency.py:59
@@ -2047,8 +2056,8 @@ msgstr ""
#: code:addons/account/wizard/account_report_common.py:158
#: code:addons/account/wizard/account_report_common.py:164
#: code:addons/account/wizard/account_use_model.py:44
-#: code:addons/account/wizard/pos_box.py:32
-#: code:addons/account/wizard/pos_box.py:36
+#: code:addons/account/wizard/pos_box.py:31
+#: code:addons/account/wizard/pos_box.py:35
#, python-format
msgid "Error!"
msgstr "错误!"
@@ -2096,7 +2105,7 @@ msgid "period close"
msgstr "关闭一个会计期间"
#. module: account
-#: code:addons/account/account.py:1049
+#: code:addons/account/account.py:1058
#, python-format
msgid ""
"This journal already contains items for this period, therefore you cannot "
@@ -2168,7 +2177,7 @@ msgid "Analytic account"
msgstr "辅助核算项"
#. module: account
-#: code:addons/account/account_bank_statement.py:405
+#: code:addons/account/account_bank_statement.py:406
#, python-format
msgid "Please verify that an account is defined in the journal."
msgstr "请检查在账簿中已定义科目。"
@@ -2573,7 +2582,7 @@ msgid "Create an Account Based on this Template"
msgstr "基于此模板创建科目"
#. module: account
-#: code:addons/account/account_invoice.py:901
+#: code:addons/account/account_invoice.py:930
#, python-format
msgid ""
"Cannot create the invoice.\n"
@@ -2594,7 +2603,7 @@ msgid "Main Sequence"
msgstr "主序列"
#. module: account
-#: code:addons/account/account_bank_statement.py:477
+#: code:addons/account/account_bank_statement.py:478
#, python-format
msgid ""
"In order to delete a bank statement, you must first cancel it to delete "
@@ -2618,7 +2627,7 @@ msgid "Fiscal Positions"
msgstr "财务结构"
#. module: account
-#: code:addons/account/account_move_line.py:578
+#: code:addons/account/account_move_line.py:579
#, python-format
msgid "You cannot create journal items on a closed account %s %s."
msgstr "你不能在关闭的科目%s %s 上面创建分类账分录。"
@@ -2726,7 +2735,7 @@ msgid "Account Model Entries"
msgstr "凭证模板"
#. module: account
-#: code:addons/account/account.py:3164
+#: code:addons/account/account.py:3202
#, python-format
msgid "EXJ"
msgstr "EXJ"
@@ -2840,21 +2849,20 @@ msgid "Accounts"
msgstr "科目"
#. module: account
-#: code:addons/account/account.py:3503
-#: code:addons/account/account_bank_statement.py:404
-#: code:addons/account/account_invoice.py:378
-#: code:addons/account/account_invoice.py:484
-#: code:addons/account/account_invoice.py:582
-#: code:addons/account/account_invoice.py:597
-#: code:addons/account/account_invoice.py:605
-#: code:addons/account/account_invoice.py:627
-#: code:addons/account/account_move_line.py:535
+#: code:addons/account/account.py:3541
+#: code:addons/account/account_bank_statement.py:405
+#: code:addons/account/account_invoice.py:504
+#: code:addons/account/account_invoice.py:606
+#: code:addons/account/account_invoice.py:621
+#: code:addons/account/account_invoice.py:629
+#: code:addons/account/account_invoice.py:654
+#: code:addons/account/account_move_line.py:536
#, python-format
msgid "Configuration Error!"
msgstr "设置错误!"
#. module: account
-#: code:addons/account/account_bank_statement.py:433
+#: code:addons/account/account_bank_statement.py:434
#, python-format
msgid "Statement %s confirmed, journal items were created."
msgstr "对账单 %s 确认,分类账目 被创建."
@@ -3050,7 +3058,7 @@ msgid ""
msgstr "选择的发票不能被确认,因为它们不是“草稿”或者“形式发票”状态"
#. module: account
-#: code:addons/account/account.py:1062
+#: code:addons/account/account.py:1071
#, python-format
msgid "You should choose the periods that belong to the same company."
msgstr "你要选择属于同一个公司的会计区间"
@@ -3063,7 +3071,7 @@ msgid "Sales by Account"
msgstr "销售科目"
#. module: account
-#: code:addons/account/account.py:1411
+#: code:addons/account/account.py:1449
#, python-format
msgid "You cannot delete a posted journal entry \"%s\"."
msgstr "你不能删除已经登帐的分类账分录\"%s\"."
@@ -3079,8 +3087,8 @@ msgid "Sale journal"
msgstr "销售分类帐"
#. module: account
-#: code:addons/account/account.py:2308
-#: code:addons/account/account_invoice.py:744
+#: code:addons/account/account.py:2346
+#: code:addons/account/account_invoice.py:772
#: code:addons/account/account_move_line.py:195
#, python-format
msgid "You have to define an analytic journal on the '%s' journal!"
@@ -3239,7 +3247,7 @@ msgid "Fiscal Position"
msgstr "财务结构"
#. module: account
-#: code:addons/account/account_invoice.py:791
+#: code:addons/account/account_invoice.py:820
#, python-format
msgid ""
"Tax base different!\n"
@@ -3335,7 +3343,7 @@ msgstr ""
"将选择要兑换货币的当前汇率。在大多数国家法定为“平均”,但只有少数软件系统能够管理。 所以如果你要导入另一个软件系统,你可能需要使用当日汇率。"
#. module: account
-#: code:addons/account/account.py:2640
+#: code:addons/account/account.py:2678
#, python-format
msgid "There is no parent code for the template account."
msgstr "模版科目没有上级代码"
@@ -3398,7 +3406,7 @@ msgid "View"
msgstr "视图"
#. module: account
-#: code:addons/account/account.py:3422
+#: code:addons/account/account.py:3460
#: code:addons/account/account_bank.py:95
#, python-format
msgid "BNK"
@@ -3660,7 +3668,7 @@ msgid ""
msgstr "如果您指定其它名称,它创建的凭证或分录将用报表名相同的名称。这使得报表它自己关联相似的分录。"
#. module: account
-#: code:addons/account/account_invoice.py:984
+#: code:addons/account/account_invoice.py:1013
#, python-format
msgid ""
"You cannot create an invoice on a centralized journal. Uncheck the "
@@ -3675,7 +3683,7 @@ msgid "Starting Balance"
msgstr "期初余额"
#. module: account
-#: code:addons/account/account_invoice.py:1434
+#: code:addons/account/account_invoice.py:1462
#, python-format
msgid "No Partner Defined !"
msgstr "未定义业务伙伴!"
@@ -3727,7 +3735,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:535
+#: code:addons/account/account_move_line.py:536
#, python-format
msgid ""
"Cannot find any account journal of %s type for this company.\n"
@@ -3875,7 +3883,7 @@ msgid "Period Length (days)"
msgstr "期间(天数)"
#. module: account
-#: code:addons/account/account.py:1327
+#: code:addons/account/account.py:1363
#, python-format
msgid ""
"You cannot modify a posted entry of this journal.\n"
@@ -4035,7 +4043,7 @@ msgid "Chart of Accounts Template"
msgstr "科目一览表模板"
#. module: account
-#: code:addons/account/account.py:2320
+#: code:addons/account/account.py:2358
#, python-format
msgid ""
"Maturity date of entry line generated by model line '%s' of model '%s' is "
@@ -4200,7 +4208,7 @@ msgid "Name"
msgstr "名称"
#. module: account
-#: code:addons/account/installer.py:94
+#: code:addons/account/installer.py:115
#, python-format
msgid "No unconfigured company !"
msgstr "还没有配置好公司"
@@ -4271,8 +4279,8 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1061
-#: code:addons/account/account_move_line.py:1146
+#: code:addons/account/account_move_line.py:1058
+#: code:addons/account/account_move_line.py:1143
#, python-format
msgid "You cannot use an inactive account."
msgstr ""
@@ -4302,7 +4310,7 @@ msgid "Consolidated Children"
msgstr "合并子科目"
#. module: account
-#: code:addons/account/account_invoice.py:550
+#: code:addons/account/account_invoice.py:570
#: code:addons/account/wizard/account_invoice_refund.py:146
#, python-format
msgid "Insufficient Data!"
@@ -4506,7 +4514,7 @@ msgid "Cancel the Selected Invoices"
msgstr "取消选定的发票"
#. module: account
-#: code:addons/account/account_bank_statement.py:423
+#: code:addons/account/account_bank_statement.py:424
#, python-format
msgid "You have to assign an analytic journal on the '%s' journal!"
msgstr "必须分配一个辅助核算账簿给\"%s\"账簿"
@@ -4571,8 +4579,8 @@ msgid "Supplier invoice sequence"
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:583
-#: code:addons/account/account_invoice.py:598
+#: code:addons/account/account_invoice.py:607
+#: code:addons/account/account_invoice.py:622
#, python-format
msgid ""
"Cannot find a chart of account, you should create one from Settings\\"
@@ -4635,7 +4643,7 @@ msgid "Account Base Code"
msgstr "税基编码"
#. module: account
-#: code:addons/account/account_move_line.py:867
+#: code:addons/account/account_move_line.py:864
#, python-format
msgid ""
"You have to provide an account for the write off/exchange difference entry."
@@ -4701,7 +4709,7 @@ msgid "Statement from invoice or payment"
msgstr "发票或付款清单"
#. module: account
-#: code:addons/account/installer.py:94
+#: code:addons/account/installer.py:115
#, python-format
msgid ""
"There is currently no company without chart of account. The wizard will "
@@ -4755,7 +4763,7 @@ msgid "Bank statements are entered in the system."
msgstr "把银行对账单输入到系统中。"
#. module: account
-#: code:addons/account/wizard/account_reconcile.py:121
+#: code:addons/account/wizard/account_reconcile.py:122
#, python-format
msgid "Reconcile Writeoff"
msgstr "补差额时核销"
@@ -4845,7 +4853,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:627
+#: code:addons/account/account_invoice.py:655
#, python-format
msgid ""
"Cannot find any account journal of %s type for this company.\n"
@@ -4860,7 +4868,7 @@ msgid "Based On"
msgstr "基于"
#. module: account
-#: code:addons/account/account.py:3166
+#: code:addons/account/account.py:3204
#, python-format
msgid "ECNJ"
msgstr "ECNJ"
@@ -4926,7 +4934,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account.py:3356
+#: code:addons/account/account.py:3394
#, python-format
msgid "Purchase Tax %.2f%%"
msgstr "采购税 %.2f%%"
@@ -5000,7 +5008,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account.py:3167
+#: code:addons/account/account.py:3205
#, python-format
msgid "MISC"
msgstr "杂项"
@@ -5169,7 +5177,7 @@ msgid "Tax Application"
msgstr "税适用"
#. module: account
-#: code:addons/account/account_invoice.py:890
+#: code:addons/account/account_invoice.py:919
#, python-format
msgid ""
"Please verify the price of the invoice !\n"
@@ -5341,7 +5349,7 @@ msgid "Target Moves"
msgstr "目标"
#. module: account
-#: code:addons/account/account.py:1416
+#: code:addons/account/account.py:1454
#, python-format
msgid ""
"Move cannot be deleted if linked to an invoice. (Invoice: %s - Move ID:%s)"
@@ -5422,7 +5430,7 @@ msgid "Internal Name"
msgstr "内部名称"
#. module: account
-#: code:addons/account/account_move_line.py:1188
+#: code:addons/account/account_move_line.py:1185
#, python-format
msgid ""
"Cannot create an automatic sequence for this piece.\n"
@@ -5494,7 +5502,7 @@ msgid "Compute Code (if type=code)"
msgstr "计算代码(如果类型=代码)"
#. module: account
-#: code:addons/account/account_invoice.py:485
+#: code:addons/account/account_invoice.py:505
#, python-format
msgid ""
"Cannot find a chart of accounts for this company, you should create one."
@@ -5622,7 +5630,7 @@ msgid "Recompute taxes and total"
msgstr ""
#. module: account
-#: code:addons/account/account.py:1103
+#: code:addons/account/account.py:1116
#, python-format
msgid "You cannot modify/delete a journal with entries for this period."
msgstr ""
@@ -5650,7 +5658,7 @@ msgid "Amount Computation"
msgstr "计算金额"
#. module: account
-#: code:addons/account/account_move_line.py:1108
+#: code:addons/account/account_move_line.py:1105
#, python-format
msgid "You can not add/modify entries in a closed period %s of journal %s."
msgstr ""
@@ -5945,7 +5953,7 @@ msgid "Fixed Amount"
msgstr "固定金额"
#. module: account
-#: code:addons/account/account_move_line.py:1059
+#: code:addons/account/account_move_line.py:1056
#, python-format
msgid "You cannot change the tax, you should remove and recreate lines."
msgstr "你不能修改税,你需要删去并且重建这一行"
@@ -5996,14 +6004,14 @@ msgid "Child Accounts"
msgstr "子科目"
#. module: account
-#: code:addons/account/account_move_line.py:1120
+#: code:addons/account/account_move_line.py:1117
#, python-format
msgid "Move name (id): %s (%s)"
msgstr "会计凭证号 (id): %s (%s)"
#. module: account
#: view:account.move.line.reconcile:0
-#: code:addons/account/account_move_line.py:882
+#: code:addons/account/account_move_line.py:879
#, python-format
msgid "Write-Off"
msgstr "补差额"
@@ -6029,7 +6037,7 @@ msgstr "收入"
#: view:account.config.settings:0
#: view:account.invoice:0
#: view:account.invoice.report:0
-#: code:addons/account/account_invoice.py:355
+#: code:addons/account/account_invoice.py:387
#, python-format
msgid "Supplier"
msgstr "供应商"
@@ -6163,7 +6171,7 @@ msgid "Filter by"
msgstr "筛选"
#. module: account
-#: code:addons/account/account.py:2296
+#: code:addons/account/account.py:2334
#, python-format
msgid "You have a wrong expression \"%(...)s\" in your model !"
msgstr "模型中存在错误的表达式 \"%(...)s\""
@@ -6211,7 +6219,7 @@ msgid "Number of Days"
msgstr "天数"
#. module: account
-#: code:addons/account/account.py:1321
+#: code:addons/account/account.py:1357
#, python-format
msgid ""
"You cannot validate this journal entry because account \"%s\" does not "
@@ -6357,7 +6365,7 @@ msgid "Models"
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:1091
+#: code:addons/account/account_invoice.py:1121
#, python-format
msgid ""
"You cannot cancel an invoice which is partially paid. You need to "
@@ -6529,7 +6537,7 @@ msgid "You cannot create journal items on closed account."
msgstr ""
#. module: account
-#: code:addons/account/account_invoice.py:606
+#: code:addons/account/account_invoice.py:630
#, python-format
msgid "Invoice line account's company and invoice's compnay does not match."
msgstr ""
@@ -6550,7 +6558,7 @@ msgid "The related account currency if not equal to the company one."
msgstr "如果不是同一公司, 相关科目的币别"
#. module: account
-#: code:addons/account/installer.py:48
+#: code:addons/account/installer.py:69
#, python-format
msgid "Custom"
msgstr ""
@@ -6577,7 +6585,7 @@ msgid "Internal Transfers Account"
msgstr ""
#. module: account
-#: code:addons/account/wizard/pos_box.py:33
+#: code:addons/account/wizard/pos_box.py:32
#, python-format
msgid "Please check that the field 'Journal' is set on the Bank Statement"
msgstr ""
@@ -6603,7 +6611,7 @@ msgid "Power"
msgstr "强制"
#. module: account
-#: code:addons/account/account.py:3427
+#: code:addons/account/account.py:3465
#, python-format
msgid "Cannot generate an unused journal code."
msgstr "不能生成一个未使用的凭证代码。"
@@ -6674,12 +6682,12 @@ msgid ""
msgstr "序列字段用于税从低到高排序, 如果税中有子税这排序是重要的"
#. module: account
-#: code:addons/account/account.py:1410
-#: code:addons/account/account.py:1415
-#: code:addons/account/account.py:1444
-#: code:addons/account/account.py:1451
-#: code:addons/account/account_invoice.py:983
-#: code:addons/account/account_move_line.py:1008
+#: code:addons/account/account.py:1448
+#: code:addons/account/account.py:1453
+#: code:addons/account/account.py:1482
+#: code:addons/account/account.py:1489
+#: code:addons/account/account_invoice.py:1012
+#: code:addons/account/account_move_line.py:1005
#: code:addons/account/wizard/account_automatic_reconcile.py:148
#: code:addons/account/wizard/account_fiscalyear_close.py:88
#: code:addons/account/wizard/account_fiscalyear_close.py:99
@@ -6757,7 +6765,9 @@ msgstr "你不能修改已经存在凭证的公司帐户。"
#: report:account.invoice:0
#: selection:account.invoice,type:0
#: selection:account.invoice.report,type:0
+#: code:addons/account/account_invoice.py:1157
#: selection:report.invoice.created,type:0
+#, python-format
msgid "Supplier Refund"
msgstr "供应商红字发票"
@@ -6900,7 +6910,7 @@ msgstr "辅助核算统计"
#. module: account
#: code:addons/account/account_analytic_line.py:142
-#: code:addons/account/account_move_line.py:958
+#: code:addons/account/account_move_line.py:955
#, python-format
msgid "Entries: "
msgstr "凭证: "
@@ -7009,7 +7019,7 @@ msgstr ""
#. module: account
#: code:addons/account/account.py:1024
-#: code:addons/account/account_move_line.py:1108
+#: code:addons/account/account_move_line.py:1105
#, python-format
msgid "Error !"
msgstr "错误!"
@@ -7231,7 +7241,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account.py:2266
+#: code:addons/account/account.py:2304
#, python-format
msgid ""
"You can specify year, month and date in the name of the model using the "
@@ -7309,7 +7319,7 @@ msgid "Done"
msgstr "完成"
#. module: account
-#: code:addons/account/account.py:1283
+#: code:addons/account/account.py:1319
#, python-format
msgid ""
"You cannot validate a non-balanced entry.\n"
@@ -7596,7 +7606,7 @@ msgstr "报表"
#. module: account
#. openerp-web
-#: code:addons/account/account_move_line.py:783
+#: code:addons/account/account_move_line.py:780
#: code:addons/account/static/src/js/account_move_reconciliation.js:90
#, python-format
msgid "Warning"
@@ -7659,7 +7669,7 @@ msgid "Use model"
msgstr "使用模型"
#. module: account
-#: code:addons/account/account.py:1452
+#: code:addons/account/account.py:1490
#, python-format
msgid ""
"There is no default credit account defined \n"
@@ -7710,7 +7720,7 @@ msgid "Root/View"
msgstr "根/视图"
#. module: account
-#: code:addons/account/account.py:3168
+#: code:addons/account/account.py:3206
#, python-format
msgid "OPEJ"
msgstr "OPEJ"
@@ -7777,7 +7787,7 @@ msgid "Maturity Date"
msgstr "到期日期"
#. module: account
-#: code:addons/account/account.py:3155
+#: code:addons/account/account.py:3193
#, python-format
msgid "Sales Journal"
msgstr "销售账簿"
@@ -7788,7 +7798,7 @@ msgid "Invoice Tax"
msgstr "发票税"
#. module: account
-#: code:addons/account/account_move_line.py:1188
+#: code:addons/account/account_move_line.py:1185
#, python-format
msgid "No piece number !"
msgstr "没会计期间!"
@@ -7829,7 +7839,7 @@ msgid "Sales Properties"
msgstr "销售属性"
#. module: account
-#: code:addons/account/account.py:3503
+#: code:addons/account/account.py:3541
#, python-format
msgid ""
"You have to set a code for the bank account defined on the selected chart of "
@@ -7854,7 +7864,7 @@ msgstr "到"
#. module: account
#: selection:account.move.line,centralisation:0
-#: code:addons/account/account.py:1503
+#: code:addons/account/account.py:1541
#, python-format
msgid "Currency Adjustment"
msgstr "汇兑损益调整"
@@ -7886,7 +7896,7 @@ msgid "May"
msgstr "5"
#. module: account
-#: code:addons/account/account_invoice.py:788
+#: code:addons/account/account_invoice.py:817
#, python-format
msgid "Global taxes defined, but they are not in invoice lines !"
msgstr "定义了全局税,但发票行中没有!"
@@ -7927,7 +7937,7 @@ msgstr "登账"
#: view:account.config.settings:0
#: view:account.invoice:0
#: view:account.invoice.report:0
-#: code:addons/account/account_invoice.py:353
+#: code:addons/account/account_invoice.py:385
#, python-format
msgid "Customer"
msgstr "客户"
@@ -7943,7 +7953,7 @@ msgstr "报表名称"
#: selection:account.bank.accounts.wizard,account_type:0
#: selection:account.entries.report,type:0
#: selection:account.journal,type:0
-#: code:addons/account/account.py:3054
+#: code:addons/account/account.py:3092
#, python-format
msgid "Cash"
msgstr "现金"
@@ -8107,6 +8117,7 @@ msgstr "固定"
#: code:addons/account/account.py:653
#: code:addons/account/account.py:656
#: code:addons/account/account.py:668
+#: code:addons/account/account.py:1031
#, python-format
msgid "Warning !"
msgstr "警告 !"
@@ -8174,7 +8185,7 @@ msgid "Select a currency to apply on the invoice"
msgstr "在发票上选择合适的币别"
#. module: account
-#: code:addons/account/account_invoice.py:869
+#: code:addons/account/account_invoice.py:898
#, python-format
msgid "No Invoice Lines !"
msgstr "没有发票明细"
@@ -8197,7 +8208,7 @@ msgid "Tax Use In"
msgstr "税用在"
#. module: account
-#: code:addons/account/account_bank_statement.py:381
+#: code:addons/account/account_bank_statement.py:382
#, python-format
msgid ""
"The statement balance is incorrect !\n"
@@ -8207,7 +8218,7 @@ msgstr ""
"预期的余额是(%.2f),现在算出来的是(%.2f)"
#. module: account
-#: code:addons/account/account_bank_statement.py:419
+#: code:addons/account/account_bank_statement.py:420
#, python-format
msgid "The account entries lines are not in valid state."
msgstr "这分录明细不是在有效的状态"
@@ -8251,7 +8262,7 @@ msgid "Associated Partner"
msgstr "相关业务伙伴"
#. module: account
-#: code:addons/account/account_invoice.py:1434
+#: code:addons/account/account_invoice.py:1462
#, python-format
msgid "You must first select a partner !"
msgstr "你必须首先选择一个业务伙伴!"
@@ -8330,13 +8341,13 @@ msgid ""
msgstr "如果在计算未来的税前这税额必须包含在税基金额里,请设置"
#. module: account
-#: code:addons/account/account.py:3158
+#: code:addons/account/account.py:3196
#, python-format
msgid "Purchase Refund Journal"
msgstr "采购红字发票账簿"
#. module: account
-#: code:addons/account/account.py:1297
+#: code:addons/account/account.py:1333
#, python-format
msgid "Please define a sequence on the journal."
msgstr ""
@@ -8579,7 +8590,7 @@ msgid "${object.company_id.name} Invoice (Ref ${object.number or 'n/a'})"
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1213
+#: code:addons/account/account_move_line.py:1210
#, python-format
msgid ""
"You cannot use this general account in this journal, check the tab 'Entry "
@@ -8682,7 +8693,7 @@ msgid "The partner account used for this invoice."
msgstr "这发票用这业务伙伴科目"
#. module: account
-#: code:addons/account/account.py:3353
+#: code:addons/account/account.py:3391
#, python-format
msgid "Tax %.2f%%"
msgstr "税 %.2f%%"
@@ -8700,7 +8711,7 @@ msgid "Payment Term Line"
msgstr "付款条款明细"
#. module: account
-#: code:addons/account/account.py:3156
+#: code:addons/account/account.py:3194
#, python-format
msgid "Purchase Journal"
msgstr "采购账簿"
@@ -8869,7 +8880,7 @@ msgid "Journal Name"
msgstr "账簿名称"
#. module: account
-#: code:addons/account/account_move_line.py:832
+#: code:addons/account/account_move_line.py:829
#, python-format
msgid "Entry \"%s\" is not valid !"
msgstr "凭证\"%s\"无效!"
@@ -8917,7 +8928,7 @@ msgid ""
msgstr "如果它是一个多货币凭证,这金额表示一个可选的其它货币金额."
#. module: account
-#: code:addons/account/account_move_line.py:1009
+#: code:addons/account/account_move_line.py:1006
#, python-format
msgid "The account move (%s) for centralisation has been confirmed."
msgstr ""
@@ -8978,7 +8989,7 @@ msgid "Reconciled entries"
msgstr "核销分录"
#. module: account
-#: code:addons/account/account.py:2296
+#: code:addons/account/account.py:2334
#, python-format
msgid "Wrong model !"
msgstr "模型有误!"
@@ -9000,7 +9011,7 @@ msgid "Print Account Partner Balance"
msgstr "打印业务伙伴余额"
#. module: account
-#: code:addons/account/account_move_line.py:1124
+#: code:addons/account/account_move_line.py:1121
#, python-format
msgid ""
"You cannot do this modification on a reconciled entry. You can just change "
@@ -9036,7 +9047,7 @@ msgstr "未知的"
#. module: account
#: field:account.fiscalyear.close,journal_id:0
-#: code:addons/account/account.py:3160
+#: code:addons/account/account.py:3198
#, python-format
msgid "Opening Entries Journal"
msgstr "账簿的开账分录"
@@ -9131,7 +9142,7 @@ msgid "Unit of Currency"
msgstr ""
#. module: account
-#: code:addons/account/account.py:3157
+#: code:addons/account/account.py:3195
#, python-format
msgid "Sales Refund Journal"
msgstr "销售红字发票账簿"
@@ -9197,13 +9208,13 @@ msgid "Purchase Tax(%)"
msgstr "进项税(%)"
#. module: account
-#: code:addons/account/account_invoice.py:869
+#: code:addons/account/account_invoice.py:898
#, python-format
msgid "Please create some invoice lines."
msgstr "请创建发票明细。"
#. module: account
-#: code:addons/account/wizard/pos_box.py:37
+#: code:addons/account/wizard/pos_box.py:36
#, python-format
msgid ""
"Please check that the field 'Internal Transfers Account' is set on the "
@@ -9216,7 +9227,7 @@ msgid "Display Detail"
msgstr "显示明细"
#. module: account
-#: code:addons/account/account.py:3165
+#: code:addons/account/account.py:3203
#, python-format
msgid "SCNJ"
msgstr "SCNJ"
@@ -9375,8 +9386,8 @@ msgid "Receivable Account"
msgstr "应收款科目"
#. module: account
-#: code:addons/account/account_move_line.py:774
-#: code:addons/account/account_move_line.py:827
+#: code:addons/account/account_move_line.py:771
+#: code:addons/account/account_move_line.py:824
#, python-format
msgid "To reconcile the entries company should be the same for all entries."
msgstr ""
@@ -9477,7 +9488,7 @@ msgid "Move"
msgstr "凭证"
#. module: account
-#: code:addons/account/account_bank_statement.py:477
+#: code:addons/account/account_bank_statement.py:478
#: code:addons/account/wizard/account_period_close.py:51
#, python-format
msgid "Invalid Action!"
@@ -9571,7 +9582,7 @@ msgid "Balance :"
msgstr "余额:"
#. module: account
-#: code:addons/account/account.py:1549
+#: code:addons/account/account.py:1587
#, python-format
msgid "Cannot create moves for different companies."
msgstr ""
@@ -9662,7 +9673,7 @@ msgid "Immediate Payment"
msgstr ""
#. module: account
-#: code:addons/account/account.py:1464
+#: code:addons/account/account.py:1502
#, python-format
msgid " Centralisation"
msgstr ""
@@ -9753,7 +9764,7 @@ msgid "Unreconciled"
msgstr "反核销"
#. module: account
-#: code:addons/account/account_invoice.py:890
+#: code:addons/account/account_invoice.py:919
#, python-format
msgid "Bad total !"
msgstr "坏的合计!"
@@ -9840,7 +9851,7 @@ msgid "Comparison"
msgstr "比较"
#. module: account
-#: code:addons/account/account_move_line.py:1122
+#: code:addons/account/account_move_line.py:1119
#, python-format
msgid ""
"You cannot do this modification on a confirmed entry. You can just change "
@@ -9927,7 +9938,7 @@ msgid "Journal Entry Model"
msgstr "账簿分录模型"
#. module: account
-#: code:addons/account/account.py:1064
+#: code:addons/account/account.py:1073
#, python-format
msgid "Start period should precede then end period."
msgstr ""
@@ -9936,7 +9947,7 @@ msgstr ""
#: field:account.invoice,number:0
#: field:account.move,name:0
msgid "Number"
-msgstr "凭证号"
+msgstr "编号"
#. module: account
#: report:account.analytic.account.journal:0
@@ -10341,7 +10352,7 @@ msgid ""
msgstr ""
#. module: account
-#: code:addons/account/account_move_line.py:1059
+#: code:addons/account/account_move_line.py:1056
#, python-format
msgid "Unable to change tax!"
msgstr ""
@@ -10410,8 +10421,10 @@ msgstr "财务结构"
#: view:account.invoice:0
#: selection:account.invoice,type:0
#: selection:account.invoice.report,type:0
+#: code:addons/account/account_invoice.py:1155
#: model:process.process,name:account.process_process_supplierinvoiceprocess0
#: selection:report.invoice.created,type:0
+#, python-format
msgid "Supplier Invoice"
msgstr "供应商发票"
@@ -10594,7 +10607,7 @@ msgid "Entries Sorted by"
msgstr "排序依据:"
#. module: account
-#: code:addons/account/account_invoice.py:1515
+#: code:addons/account/account_invoice.py:1543
#, python-format
msgid ""
"The selected unit of measure is not compatible with the unit of measure of "
@@ -10675,6 +10688,8 @@ msgstr "搜索发票"
#: report:account.invoice:0
#: view:account.invoice:0
#: view:account.invoice.report:0
+#: code:addons/account/account_invoice.py:1156
+#, python-format
msgid "Refund"
msgstr "红字发票"
@@ -10745,7 +10760,7 @@ msgid "Manual Invoice Taxes"
msgstr "手动的发票税(非主营业务纳税)"
#. module: account
-#: code:addons/account/account_invoice.py:550
+#: code:addons/account/account_invoice.py:570
#, python-format
msgid "The payment term of supplier does not have a payment term line."
msgstr "供应商付款条件没有包含付款条件行"
diff --git a/addons/account/installer.py b/addons/account/installer.py
index 537371d0f64..961b8f9e763 100644
--- a/addons/account/installer.py
+++ b/addons/account/installer.py
@@ -111,7 +111,7 @@ class account_installer(osv.osv_memory):
def check_unconfigured_cmp(self, cr, uid, context=None):
""" check if there are still unconfigured companies """
if not self.get_unconfigured_cmp(cr, uid, context=context):
- raise osv.except_osv(_('No unconfigured company !'), _("There is currently no company without chart of account. The wizard will therefore not be executed."))
+ raise osv.except_osv(_('No Unconfigured Company!'), _("There is currently no company without chart of account. The wizard will therefore not be executed."))
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
if context is None: context = {}
diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml
index f6c89a92560..3dcc68e315e 100644
--- a/addons/account/partner_view.xml
+++ b/addons/account/partner_view.xml
@@ -68,7 +68,7 @@
name="%(account.action_invoice_tree)d"
context="{'search_default_partner_id': active_id,'default_partner_id': active_id}" groups="account.group_account_invoice"/>
<button type="action" string="Journal Items" name="%(account.action_account_moves_all_tree)d" groups="account.group_account_user"/>
- <button type="action" string="Contracts/Analytic Accounts" name="%(account.action_open_partner_analytic_accounts)d"
+ <button type="action" string="Contracts" name="%(account.action_open_partner_analytic_accounts)d"
groups="analytic.group_analytic_accounting"/>
</xpath>
</field>
diff --git a/addons/account/product_view.xml b/addons/account/product_view.xml
index 44d53839700..2c540cb6ee6 100644
--- a/addons/account/product_view.xml
+++ b/addons/account/product_view.xml
@@ -11,11 +11,11 @@
<page string="Accounting" groups="account.group_account_invoice">
<group name="properties">
<group>
- <field name="property_account_income" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]" groups="account.group_account_user"/>
+ <field name="property_account_income" domain="[('type','=','other')]" groups="account.group_account_user"/>
<field name="taxes_id" colspan="2" attrs="{'readonly':[('sale_ok','=',0)]}" widget="many2many_tags"/>
</group>
<group>
- <field name="property_account_expense" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]" groups="account.group_account_user"/>
+ <field name="property_account_expense" domain="[('type','=','other')]" groups="account.group_account_user"/>
<field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/>
</group>
</group>
diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml
index 4dbdf41abf0..6ce97b5c868 100644
--- a/addons/account/project/project_view.xml
+++ b/addons/account/project/project_view.xml
@@ -68,6 +68,7 @@
<field name="parent_id" invisible="1"/>
<field name="type"/>
<field name="company_id" groups="base.group_multi_company"/>
+ <field name="template_id" invisible="1"/>
</tree>
</field>
</record>
diff --git a/addons/account/report/account_print_invoice.rml b/addons/account/report/account_print_invoice.rml
index 9268c94d4c7..3582221df44 100644
--- a/addons/account/report/account_print_invoice.rml
+++ b/addons/account/report/account_print_invoice.rml
@@ -99,42 +99,39 @@
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
- <paraStyle name="Standard" fontName="Helvetica"/>
- <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Table Contents" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Caption" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="Index" fontName="Helvetica"/>
- <paraStyle name="Heading" fontName="Helvetica" fontSize="15.0" leading="19" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="Footer" fontName="Helvetica"/>
- <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
- <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_Bold_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_Right_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_address" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="-3.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Right_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_Right_9" rightIndent="0.0" leftIndent="-3.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_2" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_White_2" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0" textColor="#ffffff"/>
- <paraStyle name="terp_default_Note" rightIndent="0.0" leftIndent="9.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="Table" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="User Index 10" rightIndent="0.0" leftIndent="127.0" fontName="Helvetica"/>
- <paraStyle name="Preformatted Text" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="Standard"/>
+ <paraStyle name="Text body" spaceBefore="0.0" spaceAfter="6.0"/>
+ <paraStyle name="List" spaceBefore="0.0" spaceAfter="6.0"/>
+ <paraStyle name="Table Contents" spaceBefore="0.0" spaceAfter="6.0"/>
+ <paraStyle name="Caption" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="Index"/>
+
+ <paraStyle name="terp_header" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="Footer"/>
+ <paraStyle name="Horizontal Line" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
+
+ <paraStyle name="terp_tblheader_General" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_Details" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_General_Centre" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_General_Right" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_Details_Centre" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_Details_Right" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
+
+ <paraStyle name="terp_default_Right_8" rightIndent="0.0" leftIndent="0.0" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_address" rightIndent="0.0" leftIndent="0.0" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="-3.0" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Right_9" rightIndent="0.0" leftIndent="0.0" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Bold_Right_9" rightIndent="0.0" leftIndent="-3.0" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_2" rightIndent="0.0" leftIndent="0.0" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_White_2" rightIndent="0.0" leftIndent="0.0" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0" textColor="#ffffff"/>
+
+ <paraStyle name="Table" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="User Index 10" rightIndent="0.0" leftIndent="127.0"/>
+ <paraStyle name="Preformatted Text" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
@@ -144,12 +141,12 @@
<pto_header><!-- Must be after setLang() -->
<blockTable colWidths="202.0,87.0,71.0,57.0,42.0,71.0" style="Table7">
<tr>
- <td> <para style="terp_tblheader_Details">Description</para> </td>
- <td> <para style="terp_tblheader_Details_Centre">Taxes</para> </td>
- <td> <para style="terp_tblheader_Details_Centre">Quantity</para> </td>
- <td> <para style="terp_tblheader_Details_Right">Unit Price </para> </td>
- <td> <para style="terp_tblheader_Details_Right">Disc.(%)</para> </td>
- <td> <para style="terp_tblheader_Details_Right">Price</para> </td>
+ <td><para style="terp_tblheader_Details"><b>Description</b></para></td>
+ <td><para style="terp_tblheader_Details_Centre"><b>Taxes</b></para></td>
+ <td><para style="terp_tblheader_Details_Centre"><b>Quantity</b></para></td>
+ <td><para style="terp_tblheader_Details_Right"><b>Unit Price</b></para></td>
+ <td><para style="terp_tblheader_Details_Right"><b>Disc.(%)</b></para></td>
+ <td><para style="terp_tblheader_Details_Right"><b>Price</b></para></td>
</tr>
</blockTable>
</pto_header>
@@ -172,29 +169,29 @@
</td>
</tr>
</blockTable>
- <para style="terp_header">Invoice [[ ((o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')) or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
- <para style="terp_header">PRO-FORMA [[ ((o.type == 'out_invoice' and o.state == 'proforma2') or removeParentNode('para')) and '' ]]</para>
- <para style="terp_header">Draft Invoice [[ ((o.type == 'out_invoice' and o.state == 'draft') or removeParentNode('para')) and '' ]]</para>
- <para style="terp_header">Cancelled Invoice [[ ((o.type == 'out_invoice' and o.state == 'cancel') or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
- <para style="terp_header">Refund [[ (o.type=='out_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
- <para style="terp_header">Supplier Refund [[ (o.type=='in_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
- <para style="terp_header">Supplier Invoice [[ (o.type=='in_invoice' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
+ <para style="terp_header"><b>Invoice [[ ((o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')) or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
+ <para style="terp_header"><b>PRO-FORMA [[ ((o.type == 'out_invoice' and o.state == 'proforma2') or removeParentNode('para')) and '' ]]</b></para>
+ <para style="terp_header"><b>Draft Invoice [[ ((o.type == 'out_invoice' and o.state == 'draft') or removeParentNode('para')) and '' ]]</b></para>
+ <para style="terp_header"><b>Cancelled Invoice [[ ((o.type == 'out_invoice' and o.state == 'cancel') or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
+ <para style="terp_header"><b>Refund [[ (o.type=='out_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
+ <para style="terp_header"><b>Supplier Refund [[ (o.type=='in_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
+ <para style="terp_header"><b>Supplier Invoice [[ (o.type=='in_invoice' or removeParentNode('para')) and '' ]] [[ o.number ]]</b></para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="132.50,132.50,132.50,132.50" style="Table_Invoice_General_Header">
<tr>
<td>
- <para style="terp_tblheader_General_Centre">Description</para>
+ <para style="terp_tblheader_General_Centre"><b>Description</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Invoice Date</para>
+ <para style="terp_tblheader_General_Centre"><b>Invoice Date</b></para>
</td>
- <td>
- <para style="terp_tblheader_General_Centre">Source</para>
+ <td>
+ <para style="terp_tblheader_General_Centre"><b>Source</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Customer Code</para>
+ <para style="terp_tblheader_General_Centre"><b>Customer Code</b></para>
</td>
</tr>
</blockTable>
@@ -220,22 +217,22 @@
<blockTable colWidths="185.0,70.0,80.0,60.0,50.0,85.0" style="Table7">
<tr>
<td>
- <para style="terp_tblheader_General">Description</para>
+ <para style="terp_tblheader_General"><b>Description</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Taxes</para>
+ <para style="terp_tblheader_General_Centre"><b>Taxes</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Right">Quantity</para>
+ <para style="terp_tblheader_General_Right"><b>Quantity</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Right">Unit Price</para>
+ <para style="terp_tblheader_General_Right"><b>Unit Price</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Right">Disc.(%)</para>
+ <para style="terp_tblheader_General_Right"><b>Disc.(%)</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Right">Price</para>
+ <para style="terp_tblheader_General_Right"><b>Price</b></para>
</td>
</tr>
</blockTable>
@@ -298,10 +295,10 @@
</para>
</td>
<td>
- <para style="terp_tblheader_Details">Total:</para>
+ <para style="terp_tblheader_Details"><b>Total:</b></para>
</td>
<td>
- <para style="terp_default_Bold_Right_9">[[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</para>
+ <para style="terp_default_Bold_Right_9"><b>[[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</b></para>
</td>
</tr>
</blockTable>
@@ -311,13 +308,13 @@
<blockTable colWidths="205.0,71.0,71.0,183.0" style="Table9">
<tr>
<td>
- <para style="terp_tblheader_Details">Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]</para>
+ <para style="terp_tblheader_Details"><b>Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Right">Base </para>
+ <para style="terp_tblheader_Details_Right"><b>Base </b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Right">Amount </para>
+ <para style="terp_tblheader_Details_Right"><b>Amount </b></para>
</td>
<td>
<para style="terp_default_8">
@@ -361,7 +358,7 @@
<blockTable colWidths="120.0,410.0" style="Table1">
<tr>
<td>
- <para style="terp_default_Bold_9">Fiscal Position Remark : </para>
+ <para style="terp_default_Bold_9"><b>Fiscal Position Remark : </b></para>
</td>
<td>
<para style="terp_default_9">[[ (o.fiscal_position and o.fiscal_position.note and format(o.fiscal_position.note)) or removeParentNode('blockTable') ]]</para>
diff --git a/addons/account/wizard/account_validate_account_move.py b/addons/account/wizard/account_validate_account_move.py
index 324248284f1..050191db187 100644
--- a/addons/account/wizard/account_validate_account_move.py
+++ b/addons/account/wizard/account_validate_account_move.py
@@ -57,7 +57,7 @@ class validate_account_move_lines(osv.osv_memory):
move_ids.append(line.move_id.id)
move_ids = list(set(move_ids))
if not move_ids:
- raise osv.except_osv(_('Warning!'), _('Selected Entry Lines does not have any account move enties in draft state.'))
+ raise osv.except_osv(_('Warning!'), _('Selected Entry Lines does not have any account move entries in draft state.'))
obj_move.button_validate(cr, uid, move_ids, context)
return {'type': 'ir.actions.act_window_close'}
diff --git a/addons/account/wizard/pos_box.py b/addons/account/wizard/pos_box.py
index bd38e6bbed6..4b7e63585d8 100644
--- a/addons/account/wizard/pos_box.py
+++ b/addons/account/wizard/pos_box.py
@@ -22,7 +22,7 @@ class CashBox(osv.osv_memory):
records = self.pool[active_model].browse(cr, uid, active_ids, context=context)
- return self._run(cr, uid, ids, records, context=None)
+ return self._run(cr, uid, ids, records, context=context)
def _run(self, cr, uid, ids, records, context=None):
for box in self.browse(cr, uid, ids, context=context):
diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py
index e493f364a0e..b3dd2302a2f 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis.py
+++ b/addons/account_analytic_analysis/account_analytic_analysis.py
@@ -653,7 +653,7 @@ class account_analytic_account(osv.osv):
fpos_obj = self.pool.get('account.fiscal.position')
if not contract.partner_id:
- raise osv.except_osv(_('No Customer Defined !'),_("You must first select a Customer for Contract %s!") % contract.name )
+ raise osv.except_osv(_('No Customer Defined!'),_("You must first select a Customer for Contract %s!") % contract.name )
fpos = contract.partner_id.property_account_position.id or False
journal_ids = journal_obj.search(cr, uid, [('type', '=','sale'),('company_id', '=', contract.company_id.id or False)], limit=1)
diff --git a/addons/account_analytic_plans/account_analytic_plans.py b/addons/account_analytic_plans/account_analytic_plans.py
index 54b15ad565b..4cf12098fff 100644
--- a/addons/account_analytic_plans/account_analytic_plans.py
+++ b/addons/account_analytic_plans/account_analytic_plans.py
@@ -332,7 +332,7 @@ class account_move_line(osv.osv):
for line in self.browse(cr, uid, ids, context=context):
if line.analytics_id:
if not line.journal_id.analytic_journal_id:
- raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal.") % (line.journal_id.name,))
+ raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal.") % (line.journal_id.name,))
toremove = analytic_line_obj.search(cr, uid, [('move_id','=',line.id)], context=context)
if toremove:
@@ -471,7 +471,7 @@ class account_bank_statement(osv.osv):
for st_line in st.line_ids:
if st_line.analytics_id:
if not st.journal_id.analytic_journal_id:
- raise osv.except_osv(_('No Analytic Journal !'),_("You have to define an analytic journal on the '%s' journal.") % (st.journal_id.name,))
+ raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal.") % (st.journal_id.name,))
if not st_line.amount:
continue
return True
diff --git a/addons/account_followup/account_followup_customers.xml b/addons/account_followup/account_followup_customers.xml
index 6893abe012e..fba0bce460b 100644
--- a/addons/account_followup/account_followup_customers.xml
+++ b/addons/account_followup/account_followup_customers.xml
@@ -9,11 +9,12 @@
<field name="model">res.partner</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
- <tree string="Customer Followup">
+ <tree string="Customer Followup" create="false" delete="false">
<field name="display_name"/>
<field name="payment_next_action_date"/>
<field name="payment_next_action"/>
<field name="user_id" invisible="1"/>
+ <field name="country_id" invisible="1"/>
<field name="parent_id" invisible="1"/>
<field name="payment_responsible_id"/>
<field name="payment_earliest_due_date"/>
@@ -97,7 +98,7 @@
<button name="action_done" type="object" string="⇾ Mark as Done"
help="Click to mark the action as done." class="oe_link"
attrs="{'invisible':[('payment_next_action_date','=', False)]}"
- groups="base.group_partner_manager"/>
+ groups="account.group_account_user"/>
<field name="payment_next_action" placeholder="Action to be taken e.g. Give a phonecall, Check if it's paid, ..."/>
</div>
</group>
diff --git a/addons/account_followup/report/account_followup_report.xml b/addons/account_followup/report/account_followup_report.xml
index 6fee6a77ac1..b7c38e89f5e 100644
--- a/addons/account_followup/report/account_followup_report.xml
+++ b/addons/account_followup/report/account_followup_report.xml
@@ -6,7 +6,7 @@
<field name="name">account_followup.stat.tree</field>
<field name="model">account_followup.stat</field>
<field name="arch" type="xml">
- <tree string="Follow-up lines">
+ <tree string="Follow-up lines" create="false">
<field name="partner_id"/>
<field name="date_move"/>
<field name="date_move_last"/>
diff --git a/addons/account_payment/wizard/account_payment_order.py b/addons/account_payment/wizard/account_payment_order.py
index 08d36c45eff..03e25dfbc45 100644
--- a/addons/account_payment/wizard/account_payment_order.py
+++ b/addons/account_payment/wizard/account_payment_order.py
@@ -23,6 +23,7 @@ import time
from lxml import etree
from openerp.osv import fields, osv
+from openerp.tools.translate import _
class payment_order_create(osv.osv_memory):
"""
@@ -108,7 +109,7 @@ class payment_order_create(osv.osv_memory):
context.update({'line_ids': line_ids})
model_data_ids = mod_obj.search(cr, uid,[('model', '=', 'ir.ui.view'), ('name', '=', 'view_create_payment_order_lines')], context=context)
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
- return {'name': ('Entrie Lines'),
+ return {'name': _('Entry Lines'),
'context': context,
'view_type': 'form',
'view_mode': 'form',
diff --git a/addons/account_test/i18n/ru.po b/addons/account_test/i18n/ru.po
new file mode 100644
index 00000000000..d36d83d2e99
--- /dev/null
+++ b/addons/account_test/i18n/ru.po
@@ -0,0 +1,241 @@
+# Russian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-06-05 07:09+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-06-06 05:21+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
+
+#. module: account_test
+#: view:accounting.assert.test:0
+msgid ""
+"Code should always set a variable named `result` with the result of your "
+"test, that can be a list or\n"
+"a dictionary. If `result` is an empty list, it means that the test was "
+"succesful. Otherwise it will\n"
+"try to translate and print what is inside `result`.\n"
+"\n"
+"If the result of your test is a dictionary, you can set a variable named "
+"`column_order` to choose in\n"
+"what order you want to print `result`'s content.\n"
+"\n"
+"Should you need them, you can also use the following variables into your "
+"code:\n"
+" * cr: cursor to the database\n"
+" * uid: ID of the current user\n"
+"\n"
+"In any ways, the code must be legal python statements with correct "
+"indentation (if needed).\n"
+"\n"
+"Example: \n"
+" sql = '''SELECT id, name, ref, date\n"
+" FROM account_move_line \n"
+" WHERE account_id IN (SELECT id FROM account_account WHERE type "
+"= 'view')\n"
+" '''\n"
+" cr.execute(sql)\n"
+" result = cr.dictfetchall()"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_02
+msgid "Test 2: Opening a fiscal year"
+msgstr "Проверка 2: Открытие фискального года"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_05
+msgid ""
+"Check that reconciled invoice for Sales/Purchases has reconciled entries for "
+"Payable and Receivable Accounts"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_03
+msgid ""
+"Check if movement lines are balanced and have the same date and period"
+msgstr ""
+
+#. module: account_test
+#: field:accounting.assert.test,name:0
+msgid "Test Name"
+msgstr ""
+
+#. module: account_test
+#: report:account.test.assert.print:0
+msgid "Accouting tests on"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_01
+msgid "Test 1: General balance"
+msgstr "Проверка 1: Общий баланс"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_06
+msgid "Check that paid/reconciled invoices are not in 'Open' state"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_05_2
+msgid ""
+"Check that reconciled account moves, that define Payable and Receivable "
+"accounts, are belonging to reconciled invoices"
+msgstr ""
+
+#. module: account_test
+#: view:accounting.assert.test:0
+msgid "Tests"
+msgstr "Проверки"
+
+#. module: account_test
+#: field:accounting.assert.test,desc:0
+msgid "Test Description"
+msgstr "Описание проверки"
+
+#. module: account_test
+#: view:accounting.assert.test:0
+msgid "Description"
+msgstr "Описание"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_06_1
+msgid "Check that there's no move for any account with « View » account type"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_08
+msgid "Test 9 : Accounts and partners on account moves"
+msgstr ""
+
+#. module: account_test
+#: model:ir.actions.act_window,name:account_test.action_accounting_assert
+#: model:ir.actions.report.xml,name:account_test.account_assert_test_report
+#: model:ir.ui.menu,name:account_test.menu_action_license
+msgid "Accounting Tests"
+msgstr ""
+
+#. module: account_test
+#: code:addons/account_test/report/account_test_report.py:74
+#, python-format
+msgid "The test was passed successfully"
+msgstr "Проверка прошла успешно"
+
+#. module: account_test
+#: field:accounting.assert.test,active:0
+msgid "Active"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_06
+msgid "Test 6 : Invoices status"
+msgstr ""
+
+#. module: account_test
+#: model:ir.model,name:account_test.model_accounting_assert_test
+msgid "accounting.assert.test"
+msgstr "accounting.assert.test"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_05
+msgid ""
+"Test 5.1 : Payable and Receivable accountant lines of reconciled invoices"
+msgstr ""
+
+#. module: account_test
+#: field:accounting.assert.test,code_exec:0
+msgid "Python code"
+msgstr "Код на Python"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_07
+msgid ""
+"Check on bank statement that the Closing Balance = Starting Balance + sum of "
+"statement lines"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_07
+msgid "Test 8 : Closing balance on bank statements"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_03
+msgid "Test 3: Movement lines"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_05_2
+msgid "Test 5.2 : Reconcilied invoices and Payable/Receivable accounts"
+msgstr ""
+
+#. module: account_test
+#: view:accounting.assert.test:0
+msgid "Expression"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_04
+msgid "Test 4: Totally reconciled mouvements"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_04
+msgid "Check if the totally reconciled movements are balanced"
+msgstr ""
+
+#. module: account_test
+#: field:accounting.assert.test,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_02
+msgid ""
+"Check if the balance of the new opened fiscal year matches with last year's "
+"balance"
+msgstr ""
+
+#. module: account_test
+#: view:accounting.assert.test:0
+msgid "Python Code"
+msgstr "Код на Python"
+
+#. module: account_test
+#: model:ir.actions.act_window,help:account_test.action_accounting_assert
+msgid ""
+"<p class=\"oe_view_nocontent_create\">\n"
+" Click to create Accounting Test.\n"
+" </p>\n"
+" "
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_01
+msgid "Check the balance: Debit sum = Credit sum"
+msgstr "Проверяет баланс: сумма дебита = сумма кредита"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_08
+msgid "Check that general accounts and partners on account moves are active"
+msgstr ""
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_06_1
+msgid "Test 7: « View  » account type"
+msgstr ""
+
+#. module: account_test
+#: view:accounting.assert.test:0
+msgid "Code Help"
+msgstr ""
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index 850162ccf84..81eb76ff3a8 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -1622,7 +1622,7 @@ class account_bank_statement(osv.osv):
for bk_st in self.browse(cr, uid, ids, context=context):
if vals.get('journal_id') and bk_st.line_ids:
if any([x.voucher_id and True or False for x in bk_st.line_ids]):
- raise osv.except_osv(_('Unable to change journal !'), _('You can not change the journal as you already reconciled some statement lines!'))
+ raise osv.except_osv(_('Unable to Change Journal!'), _('You can not change the journal as you already reconciled some statement lines!'))
return super(account_bank_statement, self).write(cr, uid, ids, vals, context=context)
diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py
index f70ab695719..ead6f72bee4 100644
--- a/addons/analytic/analytic.py
+++ b/addons/analytic/analytic.py
@@ -157,7 +157,7 @@ class account_analytic_account(osv.osv):
for account in self.browse(cr, uid, ids, context=context):
if account.company_id:
if account.company_id.currency_id.id != value:
- raise osv.except_osv(_('Error!'), _("If you set a company, the currency selected has to be the same as it's currency. \nYou can remove the company belonging, and thus change the currency, only on analytic account of type 'view'. This can be really usefull for consolidation purposes of several companies charts with different currencies, for example."))
+ raise osv.except_osv(_('Error!'), _("If you set a company, the currency selected has to be the same as it's currency. \nYou can remove the company belonging, and thus change the currency, only on analytic account of type 'view'. This can be really useful for consolidation purposes of several companies charts with different currencies, for example."))
if value:
return cr.execute("""update account_analytic_account set currency_id=%s where id=%s""", (value, account.id, ))
diff --git a/addons/analytic_user_function/analytic_user_function.py b/addons/analytic_user_function/analytic_user_function.py
index 0573292c1f6..1adefb2d59d 100644
--- a/addons/analytic_user_function/analytic_user_function.py
+++ b/addons/analytic_user_function/analytic_user_function.py
@@ -104,7 +104,7 @@ class hr_analytic_timesheet(osv.osv):
a = r.product_id.categ_id.property_account_expense_categ.id
if not a:
raise osv.except_osv(_('Error!'),
- _('There is no expense account define ' \
+ _('There is no expense account defined ' \
'for this product: "%s" (id:%d)') % \
(r.product_id.name, r.product_id.id,))
# Compute based on pricetype
@@ -133,7 +133,7 @@ class hr_analytic_timesheet(osv.osv):
a = r.product_id.categ_id.property_account_expense_categ.id
if not a:
raise osv.except_osv(_('Error!'),
- _('There is no expense account define ' \
+ _('There is no expense account defined ' \
'for this product: "%s" (id:%d)') % \
(r.product_id.name, r.product_id.id,))
# Compute based on pricetype
diff --git a/addons/anonymization/anonymization.py b/addons/anonymization/anonymization.py
index 0477efa5b1f..c82afde103f 100644
--- a/addons/anonymization/anonymization.py
+++ b/addons/anonymization/anonymization.py
@@ -86,11 +86,11 @@ class ir_model_fields_anonymization(osv.osv):
if context.get('manual'):
global_state = self._get_global_state(cr, uid, context=context)
if global_state == 'anonymized':
- raise osv.except_osv('Error !', "The database is currently anonymized, you cannot create, modify or delete fields.")
+ raise osv.except_osv('Error!', "The database is currently anonymized, you cannot create, modify or delete fields.")
elif global_state == 'unstable':
msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized," + \
" while some fields are not anonymized. You should try to solve this problem before trying to create, write or delete fields.")
- raise osv.except_osv('Error !', msg)
+ raise osv.except_osv('Error!', msg)
return True
@@ -357,7 +357,7 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory):
else:
msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized," + \
" while some fields are not anonymized. You should try to solve this problem before trying to do anything else.")
- raise osv.except_osv('Error !', msg)
+ raise osv.except_osv('Error!', msg)
res['arch'] = etree.tostring(eview)
@@ -521,11 +521,11 @@ class ir_model_fields_anonymize_wizard(osv.osv_memory):
# check that all the defined fields are in the 'anonymized' state
state = ir_model_fields_anonymization_model._get_global_state(cr, uid, context=context)
if state == 'clear':
- raise osv.except_osv_('Error !', "The database is not currently anonymized, you cannot reverse the anonymization.")
+ raise osv.except_osv_('Error!', "The database is not currently anonymized, you cannot reverse the anonymization.")
elif state == 'unstable':
msg = _("The database anonymization is currently in an unstable state. Some fields are anonymized," + \
" while some fields are not anonymized. You should try to solve this problem before trying to do anything.")
- raise osv.except_osv('Error !', msg)
+ raise osv.except_osv('Error!', msg)
wizards = self.browse(cr, uid, ids, context=context)
for wizard in wizards:
diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py
index ad28bbb1d57..891837f8813 100644
--- a/addons/auth_signup/res_users.py
+++ b/addons/auth_signup/res_users.py
@@ -56,19 +56,22 @@ class res_partner(osv.Model):
def _get_signup_url_for_action(self, cr, uid, ids, action='login', view_type=None, menu_id=None, res_id=None, model=None, context=None):
""" generate a signup url for the given partner ids and action, possibly overriding
the url state components (menu_id, id, view_type) """
+ if context is None:
+ context= {}
res = dict.fromkeys(ids, False)
base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
for partner in self.browse(cr, uid, ids, context):
# when required, make sure the partner has a valid signup token
- if context and context.get('signup_valid') and not partner.user_ids:
+ if context.get('signup_valid') and not partner.user_ids:
self.signup_prepare(cr, uid, [partner.id], context=context)
partner.refresh()
# the parameters to encode for the query and fragment part of url
query = {'db': cr.dbname}
- fragment = {'action': action, 'type': partner.signup_type}
+ signup_type = context.get('signup_force_type_in_url', partner.signup_type or '')
+ fragment = {'action': action, 'type': signup_type}
- if partner.signup_token:
+ if partner.signup_token and signup_type:
fragment['token'] = partner.signup_token
elif partner.user_ids:
fragment['db'] = cr.dbname
diff --git a/addons/auth_signup/static/src/js/auth_signup.js b/addons/auth_signup/static/src/js/auth_signup.js
index 545ee6cf60e..b825d683099 100644
--- a/addons/auth_signup/static/src/js/auth_signup.js
+++ b/addons/auth_signup/static/src/js/auth_signup.js
@@ -7,7 +7,7 @@ openerp.auth_signup = function(instance) {
var self = this;
this.signup_enabled = false;
this.reset_password_enabled = false;
- return this._super().then(function() {
+ return this._super().always(function() {
// Switches the login box to the select mode whith mode == [default|signup|reset]
self.on('change:login_mode', self, function() {
diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py
index 9309f790013..3497255fa76 100644
--- a/addons/base_action_rule/base_action_rule.py
+++ b/addons/base_action_rule/base_action_rule.py
@@ -66,6 +66,7 @@ class base_action_rule(osv.osv):
[('on_create', 'On Creation'), ('on_write', 'On Update'), ('on_time', 'Based on Timed Condition')],
string='When to Run'),
'trg_date_id': fields.many2one('ir.model.fields', string='Trigger Date',
+ help="When should the condition be triggered. If present, will be checked by the scheduler. If empty, will be checked at creation and update.",
domain="[('model_id', '=', model_id), ('ttype', 'in', ('date', 'datetime'))]"),
'trg_date_range': fields.integer('Delay after trigger date',
help="Delay after the trigger date." \
diff --git a/addons/base_status/base_state.py b/addons/base_status/base_state.py
index b856bbd74ad..3fe59ecbd21 100644
--- a/addons/base_status/base_state.py
+++ b/addons/base_status/base_state.py
@@ -104,7 +104,7 @@ class base_state(object):
if parent_id.change_responsible and parent_id.user_id:
data['user_id'] = parent_id.user_id.id
else:
- raise osv.except_osv(_('Error !'), _('You can not escalate, you are already at the top level regarding your sales-team category.'))
+ raise osv.except_osv(_('Error!'), _('You can not escalate, you are already at the top level regarding your sales-team category.'))
self.write(cr, uid, [case.id], data, context=context)
case.case_escalate_send_note(parent_id, context=context)
return True
diff --git a/addons/base_status/i18n/ru.po b/addons/base_status/i18n/ru.po
index 546f2772af3..2dab7ceaf31 100644
--- a/addons/base_status/i18n/ru.po
+++ b/addons/base_status/i18n/ru.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
-"PO-Revision-Date: 2012-12-28 10:04+0000\n"
+"PO-Revision-Date: 2013-06-05 07:16+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
-"X-Generator: Launchpad (build 16532)\n"
+"X-Launchpad-Export-Date: 2013-06-06 05:21+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: base_status
#: code:addons/base_status/base_state.py:107
@@ -27,13 +27,13 @@ msgstr "Ошибка !"
#: code:addons/base_status/base_state.py:166
#, python-format
msgid "%s has been <b>opened</b>."
-msgstr ""
+msgstr "%s было <b>открыто</b>."
#. module: base_status
#: code:addons/base_status/base_state.py:199
#, python-format
msgid "%s has been <b>renewed</b>."
-msgstr ""
+msgstr "%s было <b>обновлено</b>."
#. module: base_status
#: code:addons/base_status/base_stage.py:210
@@ -55,13 +55,13 @@ msgstr ""
#: code:addons/base_status/base_state.py:193
#, python-format
msgid "%s is now <b>pending</b>."
-msgstr ""
+msgstr "%s сейчас <b>в ожидании</b>."
#. module: base_status
#: code:addons/base_status/base_state.py:187
#, python-format
msgid "%s has been <b>canceled</b>."
-msgstr ""
+msgstr "%s было <b>отменено</b>."
#. module: base_status
#: code:addons/base_status/base_stage.py:210
@@ -70,9 +70,11 @@ msgid ""
"You are already at the top level of your sales-team category.\n"
"Therefore you cannot escalate furthermore."
msgstr ""
+"Вы уже на высшем уровне категории вашей команды продаж.\n"
+"Поэтому вы не можете обострить."
#. module: base_status
#: code:addons/base_status/base_state.py:181
#, python-format
msgid "%s has been <b>closed</b>."
-msgstr ""
+msgstr "%s было <b>закрыто</b>."
diff --git a/addons/base_vat/base_vat.py b/addons/base_vat/base_vat.py
index e7501334997..52db18b7307 100644
--- a/addons/base_vat/base_vat.py
+++ b/addons/base_vat/base_vat.py
@@ -83,6 +83,8 @@ class res_partner(osv.osv):
Check the VAT number depending of the country.
http://sima-pc.com/nif.php
'''
+ if not ustr(country_code).encode('utf-8').isalpha():
+ return False
check_func_name = 'check_vat_' + country_code
check_func = getattr(self, check_func_name, None) or \
getattr(vatnumber, check_func_name, None)
diff --git a/addons/claim_from_delivery/i18n/ru.po b/addons/claim_from_delivery/i18n/ru.po
index 8d97086c22a..ffcf8fc2781 100644
--- a/addons/claim_from_delivery/i18n/ru.po
+++ b/addons/claim_from_delivery/i18n/ru.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
-"PO-Revision-Date: 2013-05-27 12:19+0000\n"
+"PO-Revision-Date: 2013-06-05 07:11+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-05-28 05:17+0000\n"
-"X-Generator: Launchpad (build 16640)\n"
+"X-Launchpad-Export-Date: 2013-06-06 05:21+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: claim_from_delivery
#: view:stock.picking.out:0
msgid "Claims"
-msgstr ""
+msgstr "Рекламации"
#. module: claim_from_delivery
#: model:res.request.link,name:claim_from_delivery.request_link_claim_from_delivery
@@ -30,7 +30,7 @@ msgstr "Заказ доставки"
#. module: claim_from_delivery
#: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery
msgid "Claim From Delivery"
-msgstr ""
+msgstr "Рекламация по доставке"
#~ msgid "Claim from delivery"
#~ msgstr "Претензия из доставки"
diff --git a/addons/crm/base_partner_merge.py b/addons/crm/base_partner_merge.py
index 0a8e37b14b7..42e1ab7c7ec 100644
--- a/addons/crm/base_partner_merge.py
+++ b/addons/crm/base_partner_merge.py
@@ -264,7 +264,7 @@ class MergePartnerAutomatic(osv.TransientModel):
values = dict()
for column, field in columns.iteritems():
- if field._type not in ('many2many', 'one2many', 'function'):
+ if field._type not in ('many2many', 'one2many') and not isinstance(field, fields.function):
for item in itertools.chain(src_partners, [dst_partner]):
if item[column]:
values[column] = write_serializer(column, item[column])
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index 455ad89003c..b8673e73927 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -77,12 +77,12 @@ class crm_lead(base_stage, format_address, osv.osv):
_track = {
'state': {
- 'crm.mt_lead_create': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'new',
+ 'crm.mt_lead_create': lambda self, cr, uid, obj, ctx=None: obj['state'] in ['new', 'draft'],
'crm.mt_lead_won': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'done',
'crm.mt_lead_lost': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'cancel',
},
'stage_id': {
- 'crm.mt_lead_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'cancel', 'done'],
+ 'crm.mt_lead_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'draft', 'cancel', 'done'],
},
}
@@ -103,7 +103,9 @@ class crm_lead(base_stage, format_address, osv.osv):
if vals.get('type'):
ctx['default_type'] = vals['type']
vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx)
- return super(crm_lead, self).create(cr, uid, vals, context=context)
+ # context: no_log, because subtype already handle this
+ create_context = dict(context, mail_create_nolog=True)
+ return super(crm_lead, self).create(cr, uid, vals, context=create_context)
def _get_default_section_id(self, cr, uid, context=None):
""" Gives default section by checking if present in the context """
@@ -678,8 +680,9 @@ class crm_lead(base_stage, format_address, osv.osv):
merged_data['stage_id'] = section_stage_ids and section_stage_ids[0] or False
# Write merged data into first opportunity
self.write(cr, uid, [highest.id], merged_data, context=context)
- # Delete tail opportunities
- self.unlink(cr, uid, [x.id for x in tail_opportunities], context=context)
+ # Delete tail opportunities
+ # We use the SUPERUSER to avoid access rights issues because as the user had the rights to see the records it should be safe to do so
+ self.unlink(cr, SUPERUSER_ID, [x.id for x in tail_opportunities], context=context)
return highest.id
diff --git a/addons/crm/i18n/ru.po b/addons/crm/i18n/ru.po
index ec2a9f35ee5..0029293866c 100644
--- a/addons/crm/i18n/ru.po
+++ b/addons/crm/i18n/ru.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-05-30 13:52+0000\n"
+"PO-Revision-Date: 2013-06-06 09:56+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-05-31 05:38+0000\n"
-"X-Generator: Launchpad (build 16660)\n"
+"X-Launchpad-Export-Date: 2013-06-07 05:48+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: crm
#: view:crm.lead.report:0
@@ -56,6 +56,11 @@ msgid ""
"Description: [[object.description]]\n"
" "
msgstr ""
+"Внимание, необработанный кандидат создан более 5 дней назад.\n"
+"Название: [[object.name ]]\n"
+"Идентификатор: [[object.id ]]\n"
+"Описание: [[object.description]]\n"
+" "
#. module: crm
#: field:crm.opportunity2phonecall,action:0
@@ -953,7 +958,7 @@ msgstr "Следующее действие"
#: code:addons/crm/crm_lead.py:763
#, python-format
msgid "<b>Partner</b> set to <em>%s</em>."
-msgstr ""
+msgstr "<b>Партнер</b> установлен как <em>%s</em>."
#. module: crm
#: selection:crm.lead.report,state:0
@@ -1894,7 +1899,7 @@ msgstr "Кандидаты"
#: code:addons/crm/crm_lead.py:563
#, python-format
msgid "Merged leads"
-msgstr ""
+msgstr "Объединенные кандидаты"
#. module: crm
#: model:crm.case.categ,name:crm.categ_oppor5
@@ -2721,7 +2726,7 @@ msgstr "Улица (2-я строка)"
#. module: crm
#: field:sale.config.settings,module_crm_helpdesk:0
msgid "Manage Helpdesk and Support"
-msgstr ""
+msgstr "Управление поддержкой"
#. module: crm
#: field:crm.lead.report,delay_open:0
@@ -2830,7 +2835,7 @@ msgstr "Дата создания"
#. module: crm
#: view:crm.lead:0
msgid "at"
-msgstr ""
+msgstr "в"
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead1
diff --git a/addons/crm/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py
index e67b7c0c7be..3c847ade42a 100644
--- a/addons/crm/wizard/crm_lead_to_opportunity.py
+++ b/addons/crm/wizard/crm_lead_to_opportunity.py
@@ -86,7 +86,7 @@ class crm_lead2opportunity_partner(osv.osv_memory):
lead_obj = self.pool.get('crm.lead')
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
if lead.state in ['done', 'cancel']:
- raise osv.except_osv(_("Warning !"), _("Closed/Cancelled leads cannot be converted into opportunities."))
+ raise osv.except_osv(_("Warning!"), _("Closed/Cancelled leads cannot be converted into opportunities."))
return False
def _convert_opportunity(self, cr, uid, ids, vals, context=None):
diff --git a/addons/crm_helpdesk/i18n/zh_CN.po b/addons/crm_helpdesk/i18n/zh_CN.po
index 4a80e7f9385..13843f911c9 100644
--- a/addons/crm_helpdesk/i18n/zh_CN.po
+++ b/addons/crm_helpdesk/i18n/zh_CN.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
-"PO-Revision-Date: 2012-12-14 13:33+0000\n"
-"Last-Translator: 盈通 ccdos <ccdos@163.com>\n"
+"PO-Revision-Date: 2013-06-07 05:02+0000\n"
+"Last-Translator: PeterGao <306739889@qq.com>\n"
"Language-Team: Chinese (Simplified) <zh_CN@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: 2013-03-16 05:46+0000\n"
-"X-Generator: Launchpad (build 16532)\n"
+"X-Launchpad-Export-Date: 2013-06-08 05:52+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: crm_helpdesk
#: field:crm.helpdesk.report,delay_close:0
@@ -656,6 +656,12 @@ msgid ""
" \n"
"If the case needs to be reviewed then the status is set to 'Pending'."
msgstr ""
+"当一个“case(事件)\"被新创建后,这个“case(事件)\"的状态为“草稿”状态。 "
+" \n"
+"若这个“case(事件)\"正在处理中,这个“case(事件)\"的状态为“开启”状态。\n"
+"若这个“case(事件)\"已处理完结,这个“case(事件)\"的状态为“结单”状态。 "
+" \n"
+"若这个“case(事件)\"需暂停再议,这个“case(事件)\"的状态为“挂起”状态。"
#. module: crm_helpdesk
#: help:crm.helpdesk,message_ids:0
diff --git a/addons/crm_partner_assign/i18n/ru.po b/addons/crm_partner_assign/i18n/ru.po
index 53a2929be4e..fa995c8e7a1 100644
--- a/addons/crm_partner_assign/i18n/ru.po
+++ b/addons/crm_partner_assign/i18n/ru.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
-"PO-Revision-Date: 2013-05-30 14:10+0000\n"
+"PO-Revision-Date: 2013-06-06 10:24+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-05-31 05:38+0000\n"
-"X-Generator: Launchpad (build 16660)\n"
+"X-Launchpad-Export-Date: 2013-06-07 05:48+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: crm_partner_assign
#: field:crm.lead.report.assign,delay_close:0
@@ -670,7 +670,7 @@ msgstr ""
#. module: crm_partner_assign
#: field:crm.partner.report.assign,period_id:0
msgid "Invoice Period"
-msgstr ""
+msgstr "Период счета"
#. module: crm_partner_assign
#: model:ir.model,name:crm_partner_assign.model_res_partner_grade
@@ -706,6 +706,8 @@ msgid ""
"Cannot contact geolocation servers. Please make sure that your internet "
"connection is up and running (%s)."
msgstr ""
+"Не удается связаться с сервером геолокации. Пожалуйста, убедитесь, что ваше "
+"подключение к интернету работает (%s)."
#. module: crm_partner_assign
#: selection:crm.lead.report.assign,month:0
diff --git a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
index 924f96180cc..724102a84b1 100644
--- a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
+++ b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
@@ -124,6 +124,7 @@ class crm_lead_forward_to_partner(osv.TransientModel):
lead_ids = context and context.get('active_ids', []) or []
value = self.default_get(cr, uid, ['body', 'email_to', 'email_cc', 'subject', 'history_mode'], context=context)
value.pop('composition_mode')
+ self.pool.get('crm.lead').message_subscribe(cr, uid, lead_ids, [partner.id for partner in wizard.partner_ids], context=context)
self.write(cr, uid, ids, value, context=context)
return self.send_mail(cr, uid, ids, context=context)
diff --git a/addons/delivery/sale.py b/addons/delivery/sale.py
index 86a518ebca9..1b797290632 100644
--- a/addons/delivery/sale.py
+++ b/addons/delivery/sale.py
@@ -51,10 +51,10 @@ class sale_order(osv.osv):
for order in self.browse(cr, uid, ids, context=context):
grid_id = carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id)
if not grid_id:
- raise osv.except_osv(_('No grid available !'), _('No grid matching for this carrier !'))
+ raise osv.except_osv(_('No Grid Available!'), _('No grid matching for this carrier!'))
if not order.state in ('draft'):
- raise osv.except_osv(_('Order not in draft state !'), _('The order state have to be draft to add delivery lines.'))
+ raise osv.except_osv(_('Order not in Draft State!'), _('The order state have to be draft to add delivery lines.'))
grid = grid_obj.browse(cr, uid, grid_id, context=context)
diff --git a/addons/document_page/document_page_view.xml b/addons/document_page/document_page_view.xml
index 08c77647d17..4d0b5596e75 100644
--- a/addons/document_page/document_page_view.xml
+++ b/addons/document_page/document_page_view.xml
@@ -26,6 +26,7 @@
<tree string="Document Page">
<field name="name"/>
<field name="parent_id"/>
+ <field name="create_uid" invisible="1"/>
<field name="write_uid"/>
<field name="write_date"/>
</tree>
diff --git a/addons/edi/models/edi.py b/addons/edi/models/edi.py
index bfd59dae15a..1b9e0c4df08 100644
--- a/addons/edi/models/edi.py
+++ b/addons/edi/models/edi.py
@@ -126,7 +126,7 @@ class edi(osv.AbstractModel):
module = edi_document.get('__import_module') or edi_document.get('__module')
assert module, 'a `__module` or `__import_module` attribute is required in each EDI document.'
if module != 'base' and not ir_module.search(cr, uid, [('name','=',module),('state','=','installed')]):
- raise osv.except_osv(_('Missing application.'),
+ raise osv.except_osv(_('Missing Application.'),
_("The document you are trying to import requires the OpenERP `%s` application. "
"You can install it by connecting as the administrator and opening the configuration assistant.")%(module,))
model = edi_document.get('__import_model') or edi_document.get('__model')
diff --git a/addons/email_template/i18n/ru.po b/addons/email_template/i18n/ru.po
index 2e592ecea35..b16433fddd5 100644
--- a/addons/email_template/i18n/ru.po
+++ b/addons/email_template/i18n/ru.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
-"PO-Revision-Date: 2013-05-30 13:33+0000\n"
+"PO-Revision-Date: 2013-06-05 07:10+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-05-31 05:38+0000\n"
-"X-Generator: Launchpad (build 16660)\n"
+"X-Launchpad-Export-Date: 2013-06-06 05:21+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: email_template
#: field:email.template,email_from:0
@@ -254,7 +254,7 @@ msgstr "Просмотр"
#. module: email_template
#: view:email_template.preview:0
msgid "Using sample document"
-msgstr ""
+msgstr "Используя образец документа"
#. module: email_template
#: view:email.template:0
diff --git a/addons/fetchmail/security/ir.model.access.csv b/addons/fetchmail/security/ir.model.access.csv
index 7deea6eb9f4..c006546659f 100644
--- a/addons/fetchmail/security/ir.model.access.csv
+++ b/addons/fetchmail/security/ir.model.access.csv
@@ -1,3 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_fetchmail_server,fetchmail.server,model_fetchmail_server,,1,0,0,0
access_fetchmail_server,fetchmail.server,model_fetchmail_server,base.group_system,1,1,1,1
diff --git a/addons/google_docs/i18n/ln.po b/addons/google_docs/i18n/ln.po
new file mode 100644
index 00000000000..24c26b98920
--- /dev/null
+++ b/addons/google_docs/i18n/ln.po
@@ -0,0 +1,188 @@
+# Lingala translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-06-05 13:00+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Lingala <ln@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: 2013-06-06 05:21+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
+
+#. module: google_docs
+#: code:addons/google_docs/google_docs.py:167
+#, python-format
+msgid "Key Error!"
+msgstr ""
+
+#. module: google_docs
+#: view:google.docs.config:0
+msgid ""
+"for a presentation (slide show) document with url like "
+"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id"
+".p`, the ID is `presentation:123456789`"
+msgstr ""
+
+#. module: google_docs
+#: view:google.docs.config:0
+msgid ""
+"for a text document with url like "
+"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is "
+"`document:123456789`"
+msgstr ""
+
+#. module: google_docs
+#: field:google.docs.config,gdocs_resource_id:0
+msgid "Google Resource ID to Use as Template"
+msgstr ""
+
+#. module: google_docs
+#: view:google.docs.config:0
+msgid ""
+"for a drawing document with url like "
+"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is "
+"`drawings:123456789`"
+msgstr ""
+
+#. module: google_docs
+#. openerp-web
+#: code:addons/google_docs/static/src/xml/gdocs.xml:6
+#, python-format
+msgid "Add Google Doc..."
+msgstr ""
+
+#. module: google_docs
+#: view:google.docs.config:0
+msgid ""
+"This is the id of the template document, on google side. You can find it "
+"thanks to its URL:"
+msgstr ""
+
+#. module: google_docs
+#: model:ir.model,name:google_docs.model_google_docs_config
+msgid "Google Docs templates config"
+msgstr ""
+
+#. module: google_docs
+#. openerp-web
+#: code:addons/google_docs/static/src/js/gdocs.js:25
+#, python-format
+msgid ""
+"The user google credentials are not set yet. Contact your administrator for "
+"help."
+msgstr ""
+
+#. module: google_docs
+#: view:google.docs.config:0
+msgid ""
+"for a spreadsheet document with url like "
+"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, "
+"the ID is `spreadsheet:123456789`"
+msgstr ""
+
+#. module: google_docs
+#: code:addons/google_docs/google_docs.py:129
+#, python-format
+msgid ""
+"Your resource id is not correct. You can find the id in the google docs URL."
+msgstr ""
+
+#. module: google_docs
+#: code:addons/google_docs/google_docs.py:153
+#, python-format
+msgid "Creating google docs may only be done by one at a time."
+msgstr ""
+
+#. module: google_docs
+#: code:addons/google_docs/google_docs.py:83
+#: code:addons/google_docs/google_docs.py:129
+#: code:addons/google_docs/google_docs.py:153
+#, python-format
+msgid "Google Docs Error!"
+msgstr ""
+
+#. module: google_docs
+#: code:addons/google_docs/google_docs.py:83
+#, python-format
+msgid "Check your google configuration in Users/Users/Synchronization tab."
+msgstr ""
+
+#. module: google_docs
+#: model:ir.ui.menu,name:google_docs.menu_gdocs_config
+msgid "Google Docs configuration"
+msgstr ""
+
+#. module: google_docs
+#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config
+#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config
+msgid "Models configuration"
+msgstr ""
+
+#. module: google_docs
+#: field:google.docs.config,model_id:0
+msgid "Model"
+msgstr ""
+
+#. module: google_docs
+#. openerp-web
+#: code:addons/google_docs/static/src/js/gdocs.js:28
+#, python-format
+msgid "User Google credentials are not yet set."
+msgstr ""
+
+#. module: google_docs
+#: code:addons/google_docs/google_docs.py:167
+#, python-format
+msgid "Your Google Doc Name Pattern's key does not found in object."
+msgstr ""
+
+#. module: google_docs
+#: help:google.docs.config,name_template:0
+msgid ""
+"Choose how the new google docs will be named, on google side. Eg. "
+"gdoc_%(field_name)s"
+msgstr ""
+
+#. module: google_docs
+#: view:google.docs.config:0
+msgid "Google Docs Configuration"
+msgstr ""
+
+#. module: google_docs
+#: help:google.docs.config,gdocs_resource_id:0
+msgid ""
+"\n"
+"This is the id of the template document, on google side. You can find it "
+"thanks to its URL: \n"
+"*for a text document with url like "
+"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is "
+"`document:123456789`\n"
+"*for a spreadsheet document with url like "
+"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, "
+"the ID is `spreadsheet:123456789`\n"
+"*for a presentation (slide show) document with url like "
+"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id"
+".p`, the ID is `presentation:123456789`\n"
+"*for a drawing document with url like "
+"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is "
+"`drawings:123456789`\n"
+"...\n"
+msgstr ""
+
+#. module: google_docs
+#: model:ir.model,name:google_docs.model_ir_attachment
+msgid "ir.attachment"
+msgstr ""
+
+#. module: google_docs
+#: field:google.docs.config,name_template:0
+msgid "Google Doc Name Pattern"
+msgstr ""
diff --git a/addons/hr_attendance/wizard/hr_attendance_error.py b/addons/hr_attendance/wizard/hr_attendance_error.py
index 137bac30215..82d75149428 100644
--- a/addons/hr_attendance/wizard/hr_attendance_error.py
+++ b/addons/hr_attendance/wizard/hr_attendance_error.py
@@ -46,7 +46,7 @@ class hr_attendance_error(osv.osv_memory):
cr.execute("SELECT id FROM hr_attendance WHERE employee_id IN %s AND to_char(name,'YYYY-mm-dd')<=%s AND to_char(name,'YYYY-mm-dd')>=%s AND action IN %s ORDER BY name" ,(tuple(context['active_ids']), date_to, date_from, tuple(['sign_in','sign_out'])))
attendance_ids = [x[0] for x in cr.fetchall()]
if not attendance_ids:
- raise osv.except_osv(_('No Data Available !'), _('No records are found for your selection!'))
+ raise osv.except_osv(_('No Data Available!'), _('No records are found for your selection!'))
attendance_records = self.pool.get('hr.attendance').browse(cr, uid, attendance_ids, context=context)
for rec in attendance_records:
diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py
index 73daa64f841..8d707baa50e 100644
--- a/addons/hr_expense/hr_expense.py
+++ b/addons/hr_expense/hr_expense.py
@@ -57,10 +57,7 @@ class hr_expense_expense(osv.osv):
def _get_currency(self, cr, uid, context=None):
user = self.pool.get('res.users').browse(cr, uid, [uid], context=context)[0]
- if user.company_id:
- return user.company_id.currency_id.id
- else:
- return self.pool.get('res.currency').search(cr, uid, [('rate','=',1.0)], context=context)[0]
+ return user.company_id.currency_id.id
_name = "hr.expense.expense"
_inherit = ['mail.thread']
@@ -99,11 +96,13 @@ class hr_expense_expense(osv.osv):
('cancelled', 'Refused'),
('confirm', 'Waiting Approval'),
('accepted', 'Approved'),
- ('done', 'Done'),
+ ('done', 'Waiting Payment'),
+ ('paid', 'Paid'),
],
'Status', readonly=True, track_visibility='onchange',
help='When the expense request is created the status is \'Draft\'.\n It is confirmed by the user and request is sent to admin, the status is \'Waiting Confirmation\'.\
- \nIf the admin accepts it, the status is \'Accepted\'.\n If a receipt is made for the expense request, the status is \'Done\'.'),
+ \nIf the admin accepts it, the status is \'Accepted\'.\n If the accounting entries are made for the expense request, the status is \'Waiting Payment\'.'),
+
}
_defaults = {
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'hr.employee', context=c),
@@ -114,6 +113,12 @@ class hr_expense_expense(osv.osv):
'currency_id': _get_currency,
}
+ def copy(self, cr, uid, id, default=None, context=None):
+ if default is None:
+ default = {}
+ default.update(account_move_id=False)
+ return super(hr_expense_expense, self).copy(cr, uid, id, default=default, context=context)
+
def unlink(self, cr, uid, ids, context=None):
for rec in self.browse(cr, uid, ids, context=context):
if rec.state != 'draft':
@@ -282,7 +287,6 @@ class hr_expense_expense(osv.osv):
tax_code_found= False
#Calculate tax according to default tax on product
-
taxes = []
#Taken from product_id_onchange in account.invoice
if line.product_id:
@@ -319,8 +323,11 @@ class hr_expense_expense(osv.osv):
tax_code_found = True
res[-1]['tax_code_id'] = tax_code_id
res[-1]['tax_amount'] = cur_obj.compute(cr, uid, exp.currency_id.id, company_currency, tax_amount, context={'date': exp.date_confirm})
-
- #Will create the tax here as we don't have the access
+ ##
+ is_price_include = tax_obj.read(cr,uid,tax['id'],['price_include'],context)['price_include']
+ if is_price_include:
+ ## We need to deduce the price for the tax
+ res[-1]['price'] = res[-1]['price'] - (tax['amount'] * tax['base_sign'] or 0.0)
assoc_tax = {
'type':'tax',
'name':tax['name'],
@@ -449,4 +456,26 @@ class hr_expense_line(osv.osv):
return res
+class account_move_line(osv.osv):
+ _inherit = "account.move.line"
+
+ def reconcile(self, cr, uid, ids, type='auto', writeoff_acc_id=False, writeoff_period_id=False, writeoff_journal_id=False, context=None):
+ res = super(account_move_line, self).reconcile(cr, uid, ids, type=type, writeoff_acc_id=writeoff_acc_id, writeoff_period_id=writeoff_period_id, writeoff_journal_id=writeoff_journal_id, context=context)
+ #when making a full reconciliation of account move lines 'ids', we may need to recompute the state of some hr.expense
+ account_move_ids = [aml.move_id.id for aml in self.browse(cr, uid, ids, context=context)]
+ expense_obj = self.pool.get('hr.expense.expense')
+ currency_obj = self.pool.get('res.currency')
+ if account_move_ids:
+ expense_ids = expense_obj.search(cr, uid, [('account_move_id', 'in', account_move_ids)], context=context)
+ for expense in expense_obj.browse(cr, uid, expense_ids, context=context):
+ if expense.state == 'done':
+ #making the postulate it has to be set paid, then trying to invalidate it
+ new_status_is_paid = True
+ for aml in expense.account_move_id.line_id:
+ if aml.account_id.type == 'payable' and not currency_obj.is_zero(cr, uid, expense.company_id.currency_id, aml.amount_residual):
+ new_status_is_paid = False
+ if new_status_is_paid:
+ expense_obj.write(cr, uid, [expense.id], {'state': 'paid'}, context=context)
+ return res
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml
index 10abe95d892..ca882406d63 100644
--- a/addons/hr_expense/hr_expense_view.xml
+++ b/addons/hr_expense/hr_expense_view.xml
@@ -68,7 +68,7 @@
<button name="draft" states="confirm,cancelled" string="Set to Draft" type="workflow" groups="base.group_hr_user" />
<button name="done" states="accepted" string="Generate Accounting Entries" type="workflow" groups="account.group_account_invoice" class="oe_highlight"/>
<button name="action_view_move" states="done" string="Open Accounting Entries" type="object" groups="account.group_account_invoice"/>
- <field name="state" widget="statusbar" statusbar_visible="draft,confirm,accepted,done" statusbar_colors='{"confirm":"blue","cancelled":"red"}'/>
+ <field name="state" widget="statusbar" statusbar_visible="draft,confirm,accepted,done,paid" statusbar_colors='{"confirm":"blue","cancelled":"red"}'/>
</header>
<sheet>
<group>
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index 5828790c152..5ffbff10040 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -40,8 +40,8 @@
<field name="name">Leave Request</field>
<field name="model">hr.holidays</field>
<field name="arch" type="xml">
- <calendar string="Leave Request" color="user_id" date_start="date_from" date_stop="date_to">
- <field name="user_id"/>
+ <calendar string="Leave Request" color="employee_id" date_start="date_from" date_stop="date_to">
+ <field name="employee_id"/>
<field name="holiday_status_id"/>
</calendar>
</field>
diff --git a/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py b/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py
index 5837472be5f..3bf8b339300 100644
--- a/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py
+++ b/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py
@@ -49,7 +49,7 @@ class hr_payslip_employees(osv.osv_memory):
to_date = run_data.get('date_end', False)
credit_note = run_data.get('credit_note', False)
if not data['employee_ids']:
- raise osv.except_osv(_("Warning !"), _("You must select employee(s) to generate payslip(s)."))
+ raise osv.except_osv(_("Warning!"), _("You must select employee(s) to generate payslip(s)."))
for emp in emp_pool.browse(cr, uid, data['employee_ids'], context=context):
slip_data = slip_pool.onchange_employee_id(cr, uid, [], from_date, to_date, emp.id, contract_id=False, context=context)
res = {
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
index f8c27bded5e..6c4f6022c39 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
@@ -181,7 +181,7 @@ class account_analytic_line(osv.osv):
for account in analytic_account_obj.browse(cr, uid, list(account_ids), context=context):
partner = account.partner_id
if (not partner) or not (account.pricelist_id):
- raise osv.except_osv(_('Analytic Account incomplete !'),
+ raise osv.except_osv(_('Analytic Account Incomplete!'),
_('Contract incomplete. Please fill in the Customer and Pricelist fields.'))
date_due = False
diff --git a/addons/hr_timesheet_sheet/static/src/js/timesheet.js b/addons/hr_timesheet_sheet/static/src/js/timesheet.js
index fe7d0c82767..e7d13c425b6 100644
--- a/addons/hr_timesheet_sheet/static/src/js/timesheet.js
+++ b/addons/hr_timesheet_sheet/static/src/js/timesheet.js
@@ -163,24 +163,42 @@ openerp.hr_timesheet_sheet = function(instance) {
this.dfm = undefined;
}
},
+ is_valid_value:function(value){
+ var split_value = value.split(":");
+ var valid_value = true;
+ if (split_value.length > 2)
+ return false;
+ _.detect(split_value,function(num){
+ if(isNaN(num)){
+ valid_value = false;
+ }
+ });
+ return valid_value;
+ },
display_data: function() {
var self = this;
self.$el.html(QWeb.render("hr_timesheet_sheet.WeeklyTimesheet", {widget: self}));
_.each(self.accounts, function(account) {
_.each(_.range(account.days.length), function(day_count) {
if (!self.get('effective_readonly')) {
- self.get_box(account, day_count).val(self.sum_box(account, day_count)).change(function() {
- var num = Number($(this).val());
+ self.get_box(account, day_count).val(self.sum_box(account, day_count, true)).change(function() {
+ var num = $(this).val();
+ if (self.is_valid_value(num)){
+ num = (num == 0)?0:Number(self.parse_client(num));
+ }
if (isNaN(num)) {
- $(this).val(self.sum_box(account, day_count));
+ $(this).val(self.sum_box(account, day_count, true));
} else {
account.days[day_count].lines[0].unit_amount += num - self.sum_box(account, day_count);
self.display_totals();
self.sync();
+ if(!isNaN($(this).val())){
+ $(this).val(self.sum_box(account, day_count, true));
+ }
}
});
} else {
- self.get_box(account, day_count).html(self.sum_box(account, day_count));
+ self.get_box(account, day_count).html(self.sum_box(account, day_count, true));
}
});
});
@@ -247,12 +265,12 @@ openerp.hr_timesheet_sheet = function(instance) {
get_super_total: function() {
return this.$('.oe_timesheet_weekly_supertotal');
},
- sum_box: function(account, day_count) {
+ sum_box: function(account, day_count, show_value_in_hour) {
var line_total = 0;
_.each(account.days[day_count].lines, function(line) {
line_total += line.unit_amount;
});
- return line_total;
+ return (show_value_in_hour && line_total != 0)?this.format_client(line_total):line_total;
},
display_totals: function() {
var self = this;
@@ -266,12 +284,12 @@ openerp.hr_timesheet_sheet = function(instance) {
day_tots[day_count] += sum;
super_tot += sum;
});
- self.get_total(account).html(acc_tot);
+ self.get_total(account).html(self.format_client(acc_tot));
});
_.each(_.range(self.dates.length), function(day_count) {
- self.get_day_total(day_count).html(day_tots[day_count]);
+ self.get_day_total(day_count).html(self.format_client(day_tots[day_count]));
});
- self.get_super_total().html(super_tot);
+ self.get_super_total().html(self.format_client(super_tot));
},
sync: function() {
var self = this;
@@ -279,6 +297,14 @@ openerp.hr_timesheet_sheet = function(instance) {
self.set({sheets: this.generate_o2m_value()});
self.setting = false;
},
+ //converts hour value to float
+ parse_client: function(value) {
+ return instance.web.parse_value(value, { type:"float_time" });
+ },
+ //converts float value to hour
+ format_client:function(value){
+ return instance.web.format_value(value, { type:"float_time" });
+ },
generate_o2m_value: function() {
var self = this;
var ops = [];
diff --git a/addons/im/im.py b/addons/im/im.py
index 0de9ea8c79b..cee1705ec35 100644
--- a/addons/im/im.py
+++ b/addons/im/im.py
@@ -90,79 +90,6 @@ POLL_TIMER = 30
DISCONNECTION_TIMER = POLL_TIMER + 5
WATCHER_ERROR_DELAY = 10
-if openerp.evented:
- import gevent
- import gevent.event
-
- class ImWatcher(object):
- watchers = {}
-
- @staticmethod
- def get_watcher(db_name):
- if not ImWatcher.watchers.get(db_name):
- ImWatcher(db_name)
- return ImWatcher.watchers[db_name]
-
- def __init__(self, db_name):
- self.db_name = db_name
- ImWatcher.watchers[db_name] = self
- self.waiting = 0
- self.wait_id = 0
- self.users = {}
- self.users_watch = {}
- gevent.spawn(self.loop)
-
- def loop(self):
- _logger.info("Begin watching on channel im_channel for database " + self.db_name)
- stop = False
- while not stop:
- try:
- registry = openerp.modules.registry.RegistryManager.get(self.db_name)
- with registry.cursor() as cr:
- listen_channel(cr, "im_channel", self.handle_message, self.check_stop)
- stop = True
- except:
- # if something crash, we wait some time then try again
- _logger.exception("Exception during watcher activity")
- time.sleep(WATCHER_ERROR_DELAY)
- _logger.info("End watching on channel im_channel for database " + self.db_name)
- del ImWatcher.watchers[self.db_name]
-
- def handle_message(self, message):
- if message["type"] == "message":
- for waiter in self.users.get(message["receiver"], {}).values():
- waiter.set()
- else: #type status
- for waiter in self.users_watch.get(message["user"], {}).values():
- waiter.set()
-
- def check_stop(self):
- return self.waiting == 0
-
- def _get_wait_id(self):
- self.wait_id += 1
- return self.wait_id
-
- def stop(self, user_id, watch_users, timeout=None):
- wait_id = self._get_wait_id()
- event = gevent.event.Event()
- self.waiting += 1
- self.users.setdefault(user_id, {})[wait_id] = event
- for watch in watch_users:
- self.users_watch.setdefault(watch, {})[wait_id] = event
- try:
- event.wait(timeout)
- finally:
- for watch in watch_users:
- del self.users_watch[watch][wait_id]
- if len(self.users_watch[watch]) == 0:
- del self.users_watch[watch]
- del self.users[user_id][wait_id]
- if len(self.users[user_id]) == 0:
- del self.users[user_id]
- self.waiting -= 1
-
-
class LongPollingController(openerp.addons.web.http.Controller):
_cp_path = '/longpolling/im'
@@ -171,6 +98,7 @@ class LongPollingController(openerp.addons.web.http.Controller):
assert_uuid(uuid)
if not openerp.evented:
raise Exception("Not usable in a server not running gevent")
+ from openerp.addons.im.watcher import ImWatcher
if db is not None:
req.session._db = db
req.session._uid = uid
diff --git a/addons/im/security/ir.model.access.csv b/addons/im/security/ir.model.access.csv
index ed639353e21..db3fe77f690 100644
--- a/addons/im/security/ir.model.access.csv
+++ b/addons/im/security/ir.model.access.csv
@@ -1,3 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_im_message,im.message,model_im_message,base.group_user,1,0,1,0
-access_im_user,im.user,model_im_user,base.group_user,1,1,1,0 \ No newline at end of file
+access_im_user,im.user,model_im_user,,1,1,1,0 \ No newline at end of file
diff --git a/addons/im/static/src/audio/Ting.mp3 b/addons/im/static/src/audio/Ting.mp3
index 6fd090a89ce..ffbb77144b2 100644
--- a/addons/im/static/src/audio/Ting.mp3
+++ b/addons/im/static/src/audio/Ting.mp3
Binary files differ
diff --git a/addons/im/static/src/audio/Ting.ogg b/addons/im/static/src/audio/Ting.ogg
index 8d17ea85bd3..74ee13a4e5a 100644
--- a/addons/im/static/src/audio/Ting.ogg
+++ b/addons/im/static/src/audio/Ting.ogg
Binary files differ
diff --git a/addons/im/static/src/js/im.js b/addons/im/static/src/js/im.js
index b21a339cb84..a271c9eccf0 100644
--- a/addons/im/static/src/js/im.js
+++ b/addons/im/static/src/js/im.js
@@ -284,6 +284,10 @@ openerp.im = function(instance) {
return this.activated;
},
create_ting: function() {
+ if (typeof(Audio) === "undefined") {
+ this.ting = {play: function() {}};
+ return;
+ }
var kitten = jQuery.param !== undefined && jQuery.deparam(jQuery.param.querystring()).kitten !== undefined;
this.ting = new Audio(instance.webclient.session.origin + "/im/static/src/audio/" + (kitten ? "purr" : "Ting") +
(new Audio().canPlayType("audio/ogg; codecs=vorbis") ? ".ogg" : ".mp3"));
@@ -408,6 +412,9 @@ openerp.im = function(instance) {
return;
}
var mes = this.$("input").val();
+ if (! mes.trim()) {
+ return;
+ }
this.$("input").val("");
var send_it = _.bind(function() {
var model = new instance.web.Model("im.message");
diff --git a/addons/im/watcher.py b/addons/im/watcher.py
new file mode 100644
index 00000000000..b8cb74df5ba
--- /dev/null
+++ b/addons/im/watcher.py
@@ -0,0 +1,84 @@
+
+import openerp
+import openerp.tools.config
+import openerp.modules.registry
+from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
+import datetime
+from openerp.osv import osv, fields
+import time
+import logging
+import json
+import select
+import gevent
+import gevent.event
+from openerp.addons.im.im import *
+
+_logger = logging.getLogger(__name__)
+
+class ImWatcher(object):
+ watchers = {}
+
+ @staticmethod
+ def get_watcher(db_name):
+ if not ImWatcher.watchers.get(db_name):
+ ImWatcher(db_name)
+ return ImWatcher.watchers[db_name]
+
+ def __init__(self, db_name):
+ self.db_name = db_name
+ ImWatcher.watchers[db_name] = self
+ self.waiting = 0
+ self.wait_id = 0
+ self.users = {}
+ self.users_watch = {}
+ gevent.spawn(self.loop)
+
+ def loop(self):
+ _logger.info("Begin watching on channel im_channel for database " + self.db_name)
+ stop = False
+ while not stop:
+ try:
+ registry = openerp.modules.registry.RegistryManager.get(self.db_name)
+ with registry.cursor() as cr:
+ listen_channel(cr, "im_channel", self.handle_message, self.check_stop)
+ stop = True
+ except:
+ # if something crash, we wait some time then try again
+ _logger.exception("Exception during watcher activity")
+ time.sleep(WATCHER_ERROR_DELAY)
+ _logger.info("End watching on channel im_channel for database " + self.db_name)
+ del ImWatcher.watchers[self.db_name]
+
+ def handle_message(self, message):
+ if message["type"] == "message":
+ for waiter in self.users.get(message["receiver"], {}).values():
+ waiter.set()
+ else: #type status
+ for waiter in self.users_watch.get(message["user"], {}).values():
+ waiter.set()
+
+ def check_stop(self):
+ return self.waiting == 0
+
+ def _get_wait_id(self):
+ self.wait_id += 1
+ return self.wait_id
+
+ def stop(self, user_id, watch_users, timeout=None):
+ wait_id = self._get_wait_id()
+ event = gevent.event.Event()
+ self.waiting += 1
+ self.users.setdefault(user_id, {})[wait_id] = event
+ for watch in watch_users:
+ self.users_watch.setdefault(watch, {})[wait_id] = event
+ try:
+ event.wait(timeout)
+ finally:
+ for watch in watch_users:
+ del self.users_watch[watch][wait_id]
+ if len(self.users_watch[watch]) == 0:
+ del self.users_watch[watch]
+ del self.users[user_id][wait_id]
+ if len(self.users[user_id]) == 0:
+ del self.users[user_id]
+ self.waiting -= 1
diff --git a/addons/im_livechat/security/ir.model.access.csv b/addons/im_livechat/security/ir.model.access.csv
index 6e17c1a127f..0dcf0bdee6f 100644
--- a/addons/im_livechat/security/ir.model.access.csv
+++ b/addons/im_livechat/security/ir.model.access.csv
@@ -2,5 +2,7 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_ls_chann1,im_livechat.channel,model_im_livechat_channel,,1,0,0,0
access_ls_chann2,im_livechat.channel,model_im_livechat_channel,group_im_livechat,1,1,1,0
access_ls_chann3,im_livechat.channel,model_im_livechat_channel,group_im_livechat_manager,1,1,1,1
+access_ls_message_portal,im_livechat.im.message.portal,im.model_im_message,portal.group_portal,0,0,0,0
+access_im_user_portal,im_livechat.im.user.portal,im.model_im_user,portal.group_portal,1,0,0,0
access_ls_message,im_livechat.im.message,im.model_im_message,portal.group_anonymous,0,0,0,0
access_im_user,im_livechat.im.user,im.model_im_user,portal.group_anonymous,1,0,0,0 \ No newline at end of file
diff --git a/addons/im_livechat/static/ext/static/audio/Ting.mp3 b/addons/im_livechat/static/ext/static/audio/Ting.mp3
index 6fd090a89ce..ffbb77144b2 100644
--- a/addons/im_livechat/static/ext/static/audio/Ting.mp3
+++ b/addons/im_livechat/static/ext/static/audio/Ting.mp3
Binary files differ
diff --git a/addons/im_livechat/static/ext/static/audio/Ting.ogg b/addons/im_livechat/static/ext/static/audio/Ting.ogg
index 8d17ea85bd3..74ee13a4e5a 100644
--- a/addons/im_livechat/static/ext/static/audio/Ting.ogg
+++ b/addons/im_livechat/static/ext/static/audio/Ting.ogg
Binary files differ
diff --git a/addons/im_livechat/static/ext/static/js/livesupport.js b/addons/im_livechat/static/ext/static/js/livesupport.js
index 0b9e52d2c07..c45e9588c83 100644
--- a/addons/im_livechat/static/ext/static/js/livesupport.js
+++ b/addons/im_livechat/static/ext/static/js/livesupport.js
@@ -268,6 +268,10 @@ define(["nova", "underscore", "oeclient", "require", "jquery",
return this.activated;
},
create_ting: function() {
+ if (typeof(Audio) === "undefined") {
+ this.ting = {play: function() {}};
+ return;
+ }
this.ting = new Audio(new Audio().canPlayType("audio/ogg; codecs=vorbis") ?
require.toUrl("../audio/Ting.ogg") :
require.toUrl("../audio/Ting.mp3")
@@ -395,6 +399,9 @@ define(["nova", "underscore", "oeclient", "require", "jquery",
return;
}
var mes = this.$("input").val();
+ if (! mes.trim()) {
+ return;
+ }
this.$("input").val("");
var send_it = _.bind(function() {
var model = connection.getModel("im.message");
diff --git a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
index b74cfa21b8a..0576e1d5f8f 100644
--- a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
+++ b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
@@ -84,7 +84,7 @@ class l10n_be_vat_declaration(osv.osv_memory):
obj_company = obj_user.browse(cr, uid, uid, context=context).company_id
vat_no = obj_company.partner_id.vat
if not vat_no:
- raise osv.except_osv(_('insufficient data!'), _('No VAT number associated with your company.'))
+ raise osv.except_osv(_('Insufficient Data!'), _('No VAT number associated with your company.'))
vat_no = vat_no.replace(' ','').upper()
vat = vat_no[2:]
diff --git a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py
index 29a1a1508a4..0ffa0c16a24 100644
--- a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py
+++ b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py
@@ -60,12 +60,12 @@ class partner_vat(osv.osv_memory):
company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
period_ids = obj_period.search(cr, uid, [('date_start' ,'>=', date_start), ('date_stop','<=',date_stop), ('company_id','=',company_id)])
if not period_ids:
- raise osv.except_osv(_('insufficient data!'), _('No data for the selected year.'))
+ raise osv.except_osv(_('Insufficient Data!'), _('No data for the selected year.'))
partners = []
partner_ids = obj_partner.search(cr, uid, [('vat_subjected', '!=', False), ('vat','ilike','BE%')], context=context)
if not partner_ids:
- raise osv.except_osv(_('Error'),_('No belgian contact with a VAT number in your database.'))
+ raise osv.except_osv(_('Error'),_('No belgium contact with a VAT number in your database.'))
cr.execute("""SELECT sub1.partner_id, sub1.name, sub1.vat, sub1.turnover, sub2.vat_amount
FROM (SELECT l.partner_id, p.name, p.vat, SUM(CASE WHEN c.code ='49' THEN -l.tax_amount ELSE l.tax_amount END) as turnover
FROM account_move_line l
@@ -90,7 +90,7 @@ class partner_vat(osv.osv_memory):
partners.append(id_client)
if not partners:
- raise osv.except_osv(_('insufficient data!'), _('No data found for the selected year.'))
+ raise osv.except_osv(_('Insufficient Data!'), _('No data found for the selected year.'))
context.update({'partner_ids': partners, 'year': data['year'], 'limit_amount': data['limit_amount']})
model_data_ids = obj_model_data.search(cr, uid, [('model','=','ir.ui.view'), ('name','=','view_vat_listing')])
resource_id = obj_model_data.read(cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
diff --git a/addons/l10n_be/wizard/l10n_be_vat_intra.py b/addons/l10n_be/wizard/l10n_be_vat_intra.py
index 703ab9db59b..a572c3b83b4 100644
--- a/addons/l10n_be/wizard/l10n_be_vat_intra.py
+++ b/addons/l10n_be/wizard/l10n_be_vat_intra.py
@@ -108,7 +108,7 @@ class partner_vat_intra(osv.osv_memory):
# Get Company vat
company_vat = data_company.partner_id.vat
if not company_vat:
- raise osv.except_osv(_('insufficient data!'),_('No VAT number associated with your company.'))
+ raise osv.except_osv(_('Insufficient Data!'),_('No VAT number associated with your company.'))
company_vat = company_vat.replace(' ','').upper()
issued_by = company_vat[:2]
@@ -120,7 +120,7 @@ class partner_vat_intra(osv.osv_memory):
p_id_list = obj_partner.search(cr, uid, [('vat','!=',False)], context=context)
if not p_id_list:
- raise osv.except_osv(_('Insufficient Data!'),_('No partner has a VAT number asociated with him.'))
+ raise osv.except_osv(_('Insufficient Data!'),_('No partner has a VAT number associated with him.'))
seq_declarantnum = obj_sequence.get(cr, uid, 'declarantnum')
dnum = company_vat[2:] + seq_declarantnum[-4:]
diff --git a/addons/l10n_ca/__openerp__.py b/addons/l10n_ca/__openerp__.py
index 05279b6ef8e..945327a06bc 100644
--- a/addons/l10n_ca/__openerp__.py
+++ b/addons/l10n_ca/__openerp__.py
@@ -20,7 +20,7 @@
##############################################################################
{
'name': 'Canada - Accounting',
- 'version': '1.0',
+ 'version': '1.1',
'author': 'Savoir-faire Linux',
'website': 'http://www.savoirfairelinux.com',
'category': 'Localization/Account Charts',
@@ -49,7 +49,7 @@ Canadian accounting charts and localizations.
'account_chart_template_fr.xml',
'account_tax_fr.xml',
'fiscal_templates_fr.xml',
- 'l10n_ca_wizard.xml',
+ 'l10n_ca_wizard.xml'
],
'demo': [],
'installable': True,
diff --git a/addons/l10n_ca/account_tax_en.xml b/addons/l10n_ca/account_tax_en.xml
index 1ff884ac361..afe505f27f5 100644
--- a/addons/l10n_ca/account_tax_en.xml
+++ b/addons/l10n_ca/account_tax_en.xml
@@ -12,7 +12,6 @@
<field name="description">GSTPST_MB_SALE</field>
<field name="type_tax_use">sale</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
@@ -39,7 +38,7 @@
<field name="name">PST for sales - 7%</field>
<field name="description">PST</field>
<field name="type_tax_use">sale</field>
- <field name="amount">0.700000</field>
+ <field name="amount">0.070000</field>
<field name="type">percent</field>
<field name="sequence">2</field>
<field name="account_collected_id" ref="chart2132_en"/>
@@ -106,7 +105,6 @@
<field name="description">GSTTVQ_SALE</field>
<field name="type_tax_use">sale</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
@@ -152,7 +150,6 @@
<field name="description">GSTPST_SK_SALE</field>
<field name="type_tax_use">sale</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
@@ -281,7 +278,6 @@
<field name="description">GSTPST_MB_PURC</field>
<field name="type_tax_use">purchase</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
@@ -308,7 +304,7 @@
<field name="name">PST for purchases - 7%</field>
<field name="description">PST</field>
<field name="type_tax_use">purchase</field>
- <field name="amount">0.700000</field>
+ <field name="amount">0.070000</field>
<field name="type">percent</field>
<field name="sequence">2</field>
<field name="account_collected_id" ref="chart1182_en"/>
@@ -375,7 +371,6 @@
<field name="description">GSTTVQ_PURC</field>
<field name="type_tax_use">purchase</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
@@ -421,7 +416,6 @@
<field name="description">GSTPST_SK_PURC</field>
<field name="type_tax_use">purchase</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
diff --git a/addons/l10n_ca/account_tax_fr.xml b/addons/l10n_ca/account_tax_fr.xml
index b344feeec83..c34f329be3a 100644
--- a/addons/l10n_ca/account_tax_fr.xml
+++ b/addons/l10n_ca/account_tax_fr.xml
@@ -12,7 +12,6 @@
<field name="description">TPSTVP_MB_SALE</field>
<field name="type_tax_use">sale</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
@@ -39,7 +38,7 @@
<field name="name">TVP sur les ventes - 7%</field>
<field name="description">TVP</field>
<field name="type_tax_use">sale</field>
- <field name="amount">0.700000</field>
+ <field name="amount">0.070000</field>
<field name="type">percent</field>
<field name="sequence">2</field>
<field name="account_collected_id" ref="chart2132_fr"/>
@@ -106,7 +105,6 @@
<field name="description">TPSTVQ_SALE</field>
<field name="type_tax_use">sale</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
@@ -152,7 +150,6 @@
<field name="description">TPSTVP_SK_SALE</field>
<field name="type_tax_use">sale</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
@@ -281,7 +278,6 @@
<field name="description">TPSTVP_MB_PURC</field>
<field name="type_tax_use">purchase</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
@@ -308,7 +304,7 @@
<field name="name">TVP sur les achats - 7%</field>
<field name="description">TVP</field>
<field name="type_tax_use">purchase</field>
- <field name="amount">0.700000</field>
+ <field name="amount">0.070000</field>
<field name="type">percent</field>
<field name="sequence">2</field>
<field name="account_collected_id" ref="chart1182_fr"/>
@@ -375,7 +371,6 @@
<field name="description">TPSTVQ_PURC</field>
<field name="type_tax_use">purchase</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
@@ -421,7 +416,6 @@
<field name="description">TPSTVP_SK_PURC</field>
<field name="type_tax_use">purchase</field>
<field name="amount">1</field>
- <field name="child_depend">1</field>
<field name="type">percent</field>
</record>
diff --git a/addons/l10n_ca/fiscal_templates_en.xml b/addons/l10n_ca/fiscal_templates_en.xml
index 68e881c3541..a3bab5b89dd 100644
--- a/addons/l10n_ca/fiscal_templates_en.xml
+++ b/addons/l10n_ca/fiscal_templates_en.xml
@@ -5,17 +5,17 @@
<!-- Fiscal Position Templates -->
<record id="fiscal_position_template_1_en" model="account.fiscal.position.template">
- <field name="name">Provincial Regime</field>
+ <field name="name">Provincial Regime (PROV)</field>
<field name="chart_template_id" ref="ca_en_chart_template_en"/>
</record>
<record id="fiscal_position_template_21_en" model="account.fiscal.position.template">
- <field name="name">Harmonized Provinces Regime (12%)</field>
+ <field name="name">Harmonized Provinces Regime (12%) (BC)</field>
<field name="chart_template_id" ref="ca_en_chart_template_en"/>
</record>
<record id="fiscal_position_template_22_en" model="account.fiscal.position.template">
- <field name="name">Harmonized Provinces Regime (13%)</field>
+ <field name="name">Harmonized Provinces Regime (13%) (ON, NB, NL)</field>
<field name="chart_template_id" ref="ca_en_chart_template_en"/>
</record>
@@ -25,17 +25,17 @@
</record>
<record id="fiscal_position_template_24_en" model="account.fiscal.position.template">
- <field name="name">Harmonized Provinces Regime (15%)</field>
+ <field name="name">Harmonized Provinces Regime (15%) (NS)</field>
<field name="chart_template_id" ref="ca_en_chart_template_en"/>
</record>
<record id="fiscal_position_template_3_en" model="account.fiscal.position.template">
- <field name="name">Non-Harmonized Provinces Regime</field>
+ <field name="name">Non-Harmonized Provinces Regime (AB, MB, SK, PE, NT, NU, YT)</field>
<field name="chart_template_id" ref="ca_en_chart_template_en"/>
</record>
<record id="fiscal_position_template_4_en" model="account.fiscal.position.template">
- <field name="name">International Regime</field>
+ <field name="name">International Regime (INTL)</field>
<field name="chart_template_id" ref="ca_en_chart_template_en"/>
</record>
diff --git a/addons/l10n_ca/fiscal_templates_fr.xml b/addons/l10n_ca/fiscal_templates_fr.xml
index 3ba13d6642e..b01ab0985ea 100644
--- a/addons/l10n_ca/fiscal_templates_fr.xml
+++ b/addons/l10n_ca/fiscal_templates_fr.xml
@@ -5,7 +5,7 @@
<!-- Fiscal Position Templates -->
<record id="fiscal_position_template_1_fr" model="account.fiscal.position.template">
- <field name="name">Régime Provincial</field>
+ <field name="name">Régime Provincial (PROV)</field>
<field name="chart_template_id" ref="ca_fr_chart_template_fr"/>
</record>
@@ -30,12 +30,12 @@
</record>
<record id="fiscal_position_template_3_fr" model="account.fiscal.position.template">
- <field name="name">Régime Provinces Non-Harmonisées</field>
+ <field name="name">Régime Provinces Non-Harmonisées (AB, MB, SK, PE, NT, NU, YT)</field>
<field name="chart_template_id" ref="ca_fr_chart_template_fr"/>
</record>
<record id="fiscal_position_template_4_fr" model="account.fiscal.position.template">
- <field name="name">Régime International</field>
+ <field name="name">Régime International (INTL)</field>
<field name="chart_template_id" ref="ca_fr_chart_template_fr"/>
</record>
diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py
index 348bb71c95e..fc715ece5b8 100644
--- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py
+++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py
@@ -103,7 +103,7 @@ class payroll_advice(osv.osv):
slip_ids = payslip_pool.search(cr, uid, [('date_from', '<=', advice.date), ('date_to', '>=', advice.date), ('state', '=', 'done')], context=context)
for slip in payslip_pool.browse(cr, uid, slip_ids, context=context):
if not slip.employee_id.bank_account_id and not slip.employee_id.bank_account_id.acc_number:
- raise osv.except_osv(_('Error !'), _('Please define bank account for the %s employee') % (slip.employee_id.name))
+ raise osv.except_osv(_('Error!'), _('Please define bank account for the %s employee') % (slip.employee_id.name))
line_ids = payslip_line_pool.search(cr, uid, [ ('slip_id', '=', slip.id), ('code', '=', 'NET')], context=context)
if line_ids:
line = payslip_line_pool.browse(cr, uid, line_ids, context=context)[0]
@@ -129,7 +129,7 @@ class payroll_advice(osv.osv):
seq_obj = self.pool.get('ir.sequence')
for advice in self.browse(cr, uid, ids, context=context):
if not advice.line_ids:
- raise osv.except_osv(_('Error !'), _('You can not confirm Payment advice without advice lines.'))
+ raise osv.except_osv(_('Error!'), _('You can not confirm Payment advice without advice lines.'))
advice_date = datetime.strptime(advice.date, DATETIME_FORMAT)
advice_year = advice_date.strftime('%m') + '-' + advice_date.strftime('%Y')
number = seq_obj.get(cr, uid, 'payment.advice')
@@ -183,7 +183,7 @@ class hr_payslip_run(osv.osv):
users = self.pool.get('res.users').browse(cr, uid, [uid], context=context)
for run in self.browse(cr, uid, ids, context=context):
if run.available_advice:
- raise osv.except_osv(_('Error !'), _("Payment advice already exists for %s, 'Set to Draft' to create a new advice.") %(run.name))
+ raise osv.except_osv(_('Error!'), _("Payment advice already exists for %s, 'Set to Draft' to create a new advice.") %(run.name))
advice_data = {
'batch_id': run.id,
'company_id': users[0].company_id.id,
@@ -201,7 +201,7 @@ class hr_payslip_run(osv.osv):
for slip in payslip_pool.browse(cr, uid, slip_ids, context=context):
if not slip.employee_id.bank_account_id or not slip.employee_id.bank_account_id.acc_number:
- raise osv.except_osv(_('Error !'), _('Please define bank account for the %s employee') % (slip.employee_id.name))
+ raise osv.except_osv(_('Error!'), _('Please define bank account for the %s employee') % (slip.employee_id.name))
line_ids = payslip_line_pool.search(cr, uid, [('slip_id', '=', slip.id), ('code', '=', 'NET')], context=context)
if line_ids:
line = payslip_line_pool.browse(cr, uid, line_ids, context=context)[0]
diff --git a/addons/l10n_it/__openerp__.py b/addons/l10n_it/__openerp__.py
index 00ba19e9c42..686fb5ff0d4 100644
--- a/addons/l10n_it/__openerp__.py
+++ b/addons/l10n_it/__openerp__.py
@@ -29,7 +29,7 @@
{
'name': 'Italy - Accounting',
- 'version': '0.1',
+ 'version': '0.2',
'depends': ['base_vat','account_chart','base_iban'],
'author': 'OpenERP Italian Community',
'description': """
diff --git a/addons/l10n_it/data/account.tax.code.template.csv b/addons/l10n_it/data/account.tax.code.template.csv
index d6d6667f43b..e5435945556 100644
--- a/addons/l10n_it/data/account.tax.code.template.csv
+++ b/addons/l10n_it/data/account.tax.code.template.csv
@@ -1,28 +1,37 @@
code,id,name,parent_id:id
,vat_code_chart_root,Tassazione,
IVC,template_ivacode_pagata,IVA a credito,vat_code_chart_root
-IVC0,template_ivacode_pagata_0,Esente IVA (credito),template_ivacode_pagata
+IVCN,template_ivacode_pagata_ind,IVA a credito indetraibile,vat_code_chart_root
+IVC0,template_ivacode_pagata_0,Fuori Campo IVA (credito),template_ivacode_pagata
IVCI,template_impcode_pagata,IVA a credito (imponibile),vat_code_chart_root
-IVC0I,template_impcode_pagata_0,Esente IVA a credito (imponibile),template_impcode_pagata
+IVC0I,template_impcode_pagata_0,Fuori Campo IVA (credito) (imponibile),template_impcode_pagata
+IVCart15,template_ivacode_pagata_art15,Escluso Art.15 (credito),template_ivacode_pagata
+IVCart15I,template_impcode_pagata_art15,Escluso Art.15. (credito) (imponibile),template_impcode_pagata
IVC10,template_ivacode_pagata_10,IVA a credito 10%,template_ivacode_pagata
IVC10I,template_impcode_pagata_10,IVA a credito 10% (imponibile),template_impcode_pagata
-IVC10ind,template_ivacode_pagata_10ind,IVA a credito 10% indetraibile,template_ivacode_pagata
+IVC10ind,template_ivacode_pagata_10ind,IVA a credito 10% indetraibile,template_ivacode_pagata_ind
IVC10Iind,template_impcode_pagata_10ind,IVA a credito 10% indetraibile (imponibile),template_impcode_pagata
-IVC20ind,template_ivacode_pagata_20ind,IVA a credito 20% indetraibile,template_ivacode_pagata
+IVC20ind,template_ivacode_pagata_20ind,IVA a credito 20% indetraibile,template_ivacode_pagata_ind
IVC20Iind,template_impcode_pagata_20ind,IVA a credito 20% indetraibile (imponibile),template_impcode_pagata
-IVC4ind,template_ivacode_pagata_4ind,IVA a credito 4% indetraibile,template_ivacode_pagata
+IVC4ind,template_ivacode_pagata_4ind,IVA a credito 4% indetraibile,template_ivacode_pagata_ind
IVC4Iind,template_impcode_pagata_4ind,IVA a credito 4% indetraibile (imponibile),template_impcode_pagata
IVC20det10,template_ivacode_pagata_20det10,IVA a credito 20% detraibile 10%,template_ivacode_pagata
+IVC20Ndet10,template_ivacode_pagata_20det10ind,IVA a credito 20% detraibile 10% (indetraibile),template_ivacode_pagata_ind
IVC20Idet10,template_impcode_pagata_20det10,IVA a credito 20% detraibile 10% (imponibile),template_impcode_pagata
IVC20det15,template_ivacode_pagata_20det15,IVA a credito 20% detraibile 15%,template_ivacode_pagata
+IVC20Ndet15,template_ivacode_pagata_20det15ind,IVA a credito 20% detraibile 15% (indetraibile),template_ivacode_pagata_ind
IVC20Idet15,template_impcode_pagata_20det15,IVA a credito 20% detraibile 15% (imponibile),template_impcode_pagata
IVC20det40,template_ivacode_pagata_20det40,IVA a credito 20% detraibile 40%,template_ivacode_pagata
+IVC20Ndet40,template_ivacode_pagata_20det40ind,IVA a credito 20% detraibile 40% (indetraibile),template_ivacode_pagata_ind
IVC20Idet40,template_impcode_pagata_20det40,IVA a credito 20% detraibile 40% (imponibile),template_impcode_pagata
IVC20det50,template_ivacode_pagata_20det50,IVA a credito 20% detraibile 50%,template_ivacode_pagata
+IVC20Ndet50,template_ivacode_pagata_20det50ind,IVA a credito 20% detraibile 50% (indetraibile),template_ivacode_pagata_ind
IVC20Idet50,template_impcode_pagata_20det50,IVA a credito 20% detraibile 50% (imponibile),template_impcode_pagata
IVC10det50,template_ivacode_pagata_10det50,IVA a credito 10% detraibile 50%,template_ivacode_pagata
+IVC10Ndet50,template_ivacode_pagata_10det50ind,IVA a credito 10% detraibile 50% (indetraibile),template_ivacode_pagata_ind
IVC10Idet50,template_impcode_pagata_10det50,IVA a credito 10% detraibile 50% (imponibile),template_impcode_pagata
IVC4det50,template_ivacode_pagata_4det50,IVA a credito 4% detraibile 50%,template_ivacode_pagata
+IVC4Ndet50,template_ivacode_pagata_4det50ind,IVA a credito 4% detraibile 50% (indetraibile),template_ivacode_pagata_ind
IVC4Idet50,template_impcode_pagata_4det50,IVA a credito 4% detraibile 50% (imponibile),template_impcode_pagata
IVC20,template_ivacode_pagata_20,IVA a credito 20%,template_ivacode_pagata
IVC20I,template_impcode_pagata_20,IVA a credito 20% (imponibile),template_impcode_pagata
@@ -35,9 +44,11 @@ IVC12I,template_impcode_pagata_12,IVA a credito 12% (imponibile),template_impco
IVC2,template_ivacode_pagata_2,IVA a credito 2%,template_ivacode_pagata
IVC2I,template_impcode_pagata_2,IVA a credito 2% (imponibile),template_impcode_pagata
IVD,template_ivacode_riscossa,IVA a debito,vat_code_chart_root
-IVD0,template_ivacode_riscossa_0,Esente IVA (debito),template_ivacode_riscossa
+IVD0,template_ivacode_riscossa_0,Fuori Campo IVA (debito),template_ivacode_riscossa
IVDI,template_impcode_riscossa,IVA a debito (imponibile),vat_code_chart_root
-IVD0I,template_impcode_riscossa_0,Esente IVA a debito (imponibile),template_impcode_riscossa
+IVD0I,template_impcode_riscossa_0,Fuori Campo IVA (debito) (imponibile),template_impcode_riscossa
+IVDart15,template_ivacode_riscossa_art15,Escluso Art.15 (debito),template_ivacode_riscossa
+IVDart15I,template_impcode_riscossa_art15,Escluso Art.15 (debito) (imponibile),template_impcode_riscossa
IVD10,template_ivacode_riscossa_10,IVA a debito 10%,template_ivacode_riscossa
IVD10I,template_impcode_riscossa_10,IVA a debito 10% (imponibile),template_impcode_riscossa
IVD20,template_ivacode_riscossa_20,IVA a debito 20%,template_ivacode_riscossa
@@ -50,13 +61,17 @@ IVD12,template_ivacode_riscossa_12,IVA a debito 12%,template_ivacode_riscossa
IVD12I,template_impcode_riscossa_12,IVA a debito 12% (imponibile),template_impcode_riscossa
IVD2,template_ivacode_riscossa_2,IVA a debito 2%,template_ivacode_riscossa
IVD2I,template_impcode_riscossa_2,IVA a debito 2% (imponibile),template_impcode_riscossa
-IVC21ind,template_ivacode_pagata_21ind,IVA a credito 21% indetraibile,template_ivacode_pagata
+IVC21ind,template_ivacode_pagata_21ind,IVA a credito 21% indetraibile,template_ivacode_pagata_ind
IVC21Iind,template_impcode_pagata_21ind,IVA a credito 21% indetraibile (imponibile),template_impcode_pagata
IVC21det10,template_ivacode_pagata_21det10,IVA a credito 21% detraibile 10%,template_ivacode_pagata
+IVC21Ndet10,template_ivacode_pagata_21det10ind,IVA a credito 21% detraibile 10% (indetraibile),template_ivacode_pagata_ind
IVC21Idet10,template_impcode_pagata_21det10,IVA a credito 21% detraibile 10% (imponibile),template_impcode_pagata
IVC21det15,template_ivacode_pagata_21det15,IVA a credito 21% detraibile 15%,template_ivacode_pagata
+IVC21Ndet15,template_ivacode_pagata_21det15ind,IVA a credito 21% detraibile 15% (indetraibile),template_ivacode_pagata_ind
IVC21Idet15,template_impcode_pagata_21det15,IVA a credito 21% detraibile 15% (imponibile),template_impcode_pagata
IVC21det40,template_ivacode_pagata_21det40,IVA a credito 21% detraibile 40%,template_ivacode_pagata
+IVC21Ndet40,template_ivacode_pagata_21det40ind,IVA a credito 21% detraibile 40% (indetraibile),template_ivacode_pagata_ind
IVC21Idet40,template_impcode_pagata_21det40,IVA a credito 21% detraibile 40% (imponibile),template_impcode_pagata
IVC21det50,template_ivacode_pagata_21det50,IVA a credito 21% detraibile 50%,template_ivacode_pagata
+IVC21Ndet50,template_ivacode_pagata_21det50ind,IVA a credito 21% detraibile 50% (indetraibile),template_ivacode_pagata_ind
IVC21Idet50,template_impcode_pagata_21det50,IVA a credito 21% detraibile 50% (imponibile),template_impcode_pagata
diff --git a/addons/l10n_it/data/account.tax.template.csv b/addons/l10n_it/data/account.tax.template.csv
index e003afd1a23..5654b32e5e9 100644
--- a/addons/l10n_it/data/account.tax.template.csv
+++ b/addons/l10n_it/data/account.tax.template.csv
@@ -1,71 +1,66 @@
id,description,chart_template_id:id,name,sequence,amount,parent_id:id,child_depend,type,account_collected_id:id,account_paid_id:id,type_tax_use,base_code_id:id,tax_code_id:id,ref_base_code_id:id,ref_tax_code_id:id,ref_base_sign,ref_tax_sign,price_include,base_sign,tax_sign
-21a,21a,l10n_it_chart_template_generic,Iva al 21% (debito),,0.21,,False,percent,2601,2601,sale,template_impcode_riscossa_21,template_ivacode_riscossa_21,template_impcode_riscossa_21,template_ivacode_riscossa_21,-1,-1,False,,
-21b,21b,l10n_it_chart_template_generic,Iva al 21% (credito),,0.21,,False,percent,1601,1601,purchase,template_impcode_pagata_21,template_ivacode_pagata_21,template_impcode_pagata_21,template_ivacode_pagata_21,,,False,-1,-1
-20a,20a,l10n_it_chart_template_generic,Iva al 20% (debito),,0.2,,False,percent,2601,2601,sale,template_impcode_riscossa_20,template_ivacode_riscossa_20,template_impcode_riscossa_20,template_ivacode_riscossa_20,-1,-1,False,,
-20b,20b,l10n_it_chart_template_generic,Iva al 20% (credito),,0.2,,False,percent,1601,1601,purchase,template_impcode_pagata_20,template_ivacode_pagata_20,template_impcode_pagata_20,template_ivacode_pagata_20,,,False,-1,-1
-10a,10a,l10n_it_chart_template_generic,Iva al 10% (debito),,0.1,,False,percent,2601,2601,sale,template_impcode_riscossa_10,template_ivacode_riscossa_10,template_impcode_riscossa_10,template_ivacode_riscossa_10,-1,-1,False,,
-10b,10b,l10n_it_chart_template_generic,Iva al 10% (credito),,0.1,,False,percent,1601,1601,purchase,template_impcode_pagata_10,template_ivacode_pagata_10,template_impcode_pagata_10,template_ivacode_pagata_10,,,False,-1,-1
-10AO,10AO,l10n_it_chart_template_generic,Iva al 10% indetraibile,,0.1,,True,percent,,,purchase,template_impcode_pagata_10ind,,template_impcode_pagata_10ind,,,,False,-1,-1
-10AOa,10AOa,l10n_it_chart_template_generic,Iva al 10% indetraibile (D),2,0,10AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_10ind,,template_ivacode_pagata_10ind,,,False,,
-10AOb,10AOb,l10n_it_chart_template_generic,Iva al 10% indetraibile (I),1,1,10AO,False,percent,,,purchase,,,,,,,False,,
-12a,12a,l10n_it_chart_template_generic,Iva 12% (debito),,0.12,,False,percent,2601,2601,sale,template_impcode_riscossa_12,template_ivacode_riscossa_12,template_impcode_riscossa_12,template_ivacode_riscossa_12,-1,-1,False,,
-12b,12b,l10n_it_chart_template_generic,Iva 12% (credito),,0.12,,False,percent,1601,1601,purchase,template_impcode_pagata_12,template_ivacode_pagata_12,template_impcode_pagata_12,template_ivacode_pagata_12,,,False,-1,-1
-2010,2010,l10n_it_chart_template_generic,Iva al 20% detraibile 10%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det10,,template_impcode_pagata_20det10,,,,False,-1,-1
-2010a,2010a,l10n_it_chart_template_generic,Iva al 20% detraibile 10% (D),2,0,2010,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det10,,template_ivacode_pagata_20det10,,,False,,
-2010b,2010b,l10n_it_chart_template_generic,Iva al 20% detraibile 10% (I),1,0.9,2010,False,percent,,,purchase,,,,,,,False,,
-2015,2015,l10n_it_chart_template_generic,Iva al 20% detraibile 15%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det15,,template_impcode_pagata_20det15,,,,False,-1,-1
-2015a,2015a,l10n_it_chart_template_generic,Iva al 20% detraibile 15% (D),2,0,2015,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det15,,template_ivacode_pagata_20det15,,,False,,
-2015b,2015b,l10n_it_chart_template_generic,Iva al 20% detraibile 15% (I),1,0.85,2015,False,percent,,,purchase,,,,,,,False,,
-2040,2040,l10n_it_chart_template_generic,Iva al 20% detraibile 40%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det40,,template_impcode_pagata_20det40,,,,False,-1,-1
-2040a,2040a,l10n_it_chart_template_generic,Iva al 20% detraibile 40% (D),2,0,2040,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det40,,template_ivacode_pagata_20det40,,,False,,
-2040b,2040b,l10n_it_chart_template_generic,Iva al 20% detraibile 40% (I),1,0.6,2040,False,percent,,,purchase,,,,,,,False,,
-20AO,20AO,l10n_it_chart_template_generic,Iva al 20% indetraibile,,0.2,,True,percent,,,purchase,template_impcode_pagata_20ind,,template_impcode_pagata_20ind,,,,False,-1,-1
-20AOa,20AOa,l10n_it_chart_template_generic,Iva al 20% indetraibile (D),2,0,20AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_20ind,,template_ivacode_pagata_20ind,,,False,,
-20AOb,20AOb,l10n_it_chart_template_generic,Iva al 20% indetraibile (I),1,1,20AO,False,percent,,,purchase,,,,,,,False,,
-20I5,20I5,l10n_it_chart_template_generic,IVA al 20% detraibile al 50%,,0.2,,True,percent,,,purchase,template_impcode_pagata_20det50,,template_impcode_pagata_20det50,,,,False,-1,-1
-20I5b,20I5b,l10n_it_chart_template_generic,IVA al 20% detraibile al 50% (I),1,0.5,20I5,False,percent,,,purchase,,,,,,,False,,
-20I5a,20I5a,l10n_it_chart_template_generic,IVA al 20% detraibile al 50% (D),2,0,20I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det50,,template_ivacode_pagata_20det50,,,False,,
-22a,22a,l10n_it_chart_template_generic,Iva 2% (debito),,0.02,,False,percent,2601,2601,sale,template_impcode_riscossa_2,template_ivacode_riscossa_2,template_impcode_riscossa_2,template_ivacode_riscossa_2,-1,-1,False,,
-22b,22b,l10n_it_chart_template_generic,Iva 2% (credito),,0.02,,False,percent,1601,1601,purchase,template_impcode_pagata_2,template_ivacode_pagata_2,template_impcode_pagata_2,template_ivacode_pagata_2,,,False,-1,-1
-4a,4a,l10n_it_chart_template_generic,Iva 4% (debito),,0.04,,False,percent,2601,2601,sale,template_impcode_riscossa_4,template_ivacode_riscossa_4,template_impcode_riscossa_4,template_ivacode_riscossa_4,-1,-1,False,,
-4b,4b,l10n_it_chart_template_generic,Iva 4% (credito),,0.04,,False,percent,1601,1601,purchase,template_impcode_pagata_4,template_ivacode_pagata_4,template_impcode_pagata_4,template_ivacode_pagata_4,,,False,-1,-1
-4AO,4AO,l10n_it_chart_template_generic,Iva al 4% indetraibile,,0.04,,True,percent,,,purchase,template_impcode_pagata_4ind,,template_impcode_pagata_4ind,,,,False,-1,-1
-4AOa,4AOa,l10n_it_chart_template_generic,Iva al 4% indetraibile (D),2,0,4AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_4ind,,template_ivacode_pagata_4ind,,,False,,
-4AOb,4AOb,l10n_it_chart_template_generic,Iva al 4% indetraibile (I),1,1,4AO,False,percent,,,purchase,,,,,,,False,,
-10I5,10I5,l10n_it_chart_template_generic,IVA al 10% detraibile al 50%,,0.1,,True,percent,,,purchase,template_impcode_pagata_10det50,,template_impcode_pagata_10det50,,,,False,-1,-1
-10I5a,10I5a,l10n_it_chart_template_generic,IVA al 10% detraibile al 50% (D),2,0,10I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_10det50,,template_ivacode_pagata_10det50,,,False,,
-10I5b,10I5b,l10n_it_chart_template_generic,IVA al 10% detraibile al 50% (I),1,0.5,10I5,False,percent,,,purchase,,,,,,,False,,
-4I5,4I5,l10n_it_chart_template_generic,IVA al 4% detraibile al 50%,,0.04,,True,percent,,,purchase,template_impcode_pagata_4det50,,template_impcode_pagata_4det50,,,,False,-1,-1
-4I5a,4I5a,l10n_it_chart_template_generic,IVA al 4% detraibile al 50% (D),2,0,4I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_4det50,,template_ivacode_pagata_4det50,,,False,,
-4I5b,4I5b,l10n_it_chart_template_generic,IVA al 4% detraibile al 50% (I),1,0.5,4I5,False,percent,,,purchase,,,,,,,False,,
-00a,00a,l10n_it_chart_template_generic,Esente IVA (debito),,0,,False,percent,2601,2601,sale,template_impcode_riscossa_0,template_ivacode_riscossa_0,template_impcode_riscossa_0,template_ivacode_riscossa_0,-1,-1,False,,
-00b,00b,l10n_it_chart_template_generic,Esente IVA (credito),,0,,False,percent,1601,1601,purchase,template_impcode_pagata_0,template_ivacode_pagata_0,template_impcode_pagata_0,template_ivacode_pagata_0,,,False,-1,-1
-21a INC,21a INC,l10n_it_chart_template_generic,Iva al 21% (debito) INC,,0.21,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_21,l10n_it.template_ivacode_riscossa_21,l10n_it.template_impcode_riscossa_21,l10n_it.template_ivacode_riscossa_21,-1,-1,True,,
-21b INC,21b INC,l10n_it_chart_template_generic,Iva al 21% (credito) INC,,0.21,,False,percent,1601,1601,purchase,template_impcode_pagata_21,template_ivacode_pagata_21,template_impcode_pagata_21,template_ivacode_pagata_21,,,True,-1,-1
-20a INC,20a INC,l10n_it_chart_template_generic,Iva al 20% (debito) INC,,0.2,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_20,l10n_it.template_ivacode_riscossa_20,l10n_it.template_impcode_riscossa_20,l10n_it.template_ivacode_riscossa_20,-1,-1,True,,
-20b INC,20b INC,l10n_it_chart_template_generic,Iva al 20% (credito) INC,,0.2,,False,percent,1601,1601,purchase,template_impcode_pagata_20,template_ivacode_pagata_20,template_impcode_pagata_20,template_ivacode_pagata_20,,,True,-1,-1
-10a INC,10a INC,l10n_it_chart_template_generic,Iva al 10% (debito) INC,,0.1,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_10,l10n_it.template_ivacode_riscossa_10,l10n_it.template_impcode_riscossa_10,l10n_it.template_ivacode_riscossa_10,-1,-1,True,,
-10b INC,10b INC,l10n_it_chart_template_generic,Iva al 10% (credito) INC,,0.1,,False,percent,1601,1601,purchase,template_impcode_pagata_10,template_ivacode_pagata_10,template_impcode_pagata_10,template_ivacode_pagata_10,,,True,-1,-1
-12a INC,12a INC,l10n_it_chart_template_generic,Iva 12% (debito) INC,,0.12,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_12,l10n_it.template_ivacode_riscossa_12,l10n_it.template_impcode_riscossa_12,l10n_it.template_ivacode_riscossa_12,-1,-1,True,,
-12b INC,12b INC,l10n_it_chart_template_generic,Iva 12% (credito) INC,,0.12,,False,percent,1601,1601,purchase,template_impcode_pagata_12,template_ivacode_pagata_12,template_impcode_pagata_12,template_ivacode_pagata_12,,,True,-1,-1
-22a INC,22a INC,l10n_it_chart_template_generic,Iva 2% (debito) INC,,0.02,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_2,l10n_it.template_ivacode_riscossa_2,l10n_it.template_impcode_riscossa_2,l10n_it.template_ivacode_riscossa_2,-1,-1,True,,
-22b INC,22b INC,l10n_it_chart_template_generic,Iva 2% (credito) INC,,0.02,,False,percent,1601,1601,purchase,template_impcode_pagata_2,template_ivacode_pagata_2,template_impcode_pagata_2,template_ivacode_pagata_2,,,True,-1,-1
-4a INC,4a INC,l10n_it_chart_template_generic,Iva 4% (debito) INC,,0.04,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_4,l10n_it.template_ivacode_riscossa_4,l10n_it.template_impcode_riscossa_4,l10n_it.template_ivacode_riscossa_4,-1,-1,True,,
-4b INC,4b INC,l10n_it_chart_template_generic,Iva 4% (credito) INC,,0.04,,False,percent,1601,1601,purchase,template_impcode_pagata_4,template_ivacode_pagata_4,template_impcode_pagata_4,template_ivacode_pagata_4,,,True,-1,-1
-00a INC,00a INC,l10n_it_chart_template_generic,Esente IVA (debito) INC,,0,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_0,l10n_it.template_ivacode_riscossa_0,l10n_it.template_impcode_riscossa_0,l10n_it.template_ivacode_riscossa_0,-1,-1,True,,
-2110,2110,l10n_it_chart_template_generic,Iva al 21% detraibile 10%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det10,,template_impcode_pagata_21det10,,,,False,-1,-1
-2110a,2110a,l10n_it_chart_template_generic,Iva al 21% detraibile 10% (D),2,0,2110,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det10,,template_ivacode_pagata_21det10,,,False,,
-2110b,2110b,l10n_it_chart_template_generic,Iva al 21% detraibile 10% (I),1,0.9,2110,False,percent,,,purchase,,,,,,,False,,
-2115,2115,l10n_it_chart_template_generic,Iva al 21% detraibile 15%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det15,,template_impcode_pagata_21det15,,,,False,-1,-1
-2115a,2115a,l10n_it_chart_template_generic,Iva al 21% detraibile 15% (D),2,0,2115,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det15,,template_ivacode_pagata_21det15,,,False,,
-2115b,2115b,l10n_it_chart_template_generic,Iva al 21% detraibile 15% (I),1,0.85,2115,False,percent,,,purchase,,,,,,,False,,
-2140,2140,l10n_it_chart_template_generic,Iva al 21% detraibile 40%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det40,,template_impcode_pagata_21det40,,,,False,-1,-1
-2140a,2140a,l10n_it_chart_template_generic,Iva al 21% detraibile 40% (D),2,0,2140,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det40,,template_ivacode_pagata_21det40,,,False,,
-2140b,2140b,l10n_it_chart_template_generic,Iva al 21% detraibile 40% (I),1,0.6,2140,False,percent,,,purchase,,,,,,,False,,
-21AO,21AO,l10n_it_chart_template_generic,Iva al 21% indetraibile,,0.21,,True,percent,,,purchase,template_impcode_pagata_21ind,,template_impcode_pagata_21ind,,,,False,-1,-1
-21AOa,21AOa,l10n_it_chart_template_generic,Iva al 21% indetraibile (D),2,0,21AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_21ind,,template_ivacode_pagata_21ind,,,False,,
-21AOb,21AOb,l10n_it_chart_template_generic,Iva al 21% indetraibile (I),1,1,21AO,False,percent,,,purchase,,,,,,,False,,
-21I5,21I5,l10n_it_chart_template_generic,IVA al 21% detraibile al 50%,,0.21,,True,percent,,,purchase,template_impcode_pagata_21det50,,template_impcode_pagata_21det50,,,,False,-1,-1
-21I5b,21I5b,l10n_it_chart_template_generic,IVA al 21% detraibile al 50% (I),1,0.5,21I5,False,percent,,,purchase,,,,,,,False,,
-21I5a,21I5a,l10n_it_chart_template_generic,IVA al 21% detraibile al 50% (D),2,0,21I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det50,,template_ivacode_pagata_21det50,,,False,,
-
+21v,21v,l10n_it_chart_template_generic,Iva al 21% (debito),1,0.21,,False,percent,2601,2601,sale,template_impcode_riscossa_21,template_ivacode_riscossa_21,template_impcode_riscossa_21,template_ivacode_riscossa_21,-1,-1,False,1,1
+21a,21a,l10n_it_chart_template_generic,Iva al 21% (credito),2,0.21,,False,percent,1601,1601,purchase,template_impcode_pagata_21,template_ivacode_pagata_21,template_impcode_pagata_21,template_ivacode_pagata_21,1,1,False,-1,-1
+20v,20v,l10n_it_chart_template_generic,Iva al 20% (debito),3,0.2,,False,percent,2601,2601,sale,template_impcode_riscossa_20,template_ivacode_riscossa_20,template_impcode_riscossa_20,template_ivacode_riscossa_20,-1,-1,False,1,1
+20a,20a,l10n_it_chart_template_generic,Iva al 20% (credito),4,0.2,,False,percent,1601,1601,purchase,template_impcode_pagata_20,template_ivacode_pagata_20,template_impcode_pagata_20,template_ivacode_pagata_20,1,1,False,-1,-1
+10v,10v,l10n_it_chart_template_generic,Iva al 10% (debito),5,0.1,,False,percent,2601,2601,sale,template_impcode_riscossa_10,template_ivacode_riscossa_10,template_impcode_riscossa_10,template_ivacode_riscossa_10,-1,-1,False,1,1
+10a,10a,l10n_it_chart_template_generic,Iva al 10% (credito),6,0.1,,False,percent,1601,1601,purchase,template_impcode_pagata_10,template_ivacode_pagata_10,template_impcode_pagata_10,template_ivacode_pagata_10,1,1,False,-1,-1
+10AO,10AO,l10n_it_chart_template_generic,Iva al 10% indetraibile,7,0.1,,True,percent,,,purchase,template_impcode_pagata_10ind,,template_impcode_pagata_10ind,,1,1,False,-1,-1
+10AOb,10AOb,l10n_it_chart_template_generic,Iva al 10% indetraibile (D),200,0,10AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_10,,template_ivacode_pagata_10,1,1,False,-1,-1
+10AOa,10AOa,l10n_it_chart_template_generic,Iva al 10% indetraibile (I),100,1,10AO,False,percent,,,purchase,,template_ivacode_pagata_10ind,,template_ivacode_pagata_10ind,1,1,False,-1,-1
+12v,12v,l10n_it_chart_template_generic,Iva 12% (debito),8,0.12,,False,percent,2601,2601,sale,template_impcode_riscossa_12,template_ivacode_riscossa_12,template_impcode_riscossa_12,template_ivacode_riscossa_12,-1,-1,False,1,1
+12a,12a,l10n_it_chart_template_generic,Iva 12% (credito),9,0.12,,False,percent,1601,1601,purchase,template_impcode_pagata_12,template_ivacode_pagata_12,template_impcode_pagata_12,template_ivacode_pagata_12,1,1,False,-1,-1
+2010,2010,l10n_it_chart_template_generic,Iva al 20% detraibile 10%,10,0.2,,True,percent,,,purchase,template_impcode_pagata_20det10,,template_impcode_pagata_20det10,,1,1,False,-1,-1
+2010b,2010b,l10n_it_chart_template_generic,Iva al 20% detraibile 10% (D),200,0,2010,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det10,,template_ivacode_pagata_20det10,1,1,False,-1,-1
+2010a,2010a,l10n_it_chart_template_generic,Iva al 20% detraibile 10% (I),100,0.9,2010,False,percent,,,purchase,,template_ivacode_pagata_20det10ind,,template_ivacode_pagata_20det10ind,1,1,False,-1,-1
+2015,2015,l10n_it_chart_template_generic,Iva al 20% detraibile 15%,11,0.2,,True,percent,,,purchase,template_impcode_pagata_20det15,,template_impcode_pagata_20det15,,1,1,False,-1,-1
+2015b,2015b,l10n_it_chart_template_generic,Iva al 20% detraibile 15% (D),200,0,2015,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det15,,template_ivacode_pagata_20det15,1,1,False,-1,-1
+2015a,2015a,l10n_it_chart_template_generic,Iva al 20% detraibile 15% (I),100,0.85,2015,False,percent,,,purchase,,template_ivacode_pagata_20det15ind,,template_ivacode_pagata_20det15ind,1,1,False,-1,-1
+2040,2040,l10n_it_chart_template_generic,Iva al 20% detraibile 40%,12,0.2,,True,percent,,,purchase,template_impcode_pagata_20det40,,template_impcode_pagata_20det40,,1,1,False,-1,-1
+2040b,2040b,l10n_it_chart_template_generic,Iva al 20% detraibile 40% (D),200,0,2040,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det40,,template_ivacode_pagata_20det40,1,1,False,-1,-1
+2040a,2040a,l10n_it_chart_template_generic,Iva al 20% detraibile 40% (I),100,0.6,2040,False,percent,,,purchase,,template_ivacode_pagata_20det40ind,,template_ivacode_pagata_20det40ind,1,1,False,-1,-1
+20AO,20AO,l10n_it_chart_template_generic,Iva al 20% indetraibile,13,0.2,,True,percent,,,purchase,template_impcode_pagata_20ind,,template_impcode_pagata_20ind,,1,1,False,-1,-1
+20AOb,20AOb,l10n_it_chart_template_generic,Iva al 20% indetraibile (D),200,0,20AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_20ind,,template_ivacode_pagata_20ind,1,1,False,-1,-1
+20AOa,20AOa,l10n_it_chart_template_generic,Iva al 20% indetraibile (I),100,1,20AO,False,percent,,,purchase,,template_ivacode_pagata_20ind,,template_ivacode_pagata_20ind,1,1,False,-1,-1
+20I5,20I5,l10n_it_chart_template_generic,IVA al 20% detraibile al 50%,14,0.2,,True,percent,,,purchase,template_impcode_pagata_20det50,,template_impcode_pagata_20det50,,1,1,False,-1,-1
+20I5b,20I5b,l10n_it_chart_template_generic,IVA al 20% detraibile al 50% (D),200,0,20I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_20det50,,template_ivacode_pagata_20det50,1,1,False,-1,-1
+20I5a,20I5a,l10n_it_chart_template_generic,IVA al 20% detraibile al 50% (I),100,0.5,20I5,False,percent,,,purchase,,template_ivacode_pagata_20det50ind,,template_ivacode_pagata_20det50ind,1,1,False,-1,-1
+22v,22v,l10n_it_chart_template_generic,Iva 2% (debito),15,0.02,,False,percent,2601,2601,sale,template_impcode_riscossa_2,template_ivacode_riscossa_2,template_impcode_riscossa_2,template_ivacode_riscossa_2,-1,-1,False,1,1
+22a,22a,l10n_it_chart_template_generic,Iva 2% (credito),16,0.02,,False,percent,1601,1601,purchase,template_impcode_pagata_2,template_ivacode_pagata_2,template_impcode_pagata_2,template_ivacode_pagata_2,1,1,False,-1,-1
+4v,4v,l10n_it_chart_template_generic,Iva 4% (debito),17,0.04,,False,percent,2601,2601,sale,template_impcode_riscossa_4,template_ivacode_riscossa_4,template_impcode_riscossa_4,template_ivacode_riscossa_4,-1,-1,False,1,1
+4a,4a,l10n_it_chart_template_generic,Iva 4% (credito),18,0.04,,False,percent,1601,1601,purchase,template_impcode_pagata_4,template_ivacode_pagata_4,template_impcode_pagata_4,template_ivacode_pagata_4,1,1,False,-1,-1
+4AO,4AO,l10n_it_chart_template_generic,Iva al 4% indetraibile,19,0.04,,True,percent,,,purchase,template_impcode_pagata_4ind,,template_impcode_pagata_4ind,,1,1,False,-1,-1
+4AOb,4AOb,l10n_it_chart_template_generic,Iva al 4% indetraibile (D),200,0,4AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_4ind,,template_ivacode_pagata_4ind,1,1,False,-1,-1
+4AOa,4AOa,l10n_it_chart_template_generic,Iva al 4% indetraibile (I),100,1,4AO,False,percent,,,purchase,,template_ivacode_pagata_4ind,,template_ivacode_pagata_4ind,1,1,False,-1,-1
+10I5,10I5,l10n_it_chart_template_generic,IVA al 10% detraibile al 50%,20,0.1,,True,percent,,,purchase,template_impcode_pagata_10det50,,template_impcode_pagata_10det50,,1,1,False,-1,-1
+10I5b,10I5b,l10n_it_chart_template_generic,IVA al 10% detraibile al 50% (D),200,0,10I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_10det50,,template_ivacode_pagata_10det50,1,1,False,-1,-1
+10I5a,10I5a,l10n_it_chart_template_generic,IVA al 10% detraibile al 50% (I),100,0.5,10I5,False,percent,,,purchase,,template_ivacode_pagata_10det50ind,,template_ivacode_pagata_10det50ind,1,1,False,-1,-1
+4I5,4I5,l10n_it_chart_template_generic,IVA al 4% detraibile al 50%,21,0.04,,True,percent,,,purchase,template_impcode_pagata_4det50,,template_impcode_pagata_4det50,,1,1,False,-1,-1
+4I5b,4I5b,l10n_it_chart_template_generic,IVA al 4% detraibile al 50% (D),200,0,4I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_4det50,,template_ivacode_pagata_4det50,1,1,False,-1,-1
+4I5a,4I5a,l10n_it_chart_template_generic,IVA al 4% detraibile al 50% (I),100,0.5,4I5,False,percent,,,purchase,,template_ivacode_pagata_4det50ind,,template_ivacode_pagata_4det50ind,1,1,False,-1,-1
+00v,00v,l10n_it_chart_template_generic,Fuori Campo IVA (debito),22,0,,False,percent,2601,2601,sale,template_impcode_riscossa_0,template_ivacode_riscossa_0,template_impcode_riscossa_0,template_ivacode_riscossa_0,-1,-1,False,1,1
+00a,00a,l10n_it_chart_template_generic,Fuori Campo IVA (credito),23,0,,False,percent,1601,1601,purchase,template_impcode_pagata_0,template_ivacode_pagata_0,template_impcode_pagata_0,template_ivacode_pagata_0,1,1,False,-1,-1
+00art15v,00art15v,l10n_it_chart_template_generic,Imponibile Escluso Art.15 (debito),22,0,,False,percent,2601,2601,sale,template_impcode_riscossa_art15,template_ivacode_riscossa_art15,template_impcode_riscossa_art15,template_ivacode_riscossa_art15,-1,-1,False,1,1
+00art15a,00art15a,l10n_it_chart_template_generic,Imponibile Escluso Art.15 (credito),23,0,,False,percent,1601,1601,purchase,template_impcode_pagata_art15,template_ivacode_pagata_art15,template_impcode_pagata_art15,template_ivacode_pagata_art15,1,1,False,-1,-1
+21v INC,21v INC,l10n_it_chart_template_generic,Iva al 21% (debito) INC,24,0.21,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_21,l10n_it.template_ivacode_riscossa_21,l10n_it.template_impcode_riscossa_21,l10n_it.template_ivacode_riscossa_21,-1,-1,True,1,1
+20v INC,20v INC,l10n_it_chart_template_generic,Iva al 20% (debito) INC,25,0.2,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_20,l10n_it.template_ivacode_riscossa_20,l10n_it.template_impcode_riscossa_20,l10n_it.template_ivacode_riscossa_20,-1,-1,True,1,1
+10v INC,10v INC,l10n_it_chart_template_generic,Iva al 10% (debito) INC,26,0.1,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_10,l10n_it.template_ivacode_riscossa_10,l10n_it.template_impcode_riscossa_10,l10n_it.template_ivacode_riscossa_10,-1,-1,True,1,1
+12v INC,12v INC,l10n_it_chart_template_generic,Iva 12% (debito) INC,27,0.12,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_12,l10n_it.template_ivacode_riscossa_12,l10n_it.template_impcode_riscossa_12,l10n_it.template_ivacode_riscossa_12,-1,-1,True,1,1
+22v INC,22v INC,l10n_it_chart_template_generic,Iva 2% (debito) INC,28,0.02,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_2,l10n_it.template_ivacode_riscossa_2,l10n_it.template_impcode_riscossa_2,l10n_it.template_ivacode_riscossa_2,-1,-1,True,1,1
+4v INC,4v INC,l10n_it_chart_template_generic,Iva 4% (debito) INC,29,0.04,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_4,l10n_it.template_ivacode_riscossa_4,l10n_it.template_impcode_riscossa_4,l10n_it.template_ivacode_riscossa_4,-1,-1,True,1,1
+00v INC,00v INC,l10n_it_chart_template_generic,Fuori Campo IVA (debito) INC,30,0,,False,percent,l10n_it.2601,l10n_it.2601,sale,l10n_it.template_impcode_riscossa_0,l10n_it.template_ivacode_riscossa_0,l10n_it.template_impcode_riscossa_0,l10n_it.template_ivacode_riscossa_0,-1,-1,True,1,1
+2110,2110,l10n_it_chart_template_generic,Iva al 21% detraibile 10%,31,0.21,,True,percent,,,purchase,template_impcode_pagata_21det10,,template_impcode_pagata_21det10,,1,1,False,-1,-1
+2110b,2110b,l10n_it_chart_template_generic,Iva al 21% detraibile 10% (D),200,0,2110,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det10,,template_ivacode_pagata_21det10,1,1,False,-1,-1
+2110a,2110a,l10n_it_chart_template_generic,Iva al 21% detraibile 10% (I),100,0.9,2110,False,percent,,,purchase,,template_ivacode_pagata_21det10ind,,template_ivacode_pagata_21det10ind,1,1,False,-1,-1
+2115,2115,l10n_it_chart_template_generic,Iva al 21% detraibile 15%,32,0.21,,True,percent,,,purchase,template_impcode_pagata_21det15,,template_impcode_pagata_21det15,,1,1,False,-1,-1
+2115b,2115b,l10n_it_chart_template_generic,Iva al 21% detraibile 15% (D),200,0,2115,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det15,,template_ivacode_pagata_21det15,1,1,False,-1,-1
+2115a,2115a,l10n_it_chart_template_generic,Iva al 21% detraibile 15% (I),100,0.85,2115,False,percent,,,purchase,,template_ivacode_pagata_21det15ind,,template_ivacode_pagata_21det15ind,1,1,False,-1,-1
+2140,2140,l10n_it_chart_template_generic,Iva al 21% detraibile 40%,33,0.21,,True,percent,,,purchase,template_impcode_pagata_21det40,,template_impcode_pagata_21det40,,1,1,False,-1,-1
+2140b,2140b,l10n_it_chart_template_generic,Iva al 21% detraibile 40% (D),200,0,2140,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det40,,template_ivacode_pagata_21det40,1,1,False,-1,-1
+2140a,2140a,l10n_it_chart_template_generic,Iva al 21% detraibile 40% (I),100,0.6,2140,False,percent,,,purchase,,template_ivacode_pagata_21det40ind,,template_ivacode_pagata_21det40ind,1,1,False,-1,-1
+21AO,21AO,l10n_it_chart_template_generic,Iva al 21% indetraibile,34,0.21,,True,percent,,,purchase,template_impcode_pagata_21ind,,template_impcode_pagata_21ind,,1,1,False,-1,-1
+21AOb,21AOb,l10n_it_chart_template_generic,Iva al 21% indetraibile (D),200,0,21AO,False,balance,1601,1601,purchase,,template_ivacode_pagata_21ind,,template_ivacode_pagata_21ind,1,1,False,-1,-1
+21AOa,21AOa,l10n_it_chart_template_generic,Iva al 21% indetraibile (I),100,1,21AO,False,percent,,,purchase,,template_ivacode_pagata_21ind,,template_ivacode_pagata_21ind,1,1,False,-1,-1
+21I5,21I5,l10n_it_chart_template_generic,IVA al 21% detraibile al 50%,35,0.21,,True,percent,,,purchase,template_impcode_pagata_21det50,,template_impcode_pagata_21det50,,1,1,False,-1,-1
+21I5b,21I5b,l10n_it_chart_template_generic,IVA al 21% detraibile al 50% (D),200,0,21I5,False,balance,1601,1601,purchase,,template_ivacode_pagata_21det50,,template_ivacode_pagata_21det50,1,1,False,-1,-1
+21I5a,21I5a,l10n_it_chart_template_generic,IVA al 21% detraibile al 50% (I),100,0.5,21I5,False,percent,,,purchase,,template_ivacode_pagata_21det50ind,,template_ivacode_pagata_21det50ind,1,1,False,-1,-1
diff --git a/addons/l10n_lu/account_financial_report.xml b/addons/l10n_lu/account_financial_report.xml
index b39b0ceb15f..62a7a8c8d7e 100644
--- a/addons/l10n_lu/account_financial_report.xml
+++ b/addons/l10n_lu/account_financial_report.xml
@@ -84,7 +84,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_23">
- <field name="name">2. Concessions, brevets, licences, marques, ainsi que droits et valeurs similaires s&#8217;ils ont &#233;t&#233;</field>
+ <field name="name">2. Concessions, brevets, licences, marques, ainsi que droits et valeurs similaires s&#8217;ils ont &#233;t&#233;</field>
<field name="sequence">115</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
@@ -256,7 +256,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_42">
- <field name="name">I. Stocks </field>
+ <field name="name">I. Stocks</field>
<field name="sequence">153</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
@@ -292,7 +292,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_46">
- <field name="name">4. Acomptes vers&#233;s </field>
+ <field name="name">4. Acomptes vers&#233;s</field>
<field name="sequence">161</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
@@ -301,7 +301,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_47">
- <field name="name">II. Cr&#233;ances </field>
+ <field name="name">II. Cr&#233;ances</field>
<field name="sequence">163</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
@@ -364,7 +364,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_54">
- <field name="name">3. Cr&#233;ances sur des entreprises avec lesquelles la soci&#233;t&#233; a un</field>
+ <field name="name">3. Cr&#233;ances sur des entreprises avec lesquelles la soci&#233;t&#233; a un lien de participation</field>
<field name="sequence">177</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
@@ -436,7 +436,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_62">
- <field name="name">2. Actions propres ou parts propres </field>
+ <field name="name">2. Actions propres ou parts propres</field>
<field name="sequence">193</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
@@ -445,7 +445,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_63">
- <field name="name">3. Autres valeurs mobili&#232;res </field>
+ <field name="name">3. Autres valeurs mobili&#232;res</field>
<field name="sequence">195</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
@@ -963,7 +963,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_119">
- <field name="name">CHARGES</field>
+ <field name="name">A. CHARGES</field>
<field name="sequence">641</field>
<field name="sign" eval="1"/>
<field name="display_detail">detail_flat</field>
@@ -972,7 +972,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_120">
- <field name="name">1. Consommation de marchandises et de mati&#232;res premi&#232;res et consommables</field>
+ <field name="name">1. Consommation de marchandises et de mati&#232;res premi&#232;res et consommables</field>
<field name="sequence">601</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
@@ -1044,7 +1044,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_128">
- <field name="name">a) sur frais d'&#233;tablissement et sur immobilisations corporelles</field>
+ <field name="name">a) sur frais d'&#233;tablissement et sur immobilisations corporelles et incorporelles</field>
<field name="sequence">617</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
@@ -1071,7 +1071,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_131">
- <field name="name">6. Corrections de valeur sur immobilisations financi&#232;res et aj</field>
+ <field name="name">6. Corrections de valeur sur immobilisations financi&#232;res et ajustement de juste valeur sur immobilisations financières</field>
<field name="sequence">623</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
@@ -1080,7 +1080,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_132">
- <field name="name">7. Corrections de valeur et ajustement de juste valeur sur &#233;l&#233;m</field>
+ <field name="name">7. Corrections de valeur et ajustement de juste valeur sur &#233;l&#233;ments financiers de l'actif circulant. Moins-values de cessions des valeurs mobilières</field>
<field name="sequence">625</field>
<field name="sign" eval="1"/>
<field name="display_detail">no_detail</field>
@@ -1143,7 +1143,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_140">
- <field name="name">PRODUITS</field>
+ <field name="name">B. PRODUITS</field>
<field name="sequence">737</field>
<field name="sign" eval="-1"/>
<field name="display_detail">detail_flat</field>
@@ -1161,7 +1161,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_142">
- <field name="name">2. Variation des stocks de produits finis, et de produits et de commandes en cours</field>
+ <field name="name">2. Variation des stocks de produits finis, et de produits et de commandes en cours</field>
<field name="sequence">703</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
@@ -1188,7 +1188,7 @@
</record>
<record model="account.financial.report" id="account_financial_report_145">
- <field name="name">a) sur frais d'&#233;tablissement et sur immobilisations corporelles</field>
+ <field name="name">a) sur frais d'&#233;tablissement et sur immobilisations corporelles et incorporelles</field>
<field name="sequence">709</field>
<field name="sign" eval="-1"/>
<field name="display_detail">no_detail</field>
diff --git a/addons/l10n_lu/wizard/print_vat.py b/addons/l10n_lu/wizard/print_vat.py
index bfa058720d3..04d4fe9a3b7 100644
--- a/addons/l10n_lu/wizard/print_vat.py
+++ b/addons/l10n_lu/wizard/print_vat.py
@@ -64,7 +64,7 @@ class report_custom(report_int):
self.obj.render()
return (self.obj.pdf, 'pdf')
except Exception:
- raise osv.except_osv(_('pdf not created !'), _('Please check if package pdftk is installed!'))
+ raise osv.except_osv(_('PDF Not Created!'), _('Please check if package pdftk is installed!'))
report_custom('report.l10n_lu.tax.report.print')
diff --git a/addons/mail/mail_mail.py b/addons/mail/mail_mail.py
index 8fab4347d0d..bd2b9c3f18a 100644
--- a/addons/mail/mail_mail.py
+++ b/addons/mail/mail_mail.py
@@ -60,9 +60,6 @@ class mail_mail(osv.Model):
'recipient_ids': fields.many2many('res.partner', string='To (Partners)'),
'email_cc': fields.char('Cc', help='Carbon copy message recipients'),
'body_html': fields.text('Rich-text Contents', help="Rich-text/HTML message"),
- # If not set in create values, auto-detected based on create values (res_id, model, email_from)
- 'reply_to': fields.char('Reply-To',
- help='Preferred response address for the message'),
# Auto-detected based on create() - if 'mail_message_id' was passed then this mail is a notification
# and during unlink() we will not cascade delete the parent and its attachments
'notification': fields.boolean('Is Notification',
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py
index c30d00f5af7..252179614c6 100644
--- a/addons/mail/mail_message.py
+++ b/addons/mail/mail_message.py
@@ -158,6 +158,7 @@ class mail_message(osv.Model):
'author_id': fields.many2one('res.partner', 'Author', select=1,
ondelete='set null',
help="Author of the message. If not set, email_from may hold an email address that did not match any partner."),
+ 'author_avatar': fields.related('author_id', 'image_small', type="binary", string="Author's Avatar"),
'partner_ids': fields.many2many('res.partner', string='Recipients'),
'notified_partner_ids': fields.many2many('res.partner', 'mail_notification',
'message_id', 'partner_id', 'Notified partners',
@@ -291,7 +292,7 @@ class mail_message(osv.Model):
}
if starred:
values['read'] = False
-
+
notif_ids = notification_obj.search(cr, uid, domain, context=context)
# all message have notifications: already set them as (un)starred
@@ -398,6 +399,7 @@ class mail_message(osv.Model):
'parent_id': parent_id,
'is_private': is_private,
'author_id': False,
+ 'author_avatar': message.author_avatar,
'is_author': False,
'partner_ids': [],
'vote_nb': vote_nb,
@@ -528,7 +530,6 @@ class mail_message(osv.Model):
message_unload_ids = message_unload_ids if message_unload_ids is not None else []
if message_unload_ids:
domain += [('id', 'not in', message_unload_ids)]
- notification_obj = self.pool.get('mail.notification')
limit = limit or self._message_read_limit
message_tree = {}
message_list = []
@@ -738,12 +739,10 @@ class mail_message(osv.Model):
for model, doc_dict in model_record_ids.items():
model_obj = self.pool[model]
mids = model_obj.exists(cr, uid, doc_dict.keys())
- if operation in ['create', 'write', 'unlink']:
- model_obj.check_access_rights(cr, uid, 'write')
- model_obj.check_access_rule(cr, uid, mids, 'write', context=context)
+ if hasattr(model_obj, 'check_mail_message_access'):
+ model_obj.check_mail_message_access(cr, uid, mids, operation, context=context)
else:
- model_obj.check_access_rights(cr, uid, operation)
- model_obj.check_access_rule(cr, uid, mids, operation, context=context)
+ self.pool['mail.thread'].check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context)
document_related_ids += [mid for mid, message in message_values.iteritems()
if message.get('model') == model and message.get('res_id') in mids]
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index 80df8ad6e99..a46f416f44b 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -101,12 +101,16 @@ class mail_thread(osv.AbstractModel):
if catchall_domain and model and res_id: # specific res_id -> find its alias (i.e. section_id specified)
object_id = self.pool.get(model).browse(cr, uid, res_id, context=context)
- alias = object_id.alias_id
+ # check that the alias effectively creates new records
+ if object_id.alias_id and object_id.alias_id.alias_model_id and \
+ object_id.alias_id.alias_model_id.model == self._name and \
+ object_id.alias_id.alias_force_thread_id == 0:
+ alias = object_id.alias_id
elif catchall_domain and model: # no specific res_id given -> generic help message, take an example alias (i.e. alias of some section_id)
model_id = self.pool.get('ir.model').search(cr, uid, [("model", "=", self._name)], context=context)[0]
alias_obj = self.pool.get('mail.alias')
- alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id)], context=context, limit=1, order='id ASC')
- if alias_ids:
+ alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id), ('alias_force_thread_id', '=', 0)], context=context, order='id ASC')
+ if alias_ids and len(alias_ids) == 1: # if several aliases -> incoherent to propose one guessed from nowhere, therefore avoid if several aliases
alias = alias_obj.browse(cr, uid, alias_ids[0], context=context)
if alias:
@@ -281,14 +285,21 @@ class mail_thread(osv.AbstractModel):
context = {}
thread_id = super(mail_thread, self).create(cr, uid, values, context=context)
+ # automatic logging unless asked not to (mainly for various testing purpose)
+ if not context.get('mail_create_nolog'):
+ self.message_post(cr, uid, thread_id, body=_('%s created') % (self._description), context=context)
+
# subscribe uid unless asked not to
if not context.get('mail_create_nosubscribe'):
self.message_subscribe_users(cr, uid, [thread_id], [uid], context=context)
self.message_auto_subscribe(cr, uid, [thread_id], values.keys(), context=context)
- # automatic logging unless asked not to (mainly for various testing purpose)
- if not context.get('mail_create_nolog'):
- self.message_post(cr, uid, thread_id, body=_('%s created') % (self._description), context=context)
+ # track values
+ tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=context)
+ if tracked_fields:
+ initial_values = {thread_id: dict((item, False) for item in tracked_fields)}
+ self.message_track(cr, uid, [thread_id], tracked_fields, initial_values, context=context)
+
return thread_id
def write(self, cr, uid, ids, values, context=None):
@@ -449,6 +460,20 @@ class mail_thread(osv.AbstractModel):
ir_attachment_obj.unlink(cr, uid, attach_ids, context=context)
return True
+ def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None):
+ """ mail.message check permission rules for related document. This method is
+ meant to be inherited in order to implement addons-specific behavior.
+ A common behavior would be to allow creating messages when having read
+ access rule on the document, for portal document such as issues. """
+ if not model_obj:
+ model_obj = self
+ if operation in ['create', 'write', 'unlink']:
+ model_obj.check_access_rights(cr, uid, 'write')
+ model_obj.check_access_rule(cr, uid, mids, 'write', context=context)
+ else:
+ model_obj.check_access_rights(cr, uid, operation)
+ model_obj.check_access_rule(cr, uid, mids, operation, context=context)
+
def _get_formview_action(self, cr, uid, id, model=None, context=None):
""" Return an action to open the document. This method is meant to be
overridden in addons that want to give specific view ids for example.
diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js
index 8631bc70baa..7df6cdbef0d 100644
--- a/addons/mail/static/src/js/mail.js
+++ b/addons/mail/static/src/js/mail.js
@@ -219,6 +219,7 @@ openerp.mail = function (session) {
this.type = datasets.type || false,
this.subtype = datasets.subtype || false,
this.is_author = datasets.is_author || false,
+ this.author_avatar = datasets.author_avatar || false,
this.is_private = datasets.is_private || false,
this.subject = datasets.subject || false,
this.name = datasets.name || false,
@@ -260,8 +261,10 @@ openerp.mail = function (session) {
this.date = this.date ? session.web.str_to_datetime(this.date) : false;
if (this.date && new Date().getTime()-this.date.getTime() < 7*24*60*60*1000) {
this.timerelative = $.timeago(this.date);
- }
- if (this.type == 'email' && (!this.author_id || !this.author_id[0])) {
+ }
+ if (this.author_avatar) {
+ this.avatar = "data:image/png;base64," + this.author_avatar;
+ } else if (this.type == 'email' && (!this.author_id || !this.author_id[0])) {
this.avatar = ('/mail/static/src/img/email_icon.png');
} else if (this.author_id && this.template != 'mail.compose_message') {
this.avatar = mail.ChatterUtils.get_image(this.session, 'res.partner', 'image_small', this.author_id[0]);
@@ -850,9 +853,9 @@ openerp.mail = function (session) {
on_checked_recipient: function (event) {
var $input = $(event.target);
- var email = $input.attr("data");
+ var full_name = $input.attr("data");
_.each(this.recipients, function (recipient) {
- if (recipient.email_address == email) {
+ if (recipient.full_name == full_name) {
recipient.checked = $input.is(":checked");
}
});
diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml
index ab82d650f30..f5004941a8d 100644
--- a/addons/mail/static/src/xml/mail.xml
+++ b/addons/mail/static/src/xml/mail.xml
@@ -143,7 +143,7 @@
<div class="oe_recipients" t-if="!widget.is_log">
<t t-foreach='widget.recipients' t-as='recipient'>
<label t-attf-title="Add as recipient and follower (reason: #{recipient.reason})">
- <input type="checkbox" t-att-checked="recipient.checked ? 'checked' : undefined" t-att-data="recipient.email_address"/>
+ <input type="checkbox" t-att-checked="recipient.checked ? 'checked' : undefined" t-att-data="recipient.full_name"/>
<t t-raw="recipient.name"/>
<t t-if="recipient.email_address">(<t t-raw="recipient.email_address"/>)</t>
<t t-if="!recipient.email_address">(no email address)</t>
diff --git a/addons/mail/tests/test_mail_gateway.py b/addons/mail/tests/test_mail_gateway.py
index ee166b82dde..5615e22b2c2 100644
--- a/addons/mail/tests/test_mail_gateway.py
+++ b/addons/mail/tests/test_mail_gateway.py
@@ -147,6 +147,8 @@ class TestMailgateway(TestMailBase):
self.assertEqual(mail.reply_to, 'other@example.com',
'mail_mail: reply_to should be equal to the one coming from creation values')
# Do: create a mail_mail with the previous mail_message
+ self.mail_message.write(cr, uid, [msg_id], {'reply_to': 'custom@example.com'})
+ msg.refresh()
mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'})
mail = self.mail_mail.browse(cr, uid, mail_id)
# Test: mail_mail content
@@ -177,12 +179,15 @@ class TestMailgateway(TestMailBase):
mail = self.mail_mail.browse(cr, uid, mail_id)
# Test: mail_mail content
self.assertEqual(mail.reply_to, msg.email_from,
- 'mail_mail: reply_to should equal to mail_message.email_from when having no document or default alias')
+ 'mail_mail: reply_to should be equal to mail_message.email_from when having no document or default alias')
# Data: set catchall domain
self.registry('ir.config_parameter').set_param(cr, uid, 'mail.catchall.domain', 'schlouby.fr')
self.registry('ir.config_parameter').unlink(cr, uid, self.registry('ir.config_parameter').search(cr, uid, [('key', '=', 'mail.catchall.alias')]))
+ # Update message
+ self.mail_message.write(cr, uid, [msg_id], {'email_from': False, 'reply_to': False})
+ msg.refresh()
# Do: create a mail_mail based on the previous mail_message
mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'})
mail = self.mail_mail.browse(cr, uid, mail_id)
@@ -191,7 +196,7 @@ class TestMailgateway(TestMailBase):
'mail_mail: reply_to should equal the mail.group alias')
# Update message
- self.mail_message.write(cr, uid, [msg_id], {'res_id': False, 'email_from': 'someone@schlouby.fr'})
+ self.mail_message.write(cr, uid, [msg_id], {'res_id': False, 'email_from': 'someone@schlouby.fr', 'reply_to': False})
msg.refresh()
# Do: create a mail_mail based on the previous mail_message
mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'})
@@ -203,6 +208,9 @@ class TestMailgateway(TestMailBase):
# Data: set catchall alias
self.registry('ir.config_parameter').set_param(self.cr, self.uid, 'mail.catchall.alias', 'gateway')
+ # Update message
+ self.mail_message.write(cr, uid, [msg_id], {'email_from': False, 'reply_to': False})
+ msg.refresh()
# Do: create a mail_mail based on the previous mail_message
mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'})
mail = self.mail_mail.browse(cr, uid, mail_id)
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index dfda3038de8..7bf4d47d1ff 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -270,6 +270,7 @@ class mail_compose_message(osv.TransientModel):
context.pop('default_partner_ids', None)
# post the message
if mass_mail_mode and not wizard.post:
+ post_values['body_html'] = post_values.get('body', '')
post_values['recipient_ids'] = [(4, id) for id in post_values.pop('partner_ids', [])]
self.pool.get('mail.mail').create(cr, uid, post_values, context=context)
else:
diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py
index 3ad7155dad6..6347e22d576 100644
--- a/addons/mrp/procurement.py
+++ b/addons/mrp/procurement.py
@@ -33,6 +33,11 @@ class procurement_order(osv.osv):
'production_id': fields.many2one('mrp.production', 'Manufacturing Order'),
}
+ def _prepare_order_line_procurement(self, cr, uid, order, line, move_id, date_planned, context=None):
+ result = super(procurement_order, self)._prepare_order_line_procurement(cr, uid, order, line, move_id, date_planned, context)
+ result['property_ids'] = [(6, 0, [x.id for x in line.property_ids])]
+ return result
+
def check_produce_product(self, cr, uid, procurement, context=None):
''' Depict the capacity of the procurement workflow to produce products (not services)'''
return True
diff --git a/addons/mrp/report/order.rml b/addons/mrp/report/order.rml
index 8833d08e596..f413a6cfc70 100644
--- a/addons/mrp/report/order.rml
+++ b/addons/mrp/report/order.rml
@@ -139,37 +139,18 @@
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
- <paraStyle name="Standard" fontName="Helvetica"/>
- <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Table Contents" fontName="Helvetica"/>
- <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
- <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="Index" fontName="Helvetica"/>
- <paraStyle name="Footer" fontName="Helvetica"/>
- <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
- <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_space" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_header" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_Details" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_default_8" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Bold_8" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_tblheader_General_Centre" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_Details_Centre" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_default_Centre_8" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Bold_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Centre_9" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Right_9" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_2" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
@@ -178,16 +159,16 @@
<blockTable colWidths="256.0,61.0,107.0,104.0" style="Table8">
<tr>
<td>
- <para style="terp_tblheader_Details">Product </para>
+ <para style="terp_tblheader_Details"><b>Product </b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Quantity</para>
+ <para style="terp_tblheader_Details_Centre"><b>Quantity</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Source Location</para>
+ <para style="terp_tblheader_Details_Centre"><b>Source Location</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Destination Location</para>
+ <para style="terp_tblheader_Details_Centre"><b>Destination Location</b></para>
</td>
</tr>
</blockTable>
@@ -196,20 +177,20 @@
<para style="terp_default_8">
<font color="white"> </font>
</para>
- <para style="terp_header">Production Order N° : [[ o.name ]]</para>
+ <para style="terp_header"><b>Production Order N° : [[ o.name ]]</b></para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="193.0,206.0,129.0" style="Table3">
<tr>
<td>
- <para style="terp_tblheader_General_Centre">Source Document</para>
+ <para style="terp_tblheader_General_Centre"><b>Source Document</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Product </para>
+ <para style="terp_tblheader_General_Centre"><b>Product </b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Quantity</para>
+ <para style="terp_tblheader_General_Centre"><b>Quantity</b></para>
</td>
</tr>
</blockTable>
@@ -232,16 +213,16 @@
<blockTable colWidths="193.0,92.0,114.0,129.0" repeatRows="1" style="Table1">
<tr>
<td>
- <para style="terp_tblheader_General_Centre">Scheduled Date</para>
+ <para style="terp_tblheader_General_Centre"><b>Scheduled Date</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Printing date</para>
+ <para style="terp_tblheader_General_Centre"><b>Printing date</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Partner Ref</para>
+ <para style="terp_tblheader_General_Centre"><b>Partner Ref</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">SO Number</para>
+ <para style="terp_tblheader_General_Centre"><b>SO Number</b></para>
</td>
</tr>
</blockTable>
@@ -266,26 +247,26 @@
<para style="terp_default_8">
<font color="white"> </font>
</para>
- <para style="terp_default_Bold_8">Work Orders [[ o.workcenter_lines ==[] and removeParentNode('para')]]</para>
+ <para style="terp_default_Bold_8"><b>Work Orders [[ o.workcenter_lines ==[] and removeParentNode('para')]]</b></para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="74.0,212.0,112.0,66.0,64.0" style="Table6">
<tr>
<td>
- <para style="terp_tblheader_General_Centre">Sequence</para>
+ <para style="terp_tblheader_General_Centre"><b>Sequence</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Name [[ o.workcenter_lines ==[] and removeParentNode('blockTable')]]</para>
+ <para style="terp_tblheader_Details_Centre"><b>Name [[ o.workcenter_lines ==[] and removeParentNode('blockTable')]]</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">WorkCenter</para>
+ <para style="terp_tblheader_General_Centre"><b>WorkCenter</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">No. Of Cycles</para>
+ <para style="terp_tblheader_General_Centre"><b>No. Of Cycles</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">No. Of Hours</para>
+ <para style="terp_tblheader_General_Centre"><b>No. Of Hours</b></para>
</td>
</tr>
</blockTable>
@@ -317,28 +298,28 @@
<para style="terp_default_8">
<font color="white"> </font>
</para>
- <para style="terp_default_Bold_9">Bill Of Material </para>
+ <para style="terp_default_Bold_9"><b>Bill Of Material </b></para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="256.0,61.0,107.0,104.0" style="Table8">
<tr>
<td>
- <para style="terp_tblheader_Details">Product </para>
+ <para style="terp_tblheader_Details"><b>Product </b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Quantity</para>
+ <para style="terp_tblheader_Details_Centre"><b>Quantity</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Source Location</para>
+ <para style="terp_tblheader_Details_Centre"><b>Source Location</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Destination Location</para>
+ <para style="terp_tblheader_Details_Centre"><b>Destination Location</b></para>
</td>
</tr>
</blockTable>
<section>
- <para style="terp_default_Bold_9">Products to Consume [[ o.move_lines ==[] and removeParentNode('section')]]</para>
+ <para style="terp_default_Bold_9"><b>Products to Consume [[ o.move_lines ==[] and removeParentNode('section')]]</b></para>
<section>
<para style="terp_default_2">[[ repeatIn(o.move_lines,'line') ]]</para>
<blockTable colWidths="250.0,65.0,108.0,104.0" style="Table9">
@@ -363,7 +344,7 @@
<para style="terp_default_Bold_9">
<font color="white"> </font>
</para>
- <para style="terp_default_Bold_9">Consumed Products [[ o.move_lines2 ==[] and removeParentNode('section')]]</para>
+ <para style="terp_default_Bold_9"><b>Consumed Products [[ o.move_lines2 ==[] and removeParentNode('section')]]</b></para>
<section>
<para style="terp_default_2">[[ repeatIn(o.move_lines2,'line2') ]]</para>
<blockTable colWidths="251.0,66.0,106.0,104.0" style="Table10">
diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py
index d6f026530dc..87861ba8fc6 100644
--- a/addons/mrp_operations/mrp_operations.py
+++ b/addons/mrp_operations/mrp_operations.py
@@ -128,7 +128,7 @@ class mrp_production_workcenter_line(osv.osv):
elif prod_obj.state =='in_production':
return
else:
- raise osv.except_osv(_('Error!'),_('Manufacturing order cannot start in state "%s"!') % (prod_obj.state,))
+ raise osv.except_osv(_('Error!'),_('Manufacturing order cannot be started in state "%s"!') % (prod_obj.state,))
else:
oper_ids = self.search(cr,uid,[('production_id','=',prod_obj.id)])
obj = self.browse(cr,uid,oper_ids)
@@ -443,7 +443,7 @@ class mrp_operations_operation(osv.osv):
if not oper_objs:
if code.start_stop!='start':
- raise osv.except_osv(_('Sorry!'),_('Operation is not started yet !'))
+ raise osv.except_osv(_('Sorry!'),_('Operation is not started yet!'))
return False
else:
for oper in oper_objs:
diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py
index 43ee34b0c05..f7b082db74b 100644
--- a/addons/mrp_repair/mrp_repair.py
+++ b/addons/mrp_repair/mrp_repair.py
@@ -365,7 +365,7 @@ class mrp_repair(osv.osv):
if repair.state in ('draft','cancel') or repair.invoice_id:
continue
if not (repair.partner_id.id and repair.partner_invoice_id.id):
- raise osv.except_osv(_('No partner !'),_('You have to select a Partner Invoice Address in the repair form !'))
+ raise osv.except_osv(_('No partner!'),_('You have to select a Partner Invoice Address in the repair form!'))
comment = repair.quotation_notes
if (repair.invoice_method != 'none'):
if group and repair.partner_invoice_id.id in invoices_group:
@@ -582,7 +582,7 @@ class ProductChangeMixin(object):
result['product_uom'] = product_obj.uom_id and product_obj.uom_id.id or False
if not pricelist:
warning = {
- 'title':'No Pricelist !',
+ 'title':'No Pricelist!',
'message':
'You have to select a pricelist in the Repair form !\n'
'Please set one before choosing a product.'
diff --git a/addons/multi_company/i18n/ru.po b/addons/multi_company/i18n/ru.po
index 3dea680c371..e1665d9c838 100644
--- a/addons/multi_company/i18n/ru.po
+++ b/addons/multi_company/i18n/ru.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
-"PO-Revision-Date: 2012-08-17 11:09+0000\n"
+"PO-Revision-Date: 2013-06-06 10:25+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-03-16 05:36+0000\n"
-"X-Generator: Launchpad (build 16532)\n"
+"X-Launchpad-Export-Date: 2013-06-07 05:48+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: multi_company
#: model:ir.ui.menu,name:multi_company.menu_custom_multicompany
@@ -45,6 +45,16 @@ msgid ""
"Thank you in advance for your cooperation.\n"
"Best Regards,"
msgstr ""
+"Уважаемые господа,\n"
+"\n"
+"Наши записи зафиксировали что некоторые платежи остаются неоплаченными. "
+"Пожалуйста ознакомьтесь с подробностями ниже.\n"
+"Если сумма уже была оплачена, пожалуйста проигнорируйте это оповещение. В "
+"ином случае, пожалуйста перечислите нам всю сумму отображенную ниже.\n"
+"Если у вас есть какие-либо замечания, пожалуйста свяжитесь с нами.\n"
+"\n"
+"Заранее благодарим за сотрудничество.\n"
+"С наилучшими пожеланиями,"
#. module: multi_company
#: view:multi_company.default:0
diff --git a/addons/note/i18n/ru.po b/addons/note/i18n/ru.po
new file mode 100644
index 00000000000..ef2cd6be0c1
--- /dev/null
+++ b/addons/note/i18n/ru.po
@@ -0,0 +1,286 @@
+# Russian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-12-21 17:04+0000\n"
+"PO-Revision-Date: 2013-06-06 10:35+0000\n"
+"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-06-07 05:48+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
+
+#. module: note
+#: field:note.note,memo:0
+msgid "Note Content"
+msgstr "Содержание заметки"
+
+#. module: note
+#: view:note.stage:0
+msgid "Stages of Notes"
+msgstr "Этапы заметок"
+
+#. module: note
+#: model:note.stage,name:note.demo_note_stage_04
+#: model:note.stage,name:note.note_stage_02
+msgid "This Week"
+msgstr "Эта неделя"
+
+#. module: note
+#: model:ir.model,name:note.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: note
+#: model:ir.model,name:note.model_note_tag
+msgid "Note Tag"
+msgstr "Тег заметки"
+
+#. module: note
+#: model:res.groups,name:note.group_note_fancy
+msgid "Notes / Fancy mode"
+msgstr ""
+
+#. module: note
+#: model:ir.model,name:note.model_note_note
+#: view:note.note:0
+msgid "Note"
+msgstr "Заметка"
+
+#. module: note
+#: view:note.note:0
+msgid "Group By..."
+msgstr "Группировать по ..."
+
+#. module: note
+#: field:note.note,message_follower_ids:0
+msgid "Followers"
+msgstr "Подписчики"
+
+#. module: note
+#: model:ir.actions.act_window,help:note.action_note_note
+msgid ""
+"<p class=\"oe_view_nocontent_create\">\n"
+" Click to add a personal note.\n"
+" </p><p>\n"
+" Use notes to organize personal tasks or notes. All\n"
+" notes are private; no one else will be able to see them. "
+"However\n"
+" you can share some notes with other people by inviting "
+"followers\n"
+" on the note. (Useful for meeting minutes, especially if\n"
+" you activate the pad feature for collaborative writings).\n"
+" </p><p>\n"
+" You can customize how you process your notes/tasks by adding,\n"
+" removing or modifying columns.\n"
+" </p>\n"
+" "
+msgstr ""
+
+#. module: note
+#: model:note.stage,name:note.demo_note_stage_01
+#: model:note.stage,name:note.note_stage_01
+msgid "Today"
+msgstr "Сегодня"
+
+#. module: note
+#: model:ir.model,name:note.model_res_users
+msgid "Users"
+msgstr "Пользователи"
+
+#. module: note
+#: view:note.note:0
+msgid "í"
+msgstr ""
+
+#. module: note
+#: view:note.stage:0
+msgid "Stage of Notes"
+msgstr "Этап заметок"
+
+#. module: note
+#: field:note.note,message_unread:0
+msgid "Unread Messages"
+msgstr "Непрочитанные"
+
+#. module: note
+#: field:note.note,current_partner_id:0
+msgid "unknown"
+msgstr "неизвестно"
+
+#. module: note
+#: view:note.note:0
+msgid "By sticky note Category"
+msgstr ""
+
+#. module: note
+#: help:note.note,message_unread:0
+msgid "If checked new messages require your attention."
+msgstr "Если отмечено, новые сообщения требуют вашего внимания."
+
+#. module: note
+#: field:note.stage,name:0
+msgid "Stage Name"
+msgstr "Название этапа"
+
+#. module: note
+#: field:note.note,message_is_follower:0
+msgid "Is a Follower"
+msgstr "Подписан"
+
+#. module: note
+#: model:note.stage,name:note.demo_note_stage_02
+msgid "Tomorrow"
+msgstr "Завтра"
+
+#. module: note
+#: view:note.note:0
+#: field:note.note,open:0
+msgid "Active"
+msgstr "Активно"
+
+#. module: note
+#: help:note.stage,user_id:0
+msgid "Owner of the note stage."
+msgstr "Владелец этапа заметки"
+
+#. module: note
+#: model:ir.ui.menu,name:note.menu_notes_stage
+msgid "Categories"
+msgstr "Категории"
+
+#. module: note
+#: view:note.note:0
+#: field:note.note,stage_id:0
+msgid "Stage"
+msgstr "Этап"
+
+#. module: note
+#: field:note.tag,name:0
+msgid "Tag Name"
+msgstr "Название тега"
+
+#. module: note
+#: field:note.note,message_ids:0
+msgid "Messages"
+msgstr "Сообщения"
+
+#. module: note
+#: view:base.config.settings:0
+#: model:ir.actions.act_window,name:note.action_note_note
+#: model:ir.ui.menu,name:note.menu_note_notes
+#: view:note.note:0
+#: model:note.stage,name:note.note_stage_04
+msgid "Notes"
+msgstr "Заметки"
+
+#. module: note
+#: model:note.stage,name:note.demo_note_stage_03
+#: model:note.stage,name:note.note_stage_03
+msgid "Later"
+msgstr "Позже"
+
+#. module: note
+#: model:ir.model,name:note.model_note_stage
+msgid "Note Stage"
+msgstr "Этап заметки"
+
+#. module: note
+#: field:note.note,message_summary:0
+msgid "Summary"
+msgstr "Итог"
+
+#. module: note
+#: field:note.note,stage_ids:0
+msgid "Stages of Users"
+msgstr "Этапы пользователей"
+
+#. module: note
+#: field:note.note,name:0
+msgid "Note Summary"
+msgstr "Заметка - кратко"
+
+#. module: note
+#: model:ir.actions.act_window,name:note.action_note_stage
+#: view:note.note:0
+msgid "Stages"
+msgstr "Этапы"
+
+#. module: note
+#: help:note.note,message_ids:0
+msgid "Messages and communication history"
+msgstr "Сообщения и история общения"
+
+#. module: note
+#: view:note.note:0
+msgid "Delete"
+msgstr "Удалить"
+
+#. module: note
+#: field:note.note,color:0
+msgid "Color Index"
+msgstr "Цветовая палитра"
+
+#. module: note
+#: field:note.note,sequence:0
+#: field:note.stage,sequence:0
+msgid "Sequence"
+msgstr "Нумерация"
+
+#. module: note
+#: view:note.note:0
+#: field:note.note,tag_ids:0
+msgid "Tags"
+msgstr "Теги"
+
+#. module: note
+#: view:note.note:0
+msgid "Archive"
+msgstr "Архив"
+
+#. module: note
+#: field:base.config.settings,module_note_pad:0
+msgid "Use collaborative pads (etherpad)"
+msgstr "Используйте совместный планшет (etherpad)"
+
+#. module: note
+#: help:note.note,message_summary:0
+msgid ""
+"Holds the Chatter summary (number of messages, ...). This summary is "
+"directly in html format in order to be inserted in kanban views."
+msgstr ""
+"Содержит сводку по Чаттеру (количество сообщений,...). Эта сводка в формате "
+"html для возможности использования в канбан виде"
+
+#. module: note
+#: field:base.config.settings,group_note_fancy:0
+msgid "Use fancy layouts for notes"
+msgstr ""
+
+#. module: note
+#: field:note.note,current_partner_id:0
+#: field:note.stage,user_id:0
+msgid "Owner"
+msgstr "Владелец"
+
+#. module: note
+#: help:note.stage,sequence:0
+msgid "Used to order the note stages"
+msgstr "Используется для сортировки этапов заметок"
+
+#. module: note
+#: field:note.note,date_done:0
+msgid "Date done"
+msgstr "Дата выполнения"
+
+#. module: note
+#: field:note.stage,fold:0
+msgid "Folded by Default"
+msgstr "Свернуто по умолчанию"
diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py
index 349ad8b4f81..089c577e940 100644
--- a/addons/point_of_sale/point_of_sale.py
+++ b/addons/point_of_sale/point_of_sale.py
@@ -407,7 +407,7 @@ class pos_session(osv.osv):
# The pos manager can close statements with maximums.
if not self.pool.get('ir.model.access').check_groups(cr, uid, "point_of_sale.group_pos_manager"):
raise osv.except_osv( _('Error!'),
- _("Your ending balance is too different from the theorical cash closing (%.2f), the maximum allowed is: %.2f. You can contact your manager to force it.") % (st.difference, st.journal_id.amount_authorized_diff))
+ _("Your ending balance is too different from the theoretical cash closing (%.2f), the maximum allowed is: %.2f. You can contact your manager to force it.") % (st.difference, st.journal_id.amount_authorized_diff))
if (st.journal_id.type not in ['bank', 'cash']):
raise osv.except_osv(_('Error!'),
_("The type of the journal for your payment method should be bank or cash "))
@@ -545,7 +545,7 @@ class pos_order(osv.osv):
def unlink(self, cr, uid, ids, context=None):
for rec in self.browse(cr, uid, ids, context=context):
if rec.state not in ('draft','cancel'):
- raise osv.except_osv(_('Unable to Delete !'), _('In order to delete a sale, it must be new or cancelled.'))
+ raise osv.except_osv(_('Unable to Delete!'), _('In order to delete a sale, it must be new or cancelled.'))
return super(pos_order, self).unlink(cr, uid, ids, context=context)
def onchange_partner_id(self, cr, uid, ids, part=False, context=None):
@@ -1163,7 +1163,7 @@ class pos_order_line(osv.osv):
if not product_id:
return {}
if not pricelist:
- raise osv.except_osv(_('No Pricelist !'),
+ raise osv.except_osv(_('No Pricelist!'),
_('You have to select a pricelist in the sale form !\n' \
'Please set one before choosing a product.'))
diff --git a/addons/point_of_sale/wizard/pos_open_statement.py b/addons/point_of_sale/wizard/pos_open_statement.py
index 97ffad805b7..30e407d2ad0 100644
--- a/addons/point_of_sale/wizard/pos_open_statement.py
+++ b/addons/point_of_sale/wizard/pos_open_statement.py
@@ -46,7 +46,7 @@ class pos_open_statement(osv.osv_memory):
st_ids = []
j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context)
if not j_ids:
- raise osv.except_osv(_('No Cash Register Defined !'), _('You have to define which payment method must be available in the point of sale by reusing existing bank and cash through "Accounting / Configuration / Journals / Journals". Select a journal and check the field "PoS Payment Method" from the "Point of Sale" tab. You can also create new payment methods directly from menu "PoS Backend / Configuration / Payment Methods".'))
+ raise osv.except_osv(_('No Cash Register Defined!'), _('You have to define which payment method must be available in the point of sale by reusing existing bank and cash through "Accounting / Configuration / Journals / Journals". Select a journal and check the field "PoS Payment Method" from the "Point of Sale" tab. You can also create new payment methods directly from menu "PoS Backend / Configuration / Payment Methods".'))
for journal in journal_obj.browse(cr, uid, j_ids, context=context):
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)], context=context)
diff --git a/addons/portal/security/portal_security.xml b/addons/portal/security/portal_security.xml
index b2a76800023..02080bdc0ab 100644
--- a/addons/portal/security/portal_security.xml
+++ b/addons/portal/security/portal_security.xml
@@ -5,7 +5,7 @@
<record id="portal_read_own_res_partner" model="ir.rule">
<field name="name">res_partner: read access on my partner</field>
<field name="model_id" ref="base.model_res_partner"/>
- <field name="domain_force">[('user_ids', 'in', user.id)]</field>
+ <field name="domain_force">[('id', 'child_of', user.commercial_partner_id.id)]</field>
<field name="groups" eval="[(4, ref('group_portal')), (4, ref('group_anonymous'))]"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
diff --git a/addons/portal/wizard/portal_wizard.py b/addons/portal/wizard/portal_wizard.py
index e363afa47cb..3ec2850b4aa 100644
--- a/addons/portal/wizard/portal_wizard.py
+++ b/addons/portal/wizard/portal_wizard.py
@@ -20,7 +20,6 @@
##############################################################################
import logging
-import random
from openerp.osv import fields, osv
from openerp.tools.translate import _
@@ -34,14 +33,15 @@ _logger = logging.getLogger(__name__)
WELCOME_EMAIL_SUBJECT = _("Your OpenERP account at %(company)s")
WELCOME_EMAIL_BODY = _("""Dear %(name)s,
-You have been given access to %(portal)s.
+You have been given access to %(company)s's %(portal)s.
Your login account data is:
-Database: %(db)s
-Username: %(login)s
+ Username: %(login)s
+ Portal: %(portal_url)s
+ Database: %(db)s
-In order to complete the signin process, click on the following url:
-%(url)s
+You can set or change your password via the following url:
+ %(signup_url)s
%(welcome_message)s
@@ -116,24 +116,57 @@ class wizard_user(osv.osv_memory):
_description = 'Portal User Config'
_columns = {
- 'wizard_id': fields.many2one('portal.wizard', string='Wizard', required=True),
+ 'wizard_id': fields.many2one('portal.wizard', string='Wizard', required=True, ondelete='cascade'),
'partner_id': fields.many2one('res.partner', string='Contact', required=True, readonly=True),
'email': fields.char(size=240, string='Email'),
'in_portal': fields.boolean('In Portal'),
}
- def create(self, cr, uid, values, context=None):
- """ overridden to update the partner's email (if necessary) """
- id = super(wizard_user, self).create(cr, uid, values, context)
- wuser = self.browse(cr, uid, id, context)
- if wuser.partner_id.email != wuser.email:
- wuser.partner_id.write({'email': wuser.email})
- return id
+ def get_error_messages(self, cr, uid, ids, context=None):
+ res_users = self.pool.get('res.users')
+ emails = []
+ error_empty = []
+ error_emails = []
+ error_user = []
+ ctx = dict(context or {}, active_test=False)
+ for wizard_user in self.browse(cr, SUPERUSER_ID, ids, context):
+ if wizard_user.in_portal and not self._retrieve_user(cr, SUPERUSER_ID, wizard_user, context):
+ email = extract_email(wizard_user.email)
+ if not email:
+ error_empty.append(wizard_user.partner_id)
+ elif email in emails and email not in error_emails:
+ error_emails.append(wizard_user.partner_id)
+ user = res_users.search(cr, SUPERUSER_ID, [('login', '=', email)], context=ctx)
+ if user:
+ error_user.append(wizard_user.partner_id)
+ emails.append(email)
+
+ error_msg = []
+ if error_empty:
+ error_msg.append("%s\n- %s" % (_("Some contacts don't have a valid email: "),
+ '\n- '.join(['%s' % (p.display_name,) for p in error_empty])))
+ if error_emails:
+ error_msg.append("%s\n- %s" % (_("Several contacts have the same email: "),
+ '\n- '.join([p.email for p in error_emails])))
+ if error_user:
+ error_msg.append("%s\n- %s" % (_("Some contacts have the same email as an existing portal user:"),
+ '\n- '.join(['%s <%s>' % (p.display_name, p.email) for p in error_user])))
+ if error_msg:
+ error_msg.append(_("To resolve this error, you can: \n"
+ "- Correct the emails of the relevant contacts\n"
+ "- Grant access only to contacts with unique emails"))
+ return error_msg
def action_apply(self, cr, uid, ids, context=None):
+ error_msg = self.get_error_messages(cr, uid, ids, context=context)
+ if error_msg:
+ raise osv.except_osv(_('Contacts Error'), "\n\n".join(error_msg))
+
for wizard_user in self.browse(cr, SUPERUSER_ID, ids, context):
portal = wizard_user.wizard_id.portal_id
user = self._retrieve_user(cr, SUPERUSER_ID, wizard_user, context)
+ if wizard_user.partner_id.email != wizard_user.email:
+ wizard_user.partner_id.write({'email': wizard_user.email})
if wizard_user.in_portal:
# create a user if necessary, and make sure it is in the portal group
if not user:
@@ -142,8 +175,8 @@ class wizard_user(osv.osv_memory):
user.write({'active': True, 'groups_id': [(4, portal.id)]})
# prepare for the signup process
user.partner_id.signup_prepare()
- wizard_user = self.browse(cr, SUPERUSER_ID, wizard_user.id, context)
- self._send_email(cr, uid, wizard_user, context)
+ wizard_user.refresh()
+ self._send_email(cr, uid, wizard_user, context)
else:
# remove the user (if it exists) from the portal group
if user and (portal in user.groups_id):
@@ -158,13 +191,11 @@ class wizard_user(osv.osv_memory):
@param wizard_user: browse record of model portal.wizard.user
@return: browse record of model res.users
"""
- if wizard_user.partner_id.user_ids:
- return wizard_user.partner_id.user_ids[0]
- # the user may be inactive, search for it
+ context = dict(context or {}, active_test=False)
res_users = self.pool.get('res.users')
- domain = [('partner_id', '=', wizard_user.partner_id.id), ('active', '=', False)]
- user_ids = res_users.search(cr, uid, domain)
- return user_ids and res_users.browse(cr, uid, user_ids[0], context) or False
+ domain = [('partner_id', '=', wizard_user.partner_id.id)]
+ user_ids = res_users.search(cr, uid, domain, context=context)
+ return user_ids and res_users.browse(cr, uid, user_ids[0], context=context) or False
def _create_user(self, cr, uid, wizard_user, context=None):
""" create a new user for wizard_user.partner_id
@@ -174,6 +205,7 @@ class wizard_user(osv.osv_memory):
res_users = self.pool.get('res.users')
create_context = dict(context or {}, noshortcut=True, no_reset_password=True) # to prevent shortcut creation
values = {
+ 'email': extract_email(wizard_user.email),
'login': extract_email(wizard_user.email),
'partner_id': wizard_user.partner_id.id,
'groups_id': [(6, 0, [])],
@@ -187,15 +219,22 @@ class wizard_user(osv.osv_memory):
@param wizard_user: browse record of model portal.wizard.user
@return: the id of the created mail.mail record
"""
+ res_partner = self.pool['res.partner']
this_context = context
this_user = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context)
if not this_user.email:
- raise osv.except_osv(_('Email required'),
+ raise osv.except_osv(_('Email Required'),
_('You must have an email address in your User Preferences to send emails.'))
# determine subject and body in the portal user's language
user = self._retrieve_user(cr, SUPERUSER_ID, wizard_user, context)
context = dict(this_context or {}, lang=user.lang)
+ ctx_portal_url = dict(context, signup_force_type_in_url='')
+ portal_url = res_partner._get_signup_url_for_action(cr, uid,
+ [user.partner_id.id],
+ context=ctx_portal_url)[user.partner_id.id]
+ res_partner.signup_prepare(cr, uid, [user.partner_id.id], context=context)
+
data = {
'company': this_user.company_id.name,
'portal': wizard_user.wizard_id.portal_id.name,
@@ -203,7 +242,8 @@ class wizard_user(osv.osv_memory):
'db': cr.dbname,
'name': user.name,
'login': user.login,
- 'url': user.signup_url,
+ 'signup_url': user.signup_url,
+ 'portal_url': portal_url,
}
mail_mail = self.pool.get('mail.mail')
mail_values = {
diff --git a/addons/portal_hr_employees/hr_employee_view.xml b/addons/portal_hr_employees/hr_employee_view.xml
index ace0daaff87..eca13258ff9 100644
--- a/addons/portal_hr_employees/hr_employee_view.xml
+++ b/addons/portal_hr_employees/hr_employee_view.xml
@@ -33,8 +33,9 @@
</record>
<record model="ir.ui.view" id="portal_hr_kanban_view_employees">
- <field name="name">HR - Employess Kanban</field>
+ <field name="name">HR - Employees Kanban</field>
<field name="model">hr.employee</field>
+ <field name="inherit_id" eval="False"/>
<field name="arch" type="xml">
<kanban>
<field name="last_login"/>
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index 672859db909..93b9417bded 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -307,7 +307,7 @@ class procurement_order(osv.osv):
move_obj = self.pool.get('stock.move')
for procurement in self.browse(cr, uid, ids, context=context):
if procurement.product_qty <= 0.00:
- raise osv.except_osv(_('Data Insufficient !'),
+ raise osv.except_osv(_('Data Insufficient!'),
_('Please check the quantity in procurement order(s) for the product "%s", it should not be 0 or less!' % procurement.product_id.name))
if procurement.product_id.type in ('product', 'consu'):
if not procurement.move_id:
diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml
index 7f0a28d94dc..76432157555 100644
--- a/addons/procurement/procurement_view.xml
+++ b/addons/procurement/procurement_view.xml
@@ -18,6 +18,7 @@
<field name="product_uom" string="Unit of Measure"/>
<field name="procure_method"/>
<field name="state"/>
+ <field name="name" invisible="1"/>
<field name="message"/>
</tree>
</field>
diff --git a/addons/project/project.py b/addons/project/project.py
index 5d5abce3066..28e4bd6e5d2 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -85,7 +85,7 @@ class project(osv.osv):
if context and context.get('user_preference'):
cr.execute("""SELECT project.id FROM project_project project
LEFT JOIN account_analytic_account account ON account.id = project.analytic_account_id
- LEFT JOIN project_user_rel rel ON rel.project_id = project.analytic_account_id
+ LEFT JOIN project_user_rel rel ON rel.project_id = project.id
WHERE (account.user_id = %s or rel.uid = %s)"""%(user, user))
return [(r[0]) for r in cr.fetchall()]
return super(project, self).search(cr, user, args, offset=offset, limit=limit, order=order,
@@ -450,7 +450,7 @@ class project(osv.osv):
for project in projects:
if (not project.members) and force_members:
- raise osv.except_osv(_('Warning!'),_("You must assign members on the project '%s' !") % (project.name,))
+ raise osv.except_osv(_('Warning!'),_("You must assign members on the project '%s'!") % (project.name,))
resource_pool = self.pool.get('resource.resource')
@@ -581,12 +581,12 @@ class task(base_stage, osv.osv):
_track = {
'state': {
- 'project.mt_task_new': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'new',
+ 'project.mt_task_new': lambda self, cr, uid, obj, ctx=None: obj['state'] in ['new', 'draft'],
'project.mt_task_started': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'open',
'project.mt_task_closed': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'done',
},
'stage_id': {
- 'project.mt_task_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'done', 'open'],
+ 'project.mt_task_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'draft', 'done', 'open'],
},
'kanban_state': { # kanban state: tracked, but only block subtype
'project.mt_task_blocked': lambda self, cr, uid, obj, ctx=None: obj['kanban_state'] == 'blocked',
@@ -956,7 +956,7 @@ class task(base_stage, osv.osv):
if task.child_ids:
for child in task.child_ids:
if child.state in ['draft', 'open', 'pending']:
- raise osv.except_osv(_("Warning !"), _("Child task still open.\nPlease cancel or complete child task first."))
+ raise osv.except_osv(_("Warning!"), _("Child task still open.\nPlease cancel or complete child task first."))
return True
def action_close(self, cr, uid, ids, context=None):
@@ -1120,10 +1120,12 @@ class task(base_stage, osv.osv):
context = {}
if not vals.get('stage_id'):
ctx = context.copy()
- if vals.get('project_id'):
+ if vals.get('project_id'):
ctx['default_project_id'] = vals['project_id']
vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx)
- task_id = super(task, self).create(cr, uid, vals, context=context)
+ # context: no_log, because subtype already handle this
+ create_context = dict(context, mail_create_nolog=True)
+ task_id = super(task, self).create(cr, uid, vals, context=create_context)
self._store_history(cr, uid, [task_id], context=context)
return task_id
@@ -1197,6 +1199,17 @@ class task(base_stage, osv.osv):
return [task.project_id.message_get_reply_to()[0] if task.project_id else False
for task in self.browse(cr, uid, ids, context=context)]
+ def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None):
+ """ mail.message document permission rule: can post a new message if can read
+ because of portal document. """
+ if not model_obj:
+ model_obj = self
+ if operation == 'create':
+ model_obj.check_access_rights(cr, uid, 'read')
+ model_obj.check_access_rule(cr, uid, mids, 'read', context=context)
+ else:
+ return super(task, self).check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context)
+
def message_new(self, cr, uid, msg, custom_values=None, context=None):
""" Override to updates the document according to the email. """
if custom_values is None: custom_values = {}
@@ -1205,7 +1218,7 @@ class task(base_stage, osv.osv):
'planned_hours': 0.0,
}
defaults.update(custom_values)
- return super(task,self).message_new(cr, uid, msg, custom_values=defaults, context=context)
+ return super(task, self).message_new(cr, uid, msg, custom_values=defaults, context=context)
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
""" Override to update the task according to the email. """
diff --git a/addons/project/report/project_cumulative.xml b/addons/project/report/project_cumulative.xml
index c30c91fe6c0..17e059c8de7 100644
--- a/addons/project/report/project_cumulative.xml
+++ b/addons/project/report/project_cumulative.xml
@@ -6,7 +6,7 @@
<field name="name">project.task.history.cumulative.tree</field>
<field name="model">project.task.history.cumulative</field>
<field name="arch" type="xml">
- <tree string="Tasks's Cumulative Flow">
+ <tree string="Tasks's Cumulative Flow" create="false">
<field name="date"/>
<field name="project_id"/>
<field name="task_id"/>
diff --git a/addons/project_gtd/wizard/project_gtd_empty.py b/addons/project_gtd/wizard/project_gtd_empty.py
index 36c64cbc224..3233e2534af 100644
--- a/addons/project_gtd/wizard/project_gtd_empty.py
+++ b/addons/project_gtd/wizard/project_gtd_empty.py
@@ -49,7 +49,7 @@ class project_timebox_empty(osv.osv_memory):
ids = obj_tb.search(cr, uid, [], context=context)
if not len(ids):
- raise osv.except_osv(_('Error!'), _('No timebox child of this one !'))
+ raise osv.except_osv(_('Error!'), _('No timebox child of this one!'))
tids = obj_task.search(cr, uid, [('timebox_id', '=', context['active_id'])])
for task in obj_task.browse(cr, uid, tids, context):
if (task.state in ('cancel','done')) or (task.user_id.id <> uid):
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index a008c670138..8bcac4581c3 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -19,11 +19,12 @@
#
##############################################################################
+from openerp import SUPERUSER_ID
from openerp.addons.base_status.base_stage import base_stage
from openerp.addons.project.project import _TASK_STATE
from openerp.addons.crm import crm
from datetime import datetime
-from openerp.osv import fields,osv
+from openerp.osv import fields, osv, orm
from openerp.tools.translate import _
import binascii
import time
@@ -49,12 +50,12 @@ class project_issue(base_stage, osv.osv):
_track = {
'state': {
- 'project_issue.mt_issue_new': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'new',
+ 'project_issue.mt_issue_new': lambda self, cr, uid, obj, ctx=None: obj['state'] in ['new', 'draft'],
'project_issue.mt_issue_closed': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'done',
'project_issue.mt_issue_started': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'open',
},
'stage_id': {
- 'project_issue.mt_issue_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'done', 'open'],
+ 'project_issue.mt_issue_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'draft', 'done', 'open'],
},
'kanban_state': {
'project_issue.mt_issue_blocked': lambda self, cr, uid, obj, ctx=None: obj['kanban_state'] == 'blocked',
@@ -69,7 +70,9 @@ class project_issue(base_stage, osv.osv):
if vals.get('project_id'):
ctx['default_project_id'] = vals['project_id']
vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx)
- return super(project_issue, self).create(cr, uid, vals, context=context)
+ # context: no_log, because subtype already handle this
+ create_context = dict(context, mail_create_nolog=True)
+ return super(project_issue, self).create(cr, uid, vals, context=create_context)
def _get_default_project_id(self, cr, uid, context=None):
""" Gives default project by checking if present in the context """
@@ -492,13 +495,27 @@ class project_issue(base_stage, osv.osv):
return [issue.project_id.message_get_reply_to()[0] if issue.project_id else False
for issue in self.browse(cr, uid, ids, context=context)]
+ def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None):
+ """ mail.message document permission rule: can post a new message if can read
+ because of portal document. """
+ if not model_obj:
+ model_obj = self
+ if operation == 'create':
+ model_obj.check_access_rights(cr, uid, 'read')
+ model_obj.check_access_rule(cr, uid, mids, 'read', context=context)
+ else:
+ return super(project_issue, self).check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context)
+
def message_get_suggested_recipients(self, cr, uid, ids, context=None):
recipients = super(project_issue, self).message_get_suggested_recipients(cr, uid, ids, context=context)
- for issue in self.browse(cr, uid, ids, context=context):
- if issue.email_from:
- self._message_add_suggested_recipient(cr, uid, recipients, issue, email=issue.email_from, reason=_('Customer Email'))
- elif issue.partner_id:
- self._message_add_suggested_recipient(cr, uid, recipients, issue, partner=issue.partner_id, reason=_('Customer'))
+ try:
+ for issue in self.browse(cr, uid, ids, context=context):
+ if issue.partner_id:
+ self._message_add_suggested_recipient(cr, uid, recipients, issue, partner=issue.partner_id, reason=_('Customer'))
+ elif issue.email_from:
+ self._message_add_suggested_recipient(cr, uid, recipients, issue, email=issue.email_from, reason=_('Customer Email'))
+ except (osv.except_osv, orm.except_orm): # no read access rights -> just ignore suggested recipients because this imply modifying followers
+ pass
return recipients
def message_new(self, cr, uid, msg, custom_values=None, context=None):
@@ -560,13 +577,10 @@ class project_issue(base_stage, osv.osv):
"""
if context is None:
context = {}
-
res = super(project_issue, self).message_post(cr, uid, thread_id, body=body, subject=subject, type=type, subtype=subtype, parent_id=parent_id, attachments=attachments, context=context, content_subtype=content_subtype, **kwargs)
-
if thread_id:
- self.write(cr, uid, thread_id, {'date_action_last': time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)
-
- return res
+ self.write(cr, SUPERUSER_ID, thread_id, {'date_action_last': time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)
+ return res
class project(osv.Model):
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index f15355e9cc8..46caba0021e 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -68,15 +68,16 @@
<label for="categ_ids" class="oe_edit_only"/>
<field name="categ_ids" widget="many2many_tags"/>
<group>
- <group groups="base.group_user">
+ <group>
<field name="user_id"
context="{'default_groups_ref': ['base.group_user', 'project.group_project_user']}"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)"/>
<field name="email_from"/>
- <label for="project_id" groups="base.group_user"/>
- <div groups="base.group_user">
+ <label for="project_id"/>
+ <div>
<field name="project_id" on_change="on_change_project(project_id)" class="oe_inline" context="{'default_use_issues':1}"/>
- <button name="case_escalate" string="⇒ Escalate" type="object" states="draft,open,pending" class="oe_link"/>
+ <button name="case_escalate" string="⇒ Escalate" type="object" states="draft,open,pending" class="oe_link"
+ groups="base.group_user"/>
</div>
</group>
<group>
@@ -150,8 +151,8 @@
<field name="id"/>
<filter icon="terp-mail-message-new" string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/>
<separator/>
- <filter string="New" icon="terp-document-new" domain="[('state','=','draft')]" help="New Issues"/>
- <filter string="To Do" domain="[('state','=','open')]" help="To Do Issues" icon="terp-check"/>
+ <filter name="filter_new" string="New" icon="terp-document-new" domain="[('state','=','draft')]" help="New Issues"/>
+ <filter name="filter_open" string="To Do" domain="[('state','=','open')]" help="To Do Issues" icon="terp-check"/>
<separator/>
<filter string="Unassigned Issues" domain="[('user_id','=',False)]" help="Unassigned Issues" icon="terp-personal-"/>
<separator/>
@@ -160,13 +161,13 @@
<field name="categ_ids"/>
<field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<group expand="0" string="Group By..." >
- <filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
- <filter string="Contact" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
- <filter string="Project" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
- <filter string="Version" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'version_id'}"/>
- <filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}"/>
- <filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
- <filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" help="Creation Month"/>
+ <filter string="Responsible" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
+ <filter string="Contact" name="group_partner_id" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
+ <filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
+ <filter string="Version" name="group_version" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'version_id'}"/>
+ <filter string="Priority" name="group_priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}"/>
+ <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
+ <filter string="Month" name="group_create_date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" help="Creation Month"/>
</group>
</search>
</field>
diff --git a/addons/project_issue_sheet/project_issue_sheet_view.xml b/addons/project_issue_sheet/project_issue_sheet_view.xml
index fb245a0510a..4911cac8f25 100644
--- a/addons/project_issue_sheet/project_issue_sheet_view.xml
+++ b/addons/project_issue_sheet/project_issue_sheet_view.xml
@@ -19,7 +19,8 @@
</field>
<xpath expr="//notebook/page[@string='Extra Info']" position="before">
<page string="Worklogs">
- <field name="timesheet_ids" colspan="4" nolabel="1" context="{'default_user_id' : user_id, 'default_account_id' : analytic_account_id}">
+ <field name="timesheet_ids" colspan="4" nolabel="1" context="{'default_user_id' : user_id, 'default_account_id' : analytic_account_id}"
+ groups="base.group_user">
<tree editable="top" string="Timesheets">
<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"/>
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index 4066b6133c1..e61af0c6c32 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -120,7 +120,8 @@
</field>
<xpath expr="//div[contains(@class, 'oe_kanban_project_list')]" position="inside">
<a t-if="record.use_phases.raw_value"
- name="%(act_project_phases)d" type="action">
+ name="%(act_project_phases)d" type="action"
+ groups="base.group_user">
<span t-if="record.phase_count.raw_value gt 1"><field name="phase_count"/> Phases</span>
<span t-if="record.phase_count.raw_value lt 2"><field name="phase_count"/> Phase</span>
</a>
@@ -322,7 +323,7 @@
<field name="inherit_id" ref="project.view_task_search_form"/>
<field name="arch" type="xml">
<field name="user_id" position="before">
- <field name="phase_id"/>
+ <field name="phase_id" domain="[]"/>
</field>
</field>
</record>
diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py
index ffee600f5a7..767cb4893b5 100644
--- a/addons/project_timesheet/project_timesheet.py
+++ b/addons/project_timesheet/project_timesheet.py
@@ -79,22 +79,22 @@ class project_work(osv.osv):
emp_id = emp_obj.search(cr, uid, [('user_id', '=', user_id)])
if not emp_id:
user_name = self.pool.get('res.users').read(cr, uid, [user_id], ['name'])[0]['name']
- raise osv.except_osv(_('Bad Configuration !'),
+ raise osv.except_osv(_('Bad Configuration!'),
_('Please define employee for user "%s". You must create one.')% (user_name,))
emp = emp_obj.browse(cr, uid, emp_id[0])
if not emp.product_id:
- raise osv.except_osv(_('Bad Configuration !'),
+ raise osv.except_osv(_('Bad Configuration!'),
_('Please define product and product category property account on the related employee.\nFill in the HR Settings tab of the employee form.'))
if not emp.journal_id:
- raise osv.except_osv(_('Bad Configuration !'),
+ raise osv.except_osv(_('Bad Configuration!'),
_('Please define journal on the related employee.\nFill in the timesheet tab of the employee form.'))
acc_id = emp.product_id.property_account_expense.id
if not acc_id:
acc_id = emp.product_id.categ_id.property_account_expense_categ.id
if not acc_id:
- raise osv.except_osv(_('Bad Configuration !'),
+ raise osv.except_osv(_('Bad Configuration!'),
_('Please define product and product category property account on the related employee.\nFill in the timesheet tab of the employee form.'))
res['product_id'] = emp.product_id.id
@@ -286,7 +286,7 @@ class account_analytic_line(osv.osv):
st = acc.to_invoice.id
res['value']['to_invoice'] = st or False
if acc.state == 'close' or acc.state == 'cancelled':
- raise osv.except_osv(_('Invalid Analytic Account !'), _('You cannot select a Analytic Account which is in Close or Cancelled state.'))
+ raise osv.except_osv(_('Invalid Analytic Account!'), _('You cannot select a Analytic Account which is in Close or Cancelled state.'))
return res
diff --git a/addons/purchase/report/order.rml b/addons/purchase/report/order.rml
index 1794bea19c4..6eb1b2167ee 100644
--- a/addons/purchase/report/order.rml
+++ b/addons/purchase/report/order.rml
@@ -94,38 +94,16 @@
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
- <paraStyle name="Standard" fontName="Helvetica"/>
- <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Table Contents" fontName="Helvetica"/>
- <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
- <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="Index" fontName="Helvetica"/>
- <paraStyle name="Footer" fontName="Helvetica"/>
- <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
- <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_9_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_8_Italic" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_header" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_General" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_default_8" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_tblheader_General_Centre" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_General_Right" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_default_Centre_8" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Bold_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Right_9" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Bold_9_Right" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
@@ -136,22 +114,22 @@
<blockTable colWidths="180.0,70.0,60.0,80.0,60.0,85.0" repeatRows="1" style="Table_Header_Pur_ord_Line">
<tr>
<td>
- <para style="terp_tblheader_General">Description</para>
+ <para style="terp_tblheader_General"><b>Description</b></para>
</td>
<td>
- <para style="terp_tblheader_General">Taxes</para>
+ <para style="terp_tblheader_General"><b>Taxes</b></para>
</td>
<td>
- <para style="terp_tblheader_General">Date Req.</para>
+ <para style="terp_tblheader_General"><b>Date Req.</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Right">Qty</para>
+ <para style="terp_tblheader_General_Right"><b>Qty</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Right">Unit Price</para>
+ <para style="terp_tblheader_General_Right"><b>Unit Price</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Right">Net Price</para>
+ <para style="terp_tblheader_General_Right"><b>Net Price</b></para>
</td>
</tr>
</blockTable>
@@ -165,7 +143,7 @@
<blockTable colWidths="253.0" style="Tableau2">
<tr>
<td>
- <para style="terp_default_Bold_9">Shipping address :</para>
+ <para style="terp_default_Bold_9"><b>Shipping address :</b></para>
<para style="terp_default_9">[[ (o.dest_address_id and o.dest_address_id.name) or (o.warehouse_id and o.warehouse_id.name) or '']]</para>
<para style="terp_default_9">[[ (o.dest_address_id and display_address(o.dest_address_id)) or (o.warehouse_id and display_address(o.warehouse_id.partner_id)) or '']]</para>
</td>
@@ -195,24 +173,24 @@
<para style="terp_default_9">
<font color="white"> </font>
</para>
- <para style="terp_header">[[ o.state=='draft' and removeParentNode('para') ]] Purchase Order Confirmation N° [[ o.name ]]</para>
- <para style="terp_header">[[ o.state&lt;&gt;'draft' and removeParentNode('para') ]] Request for Quotation N° [[ o.name ]]</para>
+ <para style="terp_header"><b>[[ o.state=='draft' and removeParentNode('para') ]] Purchase Order Confirmation N° [[ o.name ]]</b></para>
+ <para style="terp_header"><b>[[ o.state&lt;&gt;'draft' and removeParentNode('para') ]] Request for Quotation N° [[ o.name ]]</b></para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="136.0,132.0,133.0,133.0" style="Header_Order_Reference_Tbl">
<tr>
<td>
- <para style="terp_tblheader_General_Centre">Our Order Reference</para>
+ <para style="terp_tblheader_General_Centre"><b>Our Order Reference</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Your Order Reference</para>
+ <para style="terp_tblheader_General_Centre"><b>Your Order Reference</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Order Date</para>
+ <para style="terp_tblheader_General_Centre"><b>Order Date</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Validated By</para>
+ <para style="terp_tblheader_General_Centre"><b>Validated By</b></para>
</td>
</tr>
</blockTable>
@@ -238,22 +216,22 @@
<blockTable colWidths="180.0,70.0,60.0,80.0,60.0,85.0" repeatRows="1" style="Table_Header_Pur_ord_Line">
<tr>
<td>
- <para style="terp_tblheader_General">Description</para>
+ <para style="terp_tblheader_General"><b>Description</b></para>
</td>
<td>
- <para style="terp_tblheader_General">Taxes</para>
+ <para style="terp_tblheader_General"><b>Taxes</b></para>
</td>
<td>
- <para style="terp_tblheader_General">Date Req.</para>
+ <para style="terp_tblheader_General"><b>Date Req.</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Right">Qty</para>
+ <para style="terp_tblheader_General_Right"><b>Qty</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Right">Unit Price</para>
+ <para style="terp_tblheader_General_Right"><b>Unit Price</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Right">Net Price</para>
+ <para style="terp_tblheader_General_Right"><b>Net Price</b></para>
</td>
</tr>
</blockTable>
@@ -316,10 +294,10 @@
</para>
</td>
<td>
- <para style="terp_default_Bold_9">Total :</para>
+ <para style="terp_default_Bold_9"><b>Total :</b></para>
</td>
<td>
- <para style="terp_default_Bold_9_Right">[[ formatLang(o.amount_total, digits=get_digits(dp='Account') , currency_obj=o.pricelist_id.currency_id) ]]</para>
+ <para style="terp_default_Bold_9_Right"><b>[[ formatLang(o.amount_total, digits=get_digits(dp='Account') , currency_obj=o.pricelist_id.currency_id) ]]</b></para>
</td>
</tr>
</blockTable>
diff --git a/addons/purchase/report/request_quotation.rml b/addons/purchase/report/request_quotation.rml
index 8e5e73ee588..b7b4776d635 100644
--- a/addons/purchase/report/request_quotation.rml
+++ b/addons/purchase/report/request_quotation.rml
@@ -36,40 +36,17 @@
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
- <paraStyle name="P1" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="Standard" fontName="Helvetica"/>
- <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Table Contents" fontName="Helvetica"/>
- <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
- <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="Index" fontName="Helvetica"/>
- <paraStyle name="Footer" fontName="Helvetica"/>
- <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
- <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_8_italic" rightIndent="0.0" leftIndent="20.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Note" rightIndent="0.0" leftIndent="9.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="Space bet user and signature" fontName="Helvetica" fontSize="4.0" leading="5" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="P1" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="Standard"/>
+ <paraStyle name="terp_header" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_Details" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_default_8" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_tblheader_Details_Centre" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_default_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Bold_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Centre_9" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Right_9" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="Space bet user and signature" fontSize="4.0" leading="5" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
@@ -84,7 +61,7 @@
<blockTable colWidths="250.0" style="Tableau2">
<tr>
<td>
- <para style="terp_default_Bold_9">Expected Delivery address:</para>
+ <para style="terp_default_Bold_9"><b>Expected Delivery address:</b></para>
<para style="terp_default_9">[[ (order.dest_address_id and order.dest_address_id.name) or (order.warehouse_id and order.warehouse_id.name) or '']]</para>
<para style="P1">[[ order.dest_address_id and display_address(order.dest_address_id) ]]</para>
</td>
@@ -114,20 +91,20 @@
<para style="Standard">
<font color="white"> </font>
</para>
- <para style="terp_header">Request for Quotation : [[order.name]]</para>
+ <para style="terp_header"><b>Request for Quotation : [[order.name]]</b></para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="371.0,98.0,61.0" repeatRows="1" style="Table_Product_Header_Title">
<tr>
<td>
- <para style="terp_tblheader_Details">Description</para>
+ <para style="terp_tblheader_Details"><b>Description</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Expected Date</para>
+ <para style="terp_tblheader_Details_Centre"><b>Expected Date</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Qty</para>
+ <para style="terp_tblheader_Details_Centre"><b>Qty</b></para>
</td>
</tr>
</blockTable>
diff --git a/addons/report_webkit/webkit_report.py b/addons/report_webkit/webkit_report.py
index 82061daa758..5e65afaae25 100644
--- a/addons/report_webkit/webkit_report.py
+++ b/addons/report_webkit/webkit_report.py
@@ -280,7 +280,7 @@ class WebKitParser(report_sxw):
template = False
if report_xml.report_file :
- path = get_module_resource(*report_xml.report_file.split(os.path.sep))
+ path = get_module_resource(*report_xml.report_file.split('/'))
if path and os.path.exists(path) :
template = file(path).read()
if not template and report_xml.report_webkit_data :
diff --git a/addons/sale/i18n/ru.po b/addons/sale/i18n/ru.po
index 8449bd83224..7ca635be446 100644
--- a/addons/sale/i18n/ru.po
+++ b/addons/sale/i18n/ru.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-06-03 07:54+0000\n"
+"PO-Revision-Date: 2013-06-06 11:38+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-06-04 05:20+0000\n"
-"X-Generator: Launchpad (build 16660)\n"
+"X-Launchpad-Export-Date: 2013-06-07 05:48+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: sale
#: model:res.groups,name:sale.group_analytic_accounting
@@ -191,7 +191,7 @@ msgstr "Счет аналитики"
#: field:sale.config.settings,module_sale_journal:0
msgid "Allow batch invoicing of delivery orders through journals"
msgstr ""
-"Разрешить групповое выставление счета из заказов на доставку через журналы"
+"Разрешить групповое выставление счетов из заказов доставки через журналы"
#. module: sale
#: field:sale.order.line,price_subtotal:0
@@ -223,7 +223,7 @@ msgstr "Особенности склада"
#. module: sale
#: field:sale.config.settings,time_unit:0
msgid "The default working time unit for services is"
-msgstr ""
+msgstr "Единица измерения времени для услуг"
#. module: sale
#: field:sale.order.line,product_uom:0
diff --git a/addons/sale/report/sale_order.rml b/addons/sale/report/sale_order.rml
index 130220535f9..3bddf81ade8 100644
--- a/addons/sale/report/sale_order.rml
+++ b/addons/sale/report/sale_order.rml
@@ -89,40 +89,19 @@
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
- <paraStyle name="Standard" fontName="Helvetica"/>
- <paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Heading" fontName="Helvetica" fontSize="8.0" leading="10" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
- <paraStyle name="Table Contents" fontName="Helvetica"/>
- <paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
- <paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="Index" fontName="Helvetica"/>
- <paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="Footer" fontName="Helvetica"/>
- <paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
- <paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
- <paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_1" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Right_9_Bold" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Italic" rightIndent="0.0" leftIndent="20.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="Preformatted Text" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/>
- <paraStyle name="terp_default_Centre_9_Bold" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_header" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_default_8" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Bold_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_9" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_tblheader_General_Centre" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_default_Centre_8" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_tblheader_Details" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_Details_Centre" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_tblheader_Details_Right" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
+ <paraStyle name="terp_default_Centre_9" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Right_9" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_1" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+ <paraStyle name="terp_default_Right_9_Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
@@ -133,22 +112,22 @@
<blockTable colWidths="181.0,70.0,80.0,70.0,50.0,85.0" repeatRows="1" style="Table4">
<tr>
<td>
- <para style="terp_tblheader_Details">Description</para>
+ <para style="terp_tblheader_Details"><b>Description</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Tax</para>
+ <para style="terp_tblheader_Details_Centre"><b>Tax</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Right">Quantity</para>
+ <para style="terp_tblheader_Details_Right"><b>Quantity</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Right">Unit Price</para>
+ <para style="terp_tblheader_Details_Right"><b>Unit Price</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Disc.(%)</para>
+ <para style="terp_tblheader_Details_Centre"><b>Disc.(%)</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Right">Price</para>
+ <para style="terp_tblheader_Details_Right"><b>Price</b></para>
</td>
</tr>
</blockTable>
@@ -162,13 +141,13 @@
<blockTable colWidths="265.0,51.0,225.0" style="Table1">
<tr>
<td>
- <para style="terp_default_Bold_9">Shipping address :</para>
+ <para style="terp_default_Bold_9"><b>Shipping address :</b></para>
<para style="terp_default_9">[[ (o.partner_shipping_id and o.partner_id.title and o.partner_shipping_id.title.name) or '' ]] [[ (o.partner_shipping_id and o.partner_shipping_id.name) or '' ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id and display_address(o.partner_shipping_id) ]]</para>
<para style="terp_default_9">
<font color="white"> </font>
</para>
- <para style="terp_default_Bold_9">Invoice address :</para>
+ <para style="terp_default_Bold_9"><b>Invoice address :</b></para>
<para style="terp_default_9">[[ (o.partner_invoice_id and o.partner_invoice_id.title and o.partner_invoice_id.title.name) or '' ]] [[ (o.partner_invoice_id and o.partner_invoice_id.name) or '' ]]</para>
<para style="terp_default_9">[[ o.partner_invoice_id and display_address(o.partner_invoice_id) ]] </para>
</td>
@@ -195,25 +174,25 @@
<para style="terp_default_8">
<font color="white"> </font>
</para>
- <para style="terp_header">[[ o.state not in ['draft','sent'] and removeParentNode('para') ]] Quotation N° [[ o.name ]]</para>
- <para style="terp_header">[[ o.state in ['draft','sent'] and removeParentNode('para') ]] Order N° [[ o.name ]]</para>
+ <para style="terp_header"><b>[[ o.state not in ['draft','sent'] and removeParentNode('para') ]] Quotation N° [[ o.name ]]</b></para>
+ <para style="terp_header"><b>[[ o.state in ['draft','sent'] and removeParentNode('para') ]] Order N° [[ o.name ]]</b></para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="132.0,134.0,135.0,135.0" style="Table2">
<tr>
<td>
- <para style="terp_tblheader_General_Centre">Your Reference </para>
+ <para style="terp_tblheader_General_Centre"><b>Your Reference </b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">[[ o.state in ['draft','sent'] and removeParentNode('para') ]] Date Ordered</para>
- <para style="terp_tblheader_General_Centre">[[ o.state not in ['draft','sent'] and removeParentNode('para') ]] Quotation Date</para>
+ <para style="terp_tblheader_General_Centre"><b>[[ o.state in ['draft','sent'] and removeParentNode('para') ]] Date Ordered</b></para>
+ <para style="terp_tblheader_General_Centre"><b>[[ o.state not in ['draft','sent'] and removeParentNode('para') ]] Quotation Date</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Salesperson</para>
+ <para style="terp_tblheader_General_Centre"><b>Salesperson</b></para>
</td>
<td>
- <para style="terp_tblheader_General_Centre">Payment Term</para>
+ <para style="terp_tblheader_General_Centre"><b>Payment Term</b></para>
</td>
</tr>
</blockTable>
@@ -239,22 +218,22 @@
<blockTable colWidths="181.0,70.0,80.0,70.0,50.0,85.0" repeatRows="1" style="Table4">
<tr>
<td>
- <para style="terp_tblheader_Details">Description</para>
+ <para style="terp_tblheader_Details"><b>Description</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">Tax</para>
+ <para style="terp_tblheader_Details_Centre"><b>Tax</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Right">Quantity</para>
+ <para style="terp_tblheader_Details_Right"><b>Quantity</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Right">Unit Price</para>
+ <para style="terp_tblheader_Details_Right"><b>Unit Price</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Centre">[[not show_discount(user.id) and removeParentNode('para') ]]Disc.(%)</para>
+ <para style="terp_tblheader_Details_Centre"><b>[[not show_discount(user.id) and removeParentNode('para') ]]Disc.(%)</b></para>
</td>
<td>
- <para style="terp_tblheader_Details_Right">Price</para>
+ <para style="terp_tblheader_Details_Right"><b>Price</b></para>
</td>
</tr>
</blockTable>
@@ -317,10 +296,10 @@
</para>
</td>
<td>
- <para style="terp_default_Bold_9">Total :</para>
+ <para style="terp_default_Bold_9"><b>Total :</b></para>
</td>
<td>
- <para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total, dp='Account', currency_obj=o.pricelist_id.currency_id) ]]</para>
+ <para style="terp_default_Right_9_Bold"><b>[[ formatLang(o.amount_total, dp='Account', currency_obj=o.pricelist_id.currency_id) ]]</b></para>
</td>
</tr>
</blockTable>
diff --git a/addons/sale/res_partner.py b/addons/sale/res_partner.py
index 1b37b609179..8201e147e34 100644
--- a/addons/sale/res_partner.py
+++ b/addons/sale/res_partner.py
@@ -41,7 +41,7 @@ class res_partner(osv.osv):
default.update({'sale_order_ids': []})
- super(res_partner, self).copy(cr, uid, record_id, default, context)
+ return super(res_partner, self).copy(cr, uid, record_id, default, context)
_columns = {
'sale_order_count': fields.function(_sale_order_count, string='# of Sales Order', type='integer'),
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 210e4dd3be6..f34137f8231 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -273,7 +273,7 @@ class sale_order(osv.osv):
if s['state'] in ['draft', 'cancel']:
unlink_ids.append(s['id'])
else:
- raise osv.except_osv(_('Invalid Action!'), _('In order to delete a confirmed sales order, you must cancel it before !'))
+ raise osv.except_osv(_('Invalid Action!'), _('In order to delete a confirmed sales order, you must cancel it before!'))
return osv.osv.unlink(self, cr, uid, unlink_ids, context=context)
@@ -695,7 +695,7 @@ class sale_order_line(osv.osv):
_description = 'Sales Order Line'
_columns = {
'order_id': fields.many2one('sale.order', 'Order Reference', required=True, ondelete='cascade', select=True, readonly=True, states={'draft':[('readonly',False)]}),
- 'name': fields.text('Description', required=True, select=True, readonly=True, states={'draft': [('readonly', False)]}),
+ 'name': fields.text('Description', required=True, readonly=True, states={'draft': [('readonly', False)]}),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of sales order lines."),
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True),
'invoice_lines': fields.many2many('account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True),
@@ -870,7 +870,7 @@ class sale_order_line(osv.osv):
context = context or {}
lang = lang or context.get('lang',False)
if not partner_id:
- raise osv.except_osv(_('No Customer Defined !'), _('Before choosing a product,\n select a customer in the sales form.'))
+ raise osv.except_osv(_('No Customer Defined!'), _('Before choosing a product,\n select a customer in the sales form.'))
warning = {}
product_uom_obj = self.pool.get('product.uom')
partner_obj = self.pool.get('res.partner')
diff --git a/addons/sale_crm/wizard/crm_make_sale.py b/addons/sale_crm/wizard/crm_make_sale.py
index 6bea6286456..da770af6d82 100644
--- a/addons/sale_crm/wizard/crm_make_sale.py
+++ b/addons/sale_crm/wizard/crm_make_sale.py
@@ -87,7 +87,7 @@ class crm_make_sale(osv.osv_memory):
['default', 'invoice', 'delivery', 'contact'])
pricelist = partner.property_product_pricelist.id
if False in partner_addr.values():
- raise osv.except_osv(_('Insufficient Data!'), _('No addresse(s) defined for this customer.'))
+ raise osv.except_osv(_('Insufficient Data!'), _('No address(es) defined for this customer.'))
vals = {
'origin': _('Opportunity: %s') % str(case.id),
diff --git a/addons/sale_journal/i18n/ru.po b/addons/sale_journal/i18n/ru.po
index b4830dcfcd7..9a4370f5d61 100644
--- a/addons/sale_journal/i18n/ru.po
+++ b/addons/sale_journal/i18n/ru.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2011-01-20 08:56+0000\n"
+"PO-Revision-Date: 2013-06-05 11:29+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-03-16 05:27+0000\n"
-"X-Generator: Launchpad (build 16532)\n"
+"X-Launchpad-Export-Date: 2013-06-06 05:21+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: sale_journal
#: field:sale_journal.invoice.type,note:0
@@ -31,6 +31,8 @@ msgstr "Способ выставления счета"
msgid ""
"This invoicing type will be used, by default, to invoice the current partner."
msgstr ""
+"Этот тип счета будет использоваться по умолчанию для выставления текущего "
+"счета партнера."
#. module: sale_journal
#: view:res.partner:0
@@ -45,7 +47,7 @@ msgstr "Выставление счета"
#. module: sale_journal
#: model:ir.model,name:sale_journal.model_stock_picking_in
msgid "Incoming Shipments"
-msgstr ""
+msgstr "Поступающие ТМЦ"
#. module: sale_journal
#: help:sale_journal.invoice.type,active:0
@@ -103,7 +105,7 @@ msgstr ""
#. module: sale_journal
#: help:sale.order,invoice_type_id:0
msgid "Generate invoice based on the selected option."
-msgstr ""
+msgstr "Генерировать счет на основе выбранного варианта."
#. module: sale_journal
#: view:sale.order:0
@@ -137,7 +139,7 @@ msgstr "Заказ продаж"
#. module: sale_journal
#: model:ir.model,name:sale_journal.model_stock_picking_out
msgid "Delivery Orders"
-msgstr ""
+msgstr "Заказы доставки"
#~ msgid "Monthly sales"
#~ msgstr "Продажи в месяце"
diff --git a/addons/sale_margin/sale_margin_view.xml b/addons/sale_margin/sale_margin_view.xml
index 88647ea3c46..be16429526a 100644
--- a/addons/sale_margin/sale_margin_view.xml
+++ b/addons/sale_margin/sale_margin_view.xml
@@ -9,7 +9,7 @@
<field name="arch" type="xml">
<xpath expr="//group[@name='sale_total']" position="after">
<group name="sale_margin_grp">
- <field name="margin" widget='monetary' options="{'currency_field': 'currency_id'}"/>
+ <field name="margin" widget='monetary' options="{'currency_field': 'currency_id'}" groups="base.group_user"/>
</group>
</xpath>
</field>
diff --git a/addons/sale_stock/i18n/ru.po b/addons/sale_stock/i18n/ru.po
index f5c54417077..28f156fb871 100644
--- a/addons/sale_stock/i18n/ru.po
+++ b/addons/sale_stock/i18n/ru.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2013-01-04 16:04+0000\n"
+"PO-Revision-Date: 2013-06-06 11:30+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-03-16 05:51+0000\n"
-"X-Generator: Launchpad (build 16532)\n"
+"X-Launchpad-Export-Date: 2013-06-07 05:48+0000\n"
+"X-Generator: Launchpad (build 16667)\n"
#. module: sale_stock
#: help:sale.config.settings,group_invoice_deli_orders:0
@@ -22,11 +22,13 @@ msgid ""
"To allow your salesman to make invoices for Delivery Orders using the menu "
"'Deliveries to Invoice'."
msgstr ""
+"Позволяет вашему продавцу создавать счета для заказов доставки используя "
+"меню \"Доставки в счета\"."
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_deliveryorder0
msgid "Delivery Order"
-msgstr "Заказ на доставку"
+msgstr "Заказ доставки"
#. module: sale_stock
#: model:ir.actions.act_window,name:sale_stock.outgoing_picking_list_to_invoice
@@ -86,12 +88,12 @@ msgstr ""
#. module: sale_stock
#: model:process.transition,name:sale_stock.process_transition_saleprocurement0
msgid "Create Procurement Order"
-msgstr "Создать заказ на снабжение"
+msgstr "Создать заказ снабжения"
#. module: sale_stock
#: field:stock.picking.out,sale_id:0
msgid "Sale Order"
-msgstr "Заказ"
+msgstr "Заказ продажи"
#. module: sale_stock
#: model:process.transition,note:sale_stock.process_transition_saleorderprocurement0
@@ -99,8 +101,8 @@ msgid ""
"For every sales order line, a procurement order is created to supply the "
"sold product."
msgstr ""
-"Для каждой позиции заказа на продажу создается заказ на снабжение для "
-"поставки проданных ТМЦ."
+"Для каждой позиции заказа продаж создается заказ снабжения для поставки "
+"проданных ТМЦ."
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:615
@@ -129,8 +131,7 @@ msgstr "Магазин"
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_saleorderprocurement0
msgid "Drives procurement orders for every sales order line."
-msgstr ""
-"Управление заказами на снабжение для каждой позиции заказа на продажу."
+msgstr "Управление заказами снабжения для каждой позиции заказа продаж."
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_stock_move
@@ -151,7 +152,7 @@ msgstr "Табель проекта"
#. module: sale_stock
#: field:sale.config.settings,group_sale_delivery_address:0
msgid "Allow a different address for delivery and invoicing "
-msgstr ""
+msgstr "Разрешить различные адреса для доставки и выставления счета "
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:546
@@ -163,18 +164,18 @@ msgstr "Ошибка конфигурации!"
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_saleprocurement0
msgid "Procurement Order"
-msgstr "Заказ на закупку"
+msgstr "Заказ снабжения"
#. module: sale_stock
#: selection:sale.config.settings,default_order_policy:0
msgid "Invoice based on deliveries"
-msgstr "Счет основанный на отгрузке"
+msgstr "Счет основанный на доставках"
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_order
#: field:stock.picking,sale_id:0
msgid "Sales Order"
-msgstr "Заказ на продажу"
+msgstr "Заказ продаж"
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_stock_picking_out
@@ -185,7 +186,7 @@ msgstr "Заказы доставки"
#: model:ir.model,name:sale_stock.model_sale_order_line
#: field:stock.move,sale_line_id:0
msgid "Sales Order Line"
-msgstr "Позиция заказа на продажу"
+msgstr "Позиция заказа продаж"
#. module: sale_stock
#: model:process.transition,note:sale_stock.process_transition_packing0
@@ -195,11 +196,11 @@ msgid ""
"parts to the sales order. There is 1 pick list by sales order line which "
"evolves with the availability of parts."
msgstr ""
-"Форма комплектовочного листа создастся как только заказ на продажу будет "
-"подтвержден, в одно время с заказом на снабжение. Он представляет собой "
-"определение комплектующих для заказа на продажу. Один комплектовочный лист "
-"на позицию заказа на продажу, который будет меняться в соответствии с "
-"наличием комплектующих."
+"Форма комплектовочного листа создастся как только заказ продаж будет "
+"подтвержден, в одно время с заказом снабжения. Он представляет собой "
+"определение комплектующих для заказа продаж. Один комплектовочный лист на "
+"позицию заказа продаж, который будет меняться в соответствии с наличием "
+"комплектующих."
#. module: sale_stock
#: help:res.company,security_lead:0
@@ -240,7 +241,7 @@ msgstr "Документ перемещения к заказчику."
#. module: sale_stock
#: view:sale.order:0
msgid "View Delivery Order"
-msgstr ""
+msgstr "Вид заказа доставки"
#. module: sale_stock
#: field:sale.order.line,move_ids:0
@@ -276,7 +277,7 @@ msgstr "Снабжение"
#: field:sale.report,shipped:0
#: field:sale.report,shipped_qty_1:0
msgid "Shipped"
-msgstr "Доставлено"
+msgstr "Отправлено"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:240
@@ -292,24 +293,24 @@ msgid ""
"production of products regarding to the rules and to the sales order's "
"parameters. "
msgstr ""
-"Заказ на снабжение создастся автоматически как только заказ на продажу будет "
+"Заказ снабжения создастся автоматически как только заказ продаж будет "
"подтвержден или счет будет оплачен. Он определяет закупку и производство ТМЦ "
-"по правилам и параметрам заказа на продажу. "
+"по правилам и параметрам заказа продаж. "
#. module: sale_stock
#: help:sale.config.settings,group_mrp_properties:0
msgid "Allows you to tag sales order lines with properties."
-msgstr ""
+msgstr "Позволяет отмечать тегами позиции заказа продажи со свойствами"
#. module: sale_stock
#: field:sale.config.settings,group_invoice_deli_orders:0
msgid "Generate invoices after and based on delivery orders"
-msgstr ""
+msgstr "Генерировать счета после и из заказов доставки"
#. module: sale_stock
#: field:sale.config.settings,module_delivery:0
msgid "Allow adding shipping costs"
-msgstr ""
+msgstr "Позволяет добавлять стоимость доставки"
#. module: sale_stock
#: view:sale.order:0
@@ -327,6 +328,8 @@ msgid ""
"International Commercial Terms are a series of predefined commercial terms "
"used in international transactions."
msgstr ""
+"Международные правила по толкованию наиболее широко используемых торговых "
+"терминов в области внешней торговли."
#. module: sale_stock
#: help:sale.config.settings,module_delivery:0
@@ -345,7 +348,7 @@ msgstr "Доставка всего сразу, если все готово."
#. module: sale_stock
#: model:res.groups,name:sale_stock.group_invoice_deli_orders
msgid "Enable Invoicing Delivery orders"
-msgstr ""
+msgstr "Разрешить выставлять счета на заказы доставки"
#. module: sale_stock
#: field:res.company,security_lead:0
@@ -362,6 +365,8 @@ msgstr "Закупка проданного материала"
msgid ""
"Pick 'Deliver each product when available' if you allow partial delivery."
msgstr ""
+"Выбрать \"Доставить каждый товар по готовности\" если вы разрешили частичную "
+"доставки"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:206
@@ -380,7 +385,7 @@ msgid ""
"It indicates that the sales order has been delivered. This field is updated "
"only after the scheduler(s) have been launched."
msgstr ""
-"Показывает, что заказ на продажу был доставлен. Это поле обновляется только "
+"Показывает, что заказ продаж был доставлен. Это поле обновляется только "
"после запуска планировщика."
#. module: sale_stock
@@ -398,12 +403,12 @@ msgstr "Свойства изделия в позиции заказа"
msgid ""
"You can generate invoices based on sales orders or based on shippings."
msgstr ""
-"Вы можете создать счет на основе заказов на продажу или на основе доставок."
+"Вы можете создать счет на основе заказов продаж или на основе доставок."
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_report
msgid "Sales Orders Statistics"
-msgstr "Статистика заказов на продажу"
+msgstr "Статистика заказов продаж"
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_res_company
@@ -428,6 +433,8 @@ msgid ""
"Allows you to specify different delivery and invoice addresses on a sales "
"order."
msgstr ""
+"Позволяет задавать разные адреса для доставки и выставления счета в заказе "
+"продажи."
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_saleprocurement0
@@ -435,7 +442,7 @@ msgid ""
"One Procurement order for each sales order line and for each of the "
"components."
msgstr ""
-"Один заказ на снабжение для каждой позиции заказа на продажу и для каждого "
+"Один заказ снабжения для каждой позиции заказа продаж и для каждого "
"компонента."
#. module: sale_stock
@@ -455,6 +462,7 @@ msgid ""
"Number of days between the order confirmation and the shipping of the "
"products to the customer"
msgstr ""
+"Количество дней между подтверждением заказа и отгрузкой продукции заказчику"
#. module: sale_stock
#: help:sale.config.settings,default_picking_policy:0
@@ -467,7 +475,7 @@ msgstr ""
#. module: sale_stock
#: selection:sale.config.settings,default_order_policy:0
msgid "Invoice based on sales orders"
-msgstr ""
+msgstr "Счет основан на заказах продаж"
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_invoiceafterdelivery0
@@ -487,6 +495,9 @@ msgid ""
"In order to delete a confirmed sales order, you must cancel it.\n"
"To do so, you must first cancel related picking for delivery orders."
msgstr ""
+"Для того, чтобы удалить подтвержденный заказ, вы должны отменить его.\n"
+"Чтобы сделать это, Вы должны сначала отменить комплектование для заказов "
+"доставки."
#. module: sale_stock
#: field:sale.order.line,number_packages:0
@@ -506,7 +517,7 @@ msgstr "Создать счет"
#. module: sale_stock
#: field:sale.config.settings,task_work:0
msgid "Prepare invoices based on task's activities"
-msgstr ""
+msgstr "Подготовка счетов основанных на действиях по задачам"
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_advance_payment_inv
@@ -519,7 +530,7 @@ msgstr "Счет на авансовый платеж"
msgid "You must first cancel stock moves attached to this sales order line."
msgstr ""
"Сначала вы должны отменить перемещения ТМЦ связанные с этой позицией заказа "
-"на продажу."
+"продаж."
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:535
@@ -536,7 +547,7 @@ msgstr "Инкотерм"
#: code:addons/sale_stock/sale_stock.py:496
#, python-format
msgid "Cannot cancel sales order line!"
-msgstr ""
+msgstr "Нельзя отменить позицию заказа продаж!"
#. module: sale_stock
#: model:process.transition.action,name:sale_stock.process_transition_action_cancelassignation0
@@ -551,7 +562,7 @@ msgstr "На основании отгруженного или заказанн
#. module: sale_stock
#: selection:sale.order,picking_policy:0
msgid "Deliver all products at once"
-msgstr "Отгрузка всех товаров за раз"
+msgstr "Доставка всех товаров за раз"
#. module: sale_stock
#: field:sale.order,picking_ids:0
@@ -561,7 +572,7 @@ msgstr "Связанное комплектование"
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_config_settings
msgid "sale.config.settings"
-msgstr ""
+msgstr "sale.config.settings"
#. module: sale_stock
#: help:sale.order,picking_ids:0
@@ -569,21 +580,22 @@ msgid ""
"This is a list of delivery orders that has been generated for this sales "
"order."
msgstr ""
+"Это список заказов доставки который был создан для этого заказа продажи."
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_saleorderprocurement0
msgid "Sales Order Requisition"
-msgstr "Запрос заказа на продажу"
+msgstr "Запрос заказа продаж"
#. module: sale_stock
#: model:process.transition,name:sale_stock.process_transition_deliver0
msgid "Create Delivery Order"
-msgstr "Создать заказ на доставку"
+msgstr "Создать заказ доставки"
#. module: sale_stock
#: view:sale.order:0
msgid "Ignore Exception"
-msgstr "Игнорировать исключение"
+msgstr "Игнорировать исключительную ситуацию"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:588
@@ -598,12 +610,12 @@ msgstr ""
#. module: sale_stock
#: view:sale.order:0
msgid "Recreate Delivery Order"
-msgstr ""
+msgstr "Воссоздать заказ доставки"
#. module: sale_stock
#: help:sale.config.settings,group_multiple_shops:0
msgid "This allows to configure and use multiple shops."
-msgstr ""
+msgstr "Это позволяет настроить и использовать несколько магазинов."
#. module: sale_stock
#: field:sale.order,picked_rate:0
@@ -628,5 +640,5 @@ msgid ""
"automatically."
msgstr ""
"В зависимости от настройки исходящего места хранения, перемещение между "
-"зоной отгрузки и заказчиком выполняется с помощью заказа на доставку вручную "
+"зоной отгрузки и заказчиком выполняется с помощью заказа доставки вручную "
"или автоматически."
diff --git a/addons/sale_stock/test/cancel_order_sale_stock.yml b/addons/sale_stock/test/cancel_order_sale_stock.yml
index 9081cac9fa3..d970e0c9cad 100644
--- a/addons/sale_stock/test/cancel_order_sale_stock.yml
+++ b/addons/sale_stock/test/cancel_order_sale_stock.yml
@@ -8,7 +8,7 @@
-
!python {model: stock.picking}: |
delivery_orders = self.search(cr, uid, [('sale_id','=',ref("sale.sale_order_8"))])
- first_picking = self.browse(cr, uid, delivery_orders[0], context=context)
+ first_picking = self.browse(cr, uid, delivery_orders[-1], context=context)
if first_picking.force_assign(cr, uid, first_picking):
first_move = first_picking.move_lines[0]
values = {'move%s'%(first_move.id): {'product_qty': 2, 'product_uom':ref('product.product_uom_unit')}}
@@ -18,7 +18,7 @@
-
!python {model: stock.picking}: |
delivery_orders = self.search(cr, uid, [('sale_id','=',ref("sale.sale_order_8"))])
- last_delivery_order_id = delivery_orders[0]
+ last_delivery_order_id = delivery_orders[-1]
self.pool.get('stock.picking').signal_button_cancel(cr, uid, [last_delivery_order_id])
-
I run the scheduler.
diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py
index b45e3b17ea2..22ed7c3e39c 100644
--- a/addons/share/wizard/share_wizard.py
+++ b/addons/share/wizard/share_wizard.py
@@ -414,7 +414,8 @@ class share_wizard(osv.TransientModel):
relation_model_id = model_obj.search(cr, UID_ROOT, [('model','=',coldef._obj)])[0]
relation_model_browse = model_obj.browse(cr, UID_ROOT, relation_model_id, context=context)
relation_osv = self.pool[coldef._obj]
- if coltype == 'one2many':
+ #skip virtual one2many fields (related, ...) as there is no reverse relationship
+ if coltype == 'one2many' and hasattr(coldef, '_fields_id'):
# don't record reverse path if it's not a real m2o (that happens, but rarely)
dest_model_ci = relation_osv._all_columns
reverse_rel = coldef._fields_id
@@ -832,7 +833,7 @@ class share_wizard(osv.TransientModel):
notification_obj = self.pool.get('mail.notification')
user = self.pool.get('res.users').browse(cr, UID_ROOT, uid)
if not user.email:
- raise osv.except_osv(_('Email required'), _('The current user must have an email address configured in User Preferences to be able to send outgoing emails.'))
+ raise osv.except_osv(_('Email Required'), _('The current user must have an email address configured in User Preferences to be able to send outgoing emails.'))
# TODO: also send an HTML version of this mail
for result_line in wizard_data.result_line_ids:
@@ -863,7 +864,7 @@ class share_wizard(osv.TransientModel):
mail_mail = self.pool.get('mail.mail')
user = self.pool.get('res.users').browse(cr, UID_ROOT, uid)
if not user.email:
- raise osv.except_osv(_('Email required'), _('The current user must have an email address configured in User Preferences to be able to send outgoing emails.'))
+ raise osv.except_osv(_('Email Required'), _('The current user must have an email address configured in User Preferences to be able to send outgoing emails.'))
# TODO: also send an HTML version of this mail
mail_ids = []
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index db73bae3b6c..d5fb48a60f0 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -543,6 +543,7 @@ class stock_picking(osv.osv):
_name = "stock.picking"
_inherit = ['mail.thread']
_description = "Picking List"
+ _order = "id desc"
def _set_maximum_date(self, cr, uid, ids, name, value, arg, context=None):
""" Calculates planned date if it is greater than 'value'.
@@ -1109,7 +1110,7 @@ class stock_picking(osv.osv):
if isinstance(partner, int):
partner = partner_obj.browse(cr, uid, [partner], context=context)[0]
if not partner:
- raise osv.except_osv(_('Error, no partner !'),
+ raise osv.except_osv(_('Error, no partner!'),
_('Please put a partner on the picking list if you want to generate invoice.'))
if not inv_type:
@@ -1763,7 +1764,7 @@ class stock_move(osv.osv):
for move in self.browse(cr, uid, ids, context=context):
if move.state == 'done':
if frozen_fields.intersection(vals):
- raise osv.except_osv(_('Operation forbidden !'),
+ raise osv.except_osv(_('Operation Forbidden!'),
_('Quantities, Units of Measure, Products and Locations cannot be modified on stock moves that have already been processed (except by the Administrator).'))
return super(stock_move, self).write(cr, uid, ids, vals, context=context)
diff --git a/addons/stock/wizard/stock_partial_picking.py b/addons/stock/wizard/stock_partial_picking.py
index 47599d5f99e..8c2c5839989 100644
--- a/addons/stock/wizard/stock_partial_picking.py
+++ b/addons/stock/wizard/stock_partial_picking.py
@@ -144,7 +144,7 @@ class stock_partial_picking(osv.osv_memory):
def _partial_move_for(self, cr, uid, move):
partial_move = {
'product_id' : move.product_id.id,
- 'quantity' : move.product_qty if move.state in ('assigned','draft','confirmed') else 0,
+ 'quantity' : move.product_qty if move.state == 'assigned' else 0,
'product_uom' : move.product_uom.id,
'prodlot_id' : move.prodlot_id.id,
'move_id' : move.id,
@@ -178,7 +178,7 @@ class stock_partial_picking(osv.osv_memory):
if line_uom.factor and line_uom.factor <> 0:
if float_compare(qty_in_line_uom, wizard_line.quantity, precision_rounding=line_uom.rounding) != 0:
- raise osv.except_osv(_('Warning!'), _('The unit of measure rounding does not allow you to ship "%s %s", only roundings of "%s %s" is accepted by the Unit of Measure.') % (wizard_line.quantity, line_uom.name, line_uom.rounding, line_uom.name))
+ raise osv.except_osv(_('Warning!'), _('The unit of measure rounding does not allow you to ship "%s %s", only rounding of "%s %s" is accepted by the Unit of Measure.') % (wizard_line.quantity, line_uom.name, line_uom.rounding, line_uom.name))
if move_id:
#Check rounding Quantity.ex.
#picking: 1kg, uom kg rounding = 0.01 (rounding to 10g),
@@ -189,7 +189,7 @@ class stock_partial_picking(osv.osv_memory):
qty_in_initial_uom = uom_obj._compute_qty(cr, uid, line_uom.id, wizard_line.quantity, initial_uom.id)
without_rounding_qty = (wizard_line.quantity / line_uom.factor) * initial_uom.factor
if float_compare(qty_in_initial_uom, without_rounding_qty, precision_rounding=initial_uom.rounding) != 0:
- raise osv.except_osv(_('Warning!'), _('The rounding of the initial uom does not allow you to ship "%s %s", as it would let a quantity of "%s %s" to ship and only roundings of "%s %s" is accepted by the uom.') % (wizard_line.quantity, line_uom.name, wizard_line.move_id.product_qty - without_rounding_qty, initial_uom.name, initial_uom.rounding, initial_uom.name))
+ raise osv.except_osv(_('Warning!'), _('The rounding of the initial uom does not allow you to ship "%s %s", as it would let a quantity of "%s %s" to ship and only rounding of "%s %s" is accepted by the uom.') % (wizard_line.quantity, line_uom.name, wizard_line.move_id.product_qty - without_rounding_qty, initial_uom.name, initial_uom.rounding, initial_uom.name))
else:
seq_obj_name = 'stock.picking.' + picking_type
move_id = stock_move.create(cr,uid,{'name' : self.pool.get('ir.sequence').get(cr, uid, seq_obj_name),
diff --git a/addons/subscription/subscription.py b/addons/subscription/subscription.py
index b7ae720c187..98e1d78b3be 100644
--- a/addons/subscription/subscription.py
+++ b/addons/subscription/subscription.py
@@ -115,7 +115,7 @@ class subscription_subscription(osv.osv):
id = int(id)
model = self.pool[model_name]
except:
- raise osv.except_osv(_('Wrong Source Document !'), _('Please provide another source document.\nThis one does not exist !'))
+ raise osv.except_osv(_('Wrong Source Document!'), _('Please provide another source document.\nThis one does not exist!'))
default = {'state':'draft'}
doc_obj = self.pool.get('subscription.document')
@@ -142,7 +142,7 @@ class subscription_subscription(osv.osv):
def unlink(self, cr, uid, ids, context=None):
for record in self.browse(cr, uid, ids, context or {}):
if record.state=="running":
- raise osv.except_osv(_('Error!'),_('You cannot delete an active subscription !'))
+ raise osv.except_osv(_('Error!'),_('You cannot delete an active subscription!'))
return super(subscription_subscription, self).unlink(cr, uid, ids, context)
def set_done(self, cr, uid, ids, context=None):
diff --git a/addons/warning/warning.py b/addons/warning/warning.py
index e9e9161bacb..8e1168e5d35 100644
--- a/addons/warning/warning.py
+++ b/addons/warning/warning.py
@@ -63,7 +63,7 @@ class sale_order(osv.osv):
partner = self.pool.get('res.partner').browse(cr, uid, part, context=context)
if partner.sale_warn != 'no-message':
if partner.sale_warn == 'block':
- raise osv.except_osv(_('Alert for %s !') % (partner.name), partner.sale_warn_msg)
+ raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.sale_warn_msg)
title = _("Warning for %s") % partner.name
message = partner.sale_warn_msg
warning = {
@@ -91,7 +91,7 @@ class purchase_order(osv.osv):
partner = self.pool.get('res.partner').browse(cr, uid, part)
if partner.purchase_warn != 'no-message':
if partner.purchase_warn == 'block':
- raise osv.except_osv(_('Alert for %s !') % (partner.name), partner.purchase_warn_msg)
+ raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.purchase_warn_msg)
title = _("Warning for %s") % partner.name
message = partner.purchase_warn_msg
warning = {
@@ -124,7 +124,7 @@ class account_invoice(osv.osv):
partner = self.pool.get('res.partner').browse(cr, uid, partner_id)
if partner.invoice_warn != 'no-message':
if partner.invoice_warn == 'block':
- raise osv.except_osv(_('Alert for %s !') % (partner.name), partner.invoice_warn_msg)
+ raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.invoice_warn_msg)
title = _("Warning for %s") % partner.name
message = partner.invoice_warn_msg
@@ -155,7 +155,7 @@ class stock_picking(osv.osv):
message = False
if partner.picking_warn != 'no-message':
if partner.picking_warn == 'block':
- raise osv.except_osv(_('Alert for %s !') % (partner.name), partner.picking_warn_msg)
+ raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.picking_warn_msg)
title = _("Warning for %s") % partner.name
message = partner.picking_warn_msg
warning = {
@@ -184,7 +184,7 @@ class stock_picking_in(osv.osv):
message = False
if partner.picking_warn != 'no-message':
if partner.picking_warn == 'block':
- raise osv.except_osv(_('Alert for %s !') % (partner.name), partner.picking_warn_msg)
+ raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.picking_warn_msg)
title = _("Warning for %s") % partner.name
message = partner.picking_warn_msg
warning = {
@@ -210,7 +210,7 @@ class stock_picking_out(osv.osv):
message = False
if partner.picking_warn != 'no-message':
if partner.picking_warn == 'block':
- raise osv.except_osv(_('Alert for %s !') % (partner.name), partner.picking_warn_msg)
+ raise osv.except_osv(_('Alert for %s!') % (partner.name), partner.picking_warn_msg)
title = _("Warning for %s") % partner.name
message = partner.picking_warn_msg
warning = {
@@ -257,7 +257,7 @@ class sale_order_line(osv.osv):
if product_info.sale_line_warn != 'no-message':
if product_info.sale_line_warn == 'block':
- raise osv.except_osv(_('Alert for %s !') % (product_info.name), product_info.sale_line_warn_msg)
+ raise osv.except_osv(_('Alert for %s!') % (product_info.name), product_info.sale_line_warn_msg)
title = _("Warning for %s") % product_info.name
message = product_info.sale_line_warn_msg
warning['title'] = title
@@ -289,7 +289,7 @@ class purchase_order_line(osv.osv):
if product_info.purchase_line_warn != 'no-message':
if product_info.purchase_line_warn == 'block':
- raise osv.except_osv(_('Alert for %s !') % (product_info.name), product_info.purchase_line_warn_msg)
+ raise osv.except_osv(_('Alert for %s!') % (product_info.name), product_info.purchase_line_warn_msg)
title = _("Warning for %s") % product_info.name
message = product_info.purchase_line_warn_msg
warning['title'] = title