[MERGE]with main

bzr revid: prajapatijitendra7969@gmail.com-20131212084543-j15w6z4y0osluijw
This commit is contained in:
Jitendra Prajapati (OpenERP) 2013-12-12 14:15:43 +05:30
commit ebf0c80a00
117 changed files with 26554 additions and 703 deletions

View File

@ -28,7 +28,7 @@ import time
import openerp
from openerp import SUPERUSER_ID
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.float_utils import float_round
@ -579,15 +579,18 @@ class account_account(osv.osv):
except:
pass
if name:
ids = self.search(cr, user, [('code', '=like', name+"%")]+args, limit=limit)
if not ids:
ids = self.search(cr, user, [('shortcut', '=', name)]+ args, limit=limit)
if not ids:
ids = self.search(cr, user, [('name', operator, name)]+ args, limit=limit)
if not ids and len(name.split()) >= 2:
#Separating code and name of account for searching
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)]+ args, limit=limit)
if operator not in expression.NEGATIVE_TERM_OPERATORS:
ids = self.search(cr, user, ['|', ('code', '=like', name+"%"), '|', ('shortcut', '=', name), ('name', operator, name)]+args, limit=limit)
if not ids and len(name.split()) >= 2:
#Separating code and name of account for searching
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)]+ args, limit=limit)
else:
ids = self.search(cr, user, ['&','!', ('code', '=like', name+"%"), ('name', operator, name)]+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:
ids = self.search(cr, user, args, context=context, limit=limit)
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_move_line = self.pool.get('account.move.line')
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
amount = 0
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
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')
ir_values_obj = self.pool.get('ir.values')
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], {
'currency_id': obj_wizard.currency_id.id
})
except ValueError, e:
except ValueError:
pass
# 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 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, ))
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)
acc_ana_line_obj.create(cr, uid, vals_line)
return True
@ -1207,20 +1209,6 @@ class account_move_line(osv.osv):
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.'))
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)
# CREATE Taxes
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"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2012-12-27 22:48+0000\n"
"Last-Translator: Balint (eSolve) <Unknown>\n"
"PO-Revision-Date: 2013-12-10 17:32+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 05:27+0000\n"
"X-Generator: Launchpad (build 16761)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@ -26,6 +26,8 @@ msgstr "Kifizetési rendszer"
msgid ""
"An account fiscal position could be defined only once time on same accounts."
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
#: help:account.tax.code,sequence:0
@ -33,6 +35,8 @@ msgid ""
"Determine the display order in the report 'Accounting \\ Reporting \\ "
"Generic Reporting \\ Taxes \\ Taxes Report'"
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
#: view:account.move.reconcile:0
@ -60,7 +64,7 @@ msgstr "Rendezetlen összeg"
#: code:addons/account/account_bank_statement.py:369
#, python-format
msgid "Journal item \"%s\" is not valid."
msgstr ""
msgstr "A \"%s\" könyvelési napló tétel nem érvényes."
#. module: account
#: 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
#, python-format
msgid "Bad Account!"
msgstr ""
msgstr "Eltévesztett könyvelési számla!"
#. module: account
#: view:account.move:0
@ -92,6 +96,8 @@ msgid ""
"Error!\n"
"You cannot create recursive account templates."
msgstr ""
"Hiba!\n"
"Nem hozhat létre visszatérő számla sablonokat."
#. module: account
#. openerp-web
@ -102,7 +108,7 @@ msgstr ""
#: code:addons/account/static/src/xml/account_move_reconciliation.xml:30
#, python-format
msgid "Reconcile"
msgstr "Párosítás"
msgstr "Egyeztetés"
#. module: account
#: field:account.bank.statement,name:0
@ -114,7 +120,7 @@ msgstr "Párosítás"
#: xsl:account.transfer:0
#: field:cash.box.in,ref:0
msgid "Reference"
msgstr "Hivatkozás"
msgstr "Információforrás"
#. module: account
#: 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 "
"term without removing it."
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
#: code:addons/account/account.py:641
@ -151,7 +158,7 @@ msgstr "Figyelem!"
#: code:addons/account/account.py:3197
#, python-format
msgid "Miscellaneous Journal"
msgstr "Vegyes napló"
msgstr "Vegyes könyvelési napló"
#. module: account
#: 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 "
"Entries'."
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
#: field:account.fiscal.position.account,account_src_id:0
#: field:account.fiscal.position.account.template,account_src_id:0
msgid "Account Source"
msgstr "Eredeti főkönyvi számla"
msgstr "Forrás főkönyvi számla"
#. module: account
#: model:ir.actions.act_window,help:account.action_account_period
@ -179,6 +188,14 @@ msgid ""
" </p>\n"
" "
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
#: 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
#: field:accounting.report,label_filter:0
msgid "Column Label"
msgstr ""
msgstr "Oszlop elnevezés"
#. module: account
#: help:account.config.settings,code_digits:0
msgid "No. of digits to use for account code"
msgstr ""
msgstr "Könyvelési kódnak használt számlyegyek száma"
#. module: account
#: 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 "
"on the invoice tax lines by default."
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
#: 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 "
"entries."
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
#: field:account.config.settings,sale_refund_sequence_next:0
msgid "Next credit note number"
msgstr ""
msgstr "Következő jóváírási értesítés szám"
#. module: account
#: help:account.config.settings,module_account_voucher:0
@ -265,6 +288,9 @@ msgid ""
"sales, purchase, expense, contra, etc.\n"
" This installs the module account_voucher."
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
#: model:ir.actions.act_window,name:account.action_account_use_model_create_entry
@ -296,6 +322,17 @@ msgid ""
" </p>\n"
" "
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
#: help:account.installer,charts:0
@ -304,12 +341,12 @@ msgid ""
"accounting needs of your company based on your country."
msgstr ""
"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
#: model:ir.model,name:account.model_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
#: field:account.config.settings,module_account_budget:0
@ -319,7 +356,7 @@ msgstr "Költségvetés kezelés"
#. module: account
#: view:product.template:0
msgid "Purchase Properties"
msgstr "Beszerzés könyvelési beállítások"
msgstr "Beszerzési tulajdonságok"
#. module: account
#: help:account.financial.report,style_overwrite:0
@ -328,17 +365,20 @@ msgid ""
"leave the automatic formatting, it will be computed based on the financial "
"reports hierarchy (auto-computed field 'level')."
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
#: field:account.config.settings,group_multi_currency:0
msgid "Allow multi currencies"
msgstr ""
msgstr "Többféle valuta engedélyezése"
#. module: account
#: code:addons/account/account_invoice.py:77
#, python-format
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
#: selection:account.entries.report,month:0
@ -353,12 +393,12 @@ msgstr "Június"
#: code:addons/account/wizard/account_automatic_reconcile.py:148
#, python-format
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
#: help:account.config.settings,group_analytic_accounting:0
msgid "Allows you to use the analytic accounting."
msgstr ""
msgstr "Főkönyvi számla használatának engedélyezése."
#. module: account
#: view:account.invoice:0
@ -393,12 +433,12 @@ msgstr "Bejövő jóváíró számla"
#. module: account
#: selection:account.journal,type:0
msgid "Opening/Closing Situation"
msgstr "Nyitó/záró"
msgstr "Nyitó/záró állapot"
#. module: account
#: help:account.journal,currency:0
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
#: 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.line:0
msgid "Total Credit"
msgstr "Követel összesen"
msgstr "Összes követelés"
#. module: account
#: help:account.config.settings,module_account_asset:0
@ -421,11 +461,19 @@ msgid ""
"this box, you will be able to do invoicing & payments,\n"
" but not accounting (Journal Items, Chart of Accounts, ...)"
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
#: help:account.bank.statement.line,name:0
msgid "Originator to Beneficiary Information"
msgstr ""
msgstr "Kezdeményezőtől a kedvezményezetthez intézett információ"
#. module: account
#. openerp-web
@ -446,6 +494,7 @@ msgstr "Számlatükör sablon"
#: selection:account.invoice.refund,filter_refund:0
msgid "Modify: create refund, reconcile and create a new draft invoice"
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
#: 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 "
"tax-included line subtotals to be equal to the total amount with taxes."
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
#: 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
#: view:account.journal:0
msgid "Available Coins"
msgstr ""
msgstr "Rendelkezésre álló pénzérmék"
#. module: account
#: field:accounting.report,enable_filter:0
msgid "Enable Comparison"
msgstr ""
msgstr "Összehasonlítás bekapcsolása"
#. module: account
#: view:account.analytic.line:0
@ -527,6 +586,7 @@ msgstr "Gyűjtő célszámla"
#: help:account.invoice.line,sequence:0
msgid "Gives the sequence of this line when displaying the invoice."
msgstr ""
"Ennek a tételsornak a sorszámát adja, amikor a számla kijelzésre kerül."
#. module: account
#: field:account.bank.statement,account_id:0
@ -600,13 +660,13 @@ msgstr "Nincs párosítandó tétel"
#. module: account
#: field:account.config.settings,decimal_precision:0
msgid "Decimal precision on journal entries"
msgstr ""
msgstr "Tizedes pontosság a napló bevitt tételeinél"
#. module: account
#: selection:account.config.settings,period:0
#: selection:account.installer,period:0
msgid "3 Monthly"
msgstr "Negyedéves"
msgstr "3 havonta"
#. module: account
#: field:ir.sequence,fiscal_ids:0
@ -626,6 +686,8 @@ msgid ""
"Specified journal does not have any account move entries in draft state for "
"this period."
msgstr ""
"A kiválasztott napló nem rendelkezik tervezet állapotú számla mozgásokkal "
"erre az időszakra."
#. module: account
#: 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
#, python-format
msgid "Current currency is not configured properly."
msgstr ""
msgstr "A jelenlegi pénznem nincs megfelelően konfigurálva."
#. module: account
#: 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
#, python-format
msgid "SAJ"
msgstr "SAJ"
msgstr "Számlatípusonkénti értékesítés SZTÉ"
#. module: account
#: code:addons/account/account.py:1591
#, python-format
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
#: model:email.template,report_name:account.email_template_edi_invoice
@ -712,7 +774,7 @@ msgstr "Könyvelési időszak"
#: constraint:account.move:0
msgid ""
"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
#: 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 "
"on the invoice tax lines by default."
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
#: view:account.account:0
@ -733,17 +798,17 @@ msgstr ""
#: code:addons/account/report/account_partner_ledger.py:272
#, python-format
msgid "Receivable Accounts"
msgstr "Vevő számlák"
msgstr "Követelés számlák"
#. module: account
#: view:account.config.settings:0
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
#: view:account.invoice.refund:0
msgid "Create Refund"
msgstr ""
msgstr "Visszatérítés létrehozása"
#. module: account
#: 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
#, python-format
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
#: view:account.invoice:0
@ -787,6 +852,8 @@ msgid ""
"Cannot %s invoice which is already reconciled, invoice should be "
"unreconciled first. You can only refund this invoice."
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
#: selection:account.financial.report,display_detail:0
@ -814,7 +881,7 @@ msgstr "Soronkénti gyűjtőkód tételek"
#. module: account
#: field:account.invoice.refund,filter_refund:0
msgid "Refund Method"
msgstr "Jóváírás módja"
msgstr "Visszatérítés módja"
#. module: account
#: model:ir.ui.menu,name:account.menu_account_report
@ -879,7 +946,7 @@ msgstr "Párosítás visszavonása"
#. module: account
#: model:ir.model,name:account.model_account_analytic_journal_report
msgid "Account Analytic Journal"
msgstr "Gyűjtőnapló"
msgstr "Gyűjtőnapló számla"
#. module: account
#: view:account.invoice:0
@ -1475,7 +1542,7 @@ msgstr "Listázási beállítások"
#. module: account
#: field:account.fiscalyear.close.state,fy_id:0
msgid "Fiscal Year to Close"
msgstr ""
msgstr "Bezárni kívánt üzleti év"
#. module: account
#: field:account.config.settings,sale_sequence_prefix:0
@ -1553,7 +1620,7 @@ msgstr "Adók keresése"
#. module: account
#: model:ir.model,name:account.model_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
#: view:account.model:0
@ -1624,6 +1691,8 @@ msgid ""
"By unchecking the active field, you may hide a fiscal position without "
"deleting it."
msgstr ""
"Az aktív mező üresen hagyásával, eltüntetheti az ÁFA helyét, annak törlése "
"nélkül."
#. module: account
#: model:ir.model,name:account.model_temp_range
@ -2194,7 +2263,7 @@ msgstr "Korosított folyószámla kivonat"
#. module: account
#: view:account.fiscalyear.close.state:0
msgid "Close Fiscal Year"
msgstr ""
msgstr "Üzleti év lezárása"
#. module: account
#. openerp-web
@ -2207,6 +2276,7 @@ msgstr ""
#: sql_constraint:account.fiscal.position.tax:0
msgid "A tax fiscal position could be defined only once time on same taxes."
msgstr ""
"Az adó adóügyi pozíciója csak egyszer határozható meg ugyanarra az adóra."
#. module: account
#: view:account.tax:0
@ -2320,7 +2390,7 @@ msgstr "Részleges tételsorok"
#: view:account.fiscalyear:0
#: field:account.treasury.report,fiscalyear_id:0
msgid "Fiscalyear"
msgstr "Üzleti év"
msgstr "Üzletiév"
#. module: account
#: code:addons/account/wizard/account_move_bank_reconcile.py:53
@ -2963,6 +3033,22 @@ msgid ""
" </p>\n"
" "
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
#: view:account.common.report:0
@ -3912,6 +3998,8 @@ msgid ""
"There is no fiscal year defined for this date.\n"
"Please create one from the configuration of the accounting menu."
msgstr ""
"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
#: view:account.addtmpl.wizard:0
@ -4282,6 +4370,8 @@ msgid ""
"The fiscalyear, periods or chart of account chosen have to belong to the "
"same company."
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
#: help:account.tax.code.template,notprintable:0
@ -7344,6 +7434,8 @@ msgid ""
"Error!\n"
"The start date of a fiscal year must precede its end date."
msgstr ""
"Hiba!\n"
"Az üzleti adóügyi év elejének előbb kell lennie mint a végének."
#. module: account
#: view:account.tax.template:0
@ -8276,7 +8368,8 @@ msgstr ""
msgid ""
"Select Fiscal Year which you want to remove entries for its End of year "
"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
#: field:account.tax.template,type_tax_use:0
@ -8397,7 +8490,7 @@ msgstr "Gyűjtőkód karton"
#. module: account
#: view:account.config.settings:0
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
#: view:account.invoice:0
@ -8548,6 +8641,9 @@ msgid ""
"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."
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
#: report:account.invoice:0
@ -8732,7 +8828,7 @@ msgstr ""
#. module: account
#: model:ir.model,name:account.model_account_fiscalyear_close_state
msgid "Fiscalyear Close state"
msgstr "Üzleti év zárása"
msgstr "Üzleti év zárt állapotban"
#. module: account
#: field:account.invoice.refund,journal_id:0
@ -9161,7 +9257,7 @@ msgstr ""
#. module: account
#: field:account.config.settings,has_fiscal_year:0
msgid "Company has a fiscal year"
msgstr ""
msgstr "Vállalkozásnak van üzleti, adóügyi éve"
#. module: account
#: help:account.tax,child_depend:0
@ -9599,6 +9695,9 @@ msgid ""
"The period is invalid. Either some periods are overlapping or the period's "
"dates are not matching the scope of the fiscal year."
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
#: report:account.overdue:0
@ -9897,7 +9996,7 @@ msgstr "Gyűjtőkódokból"
#. module: account
#: view:account.installer:0
msgid "Configure your Fiscal Year"
msgstr ""
msgstr "Állítsa be az üzleti, adóügyi évét"
#. module: account
#: field:account.period,name:0
@ -10834,6 +10933,8 @@ msgstr "Könyvelési tételsorok jóváhagyása"
msgid ""
"The fiscal position will determine taxes and accounts used for the partner."
msgstr ""
"Az ÁFA pozíció meghatározza a partnerre vonatkozó adókat és főkönyvi "
"számlákat."
#. module: account
#: model:process.node,note:account.process_node_supplierpaidinvoice0
@ -10906,7 +11007,7 @@ msgstr ""
#: view:ir.sequence:0
#: model:ir.ui.menu,name:account.menu_action_account_fiscalyear
msgid "Fiscal Years"
msgstr "Üzleti év"
msgstr "Üzleti évek"
#. module: account
#: help:account.analytic.journal,active:0

