[MERGE] from trunk
bzr revid: chm@openerp.com-20140408132412-7ofhd87laj3uoazj
This commit is contained in:
commit
673dc5b1d7
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2012-12-22 12:46+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
|
||||
"PO-Revision-Date: 2014-04-04 19:18+0000\n"
|
||||
"Last-Translator: Dariusz Żbikowski <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-27 06:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 16976)\n"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
|
||||
|
@ -989,6 +989,8 @@ msgid ""
|
|||
" opening/closing fiscal "
|
||||
"year process."
|
||||
msgstr ""
|
||||
"Nie możesz anulować uzgodnień pozycji dziennika jeśli zostały one "
|
||||
"wygenerowane procesem zamykania/otwierania roku."
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_subscription_form_new
|
||||
|
|
|
@ -34,7 +34,7 @@ class validate_account_move(osv.osv_memory):
|
|||
if context is None:
|
||||
context = {}
|
||||
data = self.read(cr, uid, ids[0], context=context)
|
||||
ids_move = obj_move.search(cr, uid, [('state','=','draft'),('journal_id','in',tuple(data['journal_ids'])),('period_id','in',tuple(data['period_ids']))])
|
||||
ids_move = obj_move.search(cr, uid, [('state','=','draft'),('journal_id','in',tuple(data['journal_ids'])),('period_id','in',tuple(data['period_ids']))], order='date')
|
||||
if not ids_move:
|
||||
raise osv.except_osv(_('Warning!'), _('Specified journals do not have any account move entries in draft state for the specified periods.'))
|
||||
obj_move.button_validate(cr, uid, ids_move, context=context)
|
||||
|
|
|
@ -543,33 +543,40 @@ class account_analytic_account(osv.osv):
|
|||
'nodestroy': True,
|
||||
}
|
||||
|
||||
def on_change_template(self, cr, uid, ids, template_id, context=None):
|
||||
def on_change_template(self, cr, uid, ids, template_id, date_start=False, fix_price_invoices=False, invoice_on_timesheets=False, recurring_invoices=False, context=None):
|
||||
if not template_id:
|
||||
return {}
|
||||
obj_analytic_line = self.pool.get('account.analytic.invoice.line')
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, context=context)
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, date_start=date_start, context=context)
|
||||
|
||||
template = self.browse(cr, uid, template_id, context=context)
|
||||
invoice_line_ids = []
|
||||
for x in template.recurring_invoice_line_ids:
|
||||
invoice_line_ids.append((0, 0, {
|
||||
'product_id': x.product_id.id,
|
||||
'uom_id': x.uom_id.id,
|
||||
'name': x.name,
|
||||
'quantity': x.quantity,
|
||||
'price_unit': x.price_unit,
|
||||
'analytic_account_id': x.analytic_account_id and x.analytic_account_id.id or False,
|
||||
}))
|
||||
res['value']['fix_price_invoices'] = template.fix_price_invoices
|
||||
res['value']['invoice_on_timesheets'] = template.invoice_on_timesheets
|
||||
res['value']['hours_qtt_est'] = template.hours_qtt_est
|
||||
res['value']['amount_max'] = template.amount_max
|
||||
res['value']['to_invoice'] = template.to_invoice.id
|
||||
res['value']['pricelist_id'] = template.pricelist_id.id
|
||||
res['value']['recurring_invoices'] = template.recurring_invoices
|
||||
res['value']['recurring_interval'] = template.recurring_interval
|
||||
res['value']['recurring_rule_type'] = template.recurring_rule_type
|
||||
res['value']['recurring_invoice_line_ids'] = invoice_line_ids
|
||||
|
||||
if not fix_price_invoices:
|
||||
res['value']['fix_price_invoices'] = template.fix_price_invoices
|
||||
res['value']['amount_max'] = template.amount_max
|
||||
if not invoice_on_timesheets:
|
||||
res['value']['invoice_on_timesheets'] = template.invoice_on_timesheets
|
||||
res['value']['hours_qtt_est'] = template.hours_qtt_est
|
||||
|
||||
if template.to_invoice.id:
|
||||
res['value']['to_invoice'] = template.to_invoice.id
|
||||
if template.pricelist_id.id:
|
||||
res['value']['pricelist_id'] = template.pricelist_id.id
|
||||
if not recurring_invoices:
|
||||
invoice_line_ids = []
|
||||
for x in template.recurring_invoice_line_ids:
|
||||
invoice_line_ids.append((0, 0, {
|
||||
'product_id': x.product_id.id,
|
||||
'uom_id': x.uom_id.id,
|
||||
'name': x.name,
|
||||
'quantity': x.quantity,
|
||||
'price_unit': x.price_unit,
|
||||
'analytic_account_id': x.analytic_account_id and x.analytic_account_id.id or False,
|
||||
}))
|
||||
res['value']['recurring_invoices'] = template.recurring_invoices
|
||||
res['value']['recurring_interval'] = template.recurring_interval
|
||||
res['value']['recurring_rule_type'] = template.recurring_rule_type
|
||||
res['value']['recurring_invoice_line_ids'] = invoice_line_ids
|
||||
return res
|
||||
|
||||
def onchange_recurring_invoices(self, cr, uid, ids, recurring_invoices, date_start=False, context=None):
|
||||
|
|
|
@ -38,6 +38,9 @@
|
|||
<field name="partner_id" position="attributes">
|
||||
<attribute name="attrs">{'required': [('type','=','contract'),'|','|',('fix_price_invoices','=',True), ('invoice_on_timesheets', '=', True), ('recurring_invoices', '=', True)]}</attribute>
|
||||
</field>
|
||||
<field name="template_id" position="attributes">
|
||||
<attribute name="on_change">on_change_template(template_id, date_start, fix_price_invoices, invoice_on_timesheets, recurring_invoices)</attribute>
|
||||
</field>
|
||||
<xpath expr='//group[@name="invoice_on_timesheets"]' position="replace">
|
||||
</xpath>
|
||||
<xpath expr='//separator[@name="description"]' position='before'>
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2012-12-12 17:49+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
|
||||
"PO-Revision-Date: 2014-04-04 19:44+0000\n"
|
||||
"Last-Translator: Dariusz Żbikowski <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-27 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 16976)\n"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:email.template,subject:account_followup.email_template_account_followup_default
|
||||
|
@ -109,7 +109,7 @@ msgstr "Kroki monitowania płatności"
|
|||
#. module: account_followup
|
||||
#: field:account_followup.print,email_body:0
|
||||
msgid "Email Body"
|
||||
msgstr ""
|
||||
msgstr "Treść email"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.actions.act_window,name:account_followup.action_account_followup_print
|
||||
|
@ -403,7 +403,7 @@ msgstr "Monity o płatność"
|
|||
#. module: account_followup
|
||||
#: field:account_followup.followup.line,delay:0
|
||||
msgid "Due Days"
|
||||
msgstr ""
|
||||
msgstr "Dni zwłoki"
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account.move.line,followup_line_id:0
|
||||
|
@ -419,7 +419,7 @@ msgstr "Ostatni monit o płatność"
|
|||
#. module: account_followup
|
||||
#: model:ir.ui.menu,name:account_followup.menu_manual_reconcile_followup
|
||||
msgid "Reconcile Invoices & Payments"
|
||||
msgstr ""
|
||||
msgstr "Uzgadnianie Faktur i Płatności"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.ui.menu,name:account_followup.account_followup_s
|
||||
|
@ -429,7 +429,7 @@ msgstr "Wykonaj manualnie monit o płatność"
|
|||
#. module: account_followup
|
||||
#: report:account_followup.followup.print:0
|
||||
msgid "Li."
|
||||
msgstr ""
|
||||
msgstr "Sp."
|
||||
|
||||
#. module: account_followup
|
||||
#: field:account_followup.print,email_conf:0
|
||||
|
@ -499,6 +499,7 @@ msgstr "Monitowanie płatności"
|
|||
#, python-format
|
||||
msgid "Email not sent because of email address of partner not filled in"
|
||||
msgstr ""
|
||||
"Email nie został wysłany ponieważ adres email partnera nie został wypełniony"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.model,name:account_followup.model_account_followup_followup
|
||||
|
@ -511,6 +512,8 @@ msgid ""
|
|||
"Optionally you can assign a user to this field, which will make him "
|
||||
"responsible for the action."
|
||||
msgstr ""
|
||||
"Opcjonalnie możesz przypisać użytkownika do tego pola, który stanie się "
|
||||
"odpowiedzialny za tę akcję."
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.model,name:account_followup.model_account_followup_sending_results
|
||||
|
@ -528,7 +531,7 @@ msgstr ""
|
|||
#: code:addons/account_followup/wizard/account_followup_print.py:172
|
||||
#, python-format
|
||||
msgid " manual action(s) assigned:"
|
||||
msgstr ""
|
||||
msgstr " ręczna akcja przypisana do:"
|
||||
|
||||
#. module: account_followup
|
||||
#: view:res.partner:0
|
||||
|
@ -548,13 +551,13 @@ msgstr "Przeszukaj monity o płatność"
|
|||
#. module: account_followup
|
||||
#: view:res.partner:0
|
||||
msgid "Account Move line"
|
||||
msgstr ""
|
||||
msgstr "Pozycja zapisu"
|
||||
|
||||
#. module: account_followup
|
||||
#: code:addons/account_followup/wizard/account_followup_print.py:237
|
||||
#, python-format
|
||||
msgid "Send Letters and Emails: Actions Summary"
|
||||
msgstr ""
|
||||
msgstr "Listy i Email: Podsumowanie akcji"
|
||||
|
||||
#. module: account_followup
|
||||
#: view:account_followup.print:0
|
||||
|
@ -916,7 +919,7 @@ msgstr ""
|
|||
#. module: account_followup
|
||||
#: view:res.partner:0
|
||||
msgid "Responsible"
|
||||
msgstr ""
|
||||
msgstr "Odpowiedzialny"
|
||||
|
||||
#. module: account_followup
|
||||
#: model:ir.ui.menu,name:account_followup.menu_finance_followup
|
||||
|
@ -945,7 +948,7 @@ msgstr "Działanie monitowania płatności"
|
|||
#. module: account_followup
|
||||
#: view:account_followup.stat:0
|
||||
msgid "Including journal entries marked as a litigation"
|
||||
msgstr ""
|
||||
msgstr "Załącz pozycje dziennika oznaczone jako sporne"
|
||||
|
||||
#. module: account_followup
|
||||
#: report:account_followup.followup.print:0
|
||||
|
|
|
@ -0,0 +1,266 @@
|
|||
# Swedish translation for openobject-addons
|
||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2014-03-31 21:13+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Swedish <sv@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-01 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: account_test
|
||||
#: view:accounting.assert.test:0
|
||||
msgid ""
|
||||
"Code should always set a variable named `result` with the result of your "
|
||||
"test, that can be a list or\n"
|
||||
"a dictionary. If `result` is an empty list, it means that the test was "
|
||||
"succesful. Otherwise it will\n"
|
||||
"try to translate and print what is inside `result`.\n"
|
||||
"\n"
|
||||
"If the result of your test is a dictionary, you can set a variable named "
|
||||
"`column_order` to choose in\n"
|
||||
"what order you want to print `result`'s content.\n"
|
||||
"\n"
|
||||
"Should you need them, you can also use the following variables into your "
|
||||
"code:\n"
|
||||
" * cr: cursor to the database\n"
|
||||
" * uid: ID of the current user\n"
|
||||
"\n"
|
||||
"In any ways, the code must be legal python statements with correct "
|
||||
"indentation (if needed).\n"
|
||||
"\n"
|
||||
"Example: \n"
|
||||
" sql = '''SELECT id, name, ref, date\n"
|
||||
" FROM account_move_line \n"
|
||||
" WHERE account_id IN (SELECT id FROM account_account WHERE type "
|
||||
"= 'view')\n"
|
||||
" '''\n"
|
||||
" cr.execute(sql)\n"
|
||||
" result = cr.dictfetchall()"
|
||||
msgstr ""
|
||||
"Kod ska alltid ställa en variabel med namnet `resultat` med resultatet av "
|
||||
"ditt test, kan det vara en lista eller\n"
|
||||
"en ordbok. Om `resultat` är en tom lista, betyder det att testet var lyckat. "
|
||||
"Annars kommer\n"
|
||||
"försöka översätta och skriva ut vad som finns i `resultat`.\n"
|
||||
"\n"
|
||||
"Om resultatet av testet är en ordbok kan du ställa in en variabel med namnet "
|
||||
"`column_order` för att välja in\n"
|
||||
"vilken ordning du vill skriva ut `resultat` s innehåll.\n"
|
||||
"\n"
|
||||
"Om du behöver dem, kan du även använda följande variabler i koden:\n"
|
||||
" * Cr: markören till databasen\n"
|
||||
" * Uid: ID för den aktuella användaren\n"
|
||||
"\n"
|
||||
"På något sätt måste koden vara lagliga python uttalanden med rätt indrag (om "
|
||||
"det behövs).\n"
|
||||
"\n"
|
||||
"Exempel:\n"
|
||||
" sql ='' 'SELECT id, namn, ref, datum\n"
|
||||
" FRÅN account_move_line\n"
|
||||
" VAR konto-IN (SELECT id FROM account_account WHERE typ = "
|
||||
"\"Visa\")\n"
|
||||
" '' '\n"
|
||||
" cr.execute (SQL)\n"
|
||||
" resultat = cr.dictfetchall ()"
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,name:account_test.account_test_02
|
||||
msgid "Test 2: Opening a fiscal year"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,desc:account_test.account_test_05
|
||||
msgid ""
|
||||
"Check that reconciled invoice for Sales/Purchases has reconciled entries for "
|
||||
"Payable and Receivable Accounts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,desc:account_test.account_test_03
|
||||
msgid ""
|
||||
"Check if movement lines are balanced and have the same date and period"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: field:accounting.assert.test,name:0
|
||||
msgid "Test Name"
|
||||
msgstr "Testnamn"
|
||||
|
||||
#. module: account_test
|
||||
#: report:account.test.assert.print:0
|
||||
msgid "Accouting tests on"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,name:account_test.account_test_01
|
||||
msgid "Test 1: General balance"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,desc:account_test.account_test_06
|
||||
msgid "Check that paid/reconciled invoices are not in 'Open' state"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,desc:account_test.account_test_05_2
|
||||
msgid ""
|
||||
"Check that reconciled account moves, that define Payable and Receivable "
|
||||
"accounts, are belonging to reconciled invoices"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: view:accounting.assert.test:0
|
||||
msgid "Tests"
|
||||
msgstr "Tester"
|
||||
|
||||
#. module: account_test
|
||||
#: field:accounting.assert.test,desc:0
|
||||
msgid "Test Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: view:accounting.assert.test:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,desc:account_test.account_test_06_1
|
||||
msgid "Check that there's no move for any account with « View » account type"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,name:account_test.account_test_08
|
||||
msgid "Test 9 : Accounts and partners on account moves"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:ir.actions.act_window,name:account_test.action_accounting_assert
|
||||
#: model:ir.actions.report.xml,name:account_test.account_assert_test_report
|
||||
#: model:ir.ui.menu,name:account_test.menu_action_license
|
||||
msgid "Accounting Tests"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: code:addons/account_test/report/account_test_report.py:74
|
||||
#, python-format
|
||||
msgid "The test was passed successfully"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: field:accounting.assert.test,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,name:account_test.account_test_06
|
||||
msgid "Test 6 : Invoices status"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:ir.model,name:account_test.model_accounting_assert_test
|
||||
msgid "accounting.assert.test"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,name:account_test.account_test_05
|
||||
msgid ""
|
||||
"Test 5.1 : Payable and Receivable accountant lines of reconciled invoices"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: field:accounting.assert.test,code_exec:0
|
||||
msgid "Python code"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,desc:account_test.account_test_07
|
||||
msgid ""
|
||||
"Check on bank statement that the Closing Balance = Starting Balance + sum of "
|
||||
"statement lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,name:account_test.account_test_07
|
||||
msgid "Test 8 : Closing balance on bank statements"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,name:account_test.account_test_03
|
||||
msgid "Test 3: Movement lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,name:account_test.account_test_05_2
|
||||
msgid "Test 5.2 : Reconcilied invoices and Payable/Receivable accounts"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: view:accounting.assert.test:0
|
||||
msgid "Expression"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,name:account_test.account_test_04
|
||||
msgid "Test 4: Totally reconciled mouvements"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,desc:account_test.account_test_04
|
||||
msgid "Check if the totally reconciled movements are balanced"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: field:accounting.assert.test,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,desc:account_test.account_test_02
|
||||
msgid ""
|
||||
"Check if the balance of the new opened fiscal year matches with last year's "
|
||||
"balance"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: view:accounting.assert.test:0
|
||||
msgid "Python Code"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:ir.actions.act_window,help:account_test.action_accounting_assert
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to create Accounting Test.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,desc:account_test.account_test_01
|
||||
msgid "Check the balance: Debit sum = Credit sum"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,desc:account_test.account_test_08
|
||||
msgid "Check that general accounts and partners on account moves are active"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: model:accounting.assert.test,name:account_test.account_test_06_1
|
||||
msgid "Test 7: « View » account type"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_test
|
||||
#: view:accounting.assert.test:0
|
||||
msgid "Code Help"
|
||||
msgstr ""
|
|
@ -732,13 +732,17 @@ class account_voucher(osv.osv):
|
|||
|
||||
total_credit = 0.0
|
||||
total_debit = 0.0
|
||||
account_type = 'receivable'
|
||||
account_type = None
|
||||
if context.get('account_id'):
|
||||
account_type = self.pool['account.account'].browse(cr, uid, context['account_id'], context=context).type
|
||||
if ttype == 'payment':
|
||||
account_type = 'payable'
|
||||
if not account_type:
|
||||
account_type = 'payable'
|
||||
total_debit = price or 0.0
|
||||
else:
|
||||
total_credit = price or 0.0
|
||||
account_type = 'receivable'
|
||||
if not account_type:
|
||||
account_type = 'receivable'
|
||||
|
||||
if not context.get('move_line_ids', False):
|
||||
ids = move_line_pool.search(cr, uid, [('state','=','valid'), ('account_id.type', '=', account_type), ('reconcile_id', '=', False), ('partner_id', '=', partner_id)], context=context)
|
||||
|
@ -827,9 +831,9 @@ class account_voucher(osv.osv):
|
|||
else:
|
||||
default['value']['line_dr_ids'].append(rs)
|
||||
|
||||
if ttype == 'payment' and len(default['value']['line_cr_ids']) > 0:
|
||||
if len(default['value']['line_cr_ids']) > 0:
|
||||
default['value']['pre_line'] = 1
|
||||
elif ttype == 'receipt' and len(default['value']['line_dr_ids']) > 0:
|
||||
elif len(default['value']['line_dr_ids']) > 0:
|
||||
default['value']['pre_line'] = 1
|
||||
default['value']['writeoff_amount'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, ttype)
|
||||
return default
|
||||
|
@ -1662,7 +1666,7 @@ class account_bank_statement_line(osv.osv):
|
|||
def _check_amount(self, cr, uid, ids, context=None):
|
||||
for obj in self.browse(cr, uid, ids, context=context):
|
||||
if obj.voucher_id:
|
||||
diff = abs(obj.amount) - obj.voucher_id.amount
|
||||
diff = abs(obj.amount) - abs(obj.voucher_id.amount)
|
||||
if not self.pool.get('res.currency').is_zero(cr, uid, obj.statement_id.currency, diff):
|
||||
return False
|
||||
return True
|
||||
|
|
|
@ -213,10 +213,10 @@
|
|||
<field name="inherit_id" ref="account.view_bank_statement_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='statement_line_ids']/field[@name='line_ids']/tree/field[@name='amount']" position="after">
|
||||
<field name="voucher_id" string="" widget="many2onebutton" options="{'label':{'create':'Reconcile','edit':'Edit Reconciliation'}}" context="{'line_type': type, 'default_type': amount < 0 and 'payment' or 'receipt', 'type': amount < 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'default_active': False}"/>
|
||||
<field name="voucher_id" string="" widget="many2onebutton" options="{'label':{'create':'Reconcile','edit':'Edit Reconciliation'}}" context="{'line_type': type, 'default_type': amount < 0 and 'payment' or 'receipt', 'type': amount < 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'default_active': False, 'account_id': account_id}"/>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='statement_line_ids']/field[@name='line_ids']/form/group/field[@name='sequence']" position="before">
|
||||
<field name="voucher_id" widget="many2onebutton" options="{'label':{'create':'Reconcile','edit':'Edit Reconciliation'}}" context="{'line_type': type, 'default_type': amount < 0 and 'payment' or 'receipt', 'type': amount < 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'default_active': False}"/>
|
||||
<field name="voucher_id" widget="many2onebutton" options="{'label':{'create':'Reconcile','edit':'Edit Reconciliation'}}" context="{'line_type': type, 'default_type': amount < 0 and 'payment' or 'receipt', 'type': amount < 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'default_active': False, 'account_id': account_id}"/>
|
||||
</xpath>
|
||||
<field name="amount" position="attributes">
|
||||
<attribute name="on_change">onchange_amount(amount)</attribute>
|
||||
|
@ -230,7 +230,7 @@
|
|||
<field name="inherit_id" ref="account.view_bank_statement_form2"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page/field[@name='line_ids']/tree/field[@name='amount']" position="after">
|
||||
<field name="voucher_id" context="{'line_type': type, 'default_type': amount < 0 and 'payment' or 'receipt', 'type': amount < 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name}"/>
|
||||
<field name="voucher_id" context="{'line_type': type, 'default_type': amount < 0 and 'payment' or 'receipt', 'type': amount < 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'account_id': account_id}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -241,7 +241,7 @@
|
|||
<field name="inherit_id" ref="account.view_bank_statement_form2"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page/field[@name='line_ids']/form/group/field[@name='amount']" position="after">
|
||||
<field name="voucher_id" context="{'line_type': type, 'default_type': amount < 0 and 'payment' or 'receipt', 'type': amount < 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name}"/>
|
||||
<field name="voucher_id" context="{'line_type': type, 'default_type': amount < 0 and 'payment' or 'receipt', 'type': amount < 0 and 'payment' or 'receipt', 'default_partner_id': partner_id, 'default_journal_id': parent.journal_id, 'default_amount': abs(amount), 'default_reference': ref, 'default_date': date, 'default_name': name, 'account_id': account_id}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -203,7 +203,7 @@ class account_analytic_account(osv.osv):
|
|||
}, string='Currency', type='many2one', relation='res.currency'),
|
||||
}
|
||||
|
||||
def on_change_template(self, cr, uid, ids, template_id, context=None):
|
||||
def on_change_template(self, cr, uid, ids, template_id, date_start=False, context=None):
|
||||
if not template_id:
|
||||
return {}
|
||||
res = {'value':{}}
|
||||
|
@ -213,7 +213,8 @@ class account_analytic_account(osv.osv):
|
|||
to_dt = datetime.strptime(template.date, tools.DEFAULT_SERVER_DATE_FORMAT)
|
||||
timedelta = to_dt - from_dt
|
||||
res['value']['date'] = datetime.strftime(datetime.now() + timedelta, tools.DEFAULT_SERVER_DATE_FORMAT)
|
||||
res['value']['date_start'] = fields.date.today()
|
||||
if not date_start:
|
||||
res['value']['date_start'] = fields.date.today()
|
||||
res['value']['quantity_max'] = template.quantity_max
|
||||
res['value']['parent_id'] = template.parent_id and template.parent_id.id or False
|
||||
res['value']['description'] = template.description
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
</group>
|
||||
<group>
|
||||
<field name="type" invisible="context.get('default_type', False)"/>
|
||||
<field name="template_id" on_change="on_change_template(template_id,context)" domain="[('type','=','template')]" attrs="{'invisible': [('type','in',['view', 'normal','template'])]}" context="{'default_type' : 'template'}"/>
|
||||
<field name="template_id" on_change="on_change_template(template_id, date_start)" domain="[('type','=','template')]" attrs="{'invisible': [('type','in',['view', 'normal','template'])]}" context="{'default_type' : 'template'}"/>
|
||||
<field name="code"/>
|
||||
<field name="parent_id" on_change="on_change_parent(parent_id)" attrs="{'invisible': [('type','in',['contract'])]}"/>
|
||||
<field name="company_id" on_change="on_change_company(company_id)" widget="selection" groups="base.group_multi_company" attrs="{'required': [('type','<>','view')]}"/>
|
||||
|
|
|
@ -115,8 +115,8 @@ class account_analytic_account(osv.osv):
|
|||
digits_compute=dp.get_precision('Account')),
|
||||
}
|
||||
|
||||
def on_change_template(self, cr, uid, id, template_id, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, id, template_id, context=context)
|
||||
def on_change_template(self, cr, uid, id, template_id, date_start=False, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, id, template_id, date_start=date_start, context=context)
|
||||
if template_id and 'value' in res:
|
||||
template = self.browse(cr, uid, template_id, context=context)
|
||||
res['value']['charge_expenses'] = template.charge_expenses
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
# Swedish translation for openobject-addons
|
||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2014-03-31 21:25+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Swedish <sv@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-01 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: analytic_contract_hr_expense
|
||||
#: view:account.analytic.account:0
|
||||
msgid "or view"
|
||||
msgstr "eller visa"
|
||||
|
||||
#. module: analytic_contract_hr_expense
|
||||
#: view:account.analytic.account:0
|
||||
msgid "Nothing to invoice, create"
|
||||
msgstr "Inget att fakturera, skapa"
|
||||
|
||||
#. module: analytic_contract_hr_expense
|
||||
#: view:account.analytic.account:0
|
||||
msgid "expenses"
|
||||
msgstr "utlägg"
|
||||
|
||||
#. module: analytic_contract_hr_expense
|
||||
#: model:ir.model,name:analytic_contract_hr_expense.model_account_analytic_account
|
||||
msgid "Analytic Account"
|
||||
msgstr "Objektkonto"
|
||||
|
||||
#. module: analytic_contract_hr_expense
|
||||
#: code:addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py:144
|
||||
#, python-format
|
||||
msgid "Expenses to Invoice of %s"
|
||||
msgstr "Utlägg att fakturera av %s"
|
||||
|
||||
#. module: analytic_contract_hr_expense
|
||||
#: code:addons/analytic_contract_hr_expense/analytic_contract_hr_expense.py:136
|
||||
#, python-format
|
||||
msgid "Expenses of %s"
|
||||
msgstr "Utlägg av %s"
|
||||
|
||||
#. module: analytic_contract_hr_expense
|
||||
#: field:account.analytic.account,expense_invoiced:0
|
||||
#: field:account.analytic.account,expense_to_invoice:0
|
||||
#: field:account.analytic.account,remaining_expense:0
|
||||
msgid "unknown"
|
||||
msgstr "okänd"
|
||||
|
||||
#. module: analytic_contract_hr_expense
|
||||
#: field:account.analytic.account,est_expenses:0
|
||||
msgid "Estimation of Expenses to Invoice"
|
||||
msgstr "Uppskattning av utlägg att fakturera"
|
||||
|
||||
#. module: analytic_contract_hr_expense
|
||||
#: field:account.analytic.account,charge_expenses:0
|
||||
msgid "Charge Expenses"
|
||||
msgstr "Debitera utläggen"
|
||||
|
||||
#. module: analytic_contract_hr_expense
|
||||
#: view:account.analytic.account:0
|
||||
msgid "⇒ Invoice"
|
||||
msgstr "⇒ Faktura"
|
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2012-12-12 18:01+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
|
||||
"PO-Revision-Date: 2014-04-04 19:12+0000\n"
|
||||
"Last-Translator: Dariusz Żbikowski <Unknown>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-27 07:32+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 16976)\n"
|
||||
|
||||
#. module: auth_signup
|
||||
#: field:res.partner,signup_type:0
|
||||
|
@ -80,7 +80,7 @@ msgstr "Wprowadź hasło o potwierdź je"
|
|||
#. module: auth_signup
|
||||
#: view:res.users:0
|
||||
msgid "Send an email to the user to (re)set their password."
|
||||
msgstr ""
|
||||
msgstr "Wyślij email do użytkownika w celu zresetowania hasła"
|
||||
|
||||
#. module: auth_signup
|
||||
#. openerp-web
|
||||
|
@ -99,7 +99,7 @@ msgstr "Nowy"
|
|||
#: code:addons/auth_signup/res_users.py:258
|
||||
#, python-format
|
||||
msgid "Mail sent to:"
|
||||
msgstr ""
|
||||
msgstr "Mail wysłano do:"
|
||||
|
||||
#. module: auth_signup
|
||||
#: field:res.users,state:0
|
||||
|
@ -191,7 +191,7 @@ msgstr "Proszę wprowadź nazwę użytkownika lub adres email."
|
|||
#. module: auth_signup
|
||||
#: selection:res.users,state:0
|
||||
msgid "Resetting Password"
|
||||
msgstr ""
|
||||
msgstr "Resetowane hasło"
|
||||
|
||||
#. module: auth_signup
|
||||
#. openerp-web
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<!--Scheduler sync Receive Request-->
|
||||
<record id="gengo_sync_receive_request_scheduler" model="ir.cron">
|
||||
<field name="name" >Gengo Sync Translation (Response)</field>
|
||||
<field eval="False" name="active"/>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="interval_number">20</field>
|
||||
<field name="interval_type">minutes</field>
|
||||
<field name="numbercall">-1</field>
|
||||
|
@ -16,7 +16,7 @@
|
|||
<!--Scheduler Sync Send Request-->
|
||||
<record id="gengo_sync_send_request_scheduler" model="ir.cron">
|
||||
<field name="name" >Gengo Sync Translation (Request)</field>
|
||||
<field eval="False" name="active"/>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="interval_number">20</field>
|
||||
<field name="interval_type">minutes</field>
|
||||
<field name="numbercall">-1</field>
|
||||
|
|
|
@ -0,0 +1,249 @@
|
|||
# Swedish translation for openobject-addons
|
||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2014-03-31 16:36+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Swedish <sv@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-01 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Comments for Translator"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:ir.translation,job_id:0
|
||||
msgid "Gengo Job ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:114
|
||||
#, python-format
|
||||
msgid "This language is not supported by the Gengo translation services."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_comment:0
|
||||
msgid "Comments"
|
||||
msgstr "Kommentarer"
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_private_key:0
|
||||
msgid "Gengo Private Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.model,name:base_gengo.model_base_gengo_translations
|
||||
msgid "base.gengo.translations"
|
||||
msgstr "base.gengo.translations"
|
||||
|
||||
#. module: base_gengo
|
||||
#: help:res.company,gengo_auto_approve:0
|
||||
msgid "Jobs are Automatically Approved by Gengo."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:base.gengo.translations,lang_id:0
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:ir.translation,gengo_comment:0
|
||||
msgid "Comments & Activity Linked to Gengo"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:124
|
||||
#, python-format
|
||||
msgid "Gengo Sync Translation (Response)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:72
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Gengo `Public Key` or `Private Key` are missing. Enter your Gengo "
|
||||
"authentication parameters under `Settings > Companies > Gengo Parameters`."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Translation By Machine"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:155
|
||||
#, python-format
|
||||
msgid ""
|
||||
"%s\n"
|
||||
"\n"
|
||||
"--\n"
|
||||
" Commented on %s by %s."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:ir.translation,gengo_translation:0
|
||||
msgid "Gengo Translation Service Level"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: constraint:ir.translation:0
|
||||
msgid ""
|
||||
"The Gengo translation service selected is not supported for this language."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: help:ir.translation,gengo_translation:0
|
||||
msgid ""
|
||||
"You can select here the service level you want for an automatic translation "
|
||||
"using Gengo."
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:base.gengo.translations,restart_send_job:0
|
||||
msgid "Restart Sending Job"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid "To Approve In Gengo"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Private Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Public Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_public_key:0
|
||||
msgid "Gengo Public Key"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:123
|
||||
#, python-format
|
||||
msgid "Gengo Sync Translation (Request)"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid "Translations"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: field:res.company,gengo_auto_approve:0
|
||||
msgid "Auto Approve Translation ?"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.actions.act_window,name:base_gengo.action_wizard_base_gengo_translations
|
||||
#: model:ir.ui.menu,name:base_gengo.menu_action_wizard_base_gengo_translations
|
||||
msgid "Gengo: Manual Request of Translation"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/ir_translation.py:62
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:109
|
||||
#, python-format
|
||||
msgid "Gengo Authentication Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.model,name:base_gengo.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid ""
|
||||
"Note: If the translation state is 'In Progress', it means that the "
|
||||
"translation has to be approved to be uploaded in this system. You are "
|
||||
"supposed to do that directly by using your Gengo Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:82
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Gengo connection failed with this message:\n"
|
||||
"``%s``"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:res.company:0
|
||||
msgid "Gengo Parameters"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Ultra"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: model:ir.model,name:base_gengo.model_ir_translation
|
||||
msgid "ir.translation"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:ir.translation:0
|
||||
msgid "Gengo Translation Service"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: selection:ir.translation,gengo_translation:0
|
||||
msgid "Pro"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "Gengo Request Form"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: code:addons/base_gengo/wizard/base_gengo_translations.py:114
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: help:res.company,gengo_comment:0
|
||||
msgid ""
|
||||
"This comment will be automatically be enclosed in each an every request sent "
|
||||
"to Gengo"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_gengo
|
||||
#: view:base.gengo.translations:0
|
||||
msgid "or"
|
||||
msgstr ""
|
|
@ -23,7 +23,7 @@ from openerp.osv import fields, osv
|
|||
from openerp.tools.translate import _
|
||||
|
||||
LANG_CODE_MAPPING = {
|
||||
'ar_SA': ('ar', 'Arabic'),
|
||||
'ar_SY': ('ar', 'Arabic'),
|
||||
'id_ID': ('id', 'Indonesian'),
|
||||
'nl_NL': ('nl', 'Dutch'),
|
||||
'fr_CA': ('fr-ca', 'French (Canada)'),
|
||||
|
@ -41,7 +41,19 @@ LANG_CODE_MAPPING = {
|
|||
'fr_BE': ('fr', 'French'),
|
||||
'ru_RU': ('ru', 'Russian'),
|
||||
'it_IT': ('it', 'Italian'),
|
||||
'pt_BR': ('pt-br', 'Portuguese (Brazil)')
|
||||
'pt_BR': ('pt-br', 'Portuguese (Brazil)'),
|
||||
'th_TH': ('th', 'Thai'),
|
||||
'nb_NO': ('no', 'Norwegian'),
|
||||
'ro_RO': ('ro', 'Romanian'),
|
||||
'tr_TR': ('tr', 'Turkish'),
|
||||
'bg_BG': ('bg', 'Bulgarian'),
|
||||
'da_DK': ('da', 'Danish'),
|
||||
'en_GB': ('en-gb', 'English (British)'),
|
||||
'el_GR': ('el', 'Greek'),
|
||||
'vi_VN': ('vi', 'Vietnamese'),
|
||||
'he_IL': ('he', 'Hebrew'),
|
||||
'hu_HU': ('hu', 'Hungarian'),
|
||||
'fi_FI': ('fi', 'Finnish')
|
||||
}
|
||||
|
||||
class ir_translation(osv.Model):
|
||||
|
@ -71,18 +83,3 @@ class ir_translation(osv.Model):
|
|||
|
||||
def _get_gengo_corresponding_language(cr, lang):
|
||||
return lang in LANG_CODE_MAPPING and LANG_CODE_MAPPING[lang][0] or lang
|
||||
|
||||
def _check_lang_support(self, cr, uid, ids, context=None):
|
||||
for term in self.browse(cr, uid, ids, context=context):
|
||||
if term.gengo_translation:
|
||||
supported_langs = self._get_all_supported_languages(cr, uid, context=context)
|
||||
if supported_langs:
|
||||
tier = "nonprofit" if term.gengo_translation == 'machine' else term.gengo_translation
|
||||
language = self._get_gengo_corresponding_language(term.lang)
|
||||
if tier not in supported_langs.get(language,[]):
|
||||
return False
|
||||
return True
|
||||
|
||||
_constraints = [
|
||||
(_check_lang_support, 'The Gengo translation service selected is not supported for this language.', ['gengo_translation'])
|
||||
]
|
||||
|
|
|
@ -30,6 +30,7 @@ class res_company(osv.Model):
|
|||
"gengo_public_key": fields.text("Gengo Public Key"),
|
||||
"gengo_comment": fields.text("Comments", help="This comment will be automatically be enclosed in each an every request sent to Gengo"),
|
||||
"gengo_auto_approve": fields.boolean("Auto Approve Translation ?", help="Jobs are Automatically Approved by Gengo."),
|
||||
"gengo_sandbox": fields.boolean("Sandbox Mode", help="Check this box if you're using the sandbox mode of Gengo, mainly used for testing purpose."),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
|
|
@ -17,8 +17,13 @@
|
|||
<field name="gengo_private_key" password="True" nolabel="1" placeholder="Add Gengo login Private Key..."/>
|
||||
</group>
|
||||
</group>
|
||||
<group col="4">
|
||||
<field name="gengo_auto_approve"/>
|
||||
<group>
|
||||
<group>
|
||||
<field name="gengo_auto_approve"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="gengo_sandbox"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Comments for Translator" col="1">
|
||||
<field name="gengo_comment" nolabel="1" placeholder="Add your comments here for translator...."/>
|
||||
|
|
|
@ -40,22 +40,19 @@ except ImportError:
|
|||
|
||||
GENGO_DEFAULT_LIMIT = 20
|
||||
|
||||
DEFAULT_CRON_VALS = {
|
||||
'active': True,
|
||||
'interval_number': 20,
|
||||
'interval_type': 'minutes',
|
||||
'model': "'base.gengo.translations'",
|
||||
'args': "'(%s,)'" % (str(GENGO_DEFAULT_LIMIT)),
|
||||
}
|
||||
|
||||
class base_gengo_translations(osv.osv_memory):
|
||||
|
||||
_name = 'base.gengo.translations'
|
||||
_columns = {
|
||||
'restart_send_job': fields.boolean("Restart Sending Job"),
|
||||
'sync_type': fields.selection([('send', 'Send New Terms'),
|
||||
('receive', 'Receive Translation'),
|
||||
('both', 'Both')], "Sync Type"),
|
||||
'lang_id': fields.many2one('res.lang', 'Language', required=True),
|
||||
'sync_limit': fields.integer("No. of terms to sync"),
|
||||
}
|
||||
|
||||
_defaults = {'sync_type' : 'both',
|
||||
'sync_limit' : 20
|
||||
}
|
||||
def gengo_authentication(self, cr, uid, context=None):
|
||||
'''
|
||||
This method tries to open a connection with Gengo. For that, it uses the Public and Private
|
||||
|
@ -74,6 +71,7 @@ class base_gengo_translations(osv.osv_memory):
|
|||
gengo = MyGengo(
|
||||
public_key=user.company_id.gengo_public_key.encode('ascii'),
|
||||
private_key=user.company_id.gengo_private_key.encode('ascii'),
|
||||
sandbox=user.company_id.gengo_sandbox,
|
||||
)
|
||||
gengo.getAccountStats()
|
||||
return (True, gengo)
|
||||
|
@ -81,27 +79,11 @@ class base_gengo_translations(osv.osv_memory):
|
|||
_logger.exception('Gengo connection failed')
|
||||
return (False, _("Gengo connection failed with this message:\n``%s``") % e)
|
||||
|
||||
def do_check_schedular(self, cr, uid, xml_id, name, fn, context=None):
|
||||
"""
|
||||
This function is used to reset a cron to its default values, or to recreate it if it was deleted.
|
||||
"""
|
||||
cron_pool = self.pool.get('ir.cron')
|
||||
cron_vals = DEFAULT_CRON_VALS.copy()
|
||||
cron_vals.update({'name': name, "function": fn})
|
||||
try:
|
||||
res = []
|
||||
_, res = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base_gengo', xml_id)
|
||||
cron_pool.write(cr, uid, [res], cron_vals, context=context)
|
||||
except:
|
||||
#the cron job was not found, probably deleted previously, so we create it again using default values
|
||||
cron_vals.update({'numbercall': -1})
|
||||
return cron_pool.create(cr, uid, cron_vals, context=context)
|
||||
|
||||
def act_update(self, cr, uid, ids, context=None):
|
||||
'''
|
||||
Function called by the wizard.
|
||||
'''
|
||||
if context == None:
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
flag, gengo = self.gengo_authentication(cr, uid, context=context)
|
||||
|
@ -113,21 +95,20 @@ class base_gengo_translations(osv.osv_memory):
|
|||
if language not in supported_langs:
|
||||
raise osv.except_osv(_("Warning"), _('This language is not supported by the Gengo translation services.'))
|
||||
|
||||
#send immediately a new request for the selected language (if any)
|
||||
ctx = context.copy()
|
||||
ctx['gengo_language'] = wizard.lang_id.id
|
||||
self._sync_request(cr, uid, limit=GENGO_DEFAULT_LIMIT, context=ctx)
|
||||
self._sync_response( cr, uid, limit=GENGO_DEFAULT_LIMIT, context=ctx)
|
||||
#check the cron jobs and eventually restart/recreate them
|
||||
if wizard.restart_send_job:
|
||||
self.do_check_schedular(cr, uid, 'gengo_sync_send_request_scheduler', _('Gengo Sync Translation (Request)'), '_sync_request', context=context)
|
||||
self.do_check_schedular(cr, uid, 'gengo_sync_receive_request_scheduler', _('Gengo Sync Translation (Response)'), '_sync_response', context=context)
|
||||
if wizard.sync_limit > 200 or wizard.sync_limit < 1:
|
||||
raise osv.except_osv(_("Warning"), _('Sync limit should between 1 to 200 for Gengo translation services.'))
|
||||
if wizard.sync_type in ['send', 'both']:
|
||||
self._sync_request(cr, uid, wizard.sync_limit, context=ctx)
|
||||
if wizard.sync_type in ['receive', 'both']:
|
||||
self._sync_response(cr, uid, wizard.sync_limit, context=ctx)
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
def _sync_response(self, cr, uid, limit=GENGO_DEFAULT_LIMIT, context=None):
|
||||
"""
|
||||
This method will be called by cron services to get translations from
|
||||
Gengo. It will read translated terms and comments from Gengo and will
|
||||
Gengo. It will read translated terms and comments from Gengo and will
|
||||
update respective ir.translation in openerp.
|
||||
"""
|
||||
translation_pool = self.pool.get('ir.translation')
|
||||
|
@ -135,31 +116,38 @@ class base_gengo_translations(osv.osv_memory):
|
|||
if not flag:
|
||||
_logger.warning("%s", gengo)
|
||||
else:
|
||||
translation_id = translation_pool.search(cr, uid, [('state', '=', 'inprogress'), ('gengo_translation', 'in', ('machine','standard','pro','ultra'))], limit=limit, context=context)
|
||||
for term in translation_pool.browse(cr, uid, translation_id, context=context):
|
||||
up_term = up_comment = 0
|
||||
if term.job_id:
|
||||
vals={}
|
||||
job_response = gengo.getTranslationJob(id=term.job_id)
|
||||
if job_response['opstat'] != 'ok':
|
||||
_logger.warning("Invalid Response! Skipping translation Terms with `id` %s." % (term.job_id))
|
||||
continue
|
||||
if job_response['response']['job']['status'] == 'approved':
|
||||
vals.update({'state': 'translated',
|
||||
'value': job_response['response']['job']['body_tgt']})
|
||||
up_term += 1
|
||||
job_comment = gengo.getTranslationJobComments(id=term.job_id)
|
||||
if job_comment['opstat']=='ok':
|
||||
gengo_comments=""
|
||||
for comment in job_comment['response']['thread']:
|
||||
gengo_comments += _('%s\n\n--\n Commented on %s by %s.') % (comment['body'], time.ctime(comment['ctime']), comment['author'])
|
||||
vals.update({'gengo_comment': gengo_comments})
|
||||
up_comment += 1
|
||||
if vals:
|
||||
translation_pool.write(cr, uid, term.id, vals)
|
||||
_logger.info("Successfully Updated `%d` terms and %d Comments." % (up_term, up_comment ))
|
||||
else:
|
||||
_logger.warning("%s", 'Cannot retrieve the Gengo job ID for translation %s: %s' % (term.id, term.src))
|
||||
offset = 0
|
||||
all_translation_ids = translation_pool.search(cr, uid, [('state', '=', 'inprogress'), ('gengo_translation', 'in', ('machine', 'standard', 'pro', 'ultra')), ('job_id', "!=", False)], context=context)
|
||||
while True:
|
||||
translation_ids = all_translation_ids[offset:offset + limit]
|
||||
if translation_ids:
|
||||
offset += limit
|
||||
translation_terms = translation_pool.browse(cr, uid, translation_ids, context=context)
|
||||
gengo_job_id = [term.job_id for term in translation_terms]
|
||||
if gengo_job_id:
|
||||
gengo_ids = ','.join(gengo_job_id)
|
||||
job_response = gengo.getTranslationJobBatch(id=gengo_ids)
|
||||
if job_response['opstat'] == 'ok':
|
||||
job_response_dict = dict([(job['job_id'], job) for job in job_response['response']['jobs']])
|
||||
for term in translation_terms:
|
||||
up_term = up_comment = 0
|
||||
vals = {}
|
||||
if job_response_dict[term.job_id]['status'] == 'approved':
|
||||
vals.update({'state': 'translated',
|
||||
'value': job_response_dict[term.job_id]['body_tgt']})
|
||||
up_term += 1
|
||||
job_comment = gengo.getTranslationJobComments(id=term.job_id)
|
||||
if job_comment['opstat'] == 'ok':
|
||||
gengo_comments = ""
|
||||
for comment in job_comment['response']['thread']:
|
||||
gengo_comments += _('%s\n-- Commented on %s by %s.\n\n') % (comment['body'], time.ctime(comment['ctime']), comment['author'])
|
||||
vals.update({'gengo_comment': gengo_comments})
|
||||
up_comment += 1
|
||||
if vals:
|
||||
translation_pool.write(cr, uid, term.id, vals)
|
||||
_logger.info("Successfully Updated `%d` terms and %d Comments." % (up_term, up_comment))
|
||||
if not len(translation_ids) == limit:
|
||||
break
|
||||
return True
|
||||
|
||||
def _update_terms(self, cr, uid, response, context=None):
|
||||
|
@ -200,12 +188,13 @@ class base_gengo_translations(osv.osv_memory):
|
|||
'lc_src': 'en',
|
||||
'lc_tgt': translation_pool._get_gengo_corresponding_language(term.lang),
|
||||
'auto_approve': auto_approve,
|
||||
'comment': user.company_id.gengo_comment,
|
||||
'comment': user.company_id.gengo_comment and "%s %s"%(user.company_id.gengo_comment,term.gengo_comment) or term.gengo_comment,
|
||||
'callback_url': self.pool.get('ir.config_parameter').get_param(cr, uid,'web.base.url') + '/website/gengo_callback/' + str(term.id)
|
||||
}
|
||||
return {'jobs': jobs}
|
||||
|
||||
|
||||
def _send_translation_terms(self, cr, uid, term_ids, context=None):
|
||||
def _send_translation_terms(self, cr, uid, term_ids, context=None):
|
||||
"""
|
||||
Send a request to Gengo with all the term_ids in a different job, get the response and update the terms in
|
||||
database accordingly.
|
||||
|
@ -241,13 +230,17 @@ class base_gengo_translations(osv.osv_memory):
|
|||
#but if this specific key is given, then we restrict the request on terms of this language only
|
||||
lang_ids = [context.get('gengo_language')]
|
||||
langs = [lang.code for lang in language_pool.browse(cr, uid, lang_ids, context=context)]
|
||||
#search for the n first terms to translate
|
||||
term_ids = translation_pool.search(cr, uid, [('state', '=', 'to_translate'), ('gengo_translation', 'in', ('machine','standard','pro','ultra')), ('lang', 'in', langs)], limit=limit, context=context)
|
||||
if term_ids:
|
||||
self._send_translation_terms(cr, uid, term_ids, context=context)
|
||||
_logger.info("%s Translation terms have been posted to Gengo successfully", len(term_ids))
|
||||
else:
|
||||
_logger.info('No Translation terms to process.')
|
||||
offset = 0
|
||||
all_term_ids = translation_pool.search(cr, uid, [('state', '=', 'to_translate'), ('gengo_translation', 'in', ('machine', 'standard', 'pro', 'ultra')), ('lang', 'in', langs), ('job_id', "=", False)], context=context)
|
||||
while True:
|
||||
#search for the n first terms to translate
|
||||
term_ids = all_term_ids[offset:offset + limit]
|
||||
if term_ids:
|
||||
offset += limit
|
||||
self._send_translation_terms(cr, uid, term_ids, context=context)
|
||||
_logger.info("%s Translation terms have been posted to Gengo successfully", len(term_ids))
|
||||
if not len(term_ids) == limit:
|
||||
break
|
||||
except Exception, e:
|
||||
_logger.error("%s", e)
|
||||
|
||||
|
|
|
@ -8,7 +8,14 @@
|
|||
<form string="Gengo Request Form" version="7.0">
|
||||
<group>
|
||||
<field name="lang_id"/>
|
||||
<field name="restart_send_job"/>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="sync_type" widget="radio"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="sync_limit" required="1"/>
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="act_update" string="Send" type="object" class="oe_highlight"/>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -285,7 +285,7 @@ openerp.base_import = function (instance) {
|
|||
|
||||
callback(item_finder(default_value));
|
||||
},
|
||||
|
||||
placeholder: _t('Don\'t import'),
|
||||
width: 'resolve',
|
||||
dropdownCssClass: 'oe_import_selector'
|
||||
});
|
||||
|
|
|
@ -347,8 +347,7 @@
|
|||
<tr class="oe_import_fields">
|
||||
<!-- Iterate on first row to ensure we have all columns -->
|
||||
<td t-foreach="preview[0]" t-as="column">
|
||||
<input placeholder="Don't Import"
|
||||
class="oe_import_match_field"/>
|
||||
<input class="oe_import_match_field"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr t-foreach="preview" t-as="row" class="oe_import_grid-row">
|
||||
|
|
|
@ -126,6 +126,7 @@ class res_partner(osv.osv):
|
|||
continue
|
||||
vat_country, vat_number = self._split_vat(partner.vat)
|
||||
if not check_func(cr, uid, vat_country, vat_number, context=context):
|
||||
_logger.info(_("Importing VAT Number [%s] is not valid !" % vat_number))
|
||||
return False
|
||||
return True
|
||||
|
||||
|
@ -149,7 +150,9 @@ class res_partner(osv.osv):
|
|||
vat_no = "'CC##' (CC=Country Code, ##=VAT Number)"
|
||||
if default_vat_check(vat_country, vat_number):
|
||||
vat_no = _ref_vat[vat_country] if vat_country in _ref_vat else vat_no
|
||||
return '\n' + _('This VAT number does not seem to be valid.\nNote: the expected format is %s') % vat_no
|
||||
#Retrieve the current partner for wich the VAT is not valid
|
||||
error_partner = self.browse(cr, uid, ids, context=context)
|
||||
return '\n' + _('The VAT number [%s] for partner [%s] does not seem to be valid. \nNote: the expected format is %s') % (error_partner[0].vat, error_partner[0].name, vat_no)
|
||||
|
||||
_constraints = [(check_vat, _construct_constraint_msg, ["vat"])]
|
||||
|
||||
|
|
|
@ -714,7 +714,7 @@ class calendar_event(osv.Model):
|
|||
"""
|
||||
Return date and time (from to from) based on duration with timezone in string :
|
||||
eg.
|
||||
1) if user add duration for 2 hours, return : August-23-2013 at ( 04-30 To 06-30) (Europe/Brussels)
|
||||
1) if user add duration for 2 hours, return : August-23-2013 at (04-30 To 06-30) (Europe/Brussels)
|
||||
2) if event all day ,return : AllDay, July-31-2013
|
||||
"""
|
||||
if context is None:
|
||||
|
@ -733,7 +733,7 @@ class calendar_event(osv.Model):
|
|||
time = _("AllDay , %s") % (event_date)
|
||||
elif meeting.duration < 24:
|
||||
duration = date + timedelta(hours=meeting.duration)
|
||||
time = ("%s at ( %s To %s) (%s)") % (event_date, display_time, duration.strftime('%H-%M'), tz)
|
||||
time = ("%s at (%s To %s) (%s)") % (event_date, display_time, duration.strftime('%H-%M'), tz)
|
||||
else:
|
||||
time = ("%s at %s To\n %s at %s (%s)") % (event_date, display_time, date_deadline.strftime('%B-%d-%Y'), date_deadline.strftime('%H-%M'), tz)
|
||||
return time
|
||||
|
@ -1298,9 +1298,14 @@ class calendar_event(osv.Model):
|
|||
invitation['attendee'].append({'name': attendee.cn, 'status': attendee.state})
|
||||
return invitation
|
||||
|
||||
def get_interval(self, cr, uid, ids, date, interval, context=None):
|
||||
def get_interval(self, cr, uid, ids, date, interval, tz=None, context=None):
|
||||
#Function used only in calendar_event_data.xml for email template
|
||||
date = datetime.strptime(date.split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT)
|
||||
|
||||
if tz:
|
||||
timezone = pytz.timezone(tz or 'UTC')
|
||||
date = date.replace(tzinfo=pytz.timezone('UTC')).astimezone(timezone)
|
||||
|
||||
if interval == 'day':
|
||||
res = str(date.day)
|
||||
elif interval == 'month':
|
||||
|
@ -1582,6 +1587,8 @@ class mail_message(osv.Model):
|
|||
return super(mail_message, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count)
|
||||
|
||||
def _find_allowed_model_wise(self, cr, uid, doc_model, doc_dict, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
if doc_model == 'calendar.event':
|
||||
order = context.get('order', self._order)
|
||||
for virtual_id in self.pool[doc_model].get_recurrent_ids(cr, uid, doc_dict.keys(), [], order=order, context=context):
|
||||
|
|
|
@ -147,7 +147,7 @@
|
|||
${object.event_id.get_interval(object.event_id.date,'day')}
|
||||
</div>
|
||||
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div>
|
||||
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.event_id.get_interval(object.event_id.date, 'time')}</div>
|
||||
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${not object.event_id.allday and object.event_id.get_interval(object.event_id.date, 'time', tz=object.partner_id.tz) or ''}</div>
|
||||
</td>
|
||||
<td>
|
||||
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
|
||||
|
@ -212,7 +212,7 @@
|
|||
<td colspan="3">
|
||||
:
|
||||
% for attendee in object.event_id.attendee_ids:
|
||||
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx["color"][attendee.state]};'></div>
|
||||
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx["color"][attendee.state] or 'white'};'></div>
|
||||
% if attendee.cn != object.cn:
|
||||
<span style="margin-left:5px">${attendee.cn}</span>
|
||||
% else:
|
||||
|
@ -227,9 +227,9 @@
|
|||
</table>
|
||||
</div>
|
||||
<div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;">
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/accept?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Accept</a>
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/decline?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Decline</a>
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/view?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">View</a>
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/accept?db=${'dbname' in ctx and ctx['dbname'] or ''}&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">Accept</a>
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/decline?db=${'dbname' in ctx and ctx['dbname'] or '' }&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">Decline</a>
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/view?db=${'dbname' in ctx and ctx['dbname'] or ''}&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">View</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
@ -280,7 +280,7 @@
|
|||
${object.event_id.get_interval(object.event_id.date,'day')}
|
||||
</div>
|
||||
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div>
|
||||
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.event_id.get_interval(object.event_id.date, 'time')}</div>
|
||||
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${not object.event_id.allday and object.event_id.get_interval(object.event_id.date, 'time', tz=object.partner_id.tz) or ''}</div>
|
||||
</td>
|
||||
<td>
|
||||
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
|
||||
|
@ -345,7 +345,7 @@
|
|||
<td colspan="3">
|
||||
:
|
||||
% for attendee in object.event_id.attendee_ids:
|
||||
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx["color"][attendee.state]};'></div>
|
||||
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx["color"][attendee.state] or 'white'};'></div>
|
||||
% if attendee.cn != object.cn:
|
||||
<span style="margin-left:5px">${attendee.cn}</span>
|
||||
% else:
|
||||
|
@ -360,9 +360,9 @@
|
|||
</table>
|
||||
</div>
|
||||
<div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;">
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/accept?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Accept</a>
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/decline?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Decline</a>
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/view?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">View</a>
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/accept?db=${'dbname' in ctx and ctx['dbname'] or ''}&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">Accept</a>
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/decline?db=${'dbname' in ctx and ctx['dbname'] or ''}&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">Decline</a>
|
||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="/calendar/meeting/view?db=${'dbname' in ctx and ctx['dbname'] or ''}&token=${object.access_token}&action=${'action_id' in ctx and ctx['action_id'] or ''}&id=${object.event_id.id}">View</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
@ -412,7 +412,7 @@
|
|||
${object.event_id.get_interval(object.event_id.date,'day')}
|
||||
</div>
|
||||
<div style='font-size:12px;text-align:center;font-weight:bold;color:#ffffff;background-color:#8a89ba'>${object.event_id.get_interval(object.event_id.date, 'month')}</div>
|
||||
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${object.event_id.get_interval(object.event_id.date, 'time')}</div>
|
||||
<div style="border-collapse:separate;color:#8a89ba;text-align:center;width: 128px;font-size:12px;border-bottom-right-radius:3px;font-weight:bold;border:1px solid;border-bottom-left-radius:3px;">${not object.event_id.allday and object.event_id.get_interval(object.event_id.date, 'time', tz=object.partner_id.tz) or ''}</div>
|
||||
</td>
|
||||
<td>
|
||||
<table cellspacing="0" cellpadding="0" border="0" style="margin-top: 15px; margin-left: 10px;font-size: 16px;">
|
||||
|
@ -477,7 +477,7 @@
|
|||
<td colspan="3">
|
||||
:
|
||||
% for attendee in object.event_id.attendee_ids:
|
||||
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${ctx["color"][attendee.state]};'></div>
|
||||
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx["color"][attendee.state] or 'white'};'></div>
|
||||
% if attendee.cn != object.cn:
|
||||
<span style="margin-left:5px">${attendee.cn}</span>
|
||||
% else:
|
||||
|
|
|
@ -241,10 +241,10 @@ class crm_lead(format_address, osv.osv):
|
|||
'opt_out': fields.boolean('Opt-Out', oldname='optout',
|
||||
help="If opt-out is checked, this contact has refused to receive emails for mass mailing and marketing campaign. "
|
||||
"Filter 'Available for Mass Mailing' allows users to filter the leads when performing mass mailing."),
|
||||
'type':fields.selection([ ('lead','Lead'), ('opportunity','Opportunity'), ],'Type', help="Type is used to separate Leads and Opportunities"),
|
||||
'type': fields.selection([ ('lead','Lead'), ('opportunity','Opportunity'), ],'Type', select=True, help="Type is used to separate Leads and Opportunities"),
|
||||
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True),
|
||||
'date_closed': fields.datetime('Closed', readonly=True),
|
||||
'stage_id': fields.many2one('crm.case.stage', 'Stage', track_visibility='onchange',
|
||||
'stage_id': fields.many2one('crm.case.stage', 'Stage', track_visibility='onchange', select=True,
|
||||
domain="['&', ('section_ids', '=', section_id), '|', ('type', '=', type), ('type', '=', 'both')]"),
|
||||
'user_id': fields.many2one('res.users', 'Salesperson', select=True, track_visibility='onchange'),
|
||||
'referred': fields.char('Referred By', size=64),
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
openerp.crm_partner_assign = function (instance) {
|
||||
instance.crm_partner_assign = instance.crm_partner_assign || {};
|
||||
instance.crm_partner_assign.next_or_list = function(parent) {
|
||||
var view = parent.inner_widget.active_view;
|
||||
var controller = parent.inner_widget.views[view].controller;
|
||||
if (view === "form"){
|
||||
if (controller.dataset.size()) {
|
||||
controller.execute_pager_action('next');
|
||||
} else {
|
||||
controller.do_action('history_back');
|
||||
}
|
||||
}
|
||||
controller.do_action({ type: 'ir.actions.act_window_close' });
|
||||
if (view === "list"){
|
||||
controller.records.remove(controller.records.get(parent.dialog_widget.action.context.active_id));
|
||||
}
|
||||
};
|
||||
instance.web.client_actions.add("next_or_list", "instance.crm_partner_assign.next_or_list");
|
||||
}
|
|
@ -63,15 +63,12 @@ class crm_lead_forward_to_partner(osv.TransientModel):
|
|||
if wizard.comment:
|
||||
message += '<p>%s</p>' % wizard.comment
|
||||
for active_id in context.get('active_ids', []):
|
||||
lead_obj.message_post(cr, uid, active_id, body=message, context=context)
|
||||
lead_obj.message_post(cr, uid, active_id, body=message, subtype="mail.mt_comment", context=context)
|
||||
if values:
|
||||
lead_obj.write(cr, SUPERUSER_ID, context.get('active_ids', []), values)
|
||||
if wizard.interested:
|
||||
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
|
||||
lead_obj.convert_opportunity(cr, SUPERUSER_ID, [lead.id], lead.partner_id and lead.partner_id.id or None, context=None)
|
||||
return {
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'next_or_list',
|
||||
'params': {
|
||||
},
|
||||
'type': 'ir.actions.act_window_close',
|
||||
}
|
||||
|
|
|
@ -58,20 +58,18 @@ class sale_order(osv.Model):
|
|||
result.update(carrier_id=order.carrier_id.id)
|
||||
return result
|
||||
|
||||
def _delivery_unset(self, cr, uid, order, context=None):
|
||||
line_ids = [line.id for line in order.order_line if line.is_delivery]
|
||||
self.pool['sale.order.line'].unlink(cr, uid, line_ids, context=context)
|
||||
order.refresh()
|
||||
return True
|
||||
def _delivery_unset(self, cr, uid, ids, context=None):
|
||||
sale_obj = self.pool['sale.order.line']
|
||||
line_ids = sale_obj.search(cr, uid, [('order_id', 'in', ids), ('is_delivery', '=', True)],context=context)
|
||||
sale_obj.unlink(cr, uid, line_ids, context=context)
|
||||
|
||||
def delivery_set(self, cr, uid, ids, context=None):
|
||||
line_obj = self.pool.get('sale.order.line')
|
||||
grid_obj = self.pool.get('delivery.grid')
|
||||
carrier_obj = self.pool.get('delivery.carrier')
|
||||
acc_fp_obj = self.pool.get('account.fiscal.position')
|
||||
|
||||
self._delivery_unset(cr, uid, ids, context=context)
|
||||
for order in self.browse(cr, uid, ids, context=context):
|
||||
self._delivery_unset(cr, uid, order, context=context)
|
||||
grid_id = carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id)
|
||||
if not grid_id:
|
||||
raise osv.except_osv(_('No Grid Available!'), _('No grid matching for this carrier!'))
|
||||
|
|
|
@ -37,7 +37,7 @@ This is a complete document management system.
|
|||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'http://www.openerp.com',
|
||||
'depends': ['knowledge'],
|
||||
'depends': ['knowledge', 'mail'],
|
||||
'data': [
|
||||
'security/document_security.xml',
|
||||
'document_view.xml',
|
||||
|
|
|
@ -235,7 +235,6 @@
|
|||
<field name="partner_id"/>
|
||||
<field name="type"/>
|
||||
</tree>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
@ -244,6 +243,7 @@
|
|||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">ir.attachment</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">kanban,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new document.
|
||||
|
|
|
@ -111,16 +111,30 @@ class event_event(osv.osv):
|
|||
"""Get reserved, available, reserved but unconfirmed and used seats.
|
||||
@return: Dictionary of function field values.
|
||||
"""
|
||||
res = dict([(id, {}) for id in ids])
|
||||
for event in self.browse(cr, uid, ids, context=context):
|
||||
res[event.id]['seats_reserved'] = sum(reg.nb_register for reg in event.registration_ids if reg.state == "open")
|
||||
res[event.id]['seats_used'] = sum(reg.nb_register for reg in event.registration_ids if reg.state == "done")
|
||||
res[event.id]['seats_unconfirmed'] = sum(reg.nb_register for reg in event.registration_ids if reg.state == "draft")
|
||||
keys = {'draft': 'seats_unconfirmed', 'open':'seats_reserved', 'done': 'seats_used'}
|
||||
res = {}
|
||||
for event_id in ids:
|
||||
res[event_id] = {key:0 for key in keys.values()}
|
||||
query = "SELECT state, sum(nb_register) FROM event_registration WHERE event_id = %s AND state IN ('draft','open','done') GROUP BY state"
|
||||
for event in self.pool.get('event.event').browse(cr, uid, ids, context=context):
|
||||
cr.execute(query, (event.id,))
|
||||
reg_states = cr.fetchall()
|
||||
for reg_state in reg_states:
|
||||
res[event.id][keys[reg_state[0]]] = reg_state[1]
|
||||
res[event.id]['seats_available'] = event.seats_max - \
|
||||
(res[event.id]['seats_reserved'] + res[event.id]['seats_used']) \
|
||||
if event.seats_max > 0 else None
|
||||
return res
|
||||
|
||||
def _get_events_from_registrations(self, cr, uid, ids, context=None):
|
||||
"""Get reserved, available, reserved but unconfirmed and used seats, of the event related to a registration.
|
||||
@return: Dictionary of function field values.
|
||||
"""
|
||||
event_ids=set()
|
||||
for registration in self.browse(cr, uid, ids, context=context):
|
||||
event_ids.add(registration.event_id.id)
|
||||
return list(event_ids)
|
||||
|
||||
def _subscribe_fnc(self, cr, uid, ids, fields, args, context=None):
|
||||
"""This functional fields compute if the current user (uid) is already subscribed or not to the event passed in parameter (ids)
|
||||
"""
|
||||
|
@ -142,10 +156,18 @@ class event_event(osv.osv):
|
|||
'type': fields.many2one('event.type', 'Type of Event', readonly=False, states={'done': [('readonly', True)]}),
|
||||
'seats_max': fields.integer('Maximum Avalaible Seats', oldname='register_max', help="You can for each event define a maximum registration level. If you have too much registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'seats_min': fields.integer('Minimum Reserved Seats', oldname='register_min', help="You can for each event define a minimum registration level. If you do not enough registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'seats_reserved': fields.function(_get_seats, oldname='register_current', string='Reserved Seats', type='integer', multi='seats_reserved'),
|
||||
'seats_available': fields.function(_get_seats, oldname='register_avail', string='Available Seats', type='integer', multi='seats_reserved'),
|
||||
'seats_unconfirmed': fields.function(_get_seats, oldname='register_prospect', string='Unconfirmed Seat Reservations', type='integer', multi='seats_reserved'),
|
||||
'seats_used': fields.function(_get_seats, oldname='register_attended', string='Number of Participations', type='integer', multi='seats_reserved'),
|
||||
'seats_reserved': fields.function(_get_seats, oldname='register_current', string='Reserved Seats', type='integer', multi='seats_reserved',
|
||||
store={'event.registration': (_get_events_from_registrations, ['state'], 10),
|
||||
'event.event': (lambda self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
|
||||
'seats_available': fields.function(_get_seats, oldname='register_avail', string='Available Seats', type='integer', multi='seats_reserved',
|
||||
store={'event.registration': (_get_events_from_registrations, ['state'], 10),
|
||||
'event.event': (lambda self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
|
||||
'seats_unconfirmed': fields.function(_get_seats, oldname='register_prospect', string='Unconfirmed Seat Reservations', type='integer', multi='seats_reserved',
|
||||
store={'event.registration': (_get_events_from_registrations, ['state'], 10),
|
||||
'event.event': (lambda self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
|
||||
'seats_used': fields.function(_get_seats, oldname='register_attended', string='Number of Participations', type='integer', multi='seats_reserved',
|
||||
store={'event.registration': (_get_events_from_registrations, ['state'], 10),
|
||||
'event.event': (lambda self, cr, uid, ids, c = {}: ids, ['seats_max'], 20)}),
|
||||
'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}),
|
||||
'date_begin': fields.datetime('Start Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'date_end': fields.datetime('End Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<field name="supplier" position="after">
|
||||
<field name="speaker"/>
|
||||
<label for="speaker"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
# Swedish translation for openobject-addons
|
||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2014-03-31 20:56+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Swedish <sv@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-01 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: event_sale
|
||||
#: model:ir.model,name:event_sale.model_product_product
|
||||
msgid "Product"
|
||||
msgstr "Produkt"
|
||||
|
||||
#. module: event_sale
|
||||
#: help:product.product,event_ok:0
|
||||
msgid ""
|
||||
"Determine if a product needs to create automatically an event registration "
|
||||
"at the confirmation of a sales order line."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: help:sale.order.line,event_id:0
|
||||
msgid ""
|
||||
"Choose an event and it will automatically create a registration for this "
|
||||
"event."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: model:event.event,name:event_sale.event_technical_training
|
||||
msgid "Technical training in Grand-Rosiere"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: help:product.product,event_type_id:0
|
||||
msgid ""
|
||||
"Select event types so when we use this product in sales order lines, it will "
|
||||
"filter events of this type only."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:product.product,event_type_id:0
|
||||
msgid "Type of Event"
|
||||
msgstr "Evenemangstyp"
|
||||
|
||||
#. module: event_sale
|
||||
#: field:sale.order.line,event_ok:0
|
||||
msgid "event_ok"
|
||||
msgstr "event_ok"
|
||||
|
||||
#. module: event_sale
|
||||
#: field:product.product,event_ok:0
|
||||
msgid "Event Subscription"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:sale.order.line,event_type_id:0
|
||||
msgid "Event Type"
|
||||
msgstr "Evenemangstyp"
|
||||
|
||||
#. module: event_sale
|
||||
#: model:product.template,name:event_sale.event_product_product_template
|
||||
msgid "Technical Training"
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: code:addons/event_sale/event_sale.py:88
|
||||
#, python-format
|
||||
msgid "The registration %s has been created from the Sales Order %s."
|
||||
msgstr ""
|
||||
|
||||
#. module: event_sale
|
||||
#: field:sale.order.line,event_id:0
|
||||
msgid "Event"
|
||||
msgstr "Händelse"
|
||||
|
||||
#. module: event_sale
|
||||
#: model:ir.model,name:event_sale.model_sale_order_line
|
||||
msgid "Sales Order Line"
|
||||
msgstr "Orderrad"
|
|
@ -28,7 +28,6 @@
|
|||
'installable': True,
|
||||
'auto_install': False,
|
||||
'js': [
|
||||
'static/lib/gapi/client.js',
|
||||
'static/src/js/gdrive.js',
|
||||
],
|
||||
'data': [
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
var gapi=window.gapi=window.gapi||{};gapi._bs=new Date().getTime();(function(){var f=null,g=encodeURIComponent,k=window,m=decodeURIComponent,n="push",r="test",t="shift",u="replace",y="length",B="split",C="join";var D=k,E=document,aa=D.location,ba=function(){},ca=/\[native code\]/,G=function(a,b,c){return a[b]=a[b]||c},da=function(a){for(var b=0;b<this[y];b++)if(this[b]===a)return b;return-1},ea=function(a){a=a.sort();for(var b=[],c=void 0,d=0;d<a[y];d++){var e=a[d];e!=c&&b[n](e);c=e}return b},H=function(){var a;if((a=Object.create)&&ca[r](a))a=a(f);else{a={};for(var b in a)a[b]=void 0}return a},I=G(D,"gapi",{});var J;J=G(D,"___jsl",H());G(J,"I",0);G(J,"hel",10);var K=function(){var a=aa.href,b;if(J.dpo)b=J.h;else{b=J.h;var c=RegExp("([#].*&|[#])jsh=([^&#]*)","g"),d=RegExp("([?#].*&|[?#])jsh=([^&#]*)","g");if(a=a&&(c.exec(a)||d.exec(a)))try{b=m(a[2])}catch(e){}}return b},fa=function(a){var b=G(J,"PQ",[]);J.PQ=[];var c=b[y];if(0===c)a();else for(var d=0,e=function(){++d===c&&a()},h=0;h<c;h++)b[h](e)},L=function(a){return G(G(J,"H",H()),a,H())};var M=G(J,"perf",H()),N=G(M,"g",H()),ga=G(M,"i",H());G(M,"r",[]);H();H();var O=function(a,b,c){var d=M.r;"function"===typeof d?d(a,b,c):d[n]([a,b,c])},Q=function(a,b,c){b&&0<b[y]&&(b=P(b),c&&0<c[y]&&(b+="___"+P(c)),28<b[y]&&(b=b.substr(0,28)+(b[y]-28)),c=b,b=G(ga,"_p",H()),G(b,c,H())[a]=(new Date).getTime(),O(a,"_p",c))},P=function(a){return a[C]("__")[u](/\./g,"_")[u](/\-/g,"_")[u](/\,/g,"_")};var S=H(),T=[],U=function(a){throw Error("Bad hint"+(a?": "+a:""));};T[n](["jsl",function(a){for(var b in a)if(Object.prototype.hasOwnProperty.call(a,b)){var c=a[b];"object"==typeof c?J[b]=G(J,b,[]).concat(c):G(J,b,c)}if(b=a.u)a=G(J,"us",[]),a[n](b),(b=/^https:(.*)$/.exec(b))&&a[n]("http:"+b[1])}]);var ha=/^(\/[a-zA-Z0-9_\-]+)+$/,ia=/^[a-zA-Z0-9\-_\.!]+$/,ja=/^gapi\.loaded_[0-9]+$/,ka=/^[a-zA-Z0-9,._-]+$/,oa=function(a,b,c,d){var e=a[B](";"),h=S[e[t]()],l=f;h&&(l=h(e,b,c,d));if(!(b=!l))b=l,c=b.match(la),d=b.match(ma),b=!(d&&1===d[y]&&na[r](b)&&c&&1===c[y]);b&&U(a);return l},qa=function(a,b,c,d){a=pa(a);ja[r](c)||U("invalid_callback");b=V(b);d=d&&d[y]?V(d):f;var e=function(a){return g(a)[u](/%2C/g,",")};return[g(a.d)[u](/%2C/g,",")[u](/%2F/g,"/"),"/k=",e(a.version),"/m=",e(b),d?"/exm="+e(d):
|
||||
"","/rt=j/sv=1/d=1/ed=1",a.a?"/am="+e(a.a):"",a.b?"/rs="+e(a.b):"","/cb=",e(c)][C]("")},pa=function(a){"/"!==a.charAt(0)&&U("relative path");for(var b=a.substring(1)[B]("/"),c=[];b[y];){a=b[t]();if(!a[y]||0==a.indexOf("."))U("empty/relative directory");else if(0<a.indexOf("=")){b.unshift(a);break}c[n](a)}a={};for(var d=0,e=b[y];d<e;++d){var h=b[d][B]("="),l=m(h[0]),p=m(h[1]);2!=h[y]||(!l||!p)||(a[l]=a[l]||p)}b="/"+c[C]("/");ha[r](b)||U("invalid_prefix");c=W(a,"k",!0);d=W(a,"am");a=W(a,"rs");return{d:b,
|
||||
version:c,a:d,b:a}},V=function(a){for(var b=[],c=0,d=a[y];c<d;++c){var e=a[c][u](/\./g,"_")[u](/-/g,"_");ka[r](e)&&b[n](e)}return b[C](",")},W=function(a,b,c){a=a[b];!a&&c&&U("missing: "+b);if(a){if(ia[r](a))return a;U("invalid: "+b)}return f},na=/^https?:\/\/[a-z0-9_.-]+\.google\.com(:\d+)?\/[a-zA-Z0-9_.,!=\-\/]+$/,ma=/\/cb=/g,la=/\/\//g,ra=function(){var a=K();if(!a)throw Error("Bad hint");return a};S.m=function(a,b,c,d){(a=a[0])||U("missing_hint");return"https://apis.google.com"+qa(a,b,c,d)};var X=decodeURI("%73cript"),Y=function(a,b){for(var c=[],d=0;d<a[y];++d){var e=a[d];e&&0>da.call(b,e)&&c[n](e)}return c},sa=function(a){"loading"!=E.readyState?Z(a):E.write("<"+X+' src="'+encodeURI(a)+'"></'+X+">")},Z=function(a){var b=E.createElement(X);b.setAttribute("src",a);b.async="true";(a=E.getElementsByTagName(X)[0])?a.parentNode.insertBefore(b,a):(E.head||E.body||E.documentElement).appendChild(b)},ta=function(a,b){var c=b&&b._c;if(c)for(var d=0;d<T[y];d++){var e=T[d][0],h=T[d][1];h&&Object.prototype.hasOwnProperty.call(c,
|
||||
e)&&h(c[e],a,b)}},ua=function(a,b){$(function(){var c;c=b===K()?G(I,"_",H()):H();c=G(L(b),"_",c);a(c)})},wa=function(a,b){var c=b||{};"function"==typeof b&&(c={},c.callback=b);ta(a,c);var d=a?a[B](":"):[],e=c.h||ra(),h=G(J,"ah",H());if(!h["::"]||!d[y])va(d||[],c,e);else{for(var l=[],p=f;p=d[t]();){var v=p[B]("."),v=h[p]||h[v[1]&&"ns:"+v[0]||""]||e,s=l[y]&&l[l[y]-1]||f,z=s;if(!s||s.hint!=v)z={hint:v,c:[]},l[n](z);z.c[n](p)}var A=l[y];if(1<A){var F=c.callback;F&&(c.callback=function(){0==--A&&F()})}for(;d=
|
||||
l[t]();)va(d.c,c,d.hint)}},va=function(a,b,c){a=ea(a)||[];var d=b.callback,e=b.config,h=b.timeout,l=b.ontimeout,p=f,v=!1;if(h&&!l||!h&&l)throw"Timeout requires both the timeout parameter and ontimeout parameter to be set";var s=G(L(c),"r",[]).sort(),z=G(L(c),"L",[]).sort(),A=[].concat(s),F=function(a,b){if(v)return 0;D.clearTimeout(p);z[n].apply(z,q);var d=((I||{}).config||{}).update;d?d(e):e&&G(J,"cu",[])[n](e);if(b){Q("me0",a,A);try{ua(b,c)}finally{Q("me1",a,A)}}return 1};0<h&&(p=D.setTimeout(function(){v=
|
||||
!0;l()},h));var q=Y(a,z);if(q[y]){var q=Y(a,s),w=G(J,"CP",[]),x=w[y];w[x]=function(a){if(!a)return 0;Q("ml1",q,A);var b=function(b){w[x]=f;F(q,a)&&fa(function(){d&&d();b()})},c=function(){var a=w[x+1];a&&a()};0<x&&w[x-1]?w[x]=function(){b(c)}:b(c)};if(q[y]){var R="loaded_"+J.I++;I[R]=function(a){w[x](a);I[R]=f};a=oa(c,q,"gapi."+R,s);s[n].apply(s,q);Q("ml0",q,A);b.sync||D.___gapisync?sa(a):Z(a)}else w[x](ba)}else F(q)&&d&&d()};var $=function(a){if(J.hee&&0<J.hel)try{return a()}catch(b){J.hel--,wa("debug_error",function(){k.___jsl.hefn(b)})}else return a()};I.load=function(a,b){return $(function(){return wa(a,b)})};N.bs0=k.gapi._bs||(new Date).getTime();O("bs0");N.bs1=(new Date).getTime();O("bs1");delete k.gapi._bs;})();
|
||||
gapi.load("client",{callback:window["gapi_onload"],_c:{"jsl":{"ci":{"services":{},"deviceType":"desktop","lexps":[102,103,100,71,98,96,110,108,79,106,45,17,86,81,112,61,30],"inline":{"css":1},"report":{},"oauth-flow":{"disableOpt":true,"authUrl":"https://accounts.google.com/o/oauth2/auth","proxyUrl":"https://accounts.google.com/o/oauth2/postmessageRelay","persist":true},"isLoggedIn":true,"isPlusUser":true,"iframes":{"additnow":{"methods":["launchurl"],"url":"https://apis.google.com/additnow/additnow.html?bsv"},"shortlists":{"url":"?bsv"},"plus":{"methods":["onauth"],"url":":socialhost:/u/:session_index:/_/pages/badge?bsv"},":socialhost:":"https://plusone.google.com","recobox":{"params":{"url":""},"url":":socialhost:/:session_prefix:_/widget/render/recobox?bsv"},"plus_followers":{"params":{"url":""},"url":":socialhost:/_/im/_/widget/render/plus/followers?bsv"},"autocomplete":{"params":{"url":""},"url":":socialhost:/:session_prefix:_/widget/render/autocomplete?bsv"},"plus_share":{"params":{"url":""},"url":":socialhost:/:session_prefix:_/+1/sharebutton?plusShare\u003dtrue\u0026bsv"},"savetowallet":{"url":"https://clients5.google.com/s2w/o/savetowallet?bsv"},"panoembed":{"url":"https://ssl.gstatic.com/pano/embed/?bsv"},"signin":{"methods":["onauth"],"params":{"url":""},"url":":socialhost:/:session_prefix:_/widget/render/signin?bsv"},"appcirclepicker":{"url":":socialhost:/:session_prefix:_/widget/render/appcirclepicker?bsv"},"commentcount":{"url":":socialhost:/:session_prefix:_/widget/render/commentcount?bsv"},"hangout":{"url":"https://talkgadget.google.com/:session_prefix:talkgadget/_/widget?bsv"},"plus_circle":{"params":{"url":""},"url":":socialhost:/:session_prefix:_/widget/plus/circle?bsv"},"savetodrive":{"methods":["save"],"url":"https://drive.google.com/savetodrivebutton?usegapi\u003d1\u0026bsv"},"card":{"url":":socialhost:/:session_prefix:_/hovercard/card?bsv"},"evwidget":{"params":{"url":""},"url":":socialhost:/:session_prefix:_/events/widget?bsv"},"zoomableimage":{"url":"https://ssl.gstatic.com/microscope/embed/?bsv"},":signuphost:":"https://plus.google.com","plusone":{"preloadUrl":["https://ssl.gstatic.com/s2/oz/images/stars/po/Publisher/sprite4-a67f741843ffc4220554c34bd01bb0bb.png"],"params":{"count":"","size":"","url":""},"url":":socialhost:/:session_prefix:_/+1/fastbutton?bsv"},"comments":{"methods":["scroll","openwindow"],"params":{"location":["search","hash"]},"url":":socialhost:/:session_prefix:_/widget/render/comments?bsv"}},"debug":{"host":"https://plusone.google.com","reportExceptionRate":0.05,"rethrowException":true},"csi":{"rate":0.01},"googleapis.config":{"mobilesignupurl":"https://m.google.com/app/plus/oob?"}},"h":"m;/_/scs/apps-static/_/js/k\u003doz.gapi.en.02N985CHyyc.O/m\u003d__features__/am\u003dIQ/rt\u003dj/d\u003d1/rs\u003dAItRSTPZZ0JVQCv9Qljsu0NQlsb1ZzD2zQ","u":"https://apis.google.com/js/client.js","hee":true,"fp":"e2aa6cd0095417dbec61deca3abed1394160dab3","dpo":false},"fp":"e2aa6cd0095417dbec61deca3abed1394160dab3","annotation":["autocomplete","profile","interactivepost"],"bimodal":["signin"]}});
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2013-06-22 10:54+0000\n"
|
||||
"PO-Revision-Date: 2014-04-04 19:21+0000\n"
|
||||
"Last-Translator: Dariusz Kubiak <d.kubiak@macopedia.pl>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-27 06:53+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 16976)\n"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: selection:hr.holidays.status,color_name:0
|
||||
|
@ -680,7 +680,7 @@ msgstr "Podsumowanie"
|
|||
#. module: hr_holidays
|
||||
#: model:hr.holidays.status,name:hr_holidays.holiday_status_unpaid
|
||||
msgid "Unpaid"
|
||||
msgstr "Bezpłatny"
|
||||
msgstr "Urlop bezpłatny"
|
||||
|
||||
#. module: hr_holidays
|
||||
#: xsl:holidays.summary:0
|
||||
|
|
|
@ -571,7 +571,7 @@ class hr_payslip(osv.osv):
|
|||
payslip_obj = Payslips(self.pool, cr, uid, payslip.employee_id.id, payslip)
|
||||
rules_obj = BrowsableObject(self.pool, cr, uid, payslip.employee_id.id, rules)
|
||||
|
||||
localdict = {'categories': categories_obj, 'rules': rules_obj, 'payslip': payslip_obj, 'worked_days': worked_days_obj, 'inputs': input_obj}
|
||||
baselocaldict = {'categories': categories_obj, 'rules': rules_obj, 'payslip': payslip_obj, 'worked_days': worked_days_obj, 'inputs': input_obj}
|
||||
#get the ids of the structures on the contracts and their parent id as well
|
||||
structure_ids = self.pool.get('hr.contract').get_all_structures(cr, uid, contract_ids, context=context)
|
||||
#get the rules of the structure and thier children
|
||||
|
@ -581,11 +581,12 @@ class hr_payslip(osv.osv):
|
|||
|
||||
for contract in self.pool.get('hr.contract').browse(cr, uid, contract_ids, context=context):
|
||||
employee = contract.employee_id
|
||||
localdict.update({'employee': employee, 'contract': contract})
|
||||
localdict = dict(baselocaldict, employee=employee, contract=contract)
|
||||
for rule in obj_rule.browse(cr, uid, sorted_rule_ids, context=context):
|
||||
key = rule.code + '-' + str(contract.id)
|
||||
localdict['result'] = None
|
||||
localdict['result_qty'] = 1.0
|
||||
localdict['result_rate'] = 100
|
||||
#check if the rule can be applied
|
||||
if obj_rule.satisfy_condition(cr, uid, rule.id, localdict, context=context) and rule.id not in blacklist:
|
||||
#compute the amount of the rule
|
||||
|
|
|
@ -5,12 +5,7 @@
|
|||
<h3 class="oe_slogan">Organize your vacancies and applications</h3>
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website_hr">
|
||||
<img src="">
|
||||
</a>
|
||||
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<p class='oe_mt32'>
|
||||
|
|
|
@ -207,8 +207,8 @@ class account_analytic_account(osv.osv):
|
|||
'use_timesheets': fields.boolean('Timesheets', help="Check this field if this project manages timesheets"),
|
||||
}
|
||||
|
||||
def on_change_template(self, cr, uid, ids, template_id, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, context=context)
|
||||
def on_change_template(self, cr, uid, ids, template_id, date_start=False, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, date_start=date_start, context=context)
|
||||
if template_id and 'value' in res:
|
||||
template = self.browse(cr, uid, template_id, context=context)
|
||||
res['value']['use_timesheets'] = template.use_timesheets
|
||||
|
|
|
@ -54,11 +54,10 @@ class EscposDriver(Thread):
|
|||
return connected
|
||||
|
||||
def lockedstart(self):
|
||||
self.lock.acquire()
|
||||
if not self.isAlive():
|
||||
self.daemon = True
|
||||
self.start()
|
||||
self.lock.release()
|
||||
with self.lock:
|
||||
if not self.isAlive():
|
||||
self.daemon = True
|
||||
self.start()
|
||||
|
||||
def get_escpos_printer(self):
|
||||
try:
|
||||
|
|
|
@ -88,10 +88,10 @@ class Scanner(Thread):
|
|||
}
|
||||
|
||||
def lockedstart(self):
|
||||
self.lock.acquire()
|
||||
if not self.isAlive():
|
||||
self.start()
|
||||
self.lock.release()
|
||||
with self.lock:
|
||||
if not self.isAlive():
|
||||
self.daemon = True
|
||||
self.start()
|
||||
|
||||
def set_status(self, status, message = None):
|
||||
if status == self.status['status']:
|
||||
|
|
|
@ -2052,6 +2052,8 @@
|
|||
<field name="description">VAT-IN-V82-CAR-EXC-C1</field>
|
||||
<field name="name">Frais de voiture - VAT 50% Non Deductible</field>
|
||||
<field name="parent_id" ref="attn_VAT-IN-V82-CAR-EXC"/>
|
||||
<field name="account_collected_id" ref="a64012"/>
|
||||
<field name="account_paid_id" ref="a64012"/>
|
||||
<field name="price_include" eval="0"/>
|
||||
<field name="amount">0.105</field>
|
||||
<field name="type">percent</field>
|
||||
|
|
|
@ -40,11 +40,6 @@
|
|||
<field name="tax_src_id" ref="tva_normale" />
|
||||
<field name="tax_dest_id" ref="tva_intra_0" />
|
||||
</record>
|
||||
<record id="fp_tax_template_intraeub2b_vt_normale_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
<field name="tax_src_id" ref="tva_normale_temp" />
|
||||
<field name="tax_dest_id" ref="tva_intra_0" />
|
||||
</record>
|
||||
<!-- Taux DOM-TOM -->
|
||||
<record id="fp_tax_template_intraeub2b_vt_specifique" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
|
@ -57,22 +52,12 @@
|
|||
<field name="tax_src_id" ref="tva_intermediaire" />
|
||||
<field name="tax_dest_id" ref="tva_intra_0" />
|
||||
</record>
|
||||
<record id="fp_tax_template_intraeub2b_vt_intermediaire_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
<field name="tax_src_id" ref="tva_intermediaire_temp" />
|
||||
<field name="tax_dest_id" ref="tva_intra_0" />
|
||||
</record>
|
||||
<!-- Taux réduit -->
|
||||
<record id="fp_tax_template_intraeub2b_vt_reduite" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
<field name="tax_src_id" ref="tva_reduite" />
|
||||
<field name="tax_dest_id" ref="tva_intra_0" />
|
||||
</record>
|
||||
<record id="fp_tax_template_intraeub2b_vt_reduite_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
<field name="tax_src_id" ref="tva_reduite_temp" />
|
||||
<field name="tax_dest_id" ref="tva_intra_0" />
|
||||
</record>
|
||||
<!-- Taux super réduit -->
|
||||
<record id="fp_tax_template_intraeub2b_vt_super_reduite" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
|
@ -91,17 +76,6 @@
|
|||
<field name="tax_src_id" ref="tva_acq_normale" />
|
||||
<field name="tax_dest_id" ref="tva_acq_intra_normale" />
|
||||
</record>
|
||||
<record id="fp_tax_template_intraeub2b_ha_normale_deduc_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
<field name="tax_src_id" ref="tva_acq_normale_temp" />
|
||||
<field name="tax_dest_id" ref="tva_intra_normale_temp" />
|
||||
</record>
|
||||
<record id="fp_tax_template_intraeub2b_ha_normale_acq_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
<field name="tax_src_id" ref="tva_acq_normale_temp" />
|
||||
<field name="tax_dest_id" ref="tva_acq_intra_normale_temp" />
|
||||
</record>
|
||||
|
||||
<!-- Taux DOM-TOM -->
|
||||
<record id="fp_tax_template_intraeub2b_ha_specifique_deduc" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
|
@ -124,17 +98,6 @@
|
|||
<field name="tax_src_id" ref="tva_acq_intermediaire" />
|
||||
<field name="tax_dest_id" ref="tva_acq_intra_intermediaire" />
|
||||
</record>
|
||||
<record id="fp_tax_template_intraeub2b_ha_intermediaire_deduc_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
<field name="tax_src_id" ref="tva_acq_intermediaire_temp" />
|
||||
<field name="tax_dest_id" ref="tva_intra_intermediaire_temp" />
|
||||
</record>
|
||||
<record id="fp_tax_template_intraeub2b_ha_intermediaire_acq_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
<field name="tax_src_id" ref="tva_acq_intermediaire_temp" />
|
||||
<field name="tax_dest_id" ref="tva_acq_intra_intermediaire_temp" />
|
||||
</record>
|
||||
|
||||
<!-- Taux réduit -->
|
||||
<record id="fp_tax_template_intraeub2b_ha_reduite_deduc" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
|
@ -146,17 +109,6 @@
|
|||
<field name="tax_src_id" ref="tva_acq_reduite" />
|
||||
<field name="tax_dest_id" ref="tva_acq_intra_reduite" />
|
||||
</record>
|
||||
<record id="fp_tax_template_intraeub2b_ha_reduite_deduc_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
<field name="tax_src_id" ref="tva_acq_reduite_temp" />
|
||||
<field name="tax_dest_id" ref="tva_intra_reduite_temp" />
|
||||
</record>
|
||||
<record id="fp_tax_template_intraeub2b_ha_reduite_acq_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
<field name="tax_src_id" ref="tva_acq_reduite_temp" />
|
||||
<field name="tax_dest_id" ref="tva_acq_intra_reduite_temp" />
|
||||
</record>
|
||||
|
||||
<!-- Taux super réduit -->
|
||||
<record id="fp_tax_template_intraeub2b_ha_super_reduite_deduc" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_intraeub2b" />
|
||||
|
@ -177,11 +129,6 @@
|
|||
<field name="tax_src_id" ref="tva_normale" />
|
||||
<field name="tax_dest_id" ref="tva_export_0" />
|
||||
</record>
|
||||
<record id="fp_tax_template_impexp_vt_normale_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
<field name="tax_src_id" ref="tva_normale_temp" />
|
||||
<field name="tax_dest_id" ref="tva_export_0" />
|
||||
</record>
|
||||
<!-- Taux DOM-TOM -->
|
||||
<record id="fp_tax_template_impexp_vt_specifique" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
|
@ -194,22 +141,12 @@
|
|||
<field name="tax_src_id" ref="tva_intermediaire" />
|
||||
<field name="tax_dest_id" ref="tva_export_0" />
|
||||
</record>
|
||||
<record id="fp_tax_template_impexp_vt_intermediaire_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
<field name="tax_src_id" ref="tva_intermediaire_temp" />
|
||||
<field name="tax_dest_id" ref="tva_export_0" />
|
||||
</record>
|
||||
<!-- Taux Réduit -->
|
||||
<record id="fp_tax_template_impexp_vt_reduite" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
<field name="tax_src_id" ref="tva_reduite" />
|
||||
<field name="tax_dest_id" ref="tva_export_0" />
|
||||
</record>
|
||||
<record id="fp_tax_template_impexp_vt_reduite_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
<field name="tax_src_id" ref="tva_reduite_temp" />
|
||||
<field name="tax_dest_id" ref="tva_export_0" />
|
||||
</record>
|
||||
<!-- Taux super réduit -->
|
||||
<record id="fp_tax_template_impexp_vt_super_reduite" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
|
@ -224,11 +161,6 @@
|
|||
<field name="tax_src_id" ref="tva_acq_normale" />
|
||||
<field name="tax_dest_id" ref="tva_import_0" />
|
||||
</record>
|
||||
<record id="fp_tax_template_impexp_ha_normale_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
<field name="tax_src_id" ref="tva_acq_normale_temp" />
|
||||
<field name="tax_dest_id" ref="tva_import_0" />
|
||||
</record>
|
||||
<!-- Taux DOM-TOM -->
|
||||
<record id="fp_tax_template_impexp_ha_specifique" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
|
@ -241,23 +173,12 @@
|
|||
<field name="tax_src_id" ref="tva_acq_intermediaire" />
|
||||
<field name="tax_dest_id" ref="tva_import_0" />
|
||||
</record>
|
||||
<record id="fp_tax_template_impexp_ha_intermediaire_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
<field name="tax_src_id" ref="tva_acq_intermediaire_temp" />
|
||||
<field name="tax_dest_id" ref="tva_import_0" />
|
||||
</record>
|
||||
<!-- Taux Réduit -->
|
||||
<record id="fp_tax_template_impexp_ha_reduite" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
<field name="tax_src_id" ref="tva_acq_reduite" />
|
||||
<field name="tax_dest_id" ref="tva_import_0" />
|
||||
</record>
|
||||
<record id="fp_tax_template_impexp_ha_reduite_temp" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
<field name="tax_src_id" ref="tva_acq_reduite_temp" />
|
||||
<field name="tax_dest_id" ref="tva_import_0" />
|
||||
</record>
|
||||
|
||||
<!-- Taux super réduit -->
|
||||
<record id="fp_tax_template_impexp_ha_super_reduite" model="account.fiscal.position.tax.template">
|
||||
<field name="position_id" ref="fiscal_position_template_import_export" />
|
||||
|
|
|
@ -29,28 +29,6 @@
|
|||
<field name="sequence" eval="1"/>
|
||||
<field name="type_tax_use">sale</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_normale_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA collectée (vente) 19,6%</field>
|
||||
<field name="description">19.6</field>
|
||||
<field name="amount" eval="0.196"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_col_196_ht"/>
|
||||
<field name="base_sign" eval="1"/>
|
||||
<field name="tax_code_id" ref="tax_col_196"/>
|
||||
<field name="tax_sign" eval="1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_445711"/>
|
||||
<field name="account_paid_id" ref="pcg_445711"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_col_196_ht"/>
|
||||
<field name="ref_base_sign" eval="-1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_col_196"/>
|
||||
<field name="ref_tax_sign" eval="-1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">sale</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_specifique">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
|
@ -96,51 +74,7 @@
|
|||
<field name="type_tax_use">sale</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_intermediaire_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA collectée (vente) 7,0%</field>
|
||||
<field name="description">7.0</field>
|
||||
<field name="amount" eval="0.07"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_col_70_ht"/>
|
||||
<field name="base_sign" eval="1"/>
|
||||
<field name="tax_code_id" ref="tax_col_70"/>
|
||||
<field name="tax_sign" eval="1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_445712"/>
|
||||
<field name="account_paid_id" ref="pcg_445712"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_col_70_ht"/>
|
||||
<field name="ref_base_sign" eval="-1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_col_70"/>
|
||||
<field name="ref_tax_sign" eval="-1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">sale</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_reduite">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA collectée (vente) 5,0%</field>
|
||||
<field name="description">5.0</field>
|
||||
<field name="amount" eval="0.050"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_col_50_ht"/>
|
||||
<field name="base_sign" eval="1"/>
|
||||
<field name="tax_code_id" ref="tax_col_50"/>
|
||||
<field name="tax_sign" eval="1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_445713"/>
|
||||
<field name="account_paid_id" ref="pcg_445713"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_col_50_ht"/>
|
||||
<field name="ref_base_sign" eval="-1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_col_50"/>
|
||||
<field name="ref_tax_sign" eval="-1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">sale</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_reduite_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA collectée (vente) 5,5%</field>
|
||||
<field name="description">5.5</field>
|
||||
|
@ -208,28 +142,6 @@
|
|||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_normale_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déductible (achat) 19,6%</field>
|
||||
<field name="description">ACH-19.6</field>
|
||||
<field name="amount" eval="0.196"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_acq_196_ht"/>
|
||||
<field name="base_sign" eval="-1"/>
|
||||
<field name="tax_code_id" ref="tax_acq_196"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_44566"/>
|
||||
<field name="account_paid_id" ref="pcg_44566"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_acq_196_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_acq_196"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_specifique">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déductible (achat) 8,5%</field>
|
||||
|
@ -274,51 +186,7 @@
|
|||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_intermediaire_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déductible (achat) 7,0%</field>
|
||||
<field name="description">ACH-7.0</field>
|
||||
<field name="amount" eval="0.07"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_acq_70_ht"/>
|
||||
<field name="base_sign" eval="-1"/>
|
||||
<field name="tax_code_id" ref="tax_acq_70"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_44566"/>
|
||||
<field name="account_paid_id" ref="pcg_44566"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_acq_70_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_acq_70"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_reduite">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déductible (achat) 5,0%</field>
|
||||
<field name="description">ACH-5.0</field>
|
||||
<field name="amount" eval="0.050"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_acq_50_ht"/>
|
||||
<field name="base_sign" eval="-1"/>
|
||||
<field name="tax_code_id" ref="tax_acq_50"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_44566"/>
|
||||
<field name="account_paid_id" ref="pcg_44566"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_acq_50_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_acq_50"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_reduite_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déductible (achat) 5,5%</field>
|
||||
<field name="description">ACH-5.5</field>
|
||||
|
@ -387,29 +255,6 @@
|
|||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_normale_TTC_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déductible (achat) 19,6% TTC</field>
|
||||
<field name="description">ACH-19.6-TTC</field>
|
||||
<field name="price_include" eval="1"/>
|
||||
<field name="amount" eval="0.196"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_acq_196_ht"/>
|
||||
<field name="base_sign" eval="-1"/>
|
||||
<field name="tax_code_id" ref="tax_acq_196"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_44566"/>
|
||||
<field name="account_paid_id" ref="pcg_44566"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_acq_196_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_acq_196"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_specifique_TTC">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déductible (achat) 8,5% TTC</field>
|
||||
|
@ -456,53 +301,7 @@
|
|||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_intermediaire_TTC_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déductible (achat) 7,0% TTC</field>
|
||||
<field name="description">ACH-7.0-TTC</field>
|
||||
<field name="price_include" eval="1"/>
|
||||
<field name="amount" eval="0.07"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_acq_70_ht"/>
|
||||
<field name="base_sign" eval="-1"/>
|
||||
<field name="tax_code_id" ref="tax_acq_70"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_44566"/>
|
||||
<field name="account_paid_id" ref="pcg_44566"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_acq_70_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_acq_70"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_reduite_TTC">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déductible (achat) 5,0% TTC</field>
|
||||
<field name="description">ACH-5.0-TTC</field>
|
||||
<field name="price_include" eval="1"/>
|
||||
<field name="amount" eval="0.050"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_acq_50_ht"/>
|
||||
<field name="base_sign" eval="-1"/>
|
||||
<field name="tax_code_id" ref="tax_acq_50"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_44566"/>
|
||||
<field name="account_paid_id" ref="pcg_44566"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_acq_50_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_acq_50"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_reduite_TTC_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déductible (achat) 5,5% TTC</field>
|
||||
<field name="description">ACH-5.5-TTC</field>
|
||||
|
@ -573,28 +372,6 @@
|
|||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_imm_normale_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déd./immobilisation (achat) 19,6%</field>
|
||||
<field name="description">IMMO-19.6</field>
|
||||
<field name="amount" eval="0.196"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_imm_196_ht"/>
|
||||
<field name="base_sign" eval="-1"/>
|
||||
<field name="tax_code_id" ref="tax_imm_196"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_44562"/>
|
||||
<field name="account_paid_id" ref="pcg_44562"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_imm_196_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_imm_196"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_imm_specifique">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déd./immobilisation (achat) 8,5%</field>
|
||||
|
@ -639,51 +416,7 @@
|
|||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_imm_intermediaire_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déd./immobilisation (achat) 7,0%</field>
|
||||
<field name="description">IMMO-7.0</field>
|
||||
<field name="amount" eval="0.07"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_imm_70_ht"/>
|
||||
<field name="base_sign" eval="-1"/>
|
||||
<field name="tax_code_id" ref="tax_imm_70"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_44562"/>
|
||||
<field name="account_paid_id" ref="pcg_44562"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_imm_70_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_imm_70"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_imm_reduite">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déd./immobilisation (achat) 5,0%</field>
|
||||
<field name="description">IMMO-5.0</field>
|
||||
<field name="amount" eval="0.050"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_imm_50_ht"/>
|
||||
<field name="base_sign" eval="-1"/>
|
||||
<field name="tax_code_id" ref="tax_imm_50"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_44562"/>
|
||||
<field name="account_paid_id" ref="pcg_44562"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_imm_50_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_imm_50"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_imm_reduite_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déd./immobilisation (achat) 5,5%</field>
|
||||
<field name="description">IMMO-5.5</field>
|
||||
|
@ -751,28 +484,6 @@
|
|||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_intra_normale_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA due s/ acq. intracommunautaire (achat) 19,6%</field> <!-- ventes -->
|
||||
<field name="description">ACH_UE_due-19.6</field>
|
||||
<field name="amount" eval="-0.196"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_intra_196_ht"/>
|
||||
<field name="base_sign" eval="-1" />
|
||||
<field name="tax_code_id" ref="tax_intra_196"/>
|
||||
<field name="tax_sign" eval="-1" />
|
||||
|
||||
<field name="account_collected_id" ref="pcg_445201"/>
|
||||
<field name="account_paid_id" ref="pcg_445201"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_intra_196_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_intra_196"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_intra_specifique">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA due s/ acq. intracommunautaire (achat) 8,5%</field>
|
||||
|
@ -817,51 +528,7 @@
|
|||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_intra_intermediaire_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA due s/ acq. intracommunautaire (achat) 7,0%</field>
|
||||
<field name="description">ACH_UE_due-7.0</field>
|
||||
<field name="amount" eval="-0.07"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_intra_70_ht"/>
|
||||
<field name="base_sign" eval="-1" />
|
||||
<field name="tax_code_id" ref="tax_intra_70"/>
|
||||
<field name="tax_sign" eval="-1" />
|
||||
|
||||
<field name="account_collected_id" ref="pcg_445202"/>
|
||||
<field name="account_paid_id" ref="pcg_445202"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_intra_70_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_intra_70"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_intra_reduite">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA due s/ acq. intracommunautaire (achat) 5,0%</field>
|
||||
<field name="description">ACH_UE_due-5.0</field>
|
||||
<field name="amount" eval="-0.050"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="base_code_id" ref="tax_intra_50_ht"/>
|
||||
<field name="base_sign" eval="-1" />
|
||||
<field name="tax_code_id" ref="tax_intra_50"/>
|
||||
<field name="tax_sign" eval="-1" />
|
||||
|
||||
<field name="account_collected_id" ref="pcg_445203"/>
|
||||
<field name="account_paid_id" ref="pcg_445203"/>
|
||||
|
||||
<field name="ref_base_code_id" ref="tax_intra_50_ht"/>
|
||||
<field name="ref_base_sign" eval="1"/>
|
||||
<field name="ref_tax_code_id" ref="tax_intra_50"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_intra_reduite_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA due s/ acq. intracommunautaire (achat) 5,5%</field>
|
||||
<field name="description">ACH_UE_due-5.5</field>
|
||||
|
@ -925,24 +592,6 @@
|
|||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_intra_normale_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déd. s/ acq. intracommunautaire (achat) 19,6%</field>
|
||||
<field name="description">ACH_UE_ded.-19.6</field>
|
||||
<field name="amount" eval="0.196"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="tax_code_id" ref="tax_intra_acq_196"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_445662"/>
|
||||
<field name="account_paid_id" ref="pcg_445662"/>
|
||||
|
||||
<field name="ref_tax_code_id" ref="tax_intra_acq_196"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_intra_specifique">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déd. s/ acq. intracommunautaire (achat) 8,5%</field>
|
||||
|
@ -979,43 +628,7 @@
|
|||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_intra_intermediaire_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déd. s/ acq. intracommunautaire (achat) 7,0%</field>
|
||||
<field name="description">ACH_UE_ded.-7.0</field>
|
||||
<field name="amount" eval="0.07"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="tax_code_id" ref="tax_intra_acq_70"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_445662"/>
|
||||
<field name="account_paid_id" ref="pcg_445662"/>
|
||||
|
||||
<field name="ref_tax_code_id" ref="tax_intra_acq_70"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_intra_reduite">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déd. s/ acq. intracommunautaire (achat) 5,0%</field>
|
||||
<field name="description">ACH_UE_ded.-5.0</field>
|
||||
<field name="amount" eval="0.050"/>
|
||||
<field name="type">percent</field>
|
||||
<field name="tax_code_id" ref="tax_intra_acq_50"/>
|
||||
<field name="tax_sign" eval="-1"/>
|
||||
|
||||
<field name="account_collected_id" ref="pcg_445662"/>
|
||||
<field name="account_paid_id" ref="pcg_445662"/>
|
||||
|
||||
<field name="ref_tax_code_id" ref="tax_intra_acq_50"/>
|
||||
<field name="ref_tax_sign" eval="1"/>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
</record>
|
||||
|
||||
<record model="account.tax.template" id="tva_acq_intra_reduite_temp">
|
||||
<field name="chart_template_id" ref="l10n_fr_pcg_chart_template"/>
|
||||
<field name="name">TVA déd. s/ acq. intracommunautaire (achat) 5,5%</field>
|
||||
<field name="description">ACH_UE_ded.-5.5</field>
|
||||
|
|
|
@ -44,8 +44,6 @@ Con la Colaboración de
|
|||
],
|
||||
"demo_xml": [
|
||||
],
|
||||
"data": [
|
||||
],
|
||||
"active": False,
|
||||
"installable": True,
|
||||
"certificate" : "",
|
||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2012-12-17 19:55+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
|
||||
"PO-Revision-Date: 2014-04-04 19:25+0000\n"
|
||||
"Last-Translator: Dariusz Żbikowski <Unknown>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-27 07:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 16976)\n"
|
||||
|
||||
#. module: mail
|
||||
#: view:mail.followers:0
|
||||
|
@ -1363,7 +1363,7 @@ msgstr "Wiadomość Rich-text/HTML"
|
|||
#. module: mail
|
||||
#: view:mail.mail:0
|
||||
msgid "Creation Month"
|
||||
msgstr "Miesiąc tworzenia"
|
||||
msgstr "Miesiąc utworzenia"
|
||||
|
||||
#. module: mail
|
||||
#. openerp-web
|
||||
|
@ -1509,7 +1509,7 @@ msgstr ""
|
|||
#: code:addons/mail/static/src/xml/mail.xml:213
|
||||
#, python-format
|
||||
msgid "Please, wait while the file is uploading."
|
||||
msgstr ""
|
||||
msgstr "Poczekaj, aż plik zostanie załadowany."
|
||||
|
||||
#. module: mail
|
||||
#: view:mail.group:0
|
||||
|
|
|
@ -89,5 +89,36 @@
|
|||
<!-- Add menu entry in Settings/Email -->
|
||||
<menuitem name="Messages" id="menu_mail_message" parent="base.menu_email" action="action_view_mail_message"/>
|
||||
|
||||
<record model="ir.ui.view" id="view_document_file_kanban">
|
||||
<field name="name">ir.attachment kanban</field>
|
||||
<field name="model">ir.attachment</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban>
|
||||
<field name="file_type_icon"/>
|
||||
<field name="url"/>
|
||||
<field name="name"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click">
|
||||
<div t-attf-class="oe_attachment" t-if="record.file_type_icon.value != 'webimage'">
|
||||
<img t-att-src="'/mail/static/src/img/mimetypes/' + record.file_type_icon.value + '.png'"></img>
|
||||
<div class='oe_name'><t t-raw='record.name.value' />bb</div>
|
||||
</div>
|
||||
<div t-attf-class="oe_attachment oe_preview" t-if="record.file_type_icon.value == 'webimage'">
|
||||
<img t-att-src="kanban_image('ir.attachment', 'datas', record.id.value)" class="oe_kanban_image"/>
|
||||
<div class='oe_name'><t t-raw='record.name.value' />aa</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
<record id="base.action_attachment" model="ir.actions.act_window">
|
||||
<field name="view_mode">kanban,form</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
||||
|
|
|
@ -318,7 +318,7 @@
|
|||
.openerp .oe_mail .oe_msg_composer .oe_recipients input{
|
||||
vertical-align: middle;
|
||||
}
|
||||
.openerp .oe_mail .oe_attachment{
|
||||
.oe_attachment{
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
margin: 4px 2px;
|
||||
|
@ -328,7 +328,7 @@
|
|||
text-align: center;
|
||||
vertical-align: top;
|
||||
}
|
||||
.openerp .oe_mail .oe_attachment .oe_name{
|
||||
.oe_attachment .oe_name{
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
padding: 1px 3px;
|
||||
|
@ -341,10 +341,10 @@
|
|||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.openerp .oe_mail .oe_attachment.oe_preview{
|
||||
.oe_attachment.oe_preview{
|
||||
background: url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAJ0lEQVQYV2MsLS39z4AGLCws0IUYGIeCwrVr12J45sSJE5ieGQIKAbuZKf/EMCs7AAAAAElFTkSuQmCC );
|
||||
}
|
||||
.openerp .oe_mail .oe_attachment .oe_progress_bar{
|
||||
.oe_attachment .oe_progress_bar{
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 18px;
|
||||
|
@ -364,7 +364,7 @@
|
|||
-o-animation: oe_mail_attach_loading_anim 0.75s infinite linear;
|
||||
animation: oe_mail_attach_loading_anim 0.75s infinite linear;
|
||||
}
|
||||
.openerp .oe_mail .oe_attachment.oe_uploading .oe_progress_bar{
|
||||
.oe_attachment.oe_uploading .oe_progress_bar{
|
||||
display: block;
|
||||
}
|
||||
@-webkit-keyframes oe_mail_attach_loading_anim{
|
||||
|
@ -387,7 +387,7 @@
|
|||
50% { background: #009123 }
|
||||
100% { background: #4BBD00 }
|
||||
}
|
||||
.openerp .oe_mail .oe_attachment.oe_preview .oe_name{
|
||||
.oe_attachment.oe_preview .oe_name{
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
margin: 3px;
|
||||
|
@ -405,14 +405,14 @@
|
|||
-o-transition: opacity 0.2s linear;
|
||||
transition: opacity 0.2s linear;
|
||||
}
|
||||
.openerp .oe_mail .oe_attachment.oe_preview:hover .oe_name{
|
||||
.oe_attachment.oe_preview:hover .oe_name{
|
||||
opacity: 1;
|
||||
-webkit-transition: opacity 0.2s linear;
|
||||
-moz-transition: opacity 0.2s linear;
|
||||
-o-transition: opacity 0.2s linear;
|
||||
transition: opacity 0.2s linear;
|
||||
}
|
||||
.openerp .oe_mail .oe_attachment img{
|
||||
.oe_attachment img{
|
||||
position: absolute;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
|
@ -420,7 +420,7 @@
|
|||
left: 50%;
|
||||
margin-left: -24px;
|
||||
}
|
||||
.openerp .oe_mail .oe_attachment.oe_preview img{
|
||||
.oe_attachment.oe_preview img{
|
||||
display: block;
|
||||
position: relative;
|
||||
margin:0px;
|
||||
|
|
|
@ -76,8 +76,6 @@ Dashboard / Reports for MRP will include:
|
|||
'views/report_mrpbomstructure.xml',
|
||||
],
|
||||
'demo': ['mrp_demo.xml'],
|
||||
#TODO: This yml tests are needed to be completely reviewed again because the product wood panel is removed in product demo as it does not suit for new demo context of computer and consultant company
|
||||
# so the ymls are too complex to change at this stage
|
||||
'test': [
|
||||
'test/bom_with_service_type_product.yml',
|
||||
'test/mrp_users.yml',
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_account_analytic_line_user,account.analytic.line,account.model_account_analytic_line,group_mrp_user,1,1,1,0
|
||||
access_mrp_workcenter,mrp.workcenter,model_mrp_workcenter,mrp.group_mrp_user,1,0,0,0
|
||||
access_mrp_routing,mrp.routing,model_mrp_routing,mrp.group_mrp_user,1,0,0,0
|
||||
access_mrp_routing_workcenter,mrp.routing.workcenter,model_mrp_routing_workcenter,mrp.group_mrp_user,1,0,0,0
|
||||
|
|
|
|
@ -52,8 +52,15 @@ class PaymentAcquirer(osv.Model):
|
|||
_name = 'payment.acquirer'
|
||||
_description = 'Payment Acquirer'
|
||||
|
||||
def _get_providers(self, cr, uid, context=None):
|
||||
return []
|
||||
|
||||
# indirection to ease inheritance
|
||||
_provider_selection = lambda self, *args, **kwargs: self._get_providers(*args, **kwargs)
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Name', required=True),
|
||||
'provider': fields.selection(_provider_selection, string='Provider', required=True),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True),
|
||||
'pre_msg': fields.html('Message', help='Message displayed to explain and help the payment process.'),
|
||||
'post_msg': fields.html('Thanks Message', help='Message displayed after having done the payment process.'),
|
||||
|
@ -84,10 +91,10 @@ class PaymentAcquirer(osv.Model):
|
|||
}
|
||||
|
||||
def _check_required_if_provider(self, cr, uid, ids, context=None):
|
||||
""" If the field has 'required_if_provider="<name>"' attribute, then it
|
||||
required if record.name is <name>. """
|
||||
""" If the field has 'required_if_provider="<provider>"' attribute, then it
|
||||
required if record.provider is <provider>. """
|
||||
for acquirer in self.browse(cr, uid, ids, context=context):
|
||||
if any(c for c, f in self._all_columns.items() if getattr(f.column, 'required_if_provider', None) == acquirer.name and not acquirer[c]):
|
||||
if any(c for c, f in self._all_columns.items() if getattr(f.column, 'required_if_provider', None) == acquirer.provider and not acquirer[c]):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
@ -98,8 +105,8 @@ class PaymentAcquirer(osv.Model):
|
|||
def get_form_action_url(self, cr, uid, id, context=None):
|
||||
""" Returns the form action URL, for form-based acquirer implementations. """
|
||||
acquirer = self.browse(cr, uid, id, context=context)
|
||||
if hasattr(self, '%s_get_form_action_url' % acquirer.name):
|
||||
return getattr(self, '%s_get_form_action_url' % acquirer.name)(cr, uid, id, context=context)
|
||||
if hasattr(self, '%s_get_form_action_url' % acquirer.provider):
|
||||
return getattr(self, '%s_get_form_action_url' % acquirer.provider)(cr, uid, id, context=context)
|
||||
return False
|
||||
|
||||
def form_preprocess_values(self, cr, uid, id, reference, amount, currency_id, tx_id, partner_id, partner_values, tx_values, context=None):
|
||||
|
@ -178,7 +185,7 @@ class PaymentAcquirer(osv.Model):
|
|||
})
|
||||
|
||||
# compute fees
|
||||
fees_method_name = '%s_compute_fees' % acquirer.name
|
||||
fees_method_name = '%s_compute_fees' % acquirer.provider
|
||||
if hasattr(self, fees_method_name):
|
||||
fees = getattr(self, fees_method_name)(
|
||||
cr, uid, id, tx_data['amount'], tx_data['currency_id'], partner_data['country_id'], context=None)
|
||||
|
@ -237,7 +244,7 @@ class PaymentAcquirer(osv.Model):
|
|||
partner_values, tx_values, context=context)
|
||||
|
||||
# call <name>_form_generate_values to update the tx dict with acqurier specific values
|
||||
cust_method_name = '%s_form_generate_values' % (acquirer.name)
|
||||
cust_method_name = '%s_form_generate_values' % (acquirer.provider)
|
||||
if hasattr(self, cust_method_name):
|
||||
method = getattr(self, cust_method_name)
|
||||
partner_values, tx_values = method(cr, uid, id, partner_values, tx_values, context=context)
|
||||
|
@ -383,14 +390,14 @@ class PaymentTransaction(osv.Model):
|
|||
acquirer = self.pool['payment.acquirer'].browse(cr, uid, values.get('acquirer_id'), context=context)
|
||||
|
||||
# compute fees
|
||||
custom_method_name = '%s_compute_fees' % acquirer.name
|
||||
custom_method_name = '%s_compute_fees' % acquirer.provider
|
||||
if hasattr(Acquirer, custom_method_name):
|
||||
fees = getattr(Acquirer, custom_method_name)(
|
||||
cr, uid, acquirer.id, values.get('amount', 0.0), values.get('currency_id'), values.get('country_id'), context=None)
|
||||
values['fees'] = float_round(fees, 2)
|
||||
|
||||
# custom create
|
||||
custom_method_name = '%s_create' % acquirer.name
|
||||
custom_method_name = '%s_create' % acquirer.provider
|
||||
if hasattr(self, custom_method_name):
|
||||
values.update(getattr(self, custom_method_name)(cr, uid, values, context=context))
|
||||
|
||||
|
@ -469,7 +476,7 @@ class PaymentTransaction(osv.Model):
|
|||
|
||||
if values.get('acquirer_id'):
|
||||
acquirer = self.pool['payment.acquirer'].browse(cr, uid, values.get('acquirer_id'), context=context)
|
||||
custom_method_name = '_%s_s2s_send' % acquirer.name
|
||||
custom_method_name = '_%s_s2s_send' % acquirer.provider
|
||||
if hasattr(self, custom_method_name):
|
||||
tx_id, result = getattr(self, custom_method_name)(cr, uid, values, cc_values, context=context)
|
||||
|
||||
|
@ -482,7 +489,7 @@ class PaymentTransaction(osv.Model):
|
|||
tx = self.browse(cr, uid, tx_id, context=context)
|
||||
invalid_parameters = None
|
||||
|
||||
invalid_param_method_name = '_%s_s2s_get_invalid_parameters' % tx.acquirer_id.name
|
||||
invalid_param_method_name = '_%s_s2s_get_invalid_parameters' % tx.acquirer_id.provider
|
||||
if hasattr(self, invalid_param_method_name):
|
||||
invalid_parameters = getattr(self, invalid_param_method_name)(cr, uid, tx, data, context=context)
|
||||
|
||||
|
@ -493,7 +500,7 @@ class PaymentTransaction(osv.Model):
|
|||
_logger.error(_error_message)
|
||||
return False
|
||||
|
||||
feedback_method_name = '_%s_s2s_validate' % tx.acquirer_id.name
|
||||
feedback_method_name = '_%s_s2s_validate' % tx.acquirer_id.provider
|
||||
if hasattr(self, feedback_method_name):
|
||||
return getattr(self, feedback_method_name)(cr, uid, tx, data, context=context)
|
||||
|
||||
|
@ -503,7 +510,7 @@ class PaymentTransaction(osv.Model):
|
|||
""" Get the tx status. """
|
||||
tx = self.browse(cr, uid, tx_id, context=context)
|
||||
|
||||
invalid_param_method_name = '_%s_s2s_get_tx_status' % tx.acquirer_id.name
|
||||
invalid_param_method_name = '_%s_s2s_get_tx_status' % tx.acquirer_id.provider
|
||||
if hasattr(self, invalid_param_method_name):
|
||||
return getattr(self, invalid_param_method_name)(cr, uid, tx, context=context)
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
parent='base.menu_administration'/>
|
||||
|
||||
<record id="acquirer_form" model="ir.ui.view">
|
||||
<field name="name">acquirer.form</field>
|
||||
<field name="name">payment.acquirer.form</field>
|
||||
<field name="model">payment.acquirer</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Payment Acquirer" version="7.0">
|
||||
|
@ -16,6 +16,7 @@
|
|||
<group name="acquirer_base">
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="provider"/>
|
||||
<field name="company_id"/>
|
||||
<field name="website_published"/>
|
||||
<field name="env"/>
|
||||
|
@ -62,10 +63,12 @@
|
|||
</record>
|
||||
|
||||
<record id="acquirer_list" model="ir.ui.view">
|
||||
<field name="name">payment.acquirer.list</field>
|
||||
<field name="model">payment.acquirer</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Payment Acquirers">
|
||||
<field name="name"/>
|
||||
<field name="provider"/>
|
||||
<field name="website_published"/>
|
||||
<field name="env"/>
|
||||
</tree>
|
||||
|
@ -73,10 +76,15 @@
|
|||
</record>
|
||||
|
||||
<record id="acquirer_search" model="ir.ui.view">
|
||||
<field name="name">payment.acquirer.search</field>
|
||||
<field name="model">payment.acquirer</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="name"/>
|
||||
<field name="provider"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Provider" name="provider" domain="[]" context="{'group_by': 'provider'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -95,6 +103,7 @@
|
|||
sequence='10' />
|
||||
|
||||
<record id="transaction_form" model="ir.ui.view">
|
||||
<field name="name">payment.transaction.form</field>
|
||||
<field name="model">payment.transaction</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Payment Transactions" version="7.0">
|
||||
|
@ -138,6 +147,7 @@
|
|||
</record>
|
||||
|
||||
<record id="transaction_list" model="ir.ui.view">
|
||||
<field name="name">payment.transaction.list</field>
|
||||
<field name="model">payment.transaction</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Payment Transactions">
|
||||
|
@ -151,6 +161,7 @@
|
|||
</record>
|
||||
|
||||
<record id="transaction" model="ir.ui.view">
|
||||
<field name="name">payment.transaction.search</field>
|
||||
<field name="model">payment.transaction</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
<data noupdate="1">
|
||||
|
||||
<record id="payment_acquirer_adyen" model="payment.acquirer">
|
||||
<field name="name">adyen</field>
|
||||
<field name="name">Adyen</field>
|
||||
<field name="provider">adyen</field>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field name="view_template_id" ref="adyen_acquirer_button"/>
|
||||
<field name="env">test</field>
|
||||
|
|
|
@ -26,14 +26,14 @@ class AcquirerAdyen(osv.Model):
|
|||
|
||||
- yhpp: hosted payment page: pay.shtml for single, select.shtml for multiple
|
||||
"""
|
||||
if env == 'prod':
|
||||
return {
|
||||
'adyen_form_url': 'https://prod.adyen.com/hpp/pay.shtml',
|
||||
}
|
||||
else:
|
||||
return {
|
||||
'adyen_form_url': 'https://test.adyen.com/hpp/pay.shtml',
|
||||
}
|
||||
return {
|
||||
'adyen_form_url': 'https://%s.adyen.com/hpp/pay.shtml' % env,
|
||||
}
|
||||
|
||||
def _get_providers(self, cr, uid, context=None):
|
||||
providers = super(AcquirerAdyen, self)._get_providers(cr, uid, context=context)
|
||||
providers.append(['adyen', 'Adyen'])
|
||||
return providers
|
||||
|
||||
_columns = {
|
||||
'adyen_merchant_account': fields.char('Merchant Account', required_if_provider='adyen'),
|
||||
|
@ -54,7 +54,7 @@ class AcquirerAdyen(osv.Model):
|
|||
:return string: shasign
|
||||
"""
|
||||
assert inout in ('in', 'out')
|
||||
assert acquirer.name == 'adyen'
|
||||
assert acquirer.provider == 'adyen'
|
||||
|
||||
if inout == 'in':
|
||||
keys = "paymentAmount currencyCode shipBeforeDate merchantReference skinCode merchantAccount sessionValidity shopperEmail shopperReference recurringContract allowedMethods blockedMethods shopperStatement merchantReturnData billingAddressType deliveryAddressType offset".split()
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<field name="inherit_id" ref="payment.acquirer_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//group[@name="acquirer_display"]' position='after'>
|
||||
<group attrs="{'invisible': [('name', '!=', 'adyen')]}">
|
||||
<group attrs="{'invisible': [('provider', '!=', 'adyen')]}">
|
||||
<field name="adyen_merchant_account"/>
|
||||
<field name="adyen_skin_code"/>
|
||||
<field name="adyen_skin_hmac_key"/>
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
<data noupdate="1">
|
||||
|
||||
<record id="payment_acquirer_ogone" model="payment.acquirer">
|
||||
<field name="name">ogone</field>
|
||||
<field name="name">Credit Card</field>
|
||||
<field name="provider">ogone</field>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field name="view_template_id" ref="ogone_acquirer_button"/>
|
||||
<field name="env">test</field>
|
||||
|
|
|
@ -36,6 +36,11 @@ class PaymentAcquirerOgone(osv.Model):
|
|||
'ogone_afu_agree_url': 'https://secure.ogone.com/ncol/%s/AFU_agree.asp' % (env,),
|
||||
}
|
||||
|
||||
def _get_providers(self, cr, uid, context=None):
|
||||
providers = super(PaymentAcquirerOgone, self)._get_providers(cr, uid, context=context)
|
||||
providers.append(['ogone', 'Ogone'])
|
||||
return providers
|
||||
|
||||
_columns = {
|
||||
'ogone_pspid': fields.char('PSPID', required_if_provider='ogone'),
|
||||
'ogone_userid': fields.char('API User ID', required_if_provider='ogone'),
|
||||
|
@ -57,7 +62,7 @@ class PaymentAcquirerOgone(osv.Model):
|
|||
:return string: shasign
|
||||
"""
|
||||
assert inout in ('in', 'out')
|
||||
assert acquirer.name == 'ogone'
|
||||
assert acquirer.provider == 'ogone'
|
||||
key = getattr(acquirer, 'ogone_shakey_' + inout)
|
||||
|
||||
def filter_key(key):
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<field name="inherit_id" ref="payment.acquirer_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//group[@name="acquirer_display"]' position='after'>
|
||||
<group attrs="{'invisible': [('name', '!=', 'ogone')]}">
|
||||
<group attrs="{'invisible': [('provider', '!=', 'ogone')]}">
|
||||
<field name="ogone_pspid"/>
|
||||
<field name="ogone_userid"/>
|
||||
<field name="ogone_password"/>
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
<data noupdate="1">
|
||||
|
||||
<record id="payment_acquirer_paypal" model="payment.acquirer">
|
||||
<field name="name">paypal</field>
|
||||
<field name="name">Paypal</field>
|
||||
<field name="provider">paypal</field>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field name="view_template_id" ref="paypal_acquirer_button"/>
|
||||
<field name="env">test</field>
|
||||
|
|
|
@ -34,6 +34,11 @@ class AcquirerPaypal(osv.Model):
|
|||
'paypal_rest_url': 'https://api.sandbox.paypal.com/v1/oauth2/token',
|
||||
}
|
||||
|
||||
def _get_providers(self, cr, uid, context=None):
|
||||
providers = super(AcquirerPaypal, self)._get_providers(cr, uid, context=context)
|
||||
providers.append(['paypal', 'Paypal'])
|
||||
return providers
|
||||
|
||||
_columns = {
|
||||
'paypal_email_account': fields.char('Paypal Email ID', required_if_provider='paypal'),
|
||||
'paypal_seller_account': fields.char(
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<field name="inherit_id" ref="payment.acquirer_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//group[@name="acquirer_display"]' position='after'>
|
||||
<group attrs="{'invisible': [('name', '!=', 'paypal')]}">
|
||||
<group attrs="{'invisible': [('provider', '!=', 'paypal')]}">
|
||||
<group>
|
||||
<group>
|
||||
<field name="paypal_email_account"/>
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
<data noupdate="1">
|
||||
|
||||
<record id="payment_acquirer_transfer" model="payment.acquirer">
|
||||
<field name="name">transfer</field>
|
||||
<field name="name">Wire Transfer</field>
|
||||
<field name="provider">transfer</field>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field name="view_template_id" ref="transfer_acquirer_button"/>
|
||||
<field name="validation">manual</field>
|
||||
|
|
|
@ -14,6 +14,11 @@ _logger = logging.getLogger(__name__)
|
|||
class TransferPaymentAcquirer(osv.Model):
|
||||
_inherit = 'payment.acquirer'
|
||||
|
||||
def _get_providers(self, cr, uid, context=None):
|
||||
providers = super(TransferPaymentAcquirer, self)._get_providers(cr, uid, context=context)
|
||||
providers.append(['transfer', 'Wire Transfer'])
|
||||
return providers
|
||||
|
||||
def transfer_get_form_action_url(self, cr, uid, id, context=None):
|
||||
return '/payment/transfer/feedback'
|
||||
|
||||
|
|
|
@ -517,7 +517,8 @@ class pos_order(osv.osv):
|
|||
|
||||
# Keep only new orders
|
||||
submitted_references = [o['data']['name'] for o in orders]
|
||||
existing_orders = self.search_read(cr, uid, domain=[('pos_reference', 'in', submitted_references)], fields=['pos_reference'], context=context)
|
||||
existing_order_ids = self.search(cr, uid, [('pos_reference', 'in', submitted_references)], context=context)
|
||||
existing_orders = self.read(cr, uid, existing_order_ids, ['pos_reference'], context=context)
|
||||
existing_references = set([o['pos_reference'] for o in existing_orders])
|
||||
orders_to_save = [o for o in orders if o['data']['name'] not in existing_references]
|
||||
|
||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
|
||||
"PO-Revision-Date: 2012-12-16 20:56+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
|
||||
"PO-Revision-Date: 2014-04-04 19:08+0000\n"
|
||||
"Last-Translator: Dariusz Żbikowski <Unknown>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-27 07:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-05 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 16976)\n"
|
||||
|
||||
#. module: procurement
|
||||
#: model:ir.ui.menu,name:procurement.menu_stock_sched
|
||||
|
@ -493,7 +493,7 @@ msgstr "Nieprzeczytane wiadomości"
|
|||
#. module: procurement
|
||||
#: selection:mrp.property,composition:0
|
||||
msgid "plus"
|
||||
msgstr ""
|
||||
msgstr "plus"
|
||||
|
||||
#. module: procurement
|
||||
#: help:procurement.order,state:0
|
||||
|
@ -515,6 +515,8 @@ msgid ""
|
|||
"If the active field is set to False, it will allow you to hide the "
|
||||
"orderpoint without removing it."
|
||||
msgstr ""
|
||||
"Jeśli pole nie jest aktywne, pozwoli ci ukryć punkt zamawiania bez jego "
|
||||
"kasowania."
|
||||
|
||||
#. module: procurement
|
||||
#: view:product.product:0
|
||||
|
@ -547,8 +549,8 @@ msgid ""
|
|||
"You have to select a product unit of measure in the same category than the "
|
||||
"default unit of measure of the product"
|
||||
msgstr ""
|
||||
"Musisz wybrać jednostkę miary z tej samej kategorii do domyślna jednostka "
|
||||
"produktu."
|
||||
"Musisz wybrać jednostkę miary z tej samej kategorii, co domyślna jednostka "
|
||||
"produktu"
|
||||
|
||||
#. module: procurement
|
||||
#: view:procurement.order:0
|
||||
|
@ -589,7 +591,7 @@ msgstr "Projekt"
|
|||
#: model:ir.ui.menu,name:procurement.menu_stock_proc_schedulers
|
||||
#: view:procurement.order.compute.all:0
|
||||
msgid "Run Schedulers"
|
||||
msgstr "uruchom planowanie"
|
||||
msgstr "Uruchom planowanie"
|
||||
|
||||
#. module: procurement
|
||||
#: view:procurement.order.compute:0
|
||||
|
@ -1027,7 +1029,7 @@ msgstr "Zapotrzbowanie uruchomione późno"
|
|||
#. module: procurement
|
||||
#: selection:mrp.property,composition:0
|
||||
msgid "min"
|
||||
msgstr ""
|
||||
msgstr "min."
|
||||
|
||||
#. module: procurement
|
||||
#: view:make.procurement:0
|
||||
|
|
|
@ -439,7 +439,8 @@ class procurement_order(osv.osv):
|
|||
if len(to_cancel):
|
||||
move_obj.action_cancel(cr, uid, to_cancel)
|
||||
if len(to_assign):
|
||||
move_obj.write(cr, uid, to_assign, {'state': 'assigned'})
|
||||
move_obj.write(cr, uid, to_assign, {'state': 'confirmed'})
|
||||
move_obj.action_assign(cr, uid, to_assign)
|
||||
self.write(cr, uid, ids, {'state': 'cancel'})
|
||||
for id in ids:
|
||||
workflow.trg_trigger(uid, 'procurement.order', id, cr)
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
|
||||
"PO-Revision-Date: 2012-12-16 19:25+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
|
||||
"PO-Revision-Date: 2014-04-07 13:25+0000\n"
|
||||
"Last-Translator: Dariusz Żbikowski (Krokus) <darek@krokus.com.pl>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-27 06:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-08 06:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16976)\n"
|
||||
|
||||
#. module: product
|
||||
#: field:product.packaging,rows:0
|
||||
|
@ -735,7 +735,7 @@ msgstr "Jeśli zaznaczone, to wiadomość wymaga twojej uwagi"
|
|||
#. module: product
|
||||
#: field:product.product,ean13:0
|
||||
msgid "EAN13 Barcode"
|
||||
msgstr ""
|
||||
msgstr "Kod kreskowy EAN13"
|
||||
|
||||
#. module: product
|
||||
#: model:ir.actions.act_window,name:product.action_product_price_list
|
||||
|
@ -1188,7 +1188,7 @@ msgstr "Wiadomości i historia komunikacji"
|
|||
#. module: product
|
||||
#: model:product.uom,name:product.product_uom_kgm
|
||||
msgid "kg"
|
||||
msgstr ""
|
||||
msgstr "kg"
|
||||
|
||||
#. module: product
|
||||
#: selection:product.template,state:0
|
||||
|
@ -1198,7 +1198,7 @@ msgstr "Zdezaktualizowany"
|
|||
#. module: product
|
||||
#: model:product.uom,name:product.product_uom_km
|
||||
msgid "km"
|
||||
msgstr ""
|
||||
msgstr "km"
|
||||
|
||||
#. module: product
|
||||
#: field:product.template,standard_price:0
|
||||
|
@ -1354,6 +1354,8 @@ msgid ""
|
|||
"This field holds the image used as image for the product, limited to "
|
||||
"1024x1024px."
|
||||
msgstr ""
|
||||
"To pole utrzymuje obraz użyty jako zdjęcie produktu, limitowany rozmiar "
|
||||
"1024x1024."
|
||||
|
||||
#. module: product
|
||||
#: help:product.pricelist.item,categ_id:0
|
||||
|
@ -1519,7 +1521,7 @@ msgstr ""
|
|||
#. module: product
|
||||
#: model:product.uom,name:product.product_uom_cm
|
||||
msgid "cm"
|
||||
msgstr ""
|
||||
msgstr "cm"
|
||||
|
||||
#. module: product
|
||||
#: model:ir.model,name:product.model_product_uom
|
||||
|
|
|
@ -10,7 +10,7 @@ Add email templates to products to be send on invoice confirmation
|
|||
==================================================================
|
||||
|
||||
With this module, link your products to a template to send complete information and tools to your customer.
|
||||
For instance when invoicing a training, the training agenda and materials will automatically be send to your customers.'
|
||||
For instance when invoicing a training, the training agenda and materials will automatically be sent to your customers.'
|
||||
""",
|
||||
'website': 'http://www.openerp.com',
|
||||
'demo': [
|
||||
|
|
|
@ -13,7 +13,7 @@ class product_template(osv.Model):
|
|||
_columns = {
|
||||
'email_template_id': fields.many2one(
|
||||
'email.template', 'Product Email Template',
|
||||
help='When validating an invoice, an email will be send to the customer'
|
||||
help='When validating an invoice, an email will be sent to the customer'
|
||||
'based on this template. The customer will receive an email for each'
|
||||
'product linked to an email template.'),
|
||||
}
|
||||
|
|
|
@ -223,7 +223,7 @@ class project(osv.osv):
|
|||
'res_model': 'ir.attachment',
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_id': False,
|
||||
'view_mode': 'tree,form',
|
||||
'view_mode': 'kanban,form',
|
||||
'view_type': 'form',
|
||||
'limit': 80,
|
||||
'context': "{'default_res_model': '%s','default_res_id': %d}" % (self._name, res_id)
|
||||
|
@ -287,7 +287,9 @@ class project(osv.osv):
|
|||
"- Followers Only: employees see only the followed tasks or issues; if portal\n"
|
||||
" is activated, portal users see the followed tasks or issues."),
|
||||
'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'), ('cancelled', 'Cancelled'),('pending','Pending'),('close','Closed')], 'Status', required=True,),
|
||||
'doc_count':fields.function(_get_attached_docs, string="Number of documents attached", type='int')
|
||||
'doc_count': fields.function(
|
||||
_get_attached_docs, string="Number of documents attached", type='integer'
|
||||
)
|
||||
}
|
||||
|
||||
def _get_type_common(self, cr, uid, context):
|
||||
|
@ -723,9 +725,10 @@ class task(osv.osv):
|
|||
context = {}
|
||||
if default is None:
|
||||
default = {}
|
||||
stage = self._get_default_stage_id(cr, uid, context=context)
|
||||
if stage:
|
||||
default['stage_id'] = stage
|
||||
if not context.get('copy', False):
|
||||
stage = self._get_default_stage_id(cr, uid, context=context)
|
||||
if stage:
|
||||
default['stage_id'] = stage
|
||||
return super(task, self).copy(cr, uid, id, default, context)
|
||||
|
||||
def _is_template(self, cr, uid, ids, field_name, arg, context=None):
|
||||
|
@ -749,7 +752,7 @@ class task(osv.osv):
|
|||
'description': fields.text('Description'),
|
||||
'priority': fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Important'), ('0','Very important')], 'Priority', select=True),
|
||||
'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of tasks."),
|
||||
'stage_id': fields.many2one('project.task.type', 'Stage', track_visibility='onchange',
|
||||
'stage_id': fields.many2one('project.task.type', 'Stage', track_visibility='onchange', select=True,
|
||||
domain="[('project_ids', '=', project_id)]"),
|
||||
'categ_ids': fields.many2many('project.category', string='Tags'),
|
||||
'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready for next stage')], 'Kanban State',
|
||||
|
@ -765,7 +768,7 @@ class task(osv.osv):
|
|||
'date_end': fields.datetime('Ending Date',select=True),
|
||||
'date_deadline': fields.date('Deadline',select=True),
|
||||
'date_last_stage_update': fields.datetime('Last Stage Update', select=True),
|
||||
'project_id': fields.many2one('project.project', 'Project', ondelete='set null', select="1", track_visibility='onchange', change_default=True),
|
||||
'project_id': fields.many2one('project.project', 'Project', ondelete='set null', select=True, track_visibility='onchange', change_default=True),
|
||||
'parent_ids': fields.many2many('project.task', 'project_task_parent_rel', 'task_id', 'parent_id', 'Parent Tasks'),
|
||||
'child_ids': fields.many2many('project.task', 'project_task_parent_rel', 'parent_id', 'task_id', 'Delegated Tasks'),
|
||||
'notes': fields.text('Notes'),
|
||||
|
@ -791,7 +794,7 @@ class task(osv.osv):
|
|||
'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours'], 10),
|
||||
'project.task.work': (_get_task, ['hours'], 10),
|
||||
}),
|
||||
'user_id': fields.many2one('res.users', 'Assigned to', track_visibility='onchange'),
|
||||
'user_id': fields.many2one('res.users', 'Assigned to', select=True, track_visibility='onchange'),
|
||||
'delegated_user_id': fields.related('child_ids', 'user_id', type='many2one', relation='res.users', string='Delegated To'),
|
||||
'partner_id': fields.many2one('res.partner', 'Customer'),
|
||||
'work_ids': fields.one2many('project.task.work', 'task_id', 'Work done'),
|
||||
|
@ -1045,7 +1048,7 @@ class task(osv.osv):
|
|||
if vals.get('project_id') and not context.get('default_project_id'):
|
||||
context['default_project_id'] = vals.get('project_id')
|
||||
# user_id change: update date_start
|
||||
if vals.get('user_id'):
|
||||
if vals.get('user_id') and not vals.get('start_date'):
|
||||
vals['date_start'] = fields.datetime.now()
|
||||
|
||||
# context: no_log, because subtype already handle this
|
||||
|
@ -1062,7 +1065,7 @@ class task(osv.osv):
|
|||
if 'stage_id' in vals:
|
||||
vals['date_last_stage_update'] = fields.datetime.now()
|
||||
# user_id change: update date_start
|
||||
if vals.get('user_id'):
|
||||
if vals.get('user_id') and 'date_start' not in vals:
|
||||
vals['date_start'] = fields.datetime.now()
|
||||
|
||||
# Overridden to reset the kanban_state to normal whenever
|
||||
|
@ -1202,8 +1205,8 @@ class account_analytic_account(osv.osv):
|
|||
'company_uom_id': fields.related('company_id', 'project_time_mode_id', type='many2one', relation='product.uom'),
|
||||
}
|
||||
|
||||
def on_change_template(self, cr, uid, ids, template_id, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, context=context)
|
||||
def on_change_template(self, cr, uid, ids, template_id, date_start=False, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, date_start=date_start, context=context)
|
||||
if template_id and 'value' in res:
|
||||
template = self.browse(cr, uid, template_id, context=context)
|
||||
res['value']['use_tasks'] = template.use_tasks
|
||||
|
|
|
@ -381,7 +381,7 @@
|
|||
</h1>
|
||||
<group>
|
||||
<group>
|
||||
<field name="project_id" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/>
|
||||
<field name="project_id" domain="[('state', '!=', 'close')]" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/>
|
||||
<field name="user_id"
|
||||
options='{"no_open": True}'
|
||||
context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_user']}"/>
|
||||
|
|
|
@ -264,9 +264,9 @@ class project_issue(osv.Model):
|
|||
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True),
|
||||
'version_id': fields.many2one('project.issue.version', 'Version'),
|
||||
'stage_id': fields.many2one ('project.task.type', 'Stage',
|
||||
track_visibility='onchange',
|
||||
track_visibility='onchange', select=True,
|
||||
domain="[('project_ids', '=', project_id)]"),
|
||||
'project_id':fields.many2one('project.project', 'Project', track_visibility='onchange'),
|
||||
'project_id': fields.many2one('project.project', 'Project', track_visibility='onchange', select=True),
|
||||
'duration': fields.float('Duration'),
|
||||
'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]"),
|
||||
'day_open': fields.function(_compute_day, string='Days to Open', \
|
||||
|
@ -530,8 +530,8 @@ class account_analytic_account(osv.Model):
|
|||
'use_issues': fields.boolean('Issues', help="Check this field if this project manages issues"),
|
||||
}
|
||||
|
||||
def on_change_template(self, cr, uid, ids, template_id, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, context=context)
|
||||
def on_change_template(self, cr, uid, ids, template_id, date_start=False, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, date_start=date_start, context=context)
|
||||
if template_id and 'value' in res:
|
||||
template = self.browse(cr, uid, template_id, context=context)
|
||||
res['value']['use_issues'] = template.use_issues
|
||||
|
|
|
@ -273,8 +273,8 @@ class account_analytic_account(osv.osv):
|
|||
'use_phases': fields.boolean('Phases', help="Check this field if you plan to use phase-based scheduling"),
|
||||
}
|
||||
|
||||
def on_change_template(self, cr, uid, ids, template_id, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, context=context)
|
||||
def on_change_template(self, cr, uid, ids, template_id, date_start=False, context=None):
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, date_start=date_start, context=context)
|
||||
if template_id and 'value' in res:
|
||||
template = self.browse(cr, uid, template_id, context=context)
|
||||
res['value']['use_phases'] = template.use_phases
|
||||
|
|
|
@ -62,7 +62,7 @@ class purchase_config_settings(osv.osv_memory):
|
|||
}
|
||||
|
||||
_defaults = {
|
||||
'default_invoice_method': 'manual',
|
||||
'default_invoice_method': 'order',
|
||||
}
|
||||
|
||||
def onchange_purchase_analytic_plans(self, cr, uid, ids, module_purchase_analytic_plans, context=None):
|
||||
|
|
|
@ -107,7 +107,7 @@ class purchase_requisition(osv.osv):
|
|||
seller_delay = product_supplier.delay
|
||||
seller_qty = product_supplier.qty
|
||||
supplier_pricelist = supplier.property_product_pricelist_purchase or False
|
||||
seller_price = pricelist.price_get(cr, uid, [supplier_pricelist.id], product.id, qty, False, {'uom': default_uom_po_id})[supplier_pricelist.id]
|
||||
seller_price = pricelist.price_get(cr, uid, [supplier_pricelist.id], product.id, qty, supplier.id, {'uom': default_uom_po_id})[supplier_pricelist.id]
|
||||
if seller_qty:
|
||||
qty = max(qty,seller_qty)
|
||||
date_planned = self._planned_date(requisition_line.requisition_id, seller_delay)
|
||||
|
|
|
@ -500,7 +500,7 @@ class sale_order(osv.osv):
|
|||
lines.append(line.id)
|
||||
created_lines = obj_sale_order_line.invoice_line_create(cr, uid, lines)
|
||||
if created_lines:
|
||||
invoices.setdefault(o.partner_id.id, []).append((o, created_lines))
|
||||
invoices.setdefault(o.partner_invoice_id.id or o.partner_id.id, []).append((o, created_lines))
|
||||
if not invoices:
|
||||
for o in self.browse(cr, uid, ids, context=context):
|
||||
for i in o.invoice_ids:
|
||||
|
|
|
@ -101,7 +101,6 @@ class sale_order_line_make_invoice(osv.osv_memory):
|
|||
break
|
||||
if flag:
|
||||
workflow.trg_validate(uid, 'sale.order', order.id, 'manual_invoice', cr)
|
||||
sales_order_obj.write(cr, uid, [order.id], {'state': 'progress'})
|
||||
|
||||
if not invoices:
|
||||
raise osv.except_osv(_('Warning!'), _('Invoice cannot be created for this Sales Order Line due to one of the following reasons:\n1.The state of this sales order line is either "draft" or "cancel"!\n2.The Sales Order Line is Invoiced!'))
|
||||
|
|
|
@ -19,21 +19,7 @@
|
|||
#
|
||||
##############################################################################
|
||||
from openerp.osv import fields, osv
|
||||
|
||||
class res_groups(osv.osv):
|
||||
_name = "res.groups"
|
||||
_inherit = 'res.groups'
|
||||
_columns = {
|
||||
'share': fields.boolean('Share Group', readonly=True,
|
||||
help="Group created to set access rights for sharing data with some users.")
|
||||
}
|
||||
|
||||
def get_application_groups(self, cr, uid, domain=None, context=None):
|
||||
if domain is None:
|
||||
domain = []
|
||||
domain.append(('share', '=', False))
|
||||
return super(res_groups, self).get_application_groups(cr, uid, domain=domain, context=context)
|
||||
|
||||
from openerp import SUPERUSER_ID
|
||||
|
||||
class res_users(osv.osv):
|
||||
_name = 'res.users'
|
||||
|
@ -59,4 +45,28 @@ class res_users(osv.osv):
|
|||
}, help="External user with limited access, created only for the purpose of sharing data."),
|
||||
}
|
||||
|
||||
|
||||
class res_groups(osv.osv):
|
||||
_name = "res.groups"
|
||||
_inherit = 'res.groups'
|
||||
_columns = {
|
||||
'share': fields.boolean('Share Group', readonly=True,
|
||||
help="Group created to set access rights for sharing data with some users.")
|
||||
}
|
||||
|
||||
def init(self, cr):
|
||||
# force re-generation of the user groups view without the shared groups
|
||||
self.update_user_groups_view(cr, SUPERUSER_ID)
|
||||
parent_class = super(res_groups, self)
|
||||
if hasattr(parent_class, 'init'):
|
||||
parent_class.init(cr)
|
||||
|
||||
def get_application_groups(self, cr, uid, domain=None, context=None):
|
||||
if domain is None:
|
||||
domain = []
|
||||
domain.append(('share', '=', False))
|
||||
return super(res_groups, self).get_application_groups(cr, uid, domain=domain, context=context)
|
||||
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2012-12-22 15:56+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
|
||||
"PO-Revision-Date: 2014-04-07 13:08+0000\n"
|
||||
"Last-Translator: Dariusz Żbikowski (Krokus) <darek@krokus.com.pl>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-27 05:52+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-08 06:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16976)\n"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.inventory.line.split,line_exist_ids:0
|
||||
|
@ -1420,7 +1420,7 @@ msgstr "Zapas fizyczny"
|
|||
#: code:addons/stock/wizard/stock_move.py:214
|
||||
#, python-format
|
||||
msgid "Processing Error!"
|
||||
msgstr ""
|
||||
msgstr "Błąd przetwarzania!"
|
||||
|
||||
#. module: stock
|
||||
#: help:stock.location,chained_company_id:0
|
||||
|
@ -2623,7 +2623,7 @@ msgstr "Ustaw na projekt"
|
|||
#: model:ir.actions.act_window,name:stock.action_stock_journal_form
|
||||
#: model:ir.ui.menu,name:stock.menu_action_stock_journal_form
|
||||
msgid "Stock Journals"
|
||||
msgstr "Dzienniki mogazynowe"
|
||||
msgstr "Dzienniki magazynowe"
|
||||
|
||||
#. module: stock
|
||||
#: view:product.product:0
|
||||
|
|
|
@ -0,0 +1,139 @@
|
|||
# Swedish translation for openobject-addons
|
||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
|
||||
"PO-Revision-Date: 2014-03-31 20:14+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Swedish <sv@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-01 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: view:sale.config.settings:0
|
||||
msgid "here:"
|
||||
msgstr "här:"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: field:sale.config.settings,api_key:0
|
||||
msgid "API Key"
|
||||
msgstr "API-nyckel"
|
||||
|
||||
#. module: web_linkedin
|
||||
#. openerp-web
|
||||
#: code:addons/web_linkedin/static/src/js/linkedin.js:331
|
||||
#, python-format
|
||||
msgid "No results found"
|
||||
msgstr "Inga resultat hittades"
|
||||
|
||||
#. module: web_linkedin
|
||||
#. openerp-web
|
||||
#: code:addons/web_linkedin/static/src/js/linkedin.js:62
|
||||
#, python-format
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: view:sale.config.settings:0
|
||||
msgid "Log into LinkedIn."
|
||||
msgstr "Logga in på LinkedIn"
|
||||
|
||||
#. module: web_linkedin
|
||||
#. openerp-web
|
||||
#: code:addons/web_linkedin/static/src/xml/linkedin.xml:13
|
||||
#, python-format
|
||||
msgid "People"
|
||||
msgstr "Personer"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: model:ir.model,name:web_linkedin.model_sale_config_settings
|
||||
msgid "sale.config.settings"
|
||||
msgstr "sale.config.settings"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: field:sale.config.settings,server_domain:0
|
||||
msgid "unknown"
|
||||
msgstr "okänd"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: view:sale.config.settings:0
|
||||
msgid "https://www.linkedin.com/secure/developer"
|
||||
msgstr "https://www.linkedin.com/secure/developer"
|
||||
|
||||
#. module: web_linkedin
|
||||
#. openerp-web
|
||||
#: code:addons/web_linkedin/static/src/xml/linkedin.xml:15
|
||||
#, python-format
|
||||
msgid "Companies"
|
||||
msgstr "Bolag"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: view:sale.config.settings:0
|
||||
msgid "API key"
|
||||
msgstr "API nyckel"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: view:sale.config.settings:0
|
||||
msgid "Copy the"
|
||||
msgstr "Kopiera"
|
||||
|
||||
#. module: web_linkedin
|
||||
#. openerp-web
|
||||
#: code:addons/web_linkedin/static/src/js/linkedin.js:263
|
||||
#, python-format
|
||||
msgid "LinkedIn search"
|
||||
msgstr "Linkedinsökning"
|
||||
|
||||
#. module: web_linkedin
|
||||
#. openerp-web
|
||||
#: code:addons/web_linkedin/static/src/xml/linkedin.xml:31
|
||||
#, python-format
|
||||
msgid ""
|
||||
"LinkedIn access was not enabled on this server.\n"
|
||||
" Please ask your administrator to configure it in Settings > "
|
||||
"Configuration > Sales > Social Network Integration."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_linkedin
|
||||
#: view:sale.config.settings:0
|
||||
msgid ""
|
||||
"To use the LinkedIn module with this database, an API Key is required. "
|
||||
"Please follow this procedure:"
|
||||
msgstr ""
|
||||
"För att använda Linkedin-modulen med denna databas krävs en API-nyckel. Följ "
|
||||
"denna procedur:"
|
||||
|
||||
#. module: web_linkedin
|
||||
#. openerp-web
|
||||
#: code:addons/web_linkedin/static/src/js/linkedin.js:60
|
||||
#, python-format
|
||||
msgid "LinkedIn is not enabled"
|
||||
msgstr "LinkedIn är inte aktiverad"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: view:sale.config.settings:0
|
||||
msgid "Add a new application and fill the form:"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_linkedin
|
||||
#: view:sale.config.settings:0
|
||||
msgid "Go to this URL:"
|
||||
msgstr "Gå till denna URL:"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: view:sale.config.settings:0
|
||||
msgid "The programming tool is Javascript"
|
||||
msgstr "Programmeringshjälpmedlet är Javascript"
|
||||
|
||||
#. module: web_linkedin
|
||||
#: view:sale.config.settings:0
|
||||
msgid "JavaScript API Domain:"
|
||||
msgstr "JavaScript API Domän:"
|
|
@ -206,7 +206,7 @@ class Website(openerp.addons.web.controllers.main.Home):
|
|||
views_ids = [view.get('id') for view in views if view.get('active')]
|
||||
domain = [('type', '=', 'view'), ('res_id', 'in', views_ids), ('lang', '=', lang)]
|
||||
irt = request.registry.get('ir.translation')
|
||||
return irt.search_read(request.cr, request.uid, domain, ['id', 'res_id', 'value'], context=request.context)
|
||||
return irt.search_read(request.cr, request.uid, domain, ['id', 'res_id', 'value','state','gengo_translation'], context=request.context)
|
||||
|
||||
@http.route('/website/set_translations', type='json', auth='public', website=True)
|
||||
def set_translations(self, data, lang):
|
||||
|
@ -240,6 +240,9 @@ class Website(openerp.addons.web.controllers.main.Home):
|
|||
'source': initial_content,
|
||||
'value': new_content,
|
||||
}
|
||||
if t.get('gengo_translation'):
|
||||
new_trans['gengo_translation'] = t.get('gengo_translation')
|
||||
new_trans['gengo_comment'] = t.get('gengo_comment')
|
||||
irt.create(request.cr, request.uid, new_trans)
|
||||
return True
|
||||
|
||||
|
|
|
@ -1,67 +0,0 @@
|
|||
//
|
||||
// Alerts
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base styles
|
||||
// -------------------------
|
||||
|
||||
.alert {
|
||||
padding: @alert-padding;
|
||||
margin-bottom: @line-height-computed;
|
||||
border: 1px solid transparent;
|
||||
border-radius: @alert-border-radius;
|
||||
|
||||
// Headings for larger alerts
|
||||
h4 {
|
||||
margin-top: 0;
|
||||
// Specified for the h4 to prevent conflicts of changing @headings-color
|
||||
color: inherit;
|
||||
}
|
||||
// Provide class for links that match alerts
|
||||
.alert-link {
|
||||
font-weight: @alert-link-font-weight;
|
||||
}
|
||||
|
||||
// Improve alignment and spacing of inner content
|
||||
> p,
|
||||
> ul {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
> p + p {
|
||||
margin-top: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
// Dismissable alerts
|
||||
//
|
||||
// Expand the right padding and account for the close button's positioning.
|
||||
|
||||
.alert-dismissable {
|
||||
padding-right: (@alert-padding + 20);
|
||||
|
||||
// Adjust close link position
|
||||
.close {
|
||||
position: relative;
|
||||
top: -2px;
|
||||
right: -21px;
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
// Alternate styles
|
||||
//
|
||||
// Generate contextual modifier classes for colorizing the alert.
|
||||
|
||||
.alert-success {
|
||||
.alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
|
||||
}
|
||||
.alert-info {
|
||||
.alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
|
||||
}
|
||||
.alert-warning {
|
||||
.alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
|
||||
}
|
||||
.alert-danger {
|
||||
.alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
//
|
||||
// Badges
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base classes
|
||||
.badge {
|
||||
display: inline-block;
|
||||
min-width: 10px;
|
||||
padding: 3px 7px;
|
||||
font-size: @font-size-small;
|
||||
font-weight: @badge-font-weight;
|
||||
color: @badge-color;
|
||||
line-height: @badge-line-height;
|
||||
vertical-align: baseline;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
background-color: @badge-bg;
|
||||
border-radius: @badge-border-radius;
|
||||
|
||||
// Empty badges collapse automatically (not available in IE8)
|
||||
&:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// Quick fix for badges in buttons
|
||||
.btn & {
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
.btn-xs & {
|
||||
top: 0;
|
||||
padding: 1px 5px;
|
||||
}
|
||||
}
|
||||
|
||||
// Hover state, but only for links
|
||||
a.badge {
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @badge-link-hover-color;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
// Account for counters in navs
|
||||
a.list-group-item.active > .badge,
|
||||
.nav-pills > .active > a > .badge {
|
||||
color: @badge-active-color;
|
||||
background-color: @badge-active-bg;
|
||||
}
|
||||
.nav-pills > li > a > .badge {
|
||||
margin-left: 3px;
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
// Core variables and mixins
|
||||
@import "variables.less";
|
||||
@import "mixins.less";
|
||||
|
||||
// Reset
|
||||
@import "normalize.less";
|
||||
@import "print.less";
|
||||
|
||||
// Core CSS
|
||||
@import "scaffolding.less";
|
||||
@import "type.less";
|
||||
@import "code.less";
|
||||
@import "grid.less";
|
||||
@import "tables.less";
|
||||
@import "forms.less";
|
||||
@import "buttons.less";
|
||||
|
||||
// Components
|
||||
@import "component-animations.less";
|
||||
// @import "glyphicons.less";
|
||||
@import "dropdowns.less";
|
||||
@import "button-groups.less";
|
||||
@import "input-groups.less";
|
||||
@import "navs.less";
|
||||
@import "navbar.less";
|
||||
@import "breadcrumbs.less";
|
||||
@import "pagination.less";
|
||||
@import "pager.less";
|
||||
@import "labels.less";
|
||||
@import "badges.less";
|
||||
@import "jumbotron.less";
|
||||
@import "thumbnails.less";
|
||||
@import "alerts.less";
|
||||
@import "progress-bars.less";
|
||||
@import "media.less";
|
||||
@import "list-group.less";
|
||||
@import "panels.less";
|
||||
@import "wells.less";
|
||||
@import "close.less";
|
||||
|
||||
// Components w/ JavaScript
|
||||
@import "modals.less";
|
||||
@import "tooltip.less";
|
||||
@import "popovers.less";
|
||||
@import "carousel.less";
|
||||
|
||||
// Utility classes
|
||||
@import "utilities.less";
|
||||
@import "responsive-utilities.less";
|
|
@ -1,26 +0,0 @@
|
|||
//
|
||||
// Breadcrumbs
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
.breadcrumb {
|
||||
padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
|
||||
margin-bottom: @line-height-computed;
|
||||
list-style: none;
|
||||
background-color: @breadcrumb-bg;
|
||||
border-radius: @border-radius-base;
|
||||
|
||||
> li {
|
||||
display: inline-block;
|
||||
|
||||
+ li:before {
|
||||
content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
|
||||
padding: 0 5px;
|
||||
color: @breadcrumb-color;
|
||||
}
|
||||
}
|
||||
|
||||
> .active {
|
||||
color: @breadcrumb-active-color;
|
||||
}
|
||||
}
|
|
@ -1,226 +0,0 @@
|
|||
//
|
||||
// Button groups
|
||||
// --------------------------------------------------
|
||||
|
||||
// Make the div behave like a button
|
||||
.btn-group,
|
||||
.btn-group-vertical {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
vertical-align: middle; // match .btn alignment given font-size hack above
|
||||
> .btn {
|
||||
position: relative;
|
||||
float: left;
|
||||
// Bring the "active" button to the front
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active,
|
||||
&.active {
|
||||
z-index: 2;
|
||||
}
|
||||
&:focus {
|
||||
// Remove focus outline when dropdown JS adds it after closing the menu
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent double borders when buttons are next to each other
|
||||
.btn-group {
|
||||
.btn + .btn,
|
||||
.btn + .btn-group,
|
||||
.btn-group + .btn,
|
||||
.btn-group + .btn-group {
|
||||
margin-left: -1px;
|
||||
}
|
||||
}
|
||||
|
||||
// Optional: Group multiple button groups together for a toolbar
|
||||
.btn-toolbar {
|
||||
margin-left: -5px; // Offset the first child's margin
|
||||
&:extend(.clearfix all);
|
||||
|
||||
.btn-group,
|
||||
.input-group {
|
||||
float: left;
|
||||
}
|
||||
> .btn,
|
||||
> .btn-group,
|
||||
> .input-group {
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
|
||||
.btn-group > .btn:first-child {
|
||||
margin-left: 0;
|
||||
&:not(:last-child):not(.dropdown-toggle) {
|
||||
.border-right-radius(0);
|
||||
}
|
||||
}
|
||||
// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
|
||||
.btn-group > .btn:last-child:not(:first-child),
|
||||
.btn-group > .dropdown-toggle:not(:first-child) {
|
||||
.border-left-radius(0);
|
||||
}
|
||||
|
||||
// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
|
||||
.btn-group > .btn-group {
|
||||
float: left;
|
||||
}
|
||||
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
|
||||
border-radius: 0;
|
||||
}
|
||||
.btn-group > .btn-group:first-child {
|
||||
> .btn:last-child,
|
||||
> .dropdown-toggle {
|
||||
.border-right-radius(0);
|
||||
}
|
||||
}
|
||||
.btn-group > .btn-group:last-child > .btn:first-child {
|
||||
.border-left-radius(0);
|
||||
}
|
||||
|
||||
// On active and open, don't show outline
|
||||
.btn-group .dropdown-toggle:active,
|
||||
.btn-group.open .dropdown-toggle {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
|
||||
// Sizing
|
||||
//
|
||||
// Remix the default button sizing classes into new ones for easier manipulation.
|
||||
|
||||
.btn-group-xs > .btn { &:extend(.btn-xs); }
|
||||
.btn-group-sm > .btn { &:extend(.btn-sm); }
|
||||
.btn-group-lg > .btn { &:extend(.btn-lg); }
|
||||
|
||||
|
||||
// Split button dropdowns
|
||||
// ----------------------
|
||||
|
||||
// Give the line between buttons some depth
|
||||
.btn-group > .btn + .dropdown-toggle {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
.btn-group > .btn-lg + .dropdown-toggle {
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
// The clickable button for toggling the menu
|
||||
// Remove the gradient and set the same inset shadow as the :active state
|
||||
.btn-group.open .dropdown-toggle {
|
||||
.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
|
||||
|
||||
// Show no shadow for `.btn-link` since it has no other button styles.
|
||||
&.btn-link {
|
||||
.box-shadow(none);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Reposition the caret
|
||||
.btn .caret {
|
||||
margin-left: 0;
|
||||
}
|
||||
// Carets in other button sizes
|
||||
.btn-lg .caret {
|
||||
border-width: @caret-width-large @caret-width-large 0;
|
||||
border-bottom-width: 0;
|
||||
}
|
||||
// Upside down carets for .dropup
|
||||
.dropup .btn-lg .caret {
|
||||
border-width: 0 @caret-width-large @caret-width-large;
|
||||
}
|
||||
|
||||
|
||||
// Vertical button groups
|
||||
// ----------------------
|
||||
|
||||
.btn-group-vertical {
|
||||
> .btn,
|
||||
> .btn-group,
|
||||
> .btn-group > .btn {
|
||||
display: block;
|
||||
float: none;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
// Clear floats so dropdown menus can be properly placed
|
||||
> .btn-group {
|
||||
&:extend(.clearfix all);
|
||||
> .btn {
|
||||
float: none;
|
||||
}
|
||||
}
|
||||
|
||||
> .btn + .btn,
|
||||
> .btn + .btn-group,
|
||||
> .btn-group + .btn,
|
||||
> .btn-group + .btn-group {
|
||||
margin-top: -1px;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-group-vertical > .btn {
|
||||
&:not(:first-child):not(:last-child) {
|
||||
border-radius: 0;
|
||||
}
|
||||
&:first-child:not(:last-child) {
|
||||
border-top-right-radius: @border-radius-base;
|
||||
.border-bottom-radius(0);
|
||||
}
|
||||
&:last-child:not(:first-child) {
|
||||
border-bottom-left-radius: @border-radius-base;
|
||||
.border-top-radius(0);
|
||||
}
|
||||
}
|
||||
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
|
||||
border-radius: 0;
|
||||
}
|
||||
.btn-group-vertical > .btn-group:first-child:not(:last-child) {
|
||||
> .btn:last-child,
|
||||
> .dropdown-toggle {
|
||||
.border-bottom-radius(0);
|
||||
}
|
||||
}
|
||||
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
|
||||
.border-top-radius(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Justified button groups
|
||||
// ----------------------
|
||||
|
||||
.btn-group-justified {
|
||||
display: table;
|
||||
width: 100%;
|
||||
table-layout: fixed;
|
||||
border-collapse: separate;
|
||||
> .btn,
|
||||
> .btn-group {
|
||||
float: none;
|
||||
display: table-cell;
|
||||
width: 1%;
|
||||
}
|
||||
> .btn-group .btn {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Checkbox and radio options
|
||||
[data-toggle="buttons"] > .btn > input[type="radio"],
|
||||
[data-toggle="buttons"] > .btn > input[type="checkbox"] {
|
||||
display: none;
|
||||
}
|
|
@ -1,159 +0,0 @@
|
|||
//
|
||||
// Buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Base styles
|
||||
// --------------------------------------------------
|
||||
|
||||
.btn {
|
||||
display: inline-block;
|
||||
margin-bottom: 0; // For input.btn
|
||||
font-weight: @btn-font-weight;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
|
||||
border: 1px solid transparent;
|
||||
white-space: nowrap;
|
||||
.button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);
|
||||
.user-select(none);
|
||||
|
||||
&,
|
||||
&:active,
|
||||
&.active {
|
||||
&:focus {
|
||||
.tab-focus();
|
||||
}
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @btn-default-color;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
&:active,
|
||||
&.active {
|
||||
outline: 0;
|
||||
background-image: none;
|
||||
.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
|
||||
}
|
||||
|
||||
&.disabled,
|
||||
&[disabled],
|
||||
fieldset[disabled] & {
|
||||
cursor: not-allowed;
|
||||
pointer-events: none; // Future-proof disabling of clicks
|
||||
.opacity(.65);
|
||||
.box-shadow(none);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Alternate buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
.btn-default {
|
||||
.button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
|
||||
}
|
||||
.btn-primary {
|
||||
.button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
|
||||
}
|
||||
// Success appears as green
|
||||
.btn-success {
|
||||
.button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);
|
||||
}
|
||||
// Info appears as blue-green
|
||||
.btn-info {
|
||||
.button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);
|
||||
}
|
||||
// Warning appears as orange
|
||||
.btn-warning {
|
||||
.button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);
|
||||
}
|
||||
// Danger and error appear as red
|
||||
.btn-danger {
|
||||
.button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
|
||||
}
|
||||
|
||||
|
||||
// Link buttons
|
||||
// -------------------------
|
||||
|
||||
// Make a button look and behave like a link
|
||||
.btn-link {
|
||||
color: @link-color;
|
||||
font-weight: normal;
|
||||
cursor: pointer;
|
||||
border-radius: 0;
|
||||
|
||||
&,
|
||||
&:active,
|
||||
&[disabled],
|
||||
fieldset[disabled] & {
|
||||
background-color: transparent;
|
||||
.box-shadow(none);
|
||||
}
|
||||
&,
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
border-color: transparent;
|
||||
}
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @link-hover-color;
|
||||
text-decoration: underline;
|
||||
background-color: transparent;
|
||||
}
|
||||
&[disabled],
|
||||
fieldset[disabled] & {
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @btn-link-disabled-color;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Button Sizes
|
||||
// --------------------------------------------------
|
||||
|
||||
.btn-lg {
|
||||
// line-height: ensure even-numbered height of button next to large input
|
||||
.button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
|
||||
}
|
||||
.btn-sm {
|
||||
// line-height: ensure proper height of button next to small input
|
||||
.button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
|
||||
}
|
||||
.btn-xs {
|
||||
.button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);
|
||||
}
|
||||
|
||||
|
||||
// Block button
|
||||
// --------------------------------------------------
|
||||
|
||||
.btn-block {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
// Vertically space out multiple block buttons
|
||||
.btn-block + .btn-block {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
// Specificity overrides
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
input[type="button"] {
|
||||
&.btn-block {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
|
@ -1,232 +0,0 @@
|
|||
//
|
||||
// Carousel
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Wrapper for the slide container and indicators
|
||||
.carousel {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.carousel-inner {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
|
||||
> .item {
|
||||
display: none;
|
||||
position: relative;
|
||||
.transition(.6s ease-in-out left);
|
||||
|
||||
// Account for jankitude on images
|
||||
> img,
|
||||
> a > img {
|
||||
&:extend(.img-responsive);
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
> .active,
|
||||
> .next,
|
||||
> .prev { display: block; }
|
||||
|
||||
> .active {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
> .next,
|
||||
> .prev {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
> .next {
|
||||
left: 100%;
|
||||
}
|
||||
> .prev {
|
||||
left: -100%;
|
||||
}
|
||||
> .next.left,
|
||||
> .prev.right {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
> .active.left {
|
||||
left: -100%;
|
||||
}
|
||||
> .active.right {
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Left/right controls for nav
|
||||
// ---------------------------
|
||||
|
||||
.carousel-control {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: @carousel-control-width;
|
||||
.opacity(@carousel-control-opacity);
|
||||
font-size: @carousel-control-font-size;
|
||||
color: @carousel-control-color;
|
||||
text-align: center;
|
||||
text-shadow: @carousel-text-shadow;
|
||||
// We can't have this transition here because WebKit cancels the carousel
|
||||
// animation if you trip this while in the middle of another animation.
|
||||
|
||||
// Set gradients for backgrounds
|
||||
&.left {
|
||||
#gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
|
||||
}
|
||||
&.right {
|
||||
left: auto;
|
||||
right: 0;
|
||||
#gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
|
||||
}
|
||||
|
||||
// Hover/focus state
|
||||
&:hover,
|
||||
&:focus {
|
||||
outline: none;
|
||||
color: @carousel-control-color;
|
||||
text-decoration: none;
|
||||
.opacity(.9);
|
||||
}
|
||||
|
||||
// Toggles
|
||||
.icon-prev,
|
||||
.icon-next,
|
||||
.glyphicon-chevron-left,
|
||||
.glyphicon-chevron-right {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
z-index: 5;
|
||||
display: inline-block;
|
||||
}
|
||||
.icon-prev,
|
||||
.glyphicon-chevron-left {
|
||||
left: 50%;
|
||||
}
|
||||
.icon-next,
|
||||
.glyphicon-chevron-right {
|
||||
right: 50%;
|
||||
}
|
||||
.icon-prev,
|
||||
.icon-next {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-top: -10px;
|
||||
margin-left: -10px;
|
||||
font-family: serif;
|
||||
}
|
||||
|
||||
.icon-prev {
|
||||
&:before {
|
||||
content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
|
||||
}
|
||||
}
|
||||
.icon-next {
|
||||
&:before {
|
||||
content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Optional indicator pips
|
||||
//
|
||||
// Add an unordered list with the following class and add a list item for each
|
||||
// slide your carousel holds.
|
||||
|
||||
.carousel-indicators {
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
left: 50%;
|
||||
z-index: 15;
|
||||
width: 60%;
|
||||
margin-left: -30%;
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
text-align: center;
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
margin: 1px;
|
||||
text-indent: -999px;
|
||||
border: 1px solid @carousel-indicator-border-color;
|
||||
border-radius: 10px;
|
||||
cursor: pointer;
|
||||
|
||||
// IE8-9 hack for event handling
|
||||
//
|
||||
// Internet Explorer 8-9 does not support clicks on elements without a set
|
||||
// `background-color`. We cannot use `filter` since that's not viewed as a
|
||||
// background color by the browser. Thus, a hack is needed.
|
||||
//
|
||||
// For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
|
||||
// set alpha transparency for the best results possible.
|
||||
background-color: #000 \9; // IE8
|
||||
background-color: rgba(0,0,0,0); // IE9
|
||||
}
|
||||
.active {
|
||||
margin: 0;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
background-color: @carousel-indicator-active-bg;
|
||||
}
|
||||
}
|
||||
|
||||
// Optional captions
|
||||
// -----------------------------
|
||||
// Hidden by default for smaller viewports
|
||||
.carousel-caption {
|
||||
position: absolute;
|
||||
left: 15%;
|
||||
right: 15%;
|
||||
bottom: 20px;
|
||||
z-index: 10;
|
||||
padding-top: 20px;
|
||||
padding-bottom: 20px;
|
||||
color: @carousel-caption-color;
|
||||
text-align: center;
|
||||
text-shadow: @carousel-text-shadow;
|
||||
& .btn {
|
||||
text-shadow: none; // No shadow for button elements in carousel-caption
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Scale up controls for tablets and up
|
||||
@media screen and (min-width: @screen-sm-min) {
|
||||
|
||||
// Scale up the controls a smidge
|
||||
.carousel-control {
|
||||
.glyphicon-chevron-left,
|
||||
.glyphicon-chevron-right,
|
||||
.icon-prev,
|
||||
.icon-next {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin-top: -15px;
|
||||
margin-left: -15px;
|
||||
font-size: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
// Show and left align the captions
|
||||
.carousel-caption {
|
||||
left: 20%;
|
||||
right: 20%;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
// Move up the indicators
|
||||
.carousel-indicators {
|
||||
bottom: 20px;
|
||||
}
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
//
|
||||
// Close icons
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
.close {
|
||||
float: right;
|
||||
font-size: (@font-size-base * 1.5);
|
||||
font-weight: @close-font-weight;
|
||||
line-height: 1;
|
||||
color: @close-color;
|
||||
text-shadow: @close-text-shadow;
|
||||
.opacity(.2);
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @close-color;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
.opacity(.5);
|
||||
}
|
||||
|
||||
// Additional properties for button version
|
||||
// iOS requires the button element instead of an anchor tag.
|
||||
// If you want the anchor version, it requires `href="#"`.
|
||||
button& {
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
}
|
|
@ -1,63 +0,0 @@
|
|||
//
|
||||
// Code (inline and block)
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Inline and block code styles
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: @font-family-monospace;
|
||||
}
|
||||
|
||||
// Inline code
|
||||
code {
|
||||
padding: 2px 4px;
|
||||
font-size: 90%;
|
||||
color: @code-color;
|
||||
background-color: @code-bg;
|
||||
white-space: nowrap;
|
||||
border-radius: @border-radius-base;
|
||||
}
|
||||
|
||||
// User input typically entered via keyboard
|
||||
kbd {
|
||||
padding: 2px 4px;
|
||||
font-size: 90%;
|
||||
color: @kbd-color;
|
||||
background-color: @kbd-bg;
|
||||
border-radius: @border-radius-small;
|
||||
box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
|
||||
}
|
||||
|
||||
// Blocks of code
|
||||
pre {
|
||||
display: block;
|
||||
padding: ((@line-height-computed - 1) / 2);
|
||||
margin: 0 0 (@line-height-computed / 2);
|
||||
font-size: (@font-size-base - 1); // 14px to 13px
|
||||
line-height: @line-height-base;
|
||||
word-break: break-all;
|
||||
word-wrap: break-word;
|
||||
color: @pre-color;
|
||||
background-color: @pre-bg;
|
||||
border: 1px solid @pre-border-color;
|
||||
border-radius: @border-radius-base;
|
||||
|
||||
// Account for some code outputs that place code tags in pre tags
|
||||
code {
|
||||
padding: 0;
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
white-space: pre-wrap;
|
||||
background-color: transparent;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Enable scrollable blocks of code
|
||||
.pre-scrollable {
|
||||
max-height: @pre-scrollable-max-height;
|
||||
overflow-y: scroll;
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
//
|
||||
// Component animations
|
||||
// --------------------------------------------------
|
||||
|
||||
// Heads up!
|
||||
//
|
||||
// We don't use the `.opacity()` mixin here since it causes a bug with text
|
||||
// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.
|
||||
|
||||
.fade {
|
||||
opacity: 0;
|
||||
.transition(opacity .15s linear);
|
||||
&.in {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.collapse {
|
||||
display: none;
|
||||
&.in {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.collapsing {
|
||||
position: relative;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
.transition(height .35s ease);
|
||||
}
|
|
@ -1,213 +0,0 @@
|
|||
//
|
||||
// Dropdown menus
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Dropdown arrow/caret
|
||||
.caret {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-left: 2px;
|
||||
vertical-align: middle;
|
||||
border-top: @caret-width-base solid;
|
||||
border-right: @caret-width-base solid transparent;
|
||||
border-left: @caret-width-base solid transparent;
|
||||
}
|
||||
|
||||
// The dropdown wrapper (div)
|
||||
.dropdown {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
// Prevent the focus on the dropdown toggle when closing dropdowns
|
||||
.dropdown-toggle:focus {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
// The dropdown menu (ul)
|
||||
.dropdown-menu {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
z-index: @zindex-dropdown;
|
||||
display: none; // none by default, but block on "open" of the menu
|
||||
float: left;
|
||||
min-width: 160px;
|
||||
padding: 5px 0;
|
||||
margin: 2px 0 0; // override default ul
|
||||
list-style: none;
|
||||
font-size: @font-size-base;
|
||||
background-color: @dropdown-bg;
|
||||
border: 1px solid @dropdown-fallback-border; // IE8 fallback
|
||||
border: 1px solid @dropdown-border;
|
||||
border-radius: @border-radius-base;
|
||||
.box-shadow(0 6px 12px rgba(0,0,0,.175));
|
||||
background-clip: padding-box;
|
||||
|
||||
// Aligns the dropdown menu to right
|
||||
//
|
||||
// Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
|
||||
&.pull-right {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
// Dividers (basically an hr) within the dropdown
|
||||
.divider {
|
||||
.nav-divider(@dropdown-divider-bg);
|
||||
}
|
||||
|
||||
// Links within the dropdown menu
|
||||
> li > a {
|
||||
display: block;
|
||||
padding: 3px 20px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: @line-height-base;
|
||||
color: @dropdown-link-color;
|
||||
white-space: nowrap; // prevent links from randomly breaking onto new lines
|
||||
}
|
||||
}
|
||||
|
||||
// Hover/Focus state
|
||||
.dropdown-menu > li > a {
|
||||
&:hover,
|
||||
&:focus {
|
||||
text-decoration: none;
|
||||
color: @dropdown-link-hover-color;
|
||||
background-color: @dropdown-link-hover-bg;
|
||||
}
|
||||
}
|
||||
|
||||
// Active state
|
||||
.dropdown-menu > .active > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @dropdown-link-active-color;
|
||||
text-decoration: none;
|
||||
outline: 0;
|
||||
background-color: @dropdown-link-active-bg;
|
||||
}
|
||||
}
|
||||
|
||||
// Disabled state
|
||||
//
|
||||
// Gray out text and ensure the hover/focus state remains gray
|
||||
|
||||
.dropdown-menu > .disabled > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @dropdown-link-disabled-color;
|
||||
}
|
||||
}
|
||||
// Nuke hover/focus effects
|
||||
.dropdown-menu > .disabled > a {
|
||||
&:hover,
|
||||
&:focus {
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
background-image: none; // Remove CSS gradient
|
||||
.reset-filter();
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
|
||||
// Open state for the dropdown
|
||||
.open {
|
||||
// Show the menu
|
||||
> .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
// Remove the outline when :focus is triggered
|
||||
> a {
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Menu positioning
|
||||
//
|
||||
// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
|
||||
// menu with the parent.
|
||||
.dropdown-menu-right {
|
||||
left: auto; // Reset the default from `.dropdown-menu`
|
||||
right: 0;
|
||||
}
|
||||
// With v3, we enabled auto-flipping if you have a dropdown within a right
|
||||
// aligned nav component. To enable the undoing of that, we provide an override
|
||||
// to restore the default dropdown menu alignment.
|
||||
//
|
||||
// This is only for left-aligning a dropdown menu within a `.navbar-right` or
|
||||
// `.pull-right` nav component.
|
||||
.dropdown-menu-left {
|
||||
left: 0;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
// Dropdown section headers
|
||||
.dropdown-header {
|
||||
display: block;
|
||||
padding: 3px 20px;
|
||||
font-size: @font-size-small;
|
||||
line-height: @line-height-base;
|
||||
color: @dropdown-header-color;
|
||||
}
|
||||
|
||||
// Backdrop to catch body clicks on mobile, etc.
|
||||
.dropdown-backdrop {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
top: 0;
|
||||
z-index: (@zindex-dropdown - 10);
|
||||
}
|
||||
|
||||
// Right aligned dropdowns
|
||||
.pull-right > .dropdown-menu {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
// Allow for dropdowns to go bottom up (aka, dropup-menu)
|
||||
//
|
||||
// Just add .dropup after the standard .dropdown class and you're set, bro.
|
||||
// TODO: abstract this so that the navbar fixed styles are not placed here?
|
||||
|
||||
.dropup,
|
||||
.navbar-fixed-bottom .dropdown {
|
||||
// Reverse the caret
|
||||
.caret {
|
||||
border-top: 0;
|
||||
border-bottom: @caret-width-base solid;
|
||||
content: "";
|
||||
}
|
||||
// Different positioning for bottom up menu
|
||||
.dropdown-menu {
|
||||
top: auto;
|
||||
bottom: 100%;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Component alignment
|
||||
//
|
||||
// Reiterate per navbar.less and the modified component alignment there.
|
||||
|
||||
@media (min-width: @grid-float-breakpoint) {
|
||||
.navbar-right {
|
||||
.dropdown-menu {
|
||||
.dropdown-menu-right();
|
||||
}
|
||||
// Necessary for overrides of the default right aligned menu.
|
||||
// Will remove come v4 in all likelihood.
|
||||
.dropdown-menu-left {
|
||||
.dropdown-menu-left();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,438 +0,0 @@
|
|||
//
|
||||
// Forms
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Normalize non-controls
|
||||
//
|
||||
// Restyle and baseline non-control form elements.
|
||||
|
||||
fieldset {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
// Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,
|
||||
// so we reset that to ensure it behaves more like a standard block element.
|
||||
// See https://github.com/twbs/bootstrap/issues/12359.
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: @line-height-computed;
|
||||
font-size: (@font-size-base * 1.5);
|
||||
line-height: inherit;
|
||||
color: @legend-color;
|
||||
border: 0;
|
||||
border-bottom: 1px solid @legend-border-color;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
margin-bottom: 5px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
// Normalize form controls
|
||||
//
|
||||
// While most of our form styles require extra classes, some basic normalization
|
||||
// is required to ensure optimum display with or without those classes to better
|
||||
// address browser inconsistencies.
|
||||
|
||||
// Override content-box in Normalize (* isn't specific enough)
|
||||
input[type="search"] {
|
||||
.box-sizing(border-box);
|
||||
}
|
||||
|
||||
// Position radios and checkboxes better
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
margin: 4px 0 0;
|
||||
margin-top: 1px \9; /* IE8-9 */
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
// Set the height of file controls to match text inputs
|
||||
input[type="file"] {
|
||||
display: block;
|
||||
}
|
||||
|
||||
// Make range inputs behave like textual form controls
|
||||
input[type="range"] {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
// Make multiple select elements height not fixed
|
||||
select[multiple],
|
||||
select[size] {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
// Focus for file, radio, and checkbox
|
||||
input[type="file"]:focus,
|
||||
input[type="radio"]:focus,
|
||||
input[type="checkbox"]:focus {
|
||||
.tab-focus();
|
||||
}
|
||||
|
||||
// Adjust output element
|
||||
output {
|
||||
display: block;
|
||||
padding-top: (@padding-base-vertical + 1);
|
||||
font-size: @font-size-base;
|
||||
line-height: @line-height-base;
|
||||
color: @input-color;
|
||||
}
|
||||
|
||||
|
||||
// Common form controls
|
||||
//
|
||||
// Shared size and type resets for form controls. Apply `.form-control` to any
|
||||
// of the following form controls:
|
||||
//
|
||||
// select
|
||||
// textarea
|
||||
// input[type="text"]
|
||||
// input[type="password"]
|
||||
// input[type="datetime"]
|
||||
// input[type="datetime-local"]
|
||||
// input[type="date"]
|
||||
// input[type="month"]
|
||||
// input[type="time"]
|
||||
// input[type="week"]
|
||||
// input[type="number"]
|
||||
// input[type="email"]
|
||||
// input[type="url"]
|
||||
// input[type="search"]
|
||||
// input[type="tel"]
|
||||
// input[type="color"]
|
||||
|
||||
.form-control {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
|
||||
padding: @padding-base-vertical @padding-base-horizontal;
|
||||
font-size: @font-size-base;
|
||||
line-height: @line-height-base;
|
||||
color: @input-color;
|
||||
background-color: @input-bg;
|
||||
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
|
||||
border: 1px solid @input-border;
|
||||
border-radius: @input-border-radius;
|
||||
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
|
||||
.transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
|
||||
|
||||
// Customize the `:focus` state to imitate native WebKit styles.
|
||||
.form-control-focus();
|
||||
|
||||
// Placeholder
|
||||
.placeholder();
|
||||
|
||||
// Disabled and read-only inputs
|
||||
//
|
||||
// HTML5 says that controls under a fieldset > legend:first-child won't be
|
||||
// disabled if the fieldset is disabled. Due to implementation difficulty, we
|
||||
// don't honor that edge case; we style them as disabled anyway.
|
||||
&[disabled],
|
||||
&[readonly],
|
||||
fieldset[disabled] & {
|
||||
cursor: not-allowed;
|
||||
background-color: @input-bg-disabled;
|
||||
opacity: 1; // iOS fix for unreadable disabled content
|
||||
}
|
||||
|
||||
// Reset height for `textarea`s
|
||||
textarea& {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Search inputs in iOS
|
||||
//
|
||||
// This overrides the extra rounded corners on search inputs in iOS so that our
|
||||
// `.form-control` class can properly style them. Note that this cannot simply
|
||||
// be added to `.form-control` as it's not specific enough. For details, see
|
||||
// https://github.com/twbs/bootstrap/issues/11586.
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
|
||||
// Special styles for iOS date input
|
||||
//
|
||||
// In Mobile Safari, date inputs require a pixel line-height that matches the
|
||||
// given height of the input.
|
||||
|
||||
input[type="date"] {
|
||||
line-height: @input-height-base;
|
||||
}
|
||||
|
||||
|
||||
// Form groups
|
||||
//
|
||||
// Designed to help with the organization and spacing of vertical forms. For
|
||||
// horizontal forms, use the predefined grid classes.
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
|
||||
// Checkboxes and radios
|
||||
//
|
||||
// Indent the labels to position radios/checkboxes as hanging controls.
|
||||
|
||||
.radio,
|
||||
.checkbox {
|
||||
display: block;
|
||||
min-height: @line-height-computed; // clear the floating input if there is no label text
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
padding-left: 20px;
|
||||
label {
|
||||
display: inline;
|
||||
font-weight: normal;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.radio input[type="radio"],
|
||||
.radio-inline input[type="radio"],
|
||||
.checkbox input[type="checkbox"],
|
||||
.checkbox-inline input[type="checkbox"] {
|
||||
float: left;
|
||||
margin-left: -20px;
|
||||
}
|
||||
.radio + .radio,
|
||||
.checkbox + .checkbox {
|
||||
margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
|
||||
}
|
||||
|
||||
// Radios and checkboxes on same line
|
||||
.radio-inline,
|
||||
.checkbox-inline {
|
||||
display: inline-block;
|
||||
padding-left: 20px;
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
font-weight: normal;
|
||||
cursor: pointer;
|
||||
}
|
||||
.radio-inline + .radio-inline,
|
||||
.checkbox-inline + .checkbox-inline {
|
||||
margin-top: 0;
|
||||
margin-left: 10px; // space out consecutive inline controls
|
||||
}
|
||||
|
||||
// Apply same disabled cursor tweak as for inputs
|
||||
//
|
||||
// Note: Neither radios nor checkboxes can be readonly.
|
||||
input[type="radio"],
|
||||
input[type="checkbox"],
|
||||
.radio,
|
||||
.radio-inline,
|
||||
.checkbox,
|
||||
.checkbox-inline {
|
||||
&[disabled],
|
||||
fieldset[disabled] & {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Form control sizing
|
||||
//
|
||||
// Build on `.form-control` with modifier classes to decrease or increase the
|
||||
// height and font-size of form controls.
|
||||
|
||||
.input-sm {
|
||||
.input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
|
||||
}
|
||||
|
||||
.input-lg {
|
||||
.input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
|
||||
}
|
||||
|
||||
|
||||
// Form control feedback states
|
||||
//
|
||||
// Apply contextual and semantic states to individual form controls.
|
||||
|
||||
.has-feedback {
|
||||
// Enable absolute positioning
|
||||
position: relative;
|
||||
|
||||
// Ensure icons don't overlap text
|
||||
.form-control {
|
||||
padding-right: (@input-height-base * 1.25);
|
||||
}
|
||||
|
||||
// Feedback icon (requires .glyphicon classes)
|
||||
.form-control-feedback {
|
||||
position: absolute;
|
||||
top: (@line-height-computed + 5); // Height of the `label` and its margin
|
||||
right: 0;
|
||||
display: block;
|
||||
width: @input-height-base;
|
||||
height: @input-height-base;
|
||||
line-height: @input-height-base;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
// Feedback states
|
||||
.has-success {
|
||||
.form-control-validation(@state-success-text; @state-success-text; @state-success-bg);
|
||||
}
|
||||
.has-warning {
|
||||
.form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);
|
||||
}
|
||||
.has-error {
|
||||
.form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
|
||||
}
|
||||
|
||||
|
||||
// Static form control text
|
||||
//
|
||||
// Apply class to a `p` element to make any string of text align with labels in
|
||||
// a horizontal form layout.
|
||||
|
||||
.form-control-static {
|
||||
margin-bottom: 0; // Remove default margin from `p`
|
||||
}
|
||||
|
||||
|
||||
// Help text
|
||||
//
|
||||
// Apply to any element you wish to create light text for placement immediately
|
||||
// below a form control. Use for general help, formatting, or instructional text.
|
||||
|
||||
.help-block {
|
||||
display: block; // account for any element using help-block
|
||||
margin-top: 5px;
|
||||
margin-bottom: 10px;
|
||||
color: lighten(@text-color, 25%); // lighten the text some for contrast
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Inline forms
|
||||
//
|
||||
// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
|
||||
// forms begin stacked on extra small (mobile) devices and then go inline when
|
||||
// viewports reach <768px.
|
||||
//
|
||||
// Requires wrapping inputs and labels with `.form-group` for proper display of
|
||||
// default HTML form controls and our custom form controls (e.g., input groups).
|
||||
//
|
||||
// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
|
||||
|
||||
.form-inline {
|
||||
|
||||
// Kick in the inline
|
||||
@media (min-width: @screen-sm-min) {
|
||||
// Inline-block all the things for "inline"
|
||||
.form-group {
|
||||
display: inline-block;
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
// In navbar-form, allow folks to *not* use `.form-group`
|
||||
.form-control {
|
||||
display: inline-block;
|
||||
width: auto; // Prevent labels from stacking above inputs in `.form-group`
|
||||
vertical-align: middle;
|
||||
}
|
||||
// Input groups need that 100% width though
|
||||
.input-group > .form-control {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.control-label {
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
// Remove default margin on radios/checkboxes that were used for stacking, and
|
||||
// then undo the floating of radios and checkboxes to match (which also avoids
|
||||
// a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).
|
||||
.radio,
|
||||
.checkbox {
|
||||
display: inline-block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-left: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.radio input[type="radio"],
|
||||
.checkbox input[type="checkbox"] {
|
||||
float: none;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
// Validation states
|
||||
//
|
||||
// Reposition the icon because it's now within a grid column and columns have
|
||||
// `position: relative;` on them. Also accounts for the grid gutter padding.
|
||||
.has-feedback .form-control-feedback {
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Horizontal forms
|
||||
//
|
||||
// Horizontal forms are built on grid classes and allow you to create forms with
|
||||
// labels on the left and inputs on the right.
|
||||
|
||||
.form-horizontal {
|
||||
|
||||
// Consistent vertical alignment of labels, radios, and checkboxes
|
||||
.control-label,
|
||||
.radio,
|
||||
.checkbox,
|
||||
.radio-inline,
|
||||
.checkbox-inline {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-top: (@padding-base-vertical + 1); // Default padding plus a border
|
||||
}
|
||||
// Account for padding we're adding to ensure the alignment and of help text
|
||||
// and other content below items
|
||||
.radio,
|
||||
.checkbox {
|
||||
min-height: (@line-height-computed + (@padding-base-vertical + 1));
|
||||
}
|
||||
|
||||
// Make form groups behave like rows
|
||||
.form-group {
|
||||
.make-row();
|
||||
}
|
||||
|
||||
.form-control-static {
|
||||
padding-top: (@padding-base-vertical + 1);
|
||||
}
|
||||
|
||||
// Only right align form labels here when the columns stop stacking
|
||||
@media (min-width: @screen-sm-min) {
|
||||
.control-label {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
// Validation states
|
||||
//
|
||||
// Reposition the icon because it's now within a grid column and columns have
|
||||
// `position: relative;` on them. Also accounts for the grid gutter padding.
|
||||
.has-feedback .form-control-feedback {
|
||||
top: 0;
|
||||
right: (@grid-gutter-width / 2);
|
||||
}
|
||||
}
|
|
@ -1,233 +0,0 @@
|
|||
//
|
||||
// Glyphicons for Bootstrap
|
||||
//
|
||||
// Since icons are fonts, they can be placed anywhere text is placed and are
|
||||
// thus automatically sized to match the surrounding child. To use, create an
|
||||
// inline element with the appropriate classes, like so:
|
||||
//
|
||||
// <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a>
|
||||
|
||||
// Import the fonts
|
||||
@font-face {
|
||||
font-family: 'Glyphicons Halflings';
|
||||
src: ~"url('@{icon-font-path}@{icon-font-name}.eot')";
|
||||
src: ~"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')",
|
||||
~"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')",
|
||||
~"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')",
|
||||
~"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')";
|
||||
}
|
||||
|
||||
// Catchall baseclass
|
||||
.glyphicon {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
display: inline-block;
|
||||
font-family: 'Glyphicons Halflings';
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
// Individual icons
|
||||
.glyphicon-asterisk { &:before { content: "\2a"; } }
|
||||
.glyphicon-plus { &:before { content: "\2b"; } }
|
||||
.glyphicon-euro { &:before { content: "\20ac"; } }
|
||||
.glyphicon-minus { &:before { content: "\2212"; } }
|
||||
.glyphicon-cloud { &:before { content: "\2601"; } }
|
||||
.glyphicon-envelope { &:before { content: "\2709"; } }
|
||||
.glyphicon-pencil { &:before { content: "\270f"; } }
|
||||
.glyphicon-glass { &:before { content: "\e001"; } }
|
||||
.glyphicon-music { &:before { content: "\e002"; } }
|
||||
.glyphicon-search { &:before { content: "\e003"; } }
|
||||
.glyphicon-heart { &:before { content: "\e005"; } }
|
||||
.glyphicon-star { &:before { content: "\e006"; } }
|
||||
.glyphicon-star-empty { &:before { content: "\e007"; } }
|
||||
.glyphicon-user { &:before { content: "\e008"; } }
|
||||
.glyphicon-film { &:before { content: "\e009"; } }
|
||||
.glyphicon-th-large { &:before { content: "\e010"; } }
|
||||
.glyphicon-th { &:before { content: "\e011"; } }
|
||||
.glyphicon-th-list { &:before { content: "\e012"; } }
|
||||
.glyphicon-ok { &:before { content: "\e013"; } }
|
||||
.glyphicon-remove { &:before { content: "\e014"; } }
|
||||
.glyphicon-zoom-in { &:before { content: "\e015"; } }
|
||||
.glyphicon-zoom-out { &:before { content: "\e016"; } }
|
||||
.glyphicon-off { &:before { content: "\e017"; } }
|
||||
.glyphicon-signal { &:before { content: "\e018"; } }
|
||||
.glyphicon-cog { &:before { content: "\e019"; } }
|
||||
.glyphicon-trash { &:before { content: "\e020"; } }
|
||||
.glyphicon-home { &:before { content: "\e021"; } }
|
||||
.glyphicon-file { &:before { content: "\e022"; } }
|
||||
.glyphicon-time { &:before { content: "\e023"; } }
|
||||
.glyphicon-road { &:before { content: "\e024"; } }
|
||||
.glyphicon-download-alt { &:before { content: "\e025"; } }
|
||||
.glyphicon-download { &:before { content: "\e026"; } }
|
||||
.glyphicon-upload { &:before { content: "\e027"; } }
|
||||
.glyphicon-inbox { &:before { content: "\e028"; } }
|
||||
.glyphicon-play-circle { &:before { content: "\e029"; } }
|
||||
.glyphicon-repeat { &:before { content: "\e030"; } }
|
||||
.glyphicon-refresh { &:before { content: "\e031"; } }
|
||||
.glyphicon-list-alt { &:before { content: "\e032"; } }
|
||||
.glyphicon-lock { &:before { content: "\e033"; } }
|
||||
.glyphicon-flag { &:before { content: "\e034"; } }
|
||||
.glyphicon-headphones { &:before { content: "\e035"; } }
|
||||
.glyphicon-volume-off { &:before { content: "\e036"; } }
|
||||
.glyphicon-volume-down { &:before { content: "\e037"; } }
|
||||
.glyphicon-volume-up { &:before { content: "\e038"; } }
|
||||
.glyphicon-qrcode { &:before { content: "\e039"; } }
|
||||
.glyphicon-barcode { &:before { content: "\e040"; } }
|
||||
.glyphicon-tag { &:before { content: "\e041"; } }
|
||||
.glyphicon-tags { &:before { content: "\e042"; } }
|
||||
.glyphicon-book { &:before { content: "\e043"; } }
|
||||
.glyphicon-bookmark { &:before { content: "\e044"; } }
|
||||
.glyphicon-print { &:before { content: "\e045"; } }
|
||||
.glyphicon-camera { &:before { content: "\e046"; } }
|
||||
.glyphicon-font { &:before { content: "\e047"; } }
|
||||
.glyphicon-bold { &:before { content: "\e048"; } }
|
||||
.glyphicon-italic { &:before { content: "\e049"; } }
|
||||
.glyphicon-text-height { &:before { content: "\e050"; } }
|
||||
.glyphicon-text-width { &:before { content: "\e051"; } }
|
||||
.glyphicon-align-left { &:before { content: "\e052"; } }
|
||||
.glyphicon-align-center { &:before { content: "\e053"; } }
|
||||
.glyphicon-align-right { &:before { content: "\e054"; } }
|
||||
.glyphicon-align-justify { &:before { content: "\e055"; } }
|
||||
.glyphicon-list { &:before { content: "\e056"; } }
|
||||
.glyphicon-indent-left { &:before { content: "\e057"; } }
|
||||
.glyphicon-indent-right { &:before { content: "\e058"; } }
|
||||
.glyphicon-facetime-video { &:before { content: "\e059"; } }
|
||||
.glyphicon-picture { &:before { content: "\e060"; } }
|
||||
.glyphicon-map-marker { &:before { content: "\e062"; } }
|
||||
.glyphicon-adjust { &:before { content: "\e063"; } }
|
||||
.glyphicon-tint { &:before { content: "\e064"; } }
|
||||
.glyphicon-edit { &:before { content: "\e065"; } }
|
||||
.glyphicon-share { &:before { content: "\e066"; } }
|
||||
.glyphicon-check { &:before { content: "\e067"; } }
|
||||
.glyphicon-move { &:before { content: "\e068"; } }
|
||||
.glyphicon-step-backward { &:before { content: "\e069"; } }
|
||||
.glyphicon-fast-backward { &:before { content: "\e070"; } }
|
||||
.glyphicon-backward { &:before { content: "\e071"; } }
|
||||
.glyphicon-play { &:before { content: "\e072"; } }
|
||||
.glyphicon-pause { &:before { content: "\e073"; } }
|
||||
.glyphicon-stop { &:before { content: "\e074"; } }
|
||||
.glyphicon-forward { &:before { content: "\e075"; } }
|
||||
.glyphicon-fast-forward { &:before { content: "\e076"; } }
|
||||
.glyphicon-step-forward { &:before { content: "\e077"; } }
|
||||
.glyphicon-eject { &:before { content: "\e078"; } }
|
||||
.glyphicon-chevron-left { &:before { content: "\e079"; } }
|
||||
.glyphicon-chevron-right { &:before { content: "\e080"; } }
|
||||
.glyphicon-plus-sign { &:before { content: "\e081"; } }
|
||||
.glyphicon-minus-sign { &:before { content: "\e082"; } }
|
||||
.glyphicon-remove-sign { &:before { content: "\e083"; } }
|
||||
.glyphicon-ok-sign { &:before { content: "\e084"; } }
|
||||
.glyphicon-question-sign { &:before { content: "\e085"; } }
|
||||
.glyphicon-info-sign { &:before { content: "\e086"; } }
|
||||
.glyphicon-screenshot { &:before { content: "\e087"; } }
|
||||
.glyphicon-remove-circle { &:before { content: "\e088"; } }
|
||||
.glyphicon-ok-circle { &:before { content: "\e089"; } }
|
||||
.glyphicon-ban-circle { &:before { content: "\e090"; } }
|
||||
.glyphicon-arrow-left { &:before { content: "\e091"; } }
|
||||
.glyphicon-arrow-right { &:before { content: "\e092"; } }
|
||||
.glyphicon-arrow-up { &:before { content: "\e093"; } }
|
||||
.glyphicon-arrow-down { &:before { content: "\e094"; } }
|
||||
.glyphicon-share-alt { &:before { content: "\e095"; } }
|
||||
.glyphicon-resize-full { &:before { content: "\e096"; } }
|
||||
.glyphicon-resize-small { &:before { content: "\e097"; } }
|
||||
.glyphicon-exclamation-sign { &:before { content: "\e101"; } }
|
||||
.glyphicon-gift { &:before { content: "\e102"; } }
|
||||
.glyphicon-leaf { &:before { content: "\e103"; } }
|
||||
.glyphicon-fire { &:before { content: "\e104"; } }
|
||||
.glyphicon-eye-open { &:before { content: "\e105"; } }
|
||||
.glyphicon-eye-close { &:before { content: "\e106"; } }
|
||||
.glyphicon-warning-sign { &:before { content: "\e107"; } }
|
||||
.glyphicon-plane { &:before { content: "\e108"; } }
|
||||
.glyphicon-calendar { &:before { content: "\e109"; } }
|
||||
.glyphicon-random { &:before { content: "\e110"; } }
|
||||
.glyphicon-comment { &:before { content: "\e111"; } }
|
||||
.glyphicon-magnet { &:before { content: "\e112"; } }
|
||||
.glyphicon-chevron-up { &:before { content: "\e113"; } }
|
||||
.glyphicon-chevron-down { &:before { content: "\e114"; } }
|
||||
.glyphicon-retweet { &:before { content: "\e115"; } }
|
||||
.glyphicon-shopping-cart { &:before { content: "\e116"; } }
|
||||
.glyphicon-folder-close { &:before { content: "\e117"; } }
|
||||
.glyphicon-folder-open { &:before { content: "\e118"; } }
|
||||
.glyphicon-resize-vertical { &:before { content: "\e119"; } }
|
||||
.glyphicon-resize-horizontal { &:before { content: "\e120"; } }
|
||||
.glyphicon-hdd { &:before { content: "\e121"; } }
|
||||
.glyphicon-bullhorn { &:before { content: "\e122"; } }
|
||||
.glyphicon-bell { &:before { content: "\e123"; } }
|
||||
.glyphicon-certificate { &:before { content: "\e124"; } }
|
||||
.glyphicon-thumbs-up { &:before { content: "\e125"; } }
|
||||
.glyphicon-thumbs-down { &:before { content: "\e126"; } }
|
||||
.glyphicon-hand-right { &:before { content: "\e127"; } }
|
||||
.glyphicon-hand-left { &:before { content: "\e128"; } }
|
||||
.glyphicon-hand-up { &:before { content: "\e129"; } }
|
||||
.glyphicon-hand-down { &:before { content: "\e130"; } }
|
||||
.glyphicon-circle-arrow-right { &:before { content: "\e131"; } }
|
||||
.glyphicon-circle-arrow-left { &:before { content: "\e132"; } }
|
||||
.glyphicon-circle-arrow-up { &:before { content: "\e133"; } }
|
||||
.glyphicon-circle-arrow-down { &:before { content: "\e134"; } }
|
||||
.glyphicon-globe { &:before { content: "\e135"; } }
|
||||
.glyphicon-wrench { &:before { content: "\e136"; } }
|
||||
.glyphicon-tasks { &:before { content: "\e137"; } }
|
||||
.glyphicon-filter { &:before { content: "\e138"; } }
|
||||
.glyphicon-briefcase { &:before { content: "\e139"; } }
|
||||
.glyphicon-fullscreen { &:before { content: "\e140"; } }
|
||||
.glyphicon-dashboard { &:before { content: "\e141"; } }
|
||||
.glyphicon-paperclip { &:before { content: "\e142"; } }
|
||||
.glyphicon-heart-empty { &:before { content: "\e143"; } }
|
||||
.glyphicon-link { &:before { content: "\e144"; } }
|
||||
.glyphicon-phone { &:before { content: "\e145"; } }
|
||||
.glyphicon-pushpin { &:before { content: "\e146"; } }
|
||||
.glyphicon-usd { &:before { content: "\e148"; } }
|
||||
.glyphicon-gbp { &:before { content: "\e149"; } }
|
||||
.glyphicon-sort { &:before { content: "\e150"; } }
|
||||
.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } }
|
||||
.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } }
|
||||
.glyphicon-sort-by-order { &:before { content: "\e153"; } }
|
||||
.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } }
|
||||
.glyphicon-sort-by-attributes { &:before { content: "\e155"; } }
|
||||
.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } }
|
||||
.glyphicon-unchecked { &:before { content: "\e157"; } }
|
||||
.glyphicon-expand { &:before { content: "\e158"; } }
|
||||
.glyphicon-collapse-down { &:before { content: "\e159"; } }
|
||||
.glyphicon-collapse-up { &:before { content: "\e160"; } }
|
||||
.glyphicon-log-in { &:before { content: "\e161"; } }
|
||||
.glyphicon-flash { &:before { content: "\e162"; } }
|
||||
.glyphicon-log-out { &:before { content: "\e163"; } }
|
||||
.glyphicon-new-window { &:before { content: "\e164"; } }
|
||||
.glyphicon-record { &:before { content: "\e165"; } }
|
||||
.glyphicon-save { &:before { content: "\e166"; } }
|
||||
.glyphicon-open { &:before { content: "\e167"; } }
|
||||
.glyphicon-saved { &:before { content: "\e168"; } }
|
||||
.glyphicon-import { &:before { content: "\e169"; } }
|
||||
.glyphicon-export { &:before { content: "\e170"; } }
|
||||
.glyphicon-send { &:before { content: "\e171"; } }
|
||||
.glyphicon-floppy-disk { &:before { content: "\e172"; } }
|
||||
.glyphicon-floppy-saved { &:before { content: "\e173"; } }
|
||||
.glyphicon-floppy-remove { &:before { content: "\e174"; } }
|
||||
.glyphicon-floppy-save { &:before { content: "\e175"; } }
|
||||
.glyphicon-floppy-open { &:before { content: "\e176"; } }
|
||||
.glyphicon-credit-card { &:before { content: "\e177"; } }
|
||||
.glyphicon-transfer { &:before { content: "\e178"; } }
|
||||
.glyphicon-cutlery { &:before { content: "\e179"; } }
|
||||
.glyphicon-header { &:before { content: "\e180"; } }
|
||||
.glyphicon-compressed { &:before { content: "\e181"; } }
|
||||
.glyphicon-earphone { &:before { content: "\e182"; } }
|
||||
.glyphicon-phone-alt { &:before { content: "\e183"; } }
|
||||
.glyphicon-tower { &:before { content: "\e184"; } }
|
||||
.glyphicon-stats { &:before { content: "\e185"; } }
|
||||
.glyphicon-sd-video { &:before { content: "\e186"; } }
|
||||
.glyphicon-hd-video { &:before { content: "\e187"; } }
|
||||
.glyphicon-subtitles { &:before { content: "\e188"; } }
|
||||
.glyphicon-sound-stereo { &:before { content: "\e189"; } }
|
||||
.glyphicon-sound-dolby { &:before { content: "\e190"; } }
|
||||
.glyphicon-sound-5-1 { &:before { content: "\e191"; } }
|
||||
.glyphicon-sound-6-1 { &:before { content: "\e192"; } }
|
||||
.glyphicon-sound-7-1 { &:before { content: "\e193"; } }
|
||||
.glyphicon-copyright-mark { &:before { content: "\e194"; } }
|
||||
.glyphicon-registration-mark { &:before { content: "\e195"; } }
|
||||
.glyphicon-cloud-download { &:before { content: "\e197"; } }
|
||||
.glyphicon-cloud-upload { &:before { content: "\e198"; } }
|
||||
.glyphicon-tree-conifer { &:before { content: "\e199"; } }
|
||||
.glyphicon-tree-deciduous { &:before { content: "\e200"; } }
|
|
@ -1,84 +0,0 @@
|
|||
//
|
||||
// Grid system
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Container widths
|
||||
//
|
||||
// Set the container width, and override it for fixed navbars in media queries.
|
||||
|
||||
.container {
|
||||
.container-fixed();
|
||||
|
||||
@media (min-width: @screen-sm-min) {
|
||||
width: @container-sm;
|
||||
}
|
||||
@media (min-width: @screen-md-min) {
|
||||
width: @container-md;
|
||||
}
|
||||
@media (min-width: @screen-lg-min) {
|
||||
width: @container-lg;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Fluid container
|
||||
//
|
||||
// Utilizes the mixin meant for fixed width containers, but without any defined
|
||||
// width for fluid, full width layouts.
|
||||
|
||||
.container-fluid {
|
||||
.container-fixed();
|
||||
}
|
||||
|
||||
|
||||
// Row
|
||||
//
|
||||
// Rows contain and clear the floats of your columns.
|
||||
|
||||
.row {
|
||||
.make-row();
|
||||
}
|
||||
|
||||
|
||||
// Columns
|
||||
//
|
||||
// Common styles for small and large grid columns
|
||||
|
||||
.make-grid-columns();
|
||||
|
||||
|
||||
// Extra small grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for extra small devices like
|
||||
// smartphones.
|
||||
|
||||
.make-grid(xs);
|
||||
|
||||
|
||||
// Small grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for the small device range, from phones
|
||||
// to tablets.
|
||||
|
||||
@media (min-width: @screen-sm-min) {
|
||||
.make-grid(sm);
|
||||
}
|
||||
|
||||
|
||||
// Medium grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for the desktop device range.
|
||||
|
||||
@media (min-width: @screen-md-min) {
|
||||
.make-grid(md);
|
||||
}
|
||||
|
||||
|
||||
// Large grid
|
||||
//
|
||||
// Columns, offsets, pushes, and pulls for the large desktop device range.
|
||||
|
||||
@media (min-width: @screen-lg-min) {
|
||||
.make-grid(lg);
|
||||
}
|
|
@ -1,162 +0,0 @@
|
|||
//
|
||||
// Input groups
|
||||
// --------------------------------------------------
|
||||
|
||||
// Base styles
|
||||
// -------------------------
|
||||
.input-group {
|
||||
position: relative; // For dropdowns
|
||||
display: table;
|
||||
border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
|
||||
|
||||
// Undo padding and float of grid classes
|
||||
&[class*="col-"] {
|
||||
float: none;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
// Ensure that the input is always above the *appended* addon button for
|
||||
// proper border colors.
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
|
||||
// IE9 fubars the placeholder attribute in text inputs and the arrows on
|
||||
// select elements in input groups. To fix it, we float the input. Details:
|
||||
// https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855
|
||||
float: left;
|
||||
|
||||
width: 100%;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Sizing options
|
||||
//
|
||||
// Remix the default form control sizing classes into new ones for easier
|
||||
// manipulation.
|
||||
|
||||
.input-group-lg > .form-control,
|
||||
.input-group-lg > .input-group-addon,
|
||||
.input-group-lg > .input-group-btn > .btn { .input-lg(); }
|
||||
.input-group-sm > .form-control,
|
||||
.input-group-sm > .input-group-addon,
|
||||
.input-group-sm > .input-group-btn > .btn { .input-sm(); }
|
||||
|
||||
|
||||
// Display as table-cell
|
||||
// -------------------------
|
||||
.input-group-addon,
|
||||
.input-group-btn,
|
||||
.input-group .form-control {
|
||||
display: table-cell;
|
||||
|
||||
&:not(:first-child):not(:last-child) {
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
// Addon and addon wrapper for buttons
|
||||
.input-group-addon,
|
||||
.input-group-btn {
|
||||
width: 1%;
|
||||
white-space: nowrap;
|
||||
vertical-align: middle; // Match the inputs
|
||||
}
|
||||
|
||||
// Text input groups
|
||||
// -------------------------
|
||||
.input-group-addon {
|
||||
padding: @padding-base-vertical @padding-base-horizontal;
|
||||
font-size: @font-size-base;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
color: @input-color;
|
||||
text-align: center;
|
||||
background-color: @input-group-addon-bg;
|
||||
border: 1px solid @input-group-addon-border-color;
|
||||
border-radius: @border-radius-base;
|
||||
|
||||
// Sizing
|
||||
&.input-sm {
|
||||
padding: @padding-small-vertical @padding-small-horizontal;
|
||||
font-size: @font-size-small;
|
||||
border-radius: @border-radius-small;
|
||||
}
|
||||
&.input-lg {
|
||||
padding: @padding-large-vertical @padding-large-horizontal;
|
||||
font-size: @font-size-large;
|
||||
border-radius: @border-radius-large;
|
||||
}
|
||||
|
||||
// Nuke default margins from checkboxes and radios to vertically center within.
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Reset rounded corners
|
||||
.input-group .form-control:first-child,
|
||||
.input-group-addon:first-child,
|
||||
.input-group-btn:first-child > .btn,
|
||||
.input-group-btn:first-child > .btn-group > .btn,
|
||||
.input-group-btn:first-child > .dropdown-toggle,
|
||||
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
|
||||
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
|
||||
.border-right-radius(0);
|
||||
}
|
||||
.input-group-addon:first-child {
|
||||
border-right: 0;
|
||||
}
|
||||
.input-group .form-control:last-child,
|
||||
.input-group-addon:last-child,
|
||||
.input-group-btn:last-child > .btn,
|
||||
.input-group-btn:last-child > .btn-group > .btn,
|
||||
.input-group-btn:last-child > .dropdown-toggle,
|
||||
.input-group-btn:first-child > .btn:not(:first-child),
|
||||
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
|
||||
.border-left-radius(0);
|
||||
}
|
||||
.input-group-addon:last-child {
|
||||
border-left: 0;
|
||||
}
|
||||
|
||||
// Button input groups
|
||||
// -------------------------
|
||||
.input-group-btn {
|
||||
position: relative;
|
||||
// Jankily prevent input button groups from wrapping with `white-space` and
|
||||
// `font-size` in combination with `inline-block` on buttons.
|
||||
font-size: 0;
|
||||
white-space: nowrap;
|
||||
|
||||
// Negative margin for spacing, position for bringing hovered/focused/actived
|
||||
// element above the siblings.
|
||||
> .btn {
|
||||
position: relative;
|
||||
+ .btn {
|
||||
margin-left: -1px;
|
||||
}
|
||||
// Bring the "active" button to the front
|
||||
&:hover,
|
||||
&:focus,
|
||||
&:active {
|
||||
z-index: 2;
|
||||
}
|
||||
}
|
||||
|
||||
// Negative margin to only have a 1px border between the two
|
||||
&:first-child {
|
||||
> .btn,
|
||||
> .btn-group {
|
||||
margin-right: -1px;
|
||||
}
|
||||
}
|
||||
&:last-child {
|
||||
> .btn,
|
||||
> .btn-group {
|
||||
margin-left: -1px;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
//
|
||||
// Jumbotron
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
.jumbotron {
|
||||
padding: @jumbotron-padding;
|
||||
margin-bottom: @jumbotron-padding;
|
||||
color: @jumbotron-color;
|
||||
background-color: @jumbotron-bg;
|
||||
|
||||
h1,
|
||||
.h1 {
|
||||
color: @jumbotron-heading-color;
|
||||
}
|
||||
p {
|
||||
margin-bottom: (@jumbotron-padding / 2);
|
||||
font-size: @jumbotron-font-size;
|
||||
font-weight: 200;
|
||||
}
|
||||
|
||||
.container & {
|
||||
border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
@media screen and (min-width: @screen-sm-min) {
|
||||
padding-top: (@jumbotron-padding * 1.6);
|
||||
padding-bottom: (@jumbotron-padding * 1.6);
|
||||
|
||||
.container & {
|
||||
padding-left: (@jumbotron-padding * 2);
|
||||
padding-right: (@jumbotron-padding * 2);
|
||||
}
|
||||
|
||||
h1,
|
||||
.h1 {
|
||||
font-size: (@font-size-base * 4.5);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,64 +0,0 @@
|
|||
//
|
||||
// Labels
|
||||
// --------------------------------------------------
|
||||
|
||||
.label {
|
||||
display: inline;
|
||||
padding: .2em .6em .3em;
|
||||
font-size: 75%;
|
||||
font-weight: bold;
|
||||
line-height: 1;
|
||||
color: @label-color;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
vertical-align: baseline;
|
||||
border-radius: .25em;
|
||||
|
||||
// Add hover effects, but only for links
|
||||
&[href] {
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: @label-link-hover-color;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
// Empty labels collapse automatically (not available in IE8)
|
||||
&:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// Quick fix for labels in buttons
|
||||
.btn & {
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
}
|
||||
|
||||
// Colors
|
||||
// Contextual variations (linked labels get darker on :hover)
|
||||
|
||||
.label-default {
|
||||
.label-variant(@label-default-bg);
|
||||
}
|
||||
|
||||
.label-primary {
|
||||
.label-variant(@label-primary-bg);
|
||||
}
|
||||
|
||||
.label-success {
|
||||
.label-variant(@label-success-bg);
|
||||
}
|
||||
|
||||
.label-info {
|
||||
.label-variant(@label-info-bg);
|
||||
}
|
||||
|
||||
.label-warning {
|
||||
.label-variant(@label-warning-bg);
|
||||
}
|
||||
|
||||
.label-danger {
|
||||
.label-variant(@label-danger-bg);
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue