[MERGE] forward port branch saas-11.2 up to aae54ecc15

This commit is contained in:
Christophe Simonis
2018-05-09 15:45:20 +02:00
197 changed files with 2765 additions and 1574 deletions
+44
View File
@@ -242,6 +242,50 @@ msgid ""
"</p>\n"
"</div>"
msgstr ""
"<div>\n"
"<p>Hallo ${object.partner_id.name}\n"
"% set access_action = object.with_context(force_website=True).get_access_action()\n"
"% set is_online = access_action and access_action['type'] == 'ir.actions.act_url'\n"
"% set access_url = object.get_mail_url()\n"
"\n"
"% if object.partner_id.parent_id:\n"
" (<i>${object.partner_id.parent_id.name}</i>)\n"
"% endif\n"
",</p>\n"
"<p>hier im Anhang finden Sie Ihre\n"
"% if object.number:\n"
"Rechnung <strong>${object.number}</strong>\n"
"% else:\n"
"Rechnung\n"
"% endif\n"
"% if object.origin:\n"
"(mit Referenz: ${object.origin})\n"
"% endif\n"
"mit einem Betrag von <strong>${format_amount(object.amount_total, object.currency_id)}</strong>\n"
"from ${object.company_id.name}.\n"
"</p>\n"
"\n"
"% if is_online:\n"
" <br/><br/>\n"
" <center>\n"
" <a href=\"${access_url}\" style=\"background-color: #1abc9c; padding: 20px; text-decoration: none; color: #fff; border-radius: 5px; font-size: 16px;\" class=\"o_default_snippet_text\">Rechnung anzeigen</a>\n"
" </center>\n"
"% endif\n"
" <br/><br/>\n"
"\n"
"% if object.state=='paid':\n"
" <p>Diese Rechnung ist bereits bezahlt.</p>\n"
"% else:\n"
" <p>Bitte führen Sie die Zahlung so bald wie möglich durch.</p>\n"
"% endif\n"
"\n"
"<p>Danke,</p>\n"
"<p style=\"color:#888888\">\n"
"% if object.user_id and object.user_id.signature:\n"
" ${object.user_id.signature | safe}\n"
"% endif\n"
"</p>\n"
"</div>"
#. module: account
#: model:ir.ui.view,arch_db:account.portal_my_invoices
+58
View File
@@ -77,6 +77,10 @@ msgid ""
" * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n"
" * The 'Cancelled' status is used when user cancel invoice."
msgstr ""
"* El estado de \"Borrador\" se usa cuando se codifica un factura nueva y no confirmada.\n"
"* El estado \"Abierto\" se usa cuando el usuario crea una factura, y se genera un número de factura. Este estado se mantiene hasta que el usuario paga la factura\n"
"* El Estado \"Pagado\" se establece automáticamente cuando la factura se paga. Sus entradas diarias relacionadas pueden estar o no conciliadas.\n"
"* El estado \"Cancelado\" se usa cuando el usuario cancela una factura"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_chart_template__code_digits
@@ -203,6 +207,16 @@ msgid ""
"</p>\n"
"</data>"
msgstr ""
"<?xml version=\"1.0\"?>\n"
"<data>Estimado ${object.partner_id.name},</p>\n"
"<p>Gracias por tu pago.<br/> Aquí está tu recibo de pago <strong>${(object.name or '').replace('/','-')}</strong> por un monto de <strong>${format_amount(object.amount, object.currency_id)}</strong> efectuado por ${object.company_id.name}.</p>\n"
"<p>Si tienes alguna pregunta, no dudes en contactarnos.</p>\n"
"<p>Cordiales saludos,\n"
"% if user and user.signature:\n"
"${user.signature | safe}\n"
"% endif\n"
"</p>\n"
"</data>"
#. module: account
#: model:mail.template,body_html:account.email_template_edi_invoice
@@ -252,6 +266,50 @@ msgid ""
"</p>\n"
"</div>"
msgstr ""
"<div>\n"
"<p>Estimado ${object.partner_id.name}\n"
"% set access_action = object.with_context(force_website=True).get_access_action()\n"
"% set is_online = access_action and access_action['type'] == 'ir.actions.act_url'\n"
"% set access_url = object.get_mail_url()\n"
"\n"
"% if object.partner_id.parent_id:\n"
" (<i>${object.partner_id.parent_id.name}</i>)\n"
"% endif\n"
",</p>\n"
"<p>Aquí está, en el archivo adjunto, tu \n"
"% if object.number:\n"
"<strong>factura ${object.number}</strong>\n"
"% else:\n"
"invoice\n"
"% endif\n"
"% if object.origin:\n"
"(with reference: ${object.origin})\n"
"% endif\n"
"por un monto de <strong>${format_amount(object.amount_total, object.currency_id)}</strong>\n"
"efectuado por ${object.company_id.name}.\n"
"</p>\n"
"\n"
"% if is_online:\n"
" <br/><br/>\n"
" <center>\n"
" <a href=\"${access_url}\" style=\"background-color: #1abc9c; padding: 20px; text-decoration: none; color: #fff; border-radius: 5px; font-size: 16px;\" class=\"o_default_snippet_text\">Ver factura</a>\n"
" </center>\n"
"% endif\n"
" <br/><br/>\n"
"\n"
"% if object.state=='paid':\n"
" <p>Esta factura ya se encuentra pagada.</p>\n"
"% else:\n"
" <p>Por favor remita el pago a su más pronta conveniencia.</p>\n"
"% endif\n"
"\n"
"<p>Gracias,</p>\n"
"<p style=\"color:#888888\">\n"
"% if object.user_id and object.user_id.signature:\n"
" ${object.user_id.signature | safe}\n"
"% endif\n"
"</p>\n"
"</div>"
#. module: account
#: model:ir.ui.view,arch_db:account.portal_my_invoices
+58
View File
@@ -87,6 +87,10 @@ msgid ""
" * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n"
" * The 'Cancelled' status is used when user cancel invoice."
msgstr ""
"* L'état \"Brouillon\" est utilisé lorsqu'un utilisateur est en train de saisir ou de modifier une nouvelle facture non confirmée.\n"
"* L'état 'Ouvert' est utilisé lorsque l'utilisateur crée une facture, celle-ci a alors un numéro de facture La facture reste dans ce statut \"Ouvert\" jusqu'à ce qu'elle soit payée.\n"
"* L'état 'Payé' est affecté automatiquement lorsque la facture est payée. Ses écritures dans les journaux connexes peuvent ou non être réconciliées.\n"
"* L'état \"Annulé\" est utilisé lorsque l'utilisateur annule la facture."
#. module: account
#: model:ir.model.fields,field_description:account.field_account_chart_template__code_digits
@@ -213,6 +217,16 @@ msgid ""
"</p>\n"
"</data>"
msgstr ""
"<?xml version=\"1.0\"?>\n"
"<data><p>Chèr(e) ${object.partner_id.name},</p>\n"
"<p>Merci pour votre règlement. <br/> Voici le reçu de votre paiement <strong>${(object.name or '').replace('/','-')}</strong> d'un montant de <strong>${format_amount(object.amount, object.currency_id)}</strong> de ${object.company_id.name}.</p>\n"
"<p>Si vous avez des questions, pensez à nous contacter.</p>\n"
"<p>Sincères salutations,\n"
"% if user and user.signature:\n"
"${user.signature | safe}\n"
"% endif\n"
"</p>\n"
"</data>"
#. module: account
#: model:mail.template,body_html:account.email_template_edi_invoice
@@ -262,6 +276,50 @@ msgid ""
"</p>\n"
"</div>"
msgstr ""
"<div>\n"
"<p>Cher ${object.partner_id.name}\n"
"% set access_action = object.with_context(force_website=True).get_access_action()\n"
"% set is_online = access_action and access_action['type'] == 'ir.actions.act_url'\n"
"% set access_url = object.get_mail_url()\n"
"\n"
"% if object.partner_id.parent_id:\n"
" (<i>${object.partner_id.parent_id.name}</i>)\n"
"% endif\n"
",</p>\n"
"<p>Voici, en pièce jointe, votre \n"
"% if object.number:\n"
"facture <strong>${object.number}</strong>\n"
"% else:\n"
"facture\n"
"% endif\n"
"% if object.origin:\n"
"(avec la référence ${object.origin})\n"
"% endif\n"
", son montant s'élève à <strong>${format_amount(object.amount_total, object.currency_id)}</strong>\n"
"émis par ${object.company_id.name}.\n"
"</p>\n"
"\n"
"% if is_online:\n"
" <br/><br/>\n"
" <center>\n"
" <a href=\"${access_url}\" style=\"background-color: #1abc9c; padding: 20px; text-decoration: none; color: #fff; border-radius: 5px; font-size: 16px;\" class=\"o_default_snippet_text\">Voir la facture</a>\n"
" </center>\n"
"% endif\n"
" <br/><br/>\n"
"\n"
"% if object.state=='paid':\n"
" <p>Cette facture est déjà payée.</p>\n"
"% else:\n"
" <p>Merci de procéder au payement dès que possible.</p>\n"
"% endif\n"
"\n"
"<p>Merci,</p>\n"
"<p style=\"color:#888888\">\n"
"% if object.user_id and object.user_id.signature:\n"
" ${object.user_id.signature | safe}\n"
"% endif\n"
"</p>\n"
"</div>"
#. module: account
#: model:ir.ui.view,arch_db:account.portal_my_invoices
+5 -1
View File
@@ -9207,6 +9207,8 @@ msgid ""
"There are still unposted entries in the period you want to lock. You should "
"either post or delete them."
msgstr ""
"Könyveletlen tételek vannak a zárolni tervezett periódusban. Kérjük "
"könyvelje vagy törölje ezen tételeket."
#. module: account
#: code:addons/account/models/account_bank_statement.py:179
@@ -10351,6 +10353,7 @@ msgstr "Nem törölhet olyan fizetést, amit már lekönyvelt"
#, python-format
msgid "You can only delete an invoice line if the invoice is in draft state."
msgstr ""
"Számlatétel csak akkor törölhető, ha a számla piszkozat állapotban van."
#. module: account
#: code:addons/account/models/account_payment.py:142
@@ -10406,6 +10409,7 @@ msgid ""
"You cannot change the currency of the company since some journal items "
"already exist"
msgstr ""
"A vállalat pénzneme nem változtatható, mivel már vannak könyvelési tételek."
#. module: account
#: code:addons/account/models/account.py:271
@@ -10591,7 +10595,7 @@ msgstr "Önnek van"
#: code:addons/account/models/account_payment.py:500
#, python-format
msgid "You have to define a sequence for %s in your company."
msgstr ""
msgstr "Meg kell adni egy szekvenciát %s számára a vállalatban."
#. module: account
#: code:addons/account/wizard/account_report_general_ledger.py:21
+31 -24
View File
@@ -1361,7 +1361,7 @@ msgstr "Разрешить печать чеков и депозиты"
#. module: account
#: model:res.groups,name:account.group_cash_rounding
msgid "Allow the cash rounding management"
msgstr ""
msgstr "Разрешает управление округлением наличности"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
@@ -2278,19 +2278,19 @@ msgstr "Кассы"
#. module: account
#: model:ir.model.fields,field_description:account.field_res_config_settings__group_cash_rounding
msgid "Cash Rounding"
msgstr ""
msgstr "Округление наличных денег"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_invoice__cash_rounding_id
msgid "Cash Rounding Method"
msgstr ""
msgstr "Способ округления наличности"
#. module: account
#: model:ir.actions.act_window,name:account.rounding_list_action
#: model:ir.ui.menu,name:account.menu_action_rounding_form_view
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Cash Roundings"
msgstr ""
msgstr "Округления наличности"
#. module: account
#: model:ir.ui.view,arch_db:account.account_journal_dashboard_kanban_view
@@ -2683,7 +2683,7 @@ msgstr "Написать письмо"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Compute tax rates based on U.S. ZIP codes"
msgstr ""
msgstr "Рассчитывать налоги на основании почтовых кодов (только для США)"
#. module: account
#: model:ir.model.fields,help:account.field_account_move_line__counterpart
@@ -2973,7 +2973,7 @@ msgstr "Создать модель"
#. module: account
#: model:ir.actions.act_window,help:account.rounding_list_action
msgid "Create the first cash rounding"
msgstr ""
msgstr "Создайте первое округление наличности"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_account__create_uid
@@ -3535,7 +3535,7 @@ msgstr "Налоги по умолчанию"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Default taxes applied to local transactions"
msgstr ""
msgstr "Налоги, применяемые по умолчанию к местным сделкам"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
@@ -3551,6 +3551,7 @@ msgstr ""
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Define the smallest coinage of the currency used to pay by cash."
msgstr ""
"Определите самую маленькую монетку(размерность) при расчетах наличными"
#. module: account
#: model:ir.model.fields,help:account.field_account_invoice__cash_rounding_id
@@ -3558,6 +3559,7 @@ msgid ""
"Defines the smallest coinage of the currency that can be used to pay by "
"cash."
msgstr ""
"Определяет самую маленькую монетку(размерность) при расчетах наличными"
#. module: account
#: model:ir.ui.view,arch_db:account.view_account_tax_template_form
@@ -3903,7 +3905,7 @@ msgstr ""
#. module: account
#: model:ir.model.fields,field_description:account.field_res_config_settings__module_l10n_eu_service
msgid "EU Digital Goods VAT"
msgstr ""
msgstr "НДС на цифровые товары по правилам ЕС"
#. module: account
#: code:addons/account/models/chart_template.py:171
@@ -4138,7 +4140,7 @@ msgstr "Налогово-бюджетная информация"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Fiscal Localization"
msgstr ""
msgstr "Налоговая локализация"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_fiscal_position_account_template__position_id
@@ -4285,7 +4287,7 @@ msgstr "Все операции по этому счету принудител
#: code:addons/account/report/account_tax.py:13
#, python-format
msgid "Form content is missing, this report cannot be printed."
msgstr ""
msgstr "Не найдены данные в форме, отчет не сформирован"
#. module: account
#: code:addons/account/models/account_invoice.py:100
@@ -4380,6 +4382,7 @@ msgstr ""
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Get warnings when invoicing specific customers"
msgstr ""
"Получайте уведомления при фактурировании счетов по определенным клиентам"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
@@ -4530,7 +4533,7 @@ msgstr ""
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "How total tax amount is computed in orders and invoices"
msgstr ""
msgstr "Как рассчитывается сумма налогов в заказах и счетах"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_abstract_payment__id
@@ -5182,7 +5185,7 @@ msgstr ""
#. module: account
#: model:ir.model.fields,help:account.field_account_invoice_line__is_rounding_line
msgid "Is a rounding line in case of cash rounding."
msgstr ""
msgstr "Позиция к округлению в случае наличного расчета"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_bank_statement__is_difference_zero
@@ -5880,7 +5883,7 @@ msgstr "РАЗНОЕ"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Mail your invoices in one-click using"
msgstr ""
msgstr "Отправляйте ваши счета в один клик, используя "
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
@@ -5900,7 +5903,7 @@ msgstr "Основная валюта компании."
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Main currency of your company"
msgstr ""
msgstr "Основная валюта вашей компании"
#. module: account
#: model:ir.ui.menu,name:account.account_management_menu
@@ -5970,7 +5973,7 @@ msgstr "Март"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Margin Analysis"
msgstr ""
msgstr "Анализ прибыли"
#. module: account
#: model:ir.ui.view,arch_db:account.setup_bank_journal_form
@@ -6111,7 +6114,7 @@ msgstr ""
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Monitor your product margins from invoices"
msgstr ""
msgstr "Следите за маржинальностью ваших продуктов по инвойсам"
#. module: account
#: model:ir.actions.act_window,name:account.act_account_invoice_partner_relation
@@ -6804,7 +6807,7 @@ msgstr "Прошлые"
#. module: account
#: model:ir.ui.view,arch_db:account.res_config_settings_view_form
msgid "Pay your bills in one-click using Euro SEPA service"
msgstr ""
msgstr "Оплачивайте ваши счета в один клик, используя сервис Euro SEPA"
#. module: account
#: model:account.account.type,name:account.data_account_type_payable
@@ -7814,12 +7817,12 @@ msgstr "Округление по Строке"
#. module: account
#: model:ir.ui.view,arch_db:account.rounding_form_view
msgid "Rounding Form"
msgstr ""
msgstr "Округление"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_invoice_line__is_rounding_line
msgid "Rounding Line"
msgstr ""
msgstr "Округление по строкам"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__rounding_method
@@ -7835,12 +7838,12 @@ msgstr "Точность округления"
#. module: account
#: model:ir.model.fields,field_description:account.field_account_cash_rounding__strategy
msgid "Rounding Strategy"
msgstr ""
msgstr "Стратегия округления"
#. module: account
#: model:ir.ui.view,arch_db:account.rounding_tree_view
msgid "Rounding Tree"
msgstr ""
msgstr "Дерево округления"
#. module: account
#: model:ir.model.fields,field_description:account.field_res_config_settings__module_account_sepa
@@ -8633,6 +8636,7 @@ msgid ""
"Taxes, fiscal positions, chart of accounts &amp; legal statements for your "
"country"
msgstr ""
"Налоги, фискальные позиции план счетов и правовые особенности вашей страны"
#. module: account
#: model:ir.model.fields,help:account.field_account_move_line__balance
@@ -8935,6 +8939,9 @@ msgid ""
"The cash rounding cannot be computed because the difference must be added on the biggest tax found and no tax are specified.\n"
"Please set up a tax or change the cash rounding method."
msgstr ""
"Невозможно рассчитать округления, потому что разница должна быть отнесена к "
"самому большому налогу, но налоги не указаны. Пожалуйста, укажите "
"применяемый налог или измените правило денежного округления."
#. module: account
#: model:ir.model.fields,help:account.field_res_company__chart_template_id
@@ -9208,7 +9215,7 @@ msgstr "Последовательность журнала%s дезактиви
#. module: account
#: model:ir.model.fields,help:account.field_account_cash_rounding__rounding_method
msgid "The tie-breaking rule used for float rounding operations"
msgstr ""
msgstr "Правило округления, используемое в операциях с дробными числами"
#. module: account
#: model:ir.ui.view,arch_db:account.portal_my_invoices
@@ -9714,12 +9721,12 @@ msgstr "Итоговая сумма долга покупателя перед
#. module: account
#: model:ir.model.fields,help:account.field_account_invoice_line__price_total
msgid "Total amount with taxes"
msgstr ""
msgstr "Итого с налогами"
#. module: account
#: model:ir.model.fields,help:account.field_account_invoice_line__price_subtotal
msgid "Total amount without taxes"
msgstr ""
msgstr "Итого без налогов"
#. module: account
#: model:ir.model.fields,help:account.field_res_partner__debit
+2
View File
@@ -9271,6 +9271,8 @@ msgid ""
"This %s has been created from: <a href=# data-oe-model=account.invoice data-"
"oe-id=%d>%s</a>"
msgstr ""
"Bu %s şu adresten oluşturuldu: <a href=# data-oe-model=account.invoice data-"
"oe-id=%d>%s</a>"
#. module: account
#: model:ir.ui.view,arch_db:account.view_account_invoice_report_search
+2 -1
View File
@@ -602,7 +602,8 @@ class AccountInvoice(models.Model):
for invoice in self:
# Delete non-manual tax lines
self._cr.execute("DELETE FROM account_invoice_tax WHERE invoice_id=%s AND manual is False", (invoice.id,))
self.invalidate_cache()
if self._cr.rowcount:
self.invalidate_cache()
# Generate one tax line per tax, however many invoice lines it's applied to
tax_grouped = invoice.get_taxes_values()
+14 -12
View File
@@ -55,7 +55,8 @@ class AccountMove(models.Model):
total_amount += amount
for partial_line in (line.matched_debit_ids + line.matched_credit_ids):
total_reconciled += partial_line.amount
if float_is_zero(total_amount, precision_rounding=move.currency_id.rounding):
precision_currency = move.currency_id or move.company_id.currency_id
if float_is_zero(total_amount, precision_rounding=precision_currency.rounding):
move.matched_percentage = 1.0
else:
move.matched_percentage = total_reconciled / total_amount
@@ -102,8 +103,7 @@ class AccountMove(models.Model):
partner_id = fields.Many2one('res.partner', compute='_compute_partner_id', string="Partner", store=True, readonly=True)
amount = fields.Monetary(compute='_amount_compute', store=True)
narration = fields.Text(string='Internal Note')
company_id = fields.Many2one('res.company', related='journal_id.company_id', string='Company', store=True, readonly=True,
default=lambda self: self.env.user.company_id)
company_id = fields.Many2one('res.company', related='journal_id.company_id', string='Company', store=True, readonly=True)
matched_percentage = fields.Float('Percentage Matched', compute='_compute_matched_percentage', digits=0, store=True, readonly=True, help="Technical field used in cash basis method")
# Dummy Account field to search on account.move by account_id
dummy_account_id = fields.Many2one('account.account', related='line_ids.account_id', string='Account', store=False, readonly=True)
@@ -677,8 +677,6 @@ class AccountMoveLine(models.Model):
raise UserError(_('Entries are not of the same account!'))
if not (all_accounts[0].reconcile or all_accounts[0].internal_type == 'liquidity'):
raise UserError(_('Account %s (%s) does not allow reconciliation. First change the configuration of this account to allow it.') % (all_accounts[0].name, all_accounts[0].code))
if len(partners) > 1:
raise UserError(_('The partner has to be the same on all lines for receivable and payable accounts!'))
#reconcile everything that can be
remaining_moves = self.auto_reconcile_lines()
@@ -796,19 +794,22 @@ class AccountMoveLine(models.Model):
#create an empty move that will hold all the exchange rate adjustments
exchange_move = False
if aml_to_balance_currency:
if aml_to_balance_currency and any([residual for dummy, residual in aml_to_balance_currency.values()]):
exchange_move = self.env['account.move'].create(
self.env['account.full.reconcile']._prepare_exchange_diff_move(move_date=maxdate, company=self[0].company_id))
for currency, values in aml_to_balance_currency.items():
aml_to_balance = values[0]
total_amount_currency = values[1]
#eventually create journal entries to book the difference due to foreign currency's exchange rate that fluctuates
aml_recs, partial_recs = self.env['account.partial.reconcile'].create_exchange_rate_entry(aml_to_balance, 0.0, total_amount_currency, currency, exchange_move)
if total_amount_currency:
#eventually create journal entries to book the difference due to foreign currency's exchange rate that fluctuates
aml_recs, partial_recs = self.env['account.partial.reconcile'].create_exchange_rate_entry(aml_to_balance, 0.0, total_amount_currency, currency, exchange_move)
#add the exchange rate line and the exchange rate partial reconciliation in the et of the full reconcile
self |= aml_recs
partial_rec_set |= partial_recs
# add the exchange rate line and the exchange rate partial reconciliation in the et of the full reconcile
self |= aml_recs
partial_rec_set |= partial_recs
else:
aml_to_balance.reconcile()
if exchange_move:
exchange_move.post()
@@ -836,8 +837,9 @@ class AccountMoveLine(models.Model):
rec_move_ids += account_move_line.matched_credit_ids
if self.env.context.get('invoice_id'):
current_invoice = self.env['account.invoice'].browse(self.env.context['invoice_id'])
aml_to_keep = current_invoice.move_id.line_ids | current_invoice.move_id.line_ids.mapped('full_reconcile_id.exchange_move_id.line_ids')
rec_move_ids = rec_move_ids.filtered(
lambda r: (r.debit_move_id + r.credit_move_id) & current_invoice.move_id.line_ids
lambda r: (r.debit_move_id + r.credit_move_id) & aml_to_keep
)
return rec_move_ids.unlink()
+6 -3
View File
@@ -394,8 +394,7 @@ class ResPartner(models.Model):
required=True)
property_account_position_id = fields.Many2one('account.fiscal.position', company_dependent=True,
string="Fiscal Position",
help="The fiscal position will determine taxes and accounts used for the partner.", oldname="property_account_position",
domain="[('company_id', 'in', [company_id, False])]")
help="The fiscal position will determine taxes and accounts used for the partner.", oldname="property_account_position")
property_payment_term_id = fields.Many2one('account.payment.term', company_dependent=True,
string='Customer Payment Terms',
help="This payment term will be used instead of the default one for sales orders and customer invoices", oldname="property_payment_term")
@@ -445,8 +444,12 @@ class ResPartner(models.Model):
@api.onchange('company_id')
def _onchange_company_id(self):
company = self.env['res.company']
if self.company_id:
return {'domain': {'property_account_position_id': [('company_id', 'in', [self.company_id.id, False])]}}
company = self.company_id
else:
company = self.env.user.company_id
return {'domain': {'property_account_position_id': [('company_id', 'in', [company.id, False])]}}
def can_edit_vat(self):
can_edit_vat = super(ResPartner, self).can_edit_vat()
@@ -990,6 +990,7 @@ var StatementModel = BasicModel.extend({
var formatOptions = {
currency_id: line.st_line.currency_id,
};
var amount = values.amount !== undefined ? values.amount : line.balance.amount;
var prop = {
'id': _.uniqueId('createLine'),
'label': values.label || line.st_line.name,
@@ -1002,8 +1003,7 @@ var StatementModel = BasicModel.extend({
'debit': 0,
'credit': 0,
'base_amount': values.amount_type !== "percentage" ?
(values.amount || line.balance.amount) :
line.balance.amount * values.amount / 100,
(amount) : line.balance.amount * values.amount / 100,
'percent': values.amount_type === "percentage" ? values.amount : null,
'link': values.link,
'display': true,
@@ -661,6 +661,54 @@ class TestReconciliation(AccountingTestCase):
self.assertAlmostEquals(inv1.residual, 10)
self.assertAlmostEquals(inv2.residual, 20)
def test_unreconcile_exchange(self):
# Use case:
# - Company currency in EUR
# - Create 2 rates for USD:
# 1.0 on 2018-01-01
# 0.5 on 2018-02-01
# - Create an invoice on 2018-01-02 of 111 USD
# - Register a payment on 2018-02-02 of 111 USD
# - Unreconcile the payment
self.env['res.currency.rate'].create({
'name': time.strftime('%Y') + '-07-01',
'rate': 1.0,
'currency_id': self.currency_usd_id,
'company_id': self.env.ref('base.main_company').id
})
self.env['res.currency.rate'].create({
'name': time.strftime('%Y') + '-08-01',
'rate': 0.5,
'currency_id': self.currency_usd_id,
'company_id': self.env.ref('base.main_company').id
})
inv = self.create_invoice(invoice_amount=111, currency_id=self.currency_usd_id)
payment = self.env['account.payment'].create({
'payment_type': 'inbound',
'payment_method_id': self.env.ref('account.account_payment_method_manual_in').id,
'partner_type': 'customer',
'partner_id': self.partner_agrolait_id,
'amount': 111,
'currency_id': self.currency_usd_id,
'journal_id': self.bank_journal_usd.id,
'payment_date': time.strftime('%Y') + '-08-01',
})
payment.post()
credit_aml = payment.move_line_ids.filtered('credit')
# Check residual before assignation
self.assertAlmostEquals(inv.residual, 111)
# Assign credit, check exchange move and residual
inv.assign_outstanding_credit(credit_aml.id)
self.assertEqual(len(payment.move_line_ids.mapped('full_reconcile_id').exchange_move_id), 1)
self.assertAlmostEquals(inv.residual, 0)
# Unreconcile invoice and check residual
credit_aml.with_context(invoice_id=inv.id).remove_move_reconcile()
self.assertAlmostEquals(inv.residual, 111)
def test_partial_reconcile_currencies_02(self):
####
# Day 1: Invoice Cust/001 to customer (expressed in USD)
+1 -1
View File
@@ -125,7 +125,7 @@
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button type="object" class="oe_stat_button" icon="fa-pencil-square-o" name="action_view_partner_invoices"
attrs="{'invisible': [('customer', '=', False)]}">
attrs="{'invisible': [('customer', '=', False)]}" context="{'default_partner_id': active_id}">
<div class="o_form_field o_stat_info">
<span class="o_stat_value">
<field name="total_invoiced" widget='monetary' options="{'currency_field': 'currency_id'}"/>
+2 -2
View File
@@ -284,7 +284,7 @@ msgstr "Cheques afdrukken"
#: model:ir.model.fields,field_description:account_check_printing.field_res_company__account_check_printing_date_label
#: model:ir.model.fields,field_description:account_check_printing.field_res_config_settings__account_check_printing_date_label
msgid "Print Date Label"
msgstr ""
msgstr "Print datum label"
#. module: account_check_printing
#: code:addons/account_check_printing/models/account_payment.py:101
@@ -302,7 +302,7 @@ msgstr "Betalingen voor meerdere facturen registreren"
#. module: account_check_printing
#: model:ir.model.fields,field_description:account_check_printing.field_res_company__account_check_printing_margin_right
msgid "Right Margin"
msgstr ""
msgstr "Rechtermarge"
#. module: account_check_printing
#: model:ir.model.fields,help:account_check_printing.field_res_company__account_check_printing_layout
@@ -34,7 +34,7 @@ class AccountRegisterPayments(models.TransientModel):
res = super(AccountRegisterPayments, self)._prepare_payment_vals(invoices)
if self.payment_method_id == self.env.ref('account_check_printing.account_payment_method_check'):
res.update({
'check_manual_sequencing': self.check_manual_sequencing,
'check_amount_in_words': self.currency_id.amount_to_text(res['amount']) if self.multi else self.check_amount_in_words,
})
return res
+4 -4
View File
@@ -3,14 +3,14 @@
# * account_invoicing
#
# Translators:
# Dimko Pythonic <d.v.selitsky@gmail.com>, 2017
# Dmitry sky <d.v.selitsky@gmail.com>, 2017
# Aidos Kakimzhanov <aidos.kakimzhan@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.saas~18\n"
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-09-20 09:53+0000\n"
"PO-Revision-Date: 2017-09-20 09:53+0000\n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: Aidos Kakimzhanov <aidos.kakimzhan@gmail.com>, 2017\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
+3 -2
View File
@@ -11,13 +11,14 @@
# 老窦 北京 <2662059195@qq.com>, 2018
# liAnGjiA <liangjia@qq.com>, 2018
# e2f <projects@e2f.com>, 2018
# John Lin <linyinhuan@139.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: e2f <projects@e2f.com>, 2018\n"
"Last-Translator: John Lin <linyinhuan@139.com>, 2018\n"
"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -168,7 +169,7 @@ msgstr "状态"
msgid ""
"The invoice was not confirmed despite response from the acquirer (%s): "
"invoice amount is %r but acquirer replied with %r."
msgstr ""
msgstr "该发票未被确认,尽管对方(%s)回复:发票金额 %r但对方回复%r。"
#. module: account_payment
#: model:ir.ui.view,arch_db:account_payment.portal_invoice_error
+2 -2
View File
@@ -273,13 +273,13 @@ msgstr "Laatst bijgewerkt op"
#: code:addons/account_voucher/models/account_voucher.py:101
#, python-format
msgid "Missing Company"
msgstr ""
msgstr "Bedrijf ontbreekt"
#. module: account_voucher
#: code:addons/account_voucher/models/account_voucher.py:103
#, python-format
msgid "Missing Currency"
msgstr ""
msgstr "Valuta ontbreekt"
#. module: account_voucher
#: model:ir.model.fields,field_description:account_voucher.field_account_voucher__narration
+3 -3
View File
@@ -344,12 +344,12 @@ msgstr "Naam"
#. module: analytic
#: model:ir.actions.act_window,help:analytic.account_analytic_line_action_entries
msgid "No activity yet"
msgstr ""
msgstr "Nog geen activiteit"
#. module: analytic
#: model:ir.actions.act_window,help:analytic.account_analytic_line_action
msgid "No activity yet on this account"
msgstr ""
msgstr "Nog geen activiteit voor deze kostenplaats"
#. module: analytic
#: model:ir.model.fields,field_description:analytic.field_account_analytic_group__parent_id
@@ -359,7 +359,7 @@ msgstr "Bovenliggend"
#. module: analytic
#: model:ir.model.fields,field_description:analytic.field_account_analytic_distribution__tag_id
msgid "Parent tag"
msgstr ""
msgstr "Bovenliggend label"
#. module: analytic
#: model:ir.model.fields,field_description:analytic.field_account_analytic_line__partner_id
+1 -1
View File
@@ -291,7 +291,7 @@ msgstr "Query"
#. module: anonymization
#: model:ir.model.fields,field_description:anonymization.field_ir_model_fields_anonymization_migration_fix__query_type
msgid "Query Type"
msgstr ""
msgstr "Query soort"
#. module: anonymization
#: model:ir.ui.view,arch_db:anonymization.view_ir_model_fields_anonymize_wizard_form
@@ -53,7 +53,7 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, {
navigator.userAgent.match(/iPod/i) ||
navigator.userAgent.match(/BlackBerry/i) ||
navigator.userAgent.match(/Windows Phone/i);
this.isChromeMobile = isMobile && window.chrome;
this.isChromeMobile = isMobile && navigator.userAgent.match(/Chrome/i);
// Creates an input who will receive the barcode scanner value.
if (this.isChromeMobile) {
@@ -61,7 +61,9 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, {
name: 'barcode',
type: 'text',
css: {
'position': 'absolute',
'position': 'fixed',
'top': '50%',
'transform': 'translateY(-50%)',
'opacity': 0,
},
});
@@ -12,6 +12,9 @@ _logger = logging.getLogger(__name__)
try:
import stdnum.eu.vat as stdnum_vat
if not hasattr(stdnum_vat, "country_codes"):
# stdnum version >= 1.9
stdnum_vat.country_codes = stdnum_vat._country_codes
except ImportError:
_logger.warning('Python `stdnum` library not found, unable to call VIES service to detect address based on VAT number.')
stdnum_vat = None
@@ -29,6 +32,11 @@ class ResPartner(models.Model):
cp = lines.pop()
city = lines.pop()
return (cp, city)
elif country == 'SE':
result = re.match('([0-9]{3}\s?[0-9]{2})\s?([A-Z]+)', lines[-1])
if result:
lines.pop()
return (result.group(1), result.group(2))
else:
result = re.match('((?:L-|AT-)?[0-9\-]+[A-Z]{,2}) (.+)', lines[-1])
if result:
@@ -11,7 +11,7 @@
<field name="arch" type="xml">
<xpath expr="//field[@name='vat']" position="replace" />
<field name="partner_id" position="after">
<field name="vat" />
<field name="vat" string="VAT"/>
</field>
</field>
</record>
+1 -1
View File
@@ -2492,7 +2492,7 @@ msgstr "Cet objectif n'existe pas."
#: model:ir.ui.view,arch_db:crm.crm_case_form_view_leads
#: model:ir.ui.view,arch_db:crm.crm_case_form_view_oppor
msgid "Title"
msgstr "Civilité"
msgstr "Titre"
#. module: crm
#: model:ir.ui.view,arch_db:crm.view_crm_case_opportunities_filter
+2 -2
View File
@@ -500,7 +500,7 @@ msgstr ""
#: code:addons/crm/static/src/js/tour.js:54
#, python-format
msgid "Click on the opportunity to zoom in."
msgstr ""
msgstr "Klik op de prospect om in te zoomen."
#. module: crm
#: model:ir.model.fields,field_description:crm.field_crm_opportunity_report__date_closed
@@ -1115,7 +1115,7 @@ msgstr "Hoog"
#. module: crm
#: model:ir.model.fields,help:crm.field_crm_team__dashboard_graph_group_pipeline
msgid "How this channel's dashboard graph will group the results."
msgstr "Hoe dit kanaal zijn dashboard grafieken het resultaat groeperen."
msgstr "Hoe dit kanaal zijn dashboard grafieken zal groeperen."
#. module: crm
#: model:ir.model.fields,field_description:crm.field_crm_activity_report__id
+1 -1
View File
@@ -482,7 +482,7 @@ msgstr "Lengte moet positief zijn"
#. module: delivery
#: model:ir.model.fields,help:delivery.field_delivery_carrier__debug_logging
msgid "Log requests in order to ease debugging"
msgstr "Log aanvragen in volgorde om makkelijker fouten te kunnen traceren"
msgstr "Log aanvragen om gemakkelijker fouten te kunnen traceren"
#. module: delivery
#: model:ir.ui.view,arch_db:delivery.view_picking_withcarrier_out_form
+1 -1
View File
@@ -250,7 +250,7 @@ msgstr "Teslimat Paketi Seçim Sihirbazı"
#: model:ir.ui.menu,name:delivery.menu_delivery_packagings
#: model:ir.ui.view,arch_db:delivery.product_packaging_delivery_tree
msgid "Delivery Packages"
msgstr ""
msgstr "Teslimat Paketi"
#. module: delivery
#: model:ir.model.fields,field_description:delivery.field_choose_delivery_package__delivery_packaging_id
+4 -3
View File
@@ -11,13 +11,14 @@
# 老窦 北京 <2662059195@qq.com>, 2018
# e2f <projects@e2f.com>, 2018
# e2f_cn c5 <jarvisn@ecinnovations.com>, 2018
# John Lin <linyinhuan@139.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: e2f_cn c5 <jarvisn@ecinnovations.com>, 2018\n"
"Last-Translator: John Lin <linyinhuan@139.com>, 2018\n"
"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -720,7 +721,7 @@ msgstr "发货重量"
#: model:ir.ui.view,arch_db:delivery.report_package_barcode_delivery
#: model:ir.ui.view,arch_db:delivery.report_package_barcode_small_delivery
msgid "Shipping Weight:"
msgstr ""
msgstr "装运重量:"
#. module: delivery
#: model:ir.model.fields,help:delivery.field_product_product__hs_code
@@ -849,7 +850,7 @@ msgstr ""
#: model:ir.ui.view,arch_db:delivery.report_package_barcode_delivery
#: model:ir.ui.view,arch_db:delivery.report_package_barcode_small_delivery
msgid "Weight:"
msgstr ""
msgstr "重量:"
#. module: delivery
#: model:ir.model.fields,field_description:delivery.field_product_packaging__width
+2
View File
@@ -159,6 +159,8 @@ class StockPicking(models.Model):
def send_to_shipper(self):
self.ensure_one()
res = self.carrier_id.send_shipping(self)[0]
if self.carrier_id.free_over and self.sale_id._compute_amount_total_without_delivery() >= self.carrier_id.amount:
res['exact_price'] = 0.0
self.carrier_price = res['exact_price']
self.carrier_tracking_ref = res['tracking_number']
order_currency = self.sale_id.currency_id or self.company_id.currency_id
+4 -1
View File
@@ -30,7 +30,10 @@ class TestDeliveryCost(common.TransactionCase):
self.free_delivery = self.env.ref('delivery.free_delivery_carrier')
# as the tests hereunder assume all the prices in USD, we must ensure
# that the company actually uses USD
self.env.user.company_id.write({'currency_id': self.env.ref('base.USD').id})
self.env.cr.execute(
"UPDATE res_company SET currency_id = %s WHERE id = %s",
[self.env.ref('base.USD').id, self.env.user.company_id.id])
self.pricelist.currency_id = self.env.ref('base.USD').id
def test_00_delivery_cost(self):
# In order to test Carrier Cost
+2 -2
View File
@@ -363,7 +363,7 @@ msgstr ""
#. module: fleet
#: model:ir.actions.act_window,help:fleet.fleet_vehicle_costs_action
msgid "Create a new cost"
msgstr ""
msgstr "Maak een nieuwe kost"
#. module: fleet
#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_fuel_action
@@ -378,7 +378,7 @@ msgstr ""
#. module: fleet
#: model:ir.actions.act_window,help:fleet.fleet_vehicle_model_action
msgid "Create a new model"
msgstr ""
msgstr "Maak een nieuw model"
#. module: fleet
#: model:ir.actions.act_window,help:fleet.fleet_vehicle_odometer_action
+2 -2
View File
@@ -929,7 +929,7 @@ msgstr "Gebruiker aanmaken"
#. module: gamification
#: model:ir.actions.act_window,help:gamification.badge_list_action
msgid "Create a new badge"
msgstr ""
msgstr "Maak een nieuwe badge"
#. module: gamification
#: model:ir.actions.act_window,help:gamification.challenge_list_action
@@ -944,7 +944,7 @@ msgstr "Maak een nieuw doel"
#. module: gamification
#: model:ir.actions.act_window,help:gamification.goal_definition_list_action
msgid "Create a new goal definition"
msgstr ""
msgstr "Maak een nieuwe doeldefinitie aan"
#. module: gamification
#: model:ir.actions.act_window,help:gamification.action_new_simplified_res_users
+1 -1
View File
@@ -259,7 +259,7 @@ class Goal(models.Model):
If the end date is passed (at least +1 day, time not considered) without
the target value being reached, the goal is set as failed."""
goals_by_definition = {}
for goal in self:
for goal in self.with_context(prefetch_fields=False):
goals_by_definition.setdefault(goal.definition_id, []).append(goal)
for definition, goals in goals_by_definition.items():
+7 -6
View File
@@ -4,14 +4,15 @@
#
# Translators:
# Максим Дронь <dronmax@gmail.com>, 2017
# Martin Trigaux <mat@odoo.com>, 2017
# Martin Trigaux, 2017
# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.saas~18\n"
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-09-20 09:53+0000\n"
"PO-Revision-Date: 2017-09-20 09:53+0000\n"
"Last-Translator: Martin Trigaux <mat@odoo.com>, 2017\n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -70,7 +71,7 @@ msgstr "Время для подготовки инициативы"
#. module: gamification_sale_crm
#: model:gamification.goal.definition,name:gamification_sale_crm.definition_crm_tot_customer_refunds
msgid "Total Customer Credit Notes"
msgstr ""
msgstr "Всего кредит-нот клиента"
#. module: gamification_sale_crm
#: model:gamification.challenge.line,name:gamification_sale_crm.line_crm_sale1
+22 -12
View File
@@ -14,13 +14,14 @@
# Denis Trepalin <zekarious@gmail.com>, 2017
# Masha Koc <mariya.kos.ua@gmail.com>, 2017
# Dmitry sky <d.v.selitsky@gmail.com>, 2017
# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: Dmitry sky <d.v.selitsky@gmail.com>, 2017\n"
"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -130,7 +131,7 @@ msgstr "Компания"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_res_config_settings__resource_calendar_id
msgid "Company Working Hours"
msgstr ""
msgstr "Рабочие часы компании"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_department__complete_name
@@ -287,6 +288,7 @@ msgid ""
"Enter here the private address of the employee, not the one linked to your "
"company."
msgstr ""
"Сюда следует вводить личный адрес сотрудника, не связанный с компанией."
#. module: hr
#: code:addons/hr/models/hr.py:310
@@ -556,6 +558,9 @@ msgid ""
" related to employees by departments: expenses, timesheets,\n"
" leaves, recruitments, etc."
msgstr ""
"В Odoo структура отдела используется, чтобы управлять всеми документами,\n"
" относящимися к сотрудникам отдела: расходыми, табелями,\n"
" отгулами, рекрутиногом и т.п."
#. module: hr
#: model:res.groups,name:hr.group_hr_user
@@ -595,12 +600,12 @@ msgstr "Должность"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__address_home_id
msgid "Private Address"
msgstr ""
msgstr "Личный адрес"
#. module: hr
#: model:ir.ui.view,arch_db:hr.view_employee_form
msgid "Private Information"
msgstr ""
msgstr "Личная информация"
#. module: hr
#: model:ir.actions.act_window,help:hr.action_hr_job
@@ -658,6 +663,8 @@ msgid ""
"Set default calendar used to compute time allocation for leaves, timesheets,"
" ..."
msgstr ""
"Выберите календарь по умолчанию, который используется для распределения "
"рабочего времени табелях, отуглах и т.д."
#. module: hr
#: model:ir.model.fields,help:hr.field_hr_job__state
@@ -677,17 +684,17 @@ msgstr "Настройки"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_res_config_settings__module_hr_org_chart
msgid "Show Organizational Chart"
msgstr ""
msgstr "Показать организационную структуру"
#. module: hr
#: model:ir.ui.view,arch_db:hr.res_config_settings_view_form
msgid "Show organizational chart on employee form"
msgstr ""
msgstr "Показать организационную структуру в карточке сотрудника"
#. module: hr
#: model:ir.ui.view,arch_db:hr.res_config_settings_view_form
msgid "Show organizational chart on employee form."
msgstr ""
msgstr "Показать организационную структуру в карточке сотрудника."
#. module: hr
#: selection:hr.employee,marital:0
@@ -760,7 +767,7 @@ msgstr "Теги"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__is_address_home_a_company
msgid "The employee adress has a company linked"
msgstr ""
msgstr "Адрес сотрудника привязан к адресу компании"
#. module: hr
#: sql_constraint:hr.job:0
@@ -809,6 +816,9 @@ msgid ""
" This private address is used in the expense report reimbursement document.\n"
" It should be different from the work address."
msgstr ""
"Введите личный(домашний) адрес сотрудника.\n"
" Они используется в документах по возмещениям расходов и пр.\n"
" Должен отличаться от рабочего адреса."
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__user_id
@@ -823,7 +833,7 @@ msgstr "Пользователи"
#. module: hr
#: model:ir.ui.view,arch_db:hr.hr_job_view_kanban
msgid "Vacancies :"
msgstr ""
msgstr "Вакансии :"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__visa_expire
@@ -855,7 +865,7 @@ msgstr ""
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__address_id
msgid "Work Address"
msgstr ""
msgstr "Рабочий адрес"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__work_email
@@ -865,7 +875,7 @@ msgstr "Рабочая эл. почта"
#. module: hr
#: model:ir.ui.view,arch_db:hr.view_employee_form
msgid "Work Information"
msgstr ""
msgstr "Информация по работе"
#. module: hr
#: model:ir.model.fields,field_description:hr.field_hr_employee__work_location
@@ -880,7 +890,7 @@ msgstr "Рабочий сотовый телефон"
#. module: hr
#: model:ir.ui.view,arch_db:hr.res_config_settings_view_form
msgid "Work Organization"
msgstr ""
msgstr "Организация работы"
#. module: hr
#: model:ir.ui.view,arch_db:hr.view_employee_form
+11 -10
View File
@@ -14,13 +14,14 @@
# Sergey <naviserg1@gmail.com>, 2017
# Gennady Marchenko <gennadym@gmail.com>, 2017
# Nikita Moshkalov <CLTanuki@gmail.com>, 2017
# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: Nikita Moshkalov <CLTanuki@gmail.com>, 2017\n"
"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -187,7 +188,7 @@ msgstr "Отображаемое Имя"
#. module: hr_contract
#: model:ir.ui.view,arch_db:hr_contract.hr_contract_view_kanban
msgid "Edit Contract"
msgstr ""
msgstr "Редактировать договор"
#. module: hr_contract
#: model:ir.model,name:hr_contract.model_hr_employee
@@ -204,12 +205,12 @@ msgstr "Договор с сотрудником"
#. module: hr_contract
#: model:ir.model.fields,help:hr_contract.field_hr_contract__wage
msgid "Employee's monthly gross wage."
msgstr ""
msgstr "Месячная зарплата сотрудника брутто."
#. module: hr_contract
#: model:ir.model.fields,help:hr_contract.field_hr_contract__resource_calendar_id
msgid "Employee's working schedule."
msgstr ""
msgstr "График работы сотрудника"
#. module: hr_contract
#: model:ir.model.fields,field_description:hr_contract.field_hr_contract__date_end
@@ -219,17 +220,17 @@ msgstr "Дата окончания"
#. module: hr_contract
#: model:ir.model.fields,help:hr_contract.field_hr_contract__date_end
msgid "End date of the contract (if it's a fixed-term contract)."
msgstr ""
msgstr "Дата окончания контракта(контракт с фиксированным сроком)"
#. module: hr_contract
#: model:ir.model.fields,help:hr_contract.field_hr_contract__trial_date_end
msgid "End date of the trial period (if there is one)."
msgstr ""
msgstr "Дата окончания испытательного срока(если таковой имеется)"
#. module: hr_contract
#: model:ir.model.fields,field_description:hr_contract.field_hr_contract__trial_date_end
msgid "End of Trial Period"
msgstr ""
msgstr "Конец испытательного срока"
#. module: hr_contract
#: selection:hr.contract,state:0
@@ -326,7 +327,7 @@ msgstr "Дата медицинского осмотра"
#. module: hr_contract
#: model:ir.ui.view,arch_db:hr_contract.hr_contract_view_form
msgid "Monthly Advantages in Cash"
msgstr ""
msgstr "Месячные поощрения в деньгах"
#. module: hr_contract
#: selection:hr.contract,state:0
@@ -357,7 +358,7 @@ msgstr "Выполняется"
#. module: hr_contract
#: model:ir.ui.view,arch_db:hr_contract.hr_contract_view_form
msgid "Salary Information"
msgstr ""
msgstr "Информация по заработной плате"
#. module: hr_contract
#: model:ir.ui.view,arch_db:hr_contract.hr_contract_view_search
@@ -383,7 +384,7 @@ msgstr "Дата начала"
#. module: hr_contract
#: model:ir.model.fields,help:hr_contract.field_hr_contract__date_start
msgid "Start date of the contract."
msgstr ""
msgstr "Дата начала договора"
#. module: hr_contract
#: model:ir.ui.view,arch_db:hr_contract.hr_contract_view_search
+1 -1
View File
@@ -1187,7 +1187,7 @@ msgstr "A napló amit a kiadás elvégzése után használ."
#: code:addons/hr_expense/wizard/hr_expense_sheet_register_payment.py:35
#, python-format
msgid "The payment amount must be strictly positive."
msgstr ""
msgstr "A fizetés összege csak pozitív lehet"
#. module: hr_expense
#: model:ir.model.fields,help:hr_expense.field_hr_expense_sheet__bank_journal_id
+3 -3
View File
@@ -275,12 +275,12 @@ msgstr "Goedgekeurde declaraties"
#: model:ir.actions.act_window,help:hr_expense.hr_expense_actions_all
#: model:ir.actions.act_window,help:hr_expense.hr_expense_actions_my_unsubmitted
msgid "Create a new expense"
msgstr ""
msgstr "Maak een nieuwe uitgave"
#. module: hr_expense
#: model:ir.actions.act_window,help:hr_expense.hr_expense_product
msgid "Create a new expense category"
msgstr ""
msgstr "Maak een nieuwe uitgave categorie"
#. module: hr_expense
#: model:ir.actions.act_window,help:hr_expense.action_hr_expense_sheet_all_all
@@ -288,7 +288,7 @@ msgstr ""
#: model:ir.actions.act_window,help:hr_expense.action_hr_expense_sheet_all_to_post
#: model:ir.actions.act_window,help:hr_expense.action_hr_expense_sheet_my_all
msgid "Create a new expense report"
msgstr ""
msgstr "Maak een nieuw uitgave rapport"
#. module: hr_expense
#: model:ir.model.fields,field_description:hr_expense.field_hr_expense__create_uid
+3
View File
@@ -418,6 +418,7 @@ class HrExpense(models.Model):
expense_description = expense_description.replace(product_code.group(), '')
products = self.env['product.product'].search([('default_code', 'ilike', product_code.group(1))]) or default_product
product = products.filtered(lambda p: p.default_code == product_code.group(1)) or products[0]
account = product.product_tmpl_id._get_product_accounts()['expense']
pattern = '[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?'
# Match the last occurence of a float in the string
@@ -444,6 +445,8 @@ class HrExpense(models.Model):
'unit_amount': price,
'company_id': employee.company_id.id,
})
if account:
custom_values['account_id'] = account.id
return super(HrExpense, self).message_new(msg_dict, custom_values)
+3 -2
View File
@@ -9,13 +9,14 @@
# Collex100, 2017
# Sergey Vilizhanin <sv@grimmette.ru>, 2017
# Максим Дронь <dronmax@gmail.com>, 2017
# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: Максим Дронь <dronmax@gmail.com>, 2017\n"
"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -160,7 +161,7 @@ msgstr "Награжденые"
#. module: hr_gamification
#: model:ir.model.fields,field_description:hr_gamification.field_gamification_badge__granted_employees_count
msgid "Granted Employees Count"
msgstr ""
msgstr "Количество сотрудников с наградами"
#. module: hr_gamification
#: model:ir.model.fields,field_description:hr_gamification.field_hr_employee__has_badges
+4 -4
View File
@@ -262,12 +262,12 @@ msgstr "Verloftoewijzing goedkeuren"
#. module: hr_holidays
#: model:mail.message.subtype,name:hr_holidays.mt_department_leave_allocation_confirmed
msgid "Allocations Confirmed"
msgstr ""
msgstr "Bevestigde verloven"
#. module: hr_holidays
#: model:mail.message.subtype,name:hr_holidays.mt_department_leave_allocation_first_validated
msgid "Allocations First Approval"
msgstr ""
msgstr "Verloven eerste goedkeuring"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_open_department_leave_allocation_approve
@@ -319,7 +319,7 @@ msgstr "Goedgekeurd"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.view_hr_leave_allocation_filter
msgid "Approved Allocations"
msgstr ""
msgstr "Goedgekeurde verloven"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter
@@ -329,7 +329,7 @@ msgstr "Goedgekeurd verlof"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report
msgid "Approved Requests"
msgstr ""
msgstr "Goedgekeurde aanvragen"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.hr_holidays_leaves_assign_tree_view
+24 -10
View File
@@ -16,13 +16,14 @@
# Алексей Билькевич (belskiy) <mmmbrsk@gmail.com>, 2017
# Viktor Pogrebniak <vp@aifil.ru>, 2017
# Max Belyanin <maxbelyanin@gmail.com>, 2017
# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: Max Belyanin <maxbelyanin@gmail.com>, 2017\n"
"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -65,7 +66,7 @@ msgstr "%g оставаясь вне %g"
#: code:addons/hr_holidays/models/hr_leave.py:205
#, python-format
msgid "%s : %.2f day(s)"
msgstr ""
msgstr "%s : %.2f дней"
#. module: hr_holidays
#: code:addons/hr_holidays/models/hr_leave.py:207
@@ -105,12 +106,12 @@ msgstr "&lt;th class=\"text-center\" colspan="
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.hr_leave_report_kanban
msgid "<small class=\"text-muted\">from</small>"
msgstr ""
msgstr "<small class=\"text-muted\">from</small>"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.hr_leave_report_kanban
msgid "<small class=\"text-muted\">to</small>"
msgstr ""
msgstr "<small class=\"text-muted\">to</small>"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.report_holidayssummary
@@ -260,7 +261,7 @@ msgstr "Распределение для %s"
#: code:addons/hr_holidays/models/hr_leave_allocation.py:114
#, python-format
msgid "Allocation of %s : %.2f day(s) To %s"
msgstr ""
msgstr "Планирование для %s : %.2f день(дней) до %s"
#. module: hr_holidays
#: model:ir.model.fields,field_description:hr_holidays.field_hr_department__allocation_to_approve_count
@@ -639,7 +640,7 @@ msgstr "Первое утверждение"
#: code:addons/hr_holidays/report/holidays_summary_report.py:112
#, python-format
msgid "Form content is missing, this report cannot be printed."
msgstr ""
msgstr "Не найдены данные в форме, отчет не сформирован"
#. module: hr_holidays
#: model:ir.model.fields,field_description:hr_holidays.field_hr_holidays_summary_dept__date_from
@@ -929,7 +930,7 @@ msgstr "Обзор отгулов"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.hr_holiday_status_view_kanban
msgid "Leaves Taken:"
msgstr ""
msgstr "Использованные отпуска:"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_summary_dept
@@ -963,7 +964,7 @@ msgstr "Отпуска."
#. module: hr_holidays
#: model:hr.leave.type,name:hr_holidays.holiday_status_cl
msgid "Legal Leaves 2018"
msgstr ""
msgstr "Обязательные отпуска 2018"
#. module: hr_holidays
#: selection:hr.leave.type,color_name:0
@@ -1027,7 +1028,7 @@ msgstr "Менеджеры"
#. module: hr_holidays
#: model:ir.ui.view,arch_db:hr_holidays.hr_holiday_status_view_kanban
msgid "Max Leaves:"
msgstr ""
msgstr "Макс. отпуск:"
#. module: hr_holidays
#: model:ir.model.fields,field_description:hr_holidays.field_hr_leave_type__max_leaves
@@ -1124,6 +1125,7 @@ msgstr "Количество отпуска"
msgid ""
"Number of days of the leave request according to your working schedule."
msgstr ""
"Количество рабочих дней по календарю, приходящихся на запрашиваемый период."
#. module: hr_holidays
#: model:res.groups,name:hr_holidays.group_hr_holidays_user
@@ -1148,6 +1150,10 @@ msgid ""
" type (recuperation, legal leaves, sickness) and the exact\n"
" number of open days related to your leave."
msgstr ""
"После того, как вы запишите запрос на отпуск, он будет отправлен\n"
" к менеджеру на утверждение. Убедитесь, что вы отсылаете запрос на отпуск\n"
" на верное количество дней, а также правильного вида(по болезни, плановый \n"
"\t\tотпуск, компенсация и т.п.)."
#. module: hr_holidays
#: code:addons/hr_holidays/models/hr_leave.py:366
@@ -1415,6 +1421,10 @@ msgid ""
"The status is 'Refused', when leave request is refused by manager.\n"
"The status is 'Approved', when leave request is approved by manager."
msgstr ""
"Статус 'Запросить', когда запрос создан.\n"
"Статус 'Утвердить', когда запрос подтвержден пользователем.\n"
"Статус 'Отклонен', когда запрос отклонен менеджером.\n"
"Статус 'Утверждён', когда запрос одобрен менеджером."
#. module: hr_holidays
#: model:ir.model.fields,help:hr_holidays.field_hr_leave__first_approver_id
@@ -1447,12 +1457,16 @@ msgstr ""
msgid ""
"This value is given by the sum of all leaves requests with a negative value."
msgstr ""
"Это значение считается как сумма всех запросов на отпусков с отрицательным "
"значением."
#. module: hr_holidays
#: model:ir.model.fields,help:hr_holidays.field_hr_leave_type__max_leaves
msgid ""
"This value is given by the sum of all leaves requests with a positive value."
msgstr ""
"Это значение считается как сумма всех запросов на отпусков с положительным "
"значением."
#. module: hr_holidays
#: selection:hr.leave,state:0 selection:hr.leave.allocation,state:0
@@ -1536,7 +1550,7 @@ msgstr "Проверить"
#: model:ir.ui.view,arch_db:hr_holidays.view_hr_holidays_filter_report
#: model:ir.ui.view,arch_db:hr_holidays.view_hr_leave_allocation_filter
msgid "Validator"
msgstr ""
msgstr "Утверждающий"
#. module: hr_holidays
#: selection:hr.leave.type,color_name:0
+7 -7
View File
@@ -305,7 +305,7 @@ msgstr "Дочернее определение"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.res_config_settings_view_form
msgid "Choose a Payroll Localization"
msgstr ""
msgstr "Выберите локализацию расчетного листа"
#. module: hr_payroll
#: selection:hr.payslip.run,state:0
@@ -331,7 +331,7 @@ msgstr "Код"
#: model:ir.ui.view,arch_db:hr_payroll.hr_payroll_structure_view_kanban
#: model:ir.ui.view,arch_db:hr_payroll.hr_salary_rule_view_kanban
msgid "Code:"
msgstr ""
msgstr "Код:"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.view_hr_payslip_filter
@@ -656,7 +656,7 @@ msgstr ""
#: code:addons/hr_payroll/report/report_contribution_register.py:34
#, python-format
msgid "Form content is missing, this report cannot be printed."
msgstr ""
msgstr "Не найдены данные в форме, отчет не сформирован"
#. module: hr_payroll
#: model:ir.model.fields,field_description:hr_payroll.field_res_config_settings__module_l10n_fr_hr_payroll
@@ -1021,12 +1021,12 @@ msgstr "Платёжная ведомость"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.res_config_settings_view_form
msgid "Payroll Entries"
msgstr ""
msgstr "Строки платежной ведомости"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.res_config_settings_view_form
msgid "Payroll Rules"
msgstr ""
msgstr "Правила платежной ведомости"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.view_hr_payroll_structure_filter
@@ -1036,7 +1036,7 @@ msgstr "Структуры платежной ведомости"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.res_config_settings_view_form
msgid "Payroll rules that apply to your country"
msgstr ""
msgstr "Правила составления платежной ведомости в вашей стране"
#. module: hr_payroll
#: model:ir.actions.report,name:hr_payroll.action_report_payslip
@@ -1157,7 +1157,7 @@ msgstr "Период"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.res_config_settings_view_form
msgid "Post payroll slips in accounting"
msgstr ""
msgstr "Отправить расчетники в бухгалтерию"
#. module: hr_payroll
#: model:ir.ui.view,arch_db:hr_payroll.view_payslip_lines_contribution_register
+1 -1
View File
@@ -233,7 +233,7 @@ msgstr "Project -"
#: model:ir.actions.act_window,help:hr_timesheet.timesheet_action_report_by_project
#: model:ir.actions.act_window,help:hr_timesheet.timesheet_action_report_by_task
msgid "Record a new activity"
msgstr ""
msgstr "Registreer een nieuwe activiteit"
#. module: hr_timesheet
#: model:ir.model.fields,field_description:hr_timesheet.field_report_project_task_user__remaining_hours
+14 -9
View File
@@ -12,13 +12,14 @@
# Masha Koc <mariya.kos.ua@gmail.com>, 2017
# Sergey Vilizhanin <sv@grimmette.ru>, 2017
# Max Belyanin <maxbelyanin@gmail.com>, 2017
# sergeiruzkiicode <sergei.ruzki@icode.by>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: Max Belyanin <maxbelyanin@gmail.com>, 2017\n"
"Last-Translator: sergeiruzkiicode <sergei.ruzki@icode.by>, 2018\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -34,7 +35,7 @@ msgstr "<span class=\"o_label\">Табели</span>"
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.hr_employee_view_form_inherit_timesheet
msgid "<span class=\"o_stat_text\">Timesheets</span>"
msgstr ""
msgstr "Табели"
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.view_task_form2_inherited
@@ -91,7 +92,7 @@ msgstr "Apple App магазин"
#. module: hr_timesheet
#: model:ir.model.fields,field_description:hr_timesheet.field_res_config_settings__module_project_timesheet_synchro
msgid "Awesome Timesheet"
msgstr ""
msgstr "Шикарные табели"
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.res_config_settings_view_form
@@ -114,7 +115,7 @@ msgstr "По Проекту"
#: model:ir.actions.act_window,name:hr_timesheet.timesheet_action_report_by_task
#: model:ir.ui.menu,name:hr_timesheet.timesheet_menu_report_timesheet_by_task
msgid "By Task"
msgstr ""
msgstr "По задаче"
#. module: hr_timesheet
#: model:ir.model.fields,help:hr_timesheet.field_project_task__total_hours_spent
@@ -269,11 +270,15 @@ msgid ""
"Timesheets app and invoice them based on a fixed price (ordered quantity) or"
" on the time spent (delivered quantity)"
msgstr ""
"Продавайте услуги(например, проекты, обслуживание), записывайте затраченное "
"время в приложение Табели и выставляйте счета на основании фиксированных "
"цен(заказанного количества) или на основании затраченного "
"времени(поставленного количества)"
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.res_config_settings_view_form
msgid "Sell services and invoice time spent"
msgstr ""
msgstr "Продавайте услуги и выставляйте счета за время"
#. module: hr_timesheet
#: model:ir.actions.act_window,name:hr_timesheet.hr_timesheet_config_settings_action
@@ -299,7 +304,7 @@ msgstr ""
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.res_config_settings_view_form
msgid "Synchronize time spent with web/mobile app"
msgstr ""
msgstr "Синхронизируйте затраты времени с веб/мобильным приложением"
#. module: hr_timesheet
#: model:ir.model,name:hr_timesheet.model_project_task
@@ -328,7 +333,7 @@ msgstr "Эта неделя"
#: code:addons/hr_timesheet/models/project.py:63
#, python-format
msgid "This task must have a project since they are linked to timesheets."
msgstr ""
msgstr "У задачи должен быть проект, раз она связана с табелями."
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.report_timesheet
@@ -338,12 +343,12 @@ msgstr "Время"
#. module: hr_timesheet
#: model:ir.ui.view,arch_db:hr_timesheet.hr_timesheet_line_tree
msgid "Time (Hours)"
msgstr ""
msgstr "Время(часы)"
#. module: hr_timesheet
#: model:ir.model.fields,field_description:hr_timesheet.field_res_config_settings__module_sale_timesheet
msgid "Time Billing"
msgstr ""
msgstr "Биллинг времени"
#. module: hr_timesheet
#: model:ir.ui.menu,name:hr_timesheet.menu_hr_time_tracking
+3 -2
View File
@@ -5,13 +5,14 @@
# Translators:
# Murat Kaplan <muratk@projetgrup.com>, 2017
# Umur Akın <umura@projetgrup.com>, 2018
# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -104,7 +105,7 @@ msgstr "Yetersiz Bakiye"
#: code:addons/iap/static/src/xml/iap_templates.xml:14
#, python-format
msgid "Insufficient credit to perform this service."
msgstr ""
msgstr "Bu hizmeti vermek için yetersiz kredi."
#. module: iap
#: model:ir.model.fields,field_description:iap.field_iap_account____last_update
File diff suppressed because it is too large Load Diff
+7 -7
View File
@@ -5,37 +5,37 @@
Update states
-->
<record id="state_SJ" model="res.country.state">
<field name="code">SJ</field>
<field name="code">CR-SJ</field>
<field name="name">San Jos&#233;</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_A" model="res.country.state">
<field name="code">A</field>
<field name="code">CR-A</field>
<field name="name">Alajuela</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_H" model="res.country.state">
<field name="code">H</field>
<field name="code">CR-H</field>
<field name="name">Heredia</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_C" model="res.country.state">
<field name="code">C</field>
<field name="code">CR-C</field>
<field name="name">Cartago</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_P" model="res.country.state">
<field name="code">P</field>
<field name="code">CR-P</field>
<field name="name">Puntarenas</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_G" model="res.country.state">
<field name="code">G</field>
<field name="code">CR-G</field>
<field name="name">Guanacaste</field>
<field name="country_id" ref="base.cr"/>
</record>
<record id="state_L" model="res.country.state">
<field name="code">L</field>
<field name="code">CR-L</field>
<field name="name">Lim&#243;n</field>
<field name="country_id" ref="base.cr"/>
</record>
+43
View File
@@ -13,6 +13,49 @@ class WizardMultiChartsAccounts(models.TransientModel):
return [
{'acc_name': _('Cash'), 'account_type': 'cash'},
{'acc_name': _('Caja Chica'), 'account_type': 'cash'},
{'acc_name': _('Cheques Clientes'), 'account_type': 'cash'},
{'acc_name': _('Bank'), 'account_type': 'bank'}
]
return super(WizardMultiChartsAccounts, self)._get_default_bank_account_ids()
class AccountChartTemplate(models.Model):
_inherit = "account.chart.template"
@api.multi
def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
"""Create fiscal journals for buys"""
res = super(AccountChartTemplate, self)._prepare_all_journals(
acc_template_ref, company, journals_dict=journals_dict)
if not self == self.env.ref('l10n_do.do_chart_template'):
return res
for journal in res:
if journal['code'] == 'FACT':
journal['name'] = _('Compras Fiscales')
res += [{
'type': 'purchase',
'name': _('Compras Informales'),
'code': 'CINF',
'company_id': company.id,
'show_on_dashboard': True
}, {
'type': 'purchase',
'name': _('Gastos Menores'),
'code': 'GASM',
'company_id': company.id,
'show_on_dashboard': True
}, {
'type': 'purchase',
'name': _('Compras al Exterior'),
'code': 'CEXT',
'company_id': company.id,
'show_on_dashboard': True
}, {
'type': 'purchase',
'name': _('Gastos No Deducibles'),
'code': 'GASTO',
'company_id': company.id,
'show_on_dashboard': True
}]
return res
@@ -3,6 +3,7 @@
<field name="name">Data Inalterability Check</field>
<field name="model_id" ref="account.model_account_move"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = env['account.move']._check_hash_integrity(env.user.company_id.id)
</field>
@@ -12,6 +13,7 @@
<field name="name">Get the certification now!</field>
<field name="type">ir.actions.server</field>
<field name="model_id" ref="account.model_res_company"/>
<field name="state">code</field>
<field name="code">
db_uuid = env['ir.config_parameter'].sudo().get_param('database.uuid')
action = {"type": "ir.actions.act_url",
@@ -8,6 +8,7 @@
<field name="name">Pos Orders Inalterability Check</field>
<field name="model_id" ref="point_of_sale.model_pos_order"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = env['pos.order']._check_hash_integrity(env.user.company_id.id)
</field>
@@ -32,14 +32,14 @@ class AccountChartTemplate(models.Model):
for element in in_ids.with_context(lang=None):
if value[element.id]:
#copy Translation from Source to Destination object
xlat_obj.create({
'name': out_ids._name + ',' + in_field,
'type': 'model',
'res_id': out_ids[counter].id,
'lang': lang,
'src': element[in_field],
'value': value[element.id],
})
xlat_obj._set_ids(
out_ids._name + ',' + in_field,
'model',
lang,
out_ids[counter].ids,
value[element.id],
element[in_field]
)
else:
_logger.info('Language: %s. Translation from template: there is no translation available for %s!' % (lang, element[in_field]))
counter += 1
-6
View File
@@ -52,12 +52,6 @@ class IrModel(models.Model):
model_class._inherit = parents + ['mail.thread']
return model_class
def unlink(self):
# Delete followers for models that will be unlinked.
query = "DELETE FROM mail_followers WHERE res_model IN %s"
self.env.cr.execute(query, [tuple(self.mapped('model'))])
return super(IrModel, self).unlink()
class IrModelField(models.Model):
_inherit = 'ir.model.fields'
+3 -2
View File
@@ -89,7 +89,7 @@ class MailActivity(models.Model):
summary = fields.Char('Summary')
note = fields.Html('Note')
feedback = fields.Html('Feedback')
date_deadline = fields.Date('Due Date', index=True, required=True, default=fields.Date.today)
date_deadline = fields.Date('Due Date', index=True, required=True, default=fields.Date.context_today)
automated = fields.Boolean(
'Automated activity', readonly=True,
help='Indicates this activity has been created automatically and not by any user.')
@@ -154,7 +154,8 @@ class MailActivity(models.Model):
@api.onchange('recommended_activity_type_id')
def _onchange_recommended_activity_type_id(self):
self.activity_type_id = self.recommended_activity_type_id
if self.recommended_activity_type_id:
self.activity_type_id = self.recommended_activity_type_id
@api.multi
def _check_access(self, operation):
+8 -5
View File
@@ -75,16 +75,19 @@ class Users(models.Model):
def activity_user_count(self):
query = """SELECT m.id, count(*), act.res_model as model,
CASE
WHEN now()::date - act.date_deadline::date = 0 Then 'today'
WHEN now()::date - act.date_deadline::date > 0 Then 'overdue'
WHEN now()::date - act.date_deadline::date < 0 Then 'planned'
WHEN %(today)s::date - act.date_deadline::date = 0 Then 'today'
WHEN %(today)s::date - act.date_deadline::date > 0 Then 'overdue'
WHEN %(today)s::date - act.date_deadline::date < 0 Then 'planned'
END AS states
FROM mail_activity AS act
JOIN ir_model AS m ON act.res_model_id = m.id
WHERE user_id = %s
WHERE user_id = %(user_id)s
GROUP BY m.id, states, act.res_model;
"""
self.env.cr.execute(query, [self.env.uid])
self.env.cr.execute(query, {
'today': fields.Date.context_today(self),
'user_id': self.env.uid,
})
activity_data = self.env.cr.dictfetchall()
model_ids = [a['id'] for a in activity_data]
model_names = {n[0]: n[1] for n in self.env['ir.model'].browse(model_ids).name_get()}
+5 -1
View File
@@ -16,7 +16,8 @@ var HEIGHT_FOLDED = '34px';
return Widget.extend({
template: "mail.ChatWindow",
custom_events: {
escape_pressed: '_onEscapePressed'
escape_pressed: '_onEscapePressed',
document_viewer_closed: '_onDocumentViewerClose',
},
events: {
'click .o_chat_composer': '_onComposerClick',
@@ -182,6 +183,9 @@ return Widget.extend({
}
this.focus_input();
},
_onDocumentViewerClose: function (ev) {
this.focus_input();
},
/**
* @private
*/
+6
View File
@@ -565,6 +565,9 @@ var BasicComposer = Widget.extend({
on_click_add_attachment: function () {
this.$('input.o_input_file').click();
this.$input.focus();
// set ignoreEscape to avoid escape_pressed event when file selector dialog is opened
// when user press escape to cancel file selector dialog then escape_pressed event should not be trigerred
this.ignoreEscape = true;
},
setState: function (state) {
@@ -635,6 +638,8 @@ var BasicComposer = Widget.extend({
if (this.mention_manager.is_open()) {
event.stopPropagation();
this.mention_manager.reset_suggestions();
} else if (this.ignoreEscape) {
this.ignoreEscape = false;
} else {
this.trigger_up("escape_pressed");
}
@@ -871,6 +876,7 @@ var BasicComposer = Widget.extend({
* @param {MouseEvent} event
*/
_onAttachmentView: function (event) {
event.stopPropagation();
var activeAttachmentID = $(event.currentTarget).data('id');
var attachments = this.get('attachment_ids');
if (activeAttachmentID) {
@@ -26,6 +26,7 @@ var DocumentViewer = Widget.extend({
'DOMMouseScroll .o_viewer_content': '_onScroll', // Firefox
'mousewheel .o_viewer_content': '_onScroll', // Chrome, Safari, IE
'keydown': '_onKeydown',
'keyup': '_onKeyUp',
'mousedown .o_viewer_img': '_onStartDrag',
'mousemove .o_viewer_content': '_onDrag',
'mouseup .o_viewer_content': '_onEndDrag'
@@ -156,6 +157,7 @@ var DocumentViewer = Widget.extend({
_onClose: function (e) {
e.preventDefault();
this.$el.modal('hide');
this.trigger_up('document_viewer_closed');
},
/**
* When popup close complete destroyed modal even DOM footprint too
@@ -238,6 +240,20 @@ var DocumentViewer = Widget.extend({
break;
}
},
/**
* Close popup on ESCAPE keyup
*
* @private
* @param {KeyEvent} e
*/
_onKeyUp: function (e) {
switch (e.which) {
case $.ui.keyCode.ESCAPE:
e.preventDefault();
this._onClose(e);
break;
}
},
/**
* @private
* @param {MouseEvent} e
@@ -1357,7 +1357,15 @@ var ChatManager = AbstractService.extend({
//add o_mail_emoji class on each unicode to manage size and font
var unicode = String(value);
var regexp = new RegExp("(?:^|\\s|<[a-z]*>)(" + unicode + ")(?=\\s|$|</[a-z]*>)", "g");
var msg_bak = msg.body;
msg.body = msg.body.replace(regexp, ' <span class="o_mail_emoji">'+unicode+'</span> ');
// Idiot-proof limit. If the user had the amazing idea of copy-pasting thousands of emojis,
// the image rendering can lead to memory overflow errors on some browsers (e.g. Chrome).
// Set an arbitrary limit to 200 from which we simply don't replace them (anyway, they are
// already replaced by the unicode counterpart).
if (_.str.count(msg.body, 'o_mail_emoji') > 200) {
msg.body = msg_bak;
}
});
function propertyDescr(channel) {
return {
+1
View File
@@ -380,6 +380,7 @@ var Thread = Widget.extend({
* @param {MouseEvent} event
*/
_onAttachmentView: function (event) {
event.stopPropagation();
var activeAttachmentID = $(event.currentTarget).data('id');
if (activeAttachmentID) {
var attachmentViewer = new DocumentViewer(this, this.attachments, activeAttachmentID);
+6 -4
View File
@@ -16,7 +16,6 @@
position: relative;
.o-flex(0, 0, auto);
.o-flex-display();
margin: 1px 0;
border-top: none;
background: @gray-lighter;
@@ -51,10 +50,12 @@
cursor: text;
display: inline-block;
height: 100%;
padding: 0px 0px @o-mail-chatter-gap;
white-space: pre-wrap;
word-break: break-all;
}
.o_composer_text_field {
padding: 0 0 @o-mail-chatter-gap;
}
.o_composer_mention_dropdown .o_mention_proposition > a {
.o-text-overflow();
width: 100%;
@@ -163,7 +164,6 @@
.o_composer {
display: flex;
min-height: 40px;
padding: @o-mail-chatter-gap @o-mail-chatter-gap 0 @o-mail-chatter-gap;
border-radius: 2px 0 0 2px;
border-right-width: 0;
}
@@ -175,6 +175,7 @@
.o-flex-flow(row, wrap);
}
.o_composer_text_field {
padding: @o-mail-chatter-gap;
.o-flex(1, 1, 50%);
}
.o_chatter_composer_tools {
@@ -187,8 +188,8 @@
.o_chatter_composer_tools {
border: none;
border-left: 1px solid @gray-lighter-dark;
padding-top: @o-mail-chatter-gap*0.5;
padding-left: @o-mail-chatter-gap*0.5;
.o-transform(translateY(-@o-mail-chatter-gap*0.5));
}
.o_composer_button_send {
@@ -212,6 +213,7 @@
border-bottom-width: 1px;
}
.o_composer_input {
padding: @o-mail-chatter-gap;
.o-flex-flow(row, nowrap);
.o_chatter_composer_tools {
+1 -1
View File
@@ -61,7 +61,7 @@
</t>
<t t-name="DocumentViewer">
<div class="modal o_modal_fullscreen" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal o_modal_fullscreen" tabindex="-1" data-keyboard="false" role="dialog" aria-hidden="true">
<t t-call="DocumentViewer.Content"/>
<t t-if="widget.attachment.length != 1">
@@ -62,6 +62,84 @@ QUnit.module('mail', {
parent.destroy();
});
QUnit.test('open document viewer and close using ESCAPE key should reset focus to chat window', function (assert) {
assert.expect(6);
function createParent(params) {
var widget = new Widget();
testUtils.addMockEnvironment(widget, params);
return widget;
}
var messages = [{
attachment_ids: [{
filename: 'image1.jpg',
id:1,
mimetype: 'image/jpeg',
name: 'Test Image 1',
url: '/web/content/1?download=true'
}],
author_id: ["1", "John Doe"],
body: "A message",
date: moment("2016-12-20 09:35:40"),
displayed_author: "John Doe",
id: 1,
is_note: false,
is_starred: false,
model: 'partner',
res_id: 2
}];
var parent = createParent({
mockRPC: function (route, args) {
if(_.str.contains(route, '/mail/attachment/preview/') ||
_.str.contains(route, '/web/static/lib/pdfjs/web/viewer.html')){
var canvas = document.createElement('canvas');
return $.when(canvas.toDataURL());
}
return this._super.apply(this, arguments);
},
data: {},
});
var chatWindow = new ChatWindow(parent, 1, "user", false, messages.length, {});
chatWindow.appendTo($('#qunit-fixture'));
chatWindow.render(messages);
testUtils.intercept(chatWindow, 'get_messages', function(event) {
event.stopPropagation();
var requested_msgs = _.filter(messages, function (msg) {
return _.contains(event.data.options.ids, msg.id);
});
event.data.callback($.when(requested_msgs));
}, true);
testUtils.intercept(chatWindow, 'get_bus', function(event) {
event.stopPropagation();
event.data.callback(new Bus());
}, true);
chatWindow.on('document_viewer_closed', null, function () {
assert.ok(true, "chat window should trigger a close document viewer event");
});
assert.strictEqual(chatWindow.$('.o_thread_message .o_attachment').length, 1,
"there should be three attachment on message");
// click on first image attachement
chatWindow.$('.o_thread_message .o_attachment .o_image_box .o_image_overlay').first().click();
// check focus is on document viewer popup and then press escape to close it
assert.strictEqual(document.activeElement, $('.o_modal_fullscreen')[0], "Modal popup should have focus");
assert.strictEqual($('.o_modal_fullscreen img.o_viewer_img[src*="/web/image/1?unique=1"]').length, 1,
"Modal popup should open with first image src");
// trigger ESCAPE keyup on document viewer popup
var upKeyEvent = jQuery.Event("keyup", {which: 27});
$('.o_modal_fullscreen').trigger(upKeyEvent);
assert.strictEqual(document.activeElement, chatWindow.$input[0],
"input should be focused");
var upKeyEvent = jQuery.Event( "keyup", {which: 27});
chatWindow.$('.o_composer_input').trigger(upKeyEvent);
assert.strictEqual(chatWindow.folded, false, "Closed chat Window");
parent.destroy();
});
QUnit.test('chat window\'s input can still be focused when the UI is blocked', function (assert) {
assert.expect(2);
+1 -1
View File
@@ -274,7 +274,7 @@ msgstr "Aangemaakt door"
#. module: maintenance
#: model:ir.model.fields,field_description:maintenance.field_maintenance_request__owner_user_id
msgid "Created by User"
msgstr ""
msgstr "Aangemaakt door gebruiker"
#. module: maintenance
#: model:ir.model.fields,field_description:maintenance.field_maintenance_equipment__create_date
+1 -1
View File
@@ -292,7 +292,7 @@ msgstr "Voeg een omschrijving toe..."
#. module: mrp
#: model:ir.actions.act_window,help:mrp.action_work_orders
msgid "Add a work center"
msgstr ""
msgstr "Voeg een werkcenter toe"
#. module: mrp
#: model:ir.ui.view,arch_db:mrp.res_config_settings_view_form
+1 -1
View File
@@ -557,7 +557,7 @@ class MrpProduction(models.Model):
order._cal_price(moves_to_do)
moves_to_finish = order.move_finished_ids.filtered(lambda x: x.state not in ('done','cancel'))
moves_to_finish._action_done()
#order.action_assign()
order.action_assign()
consume_move_lines = moves_to_do.mapped('active_move_line_ids')
for moveline in moves_to_finish.mapped('active_move_line_ids'):
if moveline.product_id == order.product_id and moveline.move_id.has_tracking != 'none':
+20 -2
View File
@@ -290,6 +290,18 @@ class MrpWorkorder(models.Model):
self.final_lot_id = self.env['stock.production.lot'].search([('use_next_on_work_order_id', '=', self.id)],
order='create_date, id', limit=1)
def _get_byproduct_move_line(self, by_product_move, quantity):
return {
'move_id': by_product_move.id,
'product_id': by_product_move.product_id.id,
'product_uom_qty': quantity,
'product_uom_id': by_product_move.product_uom.id,
'qty_done': quantity,
'workorder_id': self.id,
'location_id': by_product_move.location_id.id,
'location_dest_id': by_product_move.location_dest_id.id,
}
@api.multi
def record_production(self):
self.ensure_one()
@@ -367,8 +379,14 @@ class MrpWorkorder(models.Model):
if not self.next_work_order_id:
for by_product_move in self.production_id.move_finished_ids.filtered(lambda x: (x.product_id.id != self.production_id.product_id.id) and (x.state not in ('done', 'cancel'))):
if by_product_move.has_tracking == 'none':
by_product_move.quantity_done += self.qty_producing * by_product_move.unit_factor
if by_product_move.has_tracking != 'serial':
values = self._get_byproduct_move_line(by_product_move, self.qty_producing * by_product_move.unit_factor)
self.env['stock.move.line'].create(values)
elif by_product_move.has_tracking == 'serial':
qty_todo = by_product_move.product_uom._compute_quantity(self.qty_producing * by_product_move.unit_factor, by_product_move.product_id.uom_id)
for i in range(0, int(float_round(qty_todo, precision_digits=0))):
values = self._get_byproduct_move_line(by_product_move, 1)
self.env['stock.move.line'].create(values)
# Update workorder quantity produced
self.qty_produced += self.qty_producing
+4 -3
View File
@@ -38,7 +38,8 @@ class MrpProductProduce(models.TransientModel):
if 'produce_line_ids' in fields:
lines = []
for move in production.move_raw_ids.filtered(lambda x: (x.product_id.tracking != 'none') and x.state not in ('done', 'cancel') and x.bom_line_id):
qty_to_consume = todo_quantity / move.bom_line_id.bom_id.product_qty * move.bom_line_id.product_qty
qty_to_consume = float_round(todo_quantity / move.bom_line_id.bom_id.product_qty * move.bom_line_id.product_qty,
precision_rounding=move.product_uom.rounding, rounding_method="UP")
for move_line in move.move_line_ids:
if float_compare(qty_to_consume, 0.0, precision_rounding=move.product_uom.rounding) <= 0:
break
@@ -176,9 +177,9 @@ class MrpProductProduceLine(models.TransientModel):
product_produce_id = fields.Many2one('mrp.product.produce')
product_id = fields.Many2one('product.product', 'Product')
lot_id = fields.Many2one('stock.production.lot', 'Lot')
qty_to_consume = fields.Float('To Consume')
qty_to_consume = fields.Float('To Consume', digits=dp.get_precision('Product Unit of Measure'))
product_uom_id = fields.Many2one('uom.uom', 'Unit of Measure')
qty_done = fields.Float('Done')
qty_done = fields.Float('Done', digits=dp.get_precision('Product Unit of Measure'))
move_id = fields.Many2one('stock.move')
@api.onchange('lot_id')
+3 -3
View File
@@ -77,7 +77,7 @@ msgstr "<i>Annuleer,</i> Uw betaling is geannuleerd."
msgid ""
"<i>Done,</i> Your online payment has been successfully processed. Thank you "
"for your order."
msgstr "Gelukt,</i> Uw online betaling is geslaagd. bedankt voor uw opdracht."
msgstr "Gelukt,</i> Uw online betaling is geslaagd. Bedankt voor uw opdracht."
#. module: payment
#: code:addons/payment/models/payment_acquirer.py:117
@@ -351,7 +351,7 @@ msgstr "Kan de betaling niet verwerken"
#: code:addons/payment/controllers/portal.py:110
#, python-format
msgid "Cannot setup the payment."
msgstr ""
msgstr "Kan de betaling niet opzetten."
#. module: payment
#: model:ir.model.fields,field_description:payment.field_payment_acquirer__capture_manually
@@ -643,7 +643,7 @@ msgid ""
"If you leave it empty, the payment acquirer will be available for all the "
"countries."
msgstr ""
"Indien u het leeg, is de betalingsverwerker beschikbaar in alle landen."
"Indien u dit leeg laat, is de betalingsverwerker beschikbaar in alle landen."
#. module: payment
#: model:ir.model.fields,field_description:payment.field_payment_acquirer__image
+3 -2
View File
@@ -16,13 +16,14 @@
# Doğan Altunbay <doganaltunbay@gmail.com>, 2017
# Levent Karakaş <levent@mektup.at>, 2017
# Umur Akın <umura@projetgrup.com>, 2018
# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -222,7 +223,7 @@ msgstr "Alıcılar"
#. module: payment
#: model:ir.ui.view,arch_db:payment.payment_icon_form_view
msgid "Acquirers list"
msgstr ""
msgstr "Alıcılar Listesi"
#. module: payment
#: model:ir.ui.view,arch_db:payment.acquirer_kanban
+1
View File
@@ -3,3 +3,4 @@
from . import payment_acquirer
from . import res_partner
from . import account_payment
from . import chart_template
+14
View File
@@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, _
class WizardMultiChartsAccounts(models.TransientModel):
_inherit = 'wizard.multi.charts.accounts'
@api.multi
def _create_bank_journals_from_o2m(self, company, acc_template_ref):
res = super(WizardMultiChartsAccounts, self)._create_bank_journals_from_o2m(company, acc_template_ref)
# Try to generate the missing journals
return res + self.env['payment.acquirer']._create_missing_journal_for_acquirers(company=company)
+70 -2
View File
@@ -9,6 +9,7 @@ from odoo import api, exceptions, fields, models, _
from odoo.tools import consteq, float_round, image_resize_images, image_resize_image, ustr
from odoo.addons.base.models import ir_module
from odoo.exceptions import ValidationError
from odoo import api, SUPERUSER_ID
_logger = logging.getLogger(__name__)
@@ -21,6 +22,11 @@ def _partner_split_name(partner_name):
return [' '.join(partner_name.split()[:-1]), ' '.join(partner_name.split()[-1:])]
def create_missing_journal_for_acquirers(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
env['payment.acquirer']._create_missing_journal_for_acquirers()
class PaymentAcquirer(models.Model):
""" Acquirer Model. Each specific acquirer can extend the model by adding
its own fields, using the acquirer_name as a prefix for the new fields.
@@ -52,6 +58,9 @@ class PaymentAcquirer(models.Model):
_description = 'Payment Acquirer'
_order = 'website_published desc, sequence, name'
def _get_default_view_template_id(self):
return self.env.ref('payment.default_acquirer_button', raise_if_not_found=False)
name = fields.Char('Name', required=True, translate=True)
description = fields.Html('Description')
sequence = fields.Integer('Sequence', default=10, help="Determine the display order")
@@ -62,7 +71,8 @@ class PaymentAcquirer(models.Model):
'res.company', 'Company',
default=lambda self: self.env.user.company_id.id, required=True)
view_template_id = fields.Many2one(
'ir.ui.view', 'Form Button Template', required=True)
'ir.ui.view', 'Form Button Template', required=True,
default=_get_default_view_template_id)
registration_view_template_id = fields.Many2one(
'ir.ui.view', 'S2S Form Template', domain=[('type', '=', 'qweb')],
help="Template for method registration")
@@ -197,6 +207,58 @@ class PaymentAcquirer(models.Model):
"""
return dict(authorize=[], tokenize=[], fees=[])
@api.multi
def _prepare_account_journal_vals(self):
'''Prepare the values to create the acquirer's journal.
:return: a dictionary to create a account.journal record.
'''
self.ensure_one()
account_vals = self.env['account.journal']._prepare_liquidity_account(
self.name, self.company_id, None, 'bank')
account_vals['user_type_id'] = self.env.ref('account.data_account_type_current_assets').id
account_vals['reconcile'] = True
account = self.env['account.account'].create(account_vals)
return {
'name': self.name,
'code': self.name.upper(),
'sequence': 999,
'type': 'bank',
'company_id': self.company_id.id,
'default_debit_account_id': account.id,
'default_credit_account_id': account.id,
# Show the journal on dashboard if the acquirer is published on the website.
'show_on_dashboard': self.website_published,
# Don't show payment methods in the backend.
'inbound_payment_method_ids': [],
'outbound_payment_method_ids': [],
}
@api.model
def _create_missing_journal_for_acquirers(self, company=None):
'''Create the journal for active acquirers.
We want one journal per acquirer. However, we can't create them during the 'create' of the payment.acquirer
because every acquirers are defined on the 'payment' module but is active only when installing their own module
(e.g. payment_paypal for Paypal). We can't do that in such modules because we have no guarantee the chart template
is already installed.
'''
# Search for installed acquirers modules.
# If this method is triggered by a post_init_hook, the module is 'to install'.
# If the trigger comes from the chart template wizard, the modules are already installed.
acquirer_modules = self.env['ir.module.module'].search(
[('name', 'like', 'payment_%'), ('state', 'in', ('to install', 'installed'))])
acquirer_names = [a.name.split('_')[1] for a in acquirer_modules]
# Search for acquirers having no journal
company = company or self.env.user.company_id
acquirers = self.env['payment.acquirer'].search(
[('provider', 'in', acquirer_names), ('journal_id', '=', False), ('company_id', '=', company.id)])
journals = self.env['account.journal']
for acquirer in acquirers.filtered(lambda l: not l.journal_id and l.company_id.chart_template_id):
acquirer.journal_id = self.env['account.journal'].create(acquirer._prepare_account_journal_vals())
journals += acquirer.journal_id
return journals
@api.model
def create(self, vals):
image_resize_images(vals)
@@ -209,7 +271,13 @@ class PaymentAcquirer(models.Model):
@api.multi
def toggle_website_published(self):
self.write({'website_published': not self.website_published})
''' When clicking on the website publish toggle button, the website_published is reversed and
the acquirer journal is set or not in favorite on the dashboard.
'''
self.ensure_one()
self.website_published = not self.website_published
if self.journal_id:
self.journal_id.show_on_dashboard = self.website_published
return True
@api.multi
+2 -2
View File
@@ -81,7 +81,7 @@
</page>
<page string="Configuration">
<group name="acquirer_config">
<field name="journal_id" context="{'default_type': 'bank'}" required="1"/>
<field name="journal_id" context="{'default_type': 'bank'}"/>
<field name="capture_manually" attrs="{'invisible': [('authorize_implemented', '=', False)]}"/>
<field name="save_token" widget="radio" attrs="{'invisible': ['|', ('token_implemented', '=', False), ('payment_flow', '=', 's2s')]}"/>
<field name="fees_active" attrs="{'invisible': [('fees_implemented', '=', False)]}"/>
@@ -113,7 +113,7 @@
</div>
<field name="registration_view_template_id" groups="base.group_no_one"/>
<field name="payment_icon_ids" widget="many2many_tags"/>
<field name="payment_flow" widget="radio"/>
<field name="payment_flow" widget="radio" attrs="{'invisible': [('token_implemented', '=', False)]}"/>
</group>
</page>
</notebook>
+1
View File
@@ -3,3 +3,4 @@
from . import models
from . import controllers
from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
+1
View File
@@ -13,4 +13,5 @@
'data/payment_acquirer_data.xml',
],
'installable': True,
'post_init_hook': 'create_missing_journal_for_acquirers',
}
+1
View File
@@ -3,3 +3,4 @@
from . import models
from . import controllers
from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
+1
View File
@@ -13,4 +13,5 @@
'data/payment_acquirer_data.xml',
],
'installable': True,
'post_init_hook': 'create_missing_journal_for_acquirers',
}
+1
View File
@@ -3,3 +3,4 @@
from . import models
from . import controllers
from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
+1
View File
@@ -13,4 +13,5 @@
'data/payment_acquirer_data.xml',
],
'installable': True,
'post_init_hook': 'create_missing_journal_for_acquirers',
}
+1
View File
@@ -3,3 +3,4 @@
from . import models
from . import controllers
from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
+1
View File
@@ -13,4 +13,5 @@
'data/payment_acquirer_data.xml',
],
'installable': True,
'post_init_hook': 'create_missing_journal_for_acquirers',
}
+3 -2
View File
@@ -8,13 +8,14 @@
# Ediz Duman <neps1192@gmail.com>, 2017
# Murat Kaplan <muratk@projetgrup.com>, 2017
# Umur Akın <umura@projetgrup.com>, 2018
# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:10+0000\n"
"PO-Revision-Date: 2018-03-22 14:10+0000\n"
"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -47,7 +48,7 @@ msgstr "API Kullanıcı Şifresi"
#. module: payment_ogone
#: model:ir.model.fields,field_description:payment_ogone.field_payment_acquirer__ogone_alias_usage
msgid "Alias Usage"
msgstr ""
msgstr "Alias ​​Kullanımı"
#. module: payment_ogone
#: model:ir.ui.view,arch_db:payment_ogone.ogone_s2s_form
+1
View File
@@ -3,3 +3,4 @@
from . import models
from . import controllers
from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
+1
View File
@@ -13,4 +13,5 @@
'data/payment_acquirer_data.xml',
],
'installable': True,
'post_init_hook': 'create_missing_journal_for_acquirers',
}
+1
View File
@@ -3,3 +3,4 @@
from . import models
from . import controllers
from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
+1
View File
@@ -16,4 +16,5 @@
'views/payment_payumoney_templates.xml',
'data/payment_acquirer_data.xml',
],
'post_init_hook': 'create_missing_journal_for_acquirers',
}
+1
View File
@@ -1,2 +1,3 @@
from . import models
from . import controllers
from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
+1
View File
@@ -20,4 +20,5 @@ payments acquirer using Worldline SIPS.""",
'data/payment_acquirer_data.xml',
],
'installable': True,
'post_init_hook': 'create_missing_journal_for_acquirers',
}
+1
View File
@@ -3,3 +3,4 @@
from . import models
from . import controllers
from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
+1
View File
@@ -14,4 +14,5 @@
],
'images': ['static/description/icon.png'],
'installable': True,
'post_init_hook': 'create_missing_journal_for_acquirers',
}
+1
View File
@@ -3,3 +3,4 @@
from . import models
from . import controllers
from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers
+1
View File
@@ -14,4 +14,5 @@
],
'installable': True,
'auto_install': True,
'post_init_hook': 'create_missing_journal_for_acquirers',
}
+13
View File
@@ -15,6 +15,19 @@ class TransferPaymentAcquirer(models.Model):
provider = fields.Selection(selection_add=[('transfer', 'Wire Transfer')], default='transfer')
@api.model
def _create_missing_journal_for_acquirers(self, company=None):
# By default, the wire transfer method uses the default Bank journal.
company = company or self.env.user.company_id
acquirers = self.env['payment.acquirer'].search(
[('provider', '=', 'transfer'), ('journal_id', '=', False), ('company_id', '=', company.id)])
bank_journal = self.env['account.journal'].search(
[('type', '=', 'bank'), ('company_id', '=', company.id)], limit=1)
if bank_journal:
acquirers.write({'journal_id': bank_journal.id})
return super(TransferPaymentAcquirer, self)._create_missing_journal_for_acquirers(company=company)
def transfer_get_form_action_url(self):
return '/payment/transfer/feedback'
+2 -2
View File
@@ -383,7 +383,7 @@ msgstr "Voeg een aangepaste tekst doe aan de hoofding en het voeteinde"
#. module: point_of_sale
#: model:ir.actions.act_window,help:point_of_sale.action_account_journal_form
msgid "Add a new payment method"
msgstr ""
msgstr "Voeg een nieuwe betaling toe"
#. module: point_of_sale
#. openerp-web
@@ -1259,7 +1259,7 @@ msgid ""
" devices already benefit from a native keyboard."
msgstr ""
"Schakel deze optie niet in als u bestellingen via smartphones of tablets "
"opneemt. Dergelijke apparaten beschikken al van een eigen toetsenbord."
"opneemt. Dergelijke apparaten beschikken al over een eigen toetsenbord."
#. module: point_of_sale
#: model:ir.ui.view,arch_db:point_of_sale.view_pos_order_filter
+2
View File
@@ -4213,6 +4213,8 @@ msgstr "Şirketiniz için bir logo ya da bir layout ayarlamalısınız."
#, python-format
msgid "You have to set your reports's header and footer layout."
msgstr ""
"Raporlarınız için üst bilgi ve alt bilgi satırlarını ayalamanız "
"gerekmektedir."
#. module: point_of_sale
#: model:ir.actions.act_window,help:point_of_sale.product_product_action
+3 -2
View File
@@ -13,13 +13,14 @@
# Saban Yildiz <sabany@projetgrup.com>, 2017
# Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2017
# Umur Akın <umura@projetgrup.com>, 2018
# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:11+0000\n"
"PO-Revision-Date: 2018-03-22 14:11+0000\n"
"Last-Translator: Umur Akın <umura@projetgrup.com>, 2018\n"
"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -102,7 +103,7 @@ msgstr "Temizle"
#: code:addons/portal/static/src/xml/portal_signature.xml:27
#, python-format
msgid "Click here to see your document."
msgstr ""
msgstr "Dokümanınızı görmek için buraya tıklayınız."
#. module: portal
#: model:ir.ui.view,arch_db:portal.portal_my_details
+1 -1
View File
@@ -363,7 +363,7 @@ msgstr "Kassa orders"
#: code:addons/pos_mercury/static/src/js/pos_mercury.js:345
#, python-format
msgid "Refunds not supported"
msgstr ""
msgstr "Terugbetalingen niet ondersteund"
#. module: pos_mercury
#. openerp-web
+1 -1
View File
@@ -381,7 +381,7 @@ msgstr "Order"
#. module: pos_restaurant
#: model:ir.model.fields,field_description:pos_restaurant.field_pos_config__is_order_printer
msgid "Order Printer"
msgstr ""
msgstr "Order Printer"
#. module: pos_restaurant
#: model:ir.actions.act_window,name:pos_restaurant.action_restaurant_printer_form
+3 -2
View File
@@ -6,13 +6,14 @@
# Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2017
# Murat Kaplan <muratk@projetgrup.com>, 2017
# Martin Trigaux, 2017
# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~11.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-22 14:09+0000\n"
"PO-Revision-Date: 2018-03-22 14:09+0000\n"
"Last-Translator: Martin Trigaux, 2017\n"
"Last-Translator: Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2018\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -23,7 +24,7 @@ msgstr ""
#. module: pos_sale
#: model:ir.model,name:pos_sale.model_report_all_channels_sales
msgid "All sales orders grouped by sales channels"
msgstr ""
msgstr "Tüm satış siparişleri satış kanalları tarafından gruplandırıldı"
#. module: pos_sale
#: code:addons/pos_sale/models/crm_team.py:103
+13 -3
View File
@@ -1900,6 +1900,8 @@ msgid ""
"This vendor's product code will be used when printing a request for "
"quotation. Keep empty to use the internal one."
msgstr ""
"Bu tedarikçi ürün kodu bir teklif ihtiyacı için yazdırılırken "
"kullanılacaktır. İçini kullanmak için boş tutunuz."
#. module: product
#: model:ir.model.fields,help:product.field_product_supplierinfo__product_name
@@ -1907,6 +1909,8 @@ msgid ""
"This vendor's product name will be used when printing a request for "
"quotation. Keep empty to use the internal one."
msgstr ""
"Bu tedarikçi ürün adı, bir teklif ihtiyacı için yazdırılırken "
"kullanılacaktır. İçini kullanmak için boş tutunuz."
#. module: product
#: model:ir.ui.view,arch_db:product.product_template_search_view
@@ -2019,7 +2023,7 @@ msgstr "Varyant Fiyatları"
#: model:ir.model.fields,field_description:product.field_product_product__variant_seller_ids
#: model:ir.model.fields,field_description:product.field_product_template__variant_seller_ids
msgid "Variant Seller"
msgstr ""
msgstr "Satıcı Varyantı"
#. module: product
#: model:ir.actions.act_window,name:product.product_attribute_value_action
@@ -2154,6 +2158,8 @@ msgstr "Şirketiniz için bir logo ya da bir layout ayarlamalısınız."
#, python-format
msgid "You have to set your reports's header and footer layout."
msgstr ""
"Raporlarınız için üst bilgi ve alt bilgi satırlarını ayalamanız "
"gerekmektedir."
#. module: product
#: model:ir.actions.act_window,help:product.product_uom_form_action
@@ -2161,6 +2167,8 @@ msgid ""
"You must define a conversion rate between several Units of\n"
" Measure within the same category."
msgstr ""
"Aynı kategori dahilinde bazı Ölçü Birimleri arasında değişim oranı "
"tanımlanmalı."
#. module: product
#: model:ir.actions.act_window,help:product.product_normal_action
@@ -2187,6 +2195,8 @@ msgid ""
"You must define at least one product category in order to be able to create "
"products."
msgstr ""
"Ürünleri oluşturabilmek için en az bir ürün kategorisi tanımlamanız "
"gerekmektedir."
#. module: product
#: model:product.uom,name:product.product_uom_cm
@@ -2206,7 +2216,7 @@ msgstr "decimal.precision"
#. module: product
#: model:ir.ui.view,arch_db:product.product_category_form_view
msgid "e.g. Lamps"
msgstr ""
msgstr "Örn. Aydınlatma"
#. module: product
#: model:ir.ui.view,arch_db:product.product_variant_easy_edit_view
@@ -2216,7 +2226,7 @@ msgstr ""
#. module: product
#: model:ir.ui.view,arch_db:product.product_pricelist_view
msgid "e.g. USD Retailers"
msgstr ""
msgstr "Örn. Dolar Perakendeceliği"
#. module: product
#: model:ir.ui.view,arch_db:product.product_uom_form_view

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