View File

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

View File

@ -295,7 +295,7 @@
</para>
</td>
<td>
<para style="terp_tblheader_Details"><b>Total:</b></para>
<para style="terp_default_9"><b>Total:</b></para>
</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>

View File

@ -22,13 +22,12 @@
import time
import datetime
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.translate import _
from openerp.osv import fields, osv
from openerp import tools
class account_config_settings(osv.osv_memory):
_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):
""" 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')
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)
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)
def set_chart_of_accounts(self, cr, uid, ids, context=None):

View File

@ -1,4 +1,7 @@
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):
_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):
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)
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')
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:
price = i_line.product_id.standard_price * i_line.quantity
price = price_unit * i_line.quantity
return price
if inv.type in ('out_invoice','out_refund'):
@ -60,12 +64,13 @@ class account_invoice_line(osv.osv):
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
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({
'type':'src',
'name': i_line.name[:64],
'price_unit':i_line.product_id.standard_price,
'price_unit':price_unit,
'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,
'product_id':i_line.product_id.id,
'uos_id':i_line.uos_id.id,
@ -76,9 +81,9 @@ class account_invoice_line(osv.osv):
res.append({
'type':'src',
'name': i_line.name[:64],
'price_unit':i_line.product_id.standard_price,
'price_unit':price_unit,
'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,
'product_id':i_line.product_id.id,
'uos_id':i_line.uos_id.id,

View File

@ -28,6 +28,15 @@ class stock_picking(osv.osv):
_inherit = "stock.picking"
_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,
group=False, type='out_invoice', context=None):
'''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"/>
<!-- Avoid auto-including this user in any default group, just like a typical portal member -->
<field name="groups_id" eval="[(5,)]"/>
<!-- no alias for portal users -->
<field name="alias_name" eval="False"/>
<!-- allow signuped users to have a alias -->
<field name="alias_name">_usertemplate</field>
</record>
<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)
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)
return self.copy(cr, uid, template_user_id, values, context=context)

View File

@ -1,12 +1,14 @@
.oe_import > p {
margin-left: 8px;
margin-right: 8px;
margin-top: 13px; /* Customize space according bootstrap3 */
text-align: justify
}
.oe_import h2 {
margin-top: 0;
margin-bottom: 5px;
font-size: 1.5em; /* Customize according bootstrap3 */
}
.oe_padding {
@ -22,6 +24,14 @@
border: solid 1px #dddddd;
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{
margin-top: 8px;
}
@ -40,7 +50,7 @@
}
.oe_import .oe_import_options p {
margin: 0;
margin: 0 0 -7px 0; /* Customize margin-bottom of <p> according bootstrap3 */
padding: 0;
}
.oe_import .oe_import_options label {
@ -69,6 +79,14 @@
.oe_import .oe_import_report_more {
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 {
display: table;

View File

@ -373,7 +373,7 @@ openerp.base_import = function (instance) {
return $.when([{
type: 'error',
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):
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:
user = self.pool.get('res.users').browse(cr, uid, uid, context)
font_name = wizard.font.name
@ -76,7 +76,7 @@ class base_config_settings(osv.osv_memory):
return {}
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.
# It is defined here because it is inherited independently in modules sale, crm,

View File

@ -94,7 +94,7 @@
<label for="font" />
<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"/>
</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="context">{
'search_default_section_id': [active_id],
'search_default_open': 1,
'default_section_id': active_id,
'default_type': 'lead',
'stage_type': 'lead',
@ -43,7 +42,6 @@
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
<field name="context">{
'search_default_section_id': [active_id],
'search_default_assigned_to_me': 1,
'default_section_id': active_id,
'stage_type': 'opportunity',
'default_type': 'opportunity',
@ -64,6 +62,26 @@
</field>
</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 -->
<record model="ir.ui.view" id="crm_case_section_salesteams_view_kanban">
@ -99,13 +117,25 @@
<div class="oe_items_list">
<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="%(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 class="oe_salesteams_opportunities">
<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 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>
</t>

View File

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

View File

@ -66,9 +66,6 @@
<field name="model">crm.lead.report</field>
<field name="arch" type="xml">
<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"
domain="[('probability', '=', 0), ('stage_id.sequence', '=', 1)]"/>
<filter string="Won" name="won"
@ -115,7 +112,7 @@
<separator orientation="vertical" />
<filter string="Year" icon="terp-go-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'}"/>
<filter string="Day" icon="terp-go-today"
domain="[]" context="{'group_by':'creation_day'}"/>
@ -168,9 +165,9 @@
<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_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="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>
</record>
<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="res_model">crm.lead.report</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="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>
</record>

View File

@ -91,5 +91,19 @@
<field name="groups" eval="[(4, ref('base.group_sale_salesman_all_leads'))]"/>
</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>
</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 {
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 {
position: relative;
margin: 10px;
position: relative;
/* 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 {
width: 160px;
height: 22px;
margin: 0 !important;
position: relative;
display: inline-block;
}
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list a:hover {
text-decoration: underline !important;
width: 160px;
height: 22px;
margin: 0 !important;
position: relative;
display: inline-block;
float: left;
}
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_items_list div a:nth-child(2n) {
position: absolute;
left: 90px;
top: 0;
position: absolute;
left: 90px;
top: 0;
}
.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 {
text-align: center;
margin: 3px 0;
text-align: center;
margin: 3px 0;
}
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center .oe_sum {
margin: 0;
font-size: 40px;
margin: 0;
font-size: 40px;
}
.openerp .oe_kanban_view .oe_kanban_crm_salesteams .oe_center .oe_subsum {
font-size: 10px;
font-size: 10px;
}
.openerp .oe_kanban_view .oe_justgage {
color: black;
display: inline-block;
.openerp .oe_kanban_view .oe_salesteams_help {
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.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({
on_card_clicked: function() {
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),
}
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):
"""
Default get for name, opportunity_ids.

