[MERGE] merged with main trunk

bzr revid: qdp-launchpad@openerp.com-20131211100354-hwlt65vk8p3xih9u
This commit is contained in:
Quentin (OpenERP) 2013-12-11 11:03:54 +01:00
commit a5cc6d6aed
96 changed files with 26395 additions and 555 deletions

View File

@ -28,7 +28,7 @@ import time
import openerp import openerp
from openerp import SUPERUSER_ID from openerp import SUPERUSER_ID
from openerp import tools from openerp import tools
from openerp.osv import fields, osv from openerp.osv import fields, osv, expression
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp.tools.float_utils import float_round from openerp.tools.float_utils import float_round
@ -579,15 +579,18 @@ class account_account(osv.osv):
except: except:
pass pass
if name: if name:
ids = self.search(cr, user, [('code', '=like', name+"%")]+args, limit=limit) if operator not in expression.NEGATIVE_TERM_OPERATORS:
if not ids: ids = self.search(cr, user, ['|', ('code', '=like', name+"%"), '|', ('shortcut', '=', name), ('name', operator, name)]+args, limit=limit)
ids = self.search(cr, user, [('shortcut', '=', name)]+ args, limit=limit) if not ids and len(name.split()) >= 2:
if not ids: #Separating code and name of account for searching
ids = self.search(cr, user, [('name', operator, name)]+ args, limit=limit) operand1,operand2 = name.split(' ',1) #name can contain spaces e.g. OpenERP S.A.
if not ids and len(name.split()) >= 2: ids = self.search(cr, user, [('code', operator, operand1), ('name', operator, operand2)]+ args, limit=limit)
#Separating code and name of account for searching else:
operand1,operand2 = name.split(' ',1) #name can contain spaces e.g. OpenERP S.A. ids = self.search(cr, user, ['&','!', ('code', '=like', name+"%"), ('name', operator, name)]+args, limit=limit)
ids = self.search(cr, user, [('code', operator, operand1), ('name', operator, operand2)]+ args, limit=limit) # as negation want to restric, do if already have results
if ids and len(name.split()) >= 2:
operand1,operand2 = name.split(' ',1) #name can contain spaces e.g. OpenERP S.A.
ids = self.search(cr, user, [('code', operator, operand1), ('name', operator, operand2), ('id', 'in', ids)]+ args, limit=limit)
else: else:
ids = self.search(cr, user, args, context=context, limit=limit) ids = self.search(cr, user, args, context=context, limit=limit)
return self.name_get(cr, user, ids, context=context) return self.name_get(cr, user, ids, context=context)
@ -1573,11 +1576,6 @@ class account_move(osv.osv):
obj_analytic_line = self.pool.get('account.analytic.line') obj_analytic_line = self.pool.get('account.analytic.line')
obj_move_line = self.pool.get('account.move.line') obj_move_line = self.pool.get('account.move.line')
for move in self.browse(cr, uid, ids, context): for move in self.browse(cr, uid, ids, context):
# Unlink old analytic lines on move_lines
for obj_line in move.line_id:
for obj in obj_line.analytic_lines:
obj_analytic_line.unlink(cr,uid,obj.id)
journal = move.journal_id journal = move.journal_id
amount = 0 amount = 0
line_ids = [] line_ids = []
@ -3414,6 +3412,8 @@ class wizard_multi_charts_accounts(osv.osv_memory):
all the provided information to create the accounts, the banks, the journals, the taxes, the tax codes, the all the provided information to create the accounts, the banks, the journals, the taxes, the tax codes, the
accounting properties... accordingly for the chosen company. accounting properties... accordingly for the chosen company.
''' '''
if uid != SUPERUSER_ID and not self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager'):
raise openerp.exceptions.AccessError(_("Only administrators can change the settings"))
obj_data = self.pool.get('ir.model.data') obj_data = self.pool.get('ir.model.data')
ir_values_obj = self.pool.get('ir.values') ir_values_obj = self.pool.get('ir.values')
obj_wizard = self.browse(cr, uid, ids[0]) obj_wizard = self.browse(cr, uid, ids[0])
@ -3430,7 +3430,7 @@ class wizard_multi_charts_accounts(osv.osv_memory):
self.pool[tmp2[0]].write(cr, uid, tmp2[1], { self.pool[tmp2[0]].write(cr, uid, tmp2[1], {
'currency_id': obj_wizard.currency_id.id 'currency_id': obj_wizard.currency_id.id
}) })
except ValueError, e: except ValueError:
pass pass
# If the floats for sale/purchase rates have been filled, create templates from them # If the floats for sale/purchase rates have been filled, create templates from them

View File

@ -193,6 +193,8 @@ class account_move_line(osv.osv):
if obj_line.analytic_account_id: if obj_line.analytic_account_id:
if not obj_line.journal_id.analytic_journal_id: if not obj_line.journal_id.analytic_journal_id:
raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal!") % (obj_line.journal_id.name, )) raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal!") % (obj_line.journal_id.name, ))
if obj_line.analytic_lines:
acc_ana_line_obj.unlink(cr,uid,[obj.id for obj in obj_line.analytic_lines])
vals_line = self._prepare_analytic_line(cr, uid, obj_line, context=context) vals_line = self._prepare_analytic_line(cr, uid, obj_line, context=context)
acc_ana_line_obj.create(cr, uid, vals_line) acc_ana_line_obj.create(cr, uid, vals_line)
return True return True
@ -1207,20 +1209,6 @@ class account_move_line(osv.osv):
if not ok: if not ok:
raise osv.except_osv(_('Bad Account!'), _('You cannot use this general account in this journal, check the tab \'Entry Controls\' on the related journal.')) raise osv.except_osv(_('Bad Account!'), _('You cannot use this general account in this journal, check the tab \'Entry Controls\' on the related journal.'))
if vals.get('analytic_account_id',False):
if journal.analytic_journal_id:
vals['analytic_lines'] = [(0,0, {
'name': vals['name'],
'date': vals.get('date', time.strftime('%Y-%m-%d')),
'account_id': vals.get('analytic_account_id', False),
'unit_amount': vals.get('quantity', 1.0),
'amount': vals.get('debit', 0.0) or vals.get('credit', 0.0),
'general_account_id': vals.get('account_id', False),
'journal_id': journal.analytic_journal_id.id,
'ref': vals.get('ref', False),
'user_id': uid
})]
result = super(account_move_line, self).create(cr, uid, vals, context=context) result = super(account_move_line, self).create(cr, uid, vals, context=context)
# CREATE Taxes # CREATE Taxes
if vals.get('account_tax_id', False): if vals.get('account_tax_id', False):

10849
addons/account/i18n/es_PE.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2012-12-27 22:48+0000\n" "PO-Revision-Date: 2013-12-10 17:32+0000\n"
"Last-Translator: Balint (eSolve) <Unknown>\n" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 05:27+0000\n" "X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16761)\n" "X-Generator: Launchpad (build 16869)\n"
#. module: account #. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0 #: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@ -26,6 +26,8 @@ msgstr "Kifizetési rendszer"
msgid "" msgid ""
"An account fiscal position could be defined only once time on same accounts." "An account fiscal position could be defined only once time on same accounts."
msgstr "" msgstr ""
"Egy könyvelés költségvetési évfordulóját csak egyszer lehet megadni az arra "
"hivatkozó számlákra vonatkozólag."
#. module: account #. module: account
#: help:account.tax.code,sequence:0 #: help:account.tax.code,sequence:0
@ -33,6 +35,8 @@ msgid ""
"Determine the display order in the report 'Accounting \\ Reporting \\ " "Determine the display order in the report 'Accounting \\ Reporting \\ "
"Generic Reporting \\ Taxes \\ Taxes Report'" "Generic Reporting \\ Taxes \\ Taxes Report'"
msgstr "" msgstr ""
"Meghatározza a kijelzés sorrendjét a kimutatáson 'Könyvelés \\ "
"Kimutatáskészítés \\ Általános kimutatás \\ Adók \\ Adó kimutatás'"
#. module: account #. module: account
#: view:account.move.reconcile:0 #: view:account.move.reconcile:0
@ -60,7 +64,7 @@ msgstr "Rendezetlen összeg"
#: code:addons/account/account_bank_statement.py:369 #: code:addons/account/account_bank_statement.py:369
#, python-format #, python-format
msgid "Journal item \"%s\" is not valid." msgid "Journal item \"%s\" is not valid."
msgstr "" msgstr "A \"%s\" könyvelési napló tétel nem érvényes."
#. module: account #. module: account
#: model:ir.model,name:account.model_report_aged_receivable #: model:ir.model,name:account.model_report_aged_receivable
@ -78,7 +82,7 @@ msgstr "Importálás számlából vagy pénzügyi rendezésből"
#: code:addons/account/account_move_line.py:1210 #: code:addons/account/account_move_line.py:1210
#, python-format #, python-format
msgid "Bad Account!" msgid "Bad Account!"
msgstr "" msgstr "Eltévesztett könyvelési számla!"
#. module: account #. module: account
#: view:account.move:0 #: view:account.move:0
@ -92,6 +96,8 @@ msgid ""
"Error!\n" "Error!\n"
"You cannot create recursive account templates." "You cannot create recursive account templates."
msgstr "" msgstr ""
"Hiba!\n"
"Nem hozhat létre visszatérő számla sablonokat."
#. module: account #. module: account
#. openerp-web #. openerp-web
@ -102,7 +108,7 @@ msgstr ""
#: code:addons/account/static/src/xml/account_move_reconciliation.xml:30 #: code:addons/account/static/src/xml/account_move_reconciliation.xml:30
#, python-format #, python-format
msgid "Reconcile" msgid "Reconcile"
msgstr "Párosítás" msgstr "Egyeztetés"
#. module: account #. module: account
#: field:account.bank.statement,name:0 #: field:account.bank.statement,name:0
@ -114,7 +120,7 @@ msgstr "Párosítás"
#: xsl:account.transfer:0 #: xsl:account.transfer:0
#: field:cash.box.in,ref:0 #: field:cash.box.in,ref:0
msgid "Reference" msgid "Reference"
msgstr "Hivatkozás" msgstr "Információforrás"
#. module: account #. module: account
#: help:account.payment.term,active:0 #: help:account.payment.term,active:0
@ -122,7 +128,8 @@ msgid ""
"If the active field is set to False, it will allow you to hide the payment " "If the active field is set to False, it will allow you to hide the payment "
"term without removing it." "term without removing it."
msgstr "" msgstr ""
"Ha az aktív mező nincs bejelölve, nem használható a fizetési feltétel." "Ha az aktív mező hamisra van állatva, akkor a fizetési feltételt "
"eltüntetheti anélkül, hogy törölné azt."
#. module: account #. module: account
#: code:addons/account/account.py:641 #: code:addons/account/account.py:641
@ -151,7 +158,7 @@ msgstr "Figyelem!"
#: code:addons/account/account.py:3197 #: code:addons/account/account.py:3197
#, python-format #, python-format
msgid "Miscellaneous Journal" msgid "Miscellaneous Journal"
msgstr "Vegyes napló" msgstr "Vegyes könyvelési napló"
#. module: account #. module: account
#: code:addons/account/wizard/account_open_closed_fiscalyear.py:39 #: code:addons/account/wizard/account_open_closed_fiscalyear.py:39
@ -161,12 +168,14 @@ msgid ""
"which is set after generating opening entries from 'Generate Opening " "which is set after generating opening entries from 'Generate Opening "
"Entries'." "Entries'."
msgstr "" msgstr ""
"Be kell állítania az 'Év végi belépő könyvelési naplót' a 'Nyitási tétel "
"létrehozása' menüvel létrehozott üzleti év tételekhez."
#. module: account #. module: account
#: field:account.fiscal.position.account,account_src_id:0 #: field:account.fiscal.position.account,account_src_id:0
#: field:account.fiscal.position.account.template,account_src_id:0 #: field:account.fiscal.position.account.template,account_src_id:0
msgid "Account Source" msgid "Account Source"
msgstr "Eredeti főkönyvi számla" msgstr "Forrás főkönyvi számla"
#. module: account #. module: account
#: model:ir.actions.act_window,help:account.action_account_period #: model:ir.actions.act_window,help:account.action_account_period
@ -179,6 +188,14 @@ msgid ""
" </p>\n" " </p>\n"
" " " "
msgstr "" msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Kattintson üzleti szakasz hozzáadásához.\n"
" </p><p>\n"
" Egy könyvelési szakasz leggyakrabban egy negyedév vagy egy "
"hónap. \n"
" Általában összhangban van az adóbevallás periódusával.\n"
" </p>\n"
" "
#. module: account #. module: account
#: model:ir.actions.act_window,name:account.action_view_created_invoice_dashboard #: model:ir.actions.act_window,name:account.action_view_created_invoice_dashboard
@ -188,12 +205,12 @@ msgstr "Az elmúlt 15 napban készített számlák"
#. module: account #. module: account
#: field:accounting.report,label_filter:0 #: field:accounting.report,label_filter:0
msgid "Column Label" msgid "Column Label"
msgstr "" msgstr "Oszlop elnevezés"
#. module: account #. module: account
#: help:account.config.settings,code_digits:0 #: help:account.config.settings,code_digits:0
msgid "No. of digits to use for account code" msgid "No. of digits to use for account code"
msgstr "" msgstr "Könyvelési kódnak használt számlyegyek száma"
#. module: account #. module: account
#: help:account.analytic.journal,type:0 #: help:account.analytic.journal,type:0
@ -213,6 +230,9 @@ msgid ""
"lines for invoices. Leave empty if you don't want to use an analytic account " "lines for invoices. Leave empty if you don't want to use an analytic account "
"on the invoice tax lines by default." "on the invoice tax lines by default."
msgstr "" msgstr ""
"Elemző számla mely alapértelmezésben a számlák adó tételének számlája. "
"Hagyja üresen, ha alap értelmezésben nem szeretne elemző számát használni a "
"számlák adó tételeire."
#. module: account #. module: account
#: model:ir.actions.act_window,name:account.action_account_tax_template_form #: model:ir.actions.act_window,name:account.action_account_tax_template_form
@ -252,11 +272,14 @@ msgid ""
"legal reports, and set the rules to close a fiscal year and generate opening " "legal reports, and set the rules to close a fiscal year and generate opening "
"entries." "entries."
msgstr "" msgstr ""
"Számla típus információs célt szolgál, országra jellemző törvényekre sajátos "
"kimutatások létrehozásához, és az induló tételek létrehozásához valamint az "
"üzleti év lezáró szabályainak beállításához."
#. module: account #. module: account
#: field:account.config.settings,sale_refund_sequence_next:0 #: field:account.config.settings,sale_refund_sequence_next:0
msgid "Next credit note number" msgid "Next credit note number"
msgstr "" msgstr "Következő jóváírási értesítés szám"
#. module: account #. module: account
#: help:account.config.settings,module_account_voucher:0 #: help:account.config.settings,module_account_voucher:0
@ -265,6 +288,9 @@ msgid ""
"sales, purchase, expense, contra, etc.\n" "sales, purchase, expense, contra, etc.\n"
" This installs the module account_voucher." " This installs the module account_voucher."
msgstr "" msgstr ""
"Ez magába foglalja az összes alap követelményt a banki, készpénzes, "
"vásárlói, beszerzési, kiadási, visszaküldött, stb nyugta bevitelhez.\n"
" Ez a account_voucher (könyvelés_nyugta) modult telepíti.."
#. module: account #. module: account
#: model:ir.actions.act_window,name:account.action_account_use_model_create_entry #: model:ir.actions.act_window,name:account.action_account_use_model_create_entry
@ -296,6 +322,17 @@ msgid ""
" </p>\n" " </p>\n"
" " " "
msgstr "" msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Kattintson ügyfél visszatérítés létrehozásához. \n"
" </p><p>\n"
" A visszatérítés egy dokumentum a számla teljes összegének "
"vagy részének a \n"
" jóváírásról.\n"
" </p><p>\n"
" Kézi ügyfél részére történő jóváírás helyett, megteheti\n"
" azt közvetlenül az ide vonatkozó ügyfél számlából.\n"
" </p>\n"
" "
#. module: account #. module: account
#: help:account.installer,charts:0 #: help:account.installer,charts:0
@ -304,12 +341,12 @@ msgid ""
"accounting needs of your company based on your country." "accounting needs of your company based on your country."
msgstr "" msgstr ""
"Lokalizált számlatükröt állít be, hogy amilyen szorosan csak lehet, " "Lokalizált számlatükröt állít be, hogy amilyen szorosan csak lehet, "
"illeszkedjen a vállalat szükségletéhez." "illeszkedjen a vállalat szükségletéhez az országra vonatkozóan."
#. module: account #. module: account
#: model:ir.model,name:account.model_account_unreconcile #: model:ir.model,name:account.model_account_unreconcile
msgid "Account Unreconcile" msgid "Account Unreconcile"
msgstr "Párosítás visszavonása" msgstr "Könyvelési számla párosítás visszavonása"
#. module: account #. module: account
#: field:account.config.settings,module_account_budget:0 #: field:account.config.settings,module_account_budget:0
@ -319,7 +356,7 @@ msgstr "Költségvetés kezelés"
#. module: account #. module: account
#: view:product.template:0 #: view:product.template:0
msgid "Purchase Properties" msgid "Purchase Properties"
msgstr "Beszerzés könyvelési beállítások" msgstr "Beszerzési tulajdonságok"
#. module: account #. module: account
#: help:account.financial.report,style_overwrite:0 #: help:account.financial.report,style_overwrite:0
@ -328,17 +365,20 @@ msgid ""
"leave the automatic formatting, it will be computed based on the financial " "leave the automatic formatting, it will be computed based on the financial "
"reports hierarchy (auto-computed field 'level')." "reports hierarchy (auto-computed field 'level')."
msgstr "" msgstr ""
"Beállíthatja ennek a rekordnak a megjelenítési formáját. Ha automatikus "
"formázást hagyja, akkor az a pénzügyi jelentés rangsora alapján lesz "
"kiszámítva (automatikusan számított mező a 'szint')."
#. module: account #. module: account
#: field:account.config.settings,group_multi_currency:0 #: field:account.config.settings,group_multi_currency:0
msgid "Allow multi currencies" msgid "Allow multi currencies"
msgstr "" msgstr "Többféle valuta engedélyezése"
#. module: account #. module: account
#: code:addons/account/account_invoice.py:77 #: code:addons/account/account_invoice.py:77
#, python-format #, python-format
msgid "You must define an analytic journal of type '%s'!" msgid "You must define an analytic journal of type '%s'!"
msgstr "" msgstr "Meg kell határoznia egy elemző gyüjtőnapló típust '%s'!"
#. module: account #. module: account
#: selection:account.entries.report,month:0 #: selection:account.entries.report,month:0
@ -353,12 +393,12 @@ msgstr "Június"
#: code:addons/account/wizard/account_automatic_reconcile.py:148 #: code:addons/account/wizard/account_automatic_reconcile.py:148
#, python-format #, python-format
msgid "You must select accounts to reconcile." msgid "You must select accounts to reconcile."
msgstr "" msgstr "A párosításhoz könyvelési számlákat kell kiválasztania."
#. module: account #. module: account
#: help:account.config.settings,group_analytic_accounting:0 #: help:account.config.settings,group_analytic_accounting:0
msgid "Allows you to use the analytic accounting." msgid "Allows you to use the analytic accounting."
msgstr "" msgstr "Főkönyvi számla használatának engedélyezése."
#. module: account #. module: account
#: view:account.invoice:0 #: view:account.invoice:0
@ -393,12 +433,12 @@ msgstr "Bejövő jóváíró számla"
#. module: account #. module: account
#: selection:account.journal,type:0 #: selection:account.journal,type:0
msgid "Opening/Closing Situation" msgid "Opening/Closing Situation"
msgstr "Nyitó/záró" msgstr "Nyitó/záró állapot"
#. module: account #. module: account
#: help:account.journal,currency:0 #: help:account.journal,currency:0
msgid "The currency used to enter statement" msgid "The currency used to enter statement"
msgstr "Tételek rögzítésének pénzneme" msgstr "Számlakivonat tételek rögzítésének pénzneme"
#. module: account #. module: account
#: field:account.journal,default_debit_account_id:0 #: field:account.journal,default_debit_account_id:0
@ -409,7 +449,7 @@ msgstr "Alapértelmezett tartozik főkönyvi számla"
#: view:account.move:0 #: view:account.move:0
#: view:account.move.line:0 #: view:account.move.line:0
msgid "Total Credit" msgid "Total Credit"
msgstr "Követel összesen" msgstr "Összes követelés"
#. module: account #. module: account
#: help:account.config.settings,module_account_asset:0 #: help:account.config.settings,module_account_asset:0
@ -421,11 +461,19 @@ msgid ""
"this box, you will be able to do invoicing & payments,\n" "this box, you will be able to do invoicing & payments,\n"
" but not accounting (Journal Items, Chart of Accounts, ...)" " but not accounting (Journal Items, Chart of Accounts, ...)"
msgstr "" msgstr ""
"Ez lehetővé teszi a személy vagy vállalat által birtokolt vagyoneszközök "
"nyilvántartását.\n"
" A vagyoneszközök értékcsökkenését követi nyomon, és "
"könyvelési számlák közt mozgatja ezeket az értékcsökkenő\n"
" tételeket.\n"
" Ez a account_asset (számla_eszköz) modult telepíti. Ha nem "
"jelöli be ezt a kockát, akkor tud számlázni & kifizetni,\n"
" de nem tud könyvelni (Napló tételeket, Számlatükröket, ...)"
#. module: account #. module: account
#: help:account.bank.statement.line,name:0 #: help:account.bank.statement.line,name:0
msgid "Originator to Beneficiary Information" msgid "Originator to Beneficiary Information"
msgstr "" msgstr "Kezdeményezőtől a kedvezményezetthez intézett információ"
#. module: account #. module: account
#. openerp-web #. openerp-web
@ -446,6 +494,7 @@ msgstr "Számlatükör sablon"
#: selection:account.invoice.refund,filter_refund:0 #: selection:account.invoice.refund,filter_refund:0
msgid "Modify: create refund, reconcile and create a new draft invoice" msgid "Modify: create refund, reconcile and create a new draft invoice"
msgstr "" msgstr ""
"Módosít: visszatérítést, párosítást készít és új számla tervezetet hoz létre"
#. module: account #. module: account
#: help:account.config.settings,tax_calculation_rounding_method:0 #: help:account.config.settings,tax_calculation_rounding_method:0
@ -459,6 +508,16 @@ msgid ""
"should choose 'Round per line' because you certainly want the sum of your " "should choose 'Round per line' because you certainly want the sum of your "
"tax-included line subtotals to be equal to the total amount with taxes." "tax-included line subtotals to be equal to the total amount with taxes."
msgstr "" msgstr ""
"Ha kiválasztotta a 'Tétel soronkénti kerekítést' : mindegyik adóra, először "
"számítást és kerekítést végez minden egyes Beszerzési megrendelés "
"BM/Vásárlói megrendelés VM/számla tétel sorra és ezek a kerekített tételek "
"lesznek összegezve, így kialakítva a teljes adó értéket. Ha kiválasztotta a "
"'Teljes körű kerekítést': mindegyik adóra, először adó számítást végez "
"minden egyes Beszerzési megrendelés BM/Vásárlói megrendelés VM/számla tétel "
"sorra, melyek összegzésre kerülnek és végül ez a teljes adó összege lesz "
"kerekítve. Ha adóval együtt történik az eladás, akkor a 'Tétel soronkénti "
"kerekítést' válassza, mivel bizonyára azt szeretné, hogy az adóval növelt "
"tételsor összegei egyezzenek a teljes összeg adóval növel értékével."
#. module: account #. module: account
#: model:ir.model,name:account.model_wizard_multi_charts_accounts #: model:ir.model,name:account.model_wizard_multi_charts_accounts
@ -473,12 +532,12 @@ msgstr "Az összeg egy választható más pénznemben kifejezve."
#. module: account #. module: account
#: view:account.journal:0 #: view:account.journal:0
msgid "Available Coins" msgid "Available Coins"
msgstr "" msgstr "Rendelkezésre álló pénzérmék"
#. module: account #. module: account
#: field:accounting.report,enable_filter:0 #: field:accounting.report,enable_filter:0
msgid "Enable Comparison" msgid "Enable Comparison"
msgstr "" msgstr "Összehasonlítás bekapcsolása"
#. module: account #. module: account
#: view:account.analytic.line:0 #: view:account.analytic.line:0
@ -527,6 +586,7 @@ msgstr "Gyűjtő célszámla"
#: help:account.invoice.line,sequence:0 #: help:account.invoice.line,sequence:0
msgid "Gives the sequence of this line when displaying the invoice." msgid "Gives the sequence of this line when displaying the invoice."
msgstr "" msgstr ""
"Ennek a tételsornak a sorszámát adja, amikor a számla kijelzésre kerül."
#. module: account #. module: account
#: field:account.bank.statement,account_id:0 #: field:account.bank.statement,account_id:0
@ -600,13 +660,13 @@ msgstr "Nincs párosítandó tétel"
#. module: account #. module: account
#: field:account.config.settings,decimal_precision:0 #: field:account.config.settings,decimal_precision:0
msgid "Decimal precision on journal entries" msgid "Decimal precision on journal entries"
msgstr "" msgstr "Tizedes pontosság a napló bevitt tételeinél"
#. module: account #. module: account
#: selection:account.config.settings,period:0 #: selection:account.config.settings,period:0
#: selection:account.installer,period:0 #: selection:account.installer,period:0
msgid "3 Monthly" msgid "3 Monthly"
msgstr "Negyedéves" msgstr "3 havonta"
#. module: account #. module: account
#: field:ir.sequence,fiscal_ids:0 #: field:ir.sequence,fiscal_ids:0
@ -626,6 +686,8 @@ msgid ""
"Specified journal does not have any account move entries in draft state for " "Specified journal does not have any account move entries in draft state for "
"this period." "this period."
msgstr "" msgstr ""
"A kiválasztott napló nem rendelkezik tervezet állapotú számla mozgásokkal "
"erre az időszakra."
#. module: account #. module: account
#: view:account.fiscal.position:0 #: view:account.fiscal.position:0
@ -648,7 +710,7 @@ msgstr "A fő sorszámnak el kell térnie az aktuálistól!"
#: code:addons/account/wizard/account_change_currency.py:70 #: code:addons/account/wizard/account_change_currency.py:70
#, python-format #, python-format
msgid "Current currency is not configured properly." msgid "Current currency is not configured properly."
msgstr "" msgstr "A jelenlegi pénznem nincs megfelelően konfigurálva."
#. module: account #. module: account
#: field:account.journal,profit_account_id:0 #: field:account.journal,profit_account_id:0
@ -672,13 +734,13 @@ msgstr "Számlatípusonkénti értékesítési kimutatás"
#: code:addons/account/account.py:3201 #: code:addons/account/account.py:3201
#, python-format #, python-format
msgid "SAJ" msgid "SAJ"
msgstr "SAJ" msgstr "Számlatípusonkénti értékesítés SZTÉ"
#. module: account #. module: account
#: code:addons/account/account.py:1591 #: code:addons/account/account.py:1591
#, python-format #, python-format
msgid "Cannot create move with currency different from .." msgid "Cannot create move with currency different from .."
msgstr "" msgstr "Nem lehet mozgást végrehajtani, ha eltér a pénznem ettől .."
#. module: account #. module: account
#: model:email.template,report_name:account.email_template_edi_invoice #: model:email.template,report_name:account.email_template_edi_invoice
@ -712,7 +774,7 @@ msgstr "Könyvelési időszak"
#: constraint:account.move:0 #: constraint:account.move:0
msgid "" msgid ""
"You cannot create more than one move per period on a centralized journal." "You cannot create more than one move per period on a centralized journal."
msgstr "" msgstr "Egy időszakra csak egy mozgatást végezhet a központosított naplón."
#. module: account #. module: account
#: help:account.tax,account_analytic_paid_id:0 #: help:account.tax,account_analytic_paid_id:0
@ -721,6 +783,9 @@ msgid ""
"lines for refunds. Leave empty if you don't want to use an analytic account " "lines for refunds. Leave empty if you don't want to use an analytic account "
"on the invoice tax lines by default." "on the invoice tax lines by default."
msgstr "" msgstr ""
"Állítsa be a gyűjtő/elemző számlát amit alapértelmezetten használ a számlák "
"adó tételsoraira a visszatérítéshez. Hagyja üresen, ha alapértelmezetten nem "
"szeretne gyűjtő/elemző számlát használni a számla adó tételsoraira."
#. module: account #. module: account
#: view:account.account:0 #: view:account.account:0
@ -733,17 +798,17 @@ msgstr ""
#: code:addons/account/report/account_partner_ledger.py:272 #: code:addons/account/report/account_partner_ledger.py:272
#, python-format #, python-format
msgid "Receivable Accounts" msgid "Receivable Accounts"
msgstr "Vevő számlák" msgstr "Követelés számlák"
#. module: account #. module: account
#: view:account.config.settings:0 #: view:account.config.settings:0
msgid "Configure your company bank accounts" msgid "Configure your company bank accounts"
msgstr "A cég bankszámláinak beállítása" msgstr "A cége bankszámláinak beállítása"
#. module: account #. module: account
#: view:account.invoice.refund:0 #: view:account.invoice.refund:0
msgid "Create Refund" msgid "Create Refund"
msgstr "" msgstr "Visszatérítés létrehozása"
#. module: account #. module: account
#: constraint:account.move.line:0 #: constraint:account.move.line:0
@ -773,7 +838,7 @@ msgstr "Biztos benne, hogy létre akarja hozni a tételeket?"
#: code:addons/account/account_invoice.py:1361 #: code:addons/account/account_invoice.py:1361
#, python-format #, python-format
msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)." msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)."
msgstr "" msgstr "Számla részben fizetve: %s%s of %s%s (%s%s még maradt)."
#. module: account #. module: account
#: view:account.invoice:0 #: view:account.invoice:0
@ -787,6 +852,8 @@ msgid ""
"Cannot %s invoice which is already reconciled, invoice should be " "Cannot %s invoice which is already reconciled, invoice should be "
"unreconciled first. You can only refund this invoice." "unreconciled first. You can only refund this invoice."
msgstr "" msgstr ""
"Nem lehet %s számlázni, mert párosítva van, először szüntesse meg a "
"párosítást. Ezt a számlát csak visszatérítheti."
#. module: account #. module: account
#: selection:account.financial.report,display_detail:0 #: selection:account.financial.report,display_detail:0
@ -814,7 +881,7 @@ msgstr "Soronkénti gyűjtőkód tételek"
#. module: account #. module: account
#: field:account.invoice.refund,filter_refund:0 #: field:account.invoice.refund,filter_refund:0
msgid "Refund Method" msgid "Refund Method"
msgstr "Jóváírás módja" msgstr "Visszatérítés módja"
#. module: account #. module: account
#: model:ir.ui.menu,name:account.menu_account_report #: model:ir.ui.menu,name:account.menu_account_report
@ -879,7 +946,7 @@ msgstr "Párosítás visszavonása"
#. module: account #. module: account
#: model:ir.model,name:account.model_account_analytic_journal_report #: model:ir.model,name:account.model_account_analytic_journal_report
msgid "Account Analytic Journal" msgid "Account Analytic Journal"
msgstr "Gyűjtőnapló" msgstr "Gyűjtőnapló számla"
#. module: account #. module: account
#: view:account.invoice:0 #: view:account.invoice:0
@ -1475,7 +1542,7 @@ msgstr "Listázási beállítások"
#. module: account #. module: account
#: field:account.fiscalyear.close.state,fy_id:0 #: field:account.fiscalyear.close.state,fy_id:0
msgid "Fiscal Year to Close" msgid "Fiscal Year to Close"
msgstr "" msgstr "Bezárni kívánt üzleti év"
#. module: account #. module: account
#: field:account.config.settings,sale_sequence_prefix:0 #: field:account.config.settings,sale_sequence_prefix:0
@ -1553,7 +1620,7 @@ msgstr "Adók keresése"
#. module: account #. module: account
#: model:ir.model,name:account.model_account_analytic_cost_ledger #: model:ir.model,name:account.model_account_analytic_cost_ledger
msgid "Account Analytic Cost Ledger" msgid "Account Analytic Cost Ledger"
msgstr "Gyűjtőkód karton" msgstr "Főkönyvi költség gyűjtőkód karton számla"
#. module: account #. module: account
#: view:account.model:0 #: view:account.model:0
@ -1624,6 +1691,8 @@ msgid ""
"By unchecking the active field, you may hide a fiscal position without " "By unchecking the active field, you may hide a fiscal position without "
"deleting it." "deleting it."
msgstr "" msgstr ""
"Az aktív mező üresen hagyásával, eltüntetheti az ÁFA helyét, annak törlése "
"nélkül."
#. module: account #. module: account
#: model:ir.model,name:account.model_temp_range #: model:ir.model,name:account.model_temp_range
@ -2194,7 +2263,7 @@ msgstr "Korosított folyószámla kivonat"
#. module: account #. module: account
#: view:account.fiscalyear.close.state:0 #: view:account.fiscalyear.close.state:0
msgid "Close Fiscal Year" msgid "Close Fiscal Year"
msgstr "" msgstr "Üzleti év lezárása"
#. module: account #. module: account
#. openerp-web #. openerp-web
@ -2207,6 +2276,7 @@ msgstr ""
#: sql_constraint:account.fiscal.position.tax:0 #: sql_constraint:account.fiscal.position.tax:0
msgid "A tax fiscal position could be defined only once time on same taxes." msgid "A tax fiscal position could be defined only once time on same taxes."
msgstr "" msgstr ""
"Az adó adóügyi pozíciója csak egyszer határozható meg ugyanarra az adóra."
#. module: account #. module: account
#: view:account.tax:0 #: view:account.tax:0
@ -2320,7 +2390,7 @@ msgstr "Részleges tételsorok"
#: view:account.fiscalyear:0 #: view:account.fiscalyear:0
#: field:account.treasury.report,fiscalyear_id:0 #: field:account.treasury.report,fiscalyear_id:0
msgid "Fiscalyear" msgid "Fiscalyear"
msgstr "Üzleti év" msgstr "Üzletiév"
#. module: account #. module: account
#: code:addons/account/wizard/account_move_bank_reconcile.py:53 #: code:addons/account/wizard/account_move_bank_reconcile.py:53
@ -2963,6 +3033,22 @@ msgid ""
" </p>\n" " </p>\n"
" " " "
msgstr "" msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Kattintson új adóügyi év létrehozásához.\n"
" </p><p>\n"
" Határozza meg a vállalkozása üzleti évét a kívánságainak "
"megfelelően.\n"
" Egy üzleti év egy idő periódus, aminek a végén a vállalkozás "
"könyvelése\n"
" elszámolásra kerül (általában 12 hónap). Az üzleti év arra a "
"dátumra\n"
" hivatkozik általában ahol az véget ér. Például,\n"
" ha a vállalkozás pénzügyi üzleti éve 2011 november 30-ára "
"esik, akkor\n"
" minden ami 2010 december 1 és 2011 november 30 közé esik\n"
" azt hívjuk 2011 évi üzleti/pénzügyi/adóügyi évnek.\n"
" </p>\n"
" "
#. module: account #. module: account
#: view:account.common.report:0 #: view:account.common.report:0
@ -3912,6 +3998,8 @@ msgid ""
"There is no fiscal year defined for this date.\n" "There is no fiscal year defined for this date.\n"
"Please create one from the configuration of the accounting menu." "Please create one from the configuration of the accounting menu."
msgstr "" msgstr ""
"Erre a dátumra nem lett üzleti adóügyi év meghatározva.\n"
"Kérem hozzon létre egyet a könyvelési menü beállítása menüpont alatt."
#. module: account #. module: account
#: view:account.addtmpl.wizard:0 #: view:account.addtmpl.wizard:0
@ -4282,6 +4370,8 @@ msgid ""
"The fiscalyear, periods or chart of account chosen have to belong to the " "The fiscalyear, periods or chart of account chosen have to belong to the "
"same company." "same company."
msgstr "" msgstr ""
"Az üzelti adóügyi év, periódus vagy számlatükör kiválasztása ugyanarra a "
"vállalkozásra kell, hogy vonatkozzon."
#. module: account #. module: account
#: help:account.tax.code.template,notprintable:0 #: help:account.tax.code.template,notprintable:0
@ -7344,6 +7434,8 @@ msgid ""
"Error!\n" "Error!\n"
"The start date of a fiscal year must precede its end date." "The start date of a fiscal year must precede its end date."
msgstr "" msgstr ""
"Hiba!\n"
"Az üzleti adóügyi év elejének előbb kell lennie mint a végének."
#. module: account #. module: account
#: view:account.tax.template:0 #: view:account.tax.template:0
@ -8276,7 +8368,8 @@ msgstr ""
msgid "" msgid ""
"Select Fiscal Year which you want to remove entries for its End of year " "Select Fiscal Year which you want to remove entries for its End of year "
"entries journal" "entries journal"
msgstr "Válassza ki az üzleti évet, amelynek a nyitó tételeit törölni akarja" msgstr ""
"Válassza ki az üzleti évet, amelynek a záró tételei közül törölni szeretne"
#. module: account #. module: account
#: field:account.tax.template,type_tax_use:0 #: field:account.tax.template,type_tax_use:0
@ -8397,7 +8490,7 @@ msgstr "Gyűjtőkód karton"
#. module: account #. module: account
#: view:account.config.settings:0 #: view:account.config.settings:0
msgid "No Fiscal Year Defined for This Company" msgid "No Fiscal Year Defined for This Company"
msgstr "" msgstr "Ehhez a vállalkozáshoz nem lett üzleti adóügyi év meghatározva"
#. module: account #. module: account
#: view:account.invoice:0 #: view:account.invoice:0
@ -8548,6 +8641,9 @@ msgid ""
"This wizard will remove the end of year journal entries of selected fiscal " "This wizard will remove the end of year journal entries of selected fiscal "
"year. Note that you can run this wizard many times for the same fiscal year." "year. Note that you can run this wizard many times for the same fiscal year."
msgstr "" msgstr ""
"Ez a varázsló a kiválasztott üzleti adóügyi évet lezáró könyvelési napló "
"tételeit fogja eltávolítani. Megjegyezzük, hogy ezt a varázslót többször is "
"elindíthatja ugyanarra az üzleti évre."
#. module: account #. module: account
#: report:account.invoice:0 #: report:account.invoice:0
@ -8732,7 +8828,7 @@ msgstr ""
#. module: account #. module: account
#: model:ir.model,name:account.model_account_fiscalyear_close_state #: model:ir.model,name:account.model_account_fiscalyear_close_state
msgid "Fiscalyear Close state" msgid "Fiscalyear Close state"
msgstr "Üzleti év zárása" msgstr "Üzleti év zárt állapotban"
#. module: account #. module: account
#: field:account.invoice.refund,journal_id:0 #: field:account.invoice.refund,journal_id:0
@ -9161,7 +9257,7 @@ msgstr ""
#. module: account #. module: account
#: field:account.config.settings,has_fiscal_year:0 #: field:account.config.settings,has_fiscal_year:0
msgid "Company has a fiscal year" msgid "Company has a fiscal year"
msgstr "" msgstr "Vállalkozásnak van üzleti, adóügyi éve"
#. module: account #. module: account
#: help:account.tax,child_depend:0 #: help:account.tax,child_depend:0
@ -9599,6 +9695,9 @@ msgid ""
"The period is invalid. Either some periods are overlapping or the period's " "The period is invalid. Either some periods are overlapping or the period's "
"dates are not matching the scope of the fiscal year." "dates are not matching the scope of the fiscal year."
msgstr "" msgstr ""
"Hiba!\n"
"Az időszak nem érvényes. Vagy az egyes időszakok átfedik egymást vagy az "
"időszakok nem egyeznek az üzleti év határidőivel."
#. module: account #. module: account
#: report:account.overdue:0 #: report:account.overdue:0
@ -9897,7 +9996,7 @@ msgstr "Gyűjtőkódokból"
#. module: account #. module: account
#: view:account.installer:0 #: view:account.installer:0
msgid "Configure your Fiscal Year" msgid "Configure your Fiscal Year"
msgstr "" msgstr "Állítsa be az üzleti, adóügyi évét"
#. module: account #. module: account
#: field:account.period,name:0 #: field:account.period,name:0
@ -10834,6 +10933,8 @@ msgstr "Könyvelési tételsorok jóváhagyása"
msgid "" msgid ""
"The fiscal position will determine taxes and accounts used for the partner." "The fiscal position will determine taxes and accounts used for the partner."
msgstr "" msgstr ""
"Az ÁFA pozíció meghatározza a partnerre vonatkozó adókat és főkönyvi "
"számlákat."
#. module: account #. module: account
#: model:process.node,note:account.process_node_supplierpaidinvoice0 #: model:process.node,note:account.process_node_supplierpaidinvoice0
@ -10906,7 +11007,7 @@ msgstr ""
#: view:ir.sequence:0 #: view:ir.sequence:0
#: model:ir.ui.menu,name:account.menu_action_account_fiscalyear #: model:ir.ui.menu,name:account.menu_action_account_fiscalyear
msgid "Fiscal Years" msgid "Fiscal Years"
msgstr "Üzleti év" msgstr "Üzleti évek"
#. module: account #. module: account
#: help:account.analytic.journal,active:0 #: help:account.analytic.journal,active:0

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2012-08-21 06:06+0000\n" "PO-Revision-Date: 2013-12-01 17:16+0000\n"
"Last-Translator: Boyce Huang <boyce.huang@cenoq.com>\n" "Last-Translator: Andy Cheng <andy@dobtor.com>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 05:37+0000\n" "X-Launchpad-Export-Date: 2013-12-02 05:23+0000\n"
"X-Generator: Launchpad (build 16761)\n" "X-Generator: Launchpad (build 16856)\n"
#. module: account #. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0 #: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@ -32,12 +32,12 @@ msgstr "在相同會計科目中,只能設定一次科目財務狀況。"
msgid "" msgid ""
"Determine the display order in the report 'Accounting \\ Reporting \\ " "Determine the display order in the report 'Accounting \\ Reporting \\ "
"Generic Reporting \\ Taxes \\ Taxes Report'" "Generic Reporting \\ Taxes \\ Taxes Report'"
msgstr "確定以下報表的顯示順序:」會計-報表-通用報表-稅-稅報表「" msgstr "確定以下報表的顯示順序:「會計 \\ 報表 \\ 通用報表 \\ 稅 \\ 稅報表」"
#. module: account #. module: account
#: view:account.move.reconcile:0 #: view:account.move.reconcile:0
msgid "Journal Entry Reconcile" msgid "Journal Entry Reconcile"
msgstr "日記帳分錄調節" msgstr "帳簿分錄調節"
#. module: account #. module: account
#: view:account.account:0 #: view:account.account:0

View File

@ -295,7 +295,7 @@
</para> </para>
</td> </td>
<td> <td>
<para style="terp_tblheader_Details"><b>Total:</b></para> <para style="terp_default_9"><b>Total:</b></para>
</td> </td>
<td> <td>
<para style="terp_default_Bold_Right_9"><b>[[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</b></para> <para style="terp_default_Bold_Right_9"><b>[[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]]</b></para>

View File

@ -22,13 +22,12 @@
import time import time
import datetime import datetime
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from operator import itemgetter
from os.path import join as opj
import openerp
from openerp import SUPERUSER_ID
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT as DF from openerp.tools import DEFAULT_SERVER_DATE_FORMAT as DF
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp import tools
class account_config_settings(osv.osv_memory): class account_config_settings(osv.osv_memory):
_name = 'account.config.settings' _name = 'account.config.settings'
@ -276,11 +275,13 @@ class account_config_settings(osv.osv_memory):
def set_default_taxes(self, cr, uid, ids, context=None): def set_default_taxes(self, cr, uid, ids, context=None):
""" set default sale and purchase taxes for products """ """ set default sale and purchase taxes for products """
if uid != SUPERUSER_ID and not self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager'):
raise openerp.exceptions.AccessError(_("Only administrators can change the settings"))
ir_values = self.pool.get('ir.values') ir_values = self.pool.get('ir.values')
config = self.browse(cr, uid, ids[0], context) config = self.browse(cr, uid, ids[0], context)
ir_values.set_default(cr, uid, 'product.product', 'taxes_id', ir_values.set_default(cr, SUPERUSER_ID, 'product.product', 'taxes_id',
config.default_sale_tax and [config.default_sale_tax.id] or False, company_id=config.company_id.id) config.default_sale_tax and [config.default_sale_tax.id] or False, company_id=config.company_id.id)
ir_values.set_default(cr, uid, 'product.product', 'supplier_taxes_id', ir_values.set_default(cr, SUPERUSER_ID, 'product.product', 'supplier_taxes_id',
config.default_purchase_tax and [config.default_purchase_tax.id] or False, company_id=config.company_id.id) config.default_purchase_tax and [config.default_purchase_tax.id] or False, company_id=config.company_id.id)
def set_chart_of_accounts(self, cr, uid, ids, context=None): def set_chart_of_accounts(self, cr, uid, ids, context=None):

View File

@ -1,4 +1,7 @@
from . import test_tax from . import test_tax
from . import test_search
fast_suite = [test_tax, fast_suite = [
] test_tax,
test_search,
]

View File

@ -0,0 +1,60 @@
from openerp.tests.common import TransactionCase
class TestSearch(TransactionCase):
"""Tests for search on name_search (account.account)
The name search on account.account is quite complexe, make sure
we have all the correct results
"""
def setUp(self):
super(TestSearch, self).setUp()
cr, uid = self.cr, self.uid
self.account_model = self.registry('account.account')
self.account_type_model = self.registry('account.account.type')
ac_ids = self.account_type_model.search(cr, uid, [], limit=1)
self.atax = (int(self.account_model.create(cr, uid, dict(
name="Tax Received",
code="121",
user_type=ac_ids[0],
))), "121 Tax Received")
self.apurchase = (int(self.account_model.create(cr, uid, dict(
name="Purchased Stocks",
code="1101",
user_type=ac_ids[0],
))), "1101 Purchased Stocks")
self.asale = (int(self.account_model.create(cr, uid, dict(
name="Product Sales",
code="200",
user_type=ac_ids[0],
))), "200 Product Sales")
self.all_ids = [self.atax[0], self.apurchase[0], self.asale[0]]
def test_name_search(self):
cr, uid = self.cr, self.uid
atax_ids = self.account_model.name_search(cr, uid, name="Tax", operator='ilike', args=[('id', 'in', self.all_ids)])
self.assertEqual(set([self.atax[0]]), set([a[0] for a in atax_ids]), "name_search 'ilike Tax' should have returned Tax Received account only")
atax_ids = self.account_model.name_search(cr, uid, name="Tax", operator='not ilike', args=[('id', 'in', self.all_ids)])
self.assertEqual(set([self.apurchase[0], self.asale[0]]), set([a[0] for a in atax_ids]), "name_search 'not ilike Tax' should have returned all but Tax Received account")
apur_ids = self.account_model.name_search(cr, uid, name='1101', operator='ilike', args=[('id', 'in', self.all_ids)])
self.assertEqual(set([self.apurchase[0]]), set([a[0] for a in apur_ids]), "name_search 'ilike 1101' should have returned Purchased Stocks account only")
apur_ids = self.account_model.name_search(cr, uid, name='1101', operator='not ilike', args=[('id', 'in', self.all_ids)])
self.assertEqual(set([self.atax[0], self.asale[0]]), set([a[0] for a in apur_ids]), "name_search 'not ilike 1101' should have returned all but Purchased Stocks account")
asale_ids = self.account_model.name_search(cr, uid, name='200 Sales', operator='ilike', args=[('id', 'in', self.all_ids)])
self.assertEqual(set([self.asale[0]]), set([a[0] for a in asale_ids]), "name_search 'ilike 200 Sales' should have returned Product Sales account only")
asale_ids = self.account_model.name_search(cr, uid, name='200 Sales', operator='not ilike', args=[('id', 'in', self.all_ids)])
self.assertEqual(set([self.atax[0], self.apurchase[0]]), set([a[0] for a in asale_ids]), "name_search 'not ilike 200 Sales' should have returned all but Product Sales account")
asale_ids = self.account_model.name_search(cr, uid, name='Product Sales', operator='ilike', args=[('id', 'in', self.all_ids)])
self.assertEqual(set([self.asale[0]]), set([a[0] for a in asale_ids]), "name_search 'ilike Product Sales' should have returned Product Sales account only")
asale_ids = self.account_model.name_search(cr, uid, name='Product Sales', operator='not ilike', args=[('id', 'in', self.all_ids)])
self.assertEqual(set([self.atax[0], self.apurchase[0]]), set([a[0] for a in asale_ids]), "name_search 'not ilike Product Sales' should have returned all but Product Sales account")

View File

@ -21,21 +21,25 @@
# #
############################################################################## ##############################################################################
from openerp.osv import osv from openerp.osv import osv, fields
class account_invoice_line(osv.osv): class account_invoice_line(osv.osv):
_inherit = "account.invoice.line" _inherit = "account.invoice.line"
_columns = {
'move_id': fields.many2one('stock.move', string="Move line", help="If the invoice was generated from a stock.picking, reference to the related move line."),
}
def move_line_get(self, cr, uid, invoice_id, context=None): def move_line_get(self, cr, uid, invoice_id, context=None):
res = super(account_invoice_line,self).move_line_get(cr, uid, invoice_id, context=context) res = super(account_invoice_line,self).move_line_get(cr, uid, invoice_id, context=context)
inv = self.pool.get('account.invoice').browse(cr, uid, invoice_id, context=context) inv = self.pool.get('account.invoice').browse(cr, uid, invoice_id, context=context)
company_currency = inv.company_id.currency_id.id company_currency = inv.company_id.currency_id.id
def get_price(cr, uid, inv, company_currency,i_line): def get_price(cr, uid, inv, company_currency, i_line, price_unit):
cur_obj = self.pool.get('res.currency') cur_obj = self.pool.get('res.currency')
if inv.currency_id.id != company_currency: if inv.currency_id.id != company_currency:
price = cur_obj.compute(cr, uid, company_currency, inv.currency_id.id, i_line.product_id.standard_price * i_line.quantity, context={'date': inv.date_invoice}) price = cur_obj.compute(cr, uid, company_currency, inv.currency_id.id, price_unit * i_line.quantity, context={'date': inv.date_invoice})
else: else:
price = i_line.product_id.standard_price * i_line.quantity price = price_unit * i_line.quantity
return price return price
if inv.type in ('out_invoice','out_refund'): if inv.type in ('out_invoice','out_refund'):
@ -60,12 +64,13 @@ class account_invoice_line(osv.osv):
if not cacc: if not cacc:
cacc = i_line.product_id.categ_id.property_account_expense_categ and i_line.product_id.categ_id.property_account_expense_categ.id cacc = i_line.product_id.categ_id.property_account_expense_categ and i_line.product_id.categ_id.property_account_expense_categ.id
if dacc and cacc: if dacc and cacc:
price_unit = i_line.move_id and i_line.move_id.price_unit or i_line.product_id.standard_price
res.append({ res.append({
'type':'src', 'type':'src',
'name': i_line.name[:64], 'name': i_line.name[:64],
'price_unit':i_line.product_id.standard_price, 'price_unit':price_unit,
'quantity':i_line.quantity, 'quantity':i_line.quantity,
'price':get_price(cr, uid, inv, company_currency, i_line), 'price':get_price(cr, uid, inv, company_currency, i_line, price_unit),
'account_id':dacc, 'account_id':dacc,
'product_id':i_line.product_id.id, 'product_id':i_line.product_id.id,
'uos_id':i_line.uos_id.id, 'uos_id':i_line.uos_id.id,
@ -76,9 +81,9 @@ class account_invoice_line(osv.osv):
res.append({ res.append({
'type':'src', 'type':'src',
'name': i_line.name[:64], 'name': i_line.name[:64],
'price_unit':i_line.product_id.standard_price, 'price_unit':price_unit,
'quantity':i_line.quantity, 'quantity':i_line.quantity,
'price': -1 * get_price(cr, uid, inv, company_currency, i_line), 'price': -1 * get_price(cr, uid, inv, company_currency, i_line, price_unit),
'account_id':cacc, 'account_id':cacc,
'product_id':i_line.product_id.id, 'product_id':i_line.product_id.id,
'uos_id':i_line.uos_id.id, 'uos_id':i_line.uos_id.id,

View File

@ -28,6 +28,15 @@ class stock_picking(osv.osv):
_inherit = "stock.picking" _inherit = "stock.picking"
_description = "Picking List" _description = "Picking List"
def _prepare_invoice_line(self, cr, uid, group, picking, move_line, invoice_id,
invoice_vals, context=None):
"""Overwrite to add move_id reference"""
res = super(stock_picking, self)._prepare_invoice_line(cr, uid, group, picking, move_line, invoice_id, invoice_vals, context=context)
res.update({
'move_id': move_line.id,
})
return res
def action_invoice_create(self, cr, uid, ids, journal_id=False, def action_invoice_create(self, cr, uid, ids, journal_id=False,
group=False, type='out_invoice', context=None): group=False, type='out_invoice', context=None):
'''Return ids of created invoices for the pickings''' '''Return ids of created invoices for the pickings'''

File diff suppressed because it is too large Load Diff

View File

@ -11,8 +11,8 @@
<field name="active" eval="False"/> <field name="active" eval="False"/>
<!-- Avoid auto-including this user in any default group, just like a typical portal member --> <!-- Avoid auto-including this user in any default group, just like a typical portal member -->
<field name="groups_id" eval="[(5,)]"/> <field name="groups_id" eval="[(5,)]"/>
<!-- no alias for portal users --> <!-- allow signuped users to have a alias -->
<field name="alias_name" eval="False"/> <field name="alias_name">_usertemplate</field>
</record> </record>
<record id="default_template_user_config" model="ir.config_parameter"> <record id="default_template_user_config" model="ir.config_parameter">

View File

@ -234,8 +234,6 @@ class res_users(osv.Model):
# create a copy of the template user (attached to a specific partner_id if given) # create a copy of the template user (attached to a specific partner_id if given)
values['active'] = True values['active'] = True
if 'alias_name' not in values: # allow behavior change via inheritance (like using the name)
values['alias_name'] = False
context = dict(context or {}, no_reset_password=True) context = dict(context or {}, no_reset_password=True)
return self.copy(cr, uid, template_user_id, values, context=context) return self.copy(cr, uid, template_user_id, values, context=context)

View File

@ -1,12 +1,14 @@
.oe_import > p { .oe_import > p {
margin-left: 8px; margin-left: 8px;
margin-right: 8px; margin-right: 8px;
margin-top: 13px; /* Customize space according bootstrap3 */
text-align: justify text-align: justify
} }
.oe_import h2 { .oe_import h2 {
margin-top: 0; margin-top: 0;
margin-bottom: 5px; margin-bottom: 5px;
font-size: 1.5em; /* Customize according bootstrap3 */
} }
.oe_padding { .oe_padding {
@ -22,6 +24,14 @@
border: solid 1px #dddddd; border: solid 1px #dddddd;
width: 600px; width: 600px;
} }
/* Customize according bootstrap3 */
.oe_import .oe_import_box label{
font-weight: normal;
}
.oe_import .oe_import_box .oe_import_file {
display: inline-block;
}
/* End of Customize */
.oe_import .oe_import_toggle{ .oe_import .oe_import_toggle{
margin-top: 8px; margin-top: 8px;
} }
@ -40,7 +50,7 @@
} }
.oe_import .oe_import_options p { .oe_import .oe_import_options p {
margin: 0; margin: 0 0 -7px 0; /* Customize margin-bottom of <p> according bootstrap3 */
padding: 0; padding: 0;
} }
.oe_import .oe_import_options label { .oe_import .oe_import_options label {
@ -69,6 +79,14 @@
.oe_import .oe_import_report_more { .oe_import .oe_import_report_more {
display: none; display: none;
} }
/* Customize dd and label according bootstrap3 */
.oe_import dd {
-webkit-margin-start: 40px;
}
.oe_import .oe_import_with_file label {
font-weight: normal;
}
/* End of customize */
.oe_import.oe_import_preview .oe_import_grid { .oe_import.oe_import_preview .oe_import_grid {
display: table; display: table;

View File

@ -373,7 +373,7 @@ openerp.base_import = function (instance) {
return $.when([{ return $.when([{
type: 'error', type: 'error',
record: false, record: false,
message: error.data.fault_code, message: error.data.arguments[1],
}]); }]);
}) ; }) ;
}, },

View File

@ -68,7 +68,7 @@ class base_config_settings(osv.osv_memory):
def set_base_defaults(self, cr, uid, ids, context=None): def set_base_defaults(self, cr, uid, ids, context=None):
ir_model_data = self.pool.get('ir.model.data') ir_model_data = self.pool.get('ir.model.data')
wizard = self.browse(cr, uid, ids)[0] wizard = self.browse(cr, uid, ids, context)[0]
if wizard.font: if wizard.font:
user = self.pool.get('res.users').browse(cr, uid, uid, context) user = self.pool.get('res.users').browse(cr, uid, uid, context)
font_name = wizard.font.name font_name = wizard.font.name
@ -76,7 +76,7 @@ class base_config_settings(osv.osv_memory):
return {} return {}
def act_discover_fonts(self, cr, uid, ids, context=None): def act_discover_fonts(self, cr, uid, ids, context=None):
return self.pool.get("res.font").discover_fonts(cr, uid, ids, context) return self.pool.get("res.font").font_scan(cr, uid, context=context)
# Preferences wizard for Sales & CRM. # Preferences wizard for Sales & CRM.
# It is defined here because it is inherited independently in modules sale, crm, # It is defined here because it is inherited independently in modules sale, crm,

View File

@ -94,7 +94,7 @@
<label for="font" /> <label for="font" />
<div> <div>
<div> <div>
<field name="font" class="oe_inline"/> <field name="font" class="oe_inline" domain="[('mode', 'in', ('normal', 'regular', 'all', 'book'))]" />
<button string="(reload fonts)" name="act_discover_fonts" type="object" class="oe_link"/> <button string="(reload fonts)" name="act_discover_fonts" type="object" class="oe_link"/>
</div> </div>
</div> </div>

View File

@ -0,0 +1,75 @@
# Spanish (Peru) translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-12-09 17:26+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish (Peru) <es_PE@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: base_vat
#: view:res.partner:0
msgid "Check Validity"
msgstr ""
#. module: base_vat
#: code:addons/base_vat/base_vat.py:152
#, python-format
msgid ""
"This VAT number does not seem to be valid.\n"
"Note: the expected format is %s"
msgstr "El RUC no es válido. El formato esperado es %s"
#. module: base_vat
#: field:res.company,vat_check_vies:0
msgid "VIES VAT Check"
msgstr ""
#. module: base_vat
#: model:ir.model,name:base_vat.model_res_company
msgid "Companies"
msgstr ""
#. module: base_vat
#: code:addons/base_vat/base_vat.py:113
#, python-format
msgid "Error!"
msgstr ""
#. module: base_vat
#: help:res.partner,vat_subjected:0
msgid ""
"Check this box if the partner is subjected to the VAT. It will be used for "
"the VAT legal statement."
msgstr ""
"Marque esta opción si la empresa está sujeta a Impuestos. Será utilizado "
"para la declaración legal de Impuestos."
#. module: base_vat
#: model:ir.model,name:base_vat.model_res_partner
msgid "Partner"
msgstr ""
#. module: base_vat
#: help:res.company,vat_check_vies:0
msgid ""
"If checked, Partners VAT numbers will be fully validated against EU's VIES "
"service rather than via a simple format validation (checksum)."
msgstr ""
"Si se marca, el RUC de la empresa se validará contra el servicio europeo "
"VIES VAT en lugar de sólo validar el formato."
#. module: base_vat
#: field:res.partner,vat_subjected:0
msgid "VAT Legal Statement"
msgstr "Sujeto a Impuestos"

View File

@ -13,7 +13,6 @@
<field name="search_view_id" ref="crm.view_crm_case_leads_filter"/> <field name="search_view_id" ref="crm.view_crm_case_leads_filter"/>
<field name="context">{ <field name="context">{
'search_default_section_id': [active_id], 'search_default_section_id': [active_id],
'search_default_open': 1,
'default_section_id': active_id, 'default_section_id': active_id,
'default_type': 'lead', 'default_type': 'lead',
'stage_type': 'lead', 'stage_type': 'lead',
@ -43,7 +42,6 @@
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/> <field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
<field name="context">{ <field name="context">{
'search_default_section_id': [active_id], 'search_default_section_id': [active_id],
'search_default_assigned_to_me': 1,
'default_section_id': active_id, 'default_section_id': active_id,
'stage_type': 'opportunity', 'stage_type': 'opportunity',
'default_type': 'opportunity', 'default_type': 'opportunity',
@ -64,6 +62,26 @@
</field> </field>
</record> </record>
<record id="action_report_crm_lead_salesteam" model="ir.actions.act_window">
<field name="name">Leads Analysis</field>
<field name="res_model">crm.lead.report</field>
<field name="view_type">form</field>
<field name="context">{"search_default_month":1}</field>
<field name="view_mode">tree,graph</field>
<field name="domain">[('type','=', 'lead'),('section_id', '=', active_id)]</field>
<field name="help">Leads Analysis allows you to check different CRM related information like the treatment delays or number of leads per state. You can sort out your leads analysis by different groups to get accurate grained analysis.</field>
</record>
<record id="action_report_crm_opportunity_salesteam" model="ir.actions.act_window">
<field name="name">Opportunities Analysis</field>
<field name="res_model">crm.lead.report</field>
<field name="view_type">form</field>
<field name="context">{"search_default_month":1}</field>
<field name="view_mode">tree,graph</field>
<field name="domain">[('type','=', 'opportunity'), ('section_id', '=', active_id)]</field>
<field name="help">Opportunities Analysis gives you an instant access to your opportunities with information such as the expected revenue, planned cost, missed deadlines or the number of interactions per opportunity. This report is mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline.</field>
</record>
<!-- Case Sections Salesteams kanban view --> <!-- Case Sections Salesteams kanban view -->
<record model="ir.ui.view" id="crm_case_section_salesteams_view_kanban"> <record model="ir.ui.view" id="crm_case_section_salesteams_view_kanban">
@ -99,13 +117,25 @@
<div class="oe_items_list"> <div class="oe_items_list">
<div class="oe_salesteams_leads" t-if="record.use_leads.raw_value"> <div class="oe_salesteams_leads" t-if="record.use_leads.raw_value">
<a name="%(crm_case_form_view_salesteams_lead)d" type="action">Leads</a> <a name="%(crm_case_form_view_salesteams_lead)d" type="action">Leads</a>
<a name="%(action_report_crm_lead)d" type="action" class="oe_sparkline_bar_link"><field name="monthly_open_leads" widget="sparkline_bar" options="{'height': '20px', 'barWidth': 4, 'barSpacing': 1}">Open Leads per Month<br/>Click to see a detailed analysis of leads.</field></a> <a name="%(action_report_crm_lead_salesteam)d" type="action" class="oe_sparkline_bar_link">
<field name="monthly_open_leads" widget="sparkline_bar"
options="{'height': '20px', 'barWidth': 4, 'barSpacing': 1, 'delayIn': '3000', 'tooltip_suffix': 'Leads'}">Open Leads per Month<br/>Click to see a detailed analysis of leads.</field>
</a>
</div> </div>
<div class="oe_salesteams_opportunities"> <div class="oe_salesteams_opportunities">
<a name="%(crm_case_form_view_salesteams_opportunity)d" type="action">Opportunities</a> <a name="%(crm_case_form_view_salesteams_opportunity)d" type="action">Opportunities</a>
<a name="%(action_report_crm_opportunity)d" type="action"><field name="monthly_planned_revenue" widget="sparkline_bar" height="20px" barWidth="4" barSpacing="1">Planned Revenue per Month<br/>Click to see a detailed analysis of opportunities.</field></a> <a name="%(action_report_crm_opportunity_salesteam)d" type="action">
<field name="monthly_planned_revenue" widget="sparkline_bar"
options="{'height': '20px', 'barWidth': '4', 'barSpacing': '1', 'delayIn': '3000', 'tooltip_suffix': 'Opportunities'}">Planned Revenue per Month<br/>Click to see a detailed analysis of opportunities.</field>
</a>
</div> </div>
</div> </div>
<div class="oe_clear"></div>
<div class="oe_kanban_salesteams_avatars">
<t t-foreach="record.member_ids.raw_value.slice(0,10)" t-as="member">
<img t-att-src="kanban_image('res.users', 'image_small', member)" t-att-data-member_id="member"/>
</t>
</div>
</div> </div>
</div> </div>
</t> </t>

View File

@ -6,14 +6,20 @@
<field name="groups_id" eval="[(4,ref('base.group_sale_salesman'))]"/> <field name="groups_id" eval="[(4,ref('base.group_sale_salesman'))]"/>
</record> </record>
<record id="crm.section_sales_department" model="crm.case.section">
<field name="member_ids" eval="[(4, ref('base.user_demo'))]"/>
</record>
<record model="crm.case.section" id="crm_case_section_1"> <record model="crm.case.section" id="crm_case_section_1">
<field name="name">Indirect Sales</field> <field name="name">Indirect Sales</field>
<field name="code">IM</field> <field name="code">IM</field>
<field name="member_ids" eval="[(4, ref('base.user_root')),(4, ref('base.user_demo'))]"/>
</record> </record>
<record model="crm.case.section" id="crm_case_section_2"> <record model="crm.case.section" id="crm_case_section_2">
<field name="name">Marketing</field> <field name="name">Marketing</field>
<field name="code">SPD</field> <field name="code">SPD</field>
<field name="member_ids" eval="[(4, ref('base.user_root')),(4, ref('base.user_demo'))]"/>
</record> </record>
<record model="crm.segmentation" id="crm_segmentation0"> <record model="crm.segmentation" id="crm_segmentation0">

View File

@ -66,9 +66,6 @@
<field name="model">crm.lead.report</field> <field name="model">crm.lead.report</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Leads Analysis"> <search string="Leads Analysis">
<filter icon="terp-personal" name="lead" string="Lead" domain="[('type','=', 'lead')]" help="Show only lead"/>
<filter icon="terp-personal+" string="Opportunity" name="opportunity" domain="[('type','=','opportunity')]" help="Show only opportunity"/>
<separator/>
<filter string="New" name="new" <filter string="New" name="new"
domain="[('probability', '=', 0), ('stage_id.sequence', '=', 1)]"/> domain="[('probability', '=', 0), ('stage_id.sequence', '=', 1)]"/>
<filter string="Won" name="won" <filter string="Won" name="won"
@ -115,7 +112,7 @@
<separator orientation="vertical" /> <separator orientation="vertical" />
<filter string="Year" icon="terp-go-year" <filter string="Year" icon="terp-go-year"
domain="[]" context="{'group_by':'creation_year'}"/> domain="[]" context="{'group_by':'creation_year'}"/>
<filter string="Month" icon="terp-go-month" <filter string="Month" name="month" icon="terp-go-month"
domain="[]" context="{'group_by':'creation_month'}"/> domain="[]" context="{'group_by':'creation_month'}"/>
<filter string="Day" icon="terp-go-today" <filter string="Day" icon="terp-go-today"
domain="[]" context="{'group_by':'creation_day'}"/> domain="[]" context="{'group_by':'creation_day'}"/>
@ -168,9 +165,9 @@
<field name="name">Leads Analysis</field> <field name="name">Leads Analysis</field>
<field name="res_model">crm.lead.report</field> <field name="res_model">crm.lead.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="context">{'search_default_year': 1,'search_default_lead': 1, "search_default_user":1, "search_default_this_month":1, 'group_by_no_leaf':1, 'group_by':[]}</field> <field name="context">{'search_default_year': 1, "search_default_user":1, "search_default_month":1, 'group_by_no_leaf':1, 'group_by':[]}</field>
<field name="view_mode">tree,graph</field> <field name="view_mode">tree,graph</field>
<field name="domain">[]</field> <field name="domain">[('type','=', 'lead')]</field>
<field name="help">Leads Analysis allows you to check different CRM related information like the treatment delays or number of leads per state. You can sort out your leads analysis by different groups to get accurate grained analysis.</field> <field name="help">Leads Analysis allows you to check different CRM related information like the treatment delays or number of leads per state. You can sort out your leads analysis by different groups to get accurate grained analysis.</field>
</record> </record>
<record model="ir.actions.act_window.view" id="action_report_crm_lead_tree"> <record model="ir.actions.act_window.view" id="action_report_crm_lead_tree">
@ -190,8 +187,9 @@
<field name="name">Opportunities Analysis</field> <field name="name">Opportunities Analysis</field>
<field name="res_model">crm.lead.report</field> <field name="res_model">crm.lead.report</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="context">{"search_default_year":1,"search_default_opportunity":1, "search_default_user":1,"search_default_this_month":1,'group_by_no_leaf':1,'group_by':[]}</field> <field name="context">{"search_default_year":1, "search_default_user":1,"search_default_month":1,'group_by_no_leaf':1,'group_by':[]}</field>
<field name="view_mode">tree,graph</field> <field name="view_mode">tree,graph</field>
<field name="domain">[('type','=', 'opportunity')]</field>
<field name="help">Opportunities Analysis gives you an instant access to your opportunities with information such as the expected revenue, planned cost, missed deadlines or the number of interactions per opportunity. This report is mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline.</field> <field name="help">Opportunities Analysis gives you an instant access to your opportunities with information such as the expected revenue, planned cost, missed deadlines or the number of interactions per opportunity. This report is mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline.</field>
</record> </record>

View File

@ -91,5 +91,19 @@
<field name="groups" eval="[(4, ref('base.group_sale_salesman_all_leads'))]"/> <field name="groups" eval="[(4, ref('base.group_sale_salesman_all_leads'))]"/>
</record> </record>
<record id="crm_rule_personal_lead_report" model="ir.rule">
<field name="name">Personal Leads Analysis</field>
<field ref="model_crm_lead_report" name="model_id"/>
<field name="domain_force">['|',('user_id','=',user.id),('user_id','=',False)]</field>
<field name="groups" eval="[(4, ref('base.group_sale_salesman'))]"/>
</record>
<record id="crm_rule_all_lead_report" model="ir.rule">
<field name="name">All Leads Analysis</field>
<field ref="model_crm_lead_report" name="model_id"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('base.group_sale_salesman_all_leads'))]"/>
</record>
</data> </data>
</openerp> </openerp>

View File

@ -0,0 +1,2 @@
crm.css: crm.sass
sass --trace -t expanded crm.sass:crm.css

View File

@ -1,64 +1,62 @@
@charset "utf-8";
.openerp .oe_kanban_view .oe_kanban_crm_salesteams { .openerp .oe_kanban_view .oe_kanban_crm_salesteams {
width: 345px; /* Customize width and height of kanban according bootstrap3 */
width: 357px;
min-height: 254px !important;
/* End of customize */
cursor: default;
} }
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_avatars {
text-align: right;
margin: -5px 0 -10px 0;
}
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_avatars img {
width: 30px;
height: 30px;
padding-left: 0px;
margin-top: 3px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
}
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list { .openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list {
position: relative; position: relative;
margin: 10px; /* Improved margin to set alignment of list items according bootstrap3 */
margin: 10px 0 10px 9px;
min-height: 10px;
} }
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list div { .openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list div {
width: 160px; width: 160px;
height: 22px; height: 22px;
margin: 0 !important; margin: 0 !important;
position: relative; position: relative;
display: inline-block; display: inline-block;
} float: left;
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list a:hover {
text-decoration: underline !important;
} }
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list div a:nth-child(2n) { .openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list div a:nth-child(2n) {
position: absolute; position: absolute;
left: 90px; left: 90px;
top: 0; top: 0;
} }
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list div:nth-child(2n) a:nth-child(2n) { .openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list div:nth-child(2n) a:nth-child(2n) {
left: 110px; left: 110px;
}
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list a:hover {
text-decoration: underline !important;
} }
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center { .openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center {
text-align: center; text-align: center;
margin: 3px 0; margin: 3px 0;
} }
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center .oe_sum { .openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center .oe_sum {
margin: 0; margin: 0;
font-size: 40px; font-size: 40px;
} }
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center .oe_subsum { .openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center .oe_subsum {
font-size: 10px; font-size: 10px;
} }
.openerp .oe_kanban_view .oe_salesteams_help {
.openerp .oe_kanban_view .oe_justgage { display: inline-block;
color: black; }
display: inline-block; .openerp .oe_kanban_view .oe_kanban_salesteams_avatars {
margin-top: 20px;
}
.openerp .oe_kanban_view .oe_kanban_salesteams_avatars img {
width: 30px;
height: 30px;
padding-left: 0px;
margin-top: 3px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
} }
.openerp .oe_kanban_view .oe_sparkline_bar {
height: 20px;
width: 36px;
}

View File

@ -0,0 +1,55 @@
@charset "utf-8"
.openerp
.oe_kanban_view
.oe_kanban_crm_salesteams
/* Customize width and height of kanban according bootstrap3 */
width: 357px
min-height: 254px !important
/* End of customize */
cursor: default
.oe_items_list
position: relative
/* Improved margin to set alignment of list items according bootstrap3 */
margin: 10px 0 10px 9px
min-height: 10px
div
width: 160px
height: 22px
margin: 0 !important
position: relative
display: inline-block
float: left
a:nth-child(2n)
position: absolute
left: 90px
top: 0
div:nth-child(2n)
a:nth-child(2n)
left: 110px
a:hover
text-decoration: underline !important
.oe_center
text-align: center
margin: 3px 0
.oe_sum
margin: 0
font-size: 40px
.oe_subsum
font-size: 10px
.oe_salesteams_help
display: inline-block
.oe_kanban_salesteams_avatars
margin-top: 20px
.oe_kanban_salesteams_avatars
img
width: 30px
height: 30px
padding-left: 0px
margin-top: 3px
-moz-border-radius: 2px
-webkit-border-radius: 2px
border-radius: 2px
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2)
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2)
-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2)

View File

@ -1,4 +1,40 @@
openerp.crm = function(openerp) { openerp.crm = function(openerp) {
openerp.web_kanban.KanbanView.include({
crm_display_members_names: function() {
/*
* Set avatar title for members.
* In kanban views, many2many fields only return a list of ids.
* We can implement return value of m2m fields like [(1,"Adminstration"),...].
*/
var self = this;
var members_ids = [];
// Collect members ids
self.$el.find('img[data-member_id]').each(function() {
members_ids.push($(this).data('member_id'));
});
// Find their matching names
var dataset = new openerp.web.DataSetSearch(self, 'res.users', self.session.context, [['id', 'in', _.uniq(members_ids)]]);
dataset.read_slice(['id', 'name']).done(function(result) {
_.each(result, function(v, k) {
// Set the proper value in the DOM
self.$el.find('img[data-member_id=' + v.id + ']').attr('title', v.name).tipsy({
offset: 10
});
});
});
},
on_groups_started: function() {
var self = this;
self._super.apply(self, arguments);
if (self.dataset.model === 'crm.case.section') {
self.crm_display_members_names();
}
},
});
openerp.web_kanban.KanbanRecord.include({ openerp.web_kanban.KanbanRecord.include({
on_card_clicked: function() { on_card_clicked: function() {
if (this.view.dataset.model === 'crm.case.section') { if (this.view.dataset.model === 'crm.case.section') {
@ -8,5 +44,4 @@ openerp.crm = function(openerp) {
} }
}, },
}); });
}; };

View File

@ -38,6 +38,9 @@ class crm_lead2opportunity_partner(osv.osv_memory):
'section_id': fields.many2one('crm.case.section', 'Sales Team', select=True), 'section_id': fields.many2one('crm.case.section', 'Sales Team', select=True),
} }
def onchange_action(self, cr, uid, ids, action, context=None):
return {'value': {'partner_id': False if action != 'exist' else self._find_matching_partner(cr, uid, context=context)}}
def default_get(self, cr, uid, fields, context=None): def default_get(self, cr, uid, fields, context=None):
""" """
Default get for name, opportunity_ids. Default get for name, opportunity_ids.

View File

@ -31,7 +31,7 @@
</field> </field>
</group> </group>
<group name="action" attrs="{'invisible': [('name', '!=', 'convert')]}"> <group name="action" attrs="{'invisible': [('name', '!=', 'convert')]}">
<field name="action" class="oe_inline"/> <field name="action" on_change="onchange_action(action, context)" class="oe_inline"/>
<field name="partner_id" <field name="partner_id"
attrs="{'required': [('action', '=', 'exist')], 'invisible':[('action','!=','exist')]}" attrs="{'required': [('action', '=', 'exist')], 'invisible':[('action','!=','exist')]}"
class="oe_inline"/> class="oe_inline"/>

View File

@ -51,7 +51,9 @@
<search string="Search"> <search string="Search">
<filter string="My Sales Team(s)" icon="terp-personal+" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]" help="My Sales Team(s)" groups="base.group_multi_salesteams"/> <filter string="My Sales Team(s)" icon="terp-personal+" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]" help="My Sales Team(s)" groups="base.group_multi_salesteams"/>
<separator/> <separator/>
<filter string="My Company" icon="terp-go-home" context="{'invisible_section': False}" domain="[('section_id.user_id.company_id','=',uid)]" help="My company"/> <!-- A 'My Company' filter makes no sense regarding record rules, and is not possible to do (uid is not a company): remove me in 8.0 -->
<filter string="My Company" icon="terp-go-home" context="{'invisible_section': False}" domain="[]" help="My company"
invisible="1"/>
<separator/> <separator/>
<filter icon="terp-personal" string="My Case(s)" help="My Case(s)" domain="[('user_id','=',uid)]" /> <filter icon="terp-personal" string="My Case(s)" help="My Case(s)" domain="[('user_id','=',uid)]" />
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>

View File

@ -69,7 +69,11 @@ class document_file(osv.osv):
def check(self, cr, uid, ids, mode, context=None, values=None): def check(self, cr, uid, ids, mode, context=None, values=None):
"""Overwrite check to verify access on directory to validate specifications of doc/access_permissions.rst""" """Overwrite check to verify access on directory to validate specifications of doc/access_permissions.rst"""
if not isinstance(ids, list):
ids = [ids]
super(document_file, self).check(cr, uid, ids, mode, context=context, values=values) super(document_file, self).check(cr, uid, ids, mode, context=context, values=values)
if ids: if ids:
self.pool.get('ir.model.access').check(cr, uid, 'document.directory', mode) self.pool.get('ir.model.access').check(cr, uid, 'document.directory', mode)

View File

@ -369,7 +369,7 @@ class email_template(osv.osv):
attachment_ids=[attach.id for attach in template.attachment_ids], attachment_ids=[attach.id for attach in template.attachment_ids],
) )
# Add report in attachments # Add report in attachments: generate once for all template_res_ids
if template.report_template: if template.report_template:
for res_id in template_res_ids: for res_id in template_res_ids:
attachments = [] attachments = []
@ -387,8 +387,7 @@ class email_template(osv.osv):
if not report_name.endswith(ext): if not report_name.endswith(ext):
report_name += ext report_name += ext
attachments.append((report_name, result)) attachments.append((report_name, result))
results[res_id]['attachments'] = attachments
values['attachments'] = attachments
return results return results

View File

@ -60,10 +60,9 @@ class config(osv.Model):
def get_access_token(self, cr, uid, scope=None, context=None): def get_access_token(self, cr, uid, scope=None, context=None):
ir_config = self.pool['ir.config_parameter'] ir_config = self.pool['ir.config_parameter']
google_drive_refresh_token = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_refresh_token') google_drive_refresh_token = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_refresh_token')
group_config = self.pool['ir.model.data'].get_object_reference(cr, uid, 'base', 'group_erp_manager')[1] user_is_admin = self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager')
user = self.pool['res.users'].read(cr, uid, uid, "groups_id")
if not google_drive_refresh_token: if not google_drive_refresh_token:
if group_config in user['groups_id']: if user_is_admin:
raise self.pool.get('res.config.settings').get_config_warning(cr, _("You haven't configured 'Authorization Code' generated from google, Please generate and configure it in %(menu:base_setup.menu_general_configuration)s."), context=context) raise self.pool.get('res.config.settings').get_config_warning(cr, _("You haven't configured 'Authorization Code' generated from google, Please generate and configure it in %(menu:base_setup.menu_general_configuration)s."), context=context)
else: else:
raise osv.except_osv(_('Error!'), _("Google Drive is not yet configured. Please contact your administrator.")) raise osv.except_osv(_('Error!'), _("Google Drive is not yet configured. Please contact your administrator."))
@ -81,7 +80,7 @@ class config(osv.Model):
req = urllib2.Request('https://accounts.google.com/o/oauth2/token', data, headers) req = urllib2.Request('https://accounts.google.com/o/oauth2/token', data, headers)
content = urllib2.urlopen(req).read() content = urllib2.urlopen(req).read()
except urllib2.HTTPError: except urllib2.HTTPError:
if group_config in user['groups_id']: if user_is_admin:
raise self.pool.get('res.config.settings').get_config_warning(cr, _("Something went wrong during the token generation. Please request again an authorization code in %(menu:base_setup.menu_general_configuration)s."), context=context) raise self.pool.get('res.config.settings').get_config_warning(cr, _("Something went wrong during the token generation. Please request again an authorization code in %(menu:base_setup.menu_general_configuration)s."), context=context)
else: else:
raise osv.except_osv(_('Error!'), _("Google Drive is not yet configured. Please contact your administrator.")) raise osv.except_osv(_('Error!'), _("Google Drive is not yet configured. Please contact your administrator."))

View File

@ -18,6 +18,7 @@
# #
############################################################################## ##############################################################################
import cgi
import simplejson import simplejson
import logging import logging
from lxml import etree from lxml import etree
@ -67,24 +68,24 @@ class config(osv.osv):
request = '''<feed xmlns="http://www.w3.org/2005/Atom" request = '''<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:batch="http://schemas.google.com/gdata/batch"
xmlns:gs="http://schemas.google.com/spreadsheets/2006"> xmlns:gs="http://schemas.google.com/spreadsheets/2006">
<id>https://spreadsheets.google.com/feeds/cells/%s/od6/private/full</id> <id>https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full</id>
<entry> <entry>
<batch:id>A1</batch:id> <batch:id>A1</batch:id>
<batch:operation type="update"/> <batch:operation type="update"/>
<id>https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R1C1</id> <id>https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full/R1C1</id>
<link rel="edit" type="application/atom+xml" <link rel="edit" type="application/atom+xml"
href="https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R1C1"/> href="https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full/R1C1"/>
<gs:cell row="1" col="1" inputValue="%s"/> <gs:cell row="1" col="1" inputValue="{formula}"/>
</entry> </entry>
<entry> <entry>
<batch:id>A2</batch:id> <batch:id>A2</batch:id>
<batch:operation type="update"/> <batch:operation type="update"/>
<id>https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R60C15</id> <id>https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full/R60C15</id>
<link rel="edit" type="application/atom+xml" <link rel="edit" type="application/atom+xml"
href="https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R60C15"/> href="https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full/R60C15"/>
<gs:cell row="60" col="15" inputValue="%s"/> <gs:cell row="60" col="15" inputValue="{config}"/>
</entry> </entry>
</feed>''' % (spreadsheet_key, spreadsheet_key, spreadsheet_key, formula.replace('"', '&quot;'), spreadsheet_key, spreadsheet_key, config_formula.replace('"', '&quot;')) </feed>''' .format(key=spreadsheet_key, formula=cgi.escape(formula, quote=True), config=cgi.escape(config_formula, quote=True))
try: try:
req = urllib2.Request( req = urllib2.Request(

View File

@ -5,9 +5,9 @@
<!--logo--> <!--logo-->
<fill color="black"/> <fill color="black"/>
<stroke color="black"/> <stroke color="black"/>
<setFont name="DejaVu Sans" size="8"/> <setFont name="DejaVuSans" size="8"/>
<drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString> <drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString>
<setFont name="DejaVu Sans Bold" size="10"/> <setFont name="DejaVuSans-Bold" size="10"/>
<drawString x="13.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString> <drawString x="13.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString>
<stroke color="#000000"/> <stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines> <lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>
@ -17,9 +17,9 @@
<!--logo--> <!--logo-->
<fill color="black"/> <fill color="black"/>
<stroke color="black"/> <stroke color="black"/>
<setFont name="DejaVu Sans" size="8"/> <setFont name="DejaVuSans" size="8"/>
<drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString> <drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString>
<setFont name="DejaVu Sans Bold" size="10"/> <setFont name="DejaVuSans-Bold" size="10"/>
<drawString x="27.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString> <drawString x="27.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString>
<stroke color="#000000"/> <stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines> <lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>

View File

@ -5,7 +5,7 @@
display: inline-block; display: inline-block;
} }
.openerp .oe_attendance_signin { .openerp .oe_attendance_signin {
float:left; float: right;
height: 32px; height: 32px;
width: 32px; width: 32px;
background: url(/hr_attendance/static/src/img/emp-out32.png); background: url(/hr_attendance/static/src/img/emp-out32.png);

View File

@ -5,9 +5,9 @@
<!--logo--> <!--logo-->
<fill color="black"/> <fill color="black"/>
<stroke color="black"/> <stroke color="black"/>
<setFont name="DejaVu Sans" size="8"/> <setFont name="DejaVuSans" size="8"/>
<drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString> <drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString>
<setFont name="DejaVu Sans Bold" size="10"/> <setFont name="DejaVuSans-Bold" size="10"/>
<drawString x="13.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString> <drawString x="13.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString>
<stroke color="#000000"/> <stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines> <lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>
@ -17,9 +17,9 @@
<!--logo--> <!--logo-->
<fill color="black"/> <fill color="black"/>
<stroke color="black"/> <stroke color="black"/>
<setFont name="DejaVu Sans" size="8"/> <setFont name="DejaVuSans" size="8"/>
<drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString> <drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString>
<setFont name="DejaVu Sans Bold" size="10"/> <setFont name="DejaVuSans-Bold" size="10"/>
<drawString x="27.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString> <drawString x="27.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString>
<stroke color="#000000"/> <stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines> <lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>

View File

@ -5,9 +5,9 @@
<!--logo--> <!--logo-->
<fill color="black"/> <fill color="black"/>
<stroke color="black"/> <stroke color="black"/>
<setFont name="DejaVu Sans" size="8"/> <setFont name="DejaVuSans" size="8"/>
<drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString> <drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString>
<setFont name="DejaVu Sans Bold" size="10"/> <setFont name="DejaVuSans-Bold" size="10"/>
<drawString x="13.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString> <drawString x="13.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString>
<stroke color="#000000"/> <stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines> <lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>
@ -17,9 +17,9 @@
<!--logo--> <!--logo-->
<fill color="black"/> <fill color="black"/>
<stroke color="black"/> <stroke color="black"/>
<setFont name="DejaVu Sans" size="8"/> <setFont name="DejaVuSans" size="8"/>
<drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString> <drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//report/header/date"/></drawString>
<setFont name="DejaVu Sans Bold" size="10"/> <setFont name="DejaVuSans-Bold" size="10"/>
<drawString x="27.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString> <drawString x="27.8cm" y="19.5cm"><xsl:value-of select="//report/header/company"/></drawString>
<stroke color="#000000"/> <stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines> <lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>

View File

@ -19,7 +19,7 @@
text-align: center; text-align: center;
color: #006699; color: #006699;
font-family: "Helvetica Neue", Arial, Verdana, "Nimbus Sans L", sans-serif; font-family: "Helvetica Neue", Arial, Verdana, "Nimbus Sans L", sans-serif;
font-size: 10px; font-size: 11px;
background: #eeeeee; background: #eeeeee;
min-width: 47px; min-width: 47px;
} }

View File

@ -1,5 +1,5 @@
.openerp .oe_kanban_view .oe_kanban_idea_idea { .openerp .oe_kanban_view .oe_kanban_idea_idea {
width: 200px; width: 212px; /* Customize width according bootstrap3 */
} }
.openerp .oe_kanban_view .oe_kanban_idea_idea .oe_avatars { .openerp .oe_kanban_view .oe_kanban_idea_idea .oe_avatars {

View File

@ -80,7 +80,7 @@
}); });
}, },
calc_box: function() { calc_box: function() {
var $topbar = instance.client.$(".oe_topbar"); var $topbar = instance.client.$(".navbar"); // .oe_topbar is replaced with .navbar of bootstrap3
var top = $topbar.offset().top + $topbar.height(); var top = $topbar.offset().top + $topbar.height();
top = Math.max(top - $(window).scrollTop(), 0); top = Math.max(top - $(window).scrollTop(), 0);
this.$el.css("top", top); this.$el.css("top", top);

View File

@ -211,5 +211,5 @@ class im_session(osv.osv):
_inherit = 'im.session' _inherit = 'im.session'
_columns = { _columns = {
'channel_id': fields.many2one("im.user", "Channel"), 'channel_id': fields.many2one("im_livechat.channel", "Channel"),
} }

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-02-14 16:43+0000\n" "PO-Revision-Date: 2013-12-02 18:38+0000\n"
"Last-Translator: krnkris <Unknown>\n" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 06:29+0000\n" "X-Launchpad-Export-Date: 2013-12-03 05:41+0000\n"
"X-Generator: Launchpad (build 16761)\n" "X-Generator: Launchpad (build 16856)\n"
#. module: mail #. module: mail
#: view:mail.followers:0 #: view:mail.followers:0
@ -1791,7 +1791,7 @@ msgstr "Altípusok"
#. module: mail #. module: mail
#: model:ir.model,name:mail.model_mail_alias #: model:ir.model,name:mail.model_mail_alias
msgid "Email Aliases" msgid "Email Aliases"
msgstr "e-amil álnevek" msgstr "Email álnevek"
#. module: mail #. module: mail
#: field:mail.group,image_small:0 #: field:mail.group,image_small:0

View File

@ -817,12 +817,11 @@ class mail_message(osv.Model):
return email_reply_to return email_reply_to
def _get_message_id(self, cr, uid, values, context=None): def _get_message_id(self, cr, uid, values, context=None):
message_id = None if values.get('reply_to'):
if not values.get('message_id') and values.get('reply_to'):
message_id = tools.generate_tracking_message_id('reply_to') message_id = tools.generate_tracking_message_id('reply_to')
elif not values.get('message_id') and values.get('res_id') and values.get('model'): elif values.get('res_id') and values.get('model'):
message_id = tools.generate_tracking_message_id('%(res_id)s-%(model)s' % values) message_id = tools.generate_tracking_message_id('%(res_id)s-%(model)s' % values)
elif not values.get('message_id'): else:
message_id = tools.generate_tracking_message_id('private') message_id = tools.generate_tracking_message_id('private')
return message_id return message_id
@ -833,7 +832,7 @@ class mail_message(osv.Model):
if 'email_from' not in values: # needed to compute reply_to if 'email_from' not in values: # needed to compute reply_to
values['email_from'] = self._get_default_from(cr, uid, context=context) values['email_from'] = self._get_default_from(cr, uid, context=context)
if not values.get('message_id'): if 'message_id' not in values:
values['message_id'] = self._get_message_id(cr, uid, values, context=context) values['message_id'] = self._get_message_id(cr, uid, values, context=context)
if 'reply_to' not in values: if 'reply_to' not in values:
values['reply_to'] = self._get_reply_to(cr, uid, values, context=context) values['reply_to'] = self._get_reply_to(cr, uid, values, context=context)

View File

@ -252,13 +252,10 @@ class mail_thread(osv.AbstractModel):
new = set(command[2]) new = set(command[2])
# remove partners that are no longer followers # remove partners that are no longer followers
fol_ids = fol_obj.search(cr, SUPERUSER_ID, self.message_unsubscribe(cr, uid, [id], list(old-new))
[('res_model', '=', self._name), ('res_id', '=', id), ('partner_id', 'not in', list(new))])
fol_obj.unlink(cr, SUPERUSER_ID, fol_ids)
# add new followers # add new followers
for partner_id in new - old: self.message_subscribe(cr, uid, [id], list(new-old))
fol_obj.create(cr, SUPERUSER_ID, {'res_model': self._name, 'res_id': id, 'partner_id': partner_id})
def _search_followers(self, cr, uid, obj, name, args, context): def _search_followers(self, cr, uid, obj, name, args, context):
"""Search function for message_follower_ids """Search function for message_follower_ids
@ -346,6 +343,7 @@ class mail_thread(osv.AbstractModel):
""" """
if context is None: if context is None:
context = {} context = {}
thread_id = super(mail_thread, self).create(cr, uid, values, context=context) thread_id = super(mail_thread, self).create(cr, uid, values, context=context)
# automatic logging unless asked not to (mainly for various testing purpose) # automatic logging unless asked not to (mainly for various testing purpose)
@ -355,6 +353,7 @@ class mail_thread(osv.AbstractModel):
# subscribe uid unless asked not to # subscribe uid unless asked not to
if not context.get('mail_create_nosubscribe'): if not context.get('mail_create_nosubscribe'):
self.message_subscribe_users(cr, uid, [thread_id], [uid], context=context) self.message_subscribe_users(cr, uid, [thread_id], [uid], context=context)
# auto_subscribe: take values and defaults into account # auto_subscribe: take values and defaults into account
create_values = dict(values) create_values = dict(values)
for key, val in context.iteritems(): for key, val in context.iteritems():
@ -723,8 +722,8 @@ class mail_thread(osv.AbstractModel):
# Private message: should not contain any thread_id # Private message: should not contain any thread_id
if not model and thread_id: if not model and thread_id:
if assert_model: if assert_model:
assert thread_id == 0, 'Routing: posting a message without model should be with a null res_id (private message).' assert thread_id == 0, 'Routing: posting a message without model should be with a null res_id (private message), received %s.' % thread_id
_warn('posting a message without model should be with a null res_id (private message), resetting thread_id') _warn('posting a message without model should be with a null res_id (private message), received %s, resetting thread_id' % thread_id)
thread_id = 0 thread_id = 0
# Private message: should have a parent_id (only answers) # Private message: should have a parent_id (only answers)
if not model and not message_dict.get('parent_id'): if not model and not message_dict.get('parent_id'):
@ -821,6 +820,7 @@ class mail_thread(osv.AbstractModel):
:return: list of [model, thread_id, custom_values, user_id, alias] :return: list of [model, thread_id, custom_values, user_id, alias]
""" """
assert isinstance(message, Message), 'message must be an email.message.Message at this point' assert isinstance(message, Message), 'message must be an email.message.Message at this point'
mail_msg_obj = self.pool['mail.message']
fallback_model = model fallback_model = model
# Get email.message.Message variables for future processing # Get email.message.Message variables for future processing
@ -829,31 +829,54 @@ class mail_thread(osv.AbstractModel):
email_to = decode_header(message, 'To') email_to = decode_header(message, 'To')
references = decode_header(message, 'References') references = decode_header(message, 'References')
in_reply_to = decode_header(message, 'In-Reply-To') in_reply_to = decode_header(message, 'In-Reply-To')
# 1. Verify if this is a reply to an existing thread
thread_references = references or in_reply_to thread_references = references or in_reply_to
# 1. message is a reply to an existing message (exact match of message_id)
msg_references = thread_references.split()
mail_message_ids = mail_msg_obj.search(cr, uid, [('message_id', 'in', msg_references)], context=context)
if mail_message_ids:
original_msg = mail_msg_obj.browse(cr, SUPERUSER_ID, mail_message_ids[0], context=context)
model, thread_id = original_msg.model, original_msg.res_id
_logger.info(
'Routing mail from %s to %s with Message-Id %s: direct reply to msg: model: %s, thread_id: %s, custom_values: %s, uid: %s',
email_from, email_to, message_id, model, thread_id, custom_values, uid)
route = self.message_route_verify(
cr, uid, message, message_dict,
(model, thread_id, custom_values, uid, None),
update_author=True, assert_model=True, create_fallback=True, context=context)
return route and [route] or []
# 2. message is a reply to an existign thread (6.1 compatibility)
ref_match = thread_references and tools.reference_re.search(thread_references) ref_match = thread_references and tools.reference_re.search(thread_references)
if ref_match: if ref_match:
thread_id = int(ref_match.group(1)) thread_id = int(ref_match.group(1))
model = ref_match.group(2) or fallback_model model = ref_match.group(2) or fallback_model
if thread_id and model in self.pool: if thread_id and model in self.pool:
model_obj = self.pool[model] model_obj = self.pool[model]
if model_obj.exists(cr, uid, thread_id) and hasattr(model_obj, 'message_update'): compat_mail_msg_ids = mail_msg_obj.search(
_logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to model: %s, thread_id: %s, custom_values: %s, uid: %s', cr, uid, [
email_from, email_to, message_id, model, thread_id, custom_values, uid) ('message_id', '=', False),
route = self.message_route_verify(cr, uid, message, message_dict, ('model', '=', model),
(model, thread_id, custom_values, uid, None), ('res_id', '=', thread_id),
update_author=True, assert_model=True, create_fallback=True, context=context) ], context=context)
if compat_mail_msg_ids and model_obj.exists(cr, uid, thread_id) and hasattr(model_obj, 'message_update'):
_logger.info(
'Routing mail from %s to %s with Message-Id %s: direct thread reply (compat-mode) to model: %s, thread_id: %s, custom_values: %s, uid: %s',
email_from, email_to, message_id, model, thread_id, custom_values, uid)
route = self.message_route_verify(
cr, uid, message, message_dict,
(model, thread_id, custom_values, uid, None),
update_author=True, assert_model=True, create_fallback=True, context=context)
return route and [route] or [] return route and [route] or []
# 2. Reply to a private message # 2. Reply to a private message
if in_reply_to: if in_reply_to:
mail_message_ids = self.pool.get('mail.message').search(cr, uid, [ mail_message_ids = mail_msg_obj.search(cr, uid, [
('message_id', '=', in_reply_to), ('message_id', '=', in_reply_to),
'!', ('message_id', 'ilike', 'reply_to') '!', ('message_id', 'ilike', 'reply_to')
], limit=1, context=context) ], limit=1, context=context)
if mail_message_ids: if mail_message_ids:
mail_message = self.pool.get('mail.message').browse(cr, uid, mail_message_ids[0], context=context) mail_message = mail_msg_obj.browse(cr, uid, mail_message_ids[0], context=context)
_logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to a private message: %s, custom_values: %s, uid: %s', _logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to a private message: %s, custom_values: %s, uid: %s',
email_from, email_to, message_id, mail_message.id, custom_values, uid) email_from, email_to, message_id, mail_message.id, custom_values, uid)
route = self.message_route_verify(cr, uid, message, message_dict, route = self.message_route_verify(cr, uid, message, message_dict,
@ -1096,7 +1119,7 @@ class mail_thread(osv.AbstractModel):
encoding = part.get_content_charset() # None if attachment encoding = part.get_content_charset() # None if attachment
# 1) Explicit Attachments -> attachments # 1) Explicit Attachments -> attachments
if filename or part.get('content-disposition', '').strip().startswith('attachment'): if filename or part.get('content-disposition', '').strip().startswith('attachment'):
attachments.append((filename or 'attachment', part.get_payload(decode=True))) attachments.append((decode(filename) or 'attachment', part.get_payload(decode=True)))
continue continue
# 2) text/plain -> <pre/> # 2) text/plain -> <pre/>
if part.get_content_type() == 'text/plain' and (not alternative or not body): if part.get_content_type() == 'text/plain' and (not alternative or not body):
@ -1321,6 +1344,40 @@ class mail_thread(osv.AbstractModel):
mail_message_obj.write(cr, SUPERUSER_ID, message_ids, {'author_id': partner_info['partner_id']}, context=context) mail_message_obj.write(cr, SUPERUSER_ID, message_ids, {'author_id': partner_info['partner_id']}, context=context)
return result return result
def _message_preprocess_attachments(self, cr, uid, attachments, attachment_ids, attach_model, attach_res_id, context=None):
""" Preprocess attachments for mail_thread.message_post() or mail_mail.create().
:param list attachments: list of attachment tuples in the form ``(name,content)``,
where content is NOT base64 encoded
:param list attachment_ids: a list of attachment ids, not in tomany command form
:param str attach_model: the model of the attachments parent record
:param integer attach_res_id: the id of the attachments parent record
"""
Attachment = self.pool['ir.attachment']
m2m_attachment_ids = []
if attachment_ids:
filtered_attachment_ids = Attachment.search(cr, SUPERUSER_ID, [
('res_model', '=', 'mail.compose.message'),
('create_uid', '=', uid),
('id', 'in', attachment_ids)], context=context)
if filtered_attachment_ids:
Attachment.write(cr, SUPERUSER_ID, filtered_attachment_ids, {'res_model': attach_model, 'res_id': attach_res_id}, context=context)
m2m_attachment_ids += [(4, id) for id in attachment_ids]
# Handle attachments parameter, that is a dictionary of attachments
for name, content in attachments:
if isinstance(content, unicode):
content = content.encode('utf-8')
data_attach = {
'name': name,
'datas': base64.b64encode(str(content)),
'datas_fname': name,
'description': name,
'res_model': attach_model,
'res_id': attach_res_id,
}
m2m_attachment_ids.append((0, 0, data_attach))
return m2m_attachment_ids
def message_post(self, cr, uid, thread_id, body='', subject=None, type='notification', def message_post(self, cr, uid, thread_id, body='', subject=None, type='notification',
subtype=None, parent_id=False, attachments=None, context=None, subtype=None, parent_id=False, attachments=None, context=None,
content_subtype='html', **kwargs): content_subtype='html', **kwargs):
@ -1399,28 +1456,7 @@ class mail_thread(osv.AbstractModel):
# 3. Attachments # 3. Attachments
# - HACK TDE FIXME: Chatter: attachments linked to the document (not done JS-side), load the message # - HACK TDE FIXME: Chatter: attachments linked to the document (not done JS-side), load the message
attachment_ids = kwargs.pop('attachment_ids', []) or [] # because we could receive None (some old code sends None) attachment_ids = self._message_preprocess_attachments(cr, uid, attachments, kwargs.pop('attachment_ids', []), model, thread_id, context)
if attachment_ids:
filtered_attachment_ids = ir_attachment.search(cr, SUPERUSER_ID, [
('res_model', '=', 'mail.compose.message'),
('create_uid', '=', uid),
('id', 'in', attachment_ids)], context=context)
if filtered_attachment_ids:
ir_attachment.write(cr, SUPERUSER_ID, filtered_attachment_ids, {'res_model': model, 'res_id': thread_id}, context=context)
attachment_ids = [(4, id) for id in attachment_ids]
# Handle attachments parameter, that is a dictionary of attachments
for name, content in attachments:
if isinstance(content, unicode):
content = content.encode('utf-8')
data_attach = {
'name': name,
'datas': base64.b64encode(str(content)),
'datas_fname': name,
'description': name,
'res_model': model,
'res_id': thread_id,
}
attachment_ids.append((0, 0, data_attach))
# 4: mail.message.subtype # 4: mail.message.subtype
subtype_id = False subtype_id = False
@ -1508,35 +1544,33 @@ class mail_thread(osv.AbstractModel):
else: else:
self.check_access_rights(cr, uid, 'write') self.check_access_rights(cr, uid, 'write')
for record in self.browse(cr, SUPERUSER_ID, ids, context=context): existing_pids_dict = {}
existing_pids = set([f.id for f in record.message_follower_ids fol_ids = mail_followers_obj.search(cr, SUPERUSER_ID, [('res_model', '=', self._name), ('res_id', 'in', ids)])
if f.id in partner_ids]) for fol in mail_followers_obj.browse(cr, SUPERUSER_ID, fol_ids, context=context):
existing_pids_dict.setdefault(fol.res_id, set()).add(fol.partner_id.id)
# subtype_ids specified: update already subscribed partners
if subtype_ids and fol_ids:
mail_followers_obj.write(cr, SUPERUSER_ID, fol_ids, {'subtype_ids': [(6, 0, subtype_ids)]}, context=context)
# subtype_ids not specified: do not update already subscribed partner, fetch default subtypes for new partners
if subtype_ids is None:
subtype_ids = subtype_obj.search(
cr, uid, [
('default', '=', True), '|', ('res_model', '=', self._name), ('res_model', '=', False)], context=context)
for id in ids:
existing_pids = existing_pids_dict.get(id, set())
new_pids = set(partner_ids) - existing_pids new_pids = set(partner_ids) - existing_pids
# subtype_ids specified: update already subscribed partners
if subtype_ids and existing_pids:
fol_ids = mail_followers_obj.search(cr, SUPERUSER_ID, [
('res_model', '=', self._name),
('res_id', '=', record.id),
('partner_id', 'in', list(existing_pids)),
], context=context)
mail_followers_obj.write(cr, SUPERUSER_ID, fol_ids, {'subtype_ids': [(6, 0, subtype_ids)]}, context=context)
# subtype_ids not specified: do not update already subscribed partner, fetch default subtypes for new partners
elif subtype_ids is None:
subtype_ids = subtype_obj.search(cr, uid, [
('default', '=', True),
'|',
('res_model', '=', self._name),
('res_model', '=', False)
], context=context)
# subscribe new followers # subscribe new followers
for new_pid in new_pids: for new_pid in new_pids:
mail_followers_obj.create(cr, SUPERUSER_ID, { mail_followers_obj.create(
'res_model': self._name, cr, SUPERUSER_ID, {
'res_id': record.id, 'res_model': self._name,
'partner_id': new_pid, 'res_id': id,
'subtype_ids': [(6, 0, subtype_ids)], 'partner_id': new_pid,
}, context=context) 'subtype_ids': [(6, 0, subtype_ids)],
}, context=context)
return True return True
@ -1555,7 +1589,14 @@ class mail_thread(osv.AbstractModel):
self.check_access_rights(cr, uid, 'read') self.check_access_rights(cr, uid, 'read')
else: else:
self.check_access_rights(cr, uid, 'write') self.check_access_rights(cr, uid, 'write')
return self.write(cr, SUPERUSER_ID, ids, {'message_follower_ids': [(3, pid) for pid in partner_ids]}, context=context) fol_obj = self.pool['mail.followers']
fol_ids = fol_obj.search(
cr, SUPERUSER_ID, [
('res_model', '=', self._name),
('res_id', 'in', ids),
('partner_id', 'in', partner_ids)
], context=context)
return fol_obj.unlink(cr, SUPERUSER_ID, fol_ids, context=context)
def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None): def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
""" Returns the list of relational fields linking to res.users that should """ Returns the list of relational fields linking to res.users that should

View File

@ -81,6 +81,12 @@ class res_users(osv.Model):
self._create_welcome_message(cr, uid, user, context=context) self._create_welcome_message(cr, uid, user, context=context)
return user_id return user_id
def copy_data(self, *args, **kwargs):
data = super(res_users, self).copy_data(*args, **kwargs)
if data.get('alias_name'):
data['alias_name'] = data['login']
return data
def _create_welcome_message(self, cr, uid, user, context=None): def _create_welcome_message(self, cr, uid, user, context=None):
if not self.has_group(cr, uid, 'base.group_user'): if not self.has_group(cr, uid, 'base.group_user'):
return False return False

View File

@ -94,9 +94,7 @@
} }
.openerp .oe_mail .oe_msg .oe_msg_footer{ .openerp .oe_mail .oe_msg .oe_msg_footer{
margin-left: 4px; margin-left: 4px;
padding-top: 3px;
overflow: hidden; overflow: hidden;
margin-bottom: 4px;
font-size: 11px; font-size: 11px;
} }
.openerp .oe_mail .oe_msg .oe_msg_content{ .openerp .oe_mail .oe_msg .oe_msg_content{
@ -478,7 +476,7 @@
} }
.openerp .oe_mail .oe_msg_footer button.oe_attach{ .openerp .oe_mail .oe_msg_footer button.oe_attach{
width: 24px; width: 24px;
overflow: hidden; margin-bottom: 5px; /* improved margin of file attach button according bootstrap3 */
filter:none; filter:none;
} }
.openerp .oe_mail .oe_msg_footer button.oe_attach .oe_e{ .openerp .oe_mail .oe_msg_footer button.oe_attach .oe_e{
@ -634,7 +632,7 @@
margin-bottom: 4px; margin-bottom: 4px;
} }
.openerp .oe_followers .oe_invite{ .openerp .oe_followers .oe_invite{
float: right; padding-left: 5px;
} }
.openerp .oe_followers .oe_partner { .openerp .oe_followers .oe_partner {
height: 32px; height: 32px;

View File

@ -378,7 +378,7 @@ class TestMailgateway(TestMail):
frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com',
msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>', msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>',
to='erroneous@example.com>', subject='Re: news', to='erroneous@example.com>', subject='Re: news',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) extra='In-Reply-To: <1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>\n')
# Test: no group 'Re: news' created, still only 1 Frogs group # Test: no group 'Re: news' created, still only 1 Frogs group
self.assertEqual(len(frog_groups), 0, self.assertEqual(len(frog_groups), 0,
'message_process: reply on Frogs should not have created a new group with new subject') 'message_process: reply on Frogs should not have created a new group with new subject')
@ -387,16 +387,41 @@ class TestMailgateway(TestMail):
'message_process: reply on Frogs should not have created a duplicate group with old subject') 'message_process: reply on Frogs should not have created a duplicate group with old subject')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: one new message # Test: one new message
self.assertEqual(len(frog_group.message_ids), 3, 'message_process: group should contain 2 messages after reply') self.assertEqual(len(frog_group.message_ids), 3, 'message_process: group should contain 3 messages after reply')
# Test: author (and not recipient) added as follower # Test: author (and not recipient) added as follower
frog_follower_ids = set([p.id for p in frog_group.message_follower_ids]) frog_follower_ids = set([p.id for p in frog_group.message_follower_ids])
self.assertEqual(frog_follower_ids, set([p1id, p2id]), self.assertEqual(frog_follower_ids, set([p1id, p2id]),
'message_process: after reply, group should have 2 followers') 'message_process: after reply, group should have 2 followers')
# Do: incoming email with ref holding model / res_id but that does not match any message in the thread: must raise since OpenERP saas-3
self.assertRaises(AssertionError,
format_and_process,
MAIL_TEMPLATE, email_from='other5@gmail.com',
to='noone@example.com', subject='spam',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>' % frog_group.id,
msg_id='<1.1.JavaMail.new@agrolait.com>')
# There are 6.1 messages, activate compat mode
tmp_msg_id = self.mail_message.create(cr, uid, {'message_id': False, 'model': 'mail.group', 'res_id': frog_group.id})
# Do: compat mode accepts partial-matching emails
frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other5@gmail.com',
msg_id='<1.2.JavaMail.new@agrolait.com>',
to='noone@example.com>', subject='spam',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>' % frog_group.id)
self.mail_message.unlink(cr, uid, [tmp_msg_id])
# Test: no group 'Re: news' created, still only 1 Frogs group
self.assertEqual(len(frog_groups), 0,
'message_process: reply on Frogs should not have created a new group with new subject')
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
self.assertEqual(len(frog_groups), 1,
'message_process: reply on Frogs should not have created a duplicate group with old subject')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: one new message
self.assertEqual(len(frog_group.message_ids), 4, 'message_process: group should contain 4 messages after reply')
# Do: due to some issue, same email goes back into the mailgateway # Do: due to some issue, same email goes back into the mailgateway
frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com',
msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>', msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>',
subject='Re: news', extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) subject='Re: news', extra='In-Reply-To: <1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>\n')
# Test: no group 'Re: news' created, still only 1 Frogs group # Test: no group 'Re: news' created, still only 1 Frogs group
self.assertEqual(len(frog_groups), 0, self.assertEqual(len(frog_groups), 0,
'message_process: reply on Frogs should not have created a new group with new subject') 'message_process: reply on Frogs should not have created a new group with new subject')
@ -405,7 +430,7 @@ class TestMailgateway(TestMail):
'message_process: reply on Frogs should not have created a duplicate group with old subject') 'message_process: reply on Frogs should not have created a duplicate group with old subject')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: no new message # Test: no new message
self.assertEqual(len(frog_group.message_ids), 3, 'message_process: message with already existing message_id should not have been duplicated') self.assertEqual(len(frog_group.message_ids), 4, 'message_process: message with already existing message_id should not have been duplicated')
# Test: message_id is still unique # Test: message_id is still unique
msg_ids = self.mail_message.search(cr, uid, [('message_id', 'ilike', '<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>')]) msg_ids = self.mail_message.search(cr, uid, [('message_id', 'ilike', '<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>')])
self.assertEqual(len(msg_ids), 1, self.assertEqual(len(msg_ids), 1,
@ -422,7 +447,7 @@ class TestMailgateway(TestMail):
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>', format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
to='erroneous@example.com>', subject='Re: news (2)', to='erroneous@example.com>', subject='Re: news (2)',
msg_id='<1198923581.41972151344608186760.JavaMail.new1@agrolait.com>', msg_id='<1198923581.41972151344608186760.JavaMail.new1@agrolait.com>',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) extra='In-Reply-To: <1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>')
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: author is A-Raoul (only existing) # Test: author is A-Raoul (only existing)
@ -436,7 +461,7 @@ class TestMailgateway(TestMail):
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>', format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
to='erroneous@example.com>', subject='Re: news (3)', to='erroneous@example.com>', subject='Re: news (3)',
msg_id='<1198923581.41972151344608186760.JavaMail.new2@agrolait.com>', msg_id='<1198923581.41972151344608186760.JavaMail.new2@agrolait.com>',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) extra='In-Reply-To: <1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>')
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: author is Raoul (user), not A-Raoul # Test: author is Raoul (user), not A-Raoul
@ -451,7 +476,7 @@ class TestMailgateway(TestMail):
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>', format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
to='erroneous@example.com>', subject='Re: news (3)', to='erroneous@example.com>', subject='Re: news (3)',
msg_id='<1198923581.41972151344608186760.JavaMail.new3@agrolait.com>', msg_id='<1198923581.41972151344608186760.JavaMail.new3@agrolait.com>',
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) extra='In-Reply-To: <1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>')
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: author is Raoul (user), not A-Raoul # Test: author is Raoul (user), not A-Raoul

View File

@ -19,7 +19,9 @@
# #
############################################################################## ##############################################################################
import base64
import re import re
from openerp import tools from openerp import tools
from openerp import SUPERUSER_ID from openerp import SUPERUSER_ID
from openerp.osv import osv from openerp.osv import osv
@ -260,6 +262,12 @@ class mail_compose_message(osv.TransientModel):
for res_id, mail_values in all_mail_values.iteritems(): for res_id, mail_values in all_mail_values.iteritems():
if mass_mail_mode and not wizard.post: if mass_mail_mode and not wizard.post:
m2m_attachment_ids = self.pool['mail.thread']._message_preprocess_attachments(
cr, uid, mail_values.pop('attachments', []),
mail_values.pop('attachment_ids', []),
'mail.message', 0,
context=context)
mail_values['attachment_ids'] = m2m_attachment_ids
self.pool.get('mail.mail').create(cr, uid, mail_values, context=context) self.pool.get('mail.mail').create(cr, uid, mail_values, context=context)
else: else:
subtype = 'mail.mt_comment' subtype = 'mail.mt_comment'
@ -298,7 +306,12 @@ class mail_compose_message(osv.TransientModel):
if mass_mail_mode and wizard.model: if mass_mail_mode and wizard.model:
email_dict = rendered_values[res_id] email_dict = rendered_values[res_id]
mail_values['partner_ids'] += email_dict.pop('partner_ids', []) mail_values['partner_ids'] += email_dict.pop('partner_ids', [])
mail_values['attachments'] = email_dict.pop('attachments', []) # process attachments: should not be encoded before being processed by message_post / mail_mail create
attachments = []
if email_dict.get('attachments'):
for name, enc_cont in email_dict.pop('attachments'):
attachments.append((name, base64.b64decode(enc_cont)))
mail_values['attachments'] = attachments
attachment_ids = [] attachment_ids = []
for attach_id in mail_values.pop('attachment_ids'): for attach_id in mail_values.pop('attachment_ids'):
new_attach_id = self.pool.get('ir.attachment').copy(cr, uid, attach_id, {'res_model': self._name, 'res_id': wizard.id}, context=context) new_attach_id = self.pool.get('ir.attachment').copy(cr, uid, attach_id, {'res_model': self._name, 'res_id': wizard.id}, context=context)

