diff --git a/addons/account_anglo_saxon/i18n/sk.po b/addons/account_anglo_saxon/i18n/sk.po new file mode 100644 index 00000000000..e3452974d53 --- /dev/null +++ b/addons/account_anglo_saxon/i18n/sk.po @@ -0,0 +1,62 @@ +# Slovak translation for openobject-addons +# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:36+0000\n" +"PO-Revision-Date: 2014-04-26 16:04+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-04-27 06:18+0000\n" +"X-Generator: Launchpad (build 16985)\n" + +#. module: account_anglo_saxon +#: model:ir.model,name:account_anglo_saxon.model_product_category +msgid "Product Category" +msgstr "" + +#. module: account_anglo_saxon +#: model:ir.model,name:account_anglo_saxon.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: account_anglo_saxon +#: model:ir.model,name:account_anglo_saxon.model_purchase_order +msgid "Purchase Order" +msgstr "" + +#. module: account_anglo_saxon +#: model:ir.model,name:account_anglo_saxon.model_product_template +msgid "Product Template" +msgstr "" + +#. module: account_anglo_saxon +#: field:product.category,property_account_creditor_price_difference_categ:0 +#: field:product.template,property_account_creditor_price_difference:0 +msgid "Price Difference Account" +msgstr "" + +#. module: account_anglo_saxon +#: model:ir.model,name:account_anglo_saxon.model_account_invoice +msgid "Invoice" +msgstr "" + +#. module: account_anglo_saxon +#: model:ir.model,name:account_anglo_saxon.model_stock_picking +msgid "Picking List" +msgstr "" + +#. module: account_anglo_saxon +#: help:product.category,property_account_creditor_price_difference_categ:0 +#: help:product.template,property_account_creditor_price_difference:0 +msgid "" +"This account will be used to value price difference between purchase price " +"and cost price." +msgstr "" diff --git a/addons/account_report_company/i18n/mk.po b/addons/account_report_company/i18n/mk.po new file mode 100644 index 00000000000..c738c069832 --- /dev/null +++ b/addons/account_report_company/i18n/mk.po @@ -0,0 +1,62 @@ +# Macedonian translation for openobject-addons +# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:36+0000\n" +"PO-Revision-Date: 2014-04-26 12:11+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Macedonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-04-27 06:18+0000\n" +"X-Generator: Launchpad (build 16985)\n" + +#. module: account_report_company +#: field:res.partner,display_name:0 +msgid "Name" +msgstr "" + +#. module: account_report_company +#: field:account.invoice,commercial_partner_id:0 +#: help:account.invoice.report,commercial_partner_id:0 +msgid "Commercial Entity" +msgstr "" + +#. module: account_report_company +#: field:account.invoice.report,commercial_partner_id:0 +msgid "Partner Company" +msgstr "" + +#. module: account_report_company +#: model:ir.model,name:account_report_company.model_account_invoice +msgid "Invoice" +msgstr "" + +#. module: account_report_company +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: model:ir.model,name:account_report_company.model_res_partner +msgid "Partner" +msgstr "" + +#. module: account_report_company +#: model:ir.model,name:account_report_company.model_account_invoice_report +msgid "Invoices Statistics" +msgstr "" + +#. module: account_report_company +#: view:res.partner:0 +msgid "True" +msgstr "" + +#. module: account_report_company +#: help:account.invoice,commercial_partner_id:0 +msgid "" +"The commercial entity that will be used on Journal Entries for this invoice" +msgstr "" diff --git a/addons/association/i18n/sk.po b/addons/association/i18n/sk.po new file mode 100644 index 00000000000..dfce4c381b6 --- /dev/null +++ b/addons/association/i18n/sk.po @@ -0,0 +1,135 @@ +# Slovak translation for openobject-addons +# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2014-04-26 16:22+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-04-27 06:18+0000\n" +"X-Generator: Launchpad (build 16985)\n" + +#. module: association +#: field:profile.association.config.install_modules_wizard,wiki:0 +msgid "Wiki" +msgstr "" + +#. module: association +#: view:profile.association.config.install_modules_wizard:0 +msgid "Event Management" +msgstr "" + +#. module: association +#: field:profile.association.config.install_modules_wizard,project_gtd:0 +msgid "Getting Things Done" +msgstr "" + +#. module: association +#: model:ir.module.module,description:association.module_meta_information +msgid "This module is to create Profile for Associates" +msgstr "" + +#. module: association +#: field:profile.association.config.install_modules_wizard,progress:0 +msgid "Configuration Progress" +msgstr "" + +#. module: association +#: view:profile.association.config.install_modules_wizard:0 +msgid "" +"Here are specific applications related to the Association Profile you " +"selected." +msgstr "" + +#. module: association +#: view:profile.association.config.install_modules_wizard:0 +msgid "title" +msgstr "" + +#. module: association +#: help:profile.association.config.install_modules_wizard,event_project:0 +msgid "Helps you to manage and organize your events." +msgstr "" + +#. module: association +#: field:profile.association.config.install_modules_wizard,config_logo:0 +msgid "Image" +msgstr "" + +#. module: association +#: help:profile.association.config.install_modules_wizard,hr_expense:0 +msgid "" +"Tracks and manages employee expenses, and can automatically re-invoice " +"clients if the expenses are project-related." +msgstr "" + +#. module: association +#: help:profile.association.config.install_modules_wizard,project_gtd:0 +msgid "" +"GTD is a methodology to efficiently organise yourself and your tasks. This " +"module fully integrates GTD principle with OpenERP's project management." +msgstr "" + +#. module: association +#: view:profile.association.config.install_modules_wizard:0 +msgid "Resources Management" +msgstr "" + +#. module: association +#: model:ir.module.module,shortdesc:association.module_meta_information +msgid "Association profile" +msgstr "" + +#. module: association +#: field:profile.association.config.install_modules_wizard,hr_expense:0 +msgid "Expenses Tracking" +msgstr "" + +#. module: association +#: model:ir.actions.act_window,name:association.action_config_install_module +#: view:profile.association.config.install_modules_wizard:0 +msgid "Association Application Configuration" +msgstr "" + +#. module: association +#: help:profile.association.config.install_modules_wizard,wiki:0 +msgid "" +"Lets you create wiki pages and page groups in order to keep track of " +"business knowledge and share it with and between your employees." +msgstr "" + +#. module: association +#: help:profile.association.config.install_modules_wizard,project:0 +msgid "" +"Helps you manage your projects and tasks by tracking them, generating " +"plannings, etc..." +msgstr "" + +#. module: association +#: model:ir.model,name:association.model_profile_association_config_install_modules_wizard +msgid "profile.association.config.install_modules_wizard" +msgstr "" + +#. module: association +#: field:profile.association.config.install_modules_wizard,event_project:0 +msgid "Events" +msgstr "" + +#. module: association +#: view:profile.association.config.install_modules_wizard:0 +#: field:profile.association.config.install_modules_wizard,project:0 +msgid "Project Management" +msgstr "" + +#. module: association +#: view:profile.association.config.install_modules_wizard:0 +msgid "Configure" +msgstr "" diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py index e5ca1b2f6bc..89f56fff624 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py @@ -26,9 +26,9 @@ from pytz import timezone import pytz from openerp.osv import fields, osv +from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT from openerp.tools.translate import _ from openerp import netsvc -from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT class hr_timesheet_sheet(osv.osv): _name = "hr_timesheet_sheet.sheet" @@ -393,29 +393,53 @@ class hr_attendance(osv.osv): attendance_ids.extend([row[0] for row in cr.fetchall()]) return attendance_ids + def _get_attendance_employee_tz(self, cr, uid, employee_id, date, context=None): + """ Simulate timesheet in employee timezone + + Return the attendance datetime as date in string format in employee + tz converted from utc timezone as we consider date of employee + timesheet is in employee timezone + """ + employee_obj = self.pool['hr.employee'] + + tz = False + if employee_id: + employee = employee_obj.browse(cr, uid, employee_id, context=context) + tz = employee.user_id.partner_id.tz + + att_tz = timezone(tz or 'utc') + + attendance_dt = datetime.strptime(date, DEFAULT_SERVER_DATETIME_FORMAT) + att_tz_dt = pytz.utc.localize(attendance_dt) + att_tz_dt = att_tz_dt.astimezone(att_tz) + # We take only the date omiting the hours as we compare with timesheet + # date_from which is a date format thus using hours would lead to + # be out of scope of timesheet + att_tz_date_str = datetime.strftime(att_tz_dt, DEFAULT_SERVER_DATE_FORMAT) + return att_tz_date_str + + def _get_current_sheet(self, cr, uid, employee_id, date=False, context=None): + + sheet_obj = self.pool['hr_timesheet_sheet.sheet'] + if not date: + date = time.strftime(DEFAULT_SERVER_DATETIME_FORMAT) + + att_tz_date_str = self._get_attendance_employee_tz( + cr, uid, employee_id, + date=date, context=context) + sheet_ids = sheet_obj.search(cr, uid, + [('date_from', '<=', att_tz_date_str), + ('date_to', '>=', att_tz_date_str), + ('employee_id', '=', employee_id)], + context=context) + return sheet_ids and sheet_ids[0] or False + def _sheet(self, cursor, user, ids, name, args, context=None): - sheet_obj = self.pool.get('hr_timesheet_sheet.sheet') res = {}.fromkeys(ids, False) for attendance in self.browse(cursor, user, ids, context=context): - - # Simulate timesheet in employee timezone - att_tz = timezone(attendance.employee_id.user_id.partner_id.tz or 'utc') - - attendance_dt = datetime.strptime(attendance.name, DEFAULT_SERVER_DATETIME_FORMAT) - att_tz_dt = pytz.utc.localize(attendance_dt) - att_tz_dt = att_tz_dt.astimezone(att_tz) - # We take only the date omiting the hours as we compare with timesheet - # date_from which is a date format thus using hours would lead to - # be out of scope of timesheet - att_tz_date_str = datetime.strftime(att_tz_dt, DEFAULT_SERVER_DATE_FORMAT) - sheet_ids = sheet_obj.search(cursor, user, - [('date_from', '<=', att_tz_date_str), - ('date_to', '>=', att_tz_date_str), - ('employee_id', '=', attendance.employee_id.id)], - context=context) - if sheet_ids: - # [0] because only one sheet possible for an employee between 2 dates - res[attendance.id] = sheet_obj.name_get(cursor, user, sheet_ids, context=context)[0] + res[attendance.id] = self._get_current_sheet( + cursor, user, attendance.employee_id.id, attendance.name, + context=context) return res _columns = { @@ -434,16 +458,18 @@ class hr_attendance(osv.osv): def create(self, cr, uid, vals, context=None): if context is None: context = {} - if 'sheet_id' in context: - ts = self.pool.get('hr_timesheet_sheet.sheet').browse(cr, uid, context['sheet_id'], context=context) + + sheet_id = context.get('sheet_id') or self._get_current_sheet(cr, uid, vals.get('employee_id'), vals.get('name'), context=context) + if sheet_id: + att_tz_date_str = self._get_attendance_employee_tz( + cr, uid, vals.get('employee_id'), + date=vals.get('name'), context=context) + ts = self.pool.get('hr_timesheet_sheet.sheet').browse(cr, uid, sheet_id, context=context) if ts.state not in ('draft', 'new'): - raise osv.except_osv(_('Error!'), _('You cannot modify an entry in a confirmed timesheet.')) - res = super(hr_attendance,self).create(cr, uid, vals, context=context) - if 'sheet_id' in context: - if context['sheet_id'] != self.browse(cr, uid, res, context=context).sheet_id.id: - raise osv.except_osv(_('User Error!'), _('You cannot enter an attendance ' \ - 'date outside the current timesheet dates.')) - return res + raise osv.except_osv(_('Error!'), _('You can not enter an attendance in a submitted timesheet. Ask your manager to reset it before adding attendance.')) + elif ts.date_from > att_tz_date_str or ts.date_to < att_tz_date_str: + raise osv.except_osv(_('User Error!'), _('You can not enter an attendance date outside the current timesheet dates.')) + return super(hr_attendance,self).create(cr, uid, vals, context=context) def unlink(self, cr, uid, ids, *args, **kwargs): if isinstance(ids, (int, long)): @@ -597,4 +623,3 @@ class res_company(osv.osv): res_company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/multi_company/multi_company_demo.xml b/addons/multi_company/multi_company_demo.xml index 088aa35e915..bf963146267 100644 --- a/addons/multi_company/multi_company_demo.xml +++ b/addons/multi_company/multi_company_demo.xml @@ -28,7 +28,7 @@ - + OpenERP US @@ -450,7 +450,7 @@ - + diff --git a/addons/product/product.py b/addons/product/product.py index 34503b5136e..5d6fb7a15bc 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -24,7 +24,7 @@ import re from _common import ceiling -from openerp import tools +from openerp import tools, SUPERUSER_ID from openerp.osv import osv, fields from openerp.tools.translate import _ @@ -703,7 +703,7 @@ class product_product(osv.osv): res = {} product_uom_obj = self.pool.get('product.uom') - for product in self.browse(cr, uid, ids, context=context): + for product in self.browse(cr, SUPERUSER_ID, ids, context=context): res[product.id] = product[ptype] or 0.0 if ptype == 'list_price': res[product.id] = (res[product.id] * (product.price_margin or 1.0)) + \