View File

@ -31,7 +31,7 @@
</field>
</group>
<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"
attrs="{'required': [('action', '=', 'exist')], 'invisible':[('action','!=','exist')]}"
class="oe_inline"/>

View File

@ -51,7 +51,9 @@
<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"/>
<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/>
<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"/>

View File

@ -69,7 +69,11 @@ class document_file(osv.osv):
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"""
if not isinstance(ids, list):
ids = [ids]
super(document_file, self).check(cr, uid, ids, mode, context=context, values=values)
if ids:
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],
)
# Add report in attachments
# Add report in attachments: generate once for all template_res_ids
if template.report_template:
for res_id in template_res_ids:
attachments = []
@ -387,8 +387,7 @@ class email_template(osv.osv):
if not report_name.endswith(ext):
report_name += ext
attachments.append((report_name, result))
values['attachments'] = attachments
results[res_id]['attachments'] = attachments
return results

View File

@ -60,10 +60,9 @@ class config(osv.Model):
def get_access_token(self, cr, uid, scope=None, context=None):
ir_config = self.pool['ir.config_parameter']
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 = self.pool['res.users'].read(cr, uid, uid, "groups_id")
user_is_admin = self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager')
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)
else:
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)
content = urllib2.urlopen(req).read()
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)
else:
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 logging
from lxml import etree
@ -67,24 +68,24 @@ class config(osv.osv):
request = '''<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:batch="http://schemas.google.com/gdata/batch"
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>
<batch:id>A1</batch:id>
<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"
href="https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R1C1"/>
<gs:cell row="1" col="1" inputValue="%s"/>
href="https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full/R1C1"/>
<gs:cell row="1" col="1" inputValue="{formula}"/>
</entry>
<entry>
<batch:id>A2</batch:id>
<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"
href="https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R60C15"/>
<gs:cell row="60" col="15" inputValue="%s"/>
href="https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full/R60C15"/>
<gs:cell row="60" col="15" inputValue="{config}"/>
</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:
req = urllib2.Request(

View File

@ -5,9 +5,9 @@
<!--logo-->
<fill 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>
<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>
<stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>
@ -17,9 +17,9 @@
<!--logo-->
<fill 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>
<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>
<stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>

View File

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

View File

@ -5,9 +5,9 @@
<!--logo-->
<fill 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>
<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>
<stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>
@ -17,9 +17,9 @@
<!--logo-->
<fill 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>
<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>
<stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>

View File

@ -5,9 +5,9 @@
<!--logo-->
<fill 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>
<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>
<stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>
@ -17,9 +17,9 @@
<!--logo-->
<fill 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>
<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>
<stroke color="#000000"/>
<lines>1.3cm 19.3cm 28.5cm 19.3cm</lines>

View File

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

View File

@ -1,5 +1,5 @@
.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 {

View File

@ -80,7 +80,7 @@
});
},
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();
top = Math.max(top - $(window).scrollTop(), 0);
this.$el.css("top", top);

View File

@ -211,5 +211,5 @@ class im_session(osv.osv):
_inherit = 'im.session'
_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"
"Report-Msgid-Bugs-To: support@openerp.com\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"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 06:29+0000\n"
"X-Generator: Launchpad (build 16761)\n"
"X-Launchpad-Export-Date: 2013-12-03 05:41+0000\n"
"X-Generator: Launchpad (build 16856)\n"
#. module: mail
#: view:mail.followers:0
@ -1791,7 +1791,7 @@ msgstr "Altípusok"
#. module: mail
#: model:ir.model,name:mail.model_mail_alias
msgid "Email Aliases"
msgstr "e-amil álnevek"
msgstr "Email álnevek"
#. module: mail
#: field:mail.group,image_small:0

View File

@ -817,12 +817,11 @@ class mail_message(osv.Model):
return email_reply_to
def _get_message_id(self, cr, uid, values, context=None):
message_id = None
if not values.get('message_id') and values.get('reply_to'):
if values.get('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)
elif not values.get('message_id'):
else:
message_id = tools.generate_tracking_message_id('private')
return message_id
@ -833,7 +832,7 @@ class mail_message(osv.Model):
if 'email_from' not in values: # needed to compute reply_to
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)
if 'reply_to' not in values:
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])
# remove partners that are no longer followers
fol_ids = fol_obj.search(cr, SUPERUSER_ID,
[('res_model', '=', self._name), ('res_id', '=', id), ('partner_id', 'not in', list(new))])
fol_obj.unlink(cr, SUPERUSER_ID, fol_ids)
self.message_unsubscribe(cr, uid, [id], list(old-new))
# add new followers
for partner_id in new - old:
fol_obj.create(cr, SUPERUSER_ID, {'res_model': self._name, 'res_id': id, 'partner_id': partner_id})
self.message_subscribe(cr, uid, [id], list(new-old))
def _search_followers(self, cr, uid, obj, name, args, context):
"""Search function for message_follower_ids
@ -346,6 +343,7 @@ class mail_thread(osv.AbstractModel):
"""
if context is None:
context = {}
thread_id = super(mail_thread, self).create(cr, uid, values, context=context)
# 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
if not context.get('mail_create_nosubscribe'):
self.message_subscribe_users(cr, uid, [thread_id], [uid], context=context)
# auto_subscribe: take values and defaults into account
create_values = dict(values)
for key, val in context.iteritems():
@ -723,8 +722,8 @@ class mail_thread(osv.AbstractModel):
# Private message: should not contain any thread_id
if not model and thread_id:
if assert_model:
assert thread_id == 0, 'Routing: posting a message without model should be with a null res_id (private message).'
_warn('posting a message without model should be with a null res_id (private message), resetting thread_id')
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), received %s, resetting thread_id' % thread_id)
thread_id = 0
# Private message: should have a parent_id (only answers)
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]
"""
assert isinstance(message, Message), 'message must be an email.message.Message at this point'
mail_msg_obj = self.pool['mail.message']
fallback_model = model
# Get email.message.Message variables for future processing
@ -829,31 +829,54 @@ class mail_thread(osv.AbstractModel):
email_to = decode_header(message, 'To')
references = decode_header(message, 'References')
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
# 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)
if ref_match:
thread_id = int(ref_match.group(1))
model = ref_match.group(2) or fallback_model
if thread_id and model in self.pool:
model_obj = self.pool[model]
if 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 reply 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)
compat_mail_msg_ids = mail_msg_obj.search(
cr, uid, [
('message_id', '=', False),
('model', '=', model),
('res_id', '=', thread_id),
], 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 []
# 2. Reply to a private message
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', 'ilike', 'reply_to')
], limit=1, context=context)
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',
email_from, email_to, message_id, mail_message.id, custom_values, uid)
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
# 1) Explicit Attachments -> attachments
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
# 2) text/plain -> <pre/>
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)
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',
subtype=None, parent_id=False, attachments=None, context=None,
content_subtype='html', **kwargs):
@ -1399,28 +1456,7 @@ class mail_thread(osv.AbstractModel):
# 3. Attachments
# - 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)
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))
attachment_ids = self._message_preprocess_attachments(cr, uid, attachments, kwargs.pop('attachment_ids', []), model, thread_id, context)
# 4: mail.message.subtype
subtype_id = False
@ -1508,35 +1544,33 @@ class mail_thread(osv.AbstractModel):
else:
self.check_access_rights(cr, uid, 'write')
for record in self.browse(cr, SUPERUSER_ID, ids, context=context):
existing_pids = set([f.id for f in record.message_follower_ids
if f.id in partner_ids])
existing_pids_dict = {}
fol_ids = mail_followers_obj.search(cr, SUPERUSER_ID, [('res_model', '=', self._name), ('res_id', 'in', 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
# 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
for new_pid in new_pids:
mail_followers_obj.create(cr, SUPERUSER_ID, {
'res_model': self._name,
'res_id': record.id,
'partner_id': new_pid,
'subtype_ids': [(6, 0, subtype_ids)],
}, context=context)
mail_followers_obj.create(
cr, SUPERUSER_ID, {
'res_model': self._name,
'res_id': id,
'partner_id': new_pid,
'subtype_ids': [(6, 0, subtype_ids)],
}, context=context)
return True
@ -1555,7 +1589,14 @@ class mail_thread(osv.AbstractModel):
self.check_access_rights(cr, uid, 'read')
else:
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):
""" 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)
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):
if not self.has_group(cr, uid, 'base.group_user'):
return False

View File

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

View File

@ -378,7 +378,7 @@ class TestMailgateway(TestMail):
frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com',
msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>',
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
self.assertEqual(len(frog_groups), 0,
'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')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# 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
frog_follower_ids = set([p.id for p in frog_group.message_follower_ids])
self.assertEqual(frog_follower_ids, set([p1id, p2id]),
'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
frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.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
self.assertEqual(len(frog_groups), 0,
'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')
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
# 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
msg_ids = self.mail_message.search(cr, uid, [('message_id', 'ilike', '<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>')])
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>',
to='erroneous@example.com>', subject='Re: news (2)',
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_group = self.mail_group.browse(cr, uid, frog_groups[0])
# 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>',
to='erroneous@example.com>', subject='Re: news (3)',
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_group = self.mail_group.browse(cr, uid, frog_groups[0])
# 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>',
to='erroneous@example.com>', subject='Re: news (3)',
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_group = self.mail_group.browse(cr, uid, frog_groups[0])
# Test: author is Raoul (user), not A-Raoul

View File

@ -19,7 +19,9 @@
#
##############################################################################
import base64
import re
from openerp import tools
from openerp import SUPERUSER_ID
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():
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)
else:
subtype = 'mail.mt_comment'
@ -298,7 +306,12 @@ class mail_compose_message(osv.TransientModel):
if mass_mail_mode and wizard.model:
email_dict = rendered_values[res_id]
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 = []
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)

View File

@ -1,13 +1,19 @@
.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 {
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 {
width: 120px;
width: 122px; /* Manage space in between stats */
display: inline-block;
margin: 2px 5px 0px 5px;
text-align: center;

View File

@ -15,9 +15,9 @@
<!--logo-->
<fill 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>
<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>
<stroke color="#000000"/>
<lines>1.3cm 28.1cm 20cm 28.1cm</lines>
@ -29,9 +29,9 @@
<!--logo-->
<fill 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>
<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>
<stroke color="#000000"/>
<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]:
dom_in = result[0]['__domain'].pop()
result[0]['__domain'] = domain + ['|', dom_in, dom_not_in]
result[0]['stage_id_count'] += nb_notes_ws
else:
# add the first stage column
result = [{

View File

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

View File

@ -126,6 +126,7 @@
background: #393939;
background: -moz-linear-gradient(#7b7979, #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 */
@ -659,6 +660,7 @@
.point-of-sale .screen header h2 {
margin-top: 0px;
padding-top: 7px;
font-size: 1.5em /* Customize font according bootstrap3 */
}
.point-of-sale .screen p{
font-size: 18px;

View File

@ -10,7 +10,7 @@
margin: -40px 0 -32px -24px;
position: relative;
padding: 10px 15px;
right: -153px;
right: -125px; /* improved margin according bootstrap3 */
background: #729FCF;
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() {
var p = self.getParent();
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 () {
am.do_action({
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="report_template" ref="sale.report_sale_order"/>
<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[
<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="report_template" ref="account.account_invoices"/>
<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[
<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

View File

@ -15,6 +15,7 @@ access_product_pricelist_item_user,product.pricelist.item.user,model_product_pri
access_product_pricelist_type_partner_manager,product.pricelist.type partner manager,model_product_pricelist_type,base.group_partner_manager,1,0,0,0
access_product_pricelist_partner_manager,product.pricelist partner manager,model_product_pricelist,base.group_partner_manager,1,0,0,0
access_product_product_employee,product.product employee,model_product_product,base.group_user,1,0,0,0
access_prices_history_employee,prices.history employee,model_prices_history,base.group_user,1,0,0,0
access_product_template_sale_manager,product.template salemanager,model_product_template,base.group_sale_manager,1,1,1,1
access_product_product_sale_manager,product.product salemanager,model_product_product,base.group_sale_manager,1,1,1,1
access_product_category_sale_manager,product.category salemanager,product.model_product_category,base.group_sale_manager,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
15 access_product_pricelist_type_partner_manager product.pricelist.type partner manager model_product_pricelist_type base.group_partner_manager 1 0 0 0
16 access_product_pricelist_partner_manager product.pricelist partner manager model_product_pricelist base.group_partner_manager 1 0 0 0
17 access_product_product_employee product.product employee model_product_product base.group_user 1 0 0 0
18 access_prices_history_employee prices.history employee model_prices_history base.group_user 1 0 0 0
19 access_product_template_sale_manager product.template salemanager model_product_template base.group_sale_manager 1 1 1 1
20 access_product_product_sale_manager product.product salemanager model_product_product base.group_sale_manager 1 1 1 1
21 access_product_category_sale_manager product.category salemanager product.model_product_category base.group_sale_manager 1 1 1 1

View File

@ -33,7 +33,7 @@ Product extension. This module adds:
""",
"init_xml" : [],
"demo_xml" : [],
"update_xml" : ["product_extended_wizard.xml","product_extended_view.xml","mrp_view.xml"],
"data" : ["product_extended_wizard.xml","product_extended_view.xml","mrp_view.xml", 'security/ir.model.access.csv'],
"active": False,
"installable": True
}

View File

@ -4,7 +4,6 @@
<record id="mrp_bom_form_view_product_extended" model="ir.ui.view">
<field name="name">mrp.bom.form.product_extended</field>
<field name="model">mrp.bom</field>
<field name="type">form</field>
<field name="inherit_id" ref="mrp.mrp_bom_form_view"/>
<field name="arch" type="xml">
<field name="product_id" position="after">
@ -17,7 +16,6 @@
<record id="mrp_bom_tree_view_product_extended" model="ir.ui.view">
<field name="name">mrp.bom.tree.product_extended</field>
<field name="model">mrp.bom</field>
<field name="type">tree</field>
<field name="inherit_id" ref="mrp.mrp_bom_tree_view"/>
<field name="arch" type="xml">
<field name="product_uom" position="after">

View File

@ -1,22 +1,9 @@
<?xml version="1.0"?>
<openerp>
<data>
<!-- <record model="ir.ui.view" id="product_product_ext_form_view">
<field name="name">product_extended.product.form.view</field>
<field name="type">form</field>
<field name="model">product.product</field>
<field name="priority">2</field>
<field name="inherit_id" ref="stock.view_product_standard_price_form" />
<field name="arch" type="xml">
<field name="virtual_available" position="after">
<field name="qty_dispo" />
</field>
</field>
</record> -->
<record model="ir.ui.view" id="product_product_ext_form_view2">
<field name="name">product_extended.product.form.view</field>
<field name="model">product.product</field>
<field name="type">form</field>
<field name="priority">3</field>
<field name="inherit_id" ref="product.product_normal_form_view" />
<field name="arch" type="xml">

View File

@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_wizard_price_all,wizard.price all,model_wizard_price,,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_wizard_price_all wizard.price all model_wizard_price 1 1 1 1

View File

@ -88,7 +88,7 @@ class procurement_order(osv.osv):
'project_id': project and project.id or False,
'company_id': procurement.company_id.id,
},context=context)
self.write(cr, uid, [procurement.id], {'task_id': task_id, 'message':_('Task created.')}, context=context)
self.write(cr, uid, [procurement.id], {'task_id': task_id}, context=context)
self.project_task_create_note(cr, uid, [procurement.id], context=context)
return task_id