View File

@ -1,13 +1,19 @@
.openerp .oe_kanban_view .oe_kanban_mass_mailing.oe_kanban_mass_mailing_campaign { .openerp .oe_kanban_view .oe_kanban_mass_mailing.oe_kanban_mass_mailing_campaign {
width: 540px; /* Customize to manage content */
width: 552px;
min-height: 278px !important;
/* End of customize */
} }
.openerp .oe_kanban_view .oe_kanban_mass_mailing.oe_kanban_mass_mailing_segment { .openerp .oe_kanban_view .oe_kanban_mass_mailing.oe_kanban_mass_mailing_segment {
width: 270px; /* Customize to manage content */
width: 282px;
min-height: 246px !important;
/* End of customize */
} }
.openerp .oe_kanban_view .oe_kanban_mass_mailing .oe_mail_stats { .openerp .oe_kanban_view .oe_kanban_mass_mailing .oe_mail_stats {
width: 120px; width: 122px; /* Manage space in between stats */
display: inline-block; display: inline-block;
margin: 2px 5px 0px 5px; margin: 2px 5px 0px 5px;
text-align: center; text-align: center;

View File

@ -15,9 +15,9 @@
<!--logo--> <!--logo-->
<fill color="black"/> <fill color="black"/>
<stroke color="black"/> <stroke color="black"/>
<setFont name="DejaVu Sans" size="8"/> <setFont name="DejaVuSans" size="8"/>
<drawString x="1.3cm" y="28.3cm"><xsl:value-of select="//date"/></drawString> <drawString x="1.3cm" y="28.3cm"><xsl:value-of select="//date"/></drawString>
<setFont name="DejaVu Sans Bold" size="10"/> <setFont name="DejaVuSans-Bold" size="10"/>
<drawString x="9.8cm" y="28.3cm"><xsl:value-of select="//company"/></drawString> <drawString x="9.8cm" y="28.3cm"><xsl:value-of select="//company"/></drawString>
<stroke color="#000000"/> <stroke color="#000000"/>
<lines>1.3cm 28.1cm 20cm 28.1cm</lines> <lines>1.3cm 28.1cm 20cm 28.1cm</lines>
@ -29,9 +29,9 @@
<!--logo--> <!--logo-->
<fill color="black"/> <fill color="black"/>
<stroke color="black"/> <stroke color="black"/>
<setFont name="DejaVu Sans" size="8"/> <setFont name="DejaVuSans" size="8"/>
<drawString x="1.3cm" y="28.3cm"><xsl:value-of select="//date"/></drawString> <drawString x="1.3cm" y="28.3cm"><xsl:value-of select="//date"/></drawString>
<setFont name="DejaVu Sans Bold" size="10"/> <setFont name="DejaVuSans-Bold" size="10"/>
<drawString x="9.8cm" y="28.3cm"><xsl:value-of select="//company"/></drawString> <drawString x="9.8cm" y="28.3cm"><xsl:value-of select="//company"/></drawString>
<stroke color="#000000"/> <stroke color="#000000"/>
<lines>1.3cm 28.1cm 20cm 28.1cm</lines> <lines>1.3cm 28.1cm 20cm 28.1cm</lines>

View File

@ -147,6 +147,7 @@ class note_note(osv.osv):
if result and result[0]['stage_id'][0] == current_stage_ids[0]: if result and result[0]['stage_id'][0] == current_stage_ids[0]:
dom_in = result[0]['__domain'].pop() dom_in = result[0]['__domain'].pop()
result[0]['__domain'] = domain + ['|', dom_in, dom_not_in] result[0]['__domain'] = domain + ['|', dom_in, dom_not_in]
result[0]['stage_id_count'] += nb_notes_ws
else: else:
# add the first stage column # add the first stage column
result = [{ result = [{

View File

@ -92,6 +92,7 @@
font-family: arial, sans-serif; font-family: arial, sans-serif;
font-size: 15px; font-size: 15px;
line-height: 19px; line-height: 19px;
word-wrap: break-word;
} }
.openerp .oe_form_nomargin .etherpad_readonly{ .openerp .oe_form_nomargin .etherpad_readonly{

View File

@ -126,6 +126,7 @@
background: #393939; background: #393939;
background: -moz-linear-gradient(#7b7979, #393939); background: -moz-linear-gradient(#7b7979, #393939);
background: -webkit-gradient(linear, left top, left bottom, from(#7b7979), to(#393939)); background: -webkit-gradient(linear, left top, left bottom, from(#7b7979), to(#393939));
z-index: 2; /* Customize according bootstrap3 navbar */
} }
/* a) The left part of the top-bar */ /* a) The left part of the top-bar */
@ -659,6 +660,7 @@
.point-of-sale .screen header h2 { .point-of-sale .screen header h2 {
margin-top: 0px; margin-top: 0px;
padding-top: 7px; padding-top: 7px;
font-size: 1.5em /* Customize font according bootstrap3 */
} }
.point-of-sale .screen p{ .point-of-sale .screen p{
font-size: 18px; font-size: 18px;

View File

@ -10,7 +10,7 @@
margin: -40px 0 -32px -24px; margin: -40px 0 -32px -24px;
position: relative; position: relative;
padding: 10px 15px; padding: 10px 15px;
right: -153px; right: -125px; /* improved margin according bootstrap3 */
background: #729FCF; background: #729FCF;
background-image: -webkit-gradient(linear, left top, left bottom, from(#729FCF), to(#3465A4)); background-image: -webkit-gradient(linear, left top, left bottom, from(#729FCF), to(#3465A4));

View File

@ -0,0 +1,25 @@
# Finnish translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-12-01 22:23+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Finnish <fi@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-12-02 05:23+0000\n"
"X-Generator: Launchpad (build 16856)\n"
#. module: portal_anonymous
#. openerp-web
#: code:addons/portal_anonymous/static/src/xml/portal_anonymous.xml:8
#, python-format
msgid "Login"
msgstr "Kirjautuminen"

View File

@ -71,7 +71,7 @@ openerp.portal_anonymous = function(instance) {
this.$el.find('a.login').click(function() { this.$el.find('a.login').click(function() {
var p = self.getParent(); var p = self.getParent();
var am = p.action_manager; var am = p.action_manager;
p.$el.find('.oe_leftbar, .oe_topbar').hide(); p.$el.find('.oe_leftbar, .navbar').hide(); // .oe_topbar is replaced with .navbar of bootstrap3
self.session.session_logout().done(function () { self.session.session_logout().done(function () {
am.do_action({ am.do_action({
type:'ir.actions.client', type:'ir.actions.client',

View File

@ -0,0 +1,36 @@
# Finnish translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-12-01 22:24+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Finnish <fi@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-12-02 05:23+0000\n"
"X-Generator: Launchpad (build 16856)\n"
#. module: portal_claim
#: model:ir.actions.act_window,help:portal_claim.crm_case_categ_claim0
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Click to register a new claim. \n"
" </p><p>\n"
" You can track your claims from this menu and the action we\n"
" will take.\n"
" </p>\n"
" "
msgstr ""
#. module: portal_claim
#: model:ir.actions.act_window,name:portal_claim.crm_case_categ_claim0
#: model:ir.ui.menu,name:portal_claim.portal_after_sales_claims
msgid "Claims"
msgstr "Reklamaatiot"

View File

@ -0,0 +1,548 @@
# Finnish translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-12-01 22:26+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Finnish <fi@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-12-02 05:23+0000\n"
"X-Generator: Launchpad (build 16856)\n"
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,type:0
msgid "Lead"
msgstr "Liidi"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,title:0
msgid "Title"
msgstr "Titteli"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,probability:0
msgid "Success Rate (%)"
msgstr "Onnistumistodennäköisyys (%)"
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Contact us"
msgstr "Ota yhteyttä"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_action:0
msgid "Next Action Date"
msgstr "Seuraava toimenpidepäivä"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,fax:0
msgid "Fax"
msgstr "Faksi"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,zip:0
msgid "Zip"
msgstr "Postinumero"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_unread:0
msgid "Unread Messages"
msgstr "Lukemattomia viestejä"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,company_id:0
msgid "Company"
msgstr "Yritys"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,day_open:0
msgid "Days to Open"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Thank you for your interest, we'll respond to your request shortly."
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Highest"
msgstr "Korkein"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,mobile:0
msgid "Mobile"
msgstr "Matkapuhelin"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,description:0
msgid "Notes"
msgstr "Muistiinpanot"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_ids:0
msgid "Messages"
msgstr "Viestit"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,color:0
msgid "Color Index"
msgstr "Väri-indeksi"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_latitude:0
msgid "Geo Latitude"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_name:0
msgid "Customer Name"
msgstr "Asiakkaan nimi"
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "Cancelled"
msgstr "Peruttu"
#. module: portal_crm
#: help:portal_crm.crm_contact_us,message_unread:0
msgid "If checked new messages require your attention."
msgstr "Jos valittu, uudet viestit vaativat huomiosi."
#. module: portal_crm
#: help:portal_crm.crm_contact_us,channel_id:0
msgid "Communication channel (mail, direct, phone, ...)"
msgstr "Kommunikointikanava (sähköposti, suora, puhelin,...)"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,type_id:0
msgid "Campaign"
msgstr "Kampanja"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,ref:0
msgid "Reference"
msgstr "Viite"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_action_next:0
#: field:portal_crm.crm_contact_us,title_action:0
msgid "Next Action"
msgstr "Seuraava toimenpide"
#. module: portal_crm
#: help:portal_crm.crm_contact_us,message_summary:0
msgid ""
"Holds the Chatter summary (number of messages, ...). This summary is "
"directly in html format in order to be inserted in kanban views."
msgstr ""
"Sisältää viestien yhteenvedon (viestien määrän,...). Tämä yhteenveto on "
"valmiiksi html-muodossa, jotta se voidaan viedä kanban näkymään."
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_id:0
msgid "Partner"
msgstr "Kumppani"
#. module: portal_crm
#: model:ir.actions.act_window,name:portal_crm.action_contact_us
msgid "Contact Us"
msgstr "Ota yhteyttä"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,name:0
msgid "Subject"
msgstr "Aihe"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,opt_out:0
msgid "Opt-Out"
msgstr "Jätä pois"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,priority:0
msgid "Priority"
msgstr "Tärkeys"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,state_id:0
msgid "State"
msgstr "Valtio"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_follower_ids:0
msgid "Followers"
msgstr "Seuraajat"
#. module: portal_crm
#: help:portal_crm.crm_contact_us,partner_id:0
msgid "Linked partner (optional). Usually created when converting the lead."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,payment_mode:0
msgid "Payment Mode"
msgstr "Maksutapa"
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "New"
msgstr "Uusi"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,type:0
msgid "Type"
msgstr "Tyyppi"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,email_from:0
msgid "Email"
msgstr "Sähköposti"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,channel_id:0
msgid "Channel"
msgstr "Kanava"
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Name"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Lowest"
msgstr "Alin"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,create_date:0
msgid "Creation Date"
msgstr "Luontipäivä"
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Close"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "Pending"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,type:0
msgid "Type is used to separate Leads and Opportunities"
msgstr "Tyyppiä käytetään erottamaan liidit ja mahdollisuudet toisistaan"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,categ_ids:0
msgid "Categories"
msgstr "Kategoriat"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,stage_id:0
msgid "Stage"
msgstr "Vaihe"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,user_login:0
msgid "User Login"
msgstr "Käyttäjätunnus"
#. module: portal_crm
#: help:portal_crm.crm_contact_us,opt_out:0
msgid ""
"If opt-out is checked, this contact has refused to receive emails or "
"unsubscribed to a campaign."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,contact_name:0
msgid "Contact Name"
msgstr "Yhteystiedon nimi"
#. module: portal_crm
#: model:ir.ui.menu,name:portal_crm.portal_company_contact
msgid "Contact"
msgstr "Kontakti"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_address_email:0
msgid "Partner Contact Email"
msgstr "Kumppanin yhteystieto, sähköposti"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,planned_revenue:0
msgid "Expected Revenue"
msgstr "Odotetut tulot"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,task_ids:0
msgid "Tasks"
msgstr "Tehtävät"
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Contact form"
msgstr "Yhteydenottolomake"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,company_currency:0
msgid "Currency"
msgstr "Valuutta"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,write_date:0
msgid "Update Date"
msgstr "Päivityksen ajankohta"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_deadline:0
msgid "Expected Closing"
msgstr "Odotettu päätös"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,ref2:0
msgid "Reference 2"
msgstr "Viittaus 2"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,user_email:0
msgid "User Email"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_open:0
msgid "Opened"
msgstr "Avattu"
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,state:0
msgid "In Progress"
msgstr "Kesken"
#. module: portal_crm
#: help:portal_crm.crm_contact_us,partner_name:0
msgid ""
"The name of the future partner company that will be created while converting "
"the lead into opportunity"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,planned_cost:0
msgid "Planned Costs"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,date_deadline:0
msgid "Estimate of the date on which the opportunity will be won."
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,email_cc:0
msgid ""
"These email addresses will be added to the CC field of all inbound and "
"outbound emails for this record before being sent. Separate multiple email "
"addresses with a comma"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Low"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_closed:0
#: selection:portal_crm.crm_contact_us,state:0
msgid "Closed"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_assign:0
msgid "Assignation Date"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,state:0
msgid "Status"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "Normal"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,email_cc:0
msgid "Global CC"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,street2:0
msgid "Street2"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,id:0
msgid "ID"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,phone:0
msgid "Phone"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_is_follower:0
msgid "Is a Follower"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,active:0
msgid "Active"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,user_id:0
msgid "Salesperson"
msgstr "Myyjä"
#. module: portal_crm
#: field:portal_crm.crm_contact_us,day_close:0
msgid "Days to Close"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,company_ids:0
msgid "Companies"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,message_summary:0
msgid "Summary"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,section_id:0
msgid ""
"When sending mails, the default email address is taken from the sales team."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_address_name:0
msgid "Partner Contact Name"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_longitude:0
msgid "Geo Longitude"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,date_assign:0
msgid "Last date this case was forwarded/assigned to a partner"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,email_from:0
msgid "Email address of the contact"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,city:0
msgid "City"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Submit"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,function:0
msgid "Function"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,referred:0
msgid "Referred By"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,partner_assigned_id:0
msgid "Assigned Partner"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,type:0
msgid "Opportunity"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,partner_assigned_id:0
msgid "Partner this case has been forwarded/assigned to."
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,country_id:0
msgid "Country"
msgstr ""
#. module: portal_crm
#: view:portal_crm.crm_contact_us:0
msgid "Thank you"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,state:0
msgid ""
"The Status is set to 'Draft', when a case is created. If the case is in "
"progress the Status is set to 'Open'. When the case is over, the Status is "
"set to 'Done'. If the case needs to be reviewed then the Status is set to "
"'Pending'."
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,message_ids:0
msgid "Messages and communication history"
msgstr ""
#. module: portal_crm
#: help:portal_crm.crm_contact_us,type_id:0
msgid ""
"From which campaign (seminar, marketing campaign, mass mailing, ...) did "
"this contact come from?"
msgstr ""
#. module: portal_crm
#: selection:portal_crm.crm_contact_us,priority:0
msgid "High"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,section_id:0
msgid "Sales Team"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,street:0
msgid "Street"
msgstr ""
#. module: portal_crm
#: field:portal_crm.crm_contact_us,date_action_last:0
msgid "Last Action"
msgstr ""
#. module: portal_crm
#: model:ir.model,name:portal_crm.model_portal_crm_crm_contact_us
msgid "Contact form for the portal"
msgstr ""

View File

@ -13,6 +13,7 @@
<field name="auto_delete" eval="True"/> <field name="auto_delete" eval="True"/>
<field name="report_template" ref="sale.report_sale_order"/> <field name="report_template" ref="sale.report_sale_order"/>
<field name="report_name">${(object.name or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}</field> <field name="report_name">${(object.name or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}</field>
<field name="lang">${object.partner_id.lang}</field>
<field name="body_html"><![CDATA[ <field name="body_html"><![CDATA[
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); "> <div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); ">
@ -102,6 +103,7 @@
<field name="auto_delete" eval="True"/> <field name="auto_delete" eval="True"/>
<field name="report_template" ref="account.account_invoices"/> <field name="report_template" ref="account.account_invoices"/>
<field name="report_name">Invoice_${(object.number or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}</field> <field name="report_name">Invoice_${(object.number or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}</field>
<field name="lang">${object.partner_id.lang}</field>
<field name="body_html"><![CDATA[ <field name="body_html"><![CDATA[
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); "> <div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); ">

2475
addons/product/i18n/am.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -906,6 +906,14 @@ class purchase_order_line(osv.osv):
res[line.id] = cur_obj.round(cr, uid, cur, taxes['total']) res[line.id] = cur_obj.round(cr, uid, cur, taxes['total'])
return res return res
def _get_uom_id(self, cr, uid, context=None):
try:
proxy = self.pool.get('ir.model.data')
result = proxy.get_object_reference(cr, uid, 'product', 'product_uom_unit')
return result[1]
except Exception, ex:
return False
_columns = { _columns = {
'name': fields.text('Description', required=True), 'name': fields.text('Description', required=True),
'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product Unit of Measure'), required=True), 'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product Unit of Measure'), required=True),
@ -933,6 +941,7 @@ class purchase_order_line(osv.osv):
'group_id': fields.related('procurement_ids', 'group_id', type='many2one', relation='procurement.group', string='Procurement Group'), 'group_id': fields.related('procurement_ids', 'group_id', type='many2one', relation='procurement.group', string='Procurement Group'),
} }
_defaults = { _defaults = {
'product_uom' : _get_uom_id,
'product_qty': lambda *a: 1.0, 'product_qty': lambda *a: 1.0,
'state': lambda *args: 'draft', 'state': lambda *args: 'draft',
'invoiced': lambda *a: 0, 'invoiced': lambda *a: 0,
@ -953,8 +962,11 @@ class purchase_order_line(osv.osv):
""" """
onchange handler of product_uom. onchange handler of product_uom.
""" """
if context is None:
context = {}
if not uom_id: if not uom_id:
return {'value': {'price_unit': price_unit or 0.0, 'name': name or '', 'product_uom' : uom_id or False}} return {'value': {'price_unit': price_unit or 0.0, 'name': name or '', 'product_uom' : uom_id or False}}
context = dict(context, purchase_uom_check=True)
return self.onchange_product_id(cr, uid, ids, pricelist_id, product_id, qty, uom_id, return self.onchange_product_id(cr, uid, ids, pricelist_id, product_id, qty, uom_id,
partner_id, date_order=date_order, fiscal_position_id=fiscal_position_id, date_planned=date_planned, partner_id, date_order=date_order, fiscal_position_id=fiscal_position_id, date_planned=date_planned,
name=name, price_unit=price_unit, state=state, context=context) name=name, price_unit=price_unit, state=state, context=context)
@ -1034,7 +1046,7 @@ class purchase_order_line(osv.osv):
uom_id = product_uom_po_id uom_id = product_uom_po_id
if product.uom_id.category_id.id != product_uom.browse(cr, uid, uom_id, context=context).category_id.id: if product.uom_id.category_id.id != product_uom.browse(cr, uid, uom_id, context=context).category_id.id:
if self._check_product_uom_group(cr, uid, context=context): if context.get('purchase_uom_check') and self._check_product_uom_group(cr, uid, context=context):
res['warning'] = {'title': _('Warning!'), 'message': _('Selected Unit of Measure does not belong to the same category as the product Unit of Measure.')} res['warning'] = {'title': _('Warning!'), 'message': _('Selected Unit of Measure does not belong to the same category as the product Unit of Measure.')}
uom_id = product_uom_po_id uom_id = product_uom_po_id
@ -1358,8 +1370,8 @@ class account_invoice(osv.Model):
else: else:
user_id = uid user_id = uid
po_ids = purchase_order_obj.search(cr, user_id, [('invoice_ids', 'in', ids)], context=context) po_ids = purchase_order_obj.search(cr, user_id, [('invoice_ids', 'in', ids)], context=context)
if po_ids: for po_id in po_ids:
purchase_order_obj.message_post(cr, user_id, po_ids, body=_("Invoice paid"), context=context) purchase_order_obj.message_post(cr, user_id, po_id, body=_("Invoice paid"), context=context)
return res return res
class account_invoice_line(osv.Model): class account_invoice_line(osv.Model):

View File

@ -200,7 +200,7 @@
<field name="date_order"/> <field name="date_order"/>
<field name="origin" attr="{'invisible': [('origin','=',False)]}"/> <field name="origin" attr="{'invisible': [('origin','=',False)]}"/>
<field name="company_id" groups="base.group_multi_company" widget="selection"/> <field name="company_id" groups="base.group_multi_company" widget="selection"/>
<field name="picking_type_id" on_change="onchange_picking_type_id(picking_type_id, context)" domain="[('code','=','incoming')]" widget="selection" context="{'special_shortened_wh_name': True}"/> <field name="picking_type_id" on_change="onchange_picking_type_id(picking_type_id, context)" domain="[('code','=','incoming')]" widget="selection" context="{'special_shortened_wh_name': True}" groups="stock.group_locations"/>
<field name="related_location_id" invisible="1"/> <field name="related_location_id" invisible="1"/>
<field name="dest_address_id" string="Customer Address" on_change="onchange_dest_address_id(dest_address_id)" <field name="dest_address_id" string="Customer Address" on_change="onchange_dest_address_id(dest_address_id)"
attrs="{'invisible':['|', ('picking_type_id','=',False), ('related_location_id','!=', False)], attrs="{'invisible':['|', ('picking_type_id','=',False), ('related_location_id','!=', False)],

View File

@ -0,0 +1,33 @@
# Spanish (Peru) translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2013-12-10 17:49+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish (Peru) <es_PE@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: purchase_analytic_plans
#: field:purchase.order.line,analytics_id:0
msgid "Analytic Distribution"
msgstr ""
#. module: purchase_analytic_plans
#: model:ir.model,name:purchase_analytic_plans.model_purchase_order_line
msgid "Purchase Order Line"
msgstr ""
#. module: purchase_analytic_plans
#: model:ir.model,name:purchase_analytic_plans.model_purchase_order
msgid "Purchase Order"
msgstr ""

View File

@ -0,0 +1,49 @@
# Spanish (Peru) translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2013-12-10 18:09+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish (Peru) <es_PE@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: purchase_double_validation
#: model:ir.model,name:purchase_double_validation.model_purchase_config_settings
msgid "purchase.config.settings"
msgstr ""
#. module: purchase_double_validation
#: view:purchase.order:0
msgid "Purchase orders which are not approved yet."
msgstr ""
#. module: purchase_double_validation
#: field:purchase.config.settings,limit_amount:0
msgid "limit to require a second approval"
msgstr ""
#. module: purchase_double_validation
#: view:board.board:0
#: model:ir.actions.act_window,name:purchase_double_validation.purchase_waiting
msgid "Purchase Orders Waiting Approval"
msgstr ""
#. module: purchase_double_validation
#: view:purchase.order:0
msgid "To Approve"
msgstr ""
#. module: purchase_double_validation
#: help:purchase.config.settings,limit_amount:0
msgid "Amount after which validation of purchase is required."
msgstr ""

2139
addons/sale/i18n/es_PE.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-11-19 12:50+0000\n" "PO-Revision-Date: 2013-12-09 15:46+0000\n"
"Last-Translator: krnkris <Unknown>\n" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-11-20 05:24+0000\n" "X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16831)\n" "X-Generator: Launchpad (build 16869)\n"
#. module: sale #. module: sale
#: model:res.groups,name:sale.group_analytic_accounting #: model:res.groups,name:sale.group_analytic_accounting
@ -116,7 +116,7 @@ msgstr "Beszerzési módszer"
#. module: sale #. module: sale
#: help:sale.order,date_confirm:0 #: help:sale.order,date_confirm:0
msgid "Date on which sales order is confirmed." msgid "Date on which sales order is confirmed."
msgstr "Az értékesítési megbízás megerősítésének dátuma." msgstr "A vevői megrendelés megerősítésének dátuma."
#. module: sale #. module: sale
#: field:account.config.settings,module_sale_analytic_plans:0 #: field:account.config.settings,module_sale_analytic_plans:0
@ -132,7 +132,8 @@ msgstr "Március"
#: code:addons/sale/sale.py:565 #: code:addons/sale/sale.py:565
#, python-format #, python-format
msgid "First cancel all invoices attached to this sales order." msgid "First cancel all invoices attached to this sales order."
msgstr "Először vonja vissza a megrendelés összes számla mellékletét." msgstr ""
"Először vonja vissza a vevői megrendeléshez kötött összes számla mellékletet."
#. module: sale #. module: sale
#: view:sale.order:0 #: view:sale.order:0
@ -254,12 +255,13 @@ msgstr "Az előleg mennyiség értékének pozitívnak kell lennie"
#. module: sale #. module: sale
#: help:sale.config.settings,group_discount_per_so_line:0 #: help:sale.config.settings,group_discount_per_so_line:0
msgid "Allows you to apply some discount per sales order line." msgid "Allows you to apply some discount per sales order line."
msgstr "Lehetővé teszi a megrendelés soraihoz árengedmény alkalmazását" msgstr ""
"Lehetővé teszi a megrendelés egyes soraihoz árengedmény alkalmazását."
#. module: sale #. module: sale
#: view:sale.order.line:0 #: view:sale.order.line:0
msgid "Sales Order Lines that are in 'done' state" msgid "Sales Order Lines that are in 'done' state"
msgstr "'Elvégzett' állapotú megrendelési sorok" msgstr "'Elvégzett' állapotú vevői megrendelési sorok"
#. module: sale #. module: sale
#: selection:sale.order.line,type:0 #: selection:sale.order.line,type:0
@ -349,7 +351,8 @@ msgstr "Érvénytelenített"
#. module: sale #. module: sale
#: view:sale.order.line:0 #: view:sale.order.line:0
msgid "Sales Order Lines related to a Sales Order of mine" msgid "Sales Order Lines related to a Sales Order of mine"
msgstr "Megrendelés sorok melyek összefüggenk az én megrendeléseimmel" msgstr ""
"Megrendelés sorok melyek összefüggenek az én vásárlói megrendeléseimmel"
#. module: sale #. module: sale
#: selection:sale.order,state:0 #: selection:sale.order,state:0
@ -398,7 +401,7 @@ msgstr "Számlázási cím"
#. module: sale #. module: sale
#: help:sale.order,create_date:0 #: help:sale.order,create_date:0
msgid "Date on which sales order is created." msgid "Date on which sales order is created."
msgstr "Az értékesítési megbízás létrehozásának dátuma." msgstr "Vásárlói megrendelés létrehozásának dátuma."
#. module: sale #. module: sale
#: view:res.partner:0 #: view:res.partner:0
@ -451,7 +454,7 @@ msgid ""
"The 'Waiting Schedule' status is set when the invoice is confirmed " "The 'Waiting Schedule' status is set when the invoice is confirmed "
" but waiting for the scheduler to run on the order date." " but waiting for the scheduler to run on the order date."
msgstr "" msgstr ""
"Az árajánlatkérés vagy a megrendelés állapotát adja. \n" "Az árajánlatkérés vagy a vásárlói megrendelés állapotát adja. \n"
"A kizárás állapot automatikusan beállított egy visszavonás művelet " "A kizárás állapot automatikusan beállított egy visszavonás művelet "
"elvégzésekkor egy számla érvényesítésekor (Számla kizárás) " "elvégzésekkor egy számla érvényesítésekor (Számla kizárás) "
"vagy a kiválogatási lista műveletekben (Szállítási kizárás).\n" "vagy a kiválogatási lista műveletekben (Szállítási kizárás).\n"
@ -482,7 +485,8 @@ msgstr ""
#: help:sale.order.line,sequence:0 #: help:sale.order.line,sequence:0
msgid "Gives the sequence order when displaying a list of sales order lines." msgid "Gives the sequence order when displaying a list of sales order lines."
msgstr "" msgstr ""
"A megrendelés sorrendet adja ha a megrendelési sorok listáját jelzi ki." "A vásárlói megrendelés sorrendet adja ha a megrendelési sorok listáját jelzi "
"ki."
#. module: sale #. module: sale
#: view:sale.report:0 #: view:sale.report:0
@ -501,8 +505,8 @@ msgstr "Fax:"
msgid "" msgid ""
"In order to delete a confirmed sales order, you must cancel it before !" "In order to delete a confirmed sales order, you must cancel it before !"
msgstr "" msgstr ""
"Ahhoz, hogy törölni tudjon egy megerősített megrendelést, először vissza " "Ahhoz, hogy törölni tudjon egy megerősített vsárlói megrendelést, először "
"kell vonnia azt !" "vissza kell vonnia azt !"
#. module: sale #. module: sale
#: view:sale.order:0 #: view:sale.order:0
@ -538,7 +542,7 @@ msgstr "Vevői megrendelés"
#. module: sale #. module: sale
#: model:res.groups,name:sale.group_invoice_so_lines #: model:res.groups,name:sale.group_invoice_so_lines
msgid "Enable Invoicing Sales order lines" msgid "Enable Invoicing Sales order lines"
msgstr "Megrendelés sorai számlázásának engedélyezése" msgstr "Vásárlói megrendelés sorai számlázásának engedélyezése"
#. module: sale #. module: sale
#: model:ir.model,name:sale.model_sale_order_line #: model:ir.model,name:sale.model_sale_order_line
@ -573,7 +577,7 @@ msgstr "Egy alkalmazottnak különböző funkciója lehet egy szerződésen bel
#. module: sale #. module: sale
#: selection:sale.advance.payment.inv,advance_payment_method:0 #: selection:sale.advance.payment.inv,advance_payment_method:0
msgid "Invoice the whole sales order" msgid "Invoice the whole sales order"
msgstr "Számlázza ki a teljes megrendelést" msgstr "Számlázza ki a teljes vásárlói megrendelést"
#. module: sale #. module: sale
#: field:sale.shop,payment_default_id:0 #: field:sale.shop,payment_default_id:0
@ -624,7 +628,7 @@ msgstr "Különböző mértékegységek használatának engedélyezése"
#. module: sale #. module: sale
#: model:mail.message.subtype,name:sale.mt_order_confirmed #: model:mail.message.subtype,name:sale.mt_order_confirmed
msgid "Sales Order Confirmed" msgid "Sales Order Confirmed"
msgstr "Megrendelés visszaigazolva" msgstr "Vásárlói megrendelés visszaigazolva"
#. module: sale #. module: sale
#: view:sale.order:0 #: view:sale.order:0
@ -675,7 +679,7 @@ msgstr "Összérték"
msgid "Allows you to specify an analytic account on sales orders." msgid "Allows you to specify an analytic account on sales orders."
msgstr "" msgstr ""
"Lehetővé teszi az analitikus/elemző könyvelés gyűjtőkód meghatározását a " "Lehetővé teszi az analitikus/elemző könyvelés gyűjtőkód meghatározását a "
"megrendeléseken." "vevői megrendeléseken."
#. module: sale #. module: sale
#: help:sale.config.settings,module_sale_journal:0 #: help:sale.config.settings,module_sale_journal:0
@ -743,7 +747,7 @@ msgstr "Számlázandó"
#. module: sale #. module: sale
#: help:sale.order,partner_invoice_id:0 #: help:sale.order,partner_invoice_id:0
msgid "Invoice address for current sales order." msgid "Invoice address for current sales order."
msgstr "Az aktuális megrendelés számlázási címe." msgstr "Az aktuális vevői megrendelés számlázási címe."
#. module: sale #. module: sale
#: selection:sale.order,invoice_quantity:0 #: selection:sale.order,invoice_quantity:0
@ -887,7 +891,7 @@ msgstr "Megrendelés dátuma"
#. module: sale #. module: sale
#: view:sale.order:0 #: view:sale.order:0
msgid "Sales Order done" msgid "Sales Order done"
msgstr "Megrendelés elvégezve" msgstr "Vevői megrendelés elvégezve"
#. module: sale #. module: sale
#: code:addons/sale/sale.py:364 #: code:addons/sale/sale.py:364
@ -928,7 +932,7 @@ msgstr "Számla létrehozása és megtekintése"
#. module: sale #. module: sale
#: view:sale.order.line:0 #: view:sale.order.line:0
msgid "Sales order lines done" msgid "Sales order lines done"
msgstr "Megrendelési tételek elvégezve" msgstr "Vevői megrendelési tételek elvégezve"
#. module: sale #. module: sale
#: field:sale.make.invoice,grouped:0 #: field:sale.make.invoice,grouped:0
@ -965,11 +969,10 @@ msgid ""
"1.The state of this sales order line is either \"draft\" or \"cancel\"!\n" "1.The state of this sales order line is either \"draft\" or \"cancel\"!\n"
"2.The Sales Order Line is Invoiced!" "2.The Sales Order Line is Invoiced!"
msgstr "" msgstr ""
"Nem készíthet számlát ehhez az értékesítési megbízási tételhez, az alábbi " "Nem készíthet számlát ehhez a vásárlói megrendelés tételhez, az alábbi okok "
"okok egyike miatt:\n" "egyike miatt:\n"
"1. Az értékesítési megbízás tételének állapota: \"Tervezet\" vagy " "1. A vevői megrendelés tételének állapota: \"Tervezet\" vagy \"Mégsem\".\n"
"\"Mégsem\".\n" "2. A vevői megrendelési tétel már kiszámlázásra került."
"2. Az értékesítési megbízás tétel már kiszámlázásra került."
#. module: sale #. module: sale
#: view:sale.order.line.make.invoice:0 #: view:sale.order.line.make.invoice:0
@ -1048,7 +1051,7 @@ msgstr "Üzlet neve"
#. module: sale #. module: sale
#: view:sale.order:0 #: view:sale.order:0
msgid "My Sales Orders" msgid "My Sales Orders"
msgstr "Az én megrendeléseim" msgstr "Az én vevői megrendeléseim"
#. module: sale #. module: sale
#: report:sale.order:0 #: report:sale.order:0
@ -1085,7 +1088,7 @@ msgstr "Értékesítési menü megnyitása"
#: code:addons/sale/sale.py:598 #: code:addons/sale/sale.py:598
#, python-format #, python-format
msgid "You cannot confirm a sales order which has no line." msgid "You cannot confirm a sales order which has no line."
msgstr "Nem tud megerősíteni tétel nélküli értékesítési megbízást" msgstr "Nem tud megerősíteni tétel nélküli vevői megrendelést"
#. module: sale #. module: sale
#: selection:sale.report,state:0 #: selection:sale.report,state:0
@ -1215,7 +1218,7 @@ msgstr ""
"<p class=\"oe_view_nocontent_create\">\n" "<p class=\"oe_view_nocontent_create\">\n"
" Kattintson új értékesítési hely meghatározáshoz.\n" " Kattintson új értékesítési hely meghatározáshoz.\n"
" </p><p>\n" " </p><p>\n"
" Mindegyik árajánlatot vagy értékesítési megbízást össze kell " " Mindegyik árajánlatot vagy vevői megrendelést össze kell "
"kötni egy értékesítési helyhez. Az\n" "kötni egy értékesítési helyhez. Az\n"
" értékesítési hely meghatároz egy raktárhelyet ahonnan a " " értékesítési hely meghatároz egy raktárhelyet ahonnan a "
"termék\n" "termék\n"
@ -1247,13 +1250,13 @@ msgid ""
"Sales Order Lines that are confirmed, done or in exception state and haven't " "Sales Order Lines that are confirmed, done or in exception state and haven't "
"yet been invoiced" "yet been invoiced"
msgstr "" msgstr ""
"Értékesítési megbízási tételek, melyek megerősítettek, elvégzettek vagy " "Vásárlói megrendelési tételek, melyek megerősítettek, elvégzettek vagy "
"kifogásolt állapotúak és még nincs számlázva" "kifogásolt állapotúak és még nincs számlázva"
#. module: sale #. module: sale
#: model:ir.model,name:sale.model_sale_report #: model:ir.model,name:sale.model_sale_report
msgid "Sales Orders Statistics" msgid "Sales Orders Statistics"
msgstr "Értékesítési megbízási statisztikák" msgstr "Vevői megrendelési statisztikák"
#. module: sale #. module: sale
#: field:sale.order,date_order:0 #: field:sale.order,date_order:0
@ -1310,10 +1313,10 @@ msgid ""
"is 'Shipping and Manual in Progress'. The invoice is created automatically " "is 'Shipping and Manual in Progress'. The invoice is created automatically "
"if the shipping policy is 'Payment before Delivery'." "if the shipping policy is 'Payment before Delivery'."
msgstr "" msgstr ""
"Az értékesítő manuálisan létrehoz egy számlát, hogy ha az értékesítési " "Az értékesítő kézzel hoz létre egy számlát, hogy ha a vevői megrendelés "
"megbízás szállítási szabálya: \"Szállítás és manuális vezérléssel " "szállítási szabálya: \"Szállítás és manuális vezérléssel folyamatban\". A "
"folyamatban\". A számla automatikusan létrejön , ha a szállítási szabály: " "számla automatikusan létrejön , ha a szállítási szabály: \"Fizetés "
"\"Fizetés kiszállítás előtt\"." "kiszállítás előtt\"."
#. module: sale #. module: sale
#: model:ir.model,name:sale.model_sale_shop #: model:ir.model,name:sale.model_sale_shop
@ -1351,12 +1354,12 @@ msgstr "Január"
#. module: sale #. module: sale
#: field:sale.config.settings,group_discount_per_so_line:0 #: field:sale.config.settings,group_discount_per_so_line:0
msgid "Allow setting a discount on the sales order lines" msgid "Allow setting a discount on the sales order lines"
msgstr "Engedélyezi a megrendelés tételeire az árengedmény beállítását" msgstr "Engedélyezi a vevői megrendelés tételeire az árengedmény beállítását"
#. module: sale #. module: sale
#: model:ir.actions.act_window,name:sale.action_orders_in_progress #: model:ir.actions.act_window,name:sale.action_orders_in_progress
msgid "Sales Order in Progress" msgid "Sales Order in Progress"
msgstr "Értékesítési megbízás folyamatban" msgstr "Folyamatban lévő vevői megrendelés"
#. module: sale #. module: sale
#: view:sale.order.line.make.invoice:0 #: view:sale.order.line.make.invoice:0
@ -1366,9 +1369,9 @@ msgid ""
" or a fixed price (for advances) directly from the sales " " or a fixed price (for advances) directly from the sales "
"order form if you prefer." "order form if you prefer."
msgstr "" msgstr ""
"Ezen a megrendelésen minden tétel sor számlázva lesz. Lehetősége van a " "Ezen a vásárlói megrendelésen minden tétel sor számlázva lesz. Lehetősége "
"megrendelés egy bizonyos százalékának számlázására\n" "van a megrendelés egy bizonyos százalékának számlázására\n"
" vagy fix ár (az előlegekre), ah kívánja direkt a " " vagy fix ár (az előlegekre), ha kívánja direkt a "
"megrendelés űrlapról." "megrendelés űrlapról."
#. module: sale #. module: sale
@ -1394,7 +1397,7 @@ msgstr "Paypal Url"
#. module: sale #. module: sale
#: help:sale.order,project_id:0 #: help:sale.order,project_id:0
msgid "The analytic account related to a sales order." msgid "The analytic account related to a sales order."
msgstr "Az értékesítési megbízáshoz kapcsolódó analitikus/elemző számla." msgstr "A vevői megrendeléshez kapcsolódó analitikus/elemző számla."
#. module: sale #. module: sale
#: view:sale.order:0 #: view:sale.order:0
@ -1435,7 +1438,7 @@ msgstr ""
#: help:sale.order,origin:0 #: help:sale.order,origin:0
msgid "Reference of the document that generated this sales order request." msgid "Reference of the document that generated this sales order request."
msgstr "" msgstr ""
"A dokumentum hivatkozása, amely létrehozta ezt az értékesítési megbízási " "A dokumentum hivatkozása, amely létrehozta ezt a vásárlói megrendelési "
"igényt." "igényt."
#. module: sale #. module: sale
@ -1478,7 +1481,7 @@ msgstr "Hiba figyelmen kívül hagyása"
#. module: sale #. module: sale
#: help:sale.order,partner_shipping_id:0 #: help:sale.order,partner_shipping_id:0
msgid "Delivery address for current sales order." msgid "Delivery address for current sales order."
msgstr "Szállítási cím a jelenlegi megrendeléshez." msgstr "Szállítási cím a jelenlegi vásárlói megrendeléshez."
#. module: sale #. module: sale
#: field:sale.config.settings,module_sale_margin:0 #: field:sale.config.settings,module_sale_margin:0
@ -1492,9 +1495,9 @@ msgid ""
"The same sales order may have been invoiced in several times (by line for " "The same sales order may have been invoiced in several times (by line for "
"example)." "example)."
msgstr "" msgstr ""
"Ez egy olyan számlalista, amely ehhez az értékesítési megbízáshoz jött " "Ez egy olyan számlalista, amely ehhez a vevői megrendeléshez jött létre. "
"létre. Ugyanaz az értékesítési megbízás több alkalommal is számlázásra " "Ugyanaz a vevői megrendelés több alkalommal is számlázásra kerülhetett "
"kerülhetett (például tételek alapján)." "(például tételek alapján)."
#. module: sale #. module: sale
#: report:sale.order:0 #: report:sale.order:0
@ -1606,7 +1609,7 @@ msgstr "Számla"
#. module: sale #. module: sale
#: view:sale.order.line:0 #: view:sale.order.line:0
msgid "My Sales Order Lines" msgid "My Sales Order Lines"
msgstr "Az én értékesítési megbízásam tételei" msgstr "Az én vevői megrendekléseim tételei"
#. module: sale #. module: sale
#: model:process.transition.action,name:sale.process_transition_action_cancel0 #: model:process.transition.action,name:sale.process_transition_action_cancel0
@ -1630,7 +1633,7 @@ msgstr "Nincs árlista ! : "
#. module: sale #. module: sale
#: view:sale.order:0 #: view:sale.order:0
msgid "Sales Order " msgid "Sales Order "
msgstr "Megrendelés " msgstr "Vásárlói megrendelés "
#. module: sale #. module: sale
#: model:mail.message.subtype,description:sale.mt_order_sent #: model:mail.message.subtype,description:sale.mt_order_sent
@ -1668,8 +1671,8 @@ msgid ""
" " " "
msgstr "" msgstr ""
"<p>\n" "<p>\n"
" Ez itt a lista a már kiszámlázott megrendelési tételekről. " " Ez itt a lista a már kiszámlázott vevői megrendelési "
"Tud\n" "tételekről. Tud\n"
" számlázni megrendelési részt, a megrendelés tételeivel. " " számlázni megrendelési részt, a megrendelés tételeivel. "
"Nincs\n" "Nincs\n"
" szüksége erre a listára, ha kiszállítási Kiszolgáltatási " " szüksége erre a listára, ha kiszállítási Kiszolgáltatási "
@ -1695,7 +1698,7 @@ msgstr "Nem csoportosíthat különböző devizákon értékesítést egy partne
#. module: sale #. module: sale
#: view:sale.advance.payment.inv:0 #: view:sale.advance.payment.inv:0
msgid "Invoice Sales Order" msgid "Invoice Sales Order"
msgstr "Megrendelés számlázás" msgstr "Vevői megrendelés számlázás"
#. module: sale #. module: sale
#: help:sale.order,invoice_quantity:0 #: help:sale.order,invoice_quantity:0
@ -1705,8 +1708,8 @@ msgid ""
"if you want your invoice based on ordered " "if you want your invoice based on ordered "
msgstr "" msgstr ""
"A megrendelés automatikusan létre lesz hozva a díjbekérő / előleg (Számla " "A megrendelés automatikusan létre lesz hozva a díjbekérő / előleg (Számla "
"terv) alapján. Választhatja, ha " "terv) alapján. Ki kell "
"akarja a számlázást a megrendelés alapján " "választania, ha a számlázást a megrendelés alapján kívánja "
#. module: sale #. module: sale
#: field:sale.config.settings,module_account_analytic_analysis:0 #: field:sale.config.settings,module_account_analytic_analysis:0
@ -1998,12 +2001,12 @@ msgid ""
"Before delivery: A draft invoice is created from the sales order and must be " "Before delivery: A draft invoice is created from the sales order and must be "
"paid before the products can be delivered." "paid before the products can be delivered."
msgstr "" msgstr ""
"Igényléskori: Egy terv/előleg számla hozható létre a megrendelésből, ha " "Igényléskori: Egy terv/előleg számla hozható létre a vevői megrendelésből, "
"szükséges. \n" "ha szükséges. \n"
"A kézbesítési bizonylatkor: Egy terv/előleg számla hozható létre a " "A kézbesítési bizonylatkor: Egy terv/előleg számla hozható létre a "
"kézbesítési bizonylatra ha az árut szállításba adták. \n" "kézbesítési bizonylatra, ha az árut szállításba adták. \n"
"Szállítás előtt: Egy terv/előleg számla hozható létre a megrendelésből és ki " "Szállítás előtt: Egy terv/előleg számla hozható létre a vevői megrendelésből "
"kell egyenlíteni mielőtt az árut kiszállítanák." "és ki kell egyenlíteni mielőtt az árut kiszállítanák."
#. module: sale #. module: sale
#: model:ir.actions.act_window,help:sale.action_order_report_all #: model:ir.actions.act_window,help:sale.action_order_report_all
@ -2014,8 +2017,8 @@ msgid ""
"having invoiced yet. If you want to analyse your turnover, you should use " "having invoiced yet. If you want to analyse your turnover, you should use "
"the Invoice Analysis report in the Accounting application." "the Invoice Analysis report in the Accounting application."
msgstr "" msgstr ""
"Ez a jelentés elemzést készít az árajánlatairól és az értékesítési " "Ez a jelentés elemzést készít az árajánlatairól és a vásárlói "
"megbízásairól. Az elemzés kimutatja az értékesítési bevételeit, és " "megrendelésekről. Az elemzés kimutatja az értékesítés bevételeit, és "
"szétosztja különböző kritériumok alapján (értékesítő, partner, termék stb.). " "szétosztja különböző kritériumok alapján (értékesítő, partner, termék stb.). "
"Használja ezt a jelentést, ha elemzést szeretne készíteni a még ki nem " "Használja ezt a jelentést, ha elemzést szeretne készíteni a még ki nem "
"számlázott értékesítéseiről. Ha a forgalmát szeretné elemezni, akkor " "számlázott értékesítéseiről. Ha a forgalmát szeretné elemezni, akkor "
@ -2064,10 +2067,10 @@ msgstr ""
" a megrendelés visszaigazolásában, a szállításban,\n" " a megrendelés visszaigazolásában, a szállításban,\n"
" a számlázásban és az áru ellenértékének beszedésében.\n" " a számlázásban és az áru ellenértékének beszedésében.\n"
" </p><p>\n" " </p><p>\n"
" A társadalmi jellemzők segítenek az értékesítések " " A társadalmi jellemzők segítenek a vevői megrendelések "
"megbeszélésének szervezésében,\n" "megbeszélésének szervezésében,\n"
" és lehetővé teszik a megrendeléseken a vásárlói fejlődésének " " és lehetővé teszik a megrendeléseken a vásárlói "
"követését.\n" "megrendelések fejlődésénak követését.\n"
" </p>\n" " </p>\n"
" " " "
@ -2138,7 +2141,7 @@ msgid ""
" " " "
msgstr "" msgstr ""
"<p class=\"oe_view_nocontent_create\">\n" "<p class=\"oe_view_nocontent_create\">\n"
" Kattintson megrendelésre átalakítható árajánlat " " Kattintson vásárlói megrendelésre átalakítható árajánlat "
"létrehozásához.\n" "létrehozásához.\n"
" </p><p>\n" " </p><p>\n"
" OpenERP segít a hatékony értékesítési folyamat hatékony " " OpenERP segít a hatékony értékesítési folyamat hatékony "
@ -2237,8 +2240,8 @@ msgid ""
" " " "
msgstr "" msgstr ""
"<p class=\"oe_view_nocontent_create\">\n" "<p class=\"oe_view_nocontent_create\">\n"
" Kattintson ehhez a vevőhöz tartozó árajánlat vagy " " Kattintson ehhez a vevőhöz tartozó árajánlat vagy vevői "
"értékesítési megbízás létrehozásához.\n" "megrendelés létrehozásához.\n"
" </p><p>\n" " </p><p>\n"
" OpenERP segít az értékesítési folyamat hatékony " " OpenERP segít az értékesítési folyamat hatékony "
"kezelésében:\n" "kezelésében:\n"
@ -2266,7 +2269,7 @@ msgstr "Üzenetek és kommunikáció történet"
#: view:sale.order:0 #: view:sale.order:0
#: view:sale.order.line:0 #: view:sale.order.line:0
msgid "Search Sales Order" msgid "Search Sales Order"
msgstr "Értékesítési megbízás keresése" msgstr "Vásárlói megrendelés keresése"
#. module: sale #. module: sale
#: report:sale.order:0 #: report:sale.order:0
@ -2294,12 +2297,13 @@ msgstr "A megrendelés megrendelési hónapja"
#. module: sale #. module: sale
#: model:process.transition,name:sale.process_transition_saleinvoice0 #: model:process.transition,name:sale.process_transition_saleinvoice0
msgid "From a sales order" msgid "From a sales order"
msgstr "Értékesítési megbízásból" msgstr "Vevői megrendelésből"
#. module: sale #. module: sale
#: view:sale.order.line:0 #: view:sale.order.line:0
msgid "Confirmed sales order lines, not yet delivered" msgid "Confirmed sales order lines, not yet delivered"
msgstr "Megerősített megrendelési tételek, amiket még nem szállítottak ki" msgstr ""
"Megerősített vásárlói megrendelési tételek, melyeket még nem szállítottak ki"
#. module: sale #. module: sale
#: model:process.transition,note:sale.process_transition_saleinvoice0 #: model:process.transition,note:sale.process_transition_saleinvoice0
@ -2309,10 +2313,10 @@ msgid ""
"generates an invoice or a delivery order as soon as it is confirmed by the " "generates an invoice or a delivery order as soon as it is confirmed by the "
"salesman." "salesman."
msgstr "" msgstr ""
"Az értékesítési megbízás számlázási beállításaitól függően a számla " "A vevői megrendelés számlázási beállításaitól függően a számla alapulhat a "
"alapulhat a kiszállítási vagy a megrendelési mennyiségen. A rendszer az " "kiszállítási vagy a megrendelési mennyiségen. A rendszer a vevői "
"értékesítési megbízásból létrehozhat egy számlát vagy egy kiszállítási " "megrendelésből létrehozhat egy számlát vagy egy kiszállítási megbízást, "
"megbízást, amint az értékesítő megerősíti azt." "amint az értékesítő megerősíti azt."
#. module: sale #. module: sale
#: view:sale.order:0 #: view:sale.order:0
@ -2346,7 +2350,7 @@ msgstr "Számlázásra kész megrendelés"
#. module: sale #. module: sale
#: field:sale.config.settings,group_invoice_so_lines:0 #: field:sale.config.settings,group_invoice_so_lines:0
msgid "Generate invoices based on the sales order lines" msgid "Generate invoices based on the sales order lines"
msgstr "Számla létrehozása a megrendelési téetelsorokra" msgstr "Számla létrehozása a vevői megrendelési téetelsorokra"
#. module: sale #. module: sale
#: view:sale.advance.payment.inv:0 #: view:sale.advance.payment.inv:0
@ -2360,12 +2364,12 @@ msgstr "vagy"
#: view:sale.order:0 #: view:sale.order:0
#: view:sale.order.line:0 #: view:sale.order.line:0
msgid "Sales Order Lines" msgid "Sales Order Lines"
msgstr "Értékesítési megbízási tételek" msgstr "Vevői megrendelési tételek"
#. module: sale #. module: sale
#: help:sale.order,pricelist_id:0 #: help:sale.order,pricelist_id:0
msgid "Pricelist for current sales order." msgid "Pricelist for current sales order."
msgstr "A jelenlegi értékesítési megbízás árlistája." msgstr "A jelenlegi vevői megrendelés árlistája."
#. module: sale #. module: sale
#: report:sale.order:0 #: report:sale.order:0
@ -2395,7 +2399,7 @@ msgid ""
"between the Unit Price and Cost Price.\n" "between the Unit Price and Cost Price.\n"
" This installs the module sale_margin." " This installs the module sale_margin."
msgstr "" msgstr ""
"Ez hozzáadja az 'Árrés' -t a megrendelésre.\n" "Ez hozzáadja az 'Árrés' -t a vevői megrendelésre.\n"
" Jövedelmezőséget ad az egységár és a költség ár " " Jövedelmezőséget ad az egységár és a költség ár "
"különbözetéből.\n" "különbözetéből.\n"
" Ez a sale_margin modult telepíti." " Ez a sale_margin modult telepíti."

View File

@ -27,6 +27,7 @@ class sale_report(osv.osv):
_description = "Sales Orders Statistics" _description = "Sales Orders Statistics"
_auto = False _auto = False
_rec_name = 'date' _rec_name = 'date'
_columns = { _columns = {
'date': fields.date('Date Order', readonly=True), 'date': fields.date('Date Order', readonly=True),
'date_confirm': fields.date('Date Confirm', readonly=True), 'date_confirm': fields.date('Date Confirm', readonly=True),
@ -60,12 +61,9 @@ class sale_report(osv.osv):
} }
_order = 'date desc' _order = 'date desc'
def init(self, cr): def _select(self):
tools.drop_view_if_exists(cr, 'sale_report') select_str = """
cr.execute(""" SELECT min(l.id) as id,
create or replace view sale_report as (
select
min(l.id) as id,
l.product_id as product_id, l.product_id as product_id,
t.uom_id as product_uom, t.uom_id as product_uom,
sum(l.product_uom_qty / u.factor * u2.factor) as product_uom_qty, sum(l.product_uom_qty / u.factor * u2.factor) as product_uom_qty,
@ -84,15 +82,23 @@ class sale_report(osv.osv):
t.categ_id as categ_id, t.categ_id as categ_id,
s.pricelist_id as pricelist_id, s.pricelist_id as pricelist_id,
s.project_id as analytic_account_id s.project_id as analytic_account_id
from """
sale_order_line l return select_str
def _from(self):
from_str = """
sale_order_line l
join sale_order s on (l.order_id=s.id) join sale_order s on (l.order_id=s.id)
left join product_product p on (l.product_id=p.id) left join product_product p on (l.product_id=p.id)
left join product_template t on (p.product_tmpl_id=t.id) left join product_template t on (p.product_tmpl_id=t.id)
left join product_uom u on (u.id=l.product_uom) left join product_uom u on (u.id=l.product_uom)
left join product_uom u2 on (u2.id=t.uom_id) left join product_uom u2 on (u2.id=t.uom_id)
group by """
l.product_id, return from_str
def _group_by(self):
group_by_str = """
GROUP BY l.product_id,
l.order_id, l.order_id,
t.uom_id, t.uom_id,
t.categ_id, t.categ_id,
@ -104,7 +110,16 @@ class sale_report(osv.osv):
s.state, s.state,
s.pricelist_id, s.pricelist_id,
s.project_id s.project_id
) """
""") return group_by_str
def init(self, cr):
# self._table = sale_report
tools.drop_view_if_exists(cr, self._table)
cr.execute("""CREATE or REPLACE VIEW %s as (
%s
FROM ( %s )
%s
)""" % (self._table, self._select(), self._from(), self._group_by()))
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -47,10 +47,8 @@
<search string="Sales Analysis"> <search string="Sales Analysis">
<field name="date"/> <field name="date"/>
<field name="date_confirm"/> <field name="date_confirm"/>
<filter icon="terp-document-new" string="Quotations" domain="[('state','=','draft')]"/> <filter icon="terp-document-new" name="Quotations" domain="[('state','=','draft')]"/>
<filter icon="terp-check" string="Sales" domain="[('state','not in',('draft','done','cancel'))]"/> <filter icon="terp-check" name="Sales" domain="[('state','not in',('draft','done','cancel'))]"/>
<separator/>
<filter icon="terp-accessories-archiver" string="Picked" domain="[('shipped','=',True)]"/>
<separator/> <separator/>
<filter icon="terp-personal" string="My Sales" help="My Sales" domain="[('user_id','=',uid)]"/> <filter icon="terp-personal" string="My Sales" help="My Sales" domain="[('user_id','=',uid)]"/>
<field name="partner_id"/> <field name="partner_id"/>

View File

@ -320,6 +320,9 @@ class sale_order(osv.osv):
context = {} context = {}
if vals.get('name', '/') == '/': if vals.get('name', '/') == '/':
vals['name'] = self.pool.get('ir.sequence').get(cr, uid, 'sale.order') or '/' vals['name'] = self.pool.get('ir.sequence').get(cr, uid, 'sale.order') or '/'
if vals.get('partner_id') and any(f not in vals for f in ['partner_invoice_id', 'partner_shipping_id', 'pricelist_id']):
defaults = self.onchange_partner_id(cr, uid, [], vals['partner_id'], context)['value']
vals = dict(defaults, **vals)
context.update({'mail_create_nolog': True}) context.update({'mail_create_nolog': True})
new_id = super(sale_order, self).create(cr, uid, vals, context=context) new_id = super(sale_order, self).create(cr, uid, vals, context=context)
self.message_post(cr, uid, [new_id], body=_("Quotation created"), context=context) self.message_post(cr, uid, [new_id], body=_("Quotation created"), context=context)
@ -962,6 +965,24 @@ class sale_order_line(osv.osv):
pass pass
return {'value': value} return {'value': value}
def create(self, cr, uid, values, context=None):
if values.get('order_id') and values.get('product_id') and any(f not in values for f in ['name', 'price_unit', 'type', 'product_uom_qty', 'product_uom']):
order = self.pool['sale.order'].read(cr, uid, values['order_id'], ['pricelist_id', 'partner_id', 'date_order', 'fiscal_position'], context=context)
defaults = self.product_id_change(cr, uid, [], order['pricelist_id'][0], values['product_id'],
qty=float(values.get('product_uom_qty', False)),
uom=values.get('product_uom', False),
qty_uos=float(values.get('product_uos_qty', False)),
uos=values.get('product_uos', False),
name=values.get('name', False),
partner_id=order['partner_id'][0],
date_order=order['date_order'],
fiscal_position=order['fiscal_position'][0] if order['fiscal_position'] else False,
flag=False, # Force name update
context=context
)['value']
values = dict(defaults, **values)
return super(sale_order_line, self).create(cr, uid, values, context=context)
def copy_data(self, cr, uid, id, default=None, context=None): def copy_data(self, cr, uid, id, default=None, context=None):
if not default: if not default:
default = {} default = {}

View File

@ -78,6 +78,13 @@
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record> </record>
<record model="ir.rule" id="sale_order_report_comp_rule">
<field name="name">Sales Order Analysis multi-company</field>
<field name="model_id" ref="model_sale_report"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
<!-- Multi - Salesmen sales order assignation rules --> <!-- Multi - Salesmen sales order assignation rules -->
<record id="sale_order_personal_rule" model="ir.rule"> <record id="sale_order_personal_rule" model="ir.rule">
@ -93,6 +100,19 @@
<field name="groups" eval="[(4, ref('base.group_sale_salesman_all_leads'))]"/> <field name="groups" eval="[(4, ref('base.group_sale_salesman_all_leads'))]"/>
</record> </record>
<record id="sale_order_report_personal_rule" model="ir.rule">
<field name="name">Personal Orders Analysis</field>
<field ref="model_sale_report" name="model_id"/>
<field name="domain_force">['|',('user_id','=',user.id),('user_id','=',False)]</field>
<field name="groups" eval="[(4, ref('base.group_sale_salesman'))]"/>
</record>
<record id="sale_order_report_see_all" model="ir.rule">
<field name="name">All Orders Analysis</field>
<field ref="model_sale_report" name="model_id"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('base.group_sale_salesman_all_leads'))]"/>
</record>
<record id="sale_order_line_personal_rule" model="ir.rule"> <record id="sale_order_line_personal_rule" model="ir.rule">
<field name="name">Personal Order Lines</field> <field name="name">Personal Order Lines</field>

View File

@ -61,7 +61,7 @@ class sale_order_line_make_invoice(osv.osv_memory):
else: else:
pay_term = False pay_term = False
inv = { inv = {
'name': order.name, 'name': order.client_order_ref or '',
'origin': order.name, 'origin': order.name,
'type': 'out_invoice', 'type': 'out_invoice',
'reference': "P%dSO%d" % (order.partner_id.id, order.id), 'reference': "P%dSO%d" % (order.partner_id.id, order.id),

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n" "POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2013-01-07 22:28+0000\n" "PO-Revision-Date: 2013-12-09 15:55+0000\n"
"Last-Translator: krnkris <Unknown>\n" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 05:57+0000\n" "X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16761)\n" "X-Generator: Launchpad (build 16869)\n"
#. module: sale_analytic_plans #. module: sale_analytic_plans
#: field:sale.order.line,analytics_id:0 #: field:sale.order.line,analytics_id:0
@ -29,7 +29,7 @@ msgstr "Vevői megrendelés"
#. module: sale_analytic_plans #. module: sale_analytic_plans
#: model:ir.model,name:sale_analytic_plans.model_sale_order_line #: model:ir.model,name:sale_analytic_plans.model_sale_order_line
msgid "Sales Order Line" msgid "Sales Order Line"
msgstr "Vevői megrendelés sor" msgstr "Vevői megrendelési tétel sor"
#~ msgid "Sales Analytic Distribution Management" #~ msgid "Sales Analytic Distribution Management"
#~ msgstr "Értékesítés analitikus felosztás kezelés" #~ msgstr "Értékesítés analitikus felosztás kezelés"

View File

@ -46,6 +46,7 @@ modules.
'security/sale_crm_security.xml', 'security/sale_crm_security.xml',
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'report/sale_crm_account_invoice_report_view.xml', 'report/sale_crm_account_invoice_report_view.xml',
'report/sale_report_view.xml',
], ],
'js': [ 'js': [
'static/src/js/sale_crm.js', 'static/src/js/sale_crm.js',

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n" "POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2011-02-01 18:33+0000\n" "PO-Revision-Date: 2013-12-09 15:59+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 05:19+0000\n" "X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16761)\n" "X-Generator: Launchpad (build 16869)\n"
#. module: sale_crm #. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:92 #: code:addons/sale_crm/wizard/crm_make_sale.py:92
@ -81,7 +81,7 @@ msgstr "Árajánlat"
#. module: sale_crm #. module: sale_crm
#: field:crm.make.sale,partner_id:0 #: field:crm.make.sale,partner_id:0
msgid "Customer" msgid "Customer"
msgstr "Vevő" msgstr "Vásárló"
#. module: sale_crm #. module: sale_crm
#: view:crm.make.sale:0 #: view:crm.make.sale:0
@ -91,7 +91,7 @@ msgstr "_Létrehoz"
#. module: sale_crm #. module: sale_crm
#: model:ir.model,name:sale_crm.model_crm_make_sale #: model:ir.model,name:sale_crm.model_crm_make_sale
msgid "Make sales" msgid "Make sales"
msgstr "Értékesítés létrehozás" msgstr "Vevői értékesítés létrehozás"
#. module: sale_crm #. module: sale_crm
#: model:ir.model,name:sale_crm.model_account_invoice #: model:ir.model,name:sale_crm.model_account_invoice
@ -108,7 +108,7 @@ msgstr "Lehetőség: %s"
#: code:addons/sale_crm/wizard/crm_make_sale.py:113 #: code:addons/sale_crm/wizard/crm_make_sale.py:113
#, python-format #, python-format
msgid "Opportunity has been <b>converted</b> to the quotation <em>%s</em>." msgid "Opportunity has been <b>converted</b> to the quotation <em>%s</em>."
msgstr "A lehetőségát lett <b>konvertálva</b> árajánlattá <em>%s</em>." msgstr "A lehetőség át lett <b>konvertálva</b> árajánlattá <em>%s</em>."
#. module: sale_crm #. module: sale_crm
#: field:crm.make.sale,shop_id:0 #: field:crm.make.sale,shop_id:0
@ -119,12 +119,12 @@ msgstr "Üzlet"
#: code:addons/sale_crm/wizard/crm_make_sale.py:92 #: code:addons/sale_crm/wizard/crm_make_sale.py:92
#, python-format #, python-format
msgid "No addresse(s) defined for this customer." msgid "No addresse(s) defined for this customer."
msgstr "Ehhez a vevőhöz nem lett cím meghatározva." msgstr "Ehhez a vevőhöz nem lett meghatározva cím."
#. module: sale_crm #. module: sale_crm
#: model:mail.message.subtype,name:sale_crm.mt_salesteam_order_confirmed #: model:mail.message.subtype,name:sale_crm.mt_salesteam_order_confirmed
msgid "Sales Order Confirmed" msgid "Sales Order Confirmed"
msgstr "Megrendelés visszaigazolva" msgstr "Vásárlói megrendelés visszaigazolva"
#. module: sale_crm #. module: sale_crm
#: view:account.invoice:0 #: view:account.invoice:0

View File

@ -20,6 +20,7 @@
############################################################################## ##############################################################################
import sales_crm_account_invoice_report import sales_crm_account_invoice_report
import sale_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from openerp.osv import fields, osv
class sale_report(osv.osv):
_inherit = "sale.report"
_columns = {
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
}
def _select(self):
return super(sale_report, self)._select() + ", s.section_id as section_id"
def _group_by(self):
return super(sale_report, self)._group_by() + ", s.section_id"
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_order_product_tree_sale_crm_inherit" model="ir.ui.view">
<field name="name">sale.report.tree.sale.crm</field>
<field name="model">sale.report</field>
<field name="inherit_id" ref="sale.view_order_product_tree"/>
<field name="arch" type="xml">
<field name="product_uom_qty" position="after">
<field name="section_id" groups="base.group_multi_salesteams"/>
</field>
</field>
</record>
<record id="view_order_product_search_sale_crm_inherit" model="ir.ui.view">
<field name="name">sale.report.search.sale.crm</field>
<field name="model">sale.report</field>
<field name="inherit_id" ref="sale.view_order_product_search"/>
<field name="arch" type="xml">
<filter name="User" position="after">
<separator/>
<filter string="Sales Team" context="{'group_by':'section_id'}"/>
</filter>
</field>
</record>
</data>
</openerp>

View File

@ -53,10 +53,10 @@ class crm_case_section(osv.osv):
date_end = month_begin.replace(day=calendar.monthrange(month_begin.year, month_begin.month)[1]).strftime(tools.DEFAULT_SERVER_DATE_FORMAT) date_end = month_begin.replace(day=calendar.monthrange(month_begin.year, month_begin.month)[1]).strftime(tools.DEFAULT_SERVER_DATE_FORMAT)
for id in ids: for id in ids:
res[id] = dict() res[id] = dict()
created_domain = [('section_id', '=', id), ('state', 'in', ['draft', 'sent']), ('date_order', '>=', date_begin), ('date_order', '<=', date_end)] created_domain = [('section_id', '=', id), ('state', '=', ['draft']), ('date_order', '>=', date_begin), ('date_order', '<=', date_end)]
res[id]['monthly_quoted'] = self.__get_bar_values(cr, uid, obj, created_domain, ['amount_total', 'date_order'], 'amount_total', 'date_order', context=context) res[id]['monthly_quoted'] = self.__get_bar_values(cr, uid, obj, created_domain, ['amount_total', 'date_order'], 'amount_total', 'date_order', context=context)
validated_domain = [('section_id', '=', id), ('state', 'not in', ['draft', 'sent']), ('date_confirm', '>=', date_begin), ('date_order', '<=', date_end)] validated_domain = [('section_id', '=', id), ('state', 'not in', ['draft', 'sent', 'cancel']), ('date_order', '>=', date_begin), ('date_order', '<=', date_end)]
res[id]['monthly_confirmed'] = self.__get_bar_values(cr, uid, obj, validated_domain, ['amount_total', 'date_confirm'], 'amount_total', 'date_confirm', context=context) res[id]['monthly_confirmed'] = self.__get_bar_values(cr, uid, obj, validated_domain, ['amount_total', 'date_order'], 'amount_total', 'date_order', context=context)
return res return res
def _get_invoices_data(self, cr, uid, ids, field_name, arg, context=None): def _get_invoices_data(self, cr, uid, ids, field_name, arg, context=None):
@ -90,7 +90,7 @@ class crm_case_section(osv.osv):
} }
def action_forecast(self, cr, uid, id, value, context=None): def action_forecast(self, cr, uid, id, value, context=None):
return self.write(cr, uid, [id], {'invoiced_forecast': value}, context=context) return self.write(cr, uid, [id], {'invoiced_forecast': round(float(value))}, context=context)
class res_users(osv.Model): class res_users(osv.Model):

View File

@ -211,6 +211,36 @@
<field name="act_window_id" ref="sale_crm.action_invoice_salesteams"/> <field name="act_window_id" ref="sale_crm.action_invoice_salesteams"/>
</record> </record>
<record id="action_order_report_quotation_salesteam" model="ir.actions.act_window">
<field name="name">Quotations Analysis</field>
<field name="res_model">sale.report</field>
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="domain">[('state','=','draft'),('section_id', '=', active_id)]</field>
<field name="context">{'search_default_order_month':1}</field>
<field name="help">This report performs analysis on your quotations. Analysis check your sales revenues and sort it by different group criteria (salesman, partner, product, etc.) Use this report to perform analysis on sales not having invoiced yet. If you want to analyse your turnover, you should use the Invoice Analysis report in the Accounting application.</field>
</record>
<record id="action_order_report_so_salesteam" model="ir.actions.act_window">
<field name="name">Sales Analysis</field>
<field name="res_model">sale.report</field>
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="domain">[('state','not in',('draft','sent','cancel')),('section_id', '=', active_id)]</field>
<field name="context">{'search_default_order_month':1}</field>
<field name="help">This report performs analysis on your sales orders. Analysis check your sales revenues and sort it by different group criteria (salesman, partner, product, etc.) Use this report to perform analysis on sales not having invoiced yet. If you want to analyse your turnover, you should use the Invoice Analysis report in the Accounting application.</field>
</record>
<record id="action_account_invoice_report_salesteam" model="ir.actions.act_window">
<field name="name">Invoices Analysis</field>
<field name="res_model">account.invoice.report</field>
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="domain">[('section_id', '=', active_id),('state', 'not in', ['draft', 'cancel'])]</field>
<field name="context">{'search_default_month':1}</field>
<field name="help">From this report, you can have an overview of the amount invoiced to your customer. The tool search can also be used to personalise your Invoices reports and so, match this analysis to your needs.</field>
</record>
<record id="crm_case_section_salesteams_view_form" model="ir.ui.view"> <record id="crm_case_section_salesteams_view_form" model="ir.ui.view">
<field name="name">crm.case.section.form</field> <field name="name">crm.case.section.form</field>
<field name="model">crm.case.section</field> <field name="model">crm.case.section</field>
@ -241,9 +271,9 @@
<xpath expr="//div[@class='oe_salesteams_leads']" position="after"> <xpath expr="//div[@class='oe_salesteams_leads']" position="after">
<div class="oe_salesteams_orders"> <div class="oe_salesteams_orders">
<a name="%(action_orders_salesteams)d" type="action">Sales Orders</a> <a name="%(action_orders_salesteams)d" type="action">Sales Orders</a>
<a name="%(sale.action_order_report_all)d" type="action" class="oe_sparkline_bar_link"> <a name="%(action_order_report_so_salesteam)d" type="action" class="oe_sparkline_bar_link">
<field name="monthly_confirmed" widget="sparkline_bar"> <field name="monthly_confirmed" widget="sparkline_bar" options="{'delayIn': '3000'}">
Revenue of confirmed sales orders per month.<br/>Click the acces to Sales Analysis Revenue of confirmed sales orders per month.<br/>Click to acces the Sales Analysis.
</field> </field>
</a> </a>
</div> </div>
@ -251,27 +281,29 @@
<xpath expr="//div[@class='oe_salesteams_opportunities']" position="after"> <xpath expr="//div[@class='oe_salesteams_opportunities']" position="after">
<div class="oe_salesteams_invoices" groups="account.group_account_invoice"> <div class="oe_salesteams_invoices" groups="account.group_account_invoice">
<a name="%(action_invoice_salesteams)d" type="action">Invoices</a> <a name="%(action_invoice_salesteams)d" type="action">Invoices</a>
<a name="%(account.action_account_invoice_report_all)d" type="action" class="oe_sparkline_bar_link"> <a name="%(action_account_invoice_report_salesteam)d" type="action" class="oe_sparkline_bar_link">
<field name="monthly_invoiced" widget="sparkline_bar"> <field name="monthly_invoiced" widget="sparkline_bar" options="{'delayIn': '3000'}">
Revenue of sent invoices per month.<br/>Click to see a detailed analysis of invoices. Revenue of sent invoices per month.<br/>Click to see a detailed analysis of invoices.
</field> </field>
</a> </a>
</div> </div>
<div class="oe_salesteams_quotations"> <div class="oe_salesteams_quotations">
<a name="%(action_quotations_salesteams)d" type="action" class="oe_sparkline_bar_link">Quotations</a> <a name="%(action_quotations_salesteams)d" type="action" class="oe_sparkline_bar_link">Quotations</a>
<a name="%(sale.action_order_report_all)d" type="action" class="oe_sparkline_bar_link"> <a name="%(action_order_report_quotation_salesteam)d" type="action" class="oe_sparkline_bar_link">
<field name="monthly_quoted" widget="sparkline_bar"> <field name="monthly_quoted" widget="sparkline_bar" options="{'delayIn': '3000'}">
Revenue of created quotation per month.<br/>Click to see a detailed analysis of sales. Revenue of created quotations per month.<br/>Click to see a detailed analysis.
</field> </field>
</a> </a>
</div> </div>
</xpath> </xpath>
<xpath expr="//div[@class='oe_items_list']" position="after"> <xpath expr="//div[@class='oe_clear']" position="after">
<div class="oe_center" t-if="record.invoiced_target.raw_value"> <div class="oe_center" t-if="record.invoiced_target.raw_value">
<field name="monthly_invoiced" widget="gauge" style="width:160px; height: 120px;" options="{'max_field': 'invoiced_target'}">Invoiced</field> <field name="monthly_invoiced" widget="gauge" style="width:160px; height: 120px; cursor: pointer;"
<field name="invoiced_forecast" widget="gauge" style="width:160px; height: 120px;" options="{'max_field': 'invoiced_target', 'action_change': 'action_forecast'}">Forecast</field> options="{'max_field': 'invoiced_target'}">Invoiced</field>
<field name="invoiced_forecast" widget="gauge" style="width:160px; height: 120px; cursor: pointer;"
options="{'max_field': 'invoiced_target', 'action_change': 'action_forecast'}">Forecast</field>
</div> </div>
<div class="oe_center" style="color:#bbbbbb;" t-if="!record.invoiced_target.raw_value"> <div class="oe_center oe_salesteams_help" style="color:#bbbbbb;" t-if="!record.invoiced_target.raw_value">
<br/>Define an invoicing target in the sales team settings to see the period's achievement and forecast at a glance. <br/>Define an invoicing target in the sales team settings to see the period's achievement and forecast at a glance.
</div> </div>
</xpath> </xpath>

View File

@ -47,7 +47,7 @@ class crm_make_sale(osv.osv_memory):
return False return False
lead = lead_obj.read(cr, uid, active_id, ['partner_id'], context=context) lead = lead_obj.read(cr, uid, active_id, ['partner_id'], context=context)
return lead['partner_id'][0] return lead['partner_id'][0] if lead['partner_id'] else False
def view_init(self, cr, uid, fields_list, context=None): def view_init(self, cr, uid, fields_list, context=None):
return super(crm_make_sale, self).view_init(cr, uid, fields_list, context=context) return super(crm_make_sale, self).view_init(cr, uid, fields_list, context=context)

View File

@ -0,0 +1,139 @@
# Spanish (Peru) translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2013-12-09 18:37+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish (Peru) <es_PE@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: sale_journal
#: field:sale_journal.invoice.type,note:0
msgid "Note"
msgstr ""
#. module: sale_journal
#: field:res.partner,property_invoice_type:0
msgid "Invoicing Type"
msgstr ""
#. module: sale_journal
#: help:res.partner,property_invoice_type:0
msgid ""
"This invoicing type will be used, by default, to invoice the current partner."
msgstr ""
#. module: sale_journal
#: view:res.partner:0
msgid "Sales & Purchases"
msgstr ""
#. module: sale_journal
#: view:res.partner:0
msgid "Invoicing"
msgstr ""
#. module: sale_journal
#: model:ir.model,name:sale_journal.model_stock_picking_in
msgid "Incoming Shipments"
msgstr "Entregas a Recibir"
#. module: sale_journal
#: help:sale_journal.invoice.type,active:0
msgid ""
"If the active field is set to False, it will allow you to hide the invoice "
"type without removing it."
msgstr ""
#. module: sale_journal
#: view:sale_journal.invoice.type:0
msgid "Notes"
msgstr ""
#. module: sale_journal
#: field:sale_journal.invoice.type,invoicing_method:0
msgid "Invoicing method"
msgstr ""
#. module: sale_journal
#: model:ir.model,name:sale_journal.model_stock_picking
msgid "Picking List"
msgstr "Guía"
#. module: sale_journal
#: model:ir.actions.act_window,name:sale_journal.action_definition_journal_invoice_type
#: model:ir.model,name:sale_journal.model_sale_journal_invoice_type
#: model:ir.ui.menu,name:sale_journal.menu_definition_journal_invoice_type
msgid "Invoice Types"
msgstr ""
#. module: sale_journal
#: selection:sale_journal.invoice.type,invoicing_method:0
msgid "Non grouped"
msgstr ""
#. module: sale_journal
#: selection:sale_journal.invoice.type,invoicing_method:0
msgid "Grouped"
msgstr ""
#. module: sale_journal
#: model:ir.actions.act_window,help:sale_journal.action_definition_journal_invoice_type
msgid ""
"Invoice types are used for partners, sales orders and delivery orders. You "
"can create a specific invoicing journal to group your invoicing according to "
"your customer's needs: daily, each Wednesday, monthly, etc."
msgstr ""
"Los tipos de facturas son utilizados por las Empresas, Pedidos de Venta y "
"Órdenes de Entrega. Puede crear un diario de facturación específico para "
"agrupar su facturación en función de las necesidades de sus clientes: "
"diaria, cada miércoles, mensual, etc."
#. module: sale_journal
#: help:sale.order,invoice_type_id:0
msgid "Generate invoice based on the selected option."
msgstr ""
#. module: sale_journal
#: view:sale.order:0
#: field:sale.order,invoice_type_id:0
#: view:sale_journal.invoice.type:0
#: field:sale_journal.invoice.type,name:0
#: view:stock.picking:0
#: field:stock.picking,invoice_type_id:0
#: view:stock.picking.in:0
#: field:stock.picking.in,invoice_type_id:0
#: view:stock.picking.out:0
#: field:stock.picking.out,invoice_type_id:0
msgid "Invoice Type"
msgstr ""
#. module: sale_journal
#: field:sale_journal.invoice.type,active:0
msgid "Active"
msgstr ""
#. module: sale_journal
#: model:ir.model,name:sale_journal.model_res_partner
msgid "Partner"
msgstr ""
#. module: sale_journal
#: model:ir.model,name:sale_journal.model_sale_order
msgid "Sales Order"
msgstr ""
#. module: sale_journal
#: model:ir.model,name:sale_journal.model_stock_picking_out
msgid "Delivery Orders"
msgstr ""

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n" "POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2011-02-01 22:09+0000\n" "PO-Revision-Date: 2013-12-09 16:03+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 06:13+0000\n" "X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16761)\n" "X-Generator: Launchpad (build 16869)\n"
#. module: sale_margin #. module: sale_margin
#: field:sale.order.line,purchase_price:0 #: field:sale.order.line,purchase_price:0
@ -35,7 +35,7 @@ msgstr "Árrés"
#. module: sale_margin #. module: sale_margin
#: model:ir.model,name:sale_margin.model_sale_order_line #: model:ir.model,name:sale_margin.model_sale_order_line
msgid "Sales Order Line" msgid "Sales Order Line"
msgstr "Vevői megrendelés sor" msgstr "Vevői megrendelési tétel sor"
#. module: sale_margin #. module: sale_margin
#: help:sale.order,margin:0 #: help:sale.order,margin:0

View File

@ -7,19 +7,19 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n" "POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2011-02-01 22:23+0000\n" "PO-Revision-Date: 2013-12-09 16:06+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 06:14+0000\n" "X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16761)\n" "X-Generator: Launchpad (build 16869)\n"
#. module: sale_mrp #. module: sale_mrp
#: model:ir.model,name:sale_mrp.model_mrp_production #: model:ir.model,name:sale_mrp.model_mrp_production
msgid "Manufacturing Order" msgid "Manufacturing Order"
msgstr "Gyártási utasítás" msgstr "Gyártási rendelés"
#. module: sale_mrp #. module: sale_mrp
#: help:mrp.production,sale_name:0 #: help:mrp.production,sale_name:0
@ -34,7 +34,7 @@ msgstr "A vevői megrendelés vevő hivatkozására utal."
#. module: sale_mrp #. module: sale_mrp
#: field:mrp.production,sale_ref:0 #: field:mrp.production,sale_ref:0
msgid "Sale Reference" msgid "Sale Reference"
msgstr "Értékesítési referencia" msgstr "Vevői megrendelési referencia"
#. module: sale_mrp #. module: sale_mrp
#: field:mrp.production,sale_name:0 #: field:mrp.production,sale_name:0

View File

@ -0,0 +1,58 @@
# Spanish (Peru) translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2013-12-09 18:32+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish (Peru) <es_PE@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: sale_order_dates
#: view:sale.order:0
msgid "Dates"
msgstr ""
#. module: sale_order_dates
#: field:sale.order,commitment_date:0
msgid "Commitment Date"
msgstr "Fecha Prometida"
#. module: sale_order_dates
#: field:sale.order,effective_date:0
msgid "Effective Date"
msgstr ""
#. module: sale_order_dates
#: help:sale.order,effective_date:0
msgid "Date on which picking is created."
msgstr "Fecha en que la Guía fue creada."
#. module: sale_order_dates
#: help:sale.order,requested_date:0
msgid "Date requested by the customer for the sale."
msgstr ""
#. module: sale_order_dates
#: field:sale.order,requested_date:0
msgid "Requested Date"
msgstr ""
#. module: sale_order_dates
#: model:ir.model,name:sale_order_dates.model_sale_order
msgid "Sales Order"
msgstr ""
#. module: sale_order_dates
#: help:sale.order,commitment_date:0
msgid "Committed date for delivery."
msgstr ""

View File

@ -0,0 +1,609 @@
# Spanish (Peru) translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2013-12-09 18:14+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Spanish (Peru) <es_PE@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: sale_stock
#: help:sale.config.settings,group_invoice_deli_orders:0
msgid ""
"To allow your salesman to make invoices for Delivery Orders using the menu "
"'Deliveries to Invoice'."
msgstr ""
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_deliveryorder0
msgid "Delivery Order"
msgstr ""
#. module: sale_stock
#: model:ir.actions.act_window,name:sale_stock.outgoing_picking_list_to_invoice
#: model:ir.ui.menu,name:sale_stock.menu_action_picking_list_to_invoice
msgid "Deliveries to Invoice"
msgstr "Entregas a facturar"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:570
#, python-format
msgid "Picking Information ! : "
msgstr "Información de la Guía! "
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_packinglist0
msgid "Pick List"
msgstr "Guía"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:565
#, python-format
msgid ""
"You selected a quantity of %d Units.\n"
"But it's not compatible with the selected packaging.\n"
"Here is a proposition of quantities according to the packaging:\n"
"EAN: %s Quantity: %s Type of ul: %s"
msgstr ""
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_packinglist0
msgid "Document of the move to the output or to the customer."
msgstr ""
#. module: sale_stock
#: field:sale.config.settings,group_multiple_shops:0
msgid "Manage multiple shops"
msgstr ""
#. module: sale_stock
#: model:process.transition.action,name:sale_stock.process_transition_action_validate0
msgid "Validate"
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:209
#, python-format
msgid ""
"You must first cancel all delivery order(s) attached to this sales order."
msgstr ""
#. module: sale_stock
#: model:process.transition,name:sale_stock.process_transition_saleprocurement0
msgid "Create Procurement Order"
msgstr ""
#. module: sale_stock
#: field:stock.picking.out,sale_id:0
msgid "Sale Order"
msgstr ""
#. module: sale_stock
#: model:process.transition,note:sale_stock.process_transition_saleorderprocurement0
msgid ""
"For every sales order line, a procurement order is created to supply the "
"sold product."
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:615
#, python-format
msgid "Error!"
msgstr ""
#. module: sale_stock
#: field:sale.order,picking_policy:0
msgid "Shipping Policy"
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:616
#, python-format
msgid ""
"You cannot make an advance on a sales order that is "
"defined as 'Automatic Invoice after delivery'."
msgstr ""
#. module: sale_stock
#: model:ir.ui.menu,name:sale_stock.menu_action_shop_form
msgid "Shop"
msgstr ""
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_saleorderprocurement0
msgid "Drives procurement orders for every sales order line."
msgstr ""
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_stock_move
msgid "Stock Move"
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:163
#, python-format
msgid "Invalid Action!"
msgstr ""
#. module: sale_stock
#: field:sale.config.settings,module_project_timesheet:0
msgid "Project Timesheet"
msgstr ""
#. module: sale_stock
#: field:sale.config.settings,group_sale_delivery_address:0
msgid "Allow a different address for delivery and invoicing "
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:572
#: code:addons/sale_stock/sale_stock.py:623
#, python-format
msgid "Configuration Error!"
msgstr ""
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_saleprocurement0
msgid "Procurement Order"
msgstr ""
#. module: sale_stock
#: selection:sale.config.settings,default_order_policy:0
msgid "Invoice based on deliveries"
msgstr "Facturar desde entregas"
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_order
#: field:stock.picking,sale_id:0
msgid "Sales Order"
msgstr ""
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_stock_picking_out
msgid "Delivery Orders"
msgstr ""
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_order_line
#: field:stock.move,sale_line_id:0
msgid "Sales Order Line"
msgstr ""
#. module: sale_stock
#: model:process.transition,note:sale_stock.process_transition_packing0
msgid ""
"The Pick List form is created as soon as the sales order is confirmed, in "
"the same time as the procurement order. It represents the assignment of "
"parts to the sales order. There is 1 pick list by sales order line which "
"evolves with the availability of parts."
msgstr ""
"El Guía se crea tan pronto como se confirma el pedido de venta, a la vez que "
"la orden de abastecimiento. Representa la asignación de los componentes del "
"pedido de venta. Hay una Guía por línea del pedido de venta que evoluciona "
"según la disponibilidad de los componentes."
#. module: sale_stock
#: help:res.company,security_lead:0
msgid ""
"This is the days added to what you promise to customers for security purpose"
msgstr ""
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_stock_picking
msgid "Picking List"
msgstr "Guía"
#. module: sale_stock
#: field:sale.shop,warehouse_id:0
msgid "Warehouse"
msgstr ""
#. module: sale_stock
#: model:process.transition.action,name:sale_stock.process_transition_action_forceassignation0
msgid "Force Assignation"
msgstr ""
#. module: sale_stock
#: field:sale.config.settings,default_order_policy:0
msgid "The default invoicing method is"
msgstr ""
#. module: sale_stock
#: field:sale.order.line,delay:0
msgid "Delivery Lead Time"
msgstr ""
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_deliveryorder0
msgid "Document of the move to the customer."
msgstr ""
#. module: sale_stock
#: view:sale.order:0
msgid "View Delivery Order"
msgstr ""
#. module: sale_stock
#: field:sale.order.line,move_ids:0
msgid "Inventory Moves"
msgstr ""
#. module: sale_stock
#: view:sale.config.settings:0
msgid "Default Options"
msgstr ""
#. module: sale_stock
#: field:sale.config.settings,module_project_mrp:0
msgid "Project MRP"
msgstr ""
#. module: sale_stock
#: model:process.transition,note:sale_stock.process_transition_invoiceafterdelivery0
msgid ""
"The invoice is created automatically if the shipping policy is 'Invoice from "
"pick' or 'Invoice on order after delivery'."
msgstr ""
#. module: sale_stock
#: field:sale.order.line,procurement_id:0
msgid "Procurement"
msgstr ""
#. module: sale_stock
#: view:sale.report:0
#: field:sale.report,shipped:0
#: field:sale.report,shipped_qty_1:0
msgid "Shipped"
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:265
#, python-format
msgid "invalid mode for test_state"
msgstr ""
#. module: sale_stock
#: model:process.transition,note:sale_stock.process_transition_saleprocurement0
msgid ""
"A procurement order is automatically created as soon as a sales order is "
"confirmed or as the invoice is paid. It drives the purchasing and the "
"production of products regarding to the rules and to the sales order's "
"parameters. "
msgstr ""
#. module: sale_stock
#: help:sale.config.settings,group_mrp_properties:0
msgid "Allows you to tag sales order lines with properties."
msgstr ""
#. module: sale_stock
#: field:sale.config.settings,group_invoice_deli_orders:0
msgid "Generate invoices after and based on delivery orders"
msgstr ""
#. module: sale_stock
#: field:sale.config.settings,module_delivery:0
msgid "Allow adding shipping costs"
msgstr ""
#. module: sale_stock
#: view:sale.order:0
msgid "days"
msgstr ""
#. module: sale_stock
#: field:sale.order.line,product_packaging:0
msgid "Packaging"
msgstr ""
#. module: sale_stock
#: help:sale.order,incoterm:0
msgid ""
"International Commercial Terms are a series of predefined commercial terms "
"used in international transactions."
msgstr ""
#. module: sale_stock
#: help:sale.config.settings,module_delivery:0
msgid ""
"Allows you to add delivery methods in sales orders and delivery orders.\n"
" You can define your own carrier and delivery grids for "
"prices.\n"
" This installs the module delivery."
msgstr ""
#. module: sale_stock
#: field:sale.config.settings,default_picking_policy:0
msgid "Deliver all at once when all products are available."
msgstr ""
#. module: sale_stock
#: model:res.groups,name:sale_stock.group_invoice_deli_orders
msgid "Enable Invoicing Delivery orders"
msgstr ""
#. module: sale_stock
#: field:res.company,security_lead:0
msgid "Security Days"
msgstr ""
#. module: sale_stock
#: model:process.transition,name:sale_stock.process_transition_saleorderprocurement0
msgid "Procurement of sold material"
msgstr ""
#. module: sale_stock
#: help:sale.order,picking_policy:0
msgid ""
"Pick 'Deliver each product when available' if you allow partial delivery."
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:208
#, python-format
msgid "Cannot cancel sales order!"
msgstr ""
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_shop
msgid "Sales Shop"
msgstr "Tiendas"
#. module: sale_stock
#: help:sale.order,shipped:0
msgid ""
"It indicates that the sales order has been delivered. This field is updated "
"only after the scheduler(s) have been launched."
msgstr ""
#. module: sale_stock
#: field:sale.order.line,property_ids:0
msgid "Properties"
msgstr ""
#. module: sale_stock
#: field:sale.config.settings,group_mrp_properties:0
msgid "Product properties on order lines"
msgstr ""
#. module: sale_stock
#: help:sale.config.settings,default_order_policy:0
msgid ""
"You can generate invoices based on sales orders or based on shippings."
msgstr ""
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_report
msgid "Sales Orders Statistics"
msgstr ""
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_res_company
msgid "Companies"
msgstr ""
#. module: sale_stock
#: help:sale.config.settings,task_work:0
msgid ""
"Lets you transfer the entries under tasks defined for Project Management to\n"
" the Timesheet line entries for particular date and "
"particular user with the effect of creating, editing and deleting either "
"ways\n"
" and to automatically creates project tasks from procurement "
"lines.\n"
" This installs the modules project_timesheet and project_mrp."
msgstr ""
#. module: sale_stock
#: help:sale.config.settings,group_sale_delivery_address:0
msgid ""
"Allows you to specify different delivery and invoice addresses on a sales "
"order."
msgstr ""
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_saleprocurement0
msgid ""
"One Procurement order for each sales order line and for each of the "
"components."
msgstr ""
#. module: sale_stock
#: model:process.transition.action,name:sale_stock.process_transition_action_assign0
msgid "Assign"
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:618
#, python-format
msgid "Not enough stock ! : "
msgstr ""
#. module: sale_stock
#: help:sale.order.line,delay:0
msgid ""
"Number of days between the order confirmation and the shipping of the "
"products to the customer"
msgstr ""
#. module: sale_stock
#: help:sale.config.settings,default_picking_policy:0
msgid ""
"Sales order by default will be configured to deliver all products at once "
"instead of delivering each product when it is available. This may have an "
"impact on the shipping price."
msgstr ""
#. module: sale_stock
#: selection:sale.config.settings,default_order_policy:0
msgid "Invoice based on sales orders"
msgstr ""
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_invoiceafterdelivery0
msgid "Invoice"
msgstr ""
#. module: sale_stock
#: model:process.transition.action,name:sale_stock.process_transition_action_cancel1
#: model:process.transition.action,name:sale_stock.process_transition_action_cancel2
msgid "Cancel"
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:163
#, python-format
msgid ""
"In order to delete a confirmed sales order, you must cancel it.\n"
"To do so, you must first cancel related picking for delivery orders."
msgstr ""
"Para borrar un pedido de venta confirmado, debe cancelarlo.\n"
"Para hacerlo, debe cancelar primero las guías relacionadas para sus órdenes "
"de entrega."
#. module: sale_stock
#: field:sale.order.line,number_packages:0
msgid "Number Packages"
msgstr ""
#. module: sale_stock
#: field:sale.order,shipped:0
msgid "Delivered"
msgstr ""
#. module: sale_stock
#: model:process.transition,name:sale_stock.process_transition_invoiceafterdelivery0
msgid "Create Invoice"
msgstr ""
#. module: sale_stock
#: field:sale.config.settings,task_work:0
msgid "Prepare invoices based on task's activities"
msgstr ""
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:523
#, python-format
msgid "You must first cancel stock moves attached to this sales order line."
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:561
#, python-format
msgid "(n/a)"
msgstr ""
#. module: sale_stock
#: field:sale.order,incoterm:0
msgid "Incoterm"
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:522
#, python-format
msgid "Cannot cancel sales order line!"
msgstr ""
#. module: sale_stock
#: model:process.transition.action,name:sale_stock.process_transition_action_cancelassignation0
msgid "Cancel Assignation"
msgstr ""
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_invoiceafterdelivery0
msgid "Based on the shipped or on the ordered quantities."
msgstr ""
#. module: sale_stock
#: selection:sale.order,picking_policy:0
msgid "Deliver all products at once"
msgstr ""
#. module: sale_stock
#: field:sale.order,picking_ids:0
msgid "Related Picking"
msgstr "Guía relacionada"
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_config_settings
msgid "sale.config.settings"
msgstr ""
#. module: sale_stock
#: help:sale.order,picking_ids:0
msgid ""
"This is a list of delivery orders that has been generated for this sales "
"order."
msgstr ""
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_saleorderprocurement0
msgid "Sales Order Requisition"
msgstr ""
#. module: sale_stock
#: model:process.transition,name:sale_stock.process_transition_deliver0
msgid "Create Delivery Order"
msgstr ""
#. module: sale_stock
#: view:sale.order:0
msgid "Ignore Exception"
msgstr ""
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:614
#, python-format
msgid ""
"You plan to sell %.2f %s but you only have %.2f %s available !\n"
"The real stock is %.2f %s. (without reservations)"
msgstr ""
#. module: sale_stock
#: view:sale.order:0
msgid "Recreate Delivery Order"
msgstr ""
#. module: sale_stock
#: help:sale.config.settings,group_multiple_shops:0
msgid "This allows to configure and use multiple shops."
msgstr ""
#. module: sale_stock
#: field:sale.order,picked_rate:0
msgid "Picked"
msgstr ""
#. module: sale_stock
#: selection:sale.order,picking_policy:0
msgid "Deliver each product when available"
msgstr ""
#. module: sale_stock
#: model:process.transition,name:sale_stock.process_transition_packing0
msgid "Create Pick List"
msgstr "Crear Guía"
#. module: sale_stock
#: model:process.transition,note:sale_stock.process_transition_deliver0
msgid ""
"Depending on the configuration of the location Output, the move between the "
"output area and the customer is done through the Delivery Order manually or "
"automatically."
msgstr ""

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n" "POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2013-01-10 12:41+0000\n" "PO-Revision-Date: 2013-12-09 19:30+0000\n"
"Last-Translator: krnkris <Unknown>\n" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 06:36+0000\n" "X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16761)\n" "X-Generator: Launchpad (build 16869)\n"
#. module: sale_stock #. module: sale_stock
#: help:sale.config.settings,group_invoice_deli_orders:0 #: help:sale.config.settings,group_invoice_deli_orders:0
@ -94,7 +94,7 @@ msgstr "Beszerzési megbízás létrehozása"
#. module: sale_stock #. module: sale_stock
#: field:stock.picking.out,sale_id:0 #: field:stock.picking.out,sale_id:0
msgid "Sale Order" msgid "Sale Order"
msgstr "Rendelés" msgstr "Vevői megrendelés"
#. module: sale_stock #. module: sale_stock
#: model:process.transition,note:sale_stock.process_transition_saleorderprocurement0 #: model:process.transition,note:sale_stock.process_transition_saleorderprocurement0
@ -102,7 +102,7 @@ msgid ""
"For every sales order line, a procurement order is created to supply the " "For every sales order line, a procurement order is created to supply the "
"sold product." "sold product."
msgstr "" msgstr ""
"Minden értékesítési megbízási sorhoz létrejön egy beszerzési megbízás is az " "Minden vásárlói megrendelés tételhez, létrehoz egy beszerzési megbízás is az "
"eladott termék előteremtésére." "eladott termék előteremtésére."
#. module: sale_stock #. module: sale_stock
@ -123,8 +123,8 @@ msgid ""
"You cannot make an advance on a sales order that is " "You cannot make an advance on a sales order that is "
"defined as 'Automatic Invoice after delivery'." "defined as 'Automatic Invoice after delivery'."
msgstr "" msgstr ""
"Nem végezhet előrelépést egy megrendelésen ami úgy van meghatározva, hogy " "Nem végezhet díjbekérést egy olyan vásárlói megrendelésen ami úgy van "
"'Szállítás után automatikus számlázás'." "meghatározva, hogy 'Szállítás után automatikus számlázás'."
#. module: sale_stock #. module: sale_stock
#: model:ir.ui.menu,name:sale_stock.menu_action_shop_form #: model:ir.ui.menu,name:sale_stock.menu_action_shop_form
@ -134,7 +134,8 @@ msgstr "Üzlet"
#. module: sale_stock #. module: sale_stock
#: model:process.node,note:sale_stock.process_node_saleorderprocurement0 #: model:process.node,note:sale_stock.process_node_saleorderprocurement0
msgid "Drives procurement orders for every sales order line." msgid "Drives procurement orders for every sales order line."
msgstr "Beszerzési megbízást generál minden értékesítési megbízási sorhoz." msgstr ""
"Beszerzési megbízást generál minden vásárlói megrendelési tétel sorhoz."
#. module: sale_stock #. module: sale_stock
#: model:ir.model,name:sale_stock.model_stock_move #: model:ir.model,name:sale_stock.model_stock_move
@ -150,12 +151,12 @@ msgstr "Érvénytelen lépés!"
#. module: sale_stock #. module: sale_stock
#: field:sale.config.settings,module_project_timesheet:0 #: field:sale.config.settings,module_project_timesheet:0
msgid "Project Timesheet" msgid "Project Timesheet"
msgstr "Projekt munkaidő-kimutatása" msgstr "Projekt időbeosztás-kimutatása"
#. module: sale_stock #. module: sale_stock
#: field:sale.config.settings,group_sale_delivery_address:0 #: field:sale.config.settings,group_sale_delivery_address:0
msgid "Allow a different address for delivery and invoicing " msgid "Allow a different address for delivery and invoicing "
msgstr "Engedélyezze akülönböző címeket a szállításhoz és a számlázáshoz " msgstr "Engedélyezze a szállításhoz és a számlázáshoz a különböző címeket "
#. module: sale_stock #. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:572 #: code:addons/sale_stock/sale_stock.py:572
@ -178,7 +179,7 @@ msgstr "Számla a szállítások alapján"
#: model:ir.model,name:sale_stock.model_sale_order #: model:ir.model,name:sale_stock.model_sale_order
#: field:stock.picking,sale_id:0 #: field:stock.picking,sale_id:0
msgid "Sales Order" msgid "Sales Order"
msgstr "Értékesítési megbízás" msgstr "Vevői megrendelés"
#. module: sale_stock #. module: sale_stock
#: model:ir.model,name:sale_stock.model_stock_picking_out #: model:ir.model,name:sale_stock.model_stock_picking_out
@ -189,7 +190,7 @@ msgstr "Kiszállítások kézbesítési bizonylatai"
#: model:ir.model,name:sale_stock.model_sale_order_line #: model:ir.model,name:sale_stock.model_sale_order_line
#: field:stock.move,sale_line_id:0 #: field:stock.move,sale_line_id:0
msgid "Sales Order Line" msgid "Sales Order Line"
msgstr "Értékesítési megbízási sor" msgstr "Vevői megrendelési tétel sor"
#. module: sale_stock #. module: sale_stock
#: model:process.transition,note:sale_stock.process_transition_packing0 #: model:process.transition,note:sale_stock.process_transition_packing0
@ -199,21 +200,22 @@ msgid ""
"parts to the sales order. There is 1 pick list by sales order line which " "parts to the sales order. There is 1 pick list by sales order line which "
"evolves with the availability of parts." "evolves with the availability of parts."
msgstr "" msgstr ""
"The Pick List form is created as soon as the sales order is confirmed, in " "A kiválogatási lista adatlapját a vevői megrendelés visszaigazolásakor "
"the same time as the procurement order. It represents the assignment of " "azonnal létrehozza, ugyanakkor amikor a beszerzési megbízást. Ez képviseli a "
"parts to the sales order. There is 1 pick list by sales order line which " "vevői megrendelés tételeit. Itt a vevői megrendelés tételekként 1 "
"evolves with the availability of parts." "kiválogatási lista van, ami mindjárt megmutatja a tételek hozzáférhetőségét "
"is."
#. module: sale_stock #. module: sale_stock
#: help:res.company,security_lead:0 #: help:res.company,security_lead:0
msgid "" msgid ""
"This is the days added to what you promise to customers for security purpose" "This is the days added to what you promise to customers for security purpose"
msgstr "A vevőknek ígért, biztonsági okokból hozzáadott napok száma." msgstr "A vevőknek megígért, biztonsági okokból hozzáadott, napok száma."
#. module: sale_stock #. module: sale_stock
#: model:ir.model,name:sale_stock.model_stock_picking #: model:ir.model,name:sale_stock.model_stock_picking
msgid "Picking List" msgid "Picking List"
msgstr "Kiszedési lista" msgstr "Kiválogatási lista"
#. module: sale_stock #. module: sale_stock
#: field:sale.shop,warehouse_id:0 #: field:sale.shop,warehouse_id:0
@ -238,7 +240,7 @@ msgstr "Kiszállítás átfutási idő"
#. module: sale_stock #. module: sale_stock
#: model:process.node,note:sale_stock.process_node_deliveryorder0 #: model:process.node,note:sale_stock.process_node_deliveryorder0
msgid "Document of the move to the customer." msgid "Document of the move to the customer."
msgstr "Dokumentum a vevőnek történő mozgásról." msgstr "Dokumentum a vevőhöz történő mozgatásról."
#. module: sale_stock #. module: sale_stock
#: view:sale.order:0 #: view:sale.order:0
@ -248,12 +250,12 @@ msgstr "Kiszállítási kézbesítési bizonylatok áttekintése"
#. module: sale_stock #. module: sale_stock
#: field:sale.order.line,move_ids:0 #: field:sale.order.line,move_ids:0
msgid "Inventory Moves" msgid "Inventory Moves"
msgstr "Leltármozgás" msgstr "Leltárkészlet mozgás"
#. module: sale_stock #. module: sale_stock
#: view:sale.config.settings:0 #: view:sale.config.settings:0
msgid "Default Options" msgid "Default Options"
msgstr "Alapértelmezett lehetőség" msgstr "Alapértelmezett lehetőségek"
#. module: sale_stock #. module: sale_stock
#: field:sale.config.settings,module_project_mrp:0 #: field:sale.config.settings,module_project_mrp:0
@ -266,8 +268,8 @@ msgid ""
"The invoice is created automatically if the shipping policy is 'Invoice from " "The invoice is created automatically if the shipping policy is 'Invoice from "
"pick' or 'Invoice on order after delivery'." "pick' or 'Invoice on order after delivery'."
msgstr "" msgstr ""
"A számla automatikusan létrejön, ha a kiszállítási szabály: számlázás " "A számla automatikusan létrejön, ha a kiszállítási szabály: 'számlázás "
"kiszedésből vagy számlázás kiszállítás után." "kiszedésből' vagy 'számlázás kiszállítás után'."
#. module: sale_stock #. module: sale_stock
#: field:sale.order.line,procurement_id:0 #: field:sale.order.line,procurement_id:0
@ -285,7 +287,7 @@ msgstr "Kiszállított"
#: code:addons/sale_stock/sale_stock.py:265 #: code:addons/sale_stock/sale_stock.py:265
#, python-format #, python-format
msgid "invalid mode for test_state" msgid "invalid mode for test_state"
msgstr "érvénytelen mód a tesztállapotban" msgstr "érvénytelen mód a teszt_állapotban"
#. module: sale_stock #. module: sale_stock
#: model:process.transition,note:sale_stock.process_transition_saleprocurement0 #: model:process.transition,note:sale_stock.process_transition_saleprocurement0
@ -296,21 +298,23 @@ msgid ""
"parameters. " "parameters. "
msgstr "" msgstr ""
"A rendszer automatikusan egy beszerzési megbízást hoz létre, amint " "A rendszer automatikusan egy beszerzési megbízást hoz létre, amint "
"megerősítettük az értékesítési megbízást, vagy a számlát kifizették. A " "megerősítettük a vevői megrendelést, vagy a számlát kifizették. A rendszer "
"rendszer az értékesítési megbízásokon keresztül irányítja a szállítói " "az értékesítési megbízásokon keresztül irányítja a szállítói megrendeléseket "
"megrendeléseket és a termékek gyártását is a beállított szabályoknak és az " "és a termékek gyártását is a beállított szabályoknak és a vevői megrendelés "
"értékesítési megbízás paramétereinek megfelelően. " "paramétereinek megfelelően. "
#. module: sale_stock #. module: sale_stock
#: help:sale.config.settings,group_mrp_properties:0 #: help:sale.config.settings,group_mrp_properties:0
msgid "Allows you to tag sales order lines with properties." msgid "Allows you to tag sales order lines with properties."
msgstr "Lehetővé teszi a megrendelési sorok tulajdonságokal való kijelölését" msgstr ""
"Lehetővé teszi a vásárlói megrendelési tételek tulajdonságokkal való "
"címkézését"
#. module: sale_stock #. module: sale_stock
#: field:sale.config.settings,group_invoice_deli_orders:0 #: field:sale.config.settings,group_invoice_deli_orders:0
msgid "Generate invoices after and based on delivery orders" msgid "Generate invoices after and based on delivery orders"
msgstr "" msgstr ""
"Számla generálása később és a kiszállítási kézbesítési bizonylatok alapján" "Számla generálása a kiszállítási kézbesítési bizonylatok alapján és után"
#. module: sale_stock #. module: sale_stock
#: field:sale.config.settings,module_delivery:0 #: field:sale.config.settings,module_delivery:0
@ -346,14 +350,14 @@ msgid ""
msgstr "" msgstr ""
"Lehetővé teszi szállítási mód hozzáadását a megrendelésekhez és a " "Lehetővé teszi szállítási mód hozzáadását a megrendelésekhez és a "
"kiszállítási kézbesítési bizonylatokhoz.\n" "kiszállítási kézbesítési bizonylatokhoz.\n"
" Meghatározhatja a saját szállítóját és szállítási hálózatát " " Meghatározhatja a saját szállítóját és szállítási hálózat "
"külön árárt.\n" "külön árát.\n"
" Ez a delivery modult telepíti." " Ez a delivery (szállítás) modult telepíti."
#. module: sale_stock #. module: sale_stock
#: field:sale.config.settings,default_picking_policy:0 #: field:sale.config.settings,default_picking_policy:0
msgid "Deliver all at once when all products are available." msgid "Deliver all at once when all products are available."
msgstr "Egyszerre történő szállítás, ha az összes termék rendelkezésre áll." msgstr "Egyszerre szállítsa, ha az összes termék rendelkezésre áll."
#. module: sale_stock #. module: sale_stock
#: model:res.groups,name:sale_stock.group_invoice_deli_orders #: model:res.groups,name:sale_stock.group_invoice_deli_orders
@ -375,7 +379,7 @@ msgstr "Az eladott anyagok beszerzése"
msgid "" msgid ""
"Pick 'Deliver each product when available' if you allow partial delivery." "Pick 'Deliver each product when available' if you allow partial delivery."
msgstr "" msgstr ""
"Válasszon ki 'Szállítson ki egyesével terméket, amint az elérhető' ha rés " "Válasszon ki 'Szállítson ki egyesével terméket, amint az elérhető' ha rész "
"szállítmányt akar megengedni." "szállítmányt akar megengedni."
#. module: sale_stock #. module: sale_stock
@ -395,7 +399,7 @@ msgid ""
"It indicates that the sales order has been delivered. This field is updated " "It indicates that the sales order has been delivered. This field is updated "
"only after the scheduler(s) have been launched." "only after the scheduler(s) have been launched."
msgstr "" msgstr ""
"Jelzi, hogy az értékesítési megbízás kiszállításra került. Ez a mező csak " "Jelzi, hogy a vásárlói megrendelés kiszállításra került. Ez a mező csak "
"akkor frissül, ha az ütemező(k) elindult(ak)." "akkor frissül, ha az ütemező(k) elindult(ak)."
#. module: sale_stock #. module: sale_stock
@ -406,19 +410,18 @@ msgstr "Tulajdonságok"
#. module: sale_stock #. module: sale_stock
#: field:sale.config.settings,group_mrp_properties:0 #: field:sale.config.settings,group_mrp_properties:0
msgid "Product properties on order lines" msgid "Product properties on order lines"
msgstr "Termék tulajdonságok a megrendelés sorain" msgstr "Termék tulajdonságok a megrendelés tétel sorain"
#. module: sale_stock #. module: sale_stock
#: help:sale.config.settings,default_order_policy:0 #: help:sale.config.settings,default_order_policy:0
msgid "" msgid ""
"You can generate invoices based on sales orders or based on shippings." "You can generate invoices based on sales orders or based on shippings."
msgstr "" msgstr "Létrehozhat számlát vásárlói megrendelés vagy kiszállítások alapján."
"Létrehozhat számlát értékesítési megbízások vagy kiszállítások alapján."
#. module: sale_stock #. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_report #: model:ir.model,name:sale_stock.model_sale_report
msgid "Sales Orders Statistics" msgid "Sales Orders Statistics"
msgstr "Értékesítési megbízási statisztikák" msgstr "Vevői megrendelési statisztikák"
#. module: sale_stock #. module: sale_stock
#: model:ir.model,name:sale_stock.model_res_company #: model:ir.model,name:sale_stock.model_res_company
@ -441,8 +444,8 @@ msgstr ""
" kiválasztott felhasználó és kiválasztott dátum időkimutatás " " kiválasztott felhasználó és kiválasztott dátum időkimutatás "
"sor tételeibe, ennek értelmében bármilyen módon létrehozhat, szerkeszthet " "sor tételeibe, ennek értelmében bármilyen módon létrehozhat, szerkeszthet "
"és törölhet \n" "és törölhet \n"
" és automatikusan létrehoz terv feladatokat a beszerzés " " és automatikusan létrehozhat terv feladatokat a beszerzés "
"soraiból.\n" "tétel soraiból.\n"
" Ez a project_timesheet és project_mrp modult telepíti." " Ez a project_timesheet és project_mrp modult telepíti."
#. module: sale_stock #. module: sale_stock
@ -452,7 +455,7 @@ msgid ""
"order." "order."
msgstr "" msgstr ""
"Lehetővé teszi különböző szállítási és számlázási cím meghatározását a " "Lehetővé teszi különböző szállítási és számlázási cím meghatározását a "
"megrendelésekhez." "vásárlói megrendelésekhez."
#. module: sale_stock #. module: sale_stock
#: model:process.node,note:sale_stock.process_node_saleprocurement0 #: model:process.node,note:sale_stock.process_node_saleprocurement0
@ -460,8 +463,8 @@ msgid ""
"One Procurement order for each sales order line and for each of the " "One Procurement order for each sales order line and for each of the "
"components." "components."
msgstr "" msgstr ""
"Egy beszerzési megbízás minden egyes értékesítési megbízási sorhoz és minden " "Egy beszerzési megbízás minden egyes vásárlói megrendelés tétel sorhoz és "
"egyes alkotóelemhez." "minden egyes alkotóelemhez."
#. module: sale_stock #. module: sale_stock
#: model:process.transition.action,name:sale_stock.process_transition_action_assign0 #: model:process.transition.action,name:sale_stock.process_transition_action_assign0
@ -490,14 +493,14 @@ msgid ""
"instead of delivering each product when it is available. This may have an " "instead of delivering each product when it is available. This may have an "
"impact on the shipping price." "impact on the shipping price."
msgstr "" msgstr ""
"A megrendelések alapértelmezetten az összes termék egyszerre történő " "A vásárlói megrendelések alapértelmezetten az összes termék egyszerre "
"kiszállítására van beállítva, nem pedig az egyes termékek elérhetőségétől " "történő kiszállítására van beállítva, nem pedig az egyes termékek "
"függően. Ez befolyással lehet a szállítási árra." "elérhetőségétől függően. Ez befolyással lehet a szállítási árra."
#. module: sale_stock #. module: sale_stock
#: selection:sale.config.settings,default_order_policy:0 #: selection:sale.config.settings,default_order_policy:0
msgid "Invoice based on sales orders" msgid "Invoice based on sales orders"
msgstr "Megrendeléseken alapuló számla" msgstr "Vásárlói megrendeléseken alapuló számla"
#. module: sale_stock #. module: sale_stock
#: model:process.node,name:sale_stock.process_node_invoiceafterdelivery0 #: model:process.node,name:sale_stock.process_node_invoiceafterdelivery0
@ -517,7 +520,8 @@ msgid ""
"In order to delete a confirmed sales order, you must cancel it.\n" "In order to delete a confirmed sales order, you must cancel it.\n"
"To do so, you must first cancel related picking for delivery orders." "To do so, you must first cancel related picking for delivery orders."
msgstr "" msgstr ""
"Egy visszaigazolt megrendelés törléséhez, először vissza kell azt vonni.\n" "Egy visszaigazolt vásárlói megrendelés törléséhez, először vissza kell azt "
"vonni.\n"
"Ehhez, először az ide tartozó megrendelési kiválogatási listákat kell " "Ehhez, először az ide tartozó megrendelési kiválogatási listákat kell "
"törölni." "törölni."
@ -534,7 +538,7 @@ msgstr "Kiszállított"
#. module: sale_stock #. module: sale_stock
#: model:process.transition,name:sale_stock.process_transition_invoiceafterdelivery0 #: model:process.transition,name:sale_stock.process_transition_invoiceafterdelivery0
msgid "Create Invoice" msgid "Create Invoice"
msgstr "Számla készítése" msgstr "Számla létrehozás"
#. module: sale_stock #. module: sale_stock
#: field:sale.config.settings,task_work:0 #: field:sale.config.settings,task_work:0
@ -544,14 +548,14 @@ msgstr "Számlák készítése a feladat tevékenységek alapján"
#. module: sale_stock #. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_advance_payment_inv #: model:ir.model,name:sale_stock.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice" msgid "Sales Advance Payment Invoice"
msgstr "Értékesítési Fizetési számla" msgstr "Vevői díjbekérő előlegszámla"
#. module: sale_stock #. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:523 #: code:addons/sale_stock/sale_stock.py:523
#, python-format #, python-format
msgid "You must first cancel stock moves attached to this sales order line." msgid "You must first cancel stock moves attached to this sales order line."
msgstr "" msgstr ""
"Először érvénytelenítenie kell az ehhez az értékesítési megbízási sorhoz " "Először érvénytelenítenie kell az ehhez a vásárlói megrendelési tétel sorhoz "
"tartozó készletmozgásokat." "tartozó készletmozgásokat."
#. module: sale_stock #. module: sale_stock
@ -569,12 +573,12 @@ msgstr "Nemzetközi Kereskedelmi Feltételek"
#: code:addons/sale_stock/sale_stock.py:522 #: code:addons/sale_stock/sale_stock.py:522
#, python-format #, python-format
msgid "Cannot cancel sales order line!" msgid "Cannot cancel sales order line!"
msgstr "A megrendelés sorát nem tudja visszavonni!" msgstr "A vásárlói megrendelés tétel sorát nem tudja visszavonni!"
#. module: sale_stock #. module: sale_stock
#: model:process.transition.action,name:sale_stock.process_transition_action_cancelassignation0 #: model:process.transition.action,name:sale_stock.process_transition_action_cancelassignation0
msgid "Cancel Assignation" msgid "Cancel Assignation"
msgstr "Számla sztornó" msgstr "Hozzárendelés megszüntetése"
#. module: sale_stock #. module: sale_stock
#: model:process.node,note:sale_stock.process_node_invoiceafterdelivery0 #: model:process.node,note:sale_stock.process_node_invoiceafterdelivery0
@ -608,7 +612,7 @@ msgstr ""
#. module: sale_stock #. module: sale_stock
#: model:process.node,name:sale_stock.process_node_saleorderprocurement0 #: model:process.node,name:sale_stock.process_node_saleorderprocurement0
msgid "Sales Order Requisition" msgid "Sales Order Requisition"
msgstr "Értékesítési megbízás igénylés" msgstr "Vásárlói megrendelés igény"
#. module: sale_stock #. module: sale_stock
#: model:process.transition,name:sale_stock.process_transition_deliver0 #: model:process.transition,name:sale_stock.process_transition_deliver0

View File

@ -39,57 +39,10 @@ class sale_report(osv.osv):
('cancel', 'Cancelled') ('cancel', 'Cancelled')
], 'Order Status', readonly=True), ], 'Order Status', readonly=True),
} }
def init(self, cr):
tools.drop_view_if_exists(cr, 'sale_report') def _select(self):
# TODO: make parent view extensible similarly to invoice analysis and return super(sale_report, self)._select() + ", s.warehouse_id as warehouse_id, s.shipped, s.shipped::integer as shipped_qty_1"
# remove the duplication
cr.execute(""" def _group_by(self):
create or replace view sale_report as ( return super(sale_report, self)._group_by() + ", s.warehouse_id, s.shipped"
select
min(l.id) as id,
l.product_id as product_id,
t.uom_id as product_uom,
sum(l.product_uom_qty / u.factor * u2.factor) as product_uom_qty,
sum(l.product_uom_qty * l.price_unit * (100.0-l.discount) / 100.0) as price_total,
count(*) as nbr,
s.date_order as date,
s.date_confirm as date_confirm,
to_char(s.date_order, 'YYYY') as year,
to_char(s.date_order, 'MM') as month,
to_char(s.date_order, 'YYYY-MM-DD') as day,
s.partner_id as partner_id,
s.user_id as user_id,
s.company_id as company_id,
s.warehouse_id as warehouse_id,
extract(epoch from avg(date_trunc('day',s.date_confirm)-date_trunc('day',s.create_date)))/(24*60*60)::decimal(16,2) as delay,
s.state,
t.categ_id as categ_id,
s.shipped,
s.shipped::integer as shipped_qty_1,
s.pricelist_id as pricelist_id,
s.project_id as analytic_account_id
from
sale_order_line l
join sale_order s on (l.order_id=s.id)
left join product_product p on (l.product_id=p.id)
left join product_template t on (p.product_tmpl_id=t.id)
left join product_uom u on (u.id=l.product_uom)
left join product_uom u2 on (u2.id=t.uom_id)
group by
l.product_id,
l.order_id,
t.uom_id,
t.categ_id,
s.date_order,
s.date_confirm,
s.partner_id,
s.user_id,
s.warehouse_id,
s.company_id,
s.state,
s.shipped,
s.pricelist_id,
s.project_id
)
""")

View File

@ -17,6 +17,10 @@
<field name="model">sale.report</field> <field name="model">sale.report</field>
<field name="inherit_id" ref="sale.view_order_product_search"/> <field name="inherit_id" ref="sale.view_order_product_search"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<filter name="Sales" position="after">
<separator/>
<filter icon="terp-accessories-archiver" string="Picked" domain="[('shipped','=',True)]"/>
</filter>
<xpath expr="//group/filter[@string='Status']" position="after"> <xpath expr="//group/filter[@string='Status']" position="after">
<filter string="Warehouse" context="{'group_by':'warehouse_id'}"/> <filter string="Warehouse" context="{'group_by':'warehouse_id'}"/>
</xpath> </xpath>

View File

@ -19,6 +19,8 @@
# #
############################################################################## ##############################################################################
import openerp
from openerp import SUPERUSER_ID
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp.tools.translate import _ from openerp.tools.translate import _
@ -75,12 +77,13 @@ class sale_configuration(osv.osv_memory):
} }
def set_sale_defaults(self, cr, uid, ids, context=None): def set_sale_defaults(self, cr, uid, ids, context=None):
if uid != SUPERUSER_ID and not self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager'):
raise openerp.exceptions.AccessError(_("Only administrators can change the settings"))
ir_values = self.pool.get('ir.values') ir_values = self.pool.get('ir.values')
ir_model_data = self.pool.get('ir.model.data')
wizard = self.browse(cr, uid, ids)[0] wizard = self.browse(cr, uid, ids)[0]
default_picking_policy = 'one' if wizard.default_picking_policy else 'direct' default_picking_policy = 'one' if wizard.default_picking_policy else 'direct'
ir_values.set_default(cr, uid, 'sale.order', 'picking_policy', default_picking_policy) ir_values.set_default(cr, SUPERUSER_ID, 'sale.order', 'picking_policy', default_picking_policy)
res = super(sale_configuration, self).set_sale_defaults(cr, uid, ids, context) res = super(sale_configuration, self).set_sale_defaults(cr, uid, ids, context)
return res return res

View File

@ -44,7 +44,7 @@ class sale_order(osv.osv):
company_id = self.pool.get('res.users')._get_company(cr, uid, context=context) company_id = self.pool.get('res.users')._get_company(cr, uid, context=context)
warehouse_ids = self.pool.get('stock.warehouse').search(cr, uid, [('company_id', '=', company_id)], context=context) warehouse_ids = self.pool.get('stock.warehouse').search(cr, uid, [('company_id', '=', company_id)], context=context)
if not warehouse_ids: if not warehouse_ids:
raise osv.except_osv(_('Error!'), _('There is no warehouse defined for selected company.')) return False
return warehouse_ids[0] return warehouse_ids[0]
def _get_shipped(self, cr, uid, ids, name, args, context=None): def _get_shipped(self, cr, uid, ids, name, args, context=None):
@ -371,7 +371,7 @@ class sale_order_line(osv.osv):
if not isMto: if not isMto:
uom2 = False uom2 = False
if uom: if uom:
uom2 = product_uom_obj.browse(cr, uid, uom) uom2 = product_uom_obj.browse(cr, uid, uom, context=context)
if product_obj.uom_id.category_id.id != uom2.category_id.id: if product_obj.uom_id.category_id.id != uom2.category_id.id:
uom = False uom = False
if not uom2: if not uom2:

View File

@ -5,7 +5,7 @@
<!-- Add menu: Billing - Deliveries to invoice --> <!-- Add menu: Billing - Deliveries to invoice -->
<record id="outgoing_picking_list_to_invoice" model="ir.actions.act_window"> <record id="outgoing_picking_list_to_invoice" model="ir.actions.act_window">
<field name="name">Deliveries to Invoice</field> <field name="name">Deliveries to Invoice</field>
<field name="res_model">stock.picking</field> <field name="res_model">stock.picking.out</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form,calendar</field> <field name="view_mode">tree,form,calendar</field>

4781
addons/stock/i18n/es_PE.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -43,9 +43,9 @@ class survey_analysis(report_rml):
<pageGraphics> <pageGraphics>
<fill color="black"/> <fill color="black"/>
<stroke color="black"/> <stroke color="black"/>
<setFont name="DejaVu Sans" size="8"/> <setFont name="DejaVuSans" size="8"/>
<drawString x="1.3cm" y="28.3cm"> """+to_xml(rml_obj.formatLang(time.strftime("%Y-%m-%d %H:%M:%S"),date_time=True))+"""</drawString> <drawString x="1.3cm" y="28.3cm"> """+to_xml(rml_obj.formatLang(time.strftime("%Y-%m-%d %H:%M:%S"),date_time=True))+"""</drawString>
<setFont name="DejaVu Sans Bold" size="10"/> <setFont name="DejaVuSans-Bold" size="10"/>
<drawString x="9.8cm" y="28.3cm">"""+ to_xml(company.name) +"""</drawString> <drawString x="9.8cm" y="28.3cm">"""+ to_xml(company.name) +"""</drawString>
<stroke color="#000000"/> <stroke color="#000000"/>
<lines>1.3cm 28.1cm 20cm 28.1cm</lines> <lines>1.3cm 28.1cm 20cm 28.1cm</lines>

View File

@ -6,6 +6,8 @@
} }
.openerp .oe_kanban_survey { .openerp .oe_kanban_survey {
width: 200px; /* Customize height and width according bootstrap3 */
width: 212px;
min-height: 86px !important;
/* End of customize */
} }