View File

@ -95,7 +95,7 @@
<field name="name">Purchase Order - Send by Email</field>
<field name="email_from">${object.validator.email or ''}</field>
<field name="subject">${object.company_id.name} Order (Ref ${object.name or 'n/a' })</field>
<field name="email_recipients">${object.partner_id.id}</field>
<field name="partner_to">${object.partner_id.id}</field>
<field name="model_id" ref="purchase.model_purchase_order"/>
<field name="auto_delete" eval="True"/>
<field name="report_template" ref="report_purchase_order"/>

File diff suppressed because it is too large Load Diff

View File

@ -606,7 +606,7 @@ class purchase_order(osv.osv):
return res
def invoice_done(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'approved'}, context=context)
self.write(cr, uid, ids, {'state': 'approved'}, context=context)
return True
def has_stockable_product(self, cr, uid, ids, *args):
@ -617,26 +617,26 @@ class purchase_order(osv.osv):
return False
def wkf_action_cancel(self, cr, uid, ids, context=None):
self.write(cr,uid,ids,{'state':'cancel'})
self.write(cr, uid, ids, {'state': 'cancel'})
self.set_order_line_status(cr, uid, ids, 'cancel', context=context)
def action_cancel(self, cr, uid, ids, context=None):
for purchase in self.browse(cr, uid, ids, context=context):
for pick in purchase.picking_ids:
if pick.state not in ('draft','cancel'):
if pick.state not in ('draft', 'cancel'):
raise osv.except_osv(
_('Unable to cancel this purchase order.'),
_('Unable to cancel the purchase order %s.') % (purchase.name),
_('First cancel all receptions related to this purchase order.'))
self.pool.get('stock.picking') \
.signal_button_cancel(cr, uid, map(attrgetter('id'), purchase.picking_ids))
for inv in purchase.invoice_ids:
if inv and inv.state not in ('cancel','draft'):
if inv and inv.state not in ('cancel', 'draft'):
raise osv.except_osv(
_('Unable to cancel this purchase order.'),
_('You must first cancel all receptions related to this purchase order.'))
self.pool.get('account.invoice') \
.signal_invoice_cancel(cr, uid, map(attrgetter('id'), purchase.invoice_ids))
self.write(cr,uid,ids,{'state':'cancel'})
self.write(cr, uid, ids, {'state': 'cancel'})
self.set_order_line_status(cr, uid, ids, 'cancel', context=context)
self.signal_purchase_cancel(cr, uid, ids)
return True
@ -645,7 +645,7 @@ class purchase_order(osv.osv):
""" Convert date values expressed in user's timezone to
server-side UTC timestamp, assuming a default arbitrary
time of 12:00 AM - because a time is needed.
:param str userdate: date string in in user time zone
:return: UTC datetime string for server-side use
"""
@ -672,7 +672,6 @@ class purchase_order(osv.osv):
if order.currency_id.id != order.company_id.currency_id.id:
#we don't round the price_unit, as we may want to store the standard price with more digits than allowed by the currency
price_unit = self.pool.get('res.currency').compute(cr, uid, order.currency_id.id, order.company_id.currency_id.id, price_unit, round=False, context=context)
return {
'name': order_line.name or '',
'product_id': order_line.product_id.id,
@ -691,8 +690,9 @@ class purchase_order(osv.osv):
'purchase_line_id': order_line.id,
'company_id': order.company_id.id,
'price_unit': price_unit,
'picking_type_id': order.picking_type_id.id,
'group_id': group_id,
'picking_type_id': order.picking_type_id.id,
'group_id': group_id,
'procurement_id': order_line.procurement_ids and order_line.procurement_ids[0].id or False,
'route_ids': order.picking_type_id.warehouse_id and [(6, 0, [x.id for x in order.picking_type_id.warehouse_id.route_ids])] or [],
}
@ -906,6 +906,14 @@ class purchase_order_line(osv.osv):
res[line.id] = cur_obj.round(cr, uid, cur, taxes['total'])
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 = {
'name': fields.text('Description', 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'),
}
_defaults = {
'product_uom' : _get_uom_id,
'product_qty': lambda *a: 1.0,
'state': lambda *args: 'draft',
'invoiced': lambda *a: 0,
@ -953,8 +962,11 @@ class purchase_order_line(osv.osv):
"""
onchange handler of product_uom.
"""
if context is None:
context = {}
if not uom_id:
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,
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)
@ -1034,7 +1046,7 @@ class purchase_order_line(osv.osv):
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 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.')}
uom_id = product_uom_po_id
@ -1358,8 +1370,8 @@ class account_invoice(osv.Model):
else:
user_id = uid
po_ids = purchase_order_obj.search(cr, user_id, [('invoice_ids', 'in', ids)], context=context)
if po_ids:
purchase_order_obj.message_post(cr, user_id, po_ids, body=_("Invoice paid"), context=context)
for po_id in po_ids:
purchase_order_obj.message_post(cr, user_id, po_id, body=_("Invoice paid"), context=context)
return res
class account_invoice_line(osv.Model):

View File

@ -173,7 +173,7 @@
<button name="invoice_ok" states="except_invoice" string="Manually Corrected"/>
<button name="purchase_approve" states="confirmed" string="Approve Order" class="oe_highlight" groups="purchase.group_purchase_manager"/>
<button name="wkf_send_rfq" states="approved" string="Send PO by Email" type="object" context="{'send_rfq':False}"/>
<button name="view_picking" string="Receptions" type="object" attrs="{'invisible': ['|', ('shipped','=',True), ('state','!=', 'approved')]}" class="oe_highlight"/>
<button name="view_picking" string="Receive Products" type="object" attrs="{'invisible': ['|', ('shipped','=',True), ('state','!=', 'approved')]}" class="oe_highlight"/>
<button name="view_invoice" string="Receive Invoice" type="object" attrs="{'invisible': ['|', ('invoice_method','=','picking'), '|', ('state','!=', 'approved'), ('invoiced','=',True) ]}" class="oe_highlight"/>
<button name="action_cancel_draft" states="cancel,sent,confirmed" string="Set to Draft" type="object" />
<button name="purchase_cancel" states="draft,confirmed,sent,bid" string="Cancel"/>
@ -200,7 +200,7 @@
<field name="date_order"/>
<field name="origin" attr="{'invisible': [('origin','=',False)]}"/>
<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="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)],
@ -418,7 +418,7 @@
<notebook>
<page string="Notes">
<field name="name"/>
</page><page string="Invoices and Receptions">
</page><page string="Invoices and Incoming Shipments">
<field name="invoice_lines"/>
<field name="move_ids"/>
</page>

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 ""

View File

@ -15,7 +15,6 @@
<record id="requisition1" model="purchase.requisition">
<field name="user_id" ref="base.user_root"/>
<field name="exclusive">exclusive</field>
<field name="date_start" eval="time.strftime('%Y/%m/%d %H:%M:%S')"/>
<field name="warehouse_id" ref="stock.stock_warehouse_shop0"/>
</record>

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"
"Report-Msgid-Bugs-To: support@openerp.com\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"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-11-20 05:24+0000\n"
"X-Generator: Launchpad (build 16831)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: sale
#: model:res.groups,name:sale.group_analytic_accounting
@ -116,7 +116,7 @@ msgstr "Beszerzési módszer"
#. module: sale
#: help:sale.order,date_confirm:0
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
#: field:account.config.settings,module_sale_analytic_plans:0
@ -132,7 +132,8 @@ msgstr "Március"
#: code:addons/sale/sale.py:565
#, python-format
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
#: view:sale.order:0
@ -254,12 +255,13 @@ msgstr "Az előleg mennyiség értékének pozitívnak kell lennie"
#. module: sale
#: help:sale.config.settings,group_discount_per_so_line:0
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
#: view:sale.order.line:0
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
#: selection:sale.order.line,type:0
@ -349,7 +351,8 @@ msgstr "Érvénytelenített"
#. module: sale
#: view:sale.order.line:0
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
#: selection:sale.order,state:0
@ -398,7 +401,7 @@ msgstr "Számlázási cím"
#. module: sale
#: help:sale.order,create_date:0
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
#: view:res.partner:0
@ -451,7 +454,7 @@ msgid ""
"The 'Waiting Schedule' status is set when the invoice is confirmed "
" but waiting for the scheduler to run on the order date."
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 "
"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"
@ -482,7 +485,8 @@ msgstr ""
#: help:sale.order.line,sequence:0
msgid "Gives the sequence order when displaying a list of sales order lines."
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
#: view:sale.report:0
@ -501,8 +505,8 @@ msgstr "Fax:"
msgid ""
"In order to delete a confirmed sales order, you must cancel it before !"
msgstr ""
"Ahhoz, hogy törölni tudjon egy megerősített megrendelést, először vissza "
"kell vonnia azt !"
"Ahhoz, hogy törölni tudjon egy megerősített vsárlói megrendelést, először "
"vissza kell vonnia azt !"
#. module: sale
#: view:sale.order:0
@ -538,7 +542,7 @@ msgstr "Vevői megrendelés"
#. module: sale
#: model:res.groups,name:sale.group_invoice_so_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
#: 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
#: selection:sale.advance.payment.inv,advance_payment_method:0
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
#: 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
#: model:mail.message.subtype,name:sale.mt_order_confirmed
msgid "Sales Order Confirmed"
msgstr "Megrendelés visszaigazolva"
msgstr "Vásárlói megrendelés visszaigazolva"
#. module: sale
#: view:sale.order:0
@ -675,7 +679,7 @@ msgstr "Összérték"
msgid "Allows you to specify an analytic account on sales orders."
msgstr ""
"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
#: help:sale.config.settings,module_sale_journal:0
@ -743,7 +747,7 @@ msgstr "Számlázandó"
#. module: sale
#: help:sale.order,partner_invoice_id:0
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
#: selection:sale.order,invoice_quantity:0
@ -887,7 +891,7 @@ msgstr "Megrendelés dátuma"
#. module: sale
#: view:sale.order:0
msgid "Sales Order done"
msgstr "Megrendelés elvégezve"
msgstr "Vevői megrendelés elvégezve"
#. module: sale
#: code:addons/sale/sale.py:364
@ -928,7 +932,7 @@ msgstr "Számla létrehozása és megtekintése"
#. module: sale
#: view:sale.order.line:0
msgid "Sales order lines done"
msgstr "Megrendelési tételek elvégezve"
msgstr "Vevői megrendelési tételek elvégezve"
#. module: sale
#: 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"
"2.The Sales Order Line is Invoiced!"
msgstr ""
"Nem készíthet számlát ehhez az értékesítési megbízási tételhez, az alábbi "
"okok egyike miatt:\n"
"1. Az értékesítési megbízás tételének állapota: \"Tervezet\" vagy "
"\"Mégsem\".\n"
"2. Az értékesítési megbízás tétel már kiszámlázásra került."
"Nem készíthet számlát ehhez a vásárlói megrendelés tételhez, az alábbi okok "
"egyike miatt:\n"
"1. A vevői megrendelés tételének állapota: \"Tervezet\" vagy \"Mégsem\".\n"
"2. A vevői megrendelési tétel már kiszámlázásra került."
#. module: sale
#: view:sale.order.line.make.invoice:0
@ -1048,7 +1051,7 @@ msgstr "Üzlet neve"
#. module: sale
#: view:sale.order:0
msgid "My Sales Orders"
msgstr "Az én megrendeléseim"
msgstr "Az én vevői megrendeléseim"
#. module: sale
#: report:sale.order:0
@ -1085,7 +1088,7 @@ msgstr "Értékesítési menü megnyitása"
#: code:addons/sale/sale.py:598
#, python-format
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
#: selection:sale.report,state:0
@ -1215,7 +1218,7 @@ msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Kattintson új értékesítési hely meghatározáshoz.\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"
" értékesítési hely meghatároz egy raktárhelyet ahonnan a "
"termék\n"
@ -1247,13 +1250,13 @@ msgid ""
"Sales Order Lines that are confirmed, done or in exception state and haven't "
"yet been invoiced"
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"
#. module: sale
#: model:ir.model,name:sale.model_sale_report
msgid "Sales Orders Statistics"
msgstr "Értékesítési megbízási statisztikák"
msgstr "Vevői megrendelési statisztikák"
#. module: sale
#: field:sale.order,date_order:0
@ -1310,10 +1313,10 @@ msgid ""
"is 'Shipping and Manual in Progress'. The invoice is created automatically "
"if the shipping policy is 'Payment before Delivery'."
msgstr ""
"Az értékesítő manuálisan létrehoz egy számlát, hogy ha az értékesítési "
"megbízás szállítási szabálya: \"Szállítás és manuális vezérléssel "
"folyamatban\". A számla automatikusan létrejön , ha a szállítási szabály: "
"\"Fizetés kiszállítás előtt\"."
"Az értékesítő kézzel hoz létre egy számlát, hogy ha a vevői megrendelés "
"szállítási szabálya: \"Szállítás és manuális vezérléssel folyamatban\". A "
"számla automatikusan létrejön , ha a szállítási szabály: \"Fizetés "
"kiszállítás előtt\"."
#. module: sale
#: model:ir.model,name:sale.model_sale_shop
@ -1351,12 +1354,12 @@ msgstr "Január"
#. module: sale
#: field:sale.config.settings,group_discount_per_so_line:0
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
#: model:ir.actions.act_window,name:sale.action_orders_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
#: view:sale.order.line.make.invoice:0
@ -1366,9 +1369,9 @@ msgid ""
" or a fixed price (for advances) directly from the sales "
"order form if you prefer."
msgstr ""
"Ezen a megrendelésen minden tétel sor számlázva lesz. Lehetősége 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 "
"Ezen a vásárlói megrendelésen minden tétel sor számlázva lesz. Lehetősége "
"van a megrendelés egy bizonyos százalékának számlázására\n"
" vagy fix ár (az előlegekre), ha kívánja direkt a "
"megrendelés űrlapról."
#. module: sale
@ -1394,7 +1397,7 @@ msgstr "Paypal Url"
#. module: sale
#: help:sale.order,project_id:0
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
#: view:sale.order:0
@ -1435,7 +1438,7 @@ msgstr ""
#: help:sale.order,origin:0
msgid "Reference of the document that generated this sales order request."
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."
#. module: sale
@ -1478,7 +1481,7 @@ msgstr "Hiba figyelmen kívül hagyása"
#. module: sale
#: help:sale.order,partner_shipping_id:0
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
#: 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 "
"example)."
msgstr ""
"Ez egy olyan számlalista, amely ehhez az értékesítési megbízáshoz jött "
"létre. Ugyanaz az értékesítési megbízás több alkalommal is számlázásra "
"kerülhetett (például tételek alapján)."
"Ez egy olyan számlalista, amely ehhez a vevői megrendeléshez jött létre. "
"Ugyanaz a vevői megrendelés több alkalommal is számlázásra kerülhetett "
"(például tételek alapján)."
#. module: sale
#: report:sale.order:0
@ -1606,7 +1609,7 @@ msgstr "Számla"
#. module: sale
#: view:sale.order.line:0
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
#: model:process.transition.action,name:sale.process_transition_action_cancel0
@ -1630,7 +1633,7 @@ msgstr "Nincs árlista ! : "
#. module: sale
#: view:sale.order:0
msgid "Sales Order "
msgstr "Megrendelés "
msgstr "Vásárlói megrendelés "
#. module: sale
#: model:mail.message.subtype,description:sale.mt_order_sent
@ -1668,8 +1671,8 @@ msgid ""
" "
msgstr ""
"<p>\n"
" Ez itt a lista a már kiszámlázott megrendelési tételekről. "
"Tud\n"
" Ez itt a lista a már kiszámlázott vevői megrendelési "
"tételekről. Tud\n"
" számlázni megrendelési részt, a megrendelés tételeivel. "
"Nincs\n"
" 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
#: view:sale.advance.payment.inv:0
msgid "Invoice Sales Order"
msgstr "Megrendelés számlázás"
msgstr "Vevői megrendelés számlázás"
#. module: sale
#: help:sale.order,invoice_quantity:0
@ -1705,8 +1708,8 @@ msgid ""
"if you want your invoice based on ordered "
msgstr ""
"A megrendelés automatikusan létre lesz hozva a díjbekérő / előleg (Számla "
"terv) alapján. Választhatja, ha "
"akarja a számlázást a megrendelés alapján "
"terv) alapján. Ki kell "
"választania, ha a számlázást a megrendelés alapján kívánja "
#. module: sale
#: 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 "
"paid before the products can be delivered."
msgstr ""
"Igényléskori: Egy terv/előleg számla hozható létre a megrendelésből, ha "
"szükséges. \n"
"Igényléskori: Egy terv/előleg számla hozható létre a vevői megrendelésből, "
"ha szükséges. \n"
"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"
"Szállítás előtt: Egy terv/előleg számla hozható létre a megrendelésből és ki "
"kell egyenlíteni mielőtt az árut kiszállítanák."
"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 vevői megrendelésből "
"és ki kell egyenlíteni mielőtt az árut kiszállítanák."
#. module: sale
#: 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 "
"the Invoice Analysis report in the Accounting application."
msgstr ""
"Ez a jelentés elemzést készít az árajánlatairól és az értékesítési "
"megbízásairól. Az elemzés kimutatja az értékesítési bevételeit, és "
"Ez a jelentés elemzést készít az árajánlatairól és a vásárlói "
"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.). "
"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 "
@ -2064,10 +2067,10 @@ msgstr ""
" 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"
" </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"
" és lehetővé teszik a megrendeléseken a vásárlói fejlődésének "
"követését.\n"
" és lehetővé teszik a megrendeléseken a vásárlói "
"megrendelések fejlődésénak követését.\n"
" </p>\n"
" "
@ -2138,7 +2141,7 @@ msgid ""
" "
msgstr ""
"<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"
" </p><p>\n"
" OpenERP segít a hatékony értékesítési folyamat hatékony "
@ -2237,8 +2240,8 @@ msgid ""
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
" Kattintson ehhez a vevőhöz tartozó árajánlat vagy "
"értékesítési megbízás létrehozásához.\n"
" Kattintson ehhez a vevőhöz tartozó árajánlat vagy vevői "
"megrendelés létrehozásához.\n"
" </p><p>\n"
" OpenERP segít az értékesítési folyamat hatékony "
"kezelésében:\n"
@ -2266,7 +2269,7 @@ msgstr "Üzenetek és kommunikáció történet"
#: view:sale.order:0
#: view:sale.order.line:0
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
#: report:sale.order:0
@ -2294,12 +2297,13 @@ msgstr "A megrendelés megrendelési hónapja"
#. module: sale
#: model:process.transition,name:sale.process_transition_saleinvoice0
msgid "From a sales order"
msgstr "Értékesítési megbízásból"
msgstr "Vevői megrendelésből"
#. module: sale
#: view:sale.order.line:0
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
#: 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 "
"salesman."
msgstr ""
"Az értékesítési megbízás számlázási beállításaitól függően a számla "
"alapulhat a kiszállítási vagy a megrendelési mennyiségen. A rendszer az "
"értékesítési megbízásból létrehozhat egy számlát vagy egy kiszállítási "
"megbízást, amint az értékesítő megerősíti azt."
"A vevői megrendelés számlázási beállításaitól függően a számla alapulhat a "
"kiszállítási vagy a megrendelési mennyiségen. A rendszer a vevői "
"megrendelésből létrehozhat egy számlát vagy egy kiszállítási megbízást, "
"amint az értékesítő megerősíti azt."
#. module: sale
#: view:sale.order:0
@ -2346,7 +2350,7 @@ msgstr "Számlázásra kész megrendelés"
#. module: sale
#: field:sale.config.settings,group_invoice_so_lines:0
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
#: view:sale.advance.payment.inv:0
@ -2360,12 +2364,12 @@ msgstr "vagy"
#: view:sale.order:0
#: view:sale.order.line:0
msgid "Sales Order Lines"
msgstr "Értékesítési megbízási tételek"
msgstr "Vevői megrendelési tételek"
#. module: sale
#: help:sale.order,pricelist_id:0
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
#: report:sale.order:0
@ -2395,7 +2399,7 @@ msgid ""
"between the Unit Price and Cost Price.\n"
" This installs the module sale_margin."
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 "
"különbözetéből.\n"
" Ez a sale_margin modult telepíti."

View File

@ -27,6 +27,7 @@ class sale_report(osv.osv):
_description = "Sales Orders Statistics"
_auto = False
_rec_name = 'date'
_columns = {
'date': fields.date('Date Order', readonly=True),
'date_confirm': fields.date('Date Confirm', readonly=True),
@ -60,12 +61,9 @@ class sale_report(osv.osv):
}
_order = 'date desc'
def init(self, cr):
tools.drop_view_if_exists(cr, 'sale_report')
cr.execute("""
create or replace view sale_report as (
select
min(l.id) as id,
def _select(self):
select_str = """
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,
@ -84,15 +82,23 @@ class sale_report(osv.osv):
t.categ_id as categ_id,
s.pricelist_id as pricelist_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)
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,
"""
return from_str
def _group_by(self):
group_by_str = """
GROUP BY l.product_id,
l.order_id,
t.uom_id,
t.categ_id,
@ -104,7 +110,16 @@ class sale_report(osv.osv):
s.state,
s.pricelist_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:

View File

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

View File

@ -320,6 +320,9 @@ class sale_order(osv.osv):
context = {}
if vals.get('name', '/') == '/':
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})
new_id = super(sale_order, self).create(cr, uid, vals, 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
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):
if not default:
default = {}

View File

@ -78,6 +78,13 @@
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</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 -->
<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'))]"/>
</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">
<field name="name">Personal Order Lines</field>

View File

@ -61,7 +61,7 @@ class sale_order_line_make_invoice(osv.osv_memory):
else:
pay_term = False
inv = {
'name': order.name,
'name': order.client_order_ref or '',
'origin': order.name,
'type': 'out_invoice',
'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"
"Report-Msgid-Bugs-To: support@openerp.com\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"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 05:57+0000\n"
"X-Generator: Launchpad (build 16761)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: sale_analytic_plans
#: field:sale.order.line,analytics_id:0
@ -29,7 +29,7 @@ msgstr "Vevői megrendelés"
#. module: sale_analytic_plans
#: model:ir.model,name:sale_analytic_plans.model_sale_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"
#~ msgstr "Értékesítés analitikus felosztás kezelés"

View File

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

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2011-02-01 18:33+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n"
"PO-Revision-Date: 2013-12-09 15:59+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 05:19+0000\n"
"X-Generator: Launchpad (build 16761)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:92
@ -81,7 +81,7 @@ msgstr "Árajánlat"
#. module: sale_crm
#: field:crm.make.sale,partner_id:0
msgid "Customer"
msgstr "Vevő"
msgstr "Vásárló"
#. module: sale_crm
#: view:crm.make.sale:0
@ -91,7 +91,7 @@ msgstr "_Létrehoz"
#. module: sale_crm
#: model:ir.model,name:sale_crm.model_crm_make_sale
msgid "Make sales"
msgstr "Értékesítés létrehozás"
msgstr "Vevői értékesítés létrehozás"
#. module: sale_crm
#: 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
#, python-format
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
#: field:crm.make.sale,shop_id:0
@ -119,12 +119,12 @@ msgstr "Üzlet"
#: code:addons/sale_crm/wizard/crm_make_sale.py:92
#, python-format
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
#: model:mail.message.subtype,name:sale_crm.mt_salesteam_order_confirmed
msgid "Sales Order Confirmed"
msgstr "Megrendelés visszaigazolva"
msgstr "Vásárlói megrendelés visszaigazolva"
#. module: sale_crm
#: view:account.invoice:0

View File

@ -20,6 +20,7 @@
##############################################################################
import sales_crm_account_invoice_report
import sale_report
# 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)
for id in ids:
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)
validated_domain = [('section_id', '=', id), ('state', 'not in', ['draft', 'sent']), ('date_confirm', '>=', 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)
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_order'], 'amount_total', 'date_order', context=context)
return res
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):
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):

View File

@ -211,6 +211,36 @@
<field name="act_window_id" ref="sale_crm.action_invoice_salesteams"/>
</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">
<field name="name">crm.case.section.form</field>
<field name="model">crm.case.section</field>
@ -241,9 +271,9 @@
<xpath expr="//div[@class='oe_salesteams_leads']" position="after">
<div class="oe_salesteams_orders">
<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">
<field name="monthly_confirmed" widget="sparkline_bar">
Revenue of confirmed sales orders per month.<br/>Click the acces to Sales Analysis
<a name="%(action_order_report_so_salesteam)d" type="action" class="oe_sparkline_bar_link">
<field name="monthly_confirmed" widget="sparkline_bar" options="{'delayIn': '3000'}">
Revenue of confirmed sales orders per month.<br/>Click to acces the Sales Analysis.
</field>
</a>
</div>
@ -251,27 +281,29 @@
<xpath expr="//div[@class='oe_salesteams_opportunities']" position="after">
<div class="oe_salesteams_invoices" groups="account.group_account_invoice">
<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">
<field name="monthly_invoiced" widget="sparkline_bar">
<a name="%(action_account_invoice_report_salesteam)d" type="action" class="oe_sparkline_bar_link">
<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.
</field>
</a>
</div>
<div class="oe_salesteams_quotations">
<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">
<field name="monthly_quoted" widget="sparkline_bar">
Revenue of created quotation per month.<br/>Click to see a detailed analysis of sales.
<a name="%(action_order_report_quotation_salesteam)d" type="action" class="oe_sparkline_bar_link">
<field name="monthly_quoted" widget="sparkline_bar" options="{'delayIn': '3000'}">
Revenue of created quotations per month.<br/>Click to see a detailed analysis.
</field>
</a>
</div>
</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">
<field name="monthly_invoiced" widget="gauge" style="width:160px; height: 120px;" options="{'max_field': 'invoiced_target'}">Invoiced</field>
<field name="invoiced_forecast" widget="gauge" style="width:160px; height: 120px;" options="{'max_field': 'invoiced_target', 'action_change': 'action_forecast'}">Forecast</field>
<field name="monthly_invoiced" widget="gauge" style="width:160px; height: 120px; cursor: pointer;"
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 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.
</div>
</xpath>

View File

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

View File

@ -7,19 +7,19 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2011-02-01 22:23+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n"
"PO-Revision-Date: 2013-12-09 16:06+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 06:14+0000\n"
"X-Generator: Launchpad (build 16761)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: sale_mrp
#: model:ir.model,name:sale_mrp.model_mrp_production
msgid "Manufacturing Order"
msgstr "Gyártási utasítás"
msgstr "Gyártási rendelés"
#. module: sale_mrp
#: help:mrp.production,sale_name:0
@ -34,7 +34,7 @@ msgstr "A vevői megrendelés vevő hivatkozására utal."
#. module: sale_mrp
#: field:mrp.production,sale_ref:0
msgid "Sale Reference"
msgstr "Értékesítési referencia"
msgstr "Vevői megrendelési referencia"
#. module: sale_mrp
#: 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"
"Report-Msgid-Bugs-To: support@openerp.com\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"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-09-12 06:36+0000\n"
"X-Generator: Launchpad (build 16761)\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
@ -94,7 +94,7 @@ msgstr "Beszerzési megbízás létrehozása"
#. module: sale_stock
#: field:stock.picking.out,sale_id:0
msgid "Sale Order"
msgstr "Rendelés"
msgstr "Vevői megrendelés"
#. module: sale_stock
#: 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 "
"sold product."
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."
#. module: sale_stock
@ -123,8 +123,8 @@ msgid ""
"You cannot make an advance on a sales order that is "
"defined as 'Automatic Invoice after delivery'."
msgstr ""
"Nem végezhet előrelépést egy megrendelésen ami úgy van meghatározva, hogy "
"'Szállítás után automatikus számlázás'."
"Nem végezhet díjbekérést egy olyan vásárlói megrendelésen ami úgy van "
"meghatározva, hogy 'Szállítás után automatikus számlázás'."
#. module: sale_stock
#: model:ir.ui.menu,name:sale_stock.menu_action_shop_form
@ -134,7 +134,8 @@ msgstr "Üzlet"
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_saleorderprocurement0
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
#: model:ir.model,name:sale_stock.model_stock_move
@ -150,12 +151,12 @@ msgstr "Érvénytelen lépés!"
#. module: sale_stock
#: field:sale.config.settings,module_project_timesheet:0
msgid "Project Timesheet"
msgstr "Projekt munkaidő-kimutatása"
msgstr "Projekt időbeosztás-kimutatása"
#. module: sale_stock
#: field:sale.config.settings,group_sale_delivery_address:0
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
#: 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
#: field:stock.picking,sale_id:0
msgid "Sales Order"
msgstr "Értékesítési megbízás"
msgstr "Vevői megrendelés"
#. module: sale_stock
#: 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
#: field:stock.move,sale_line_id:0
msgid "Sales Order Line"
msgstr "Értékesítési megbízási sor"
msgstr "Vevői megrendelési tétel sor"
#. module: sale_stock
#: 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 "
"evolves with the availability of parts."
msgstr ""
"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."
"A kiválogatási lista adatlapját a vevői megrendelés visszaigazolásakor "
"azonnal létrehozza, ugyanakkor amikor a beszerzési megbízást. Ez képviseli a "
"vevői megrendelés tételeit. Itt a vevői megrendelés tételekként 1 "
"kiválogatási lista van, ami mindjárt megmutatja a tételek hozzáférhetőségét "
"is."
#. 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 "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
#: model:ir.model,name:sale_stock.model_stock_picking
msgid "Picking List"
msgstr "Kiszedési lista"
msgstr "Kiválogatási lista"
#. module: sale_stock
#: field:sale.shop,warehouse_id:0
@ -238,7 +240,7 @@ msgstr "Kiszállítás átfutási idő"
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_deliveryorder0
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
#: view:sale.order:0
@ -248,12 +250,12 @@ msgstr "Kiszállítási kézbesítési bizonylatok áttekintése"
#. module: sale_stock
#: field:sale.order.line,move_ids:0
msgid "Inventory Moves"
msgstr "Leltármozgás"
msgstr "Leltárkészlet mozgás"
#. module: sale_stock
#: view:sale.config.settings:0
msgid "Default Options"
msgstr "Alapértelmezett lehetőség"
msgstr "Alapértelmezett lehetőségek"
#. module: sale_stock
#: 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 "
"pick' or 'Invoice on order after delivery'."
msgstr ""
"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."
"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'."
#. module: sale_stock
#: field:sale.order.line,procurement_id:0
@ -285,7 +287,7 @@ msgstr "Kiszállított"
#: code:addons/sale_stock/sale_stock.py:265
#, python-format
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
#: model:process.transition,note:sale_stock.process_transition_saleprocurement0
@ -296,21 +298,23 @@ msgid ""
"parameters. "
msgstr ""
"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 "
"rendszer az értékesítési megbízásokon keresztül irányítja a szállítói "
"megrendeléseket és a termékek gyártását is a beállított szabályoknak és az "
"értékesítési megbízás paramétereinek megfelelően. "
"megerősítettük a vevői megrendelést, vagy a számlát kifizették. A rendszer "
"az értékesítési megbízásokon keresztül irányítja a szállítói megrendeléseket "
"és a termékek gyártását is a beállított szabályoknak és a vevői megrendelés "
"paramétereinek megfelelően. "
#. module: sale_stock
#: help:sale.config.settings,group_mrp_properties:0
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
#: field:sale.config.settings,group_invoice_deli_orders:0
msgid "Generate invoices after and based on delivery orders"
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
#: field:sale.config.settings,module_delivery:0
@ -346,14 +350,14 @@ msgid ""
msgstr ""
"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"
" Meghatározhatja a saját szállítóját és szállítási hálózatát "
"külön árárt.\n"
" Ez a delivery modult telepíti."
" Meghatározhatja a saját szállítóját és szállítási hálózat "
"külön árát.\n"
" Ez a delivery (szállítás) modult telepíti."
#. module: sale_stock
#: field:sale.config.settings,default_picking_policy:0
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
#: model:res.groups,name:sale_stock.group_invoice_deli_orders
@ -375,7 +379,7 @@ msgstr "Az eladott anyagok beszerzése"
msgid ""
"Pick 'Deliver each product when available' if you allow partial delivery."
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."
#. module: sale_stock
@ -395,7 +399,7 @@ msgid ""
"It indicates that the sales order has been delivered. This field is updated "
"only after the scheduler(s) have been launched."
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)."
#. module: sale_stock
@ -406,19 +410,18 @@ msgstr "Tulajdonságok"
#. module: sale_stock
#: field:sale.config.settings,group_mrp_properties:0
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
#: help:sale.config.settings,default_order_policy:0
msgid ""
"You can generate invoices based on sales orders or based on shippings."
msgstr ""
"Létrehozhat számlát értékesítési megbízások vagy kiszállítások alapján."
msgstr "Létrehozhat számlát vásárlói megrendelés vagy kiszállítások alapján."
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_report
msgid "Sales Orders Statistics"
msgstr "Értékesítési megbízási statisztikák"
msgstr "Vevői megrendelési statisztikák"
#. module: sale_stock
#: 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 "
"sor tételeibe, ennek értelmében bármilyen módon létrehozhat, szerkeszthet "
"és törölhet \n"
" és automatikusan létrehoz terv feladatokat a beszerzés "
"soraiból.\n"
" és automatikusan létrehozhat terv feladatokat a beszerzés "
"tétel soraiból.\n"
" Ez a project_timesheet és project_mrp modult telepíti."
#. module: sale_stock
@ -452,7 +455,7 @@ msgid ""
"order."
msgstr ""
"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
#: 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 "
"components."
msgstr ""
"Egy beszerzési megbízás minden egyes értékesítési megbízási sorhoz és minden "
"egyes alkotóelemhez."
"Egy beszerzési megbízás minden egyes vásárlói megrendelés tétel sorhoz és "
"minden egyes alkotóelemhez."
#. module: sale_stock
#: 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 "
"impact on the shipping price."
msgstr ""
"A megrendelések alapértelmezetten az összes termék egyszerre történő "
"kiszállítására van beállítva, nem pedig az egyes termékek elérhetőségétől "
"függően. Ez befolyással lehet a szállítási árra."
"A vásárlói megrendelések alapértelmezetten az összes termék egyszerre "
"történő kiszállítására van beállítva, nem pedig az egyes termékek "
"elérhetőségétől függően. Ez befolyással lehet a szállítási árra."
#. module: sale_stock
#: selection:sale.config.settings,default_order_policy:0
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
#: 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"
"To do so, you must first cancel related picking for delivery orders."
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 "
"törölni."
@ -534,7 +538,7 @@ msgstr "Kiszállított"
#. module: sale_stock
#: model:process.transition,name:sale_stock.process_transition_invoiceafterdelivery0
msgid "Create Invoice"
msgstr "Számla készítése"
msgstr "Számla létrehozás"
#. module: sale_stock
#: 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
#: model:ir.model,name:sale_stock.model_sale_advance_payment_inv
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
#: code:addons/sale_stock/sale_stock.py:523
#, python-format
msgid "You must first cancel stock moves attached to this sales order line."
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."
#. module: sale_stock
@ -569,12 +573,12 @@ msgstr "Nemzetközi Kereskedelmi Feltételek"
#: code:addons/sale_stock/sale_stock.py:522
#, python-format
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
#: model:process.transition.action,name:sale_stock.process_transition_action_cancelassignation0
msgid "Cancel Assignation"
msgstr "Számla sztornó"
msgstr "Hozzárendelés megszüntetése"
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_invoiceafterdelivery0
@ -608,7 +612,7 @@ msgstr ""
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_saleorderprocurement0
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
#: model:process.transition,name:sale_stock.process_transition_deliver0

View File

@ -39,57 +39,10 @@ class sale_report(osv.osv):
('cancel', 'Cancelled')
], 'Order Status', readonly=True),
}
def init(self, cr):
tools.drop_view_if_exists(cr, 'sale_report')
# TODO: make parent view extensible similarly to invoice analysis and
# remove the duplication
cr.execute("""
create or replace view sale_report as (
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
)
""")
def _select(self):
return super(sale_report, self)._select() + ", s.warehouse_id as warehouse_id, s.shipped, s.shipped::integer as shipped_qty_1"
def _group_by(self):
return super(sale_report, self)._group_by() + ", s.warehouse_id, s.shipped"

View File

@ -17,6 +17,10 @@
<field name="model">sale.report</field>
<field name="inherit_id" ref="sale.view_order_product_search"/>
<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">
<filter string="Warehouse" context="{'group_by':'warehouse_id'}"/>
</xpath>

View File

@ -19,6 +19,8 @@
#
##############################################################################
import openerp
from openerp import SUPERUSER_ID
from openerp.osv import fields, osv
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):
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_model_data = self.pool.get('ir.model.data')
wizard = self.browse(cr, uid, ids)[0]
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)
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)
warehouse_ids = self.pool.get('stock.warehouse').search(cr, uid, [('company_id', '=', company_id)], context=context)
if not warehouse_ids:
raise osv.except_osv(_('Error!'), _('There is no warehouse defined for selected company.'))
return False
return warehouse_ids[0]
def _get_shipped(self, cr, uid, ids, name, args, context=None):
@ -371,7 +371,7 @@ class sale_order_line(osv.osv):
if not isMto:
uom2 = False
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:
uom = False
if not uom2:

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