diff --git a/openerp/addons/base/i18n/ab.po b/openerp/addons/base/i18n/ab.po index 477c2118053..0cb2630e9c6 100644 --- a/openerp/addons/base/i18n/ab.po +++ b/openerp/addons/base/i18n/ab.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:37+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:33+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/af.po b/openerp/addons/base/i18n/af.po index 70c82f943bd..41ca8ed1ef1 100644 --- a/openerp/addons/base/i18n/af.po +++ b/openerp/addons/base/i18n/af.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:38+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:34+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/am.po b/openerp/addons/base/i18n/am.po index eb75e6b90f2..e6b1d64017e 100644 --- a/openerp/addons/base/i18n/am.po +++ b/openerp/addons/base/i18n/am.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:38+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:34+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ar.po b/openerp/addons/base/i18n/ar.po index 53ffccdb422..e1d7cb3a305 100644 --- a/openerp/addons/base/i18n/ar.po +++ b/openerp/addons/base/i18n/ar.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:38+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:34+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bg.po b/openerp/addons/base/i18n/bg.po index 01c1f3b2aad..4c25e3bb57a 100644 --- a/openerp/addons/base/i18n/bg.po +++ b/openerp/addons/base/i18n/bg.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:39+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:35+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bs.po b/openerp/addons/base/i18n/bs.po index 3f5a98859fd..c66e5dbb581 100644 --- a/openerp/addons/base/i18n/bs.po +++ b/openerp/addons/base/i18n/bs.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:39+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:34+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -1137,6 +1137,11 @@ msgid "" "If Value type is selected, the value will be used directly without " "evaluation." msgstr "" +"Izraz koji sadrži specifikaciju vrijednosti. \n" +"Kada je tip formule izabran, ovo polje može biti Python izraz koje može da " +"koristi iste vrijednosti kao kod uslovnih polja serverskih akcija.\n" +"Ako je tip vrijednosti izabran, vrijednost će biti korištena direktno bez " +"procjene." #. module: base #: model:res.country,name:base.ad @@ -1955,6 +1960,9 @@ msgid "" "simplified payment mode encoding, automatic picking lists generation and " "more." msgstr "" +"Omogućava Vam da dobijete najviše od POS-a sa brzim šifriranjem, " +"pojednostavljenim modelom šifriranja plaćanja, automatsko generisanje liste " +"preuzimanja robe sa skladišta i mnogo više." #. module: base #: code:addons/base/ir/ir_fields.py:164 @@ -2671,7 +2679,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_oauth_signup msgid "Signup with OAuth2 Authentication" -msgstr "" +msgstr "Prijavljivanje sa OAuth2 autentifikacijom" #. module: base #: selection:ir.model,state:0 @@ -3243,7 +3251,7 @@ msgstr "" #. module: base #: field:res.company,rml_header1:0 msgid "Company Tagline" -msgstr "" +msgstr "Slogan kompanije" #. module: base #: code:addons/base/res/res_users.py:674 @@ -3306,7 +3314,7 @@ msgstr "Nepoznat tip izvještaja: %s" #. module: base #: model:ir.module.module,summary:base.module_hr_expense msgid "Expenses Validation, Invoicing" -msgstr "" +msgstr "Validacija troškova, Fakturisanje" #. module: base #: model:ir.module.module,description:base.module_l10n_be_hr_payroll_account @@ -3325,7 +3333,7 @@ msgstr "Armenija" #. module: base #: model:ir.module.module,summary:base.module_hr_evaluation msgid "Periodical Evaluations, Appraisals, Surveys" -msgstr "" +msgstr "Periodične procjene, Ocjene, Ankete (istraživanja)" #. module: base #: model:ir.actions.act_window,name:base.ir_property_form @@ -5110,7 +5118,7 @@ msgstr "Preskoči" #. module: base #: model:ir.module.module,shortdesc:base.module_event_sale msgid "Events Sales" -msgstr "" +msgstr "Prodaja na događajima" #. module: base #: model:res.country,name:base.ls @@ -5253,6 +5261,18 @@ msgid "" " \n" "%(country_code)s: the code of the country" msgstr "" +"Možete ovde da odredite najčešći format za adresu koja pripada ovoj državi.\n" +"\n" +"Možete da koristite python-style šablon niza karaktera (na primjer, " +"koristite '%(street)s' da prikažete polje 'street') plus\n" +" \n" +"%(state_name)s: the name of the state\n" +" \n" +"%(state_code)s: šifra republike\n" +" \n" +"%(country_name)s: naziv države\n" +" \n" +"%(country_code)s: šifra države" #. module: base #: model:res.country,name:base.mu @@ -7513,7 +7533,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_report_intrastat msgid "Intrastat Reporting" -msgstr "" +msgstr "Izvještaji uvoznih/izvoznih deklaracija" #. module: base #: code:addons/base/res/res_users.py:131 @@ -8108,6 +8128,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kliknite da dodate kontakt u Adresar.\n" +"

\n" +" OpenERP Vam pomaže da pratite sve aktivnosti vezane\n" +" za kupca: diskusije, istorija poslovnih prilika, dokumenata " +"itd.\n" +"

\n" +" " #. module: base #: model:ir.actions.act_window,name:base.bank_account_update @@ -8691,7 +8719,7 @@ msgstr "Izvještaj introspekcije na objektima" #. module: base #: model:ir.module.module,shortdesc:base.module_web_analytics msgid "Google Analytics" -msgstr "" +msgstr "Google Analitika" #. module: base #: model:ir.module.module,description:base.module_note @@ -8719,17 +8747,17 @@ msgstr "" #. module: base #: field:ir.translation,name:0 msgid "Translated field" -msgstr "" +msgstr "Prevedeno polje" #. module: base #: model:ir.module.module,shortdesc:base.module_stock_location msgid "Advanced Routes" -msgstr "" +msgstr "Napredne Rute" #. module: base #: model:ir.module.module,shortdesc:base.module_pad msgid "Collaborative Pads" -msgstr "" +msgstr "Kolaborativne bilježnice" #. module: base #: model:res.country,name:base.np @@ -8739,7 +8767,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_document_page msgid "Document Page" -msgstr "" +msgstr "Stranica Dokumenta" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_ar @@ -8749,48 +8777,48 @@ msgstr "" #. module: base #: field:ir.module.module,description_html:0 msgid "Description HTML" -msgstr "" +msgstr "Opis HTML" #. module: base #: help:res.groups,implied_ids:0 msgid "Users of this group automatically inherit those groups" -msgstr "" +msgstr "Korisnici ovih grupa automatski nasljeđuju one grupe" #. module: base #: model:ir.module.module,summary:base.module_note msgid "Sticky notes, Collaborative, Memos" -msgstr "" +msgstr "Ljepljive zabilješke, Kolaboracije, Podsjetnici" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_attendance #: model:res.groups,name:base.group_hr_attendance msgid "Attendances" -msgstr "" +msgstr "Prisutnosti" #. module: base #: model:ir.module.module,shortdesc:base.module_warning msgid "Warning Messages and Alerts" -msgstr "" +msgstr "Poruke upozorenja i alarmi" #. module: base #: model:ir.actions.act_window,name:base.action_ui_view_custom #: model:ir.ui.menu,name:base.menu_action_ui_view_custom #: view:ir.ui.view.custom:0 msgid "Customized Views" -msgstr "" +msgstr "Prilagođeni Pogledi" #. module: base #: view:base.module.import:0 #: model:ir.actions.act_window,name:base.action_view_base_module_import msgid "Module Import" -msgstr "" +msgstr "Uvoz modula" #. module: base #: model:ir.actions.act_window,name:base.act_values_form_action #: model:ir.ui.menu,name:base.menu_values_form_action #: view:ir.values:0 msgid "Action Bindings" -msgstr "" +msgstr "Povezivanje Akcija" #. module: base #: help:res.partner,lang:0 @@ -8798,6 +8826,8 @@ msgid "" "If the selected language is loaded in the system, all documents related to " "this contact will be printed in this language. If not, it will be English." msgstr "" +"Ako je odabrani jezik učitan u sistem, svi dokumenti povezani sa ovim " +"kontaktom će se štampati na ovom jeziku. Ako ne, biti će na Engleskom." #. module: base #: model:ir.module.module,description:base.module_hr_evaluation @@ -8835,7 +8865,7 @@ msgstr "" #. module: base #: model:ir.ui.menu,name:base.menu_view_base_module_update msgid "Update Modules List" -msgstr "" +msgstr "Nadogradi listu modula" #. module: base #: code:addons/base/module/module.py:359 @@ -8843,11 +8873,13 @@ msgstr "" msgid "" "Unable to upgrade module \"%s\" because an external dependency is not met: %s" msgstr "" +"Nije se mogao nadograditi modul \"%s\" jer vanjska ovisnost nije ispunjena: " +"%s" #. module: base #: model:ir.module.module,shortdesc:base.module_account msgid "eInvoicing" -msgstr "" +msgstr "eFakturisanje" #. module: base #: code:addons/base/res/res_users.py:171 @@ -8858,12 +8890,16 @@ msgid "" "sure to save and close all forms before switching to a different company. " "(You can click on Cancel in the User Preferences now)" msgstr "" +"Molimo Vas da imate na umu da trenutno prikazani dokumenti možda nisu " +"relevantni nakon prelaska na drugu kompaniju. Ako imate ne sačuvane izmjene, " +"molimo da sačuvate i zatvorite sve fome prije prelaska u drugu kompaniju. " +"(Možete kliknuti na Otkaži u korisničkim postavkama)" #. module: base #: code:addons/orm.py:2818 #, python-format msgid "The value \"%s\" for the field \"%s.%s\" is not in the selection" -msgstr "" +msgstr "Vrijednost \"%s\" za polje\"%s.%s\" nije u odabiru" #. module: base #: view:ir.actions.configuration.wizard:0 @@ -8889,7 +8925,7 @@ msgstr "" #. module: base #: view:res.lang:0 msgid "%j - Day of the year [001,366]." -msgstr "" +msgstr "%j - Dan u godini [001,366]." #. module: base #: selection:base.language.install,lang:0 @@ -8899,7 +8935,7 @@ msgstr "" #. module: base #: field:res.currency,position:0 msgid "Symbol Position" -msgstr "" +msgstr "Pozicija Simbola" #. module: base #: model:ir.module.module,description:base.module_l10n_de @@ -8917,7 +8953,7 @@ msgstr "" #. module: base #: field:ir.actions.report.xml,attachment_use:0 msgid "Reload from Attachment" -msgstr "" +msgstr "Ponovno učitaj iz Zakačke" #. module: base #: model:res.country,name:base.mx @@ -8933,11 +8969,15 @@ msgid "" "\n" "(Document type: %s)" msgstr "" +"Za ovu vrstu dokumenta, možete pristupiti samo zapisima koje ste Vi " +"kreirali.\n" +"\n" +"(Document type: %s)" #. module: base #: view:base.language.export:0 msgid "documentation" -msgstr "" +msgstr "dokumentacija" #. module: base #: help:ir.model,osv_memory:0 @@ -8945,17 +8985,19 @@ msgid "" "This field specifies whether the model is transient or not (i.e. if records " "are automatically deleted from the database or not)" msgstr "" +"Ovo polje označava dali je model prolazni ili nije (npr.: dali su zapisi " +"automatski obrisani iz baze ili nisu)" #. module: base #: code:addons/base/ir/ir_mail_server.py:445 #, python-format msgid "Missing SMTP Server" -msgstr "" +msgstr "Nedostaje SMTP Server" #. module: base #: sql_constraint:ir.translation:0 msgid "Language code of translation item must be among known languages" -msgstr "" +msgstr "Šifra jezika stavke koja se prevodi mora biti među poznatim jezicima" #. module: base #: field:base.language.export,data:0 @@ -8966,7 +9008,7 @@ msgstr "Datoteka" #. module: base #: model:ir.actions.act_window,name:base.action_view_base_module_upgrade_install msgid "Module Upgrade Install" -msgstr "" +msgstr "Instalacija Nadogradnje Modula" #. module: base #: model:ir.model,name:base.model_ir_actions_configuration_wizard @@ -8982,12 +9024,12 @@ msgstr "%b - Skraćen naziv mjeseca." #: code:addons/base/ir/ir_model.py:729 #, python-format msgid "Sorry, you are not allowed to delete this document." -msgstr "" +msgstr "Žao nam je, nije Vam dozvoljeno brisanje ovog dokumenta." #. module: base #: constraint:ir.rule:0 msgid "Rules can not be applied on the Record Rules model." -msgstr "" +msgstr "Pravila ne mogu biti primjenjena na modelu Pravila Zapisa." #. module: base #: field:res.partner,supplier:0 @@ -8999,12 +9041,12 @@ msgstr "Dobavljač" #: view:ir.actions.server:0 #: selection:ir.actions.server,state:0 msgid "Multi Actions" -msgstr "" +msgstr "Višeakcijske Akcije" #. module: base #: model:ir.module.module,summary:base.module_mail msgid "Discussions, Mailing Lists, News" -msgstr "" +msgstr "Diskusije, Mailing Liste, Novosti" #. module: base #: model:ir.module.module,description:base.module_fleet @@ -9030,7 +9072,7 @@ msgstr "" #. module: base #: field:multi_company.default,company_dest_id:0 msgid "Default Company" -msgstr "" +msgstr "Zadana Kompanija" #. module: base #: selection:base.language.install,lang:0 @@ -9040,12 +9082,12 @@ msgstr "" #. module: base #: help:ir.ui.view,xml_id:0 msgid "ID of the view defined in xml file" -msgstr "" +msgstr "ID pogleda definisan u xml fajlu" #. module: base #: model:ir.model,name:base.model_base_module_import msgid "Import Module" -msgstr "" +msgstr "Uvezi Modul" #. module: base #: model:res.country,name:base.as @@ -9055,28 +9097,28 @@ msgstr "" #. module: base #: view:ir.attachment:0 msgid "My Document(s)" -msgstr "" +msgstr "Moj(i) Dokument(i)" #. module: base #: help:ir.actions.act_window,res_model:0 msgid "Model name of the object to open in the view window" -msgstr "" +msgstr "Ime Modela objekta za otvaranje u prozoru pogleda" #. module: base #: field:ir.model.fields,selectable:0 msgid "Selectable" -msgstr "" +msgstr "Može se izabrati" #. module: base #: code:addons/base/ir/ir_mail_server.py:222 #, python-format msgid "Everything seems properly set up!" -msgstr "" +msgstr "Čini se da je sve pravilno postavljeno!" #. module: base #: view:res.request.link:0 msgid "Request Link" -msgstr "" +msgstr "Veza Zahtjeva" #. module: base #: view:ir.attachment:0 @@ -9088,24 +9130,24 @@ msgstr "URL" #. module: base #: help:res.country,name:0 msgid "The full name of the country." -msgstr "" +msgstr "Puno ime države" #. module: base #: selection:ir.actions.server,state:0 msgid "Iteration" -msgstr "" +msgstr "Ponavljanje" #. module: base #: code:addons/orm.py:4246 #: code:addons/orm.py:4347 #, python-format msgid "UserError" -msgstr "" +msgstr "Korisnička Greška" #. module: base #: model:ir.module.module,summary:base.module_project_issue msgid "Support, Bug Tracker, Helpdesk" -msgstr "" +msgstr "Podrška, Praćenje grešaka, Helpdesk" #. module: base #: model:res.country,name:base.ae @@ -9119,28 +9161,31 @@ msgid "" "related to a model that uses the need_action mechanism, this field is set to " "true. Otherwise, it is false." msgstr "" +"Ako je akcija ulaska menija act_window akcija, i ako je ova akcija povezana " +"sa modelom koji koristi need_action mehanizam, ovo polje je postavljeno na " +"tačno. U suprotom je ne tačno." #. module: base #: code:addons/orm.py:3961 #, python-format msgid "" "Unable to delete this document because it is used as a default property" -msgstr "" +msgstr "Ne može se obrisati ovaj dokument jer se koristi kao zadana osobina" #. module: base #: model:res.partner.category,name:base.res_partner_category_5 msgid "Silver" -msgstr "" +msgstr "Srebrna" #. module: base #: field:res.partner.title,shortcut:0 msgid "Abbreviation" -msgstr "" +msgstr "Skraćenica" #. module: base #: model:ir.ui.menu,name:base.menu_crm_case_job_req_main msgid "Recruitment" -msgstr "" +msgstr "Regrutovanje" #. module: base #: model:ir.module.module,description:base.module_l10n_gr @@ -9156,7 +9201,7 @@ msgstr "" #. module: base #: view:ir.values:0 msgid "Action Reference" -msgstr "" +msgstr "Referenca Akcije" #. module: base #: model:ir.module.module,description:base.module_auth_ldap @@ -9273,23 +9318,25 @@ msgstr "" msgid "" "New column name must still start with x_ , because it is a custom field!" msgstr "" +"Novo ime kolone još uvijek mora da počinje sa x_, jer je korisnički " +"definisano polje!" #. module: base #: model:ir.module.module,shortdesc:base.module_mrp_repair msgid "Repairs Management" -msgstr "" +msgstr "Upravljanje Popravkama" #. module: base #: model:ir.module.module,shortdesc:base.module_account_asset msgid "Assets Management" -msgstr "" +msgstr "Upravljanje Sredstvima" #. module: base #: view:ir.model.access:0 #: view:ir.rule:0 #: field:ir.rule,global:0 msgid "Global" -msgstr "" +msgstr "Opšte" #. module: base #: model:res.country,name:base.cz @@ -9299,7 +9346,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_claim_from_delivery msgid "Claim on Deliveries" -msgstr "" +msgstr "Zahtjev na Isporukama" #. module: base #: model:res.country,name:base.sb @@ -9311,7 +9358,7 @@ msgstr "" #: code:addons/orm.py:4685 #, python-format msgid "AccessError" -msgstr "" +msgstr "Pristupna Greška" #. module: base #: model:ir.module.module,description:base.module_web_gantt @@ -9325,19 +9372,19 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_base_status msgid "State/Stage Management" -msgstr "" +msgstr "Upravljanje Stanjima/Fazama" #. module: base #: model:ir.module.category,name:base.module_category_warehouse_management msgid "Warehouse" -msgstr "" +msgstr "Skladište" #. module: base #: field:ir.exports,resource:0 #: model:ir.module.module,shortdesc:base.module_resource #: field:ir.property,res_id:0 msgid "Resource" -msgstr "" +msgstr "Resurs" #. module: base #: model:ir.module.module,description:base.module_process @@ -9363,18 +9410,18 @@ msgstr "" #. module: base #: view:ir.filters:0 msgid "Filters shared with all users" -msgstr "" +msgstr "Filteri djeljeni sa svim korisnicima" #. module: base #: view:ir.translation:0 #: model:ir.ui.menu,name:base.menu_translation msgid "Translations" -msgstr "" +msgstr "Prevodi" #. module: base #: view:ir.actions.report.xml:0 msgid "Report" -msgstr "" +msgstr "Izvještaj" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_prof @@ -9389,6 +9436,9 @@ msgid "" "instead.If SSL is needed, an upgrade to Python 2.6 on the server-side should " "do the trick." msgstr "" +"Vaš OpenERP Server ne podržava SMTP-over-SSL. Možete koristiti STARTTLS " +"umjesto toga. Ako je SSL potreban, nadogradnja na Python 2.6 na strani " +"servera bi trebala biti dovoljna." #. module: base #: model:res.country,name:base.ua @@ -9407,12 +9457,12 @@ msgstr "" #. module: base #: selection:ir.mail_server,smtp_encryption:0 msgid "None" -msgstr "" +msgstr "Ništa" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_holidays msgid "Leave Management" -msgstr "" +msgstr "Upravljanje odsutnostima" #. module: base #: model:res.company,overdue_msg:base.main_company @@ -9428,11 +9478,22 @@ msgid "" "Thank you in advance for your cooperation.\n" "Best Regards," msgstr "" +"Poštovani,\n" +"\n" +"uvidom u našu evidenciju utvrđeno je da imate otvorene dospjele stavke. " +"Detalji su u nastavku.\n" +"Ukoliko ste iznos podmirili, molimo Vas da zanemarite ovu obavijest. U " +"suprotnom Vas molimo da podmirite svoje dugovanje.\n" +"Ukoliko imate bilo kakvih pitanja ili nejasnoća, budite slobodni " +"kontaktirati nas.\n" +"\n" +"Unaprijed zahvaljujem na Vašoj suradnji.\n" +"Srdačan pozdrav," #. module: base #: view:ir.module.category:0 msgid "Module Category" -msgstr "" +msgstr "Kategorija modula" #. module: base #: model:res.country,name:base.us @@ -9442,7 +9503,7 @@ msgstr "" #. module: base #: view:ir.ui.view:0 msgid "Architecture" -msgstr "" +msgstr "Arhitektura" #. module: base #: model:res.country,name:base.ml @@ -9452,7 +9513,7 @@ msgstr "" #. module: base #: model:ir.ui.menu,name:base.menu_project_config_project msgid "Stages" -msgstr "" +msgstr "Faze" #. module: base #: selection:base.language.install,lang:0 @@ -9467,7 +9528,7 @@ msgstr "" #. module: base #: field:ir.cron,interval_number:0 msgid "Interval Number" -msgstr "" +msgstr "Broj intervala" #. module: base #: model:res.country,name:base.dz @@ -9521,24 +9582,24 @@ msgstr "" #. module: base #: field:ir.attachment,create_date:0 msgid "Date Created" -msgstr "" +msgstr "Datum Kreiranja" #. module: base #: help:ir.actions.server,trigger_name:0 msgid "The workflow signal to trigger" -msgstr "" +msgstr "Signal radnog toka za okidanje" #. module: base #: selection:base.language.install,state:0 #: selection:base.module.import,state:0 #: selection:base.module.update,state:0 msgid "done" -msgstr "" +msgstr "gotovo" #. module: base #: view:ir.actions.act_window:0 msgid "General Settings" -msgstr "" +msgstr "Opšte postavke" #. module: base #: model:ir.module.module,description:base.module_l10n_in @@ -9559,7 +9620,7 @@ msgstr "" #. module: base #: model:ir.ui.menu,name:base.menu_administration_shortcut msgid "Custom Shortcuts" -msgstr "" +msgstr "Prilagođene prečice" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_si @@ -9582,31 +9643,31 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_plugin msgid "CRM Plugins" -msgstr "" +msgstr "CRM Dodaci" #. module: base #: model:ir.actions.act_window,name:base.action_model_model #: model:ir.model,name:base.model_ir_model #: model:ir.ui.menu,name:base.ir_model_model_menu msgid "Models" -msgstr "" +msgstr "Modeli" #. module: base #: code:addons/base/module/module.py:499 #, python-format msgid "The `base` module cannot be uninstalled" -msgstr "" +msgstr "Modul 'base' nije moguće deinstalirati" #. module: base #: code:addons/base/ir/ir_cron.py:262 #, python-format msgid "Record cannot be modified right now" -msgstr "" +msgstr "Zapis se trenutno ne može mjenjati" #. module: base #: selection:ir.actions.todo,type:0 msgid "Launch Manually" -msgstr "" +msgstr "Pokreni ručno" #. module: base #: model:res.country,name:base.be @@ -9623,6 +9684,7 @@ msgstr "" #, python-format msgid "Sorry, you are not allowed to create this kind of document." msgstr "" +"Izvinjavamo se, ali nije Vam dozvoljeno da kreirate ovu vrstu dokumenta." #. module: base #: field:base.language.export,lang:0 @@ -9632,7 +9694,7 @@ msgstr "" #: view:res.lang:0 #: field:res.partner,lang:0 msgid "Language" -msgstr "" +msgstr "Jezik" #. module: base #: model:res.country,name:base.gm @@ -9649,28 +9711,28 @@ msgstr "" #: view:res.partner:0 #: field:res.users,company_ids:0 msgid "Companies" -msgstr "" +msgstr "Kompanije" #. module: base #: help:res.currency,symbol:0 msgid "Currency sign, to be used when printing amounts." -msgstr "" +msgstr "Kursne oznake, koje će se koristiti prilikom štampanja iznosa." #. module: base #: view:res.lang:0 msgid "%H - Hour (24-hour clock) [00,23]." -msgstr "" +msgstr "%H - Sat (24-satni) [00,23]." #. module: base #: field:ir.model.fields,on_delete:0 msgid "On Delete" -msgstr "" +msgstr "Pri brisanju" #. module: base #: code:addons/base/ir/ir_model.py:347 #, python-format msgid "Model %s does not exist!" -msgstr "" +msgstr "Ne postoji Model %s!" #. module: base #: model:ir.module.module,shortdesc:base.module_mrp_jit @@ -9682,7 +9744,7 @@ msgstr "" #: field:ir.actions.server,code:0 #: selection:ir.actions.server,state:0 msgid "Python Code" -msgstr "" +msgstr "Python Kod" #. module: base #: help:ir.actions.server,state:0 @@ -9719,13 +9781,13 @@ msgstr "" #: view:res.users:0 #: view:wizard.ir.model.menu.create:0 msgid "Cancel" -msgstr "" +msgstr "Otkaži" #. module: base #: code:addons/orm.py:1507 #, python-format msgid "Unknown database identifier '%s'" -msgstr "" +msgstr "Ne poznat identifikator baze '%s'" #. module: base #: selection:base.language.export,format:0 @@ -9781,7 +9843,7 @@ msgstr "" #. module: base #: model:res.country,name:base.nt msgid "Neutral Zone" -msgstr "" +msgstr "Neutralna Zona" #. module: base #: model:ir.module.module,description:base.module_portal_sale @@ -9816,27 +9878,27 @@ msgstr "" #: code:addons/base/ir/ir_fields.py:316 #, python-format msgid "external id" -msgstr "" +msgstr "vanjski id" #. module: base #: view:ir.model:0 msgid "Custom" -msgstr "" +msgstr "Prilagođeno" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_margin msgid "Margins in Sales Orders" -msgstr "" +msgstr "Marža u prodajnim narudžbama" #. module: base #: model:ir.module.module,shortdesc:base.module_purchase msgid "Purchase Management" -msgstr "" +msgstr "Upravljanje nabavkom" #. module: base #: field:ir.module.module,published_version:0 msgid "Published Version" -msgstr "" +msgstr "Objavljena verzija" #. module: base #: model:res.country,name:base.is @@ -9847,7 +9909,7 @@ msgstr "" #: model:ir.actions.act_window,name:base.ir_action_window #: model:ir.ui.menu,name:base.menu_ir_action_window msgid "Window Actions" -msgstr "" +msgstr "Akcije prozora" #. module: base #: model:ir.module.module,description:base.module_portal_project_issue @@ -9863,7 +9925,7 @@ msgstr "" #. module: base #: view:res.lang:0 msgid "%I - Hour (12-hour clock) [01,12]." -msgstr "" +msgstr "%I - Sat (12-satni) [01,12]." #. module: base #: view:res.config:0 @@ -9878,7 +9940,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_oauth msgid "OAuth2 Authentication" -msgstr "" +msgstr "OAuth2 Autentifikacija" #. module: base #: view:workflow:0 @@ -9889,11 +9951,17 @@ msgid "" "default value. If you don't do that, your customization will be overwrited " "at the next update or upgrade to a future version of OpenERP." msgstr "" +"Kada se prilagođava radni tok, molimo pazite da ne izmjenite postojeći čvor " +"ili strelicu, nego umjesto toga dodajte nove čvorove ili strelice. Ako baš " +"morate da izmjenite čvor ili strelicu, možete samo da mjenjate polja koja su " +"prazna ili postavljena na zadane vrijednosti. Ako se ne budete pridržavali " +"navedenog, vaše izmjene će biti prepisane prilikom sljedeće nadogradnje na " +"novu ili buduću verziju OpenERP-a." #. module: base #: report:ir.module.reference:0 msgid "Reports :" -msgstr "" +msgstr "Izvještaji :" #. module: base #: model:ir.module.module,description:base.module_multi_company @@ -9909,13 +9977,13 @@ msgstr "" #. module: base #: sql_constraint:res.currency:0 msgid "The currency code must be unique per company!" -msgstr "" +msgstr "Šifra valute mora biti jedinstvena na nivou kompanije!" #. module: base #: code:addons/base/module/wizard/base_export_language.py:39 #, python-format msgid "New Language (Empty translation template)" -msgstr "" +msgstr "Novi jezik (Prazan šablon prevoda)" #. module: base #: help:ir.actions.server,email:0 @@ -9924,6 +9992,9 @@ msgid "" "same values as for the condition field.\n" "Example: object.invoice_address_id.email, or 'me@example.com'" msgstr "" +"Izraz koji vraća e-mail adresu na koju se šalje. Može biti bazirano na istim " +"vrijednostima kao na uslovnim poljima.\n" +"Primjer: object.invoice_address_id.email, ili 'me@example.com'" #. module: base #: model:ir.module.module,description:base.module_project_issue_sheet @@ -9947,13 +10018,13 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_product_expiry msgid "Products Expiry Date" -msgstr "" +msgstr "Datum isteka proizvoda" #. module: base #: code:addons/base/res/res_config.py:419 #, python-format msgid "Click 'Continue' to configure the next addon..." -msgstr "" +msgstr "Odaberite 'Nastavi' za postavke sljedećeg dodatka..." #. module: base #: field:ir.actions.server,record_id:0 @@ -9980,16 +10051,17 @@ msgstr "" msgid "" "Select the object on which the action will work (read, write, create)." msgstr "" +"Odaberite objekat na kojem će akcija raditi (čitanje, pisanje, kreiranje)" #. module: base #: field:base.language.import,name:0 msgid "Language Name" -msgstr "" +msgstr "Naziv jezika" #. module: base #: selection:ir.property,type:0 msgid "Boolean" -msgstr "" +msgstr "Logički" #. module: base #: help:ir.mail_server,smtp_encryption:0 @@ -10001,6 +10073,12 @@ msgid "" "- SSL/TLS: SMTP sessions are encrypted with SSL/TLS through a dedicated port " "(default: 465)" msgstr "" +"Odaberite šemu enkripcije konekcije:\n" +"- Nema: SMTP sesije su urađene u čistom tekstu.\n" +"- TLS (STARTTLS): TLS enkripcija je zahtjevana pri začetku SMTP sesije " +"(Preporučeno)\n" +"- SSL/TLS: SMTP sesije su enkriptovane sa SSL/TLS kroz posvećeni port " +"(zadano: 465)" #. module: base #: view:ir.model:0 @@ -10010,7 +10088,7 @@ msgstr "Opis polja" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic_contract_hr_expense msgid "Contracts Management: hr_expense link" -msgstr "" +msgstr "Upravljanje ugovorima: veza hr_expense" #. module: base #: view:ir.attachment:0 @@ -10025,12 +10103,12 @@ msgstr "" #: view:res.partner:0 #: view:workflow.activity:0 msgid "Group By..." -msgstr "" +msgstr "Grupiši po..." #. module: base #: view:base.module.update:0 msgid "Module Update Result" -msgstr "" +msgstr "Rezultati nadogradnje modula" #. module: base #: model:ir.module.module,description:base.module_analytic_contract_hr_expense @@ -10045,17 +10123,17 @@ msgstr "" #. module: base #: field:ir.attachment,store_fname:0 msgid "Stored Filename" -msgstr "" +msgstr "Pohranjeni naziv datoteke" #. module: base #: field:res.partner,use_parent_address:0 msgid "Use Company Address" -msgstr "" +msgstr "Koristi adresu kompanije" #. module: base #: model:ir.module.module,summary:base.module_hr_holidays msgid "Holidays, Allocation and Leave Requests" -msgstr "" +msgstr "Godišnji odmori, raspodjela i zahtjevi za odsustvom" #. module: base #: model:ir.module.module,description:base.module_web_hello @@ -10070,20 +10148,20 @@ msgstr "" #: selection:ir.module.module,state:0 #: selection:ir.module.module.dependency,state:0 msgid "To be installed" -msgstr "" +msgstr "Označen za instalaciju" #. module: base #: view:ir.model:0 #: model:ir.module.module,shortdesc:base.module_base #: field:res.currency,base:0 msgid "Base" -msgstr "" +msgstr "Osnova" #. module: base #: field:ir.model.data,model:0 #: field:ir.values,model:0 msgid "Model Name" -msgstr "" +msgstr "Naziv modela" #. module: base #: selection:base.language.install,lang:0 @@ -10102,6 +10180,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kliknite za kreiranje novog kontakta u adresaru.\n" +"

\n" +" Pomoću OpenERP-a moguće je jednostavno pratiti sve \n" +" aktivnosti povezane sa dobavljačima: diskusije, istoriju \n" +" nabavke, dokumente i sl.\n" +"

\n" +" " #. module: base #: model:res.country,name:base.lr @@ -10137,7 +10223,7 @@ msgstr "Bilješke" #: field:ir.server.object.lines,value:0 #: field:ir.values,value:0 msgid "Value" -msgstr "" +msgstr "Vrijednost" #. module: base #: view:base.language.import:0 @@ -10146,7 +10232,7 @@ msgstr "" #: selection:ir.translation,type:0 #: field:res.partner.bank.type,code:0 msgid "Code" -msgstr "" +msgstr "Šifra" #. module: base #: model:ir.model,name:base.model_res_config_installer @@ -10161,12 +10247,12 @@ msgstr "" #. module: base #: selection:ir.cron,interval_type:0 msgid "Minutes" -msgstr "" +msgstr "Minute" #. module: base #: view:res.currency:0 msgid "Display" -msgstr "" +msgstr "Prikaz" #. module: base #: model:res.groups,name:base.group_multi_company @@ -10178,22 +10264,23 @@ msgstr "" msgid "" "If specified, the action will replace the standard menu for this user." msgstr "" +"Ako je specifirana, akcija će zamjeniti standarni meni za ovog korisnika." #. module: base #: model:ir.actions.report.xml,name:base.preview_report msgid "Preview Report" -msgstr "" +msgstr "Pregledaj izvještaj" #. module: base #: model:ir.module.module,shortdesc:base.module_purchase_analytic_plans msgid "Purchase Analytic Plans" -msgstr "" +msgstr "Analitički planovi nabavke" #. module: base #: model:ir.actions.act_window,name:base.ir_sequence_type #: model:ir.ui.menu,name:base.menu_ir_sequence_type msgid "Sequence Codes" -msgstr "" +msgstr "Tipovi sekvenci" #. module: base #: selection:base.language.install,lang:0 @@ -10206,16 +10293,18 @@ msgid "" "All pending configuration wizards have been executed. You may restart " "individual wizards via the list of configuration wizards." msgstr "" +"Svi čarobnjaci koji su u procesu su izvršeni. Možete da ponovno pokrenete " +"pojedine čarobnjake putem liste konfiguracijskih čarobnjaka." #. module: base #: view:ir.sequence:0 msgid "Current Year with Century: %(year)s" -msgstr "" +msgstr "Trenutna godina sa 4 znaka: %(year)s" #. module: base #: field:ir.exports,export_fields:0 msgid "Export ID" -msgstr "" +msgstr "ID izvoza" #. module: base #: model:res.country,name:base.fr @@ -10226,12 +10315,12 @@ msgstr "" #: view:workflow.activity:0 #: field:workflow.activity,flow_stop:0 msgid "Flow Stop" -msgstr "" +msgstr "Zaustavi tok" #. module: base #: selection:ir.cron,interval_type:0 msgid "Weeks" -msgstr "" +msgstr "Sedmice" #. module: base #: model:res.country,name:base.af @@ -10248,7 +10337,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_marketing_campaign_crm_demo msgid "Marketing Campaign - Demo" -msgstr "" +msgstr "Markentiške Kampanje" #. module: base #: code:addons/base/ir/ir_fields.py:360 @@ -10256,44 +10345,45 @@ msgstr "" msgid "" "Can not create Many-To-One records indirectly, import the field separately" msgstr "" +"Ne mogu se kreirati Many-To-One zapisi indirektno, uvezite polje odvojeno" #. module: base #: field:ir.cron,interval_type:0 msgid "Interval Unit" -msgstr "" +msgstr "Jedinica intervala" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_stock msgid "Portal Stock" -msgstr "" +msgstr "Portal Zalihe" #. module: base #: field:workflow.activity,kind:0 msgid "Kind" -msgstr "" +msgstr "Vrsta" #. module: base #: code:addons/orm.py:4647 #, python-format msgid "This method does not exist anymore" -msgstr "" +msgstr "Ova metoda više ne postoji" #. module: base #: view:base.update.translations:0 #: model:ir.actions.act_window,name:base.action_wizard_update_translations #: model:ir.ui.menu,name:base.menu_wizard_update_translations msgid "Synchronize Terms" -msgstr "" +msgstr "Sinhronizacija termina" #. module: base #: field:res.lang,thousands_sep:0 msgid "Thousands Separator" -msgstr "" +msgstr "Separator hiljade" #. module: base #: field:res.request,create_date:0 msgid "Created Date" -msgstr "" +msgstr "Datum kreiranja" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_cn @@ -10303,7 +10393,7 @@ msgstr "" #. module: base #: sql_constraint:ir.model.constraint:0 msgid "Constraints with the same name are unique per module." -msgstr "" +msgstr "Ograničenja sa istim imenom su jedinstvena na nivou jednog modula." #. module: base #: model:ir.module.module,description:base.module_report_intrastat @@ -10322,16 +10412,18 @@ msgid "" "Select the action that will be executed. Loop action will not be avaliable " "inside loop." msgstr "" +"Odaberite akciju koja će biti izvšena. Akcija petlje neće biti dostupna " +"unutar petlje." #. module: base #: help:ir.model.data,res_id:0 msgid "ID of the target record in the database" -msgstr "" +msgstr "ID ciljanog zapisa u bazi" #. module: base #: model:ir.module.module,shortdesc:base.module_account_analytic_analysis msgid "Contracts Management" -msgstr "" +msgstr "Upravljanje Ugovorima" #. module: base #: selection:base.language.install,lang:0 @@ -10346,34 +10438,34 @@ msgstr "" #. module: base #: field:res.partner,image_medium:0 msgid "Medium-sized image" -msgstr "" +msgstr "Slika srednje veličine" #. module: base #: view:ir.model:0 msgid "In Memory" -msgstr "" +msgstr "Unutar Memorije" #. module: base #: view:ir.actions.todo:0 msgid "Todo" -msgstr "" +msgstr "Za Uraditi" #. module: base #: model:ir.module.module,shortdesc:base.module_product_visible_discount msgid "Prices Visible Discounts" -msgstr "" +msgstr "Vidljivi popusti na cijenama" #. module: base #: field:ir.attachment,datas:0 msgid "File Content" -msgstr "" +msgstr "Sadržaj datoteke" #. module: base #: model:ir.actions.act_window,name:base.action_model_relation #: view:ir.model.relation:0 #: model:ir.ui.menu,name:base.ir_model_relation_menu msgid "ManyToMany Relations" -msgstr "" +msgstr "ManyToMany Relacije" #. module: base #: model:res.country,name:base.pa @@ -10385,11 +10477,12 @@ msgstr "" msgid "" "The group that a user must have to be authorized to validate this transition." msgstr "" +"Grupa kojoj korisnik mora pripadati kako bi mogao odobriti ovaj prelaz." #. module: base #: constraint:res.users:0 msgid "The chosen company is not in the allowed companies for this user" -msgstr "" +msgstr "Odabrana kompanija nije u listi dozvoljenih za ovog korisnika" #. module: base #: model:res.country,name:base.gi @@ -10399,7 +10492,7 @@ msgstr "" #. module: base #: field:ir.actions.report.xml,report_name:0 msgid "Service Name" -msgstr "" +msgstr "Naziv usluge" #. module: base #: model:res.country,name:base.pn @@ -10409,20 +10502,22 @@ msgstr "" #. module: base #: field:res.partner,category_id:0 msgid "Tags" -msgstr "" +msgstr "Oznake" #. module: base #: view:base.module.upgrade:0 msgid "" "We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)." msgstr "" +"Savjetujemo Vam da osvježite tab menija kako bi ste vidjeli nove menije " +"(Ctrl+T then Ctrl+R)." #. module: base #: model:ir.actions.act_window,name:base.action_rule #: view:ir.rule:0 #: model:ir.ui.menu,name:base.menu_action_rule msgid "Record Rules" -msgstr "" +msgstr "Pravila zapisa" #. module: base #: view:multi_company.default:0 @@ -10433,18 +10528,18 @@ msgstr "" #: model:ir.module.category,name:base.module_category_portal #: model:ir.module.module,shortdesc:base.module_portal msgid "Portal" -msgstr "" +msgstr "Portal" #. module: base #: selection:ir.translation,state:0 msgid "To Translate" -msgstr "" +msgstr "Za prevesti" #. module: base #: code:addons/base/ir/ir_fields.py:294 #, python-format msgid "See all possible values" -msgstr "" +msgstr "Vidi sve moguće vrijednosti" #. module: base #: model:ir.module.module,description:base.module_claim_from_delivery @@ -10468,26 +10563,29 @@ msgid "" "OpenERP will automatically adds some '0' on the left of the 'Next Number' to " "get the required padding size." msgstr "" +"OpenERP će automatski dodati nekoliko '0' sa lijeve strane 'Sljedećeg Broja' " +"da bi se dobio odgovarajuća dužina broja" #. module: base #: help:ir.model.constraint,name:0 msgid "PostgreSQL constraint or foreign key name." -msgstr "" +msgstr "PostgreSQL ograničenje ili naziv stranog ključa" #. module: base #: view:res.company:0 msgid "Click to set your company logo." -msgstr "" +msgstr "Kliknite za postavljanje logotipa kompanije" #. module: base #: view:res.lang:0 msgid "%A - Full weekday name." -msgstr "" +msgstr "%A - Puno ime dana u sedmici." #. module: base #: help:ir.values,user_id:0 msgid "If set, action binding only applies for this user." msgstr "" +"Ako je postavljeno, povezivanje sa akcijom se odnosi samo za ovog korisnika." #. module: base #: model:res.country,name:base.gw @@ -10497,17 +10595,17 @@ msgstr "" #. module: base #: field:ir.actions.report.xml,header:0 msgid "Add RML Header" -msgstr "" +msgstr "Dodaj RML zaglavlje" #. module: base #: help:res.company,rml_footer:0 msgid "Footer text displayed at the bottom of all reports." -msgstr "" +msgstr "Tekst podnožja prikazan na dnu svih izvještaja" #. module: base #: field:ir.module.module,icon:0 msgid "Icon URL" -msgstr "" +msgstr "URL ikone" #. module: base #: model:ir.module.module,shortdesc:base.module_note_pad @@ -10530,7 +10628,7 @@ msgstr "" #. module: base #: sql_constraint:res.lang:0 msgid "The code of the language must be unique !" -msgstr "" +msgstr "Šifra jezika mora biti jedinstvena!" #. module: base #: model:ir.actions.act_window,name:base.action_attachment @@ -10538,12 +10636,12 @@ msgstr "" #: view:ir.attachment:0 #: model:ir.ui.menu,name:base.menu_action_attachment msgid "Attachments" -msgstr "" +msgstr "Prilozi" #. module: base #: help:res.company,bank_ids:0 msgid "Bank accounts related to this company" -msgstr "" +msgstr "Bankovni računi povezani sa ovom kompanijom" #. module: base #: model:ir.module.category,name:base.module_category_sales_management @@ -10553,7 +10651,7 @@ msgstr "" #: model:ir.ui.menu,name:base.menu_sales #: model:ir.ui.menu,name:base.next_id_64 msgid "Sales" -msgstr "" +msgstr "Prodaja" #. module: base #: field:ir.actions.server,child_ids:0 @@ -10568,30 +10666,32 @@ msgstr "" #. module: base #: selection:ir.actions.todo,state:0 msgid "Done" -msgstr "" +msgstr "Gotovo" #. module: base #: help:ir.cron,doall:0 msgid "" "Specify if missed occurrences should be executed when the server restarts." msgstr "" +"Specifirajte ako se propušteni događaji trebaju izvršiti nakon ponovnog " +"pokretanja servera." #. module: base #: model:res.partner.title,name:base.res_partner_title_miss #: model:res.partner.title,shortcut:base.res_partner_title_miss msgid "Miss" -msgstr "" +msgstr "Gospođica" #. module: base #: view:ir.model.access:0 #: field:ir.model.access,perm_write:0 msgid "Write Access" -msgstr "" +msgstr "Pisanje" #. module: base #: view:res.lang:0 msgid "%m - Month number [01,12]." -msgstr "" +msgstr "%m - Mjesec [01,12]." #. module: base #: view:res.bank:0 @@ -10604,7 +10704,7 @@ msgstr "" #: field:res.partner.bank,city:0 #: view:res.users:0 msgid "City" -msgstr "" +msgstr "Grad" #. module: base #: model:res.country,name:base.qa @@ -10619,18 +10719,18 @@ msgstr "" #. module: base #: model:res.groups,name:base.group_sale_salesman msgid "See Own Leads" -msgstr "" +msgstr "Vidi vlastite potencijale" #. module: base #: view:ir.actions.todo:0 #: selection:ir.actions.todo,state:0 msgid "To Do" -msgstr "" +msgstr "Za Uraditi" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_hr_employees msgid "Portal HR employees" -msgstr "" +msgstr "Portal Zaposlenih" #. module: base #: selection:base.language.install,lang:0 @@ -10643,11 +10743,13 @@ msgid "" "Provide the field name that the record id refers to for the write operation. " "If it is empty it will refer to the active id of the object." msgstr "" +"Unesite naziv polja na koji se odnosi ID zapisa za operacije pisanja. Ako je " +"prazno odnosiće se na aktivni ID objekta." #. module: base #: selection:ir.module.module,license:0 msgid "GPL-3 or later version" -msgstr "" +msgstr "GPL-3 ili novija verzija" #. module: base #: code:addons/orm.py:2033 @@ -10656,11 +10758,13 @@ msgid "" "Insufficient fields to generate a Calendar View for %s, missing a date_stop " "or a date_delay" msgstr "" +"Nedovoljno polja za izradu kalendarskog pogleda za %s, nedostaje datum kraja " +"ili datum odgode" #. module: base #: field:workflow.activity,action:0 msgid "Python Action" -msgstr "" +msgstr "Python akcija" #. module: base #: selection:base.language.install,lang:0 @@ -10673,6 +10777,8 @@ msgid "" "Manage the partner titles you want to have available in your system. The " "partner titles is the legal status of the company: Private Limited, SA, etc." msgstr "" +"Upravljajte statusima partnera koje želite imati dostupne u svom sistemu. " +"Staus partnera je pravni status kompanije, npr.: d.o.o., s.t.r. itd." #. module: base #: view:res.bank:0 @@ -10681,7 +10787,7 @@ msgstr "" #: view:res.partner.bank:0 #: view:res.users:0 msgid "Address" -msgstr "" +msgstr "Adresa" #. module: base #: selection:base.language.install,lang:0 @@ -10744,6 +10850,8 @@ msgstr "" msgid "" "Please contact your system administrator if you think this is an error." msgstr "" +"Molimo da kontaktirate svog administratora sistema ako smatrate da je ovo " +"greška." #. module: base #: code:addons/base/module/module.py:545 @@ -10751,13 +10859,13 @@ msgstr "" #: model:ir.actions.act_window,name:base.action_view_base_module_upgrade #, python-format msgid "Apply Schedule Upgrade" -msgstr "" +msgstr "Izvrši zakazane nadogradnje" #. module: base #: view:workflow.activity:0 #: field:workflow.workitem,act_id:0 msgid "Activity" -msgstr "" +msgstr "Aktivnost" #. module: base #: view:change.password.user:0 @@ -10772,17 +10880,17 @@ msgstr "" #: field:res.partner,user_ids:0 #: view:res.users:0 msgid "Users" -msgstr "" +msgstr "Korisnici" #. module: base #: field:res.company,parent_id:0 msgid "Parent Company" -msgstr "" +msgstr "Nadređena kompanija" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_openid msgid "OpenID Authentification" -msgstr "" +msgstr "OpenID Autentifikacija" #. module: base #: code:addons/orm.py:3872 @@ -10791,6 +10899,8 @@ msgid "" "One of the documents you are trying to access has been deleted, please try " "again after refreshing." msgstr "" +"Jedan od dokumenata kojem pokušavate pristupiti je obrisan, molimo Vas da " +"pokušate nakon osvježavanja." #. module: base #: model:ir.model,name:base.model_ir_mail_server @@ -10810,11 +10920,15 @@ msgid "" "the bounds of global ones. The first group rules restrict further than " "global rules, but any additional group rule will add more permissions" msgstr "" +"Opšta pravila (ne povezana sa grupama) su zabrane, i ne mogu da budu " +"zaobiđena. Pravila lokalnih grupa dozvoljavaju dodatne dozvole, ali su " +"ograničena sa granicama globalnih. Prva grupa pravila ograničavaju dalje od " +"globalnih pravila, ali svaka dodatna grupa pravila će dozvoliti veći pristup." #. module: base #: field:res.currency.rate,rate:0 msgid "Rate" -msgstr "" +msgstr "Stopa" #. module: base #: model:res.country,name:base.cg @@ -10829,17 +10943,17 @@ msgstr "Primjeri" #. module: base #: field:ir.default,value:0 msgid "Default Value" -msgstr "" +msgstr "Zadana vrijednost" #. module: base #: model:ir.model,name:base.model_res_country_state msgid "Country state" -msgstr "" +msgstr "Fed. država/Kanton" #. module: base #: model:ir.ui.menu,name:base.next_id_5 msgid "Sequences & Identifiers" -msgstr "" +msgstr "Sekvence i Identifikatori" #. module: base #: model:ir.module.module,description:base.module_l10n_th @@ -10865,6 +10979,9 @@ msgid "" "for the currency: %s \n" "at the date: %s" msgstr "" +"Nije pronađena stopa \n" +"za valutu: %s \n" +"na dan: %s" #. module: base #: model:ir.actions.act_window,help:base.action_ui_view_custom @@ -10872,11 +10989,13 @@ msgid "" "Customized views are used when users reorganize the content of their " "dashboard views (via web client)" msgstr "" +"Prilagođeni pogledi se koriste kada korisnik reorganizira sadržaj kontrolnih " +"ploča (putem web klijent)" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_stock msgid "Sales and Warehouse Management" -msgstr "" +msgstr "Upravljanje Prodajom i Skladištima" #. module: base #: model:ir.module.module,description:base.module_hr_recruitment @@ -10901,7 +11020,7 @@ msgstr "" #. module: base #: field:ir.model.fields,model:0 msgid "Object Name" -msgstr "" +msgstr "Naziv objekta" #. module: base #: help:ir.actions.server,srcmodel_id:0 @@ -10909,25 +11028,27 @@ msgid "" "Object in which you want to create / write the object. If it is empty then " "refer to the Object field." msgstr "" +"Objekt unutar kojega želite kreirati / zapisati objekt. Ako je prazno onda " +"se odnosi na polje objekta." #. module: base #: view:ir.module.module:0 #: selection:ir.module.module,state:0 #: selection:ir.module.module.dependency,state:0 msgid "Not Installed" -msgstr "" +msgstr "Nije instaliran" #. module: base #: view:workflow.activity:0 #: field:workflow.activity,out_transitions:0 msgid "Outgoing Transitions" -msgstr "" +msgstr "Izlazni prelazi" #. module: base #: field:ir.module.module,icon_image:0 #: field:ir.ui.menu,icon:0 msgid "Icon" -msgstr "" +msgstr "Ikona" #. module: base #: model:ir.module.category,description:base.module_category_human_resources @@ -10935,16 +11056,18 @@ msgid "" "Helps you manage your human resources by encoding your employees structure, " "generating work sheets, tracking attendance and more." msgstr "" +"Pomaže Vam u upravljanju ljudskim resursima šifriranjem strukture " +"zaposlenih, generišući radne listove, praćenjem prisutnosti, itd..." #. module: base #: help:res.partner,ean13:0 msgid "BarCode" -msgstr "" +msgstr "BarKod" #. module: base #: help:ir.model.fields,model_id:0 msgid "The model this field belongs to" -msgstr "" +msgstr "Model kojem ovo polje pripada" #. module: base #: field:ir.actions.server,sms:0 @@ -10960,23 +11083,23 @@ msgstr "" #. module: base #: help:res.partner,is_company:0 msgid "Check if the contact is a company, otherwise it is a person" -msgstr "" +msgstr "Označite ako je kontakt Kompanija, u suprotnom smatra se osobom" #. module: base #: view:ir.sequence.type:0 msgid "Sequences Type" -msgstr "" +msgstr "Tip sekvence" #. module: base #: view:res.partner:0 msgid "Mobile:" -msgstr "" +msgstr "Mobilni:" #. module: base #: code:addons/base/res/res_bank.py:195 #, python-format msgid "Formating Error" -msgstr "" +msgstr "Greška u formatiranju" #. module: base #: model:res.country,name:base.ye @@ -10986,7 +11109,7 @@ msgstr "" #. module: base #: selection:workflow.activity,split_mode:0 msgid "Or" -msgstr "" +msgstr "ili" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_br @@ -11035,26 +11158,26 @@ msgstr "" #: code:addons/base/ir/ir_model.py:1031 #, python-format msgid "Permission Denied" -msgstr "" +msgstr "Pristup nije dozvoljen" #. module: base #: field:ir.ui.menu,child_id:0 msgid "Child IDs" -msgstr "" +msgstr "ID-ovi podređenih" #. module: base #: code:addons/base/ir/ir_actions.py:702 #: code:addons/base/ir/ir_actions.py:705 #, python-format msgid "Problem in configuration `Record Id` in Server Action!" -msgstr "" +msgstr "Problem u konfiguraciji 'ID-a Zapisa' u Serverskoj Akciji!" #. module: base #: code:addons/orm.py:2807 #: code:addons/orm.py:2817 #, python-format msgid "ValidateError" -msgstr "" +msgstr "Greška u Validaciji" #. module: base #: view:base.module.import:0 @@ -11070,12 +11193,12 @@ msgstr "" #. module: base #: view:base.module.import:0 msgid "Import module" -msgstr "" +msgstr "Uvezi modul" #. module: base #: field:ir.actions.server,loop_action:0 msgid "Loop Action" -msgstr "" +msgstr "Akcija petlje" #. module: base #: help:ir.actions.report.xml,report_file:0 @@ -11083,6 +11206,8 @@ msgid "" "The path to the main report file (depending on Report Type) or NULL if the " "content is in another field" msgstr "" +"Putanja to glavne datoteke izvještaja (zavisno od tipa izvještaja) ili NULL " +"ako se sadržaj nalazi unutar drugog polja" #. module: base #: model:res.country,name:base.la @@ -11098,12 +11223,12 @@ msgstr "" #: field:res.partner,email:0 #, python-format msgid "Email" -msgstr "" +msgstr "E-Mail" #. module: base #: model:res.partner.category,name:base.res_partner_category_12 msgid "Office Supplies" -msgstr "" +msgstr "Kancelarijski materijal" #. module: base #: field:ir.attachment,res_model:0 @@ -11117,11 +11242,13 @@ msgid "" "The sum of the data (2nd field) is null.\n" "We can't draw a pie chart !" msgstr "" +"Zbir podataka (drugog polja) je null.\n" +"Ne može se iscrtati grafika pite!" #. module: base #: view:res.partner.bank:0 msgid "Information About the Bank" -msgstr "" +msgstr "Informacije o Banci" #. module: base #: help:ir.actions.server,condition:0 @@ -11139,12 +11266,24 @@ msgid "" " - uid: current user id\n" " - context: current context" msgstr "" +"Uslov koji je testiran prije izvršavanja akcije, i onemogućuje izvršavanje " +"ako nije verifikovan.\n" +"Primjer: object.list_price > 5000\n" +"je Python izraz koji može da koristi sljedeće vrijednosti:\n" +" - self: ORM model zapisa na kojem je akcija aktivirana\n" +" - object or obj: browse_record zapisa na kojem je akcija aktivirana\n" +" - pool: ORM model pool (npr.: self.pool)\n" +" - time: Python modul za vrijeme\n" +" - cr: kursor baze podataka\n" +" - uid: trenutni ID korisnika\n" +" - context: trenutni kontekst" #. module: base #: view:ir.rule:0 msgid "" "2. Group-specific rules are combined together with a logical OR operator" msgstr "" +"2. Grupna pravila se kombinuju zajedno sa logičkim ili (OR) operatorom" #. module: base #: model:res.country,name:base.bl @@ -11154,7 +11293,7 @@ msgstr "" #. module: base #: selection:ir.module.module,license:0 msgid "Other Proprietary" -msgstr "" +msgstr "Ostale Vlasničke" #. module: base #: model:res.country,name:base.ec @@ -11164,17 +11303,17 @@ msgstr "" #. module: base #: model:ir.model,name:base.model_workflow msgid "workflow" -msgstr "" +msgstr "radni tok" #. module: base #: view:ir.rule:0 msgid "Read Access Right" -msgstr "" +msgstr "Čitanje" #. module: base #: model:ir.module.module,shortdesc:base.module_analytic_user_function msgid "Jobs on Contracts" -msgstr "" +msgstr "Poslovi pod ugovorom" #. module: base #: code:addons/base/res/res_lang.py:187 @@ -11185,7 +11324,7 @@ msgstr "" #. module: base #: view:ir.model.data:0 msgid "Updatable" -msgstr "" +msgstr "Nadogradivi" #. module: base #: view:res.lang:0 @@ -11195,12 +11334,12 @@ msgstr "" #. module: base #: selection:ir.model.fields,on_delete:0 msgid "Cascade" -msgstr "" +msgstr "Kaskadno" #. module: base #: model:ir.module.module,summary:base.module_crm msgid "Leads, Opportunities, Phone Calls" -msgstr "" +msgstr "Potencijali, Prilike, Tel. pozivi" #. module: base #: model:ir.module.category,description:base.module_category_knowledge_management @@ -11208,6 +11347,8 @@ msgid "" "Lets you install addons geared towards sharing knowledge with and between " "your employees." msgstr "" +"Dozvoljava Vam instalaciju dodataka koji teže djeljenju znanja sa i između " +"zaposlenih." #. module: base #: selection:base.language.install,lang:0 @@ -11217,13 +11358,13 @@ msgstr "" #. module: base #: selection:ir.translation,state:0 msgid "Translated" -msgstr "" +msgstr "Prevedeno" #. module: base #: model:ir.actions.act_window,name:base.action_inventory_form #: model:ir.ui.menu,name:base.menu_action_inventory_form msgid "Default Company per Object" -msgstr "" +msgstr "Zadana kompanija po Objektu" #. module: base #: model:ir.module.module,shortdesc:base.module_web_hello @@ -11233,12 +11374,12 @@ msgstr "" #. module: base #: view:ir.actions.configuration.wizard:0 msgid "Next Configuration Step" -msgstr "" +msgstr "Sljedeći konfiguracijski korak" #. module: base #: field:res.groups,comment:0 msgid "Comment" -msgstr "" +msgstr "Komentar" #. module: base #: field:ir.filters,domain:0 @@ -11247,39 +11388,39 @@ msgstr "" #: field:ir.rule,domain_force:0 #: field:res.partner.title,domain:0 msgid "Domain" -msgstr "" +msgstr "Domen" #. module: base #: code:addons/base/ir/ir_fields.py:166 #, python-format msgid "Use '1' for yes and '0' for no" -msgstr "" +msgstr "Koristite '1' za DA i '0' za NE" #. module: base #: model:ir.module.module,shortdesc:base.module_marketing_campaign msgid "Marketing Campaigns" -msgstr "" +msgstr "Markentinške kampanje" #. module: base #: field:res.country.state,name:0 msgid "State Name" -msgstr "" +msgstr "Naziv Fed. države/Kantona" #. module: base #: help:ir.attachment,type:0 msgid "Binary File or URL" -msgstr "" +msgstr "Binarni fajl ili URL" #. module: base #: code:addons/base/ir/ir_fields.py:313 #, python-format msgid "Invalid database id '%s' for the field '%%(field)s'" -msgstr "" +msgstr "Ne pravilan ID baze podataka '%s' za polje '%%(field)s'" #. module: base #: view:res.lang:0 msgid "Update Languague Terms" -msgstr "" +msgstr "Nadogradi jezične termine" #. module: base #: field:workflow.activity,join_mode:0 @@ -11289,7 +11430,7 @@ msgstr "" #. module: base #: field:res.partner,tz:0 msgid "Timezone" -msgstr "" +msgstr "Vremenska zona" #. module: base #: model:ir.model,name:base.model_ir_actions_report_xml @@ -11308,11 +11449,12 @@ msgstr "Sekvence" #: help:res.lang,code:0 msgid "This field is used to set/get locales for user" msgstr "" +"Ovo polje se koristi za postavljanje/dobavljanje lokalizacije korisnika" #. module: base #: view:ir.filters:0 msgid "Shared" -msgstr "" +msgstr "Dijeljeno" #. module: base #: code:addons/base/module/module.py:357 @@ -11320,11 +11462,13 @@ msgstr "" msgid "" "Unable to install module \"%s\" because an external dependency is not met: %s" msgstr "" +"Nije moguće instalirati modul \"%s\", jer vanjska ovisnost nije " +"zadovoljena:%s" #. module: base #: view:ir.module.module:0 msgid "Search modules" -msgstr "" +msgstr "Pretraži module" #. module: base #: model:res.country,name:base.by @@ -11337,7 +11481,7 @@ msgstr "" #: field:ir.actions.client,name:0 #: field:ir.actions.server,name:0 msgid "Action Name" -msgstr "" +msgstr "Naziv akcije" #. module: base #: model:ir.actions.act_window,help:base.action_res_users @@ -11347,6 +11491,11 @@ msgid "" "not connect to the system. You can assign them groups in order to give them " "specific access to the applications they need to use in the system." msgstr "" +"Kreirajte i upravljajte korisnicima koji će se spajati na sistem. Korisnici " +"mogu biti deaktivirani ako postoji potreba da u određenom vremenu trebaju " +"ili ne trebaju biti prijavljeni na sistem. Možete im dodjeliti grupe da bi " +"ste im dali specifična prava pristupa aplikacijama koje trebaju da koriste u " +"sistemu." #. module: base #: selection:res.request,priority:0 @@ -11356,25 +11505,25 @@ msgstr "Normalan" #. module: base #: model:ir.module.module,shortdesc:base.module_purchase_double_validation msgid "Double Validation on Purchases" -msgstr "" +msgstr "Dupla validacija na nabavkama" #. module: base #: field:res.bank,street2:0 #: field:res.company,street2:0 #: field:res.partner,street2:0 msgid "Street2" -msgstr "" +msgstr "Ulica2" #. module: base #: model:ir.actions.act_window,name:base.action_view_base_module_update msgid "Module Update" -msgstr "" +msgstr "Nadogradnja modula" #. module: base #: code:addons/base/module/wizard/base_module_upgrade.py:85 #, python-format msgid "Following modules are not installed or unknown: %s" -msgstr "" +msgstr "Sljedeći moduli nisu instalirani ili su ne poznati: %s" #. module: base #: model:ir.module.module,description:base.module_auth_oauth_signup @@ -11396,7 +11545,7 @@ msgstr "" #: model:res.groups,name:base.group_tool_user #: view:res.users:0 msgid "User" -msgstr "" +msgstr "Korisnik" #. module: base #: model:res.country,name:base.pr @@ -11406,12 +11555,12 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_web_tests_demo msgid "Demonstration of web/javascript tests" -msgstr "" +msgstr "Demonstracija web/javascript testova" #. module: base #: field:workflow.transition,signal:0 msgid "Signal (Button Name)" -msgstr "" +msgstr "Signal (naziv dugmeta)" #. module: base #: view:ir.actions.act_window:0 @@ -11421,12 +11570,12 @@ msgstr "Otvori prozor" #. module: base #: field:ir.actions.act_window,auto_search:0 msgid "Auto Search" -msgstr "" +msgstr "Automatska pretraga" #. module: base #: field:ir.actions.act_window,filter:0 msgid "Filter" -msgstr "" +msgstr "Filter" #. module: base #: model:res.country,name:base.ch @@ -11441,7 +11590,7 @@ msgstr "Grenada" #. module: base #: help:res.partner,customer:0 msgid "Check this box if this contact is a customer." -msgstr "" +msgstr "Označite ovo polje ako je ovaj kontakt kupac" #. module: base #: view:ir.actions.server:0 @@ -11451,7 +11600,7 @@ msgstr "" #. module: base #: view:base.language.install:0 msgid "Load" -msgstr "" +msgstr "Učitaj" #. module: base #: model:ir.module.module,description:base.module_warning @@ -11469,14 +11618,14 @@ msgstr "" #. module: base #: field:res.users,partner_id:0 msgid "Related Partner" -msgstr "" +msgstr "Povezani partner" #. module: base #: code:addons/osv.py:172 #: code:addons/osv.py:174 #, python-format msgid "Integrity Error" -msgstr "" +msgstr "Greška integriteta" #. module: base #: model:ir.module.module,description:base.module_l10n_pa @@ -11501,49 +11650,49 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_mrp_operations msgid "Manufacturing Operations" -msgstr "" +msgstr "Operacije u proizvodnji" #. module: base #: view:base.language.export:0 msgid "Here is the exported translation file:" -msgstr "" +msgstr "Ovde je izvezena datoteka prevoda:" #. module: base #: field:ir.actions.report.xml,report_rml_content:0 #: field:ir.actions.report.xml,report_rml_content_data:0 msgid "RML Content" -msgstr "" +msgstr "RML Sadržaj" #. module: base #: view:res.lang:0 msgid "Update Terms" -msgstr "" +msgstr "Ažuriraj izraze" #. module: base #: field:res.request,act_to:0 #: field:res.request.history,act_to:0 msgid "To" -msgstr "" +msgstr "Za" #. module: base #: model:ir.module.module,shortdesc:base.module_hr msgid "Employee Directory" -msgstr "" +msgstr "Popis zaposlenih" #. module: base #: field:ir.cron,args:0 msgid "Arguments" -msgstr "" +msgstr "Argumenti" #. module: base #: selection:ir.module.module,license:0 msgid "GPL Version 2" -msgstr "" +msgstr "GPL Verzija 2" #. module: base #: selection:ir.module.module,license:0 msgid "GPL Version 3" -msgstr "" +msgstr "GPL Verzija 3" #. module: base #: model:ir.module.module,description:base.module_stock_location @@ -11658,7 +11807,7 @@ msgstr "" #. module: base #: selection:res.company,paper_format:0 msgid "A4" -msgstr "" +msgstr "A4" #. module: base #: view:res.config.installer:0 @@ -11668,7 +11817,7 @@ msgstr "" #. module: base #: field:res.partner,customer:0 msgid "Customer" -msgstr "" +msgstr "Kupac" #. module: base #: selection:base.language.install,lang:0 @@ -11688,37 +11837,37 @@ msgstr "" #: field:ir.actions.act_window,context:0 #: field:ir.actions.client,context:0 msgid "Context Value" -msgstr "" +msgstr "Vrijednost konteksta" #. module: base #: view:ir.sequence:0 msgid "Hour 00->24: %(h24)s" -msgstr "" +msgstr "Sat 00->24: %(h24)s" #. module: base #: field:ir.cron,nextcall:0 msgid "Next Execution Date" -msgstr "" +msgstr "Datum slijedećeg izvršavanja" #. module: base #: field:ir.sequence,padding:0 msgid "Number Padding" -msgstr "" +msgstr "Dužina broja" #. module: base #: help:multi_company.default,field_id:0 msgid "Select field property" -msgstr "" +msgstr "Odaberite svojstvo polja" #. module: base #: field:res.request.history,date_sent:0 msgid "Date sent" -msgstr "" +msgstr "Datum slanja" #. module: base #: view:ir.sequence:0 msgid "Month: %(month)s" -msgstr "" +msgstr "Mjesec: %(month)s" #. module: base #: field:ir.actions.act_window.view,sequence:0 @@ -11735,7 +11884,7 @@ msgstr "" #: field:multi_company.default,sequence:0 #: field:res.partner.bank,sequence:0 msgid "Sequence" -msgstr "" +msgstr "Sekvenca" #. module: base #: model:res.country,name:base.tn @@ -11749,6 +11898,8 @@ msgid "" "(if you delete a native ACL, it will be re-created when you reload the " "module." msgstr "" +"Ako odznačite polje aktivno, onemogućiti će ACL bez da ga obriše (ako " +"obrišete nativni ACL, biti će ponovno kreiran kada ponovno učitate modul)." #. module: base #: model:ir.model,name:base.model_ir_fields_converter @@ -11776,7 +11927,7 @@ msgstr "" #. module: base #: view:ir.module.module:0 msgid "Cancel Install" -msgstr "" +msgstr "Otkaži instalaciju" #. module: base #: model:ir.model,name:base.model_ir_model_relation @@ -11786,7 +11937,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_account_check_writing msgid "Check Writing" -msgstr "" +msgstr "Ispisivanje čekova" #. module: base #: model:ir.module.module,description:base.module_plugin_outlook @@ -11833,7 +11984,7 @@ msgstr "Zapisi za formate datuma i vremena" #. module: base #: selection:ir.actions.server,state:0 msgid "Copy Object" -msgstr "" +msgstr "Kopiraj objekt" #. module: base #: field:ir.actions.server,trigger_name:0 @@ -11844,7 +11995,7 @@ msgstr "" #: model:ir.actions.act_window,name:base.action_country_state #: model:ir.ui.menu,name:base.menu_country_state_partner msgid "Fed. States" -msgstr "" +msgstr "Fed. države" #. module: base #: view:ir.model:0 @@ -11901,7 +12052,7 @@ msgstr "" #: code:addons/base/ir/ir_mail_server.py:474 #, python-format msgid "Mail delivery failed" -msgstr "" +msgstr "Isporuka email-a ne uspješna" #. module: base #: view:ir.actions.act_window:0 @@ -11932,11 +12083,14 @@ msgid "" "\n" "[object with reference: %s - %s]" msgstr "" +"\n" +"\n" +"[objekt sa referencom: %s - %s]" #. module: base #: model:ir.module.module,shortdesc:base.module_account_analytic_plans msgid "Multiple Analytic Plans" -msgstr "" +msgstr "Višestruki analitički planovi" #. module: base #: model:ir.model,name:base.model_ir_default @@ -12008,7 +12162,7 @@ msgstr "" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_madam msgid "Mrs." -msgstr "" +msgstr "Gđa." #. module: base #: code:addons/base/ir/ir_model.py:432 @@ -12017,6 +12171,8 @@ msgid "" "Changing the type of a column is not yet supported. Please drop it and " "create it again!" msgstr "" +"Izmjena tipa kolone još nije podržana. Molimo da je odbacite i ponovno " +"kreirate!" #. module: base #: field:ir.ui.view_sc,user_id:0 @@ -12027,7 +12183,7 @@ msgstr "Korisnik ref." #: code:addons/base/ir/ir_fields.py:226 #, python-format msgid "'%s' does not seem to be a valid datetime for field '%%(field)s'" -msgstr "" +msgstr "'%s' nije pravilno datum-vrijeme za polje '%%(field)s'" #. module: base #: model:res.partner.bank.type.field,name:base.bank_normal_field_bic @@ -12049,7 +12205,7 @@ msgstr "" #: field:ir.model.fields,readonly:0 #: field:res.partner.bank.type.field,readonly:0 msgid "Readonly" -msgstr "" +msgstr "Samo za čitanje" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_gt @@ -12059,7 +12215,7 @@ msgstr "" #. module: base #: help:ir.cron,args:0 msgid "Arguments to be passed to the method, e.g. (uid,)." -msgstr "" +msgstr "Argumenti za prosljeđivanje metodi, npr.: (uid,)." #. module: base #: report:ir.module.reference:0 @@ -12082,6 +12238,8 @@ msgid "" "Your server does not seem to support SSL, you may want to try STARTTLS " "instead" msgstr "" +"Vaš server izgleda da ne podržava SSL, možete pokušati sa STARTTLS umjesto " +"toga" #. module: base #: code:addons/base/ir/workflow/workflow.py:100 @@ -12089,6 +12247,8 @@ msgstr "" msgid "" "Please make sure no workitems refer to an activity before deleting it!" msgstr "" +"Molimo da provjerite da radna stavka nije povezana sa nekom od aktivnosti " +"prije nego je obrišete!" #. module: base #: model:res.country,name:base.tr @@ -12160,7 +12320,7 @@ msgstr "radnitok.okidači" #. module: base #: selection:ir.translation,type:0 msgid "XSL" -msgstr "" +msgstr "XSL" #. module: base #: code:addons/base/ir/ir_model.py:85 @@ -12171,12 +12331,12 @@ msgstr "" #. module: base #: view:ir.mail_server:0 msgid "Connection Information" -msgstr "" +msgstr "Informacija o konekciji" #. module: base #: model:res.partner.title,name:base.res_partner_title_prof msgid "Professor" -msgstr "" +msgstr "Profesor" #. module: base #: model:res.country,name:base.hm @@ -12189,6 +12349,8 @@ msgid "" "External Key/Identifier that can be used for data integration with third-" "party systems" msgstr "" +"Vanjski ključ/identifikator koji se može koristiti za podatkovnu integraciju " +"sa trećim sistemima" #. module: base #: field:ir.actions.act_window,view_id:0 @@ -12199,28 +12361,29 @@ msgstr "Prikaz ref." #: model:ir.module.category,description:base.module_category_sales_management msgid "Helps you handle your quotations, sale orders and invoicing." msgstr "" +"Pomaže Vam sa manipulacijom predračuna, prodajnih narudžbi i fakturisanjem." #. module: base #: field:res.users,login_date:0 msgid "Latest connection" -msgstr "" +msgstr "Zadnja prijava" #. module: base #: field:res.groups,implied_ids:0 msgid "Inherits" -msgstr "" +msgstr "Nasljeđuje" #. module: base #: selection:ir.translation,type:0 msgid "Selection" -msgstr "" +msgstr "Odabir" #. module: base #: view:change.password.wizard:0 #: model:ir.actions.act_window,name:base.change_password_wizard_action #: view:res.users:0 msgid "Change Password" -msgstr "" +msgstr "Promjeni šifru" #. module: base #: model:ir.module.module,description:base.module_l10n_es @@ -12262,6 +12425,8 @@ msgid "" "You try to install module '%s' that depends on module '%s'.\n" "But the latter module is not available in your system." msgstr "" +"Pokušali ste instalirati modul '%s' koji ovisi o modulu '%s' \n" +"koji nije dostupan na vašem sistemu." #. module: base #: view:base.language.import:0 @@ -12274,7 +12439,7 @@ msgstr "" #: view:ir.module.module:0 #: field:ir.module.module,category_id:0 msgid "Category" -msgstr "" +msgstr "Kategorija" #. module: base #: view:ir.attachment:0 @@ -12286,7 +12451,7 @@ msgstr "" #. module: base #: model:res.partner.title,name:base.res_partner_title_doctor msgid "Doctor" -msgstr "" +msgstr "Doktor" #. module: base #: model:ir.module.module,description:base.module_mrp_repair @@ -12318,17 +12483,17 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_ldap msgid "Authentication via LDAP" -msgstr "" +msgstr "LDAP Autentikacija" #. module: base #: view:workflow.activity:0 msgid "Conditions" -msgstr "" +msgstr "Uslovi" #. module: base #: model:ir.actions.act_window,name:base.action_partner_other_form msgid "Other Partners" -msgstr "" +msgstr "Ostali partneri" #. module: base #: field:base.language.install,state:0 @@ -12343,39 +12508,39 @@ msgstr "" #: view:workflow.workitem:0 #: field:workflow.workitem,state:0 msgid "Status" -msgstr "" +msgstr "Status" #. module: base #: model:ir.actions.act_window,name:base.action_currency_form #: model:ir.ui.menu,name:base.menu_action_currency_form #: view:res.currency:0 msgid "Currencies" -msgstr "" +msgstr "Valute" #. module: base #: model:res.partner.category,name:base.res_partner_category_8 msgid "Consultancy Services" -msgstr "" +msgstr "Konsultantske usluge" #. module: base #: help:ir.values,value:0 msgid "Default value (pickled) or reference to an action" -msgstr "" +msgstr "Zadana vrijednost (ustaljena) ili referenca do neke akcije" #. module: base #: field:ir.actions.report.xml,auto:0 msgid "Custom Python Parser" -msgstr "" +msgstr "Prilagođen Python Parser" #. module: base #: sql_constraint:res.groups:0 msgid "The name of the group must be unique !" -msgstr "" +msgstr "Naziv grupe mora biti jedinstven!" #. module: base #: help:ir.translation,module:0 msgid "Module this term belongs to" -msgstr "" +msgstr "Modul kojem ovaj termin pripada" #. module: base #: model:ir.module.module,description:base.module_web_view_editor @@ -12390,7 +12555,7 @@ msgstr "" #. module: base #: view:ir.sequence:0 msgid "Hour 00->12: %(h12)s" -msgstr "" +msgstr "Sat 00->12: %(h12)s" #. module: base #: model:res.country,name:base.dk @@ -12400,7 +12565,7 @@ msgstr "" #. module: base #: field:res.country,code:0 msgid "Country Code" -msgstr "" +msgstr "Šifra države" #. module: base #: model:ir.model,name:base.model_workflow_instance @@ -12411,7 +12576,7 @@ msgstr "workflow.instance" #: code:addons/orm.py:479 #, python-format msgid "Unknown attribute %s in %s " -msgstr "" +msgstr "Nepoznat atribut %s u %s " #. module: base #: view:res.lang:0 @@ -12434,7 +12599,7 @@ msgstr "" #: code:addons/fields.py:130 #, python-format msgid "undefined get method !" -msgstr "" +msgstr "nedefinisana get metoda !" #. module: base #: selection:base.language.install,lang:0 @@ -12444,7 +12609,7 @@ msgstr "" #. module: base #: model:res.partner.title,name:base.res_partner_title_madam msgid "Madam" -msgstr "" +msgstr "Gospođa" #. module: base #: model:res.country,name:base.ee @@ -12455,7 +12620,7 @@ msgstr "" #: model:ir.module.module,shortdesc:base.module_board #: model:ir.ui.menu,name:base.menu_reporting_dashboard msgid "Dashboards" -msgstr "" +msgstr "Kontrolne ploče" #. module: base #: model:ir.module.module,shortdesc:base.module_procurement @@ -12465,7 +12630,7 @@ msgstr "" #. module: base #: model:res.partner.category,name:base.res_partner_category_6 msgid "Bronze" -msgstr "" +msgstr "Brončani" #. module: base #: model:ir.module.module,shortdesc:base.module_hr_payroll_account @@ -12475,7 +12640,7 @@ msgstr "" #. module: base #: view:res.users:0 msgid "Change password" -msgstr "" +msgstr "Promijeni šifru" #. module: base #: model:res.country,name:base.sr @@ -12485,22 +12650,22 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_order_dates msgid "Dates on Sales Order" -msgstr "" +msgstr "Datumi na prodajnim nalozima" #. module: base #: view:ir.attachment:0 msgid "Creation Month" -msgstr "" +msgstr "Mjesec kreiranja" #. module: base #: field:ir.module.module,demo:0 msgid "Demo Data" -msgstr "" +msgstr "Demo Podaci" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_mister msgid "Mr." -msgstr "" +msgstr "Gdin." #. module: base #: model:res.country,name:base.mv @@ -12510,7 +12675,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_portal_crm msgid "Portal CRM" -msgstr "" +msgstr "CRM portal" #. module: base #: model:ir.ui.menu,name:base.next_id_4 @@ -12525,17 +12690,17 @@ msgstr "" #. module: base #: field:res.country,address_format:0 msgid "Address Format" -msgstr "" +msgstr "Format adrese" #. module: base #: model:ir.model,name:base.model_change_password_user msgid "Change Password Wizard User" -msgstr "" +msgstr "Čarobnjak promjene šifre korisnika" #. module: base #: model:res.groups,name:base.group_no_one msgid "Technical Features" -msgstr "" +msgstr "Tehničke mogućnosti" #. module: base #: model:ir.module.module,description:base.module_l10n_ve @@ -12584,13 +12749,15 @@ msgid "" "Here is what we got instead:\n" " %s" msgstr "" +"Ovo je što smo dobili umjesto toga:\n" +" %s" #. module: base #: model:ir.actions.act_window,name:base.action_model_data #: view:ir.model.data:0 #: model:ir.ui.menu,name:base.ir_model_data_menu msgid "External Identifiers" -msgstr "" +msgstr "Vanjski identifikatori" #. module: base #: selection:base.language.install,lang:0 @@ -12610,11 +12777,14 @@ msgid "" "OpenERP. They are launched during the installation of new modules, but you " "can choose to restart some wizards manually from this menu." msgstr "" +"Konfiguracijski čarobnjaci se koriste da Vam pomognu konfigurisati novu " +"istancu OpenERP-a. Pokreću se tokom instalacije novih modula, ali možete i " +"da izaberete da ponovno pokrenete neke od čarobnjaka ručno iz ovog menija." #. module: base #: field:ir.actions.report.xml,report_sxw:0 msgid "SXW Path" -msgstr "" +msgstr "SXW putanja" #. module: base #: model:ir.module.module,description:base.module_account_asset @@ -12635,19 +12805,19 @@ msgstr "" #. module: base #: field:ir.cron,numbercall:0 msgid "Number of Calls" -msgstr "" +msgstr "Broj pokretanja" #. module: base #: code:addons/base/res/res_bank.py:192 #, python-format msgid "BANK" -msgstr "" +msgstr "BANKA" #. module: base #: model:ir.module.category,name:base.module_category_point_of_sale #: model:ir.module.module,shortdesc:base.module_point_of_sale msgid "Point of Sale" -msgstr "" +msgstr "POS Kasa" #. module: base #: model:ir.module.module,description:base.module_mail @@ -12690,6 +12860,8 @@ msgid "" "Important when you deal with multiple actions, the execution order will be " "decided based on this, low number is higher priority." msgstr "" +"Važno kada radite sa više akcija, redosljed izvršavanja će biti odlučen na " +"osnovu ovoga, manji broj veći prioritet." #. module: base #: model:res.country,name:base.gr @@ -12699,12 +12871,12 @@ msgstr "" #. module: base #: view:res.config:0 msgid "Apply" -msgstr "" +msgstr "Primjeni" #. module: base #: field:res.request,trigger_date:0 msgid "Trigger Date" -msgstr "" +msgstr "Datum okidanja" #. module: base #: selection:base.language.install,lang:0 @@ -12730,7 +12902,7 @@ msgstr "" #. module: base #: sql_constraint:res.country:0 msgid "The code of the country must be unique !" -msgstr "" +msgstr "Šifra države mora biti jedinstvena!" #. module: base #: selection:ir.module.module.dependency,state:0 @@ -12740,7 +12912,7 @@ msgstr "" #. module: base #: view:res.partner.category:0 msgid "Partner Category" -msgstr "" +msgstr "Kategorija partnera" #. module: base #: view:ir.actions.server:0 @@ -12754,6 +12926,8 @@ msgid "" "Helps you manage your inventory and main stock operations: delivery orders, " "receptions, etc." msgstr "" +"Pomaže Vam u upravljanju popisa zalihe (inventure) i glavnim operacijama " +"zalihe: nalozi isporuke, prijemi, itd..." #. module: base #: model:ir.model,name:base.model_ir_values @@ -12763,12 +12937,12 @@ msgstr "" #. module: base #: model:ir.model,name:base.model_base_module_update msgid "Update Module" -msgstr "" +msgstr "Ažuriraj modul" #. module: base #: view:ir.model.fields:0 msgid "Translate" -msgstr "" +msgstr "Prevedi" #. module: base #: field:res.request.history,body:0 @@ -12808,7 +12982,7 @@ msgstr "" #. module: base #: field:res.users,menu_id:0 msgid "Menu Action" -msgstr "" +msgstr "Akcija menija" #. module: base #: help:ir.model.fields,selection:0 @@ -12817,6 +12991,8 @@ msgid "" "defining a list of (key, label) pairs. For example: " "[('blue','Blue'),('yellow','Yellow')]" msgstr "" +"Lista opcija za polje odabira, specifirano kao Python izraz koji definira " +"listu (key, label) parova. Na primjer:[('blue','Blue'),('yellow','Yellow')]" #. module: base #: selection:base.language.export,state:0 @@ -12830,6 +13006,8 @@ msgid "" "Please define at least one SMTP server, or provide the SMTP parameters " "explicitly." msgstr "" +"Molimo Vas da definišete makar jedan SMTP server, ili obezbjedite parametre " +"SMTP-a eksplicitno." #. module: base #: view:ir.attachment:0 @@ -12839,7 +13017,7 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_project_gtd msgid "Personal Tasks, Contexts, Timeboxes" -msgstr "" +msgstr "Lični zadatci, Konteksti, Vremenske kutije" #. module: base #: model:ir.module.module,description:base.module_l10n_cr @@ -12867,17 +13045,17 @@ msgstr "" #: model:ir.ui.menu,name:base.menu_procurement_management_supplier_name #: view:res.partner:0 msgid "Suppliers" -msgstr "" +msgstr "Dobavljači" #. module: base #: field:res.request,ref_doc2:0 msgid "Document Ref 2" -msgstr "" +msgstr "Vezni dokument 2" #. module: base #: field:res.request,ref_doc1:0 msgid "Document Ref 1" -msgstr "" +msgstr "Vezni dokument 1" #. module: base #: model:res.country,name:base.ga @@ -12887,13 +13065,13 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_stock msgid "Inventory, Logistic, Storage" -msgstr "" +msgstr "Inventura, Logistika, Skladištenje" #. module: base #: view:ir.actions.act_window:0 #: selection:ir.translation,type:0 msgid "Help" -msgstr "" +msgstr "Pomoć" #. module: base #: view:ir.model:0 @@ -12902,7 +13080,7 @@ msgstr "" #: model:res.groups,name:base.group_erp_manager #: view:res.users:0 msgid "Access Rights" -msgstr "" +msgstr "Prava pristupa" #. module: base #: model:res.country,name:base.gl @@ -12930,7 +13108,7 @@ msgstr "" #. module: base #: view:res.lang:0 msgid "1. %c ==> Fri Dec 5 18:25:20 2008" -msgstr "" +msgstr "1. %c ==> Pet Dec 5 18:25:20 2008" #. module: base #: model:res.country,name:base.nc @@ -12940,7 +13118,7 @@ msgstr "" #. module: base #: field:ir.model,osv_memory:0 msgid "Transient Model" -msgstr "" +msgstr "Prolazni model (osv_memory)" #. module: base #: model:res.country,name:base.cy @@ -12950,14 +13128,14 @@ msgstr "" #. module: base #: field:res.users,new_password:0 msgid "Set Password" -msgstr "" +msgstr "Postavi šifru" #. module: base #: field:ir.actions.server,subject:0 #: field:res.request,name:0 #: view:res.request.link:0 msgid "Subject" -msgstr "" +msgstr "Tema" #. module: base #: model:ir.module.module,description:base.module_membership @@ -12982,23 +13160,23 @@ msgstr "" #. module: base #: selection:res.currency,position:0 msgid "Before Amount" -msgstr "" +msgstr "Prije iznosa" #. module: base #: field:res.request,act_from:0 #: field:res.request.history,act_from:0 msgid "From" -msgstr "" +msgstr "Od" #. module: base #: view:res.users:0 msgid "Preferences" -msgstr "" +msgstr "Postavke" #. module: base #: model:res.partner.category,name:base.res_partner_category_9 msgid "Components Buyer" -msgstr "" +msgstr "Kupac komponenti" #. module: base #: model:ir.module.module,description:base.module_web_tests_demo @@ -13014,17 +13192,17 @@ msgstr "" #. module: base #: help:ir.cron,function:0 msgid "Name of the method to be called when this job is processed." -msgstr "" +msgstr "Ime metode za pozivanje kada se ovaj posao bude obrađivao." #. module: base #: field:ir.actions.client,tag:0 msgid "Client action tag" -msgstr "" +msgstr "Oznaka klijentske akcije" #. module: base #: field:ir.values,model_id:0 msgid "Model (change only)" -msgstr "" +msgstr "Model (samo izmjene)" #. module: base #: model:ir.module.module,description:base.module_marketing_campaign_crm_demo @@ -13052,29 +13230,30 @@ msgid "" "The Selection Options expression is must be in the [('key','Label'), ...] " "format!" msgstr "" +"Format izraza opcija selekcije mora biti u formatu [('key','Label'), ...] !" #. module: base #: field:res.company,company_registry:0 msgid "Company Registry" -msgstr "" +msgstr "Matični broj" #. module: base #: view:ir.actions.report.xml:0 #: view:res.currency:0 msgid "Miscellaneous" -msgstr "" +msgstr "Dodatna podešavanja" #. module: base #: model:ir.actions.act_window,name:base.action_ir_mail_server_list #: view:ir.mail_server:0 #: model:ir.ui.menu,name:base.menu_mail_servers msgid "Outgoing Mail Servers" -msgstr "" +msgstr "Odlazni mail serveri" #. module: base #: model:ir.ui.menu,name:base.menu_custom msgid "Technical" -msgstr "" +msgstr "Tehnički detalji" #. module: base #: model:res.country,name:base.cn @@ -13087,6 +13266,8 @@ msgid "" "The object that should receive the workflow signal (must have an associated " "workflow)" msgstr "" +"Objekat koji bi trebao da primi signal radnog toka (mora imati pridružen " +"radni tok)" #. module: base #: model:ir.module.category,description:base.module_category_account_voucher @@ -13094,6 +13275,8 @@ msgid "" "Allows you to create your invoices and track the payments. It is an easier " "version of the accounting module for managers who are not accountants." msgstr "" +"Dozvoljava Vam da kreirate vaše fakture i pratite plaćanja. To je lakša " +"verzija modula računovodstva za menadžere koji nisu računovođe." #. module: base #: model:res.country,name:base.eh @@ -13103,7 +13286,7 @@ msgstr "" #. module: base #: model:ir.module.category,name:base.module_category_account_voucher msgid "Invoicing & Payments" -msgstr "" +msgstr "Fakturisanje i Plaćanja" #. module: base #: model:ir.actions.act_window,help:base.action_res_company_form @@ -13111,6 +13294,9 @@ msgid "" "Create and manage the companies that will be managed by OpenERP from here. " "Shops or subsidiaries can be created and maintained from here." msgstr "" +"Kreirajte i upravljajte kompanijama koje će biti upravljane od strane " +"OpenERP-a odavde. Prodavnice i podružnice mogu biti kreirane i održavane " +"odavde." #. module: base #: model:res.country,name:base.id @@ -13141,6 +13327,8 @@ msgid "" "Expression, must be True to match\n" "use context.get or user (browse)" msgstr "" +"Izraz mora biti Tačan da odgovara \n" +"korištenju context.get ili user (browse)" #. module: base #: model:res.country,name:base.bg @@ -13166,12 +13354,12 @@ msgstr "" #: field:res.currency,name:0 #: field:res.currency.rate,currency_id:0 msgid "Currency" -msgstr "" +msgstr "Valuta" #. module: base #: view:res.lang:0 msgid "5. %y, %Y ==> 08, 2008" -msgstr "" +msgstr "5. %y, %Y ==> 08, 2013" #. module: base #: model:res.partner.title,shortcut:base.res_partner_title_ltd @@ -13214,12 +13402,12 @@ msgstr "" #. module: base #: model:ir.module.category,name:base.module_category_administration msgid "Administration" -msgstr "" +msgstr "Administracija" #. module: base #: view:base.module.update:0 msgid "Click on Update below to start the process..." -msgstr "" +msgstr "Kliknite na Ažuriraj ispod da započnete proces..." #. module: base #: model:res.country,name:base.ir @@ -13237,12 +13425,12 @@ msgstr "" #: field:res.partner,has_image:0 #: field:res.users,user_email:0 msgid "unknown" -msgstr "" +msgstr "nepoznato" #. module: base #: field:res.currency,symbol:0 msgid "Symbol" -msgstr "" +msgstr "Znak" #. module: base #: help:res.partner,image_medium:0 @@ -13255,13 +13443,13 @@ msgstr "" #. module: base #: view:base.update.translations:0 msgid "Synchronize Translation" -msgstr "" +msgstr "Sinkronizuj prevode" #. module: base #: view:res.partner.bank:0 #: field:res.partner.bank,bank_name:0 msgid "Bank Name" -msgstr "" +msgstr "Naziv banke" #. module: base #: model:res.country,name:base.ki @@ -13283,19 +13471,19 @@ msgstr "" #. module: base #: view:ir.actions.server:0 msgid "Action to Launch" -msgstr "" +msgstr "Akcija za pokretanje" #. module: base #: field:ir.model,modules:0 #: field:ir.model.fields,modules:0 msgid "In Modules" -msgstr "" +msgstr "Unutar modula" #. module: base #: model:ir.module.module,shortdesc:base.module_contacts #: model:ir.ui.menu,name:base.menu_config_address_book msgid "Address Book" -msgstr "" +msgstr "Adresar" #. module: base #: model:ir.model,name:base.model_ir_sequence_type @@ -13310,7 +13498,7 @@ msgstr "" #. module: base #: selection:base.language.export,format:0 msgid "CSV File" -msgstr "" +msgstr "CSV datoteka" #. module: base #: field:res.company,account_no:0 @@ -13348,12 +13536,12 @@ msgstr "" #: field:res.request,priority:0 #: field:res.request.link,priority:0 msgid "Priority" -msgstr "" +msgstr "Prioritet" #. module: base #: report:ir.module.reference:0 msgid "Dependencies :" -msgstr "" +msgstr "Ovisnosti :" #. module: base #: field:res.company,vat:0 @@ -13393,26 +13581,26 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_project msgid "Projects, Tasks" -msgstr "" +msgstr "Projekti, Zadatci" #. module: base #: field:ir.attachment,res_id:0 #: field:workflow.instance,res_id:0 #: field:workflow.triggers,res_id:0 msgid "Resource ID" -msgstr "" +msgstr "ID Resursa" #. module: base #: view:ir.cron:0 #: field:ir.model,info:0 msgid "Information" -msgstr "" +msgstr "Informacije" #. module: base #: code:addons/base/ir/ir_fields.py:146 #, python-format msgid "false" -msgstr "" +msgstr "netačno" #. module: base #: model:ir.module.module,description:base.module_account_analytic_analysis @@ -13448,7 +13636,7 @@ msgstr "" #. module: base #: view:base.module.update:0 msgid "Update Module List" -msgstr "" +msgstr "Ažuriraj listu modula" #. module: base #: code:addons/base/res/res_users.py:685 @@ -13457,7 +13645,7 @@ msgstr "" #: view:res.users:0 #, python-format msgid "Other" -msgstr "" +msgstr "Drugo" #. module: base #: selection:base.language.install,lang:0 @@ -13469,12 +13657,12 @@ msgstr "" #: model:ir.ui.menu,name:base.menu_workflow_activity #: field:workflow,activities:0 msgid "Activities" -msgstr "" +msgstr "Aktivnosti" #. module: base #: model:ir.module.module,shortdesc:base.module_product msgid "Products & Pricelists" -msgstr "" +msgstr "Proizvodi & Cjenovnici" #. module: base #: help:ir.filters,user_id:0 @@ -13482,11 +13670,13 @@ msgid "" "The user this filter is private to. When left empty the filter is public and " "available to all users." msgstr "" +"Korisnik kojem ovaj filter pripada. Ako se ostavi prazno filter je javan i " +"dostupan svim korisnicima." #. module: base #: field:ir.actions.act_window,auto_refresh:0 msgid "Auto-Refresh" -msgstr "" +msgstr "Automatsko osvježavanje" #. module: base #: model:ir.module.module,description:base.module_product_expiry @@ -13511,22 +13701,24 @@ msgid "" "Automatically set to let administators find new terms that might need to be " "translated" msgstr "" +"Automatski postavljeno da dozvoli administratorima da pronađu termine koji " +"možda treba da budu prevedeni" #. module: base #: code:addons/base/ir/ir_model.py:85 #, python-format msgid "The osv_memory field can only be compared with = and != operator." -msgstr "" +msgstr "Polje osv_memory može se upoređivati samo sa = ili =! operatorima." #. module: base #: view:res.partner:0 msgid "Fax:" -msgstr "" +msgstr "Faks:" #. module: base #: selection:ir.ui.view,type:0 msgid "Diagram" -msgstr "" +msgstr "Dijagram" #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_es @@ -13551,7 +13743,7 @@ msgstr "" #. module: base #: help:multi_company.default,name:0 msgid "Name it to easily find a record" -msgstr "" +msgstr "Nazovite ga da lakše pronađete zapis" #. module: base #: model:ir.module.module,description:base.module_hr @@ -13622,11 +13814,12 @@ msgid "" "the user will have access to all records of everyone in the sales " "application." msgstr "" +"korisnik će imati pristup svim zapisima o svima u aplikaciji prodaje." #. module: base #: model:ir.module.module,shortdesc:base.module_event msgid "Events Organisation" -msgstr "" +msgstr "Organizacija događaja" #. module: base #: model:ir.actions.act_window,name:base.ir_sequence_actions @@ -13639,7 +13832,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_delivery msgid "Delivery Costs" -msgstr "" +msgstr "Troškovi Dostave" #. module: base #: code:addons/base/ir/ir_cron.py:263 @@ -13648,6 +13841,8 @@ msgid "" "This cron task is currently being executed and may not be modified, please " "try again in a few minutes" msgstr "" +"Ovaj Cron zadatak se trenutno izvršava i nije ga moguće mijenjati, molimo " +"pokušajte ponovo za par minuta" #. module: base #: view:base.language.export:0 @@ -13664,7 +13859,7 @@ msgstr "" #: field:res.bank,bic:0 #: field:res.partner.bank,bank_bic:0 msgid "Bank Identifier Code" -msgstr "" +msgstr "Identifikacijska šifra banke" #. module: base #: view:base.language.export:0 @@ -13674,6 +13869,10 @@ msgid "" " the rightmost column (value) contains the " "translations" msgstr "" +"CSV format: možete ga editovati direktno sa vašim omiljenim spreadsheet " +"software-om,\n" +" zadnja desna kolona (vrijednost) sadrži " +"prevod" #. module: base #: model:ir.module.module,description:base.module_account_chart @@ -13693,7 +13892,7 @@ msgstr "" #. module: base #: help:workflow.transition,act_to:0 msgid "The destination activity." -msgstr "" +msgstr "Odredišna aktivnost" #. module: base #: model:ir.module.module,shortdesc:base.module_project_issue @@ -13705,7 +13904,7 @@ msgstr "" #: view:base.module.upgrade:0 #: view:base.update.translations:0 msgid "Update" -msgstr "" +msgstr "Ažuriraj" #. module: base #: model:ir.module.module,description:base.module_plugin @@ -13741,7 +13940,7 @@ msgstr "" #. module: base #: model:ir.actions.report.xml,name:base.ir_module_reference_print msgid "Technical guide" -msgstr "" +msgstr "Tehničko uputstvo" #. module: base #: model:res.country,name:base.tz @@ -13756,7 +13955,7 @@ msgstr "" #. module: base #: selection:ir.model.fields,select_level:0 msgid "Advanced Search (deprecated)" -msgstr "" +msgstr "Napredna pretraga (zastarjelo)" #. module: base #: model:res.country,name:base.cx @@ -13778,31 +13977,33 @@ msgid "" "Check this to define the report footer manually. Otherwise it will be " "filled in automatically." msgstr "" +"Označite ovdje za ručni unos podnožja stranice, ili će podnožje biti " +"automatski popunjeno." #. module: base #: view:res.partner:0 msgid "Supplier Partners" -msgstr "" +msgstr "Partneri dobavljači" #. module: base #: view:res.config.installer:0 msgid "Install Modules" -msgstr "" +msgstr "Instaliraj module" #. module: base #: model:ir.ui.menu,name:base.menu_import_crm msgid "Import & Synchronize" -msgstr "" +msgstr "Uvezi i Sinhronizuj" #. module: base #: view:res.partner:0 msgid "Customer Partners" -msgstr "" +msgstr "Partneri kupci" #. module: base #: sql_constraint:res.users:0 msgid "You can not have two users with the same login !" -msgstr "" +msgstr "Ne možete imati dva korisnika sa istim korisničkim imenom !" #. module: base #: model:ir.model,name:base.model_res_request_history @@ -13812,18 +14013,18 @@ msgstr "" #. module: base #: model:ir.model,name:base.model_multi_company_default msgid "Default multi company" -msgstr "" +msgstr "Zadana multi kompanija" #. module: base #: field:ir.translation,src:0 msgid "Source" -msgstr "" +msgstr "Izvorno" #. module: base #: field:ir.model.constraint,date_init:0 #: field:ir.model.relation,date_init:0 msgid "Initialization Date" -msgstr "" +msgstr "Datum inicijalizacije" #. module: base #: model:res.country,name:base.vu @@ -13858,7 +14059,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_crm msgid "CRM" -msgstr "" +msgstr "CRM" #. module: base #: model:ir.module.module,description:base.module_base_report_designer @@ -13875,7 +14076,7 @@ msgstr "" #. module: base #: view:base.module.upgrade:0 msgid "Start configuration" -msgstr "" +msgstr "Započni konfiguraciju" #. module: base #: selection:base.language.install,lang:0 @@ -13899,6 +14100,8 @@ msgid "" "Invalid group_by specification: \"%s\".\n" "A group_by specification must be a list of valid fields." msgstr "" +"Pogrešna specifikacija grupiši po: \"%s\".\n" +"Grupiši po specifikacija mora biti lista validnih polja." #. module: base #: selection:ir.mail_server,smtp_encryption:0 @@ -13909,6 +14112,7 @@ msgstr "" #: help:ir.actions.act_window,usage:0 msgid "Used to filter menu and home actions from the user form." msgstr "" +"Koristi se za filtriranje menija i početne akcije iz korisničke forme." #. module: base #: model:res.country,name:base.sa @@ -13946,7 +14150,7 @@ msgstr "" #: field:ir.actions.server,trigger_obj_id:0 #: field:ir.model.fields,relation_field:0 msgid "Relation Field" -msgstr "" +msgstr "Relaciono Polje" #. module: base #: model:ir.module.module,description:base.module_portal_project @@ -13963,12 +14167,12 @@ msgstr "" #: code:addons/base/module/wizard/base_module_configuration.py:38 #, python-format msgid "System Configuration done" -msgstr "" +msgstr "Konfiguracija sistema završena" #. module: base #: field:ir.attachment,db_datas:0 msgid "Database Data" -msgstr "" +msgstr "Podatci baze" #. module: base #: model:res.country,name:base.tc @@ -13978,13 +14182,13 @@ msgstr "" #. module: base #: field:workflow.triggers,instance_id:0 msgid "Destination Instance" -msgstr "" +msgstr "Odredišna istanca" #. module: base #: field:ir.actions.act_window,multi:0 #: field:ir.actions.wizard,multi:0 msgid "Action on Multiple Doc." -msgstr "" +msgstr "Akcija na više dokumenata" #. module: base #: model:ir.actions.act_window,name:base.action_partner_title_partner @@ -14040,23 +14244,23 @@ msgstr "" #. module: base #: model:ir.module.module,summary:base.module_base_calendar msgid "Personal & Shared Calendar" -msgstr "" +msgstr "Lični i Djeljeni Kalendar" #. module: base #: selection:res.request,priority:0 msgid "Low" -msgstr "" +msgstr "Nizak" #. module: base #: code:addons/base/ir/ir_ui_menu.py:379 #, python-format msgid "Error ! You can not create recursive Menu." -msgstr "" +msgstr "Greška ! Ne možete kreirati rekurzivni meni." #. module: base #: view:ir.translation:0 msgid "Web-only translations" -msgstr "" +msgstr "Samo Web prevodi" #. module: base #: view:ir.rule:0 @@ -14064,6 +14268,8 @@ msgid "" "3. If user belongs to several groups, the results from step 2 are combined " "with logical OR operator" msgstr "" +"3. Ako korisnik ima više grupa, rezultati iz 2. koraka se kombiniraju " +"logičkim ili (OR) operatorom" #. module: base #: model:ir.module.module,description:base.module_l10n_be @@ -14115,12 +14321,12 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_base_gengo msgid "Automated Translations through Gengo API" -msgstr "" +msgstr "Automatizirani prevodi preko Gengo API" #. module: base #: model:ir.module.module,shortdesc:base.module_account_payment msgid "Suppliers Payment Management" -msgstr "" +msgstr "Upravljanje plaćanjima dobavljačima" #. module: base #: model:res.country,name:base.sv @@ -14134,7 +14340,7 @@ msgstr "" #: field:res.partner,phone:0 #, python-format msgid "Phone" -msgstr "" +msgstr "Telefon" #. module: base #: field:res.groups,menu_access:0 @@ -15177,7 +15383,7 @@ msgstr "" #: model:ir.actions.client,name:base.modules_updates_act_cl #: model:ir.ui.menu,name:base.menu_module_updates msgid "Updates" -msgstr "" +msgstr "Ažuriranja" #. module: base #: help:res.currency,rate:0 @@ -15534,6 +15740,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kliknite da dodate kontakt u adresar.\n" +"

\n" +" OpenERP Vam pomaže da na jednostavan način pratite sve " +"aktivnosti \n" +" vezane za kupca; diskusije, istoriju poslovnih prilika, " +"dokumente, itd.\n" +"

\n" +" " #. module: base #: model:res.partner.category,name:base.res_partner_category_2 @@ -15553,7 +15768,7 @@ msgstr "" #. module: base #: field:ir.exports,name:0 msgid "Export Name" -msgstr "" +msgstr "Naziv izvoza" #. module: base #: help:res.partner,type:0 @@ -15561,6 +15776,8 @@ msgid "" "Used to select automatically the right address according to the context in " "sales and purchases documents." msgstr "" +"Koristi se za automatski odabir pravilne adrese na osnovu konteksta u " +"prodajnim i nabavnim dokumentima." #. module: base #: model:ir.module.module,description:base.module_purchase_analytic_plans @@ -15583,7 +15800,7 @@ msgstr "" #. module: base #: field:ir.actions.act_window,search_view:0 msgid "Search View" -msgstr "" +msgstr "Pogled pretrage" #. module: base #: selection:base.language.install,lang:0 @@ -15593,7 +15810,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_signup msgid "Signup" -msgstr "" +msgstr "Učlanjivanje" #~ msgid "SMS - Gateway: clickatell" #~ msgstr "SMS - pristupnik: clickatell" diff --git a/openerp/addons/base/i18n/ca.po b/openerp/addons/base/i18n/ca.po index 781e5a0219f..8995a1f37db 100644 --- a/openerp/addons/base/i18n/ca.po +++ b/openerp/addons/base/i18n/ca.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:39+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:35+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/cs.po b/openerp/addons/base/i18n/cs.po index 7b521b994c3..c33e536ce13 100644 --- a/openerp/addons/base/i18n/cs.po +++ b/openerp/addons/base/i18n/cs.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:39+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:35+0000\n" +"X-Generator: Launchpad (build 16810)\n" "X-Poedit-Language: Czech\n" #. module: base diff --git a/openerp/addons/base/i18n/da.po b/openerp/addons/base/i18n/da.po index cb17babc067..d525b168fdc 100644 --- a/openerp/addons/base/i18n/da.po +++ b/openerp/addons/base/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:39+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:35+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/de.po b/openerp/addons/base/i18n/de.po index 6c6700edc85..28c3768c0f5 100644 --- a/openerp/addons/base/i18n/de.po +++ b/openerp/addons/base/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:40+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:36+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/el.po b/openerp/addons/base/i18n/el.po index e8151abcff4..93aef5b37c8 100644 --- a/openerp/addons/base/i18n/el.po +++ b/openerp/addons/base/i18n/el.po @@ -12,8 +12,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:41+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:37+0000\n" +"X-Generator: Launchpad (build 16810)\n" "X-Poedit-Country: GREECE\n" "X-Poedit-Language: Greek\n" "X-Poedit-SourceCharset: utf-8\n" diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po index 6bca254a4b0..563d518a3c7 100644 --- a/openerp/addons/base/i18n/en_GB.po +++ b/openerp/addons/base/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:47+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:43+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es.po b/openerp/addons/base/i18n/es.po index 815fb5f1e90..e20ce22d169 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:45+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:41+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_AR.po b/openerp/addons/base/i18n/es_AR.po index db5ee2466e8..a8921d3e493 100644 --- a/openerp/addons/base/i18n/es_AR.po +++ b/openerp/addons/base/i18n/es_AR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:47+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:42+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_BO.po b/openerp/addons/base/i18n/es_BO.po index 1d3e1e19a07..72940a4b4ce 100644 --- a/openerp/addons/base/i18n/es_BO.po +++ b/openerp/addons/base/i18n/es_BO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:48+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:43+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_CL.po b/openerp/addons/base/i18n/es_CL.po index 64dd55a71c4..11b2230c96c 100644 --- a/openerp/addons/base/i18n/es_CL.po +++ b/openerp/addons/base/i18n/es_CL.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:47+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:43+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_CR.po b/openerp/addons/base/i18n/es_CR.po index b1604f3096d..b36da87d9f9 100644 --- a/openerp/addons/base/i18n/es_CR.po +++ b/openerp/addons/base/i18n/es_CR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:48+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:44+0000\n" +"X-Generator: Launchpad (build 16810)\n" "Language: \n" #. module: base diff --git a/openerp/addons/base/i18n/es_DO.po b/openerp/addons/base/i18n/es_DO.po index 76091892541..2abb5dd8a14 100644 --- a/openerp/addons/base/i18n/es_DO.po +++ b/openerp/addons/base/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:47+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:43+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_EC.po b/openerp/addons/base/i18n/es_EC.po index f4202a760b7..c9f4e4f976e 100644 --- a/openerp/addons/base/i18n/es_EC.po +++ b/openerp/addons/base/i18n/es_EC.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:48+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:44+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_MX.po b/openerp/addons/base/i18n/es_MX.po index 5885e2b6801..8c14e963034 100644 --- a/openerp/addons/base/i18n/es_MX.po +++ b/openerp/addons/base/i18n/es_MX.po @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:48+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:44+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_VE.po b/openerp/addons/base/i18n/es_VE.po index 5b6834b2067..957a0e7e2e7 100644 --- a/openerp/addons/base/i18n/es_VE.po +++ b/openerp/addons/base/i18n/es_VE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:47+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:42+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/et.po b/openerp/addons/base/i18n/et.po index 8d59999f5c4..fb382325d72 100644 --- a/openerp/addons/base/i18n/et.po +++ b/openerp/addons/base/i18n/et.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:40+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:36+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/eu.po b/openerp/addons/base/i18n/eu.po index c3ab34be0af..52ea4823165 100644 --- a/openerp/addons/base/i18n/eu.po +++ b/openerp/addons/base/i18n/eu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:38+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:34+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fa.po b/openerp/addons/base/i18n/fa.po index ef950580b70..4d0db0e292c 100644 --- a/openerp/addons/base/i18n/fa.po +++ b/openerp/addons/base/i18n/fa.po @@ -9,8 +9,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:43+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:39+0000\n" +"X-Generator: Launchpad (build 16810)\n" "X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n" "X-Poedit-Language: Persian\n" diff --git a/openerp/addons/base/i18n/fa_AF.po b/openerp/addons/base/i18n/fa_AF.po index 1e94e426438..dd497550e2d 100644 --- a/openerp/addons/base/i18n/fa_AF.po +++ b/openerp/addons/base/i18n/fa_AF.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:49+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:44+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fi.po b/openerp/addons/base/i18n/fi.po index 24541605d87..30964f6da4e 100644 --- a/openerp/addons/base/i18n/fi.po +++ b/openerp/addons/base/i18n/fi.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:40+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:36+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fr.po b/openerp/addons/base/i18n/fr.po index e08b8264737..b249afe1109 100644 --- a/openerp/addons/base/i18n/fr.po +++ b/openerp/addons/base/i18n/fr.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:40+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:36+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fr_CA.po b/openerp/addons/base/i18n/fr_CA.po index 603232605cf..d2ca7a516a2 100644 --- a/openerp/addons/base/i18n/fr_CA.po +++ b/openerp/addons/base/i18n/fr_CA.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:47+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:43+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/gl.po b/openerp/addons/base/i18n/gl.po index c3f32cdff4d..7bf9dde9a65 100644 --- a/openerp/addons/base/i18n/gl.po +++ b/openerp/addons/base/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:41+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:36+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/gu.po b/openerp/addons/base/i18n/gu.po index 23a97e9639c..31bf646961a 100644 --- a/openerp/addons/base/i18n/gu.po +++ b/openerp/addons/base/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:41+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:37+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/he.po b/openerp/addons/base/i18n/he.po index 921c60b5ec7..995509f6908 100644 --- a/openerp/addons/base/i18n/he.po +++ b/openerp/addons/base/i18n/he.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:41+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:37+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hi.po b/openerp/addons/base/i18n/hi.po index 604fe05ee22..f4952707e04 100644 --- a/openerp/addons/base/i18n/hi.po +++ b/openerp/addons/base/i18n/hi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:41+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:37+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hr.po b/openerp/addons/base/i18n/hr.po index d45c715ede1..ed5a44d189d 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:44+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:40+0000\n" +"X-Generator: Launchpad (build 16810)\n" "Language: hr\n" #. module: base @@ -3994,7 +3994,7 @@ msgstr "12. %w ==> 5 ( Petak je 6ti dan)" #. module: base #: constraint:res.partner.category:0 msgid "Error ! You can not create recursive categories." -msgstr "Graška ! Ne može se stvoriti kategorije s rekurzijom." +msgstr "Greška! Ne možete kreirati rekurzivne kategorije." #. module: base #: view:res.lang:0 @@ -8815,6 +8815,10 @@ msgid "" "\n" "(Document type: %s)" msgstr "" +"Za ovu vrstu dokumenta imate pravo pristupa samo onima koje ste vi " +"kreirali.\n" +"\n" +"(Vrstu dokumenta: %s)" #. module: base #: view:base.language.export:0 @@ -9872,7 +9876,7 @@ msgstr "Kreirano" #: help:ir.actions.server,model_id:0 msgid "" "Select the object on which the action will work (read, write, create)." -msgstr "Odaberite objekt na koje će akcija raditi (read, write, create)." +msgstr "Odaberite objekt na koje će akcija raditi (čitaj, piši, kreiraj)." #. module: base #: field:base.language.import,name:0 diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index b29473411c9..62a4fdfec29 100644 --- a/openerp/addons/base/i18n/hu.po +++ b/openerp/addons/base/i18n/hu.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-03-14 10:08+0000\n" -"Last-Translator: krnkris \n" +"PO-Revision-Date: 2013-10-15 13:13+0000\n" +"Last-Translator: tdombos \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:41+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:37+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -6230,7 +6230,7 @@ msgstr "Kenya" #: model:ir.actions.act_window,name:base.action_translation #: model:ir.ui.menu,name:base.menu_action_translation msgid "Translated Terms" -msgstr "Lefordított feltételek" +msgstr "Lefordított kifejezések" #. module: base #: selection:base.language.install,lang:0 @@ -12491,7 +12491,7 @@ msgstr "This method does not exist anymore" #: model:ir.actions.act_window,name:base.action_wizard_update_translations #: model:ir.ui.menu,name:base.menu_wizard_update_translations msgid "Synchronize Terms" -msgstr "Feltételek szinkronizáása" +msgstr "Kifejezések szinkronizáása" #. module: base #: field:res.lang,thousands_sep:0 @@ -13640,7 +13640,7 @@ msgstr "Érvénytelen adatbázis azonosító '%s' ehhez a mezőhöz '%%(field)s' #. module: base #: view:res.lang:0 msgid "Update Languague Terms" -msgstr "Nyelvi feltételek frissítése" +msgstr "Nyelvi kifejezések frissítése" #. module: base #: field:workflow.activity,join_mode:0 diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po index a3414b87477..5e856eb6bcd 100644 --- a/openerp/addons/base/i18n/hy.po +++ b/openerp/addons/base/i18n/hy.po @@ -9,8 +9,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:38+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:34+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/id.po b/openerp/addons/base/i18n/id.po index e1ff7e99c5d..9ebe2be68b9 100644 --- a/openerp/addons/base/i18n/id.po +++ b/openerp/addons/base/i18n/id.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:42+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:38+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/is.po b/openerp/addons/base/i18n/is.po index 8df0df2ffaa..75938f793d8 100644 --- a/openerp/addons/base/i18n/is.po +++ b/openerp/addons/base/i18n/is.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:42+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:37+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/it.po b/openerp/addons/base/i18n/it.po index 7f2ced532b7..ff144ac0e9e 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:42+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:38+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ja.po b/openerp/addons/base/i18n/ja.po index d851d89354c..a77ad0553ac 100644 --- a/openerp/addons/base/i18n/ja.po +++ b/openerp/addons/base/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:42+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:38+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -4448,7 +4448,7 @@ msgstr "メールサーバを特に指定しないメールは最も高い優先 #. module: base #: model:ir.module.module,summary:base.module_sale msgid "Quotations, Sales Orders, Invoicing" -msgstr "" +msgstr "見積、受注、請求" #. module: base #: field:res.partner,parent_id:0 @@ -5037,7 +5037,7 @@ msgstr "" #. module: base #: model:ir.module.module,shortdesc:base.module_event_sale msgid "Events Sales" -msgstr "" +msgstr "イベント販売" #. module: base #: model:res.country,name:base.ls @@ -7967,7 +7967,7 @@ msgstr "" #: view:res.partner:0 #: field:res.partner,user_id:0 msgid "Salesperson" -msgstr "" +msgstr "営業担当者" #. module: base #: view:res.lang:0 @@ -9727,7 +9727,7 @@ msgstr "カスタム" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_margin msgid "Margins in Sales Orders" -msgstr "受注オーダーのマージン" +msgstr "受注マージン" #. module: base #: model:ir.module.module,shortdesc:base.module_purchase @@ -10478,7 +10478,7 @@ msgstr "この会社に関連した銀行口座" #: model:ir.ui.menu,name:base.menu_sales #: model:ir.ui.menu,name:base.next_id_64 msgid "Sales" -msgstr "受注" +msgstr "販売" #. module: base #: field:ir.actions.server,child_ids:0 @@ -10814,7 +10814,7 @@ msgstr "ユーザ自身がダッシュボードビュー(Webクライアント #. module: base #: model:ir.module.module,shortdesc:base.module_sale_stock msgid "Sales and Warehouse Management" -msgstr "" +msgstr "販売・倉庫管理" #. module: base #: model:ir.module.module,description:base.module_hr_recruitment @@ -15538,7 +15538,7 @@ msgstr "コンテキスト" #. module: base #: model:ir.module.module,shortdesc:base.module_sale_mrp msgid "Sales and MRP Management" -msgstr "受注とMRP管理" +msgstr "販売・MRP管理" #. module: base #: model:ir.actions.act_window,help:base.action_partner_form diff --git a/openerp/addons/base/i18n/ka.po b/openerp/addons/base/i18n/ka.po index 66447babcc5..54c66bd21ec 100644 --- a/openerp/addons/base/i18n/ka.po +++ b/openerp/addons/base/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:40+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:36+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/kk.po b/openerp/addons/base/i18n/kk.po index c9159836a90..125196b592b 100644 --- a/openerp/addons/base/i18n/kk.po +++ b/openerp/addons/base/i18n/kk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:42+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:38+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ko.po b/openerp/addons/base/i18n/ko.po index ef6e0c4c9dd..3c04ce8ff6f 100644 --- a/openerp/addons/base/i18n/ko.po +++ b/openerp/addons/base/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:42+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:38+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/lt.po b/openerp/addons/base/i18n/lt.po index d2e3c3ef4a5..90f792192e0 100644 --- a/openerp/addons/base/i18n/lt.po +++ b/openerp/addons/base/i18n/lt.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:43+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:39+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/lv.po b/openerp/addons/base/i18n/lv.po index e2848ad5a53..862f70c8984 100644 --- a/openerp/addons/base/i18n/lv.po +++ b/openerp/addons/base/i18n/lv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:43+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:38+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/mk.po b/openerp/addons/base/i18n/mk.po index 199d738895b..8361f0b2344 100644 --- a/openerp/addons/base/i18n/mk.po +++ b/openerp/addons/base/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:43+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:39+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/mn.po b/openerp/addons/base/i18n/mn.po index 4d5bceaf671..3651560a2d3 100644 --- a/openerp/addons/base/i18n/mn.po +++ b/openerp/addons/base/i18n/mn.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:43+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:39+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -12022,6 +12022,31 @@ msgid "" " Reporting / Accounting / **Follow-ups Analysis\n" "\n" msgstr "" +"\n" +"Төлөгдөөгүй нэхэмжлэлүүдэд олон шаттай дуудлаг хийх, захиадал явуулах ажлыг " +"автоматжуулах модуль.\n" +"=========================================================================\n" +"\n" +"Дараах менюгээр олон шатлалтай дуудлагуудыг тодорхойлж болно:\n" +"---------------------------------------------------------------\n" +" Тохиргоо / Мөшгөлтийн Түвшин\n" +" \n" +"Нэгэнт тодорхойлсон бол дараах менюгээр орж дуудлагуудын автоматаар тогтмол " +"хэвлэж болно:\n" +"-----------------------------------------------------------------------------" +"-------------------------\n" +" Төлбөрийн Мөшгөлт / Имэйл болон захидал илгээх\n" +"\n" +"Энэ нь PDF үүсгэх / имэйл илгээх / гар үйлдлүүдийг олон шатлалтай дуудлага " +"дээр үндэслэн үүсгэдэг. \n" +"Ялгаатай компаниудад ялгаатай бодлогыг тодорхойлж болно. \n" +"\n" +"Хэрэв тухайлсан харилцагч/дансны бичилт дээр мөшгөлтийг шалгахыг хүсвэл " +"дараах менюгээр хийх боломжтой:\n" +"-----------------------------------------------------------------------------" +"-------------------------------------\n" +" Тайлан / Санхүү / **Мөшгөлтийн шинжилгээ\n" +"\n" #. module: base #: code:addons/base/ir/ir_model.py:735 @@ -12196,6 +12221,20 @@ msgid "" "You can define the different phases of interviews and easily rate the " "applicant from the kanban view.\n" msgstr "" +"\n" +"Ажлын байр, ажилтан авах процессийг удирдана\n" +"================================================\n" +"\n" +"Энэ модуль нь ажлыг хөтлөх, амралтыг хөтлөх, өргөдөл болон ярилцлагыг хөтлөх " +"зэрэг ажлыг хялбараар хийх боломжийг олгодог...\n" +"\n" +"Энэ нь имэйл үүдтэй уялддаг бөгөөд гэсэн хаяг руу " +"ирсэн имэйлээс өргөдлүүдийг татан авдаг. Мөн баримтын модультай уялдсан " +"байдаг бөгөөд файлаар ирсэн CV-үүдийг хадгалж дараа хайлт хийх боломжийг " +"бүрдүүлдэг. Үүнтэй төстэйгээр Санал асуулга модультай уялдаж ярилцлагыг " +"хөтлөдөг. \n" +"Ярилцлагын ялгаатай шатуудыг тодорхойлж эдгээртээ үнэлгээ өгөх зэрэг ажлыг " +"канбан харагдацаас хялбараар хийж болдог.\n" #. module: base #: field:ir.model.fields,model:0 @@ -12242,7 +12281,7 @@ msgstr "" #. module: base #: help:res.partner,ean13:0 msgid "BarCode" -msgstr "" +msgstr "Зураасан код" #. module: base #: help:ir.model.fields,model_id:0 @@ -12423,7 +12462,7 @@ msgstr "Оффисын Хангамжууд" #. module: base #: field:ir.attachment,res_model:0 msgid "Resource Model" -msgstr "Нөөцийн модел" +msgstr "Нөөц модел" #. module: base #: code:addons/custom.py:555 @@ -12721,6 +12760,9 @@ msgid "" "Allow users to sign up through OAuth2 Provider.\n" "===============================================\n" msgstr "" +"\n" +"OAuth2-р хэрэглэгчид бүртгүүлэх, нэвтрэх боломжийг олгодог.\n" +"===============================================\n" #. module: base #: field:change.password.user,user_id:0 @@ -12744,7 +12786,7 @@ msgstr "Пуэрто Рико" #. module: base #: model:ir.module.module,shortdesc:base.module_web_tests_demo msgid "Demonstration of web/javascript tests" -msgstr "" +msgstr "Веб/javascript тестийн жишээ, үзүүлэн" #. module: base #: field:workflow.transition,signal:0 @@ -13076,6 +13118,13 @@ msgid "" "\n" "The decimal precision is configured per company.\n" msgstr "" +"\n" +"Үнийн нарийвчлалыг тохируулахыг олон зорилгоор ашиглаж болно: санхүү, " +"борлуулалт, худалдан авалт\n" +"=============================================================================" +"====================\n" +"\n" +"Аравны нарийвчлал нь компанийн хүрээнд хийгдэнэ.\n" #. module: base #: selection:res.company,paper_format:0 @@ -13175,6 +13224,9 @@ msgid "" "(if you delete a native ACL, it will be re-created when you reload the " "module." msgstr "" +"Идэвхтэй талбарыг сонгоогүй тохиолдолд ACL-г устгалгүйгээр идэвхгүй болгоно. " +"(Анхны эх ACL-г устгасан байлаа ч модулийг ахин ачаалахад дахин шинээр " +"үүсдэг)" #. module: base #: model:ir.model,name:base.model_ir_fields_converter @@ -13230,6 +13282,17 @@ msgid "" "into mail.message with attachments.\n" " " msgstr "" +"\n" +"Энэ модуль нь Outlook Залгаасыг өгдөг.\n" +"=========================================\n" +"\n" +"Outlook залгаас нь MS Outlook дотороосоо имэйлдээ OpenERP обьекуудтыг \n" +"сонгох хавсаргах боломжийг олгодог. Харилцагч, даалгавар, төсөл, " +"шинжилгээний данс \n" +"гэх мэт дуртай обьектоо сонгож имэйлдээ оруулж mail.message обьектот " +"хавсралтын хамт\n" +"архивладаг.\n" +" " #. module: base #: model:ir.module.module,shortdesc:base.module_l10n_bo @@ -17186,6 +17249,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Хаягийн дэвтэртэй холбогч нэмэхээр бол дарна.\n" +"

\n" +" OpenERP нь захиалагчтай холбоотой бүх үйл ажиллагааг хялбар " +"хөтлөдөг, үүнд: \n" +" захиалагчтай харилцсан харилцаа, бизнес боломжийн түүх, " +"баримтууд гэх мэт.\n" +"

\n" +" " #. module: base #: model:res.partner.category,name:base.res_partner_category_2 @@ -17228,6 +17300,17 @@ msgid "" "on a supplier purchase order into several accounts and analytic plans.\n" " " msgstr "" +"\n" +"Шинжилгээний тархалт болон худалдан авалтын захиалгын менежментийг хийх " +"суурь модуль.\n" +"====================================================================\n" +"\n" +"Шинжилгээний хэд хэдэн төлөвлөгөөг үүсгэх боломжийг хэрэглэгчид олгодог. Энэ " +"нь нийлүүлэгчийн\n" +"худалдан авалтын захиалгын нэг мөр дээр олон данс болон шинжилгээний " +"төлөвлөгөөг сонгож, хуваах \n" +"боломжийг олгодог.\n" +" " #. module: base #: model:res.country,name:base.lk @@ -17247,7 +17330,7 @@ msgstr "Орос хэл / русский язык" #. module: base #: model:ir.module.module,shortdesc:base.module_auth_signup msgid "Signup" -msgstr "" +msgstr "Бүртгүүлэх" #, python-format #~ msgid "new" diff --git a/openerp/addons/base/i18n/nb.po b/openerp/addons/base/i18n/nb.po index 66340e1d131..d629be4f0ea 100644 --- a/openerp/addons/base/i18n/nb.po +++ b/openerp/addons/base/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:43+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:39+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/nl.po b/openerp/addons/base/i18n/nl.po index 3fd2efaf667..be9d9ce4dab 100644 --- a/openerp/addons/base/i18n/nl.po +++ b/openerp/addons/base/i18n/nl.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:39+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:35+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/nl_BE.po b/openerp/addons/base/i18n/nl_BE.po index d9cd2b2a0b1..d4c52f61b73 100644 --- a/openerp/addons/base/i18n/nl_BE.po +++ b/openerp/addons/base/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:47+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:43+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pl.po b/openerp/addons/base/i18n/pl.po index 8b5af32e358..60c46006caf 100644 --- a/openerp/addons/base/i18n/pl.po +++ b/openerp/addons/base/i18n/pl.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:44+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:39+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pt.po b/openerp/addons/base/i18n/pt.po index fbf23562ddf..218ec9d3cfe 100644 --- a/openerp/addons/base/i18n/pt.po +++ b/openerp/addons/base/i18n/pt.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:44+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:40+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/pt_BR.po b/openerp/addons/base/i18n/pt_BR.po index 749f6afa8e9..2cbf847303d 100644 --- a/openerp/addons/base/i18n/pt_BR.po +++ b/openerp/addons/base/i18n/pt_BR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:46+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:42+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ro.po b/openerp/addons/base/i18n/ro.po index 441f1fcb778..937290e0134 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:44+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:40+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ru.po b/openerp/addons/base/i18n/ru.po index 321134ec830..b5379b29e87 100644 --- a/openerp/addons/base/i18n/ru.po +++ b/openerp/addons/base/i18n/ru.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:44+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:40+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sk.po b/openerp/addons/base/i18n/sk.po index f6508c82998..bd4d88d877a 100644 --- a/openerp/addons/base/i18n/sk.po +++ b/openerp/addons/base/i18n/sk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:45+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:40+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sl.po b/openerp/addons/base/i18n/sl.po index 4124fefe7a1..9583089ef3e 100644 --- a/openerp/addons/base/i18n/sl.po +++ b/openerp/addons/base/i18n/sl.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:45+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:41+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sq.po b/openerp/addons/base/i18n/sq.po index 3ccb5e34230..2ebae231a3b 100644 --- a/openerp/addons/base/i18n/sq.po +++ b/openerp/addons/base/i18n/sq.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:38+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:34+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sr.po b/openerp/addons/base/i18n/sr.po index 4158db2ab6f..beb1ca9bca6 100644 --- a/openerp/addons/base/i18n/sr.po +++ b/openerp/addons/base/i18n/sr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:44+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:40+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sr@latin.po b/openerp/addons/base/i18n/sr@latin.po index bd6314e4f8e..31475f1828a 100644 --- a/openerp/addons/base/i18n/sr@latin.po +++ b/openerp/addons/base/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:49+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:44+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/sv.po b/openerp/addons/base/i18n/sv.po index a6e76dff183..e7773c5085b 100644 --- a/openerp/addons/base/i18n/sv.po +++ b/openerp/addons/base/i18n/sv.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:45+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:41+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/th.po b/openerp/addons/base/i18n/th.po index 37703f638c1..be7e9206a3c 100644 --- a/openerp/addons/base/i18n/th.po +++ b/openerp/addons/base/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:45+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:41+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/tlh.po b/openerp/addons/base/i18n/tlh.po index b5dcd87baa8..f1e435b3ba3 100644 --- a/openerp/addons/base/i18n/tlh.po +++ b/openerp/addons/base/i18n/tlh.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:45+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:41+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/tr.po b/openerp/addons/base/i18n/tr.po index 763015f2c22..2caccbd8591 100644 --- a/openerp/addons/base/i18n/tr.po +++ b/openerp/addons/base/i18n/tr.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:46+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:41+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/uk.po b/openerp/addons/base/i18n/uk.po index f641d8c62c7..cf8bfd2e171 100644 --- a/openerp/addons/base/i18n/uk.po +++ b/openerp/addons/base/i18n/uk.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:46+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:42+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ur.po b/openerp/addons/base/i18n/ur.po index 5d7d5f171af..609956d5e09 100644 --- a/openerp/addons/base/i18n/ur.po +++ b/openerp/addons/base/i18n/ur.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:46+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:42+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/vi.po b/openerp/addons/base/i18n/vi.po index fe020c806b8..9f7ccbf2aa7 100644 --- a/openerp/addons/base/i18n/vi.po +++ b/openerp/addons/base/i18n/vi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:46+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:42+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_CN.po b/openerp/addons/base/i18n/zh_CN.po index 274a4066dfa..18a114a31ca 100644 --- a/openerp/addons/base/i18n/zh_CN.po +++ b/openerp/addons/base/i18n/zh_CN.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:48+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:44+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_HK.po b/openerp/addons/base/i18n/zh_HK.po index c457ec60396..69b9e2835ac 100644 --- a/openerp/addons/base/i18n/zh_HK.po +++ b/openerp/addons/base/i18n/zh_HK.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:46+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:42+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/zh_TW.po b/openerp/addons/base/i18n/zh_TW.po index b5246db8eed..3b23b610003 100644 --- a/openerp/addons/base/i18n/zh_TW.po +++ b/openerp/addons/base/i18n/zh_TW.po @@ -13,8 +13,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-10-11 04:48+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2013-10-24 04:43+0000\n" +"X-Generator: Launchpad (build 16810)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/ir/ir_attachment.py b/openerp/addons/base/ir/ir_attachment.py index 285551cb3c9..f480440927d 100644 --- a/openerp/addons/base/ir/ir_attachment.py +++ b/openerp/addons/base/ir/ir_attachment.py @@ -262,10 +262,14 @@ class ir_attachment(osv.osv): return len(result) if count else list(result) def read(self, cr, uid, ids, fields_to_read=None, context=None, load='_classic_read'): + if isinstance(ids, (int, long)): + ids = [ids] self.check(cr, uid, ids, 'read', context=context) return super(ir_attachment, self).read(cr, uid, ids, fields_to_read, context, load) def write(self, cr, uid, ids, vals, context=None): + if isinstance(ids, (int, long)): + ids = [ids] self.check(cr, uid, ids, 'write', context=context, values=vals) if 'file_size' in vals: del vals['file_size'] @@ -276,6 +280,8 @@ class ir_attachment(osv.osv): return super(ir_attachment, self).copy(cr, uid, id, default, context) def unlink(self, cr, uid, ids, context=None): + if isinstance(ids, (int, long)): + ids = [ids] self.check(cr, uid, ids, 'unlink', context=context) location = self.pool.get('ir.config_parameter').get_param(cr, uid, 'ir_attachment.location') if location: diff --git a/openerp/addons/base/ir/ir_fields.py b/openerp/addons/base/ir/ir_fields.py index 39f7f99b5fa..416e23f7967 100644 --- a/openerp/addons/base/ir/ir_fields.py +++ b/openerp/addons/base/ir/ir_fields.py @@ -192,7 +192,7 @@ class ir_fields_converter(orm.Model): def _str_id(self, cr, uid, model, column, value, context=None): return value, [] - _str_to_char = _str_to_text = _str_to_binary = _str_id + _str_to_reference = _str_to_char = _str_to_text = _str_to_binary = _str_id def _str_to_date(self, cr, uid, model, column, value, context=None): try: diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index c913af3459f..d50cd406e1a 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -198,6 +198,7 @@ class ir_model(osv.osv): select=vals.get('select_level', '0'), update_custom_fields=True) self.pool[vals['model']]._auto_init(cr, ctx) + self.pool[vals['model']]._auto_end(cr, ctx) # actually create FKs! openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return res @@ -356,6 +357,7 @@ class ir_model_fields(osv.osv): select=vals.get('select_level', '0'), update_custom_fields=True) self.pool[vals['model']]._auto_init(cr, ctx) + self.pool[vals['model']]._auto_end(cr, ctx) # actually create FKs! openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return res @@ -470,6 +472,7 @@ class ir_model_fields(osv.osv): for col_name, col_prop, val in patch_struct[1]: setattr(obj._columns[col_name], col_prop, val) obj._auto_init(cr, ctx) + obj._auto_end(cr, ctx) # actually create FKs! openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return res diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index f36830811e3..0202c3c310f 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -161,18 +161,18 @@ class ir_translation(osv.osv): ''' if context is None: context = {} - res = {} + res = dict.fromkeys(ids, False) for record in self.browse(cr, uid, ids, context=context): if record.type != 'model': res[record.id] = record.src else: model_name, field = record.name.split(',') model = self.pool.get(model_name) - #We need to take the context without the language information, because we want to read the - #value store in db and not on the one associate with current language. - context_wo_lang = context.copy() - context_wo_lang.pop('lang', None) - res[record.id] = model.read(cr, uid, record.res_id, [field], context=context_wo_lang)[field] + if model and model.exists(cr, uid, record.res_id, context=context): + # Pass context without lang, need to read real stored field, not translation + context_no_lang = dict(context, lang=None) + result = model.read(cr, uid, record.res_id, [field], context=context_no_lang) + res[record.id] = result[field] if result else False return res def _set_src(self, cr, uid, id, name, value, args, context=None): diff --git a/openerp/addons/base/ir/ir_translation_view.xml b/openerp/addons/base/ir/ir_translation_view.xml index 64a02576091..f3f9c4d0fac 100644 --- a/openerp/addons/base/ir/ir_translation_view.xml +++ b/openerp/addons/base/ir/ir_translation_view.xml @@ -34,6 +34,7 @@ + diff --git a/openerp/addons/base/module/wizard/base_module_import.py b/openerp/addons/base/module/wizard/base_module_import.py index 61694d5f8c3..6d6f0e1ef8d 100644 --- a/openerp/addons/base/module/wizard/base_module_import.py +++ b/openerp/addons/base/module/wizard/base_module_import.py @@ -47,33 +47,8 @@ class base_module_import(osv.osv_memory): } def importzip(self, cr, uid, ids, context): - (data,) = self.browse(cr, uid, ids , context=context) - module_data = data.module_file - zip_data = base64.decodestring(module_data) - fp = StringIO() - fp.write(zip_data) - try: - file_data = zipfile.ZipFile(fp, 'r') - except zipfile.BadZipfile: - raise osv.except_osv(_('Error!'), _('File is not a zip file!')) - init_file_name = sorted(file_data.namelist())[0] - module_name = os.path.split(init_file_name)[0] - - file_path = os.path.join(ADDONS_PATH, '%s.zip' % module_name) - try: - zip_file = open(file_path, 'wb') - except IOError: - raise osv.except_osv(_('Error!'), - _('Can not create the module file: %s!') % \ - (file_path,) ) - zip_file.write(zip_data) - zip_file.close() - - self.pool.get('ir.module.module').update_list(cr, uid, - {'module_name': module_name,}) - self.write(cr, uid, ids, {'state':'done', 'module_name': module_name}, - context) - return False + #TODO: drop this model and the corresponding view/action in trunk + raise NotImplementedError('This feature is not available') def action_module_open(self, cr, uid, ids, context): (data,) = self.browse(cr, uid, ids , context=context) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index beb0018dc8d..160ac6a2059 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -171,13 +171,6 @@ class res_users(osv.osv): def on_change_login(self, cr, uid, ids, login, context=None): return {'value': {'email': login}} - def on_change_company_id(self, cr, uid, ids, company_id): - return {'warning' : { - 'title': _("Company Switch Warning"), - 'message': _("Please keep in mind that documents currently displayed may not be relevant after switching to another company. If you have unsaved changes, please make sure to save and close all forms before switching to a different company. (You can click on Cancel in the User Preferences now)"), - } - } - def onchange_state(self, cr, uid, ids, state_id, context=None): partner_ids = [user.partner_id.id for user in self.browse(cr, uid, ids, context=context)] return self.pool.get('res.partner').onchange_state(cr, uid, partner_ids, state_id, context=context) diff --git a/openerp/addons/base/res/res_users_view.xml b/openerp/addons/base/res/res_users_view.xml index 628cfc4f858..c020de1f5ee 100644 --- a/openerp/addons/base/res/res_users_view.xml +++ b/openerp/addons/base/res/res_users_view.xml @@ -283,7 +283,7 @@ + groups="base.group_multi_company"/> diff --git a/openerp/http.py b/openerp/http.py index e2f3024110d..f84d17cebf6 100644 --- a/openerp/http.py +++ b/openerp/http.py @@ -1,37 +1,1107 @@ # -*- coding: utf-8 -*- +#---------------------------------------------------------- +# OpenERP HTTP layer +#---------------------------------------------------------- +import ast +import cgi +import contextlib +import errno +import functools +import getpass +import inspect +import logging +import mimetypes +import os +import random +import re +import sys +import tempfile +import threading +import time +import traceback +import urlparse +import warnings +import babel.core +import simplejson +import werkzeug.contrib.sessions +import werkzeug.datastructures +import werkzeug.exceptions +import werkzeug.wrappers +import werkzeug.wsgi +import werkzeug.routing as routing + +import openerp +from openerp.service import security, model as service_model +from openerp.tools import config + +_logger = logging.getLogger(__name__) + +#---------------------------------------------------------- +# RequestHandler +#---------------------------------------------------------- +class WebRequest(object): + """ Parent class for all OpenERP Web request types, mostly deals with + initialization and setup of the request object (the dispatching itself has + to be handled by the subclasses) + + :param request: a wrapped werkzeug Request object + :type request: :class:`werkzeug.wrappers.BaseRequest` + + .. attribute:: httprequest + + the original :class:`werkzeug.wrappers.Request` object provided to the + request + + .. attribute:: httpsession + + .. deprecated:: 8.0 + + Use ``self.session`` instead. + + .. attribute:: params + + :class:`~collections.Mapping` of request parameters, not generally + useful as they're provided directly to the handler method as keyword + arguments + + .. attribute:: session_id + + opaque identifier for the :class:`session.OpenERPSession` instance of + the current request + + .. attribute:: session + + a :class:`OpenERPSession` holding the HTTP session data for the + current http session + + .. attribute:: context + + :class:`~collections.Mapping` of context values for the current request + + .. attribute:: db + + ``str``, the name of the database linked to the current request. Can be ``None`` + if the current request uses the ``none`` authentication. + + .. attribute:: uid + + ``int``, the id of the user related to the current request. Can be ``None`` + if the current request uses the ``none`` authenticatoin. + """ + def __init__(self, httprequest): + self.httprequest = httprequest + self.httpresponse = None + self.httpsession = httprequest.session + self.session = httprequest.session + self.session_id = httprequest.session.sid + self.disable_db = False + self.uid = None + self.func = None + self.auth_method = None + self._cr_cm = None + self._cr = None + self.func_request_type = None + # set db/uid trackers - they're cleaned up at the WSGI + # dispatching phase in openerp.service.wsgi_server.application + if self.db: + threading.current_thread().dbname = self.db + if self.session.uid: + threading.current_thread().uid = self.session.uid + self.context = dict(self.session.context) + self.lang = self.context["lang"] + + def _authenticate(self): + if self.session.uid: + try: + self.session.check_security() + except SessionExpiredException, e: + self.session.logout() + raise SessionExpiredException("Session expired for request %s" % self.httprequest) + auth_methods[self.auth_method]() + @property + def registry(self): + """ + The registry to the database linked to this request. Can be ``None`` if the current request uses the + ``none'' authentication. + """ + return openerp.modules.registry.RegistryManager.get(self.db) if self.db else None + + @property + def db(self): + """ + The registry to the database linked to this request. Can be ``None`` if the current request uses the + ``none'' authentication. + """ + return self.session.db if not self.disable_db else None + + @property + def cr(self): + """ + The cursor initialized for the current method call. If the current request uses the ``none`` authentication + trying to access this property will raise an exception. + """ + # some magic to lazy create the cr + if not self._cr_cm: + self._cr_cm = self.registry.cursor() + self._cr = self._cr_cm.__enter__() + return self._cr + + def _call_function(self, *args, **kwargs): + self._authenticate() + try: + # ugly syntax only to get the __exit__ arguments to pass to self._cr + request = self + class with_obj(object): + def __enter__(self): + pass + def __exit__(self, *args): + if request._cr_cm: + request._cr_cm.__exit__(*args) + request._cr_cm = None + request._cr = None + + with with_obj(): + if self.func_request_type != self._request_type: + raise Exception("%s, %s: Function declared as capable of handling request of type '%s' but called with a request of type '%s'" \ + % (self.func, self.httprequest.path, self.func_request_type, self._request_type)) + return self.func(*args, **kwargs) + finally: + # just to be sure no one tries to re-use the request + self.disable_db = True + self.uid = None + + @property + def debug(self): + return 'debug' in self.httprequest.args + + @contextlib.contextmanager + def registry_cr(self): + warnings.warn('please use request.registry and request.cr directly', DeprecationWarning) + yield (self.registry, self.cr) + +def auth_method_user(): + request.uid = request.session.uid + if not request.uid: + raise SessionExpiredException("Session expired") + +def auth_method_admin(): + if not request.db: + raise SessionExpiredException("No valid database for request %s" % request.httprequest) + request.uid = openerp.SUPERUSER_ID + +def auth_method_none(): + request.disable_db = True + request.uid = None + +auth_methods = { + "user": auth_method_user, + "admin": auth_method_admin, + "none": auth_method_none, +} + +def route(route, type="http", auth="user"): + """ + Decorator marking the decorated method as being a handler for requests. The method must be part of a subclass + of ``Controller``. + + :param route: string or array. The route part that will determine which http requests will match the decorated + method. Can be a single string or an array of strings. See werkzeug's routing documentation for the format of + route expression ( http://werkzeug.pocoo.org/docs/routing/ ). + :param type: The type of request, can be ``'http'`` or ``'json'``. + :param auth: The type of authentication method, can on of the following: + + * ``user``: The user must be authenticated and the current request will perform using the rights of the + user. + * ``admin``: The user may not be authenticated and the current request will perform using the admin user. + * ``none``: The method is always active, even if there is no database. Mainly used by the framework and + authentication modules. There request code will not have any facilities to access the database nor have any + configuration indicating the current database nor the current user. + """ + assert type in ["http", "json"] + assert auth in auth_methods.keys() + def decorator(f): + if isinstance(route, list): + f.routes = route + else: + f.routes = [route] + f.exposed = type + if getattr(f, "auth", None) is None: + f.auth = auth + return f + return decorator + +def reject_nonliteral(dct): + if '__ref' in dct: + raise ValueError( + "Non literal contexts can not be sent to the server anymore (%r)" % (dct,)) + return dct + +class JsonRequest(WebRequest): + """ JSON-RPC2 over HTTP. + + Sucessful request:: + + --> {"jsonrpc": "2.0", + "method": "call", + "params": {"context": {}, + "arg1": "val1" }, + "id": null} + + <-- {"jsonrpc": "2.0", + "result": { "res1": "val1" }, + "id": null} + + Request producing a error:: + + --> {"jsonrpc": "2.0", + "method": "call", + "params": {"context": {}, + "arg1": "val1" }, + "id": null} + + <-- {"jsonrpc": "2.0", + "error": {"code": 1, + "message": "End user error message.", + "data": {"code": "codestring", + "debug": "traceback" } }, + "id": null} + + """ + _request_type = "json" + + def __init__(self, *args): + super(JsonRequest, self).__init__(*args) + + self.jsonp_handler = None + + args = self.httprequest.args + jsonp = args.get('jsonp') + self.jsonp = jsonp + request = None + request_id = args.get('id') + + if jsonp and self.httprequest.method == 'POST': + # jsonp 2 steps step1 POST: save call + def handler(): + self.session.jsonp_requests[request_id] = self.httprequest.form['r'] + self.session.modified = True + headers=[('Content-Type', 'text/plain; charset=utf-8')] + r = werkzeug.wrappers.Response(request_id, headers=headers) + return r + self.jsonp_handler = handler + return + elif jsonp and args.get('r'): + # jsonp method GET + request = args.get('r') + elif jsonp and request_id: + # jsonp 2 steps step2 GET: run and return result + request = self.session.jsonp_requests.pop(request_id, "") + else: + # regular jsonrpc2 + request = self.httprequest.stream.read() + + # Read POST content or POST Form Data named "request" + self.jsonrequest = simplejson.loads(request, object_hook=reject_nonliteral) + self.params = dict(self.jsonrequest.get("params", {})) + self.context = self.params.pop('context', self.session.context) + + def dispatch(self): + """ Calls the method asked for by the JSON-RPC2 or JSONP request + """ + if self.jsonp_handler: + return self.jsonp_handler() + response = {"jsonrpc": "2.0" } + error = None + + try: + response['id'] = self.jsonrequest.get('id') + response["result"] = self._call_function(**self.params) + except AuthenticationError, e: + _logger.exception("Exception during JSON request handling.") + se = serialize_exception(e) + error = { + 'code': 100, + 'message': "OpenERP Session Invalid", + 'data': se + } + except Exception, e: + _logger.exception("Exception during JSON request handling.") + se = serialize_exception(e) + error = { + 'code': 200, + 'message': "OpenERP Server Error", + 'data': se + } + if error: + response["error"] = error + + if self.jsonp: + # If we use jsonp, that's mean we are called from another host + # Some browser (IE and Safari) do no allow third party cookies + # We need then to manage http sessions manually. + response['session_id'] = self.session_id + mime = 'application/javascript' + body = "%s(%s);" % (self.jsonp, simplejson.dumps(response),) + else: + mime = 'application/json' + body = simplejson.dumps(response) + + r = werkzeug.wrappers.Response(body, headers=[('Content-Type', mime), ('Content-Length', len(body))]) + return r + +def serialize_exception(e): + tmp = { + "name": type(e).__module__ + "." + type(e).__name__ if type(e).__module__ else type(e).__name__, + "debug": traceback.format_exc(), + "message": u"%s" % e, + "arguments": to_jsonable(e.args), + } + if isinstance(e, openerp.osv.osv.except_osv): + tmp["exception_type"] = "except_osv" + elif isinstance(e, openerp.exceptions.Warning): + tmp["exception_type"] = "warning" + elif isinstance(e, openerp.exceptions.AccessError): + tmp["exception_type"] = "access_error" + elif isinstance(e, openerp.exceptions.AccessDenied): + tmp["exception_type"] = "access_denied" + return tmp + +def to_jsonable(o): + if isinstance(o, str) or isinstance(o,unicode) or isinstance(o, int) or isinstance(o, long) \ + or isinstance(o, bool) or o is None or isinstance(o, float): + return o + if isinstance(o, list) or isinstance(o, tuple): + return [to_jsonable(x) for x in o] + if isinstance(o, dict): + tmp = {} + for k, v in o.items(): + tmp[u"%s" % k] = to_jsonable(v) + return tmp + return u"%s" % o + +def jsonrequest(f): + """ + .. deprecated:: 8.0 + + Use the ``route()`` decorator instead. + """ + f.combine = True + base = f.__name__.lstrip('/') + if f.__name__ == "index": + base = "" + return route([base, base + "/"], type="json", auth="user")(f) + +class HttpRequest(WebRequest): + """ Regular GET/POST request + """ + _request_type = "http" + + def __init__(self, *args): + super(HttpRequest, self).__init__(*args) + params = dict(self.httprequest.args) + params.update(self.httprequest.form) + params.update(self.httprequest.files) + params.pop('session_id', None) + self.params = params + + def dispatch(self): + try: + r = self._call_function(**self.params) + except werkzeug.exceptions.HTTPException, e: + r = e + except Exception, e: + _logger.exception("An exception occured during an http request") + se = serialize_exception(e) + error = { + 'code': 200, + 'message': "OpenERP Server Error", + 'data': se + } + r = werkzeug.exceptions.InternalServerError(cgi.escape(simplejson.dumps(error))) + else: + if not r: + r = werkzeug.wrappers.Response(status=204) # no content + return r + + def make_response(self, data, headers=None, cookies=None): + """ Helper for non-HTML responses, or HTML responses with custom + response headers or cookies. + + While handlers can just return the HTML markup of a page they want to + send as a string if non-HTML data is returned they need to create a + complete response object, or the returned data will not be correctly + interpreted by the clients. + + :param basestring data: response body + :param headers: HTTP headers to set on the response + :type headers: ``[(name, value)]`` + :param collections.Mapping cookies: cookies to set on the client + """ + response = werkzeug.wrappers.Response(data, headers=headers) + if cookies: + for k, v in cookies.iteritems(): + response.set_cookie(k, v) + return response + + def not_found(self, description=None): + """ Helper for 404 response, return its result from the method + """ + return werkzeug.exceptions.NotFound(description) + +def httprequest(f): + """ + .. deprecated:: 8.0 + + Use the ``route()`` decorator instead. + """ + f.combine = True + base = f.__name__.lstrip('/') + if f.__name__ == "index": + base = "" + return route([base, base + "/"], type="http", auth="user")(f) + +#---------------------------------------------------------- +# Thread local global request object +#---------------------------------------------------------- +from werkzeug.local import LocalStack + +_request_stack = LocalStack() + +request = _request_stack() """ -``openerp.http`` offers decorators to register WSGI and RPC endpoints handlers. -See :ref:`routing`. + A global proxy that always redirect to the current request object. """ -from . import service +@contextlib.contextmanager +def set_request(req): + _request_stack.push(req) + try: + yield + finally: + _request_stack.pop() -def handler(): - """ - Decorator to register a WSGI handler. The handler must return None if it - does not handle the request. - """ - def decorator(f): - service.wsgi_server.register_wsgi_handler(f) - return decorator +#---------------------------------------------------------- +# Controller metaclass registration +#---------------------------------------------------------- +addons_module = {} +addons_manifest = {} +controllers_per_module = {} -def route(url): - """ - Same as then handler() decorator but register the handler under a specific - url. Not yet implemented. - """ - def decorator(f): - pass # TODO - return decorator +class ControllerType(type): + def __init__(cls, name, bases, attrs): + super(ControllerType, cls).__init__(name, bases, attrs) -def rpc(endpoint): - """ - Decorator to register a RPC endpoint handler. The handler will receive - already unmarshalled RCP arguments. - """ - def decorator(f): - service.wsgi_server.register_rpc_endpoint(endpoint, f) - return decorator + # flag old-style methods with req as first argument + for k, v in attrs.items(): + if inspect.isfunction(v): + spec = inspect.getargspec(v) + first_arg = spec.args[1] if len(spec.args) >= 2 else None + if first_arg in ["req", "request"]: + v._first_arg_is_req = True -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + # store the controller in the controllers list + name_class = ("%s.%s" % (cls.__module__, cls.__name__), cls) + class_path = name_class[0].split(".") + if not class_path[:2] == ["openerp", "addons"]: + module = "" + else: + # we want to know all modules that have controllers + module = class_path[2] + # but we only store controllers directly inheriting from Controller + if not "Controller" in globals() or not Controller in bases: + return + controllers_per_module.setdefault(module, []).append(name_class) + +class Controller(object): + __metaclass__ = ControllerType + +#---------------------------------------------------------- +# HTTP Sessions +#---------------------------------------------------------- +class AuthenticationError(Exception): + pass + +class SessionExpiredException(Exception): + pass + +class Service(object): + """ + .. deprecated:: 8.0 + Use ``openerp.netsvc.dispatch_rpc()`` instead. + """ + def __init__(self, session, service_name): + self.session = session + self.service_name = service_name + + def __getattr__(self, method): + def proxy_method(*args): + result = openerp.netsvc.dispatch_rpc(self.service_name, method, args) + return result + return proxy_method + +class Model(object): + """ + .. deprecated:: 8.0 + Use the resistry and cursor in ``openerp.addons.web.http.request`` instead. + """ + def __init__(self, session, model): + self.session = session + self.model = model + self.proxy = self.session.proxy('object') + + def __getattr__(self, method): + self.session.assert_valid() + def proxy(*args, **kw): + # Can't provide any retro-compatibility for this case, so we check it and raise an Exception + # to tell the programmer to adapt his code + if not request.db or not request.uid or self.session.db != request.db \ + or self.session.uid != request.uid: + raise Exception("Trying to use Model with badly configured database or user.") + + mod = request.registry.get(self.model) + if method.startswith('_'): + raise Exception("Access denied") + meth = getattr(mod, method) + cr = request.cr + result = meth(cr, request.uid, *args, **kw) + # reorder read + if method == "read": + if isinstance(result, list) and len(result) > 0 and "id" in result[0]: + index = {} + for r in result: + index[r['id']] = r + result = [index[x] for x in args[0] if x in index] + return result + return proxy + +class OpenERPSession(werkzeug.contrib.sessions.Session): + def __init__(self, *args, **kwargs): + self.inited = False + self.modified = False + super(OpenERPSession, self).__init__(*args, **kwargs) + self.inited = True + self._default_values() + self.modified = False + + def __getattr__(self, attr): + return self.get(attr, None) + def __setattr__(self, k, v): + if getattr(self, "inited", False): + try: + object.__getattribute__(self, k) + except: + return self.__setitem__(k, v) + object.__setattr__(self, k, v) + + def authenticate(self, db, login=None, password=None, uid=None): + """ + Authenticate the current user with the given db, login and password. If successful, store + the authentication parameters in the current session and request. + + :param uid: If not None, that user id will be used instead the login to authenticate the user. + """ + + if uid is None: + wsgienv = request.httprequest.environ + env = dict( + base_location=request.httprequest.url_root.rstrip('/'), + HTTP_HOST=wsgienv['HTTP_HOST'], + REMOTE_ADDR=wsgienv['REMOTE_ADDR'], + ) + uid = openerp.netsvc.dispatch_rpc('common', 'authenticate', [db, login, password, env]) + else: + security.check(db, uid, password) + self.db = db + self.uid = uid + self.login = login + self.password = password + request.uid = uid + request.disable_db = False + + if uid: self.get_context() + return uid + + def check_security(self): + """ + Chech the current authentication parameters to know if those are still valid. This method + should be called at each request. If the authentication fails, a ``SessionExpiredException`` + is raised. + """ + if not self.db or not self.uid: + raise SessionExpiredException("Session expired") + security.check(self.db, self.uid, self.password) + + def logout(self): + for k in self.keys(): + del self[k] + self._default_values() + + def _default_values(self): + self.setdefault("db", None) + self.setdefault("uid", None) + self.setdefault("login", None) + self.setdefault("password", None) + self.setdefault("context", {'tz': "UTC", "uid": None}) + self.setdefault("jsonp_requests", {}) + + def get_context(self): + """ + Re-initializes the current user's session context (based on + his preferences) by calling res.users.get_context() with the old + context. + + :returns: the new context + """ + assert self.uid, "The user needs to be logged-in to initialize his context" + self.context = request.registry.get('res.users').context_get(request.cr, request.uid) or {} + self.context['uid'] = self.uid + self._fix_lang(self.context) + return self.context + + def _fix_lang(self, context): + """ OpenERP provides languages which may not make sense and/or may not + be understood by the web client's libraries. + + Fix those here. + + :param dict context: context to fix + """ + lang = context['lang'] + + # inane OpenERP locale + if lang == 'ar_AR': + lang = 'ar' + + # lang to lang_REGION (datejs only handles lang_REGION, no bare langs) + if lang in babel.core.LOCALE_ALIASES: + lang = babel.core.LOCALE_ALIASES[lang] + + context['lang'] = lang or 'en_US' + + """ + Damn properties for retro-compatibility. All of that is deprecated, all + of that. + """ + @property + def _db(self): + return self.db + @_db.setter + def _db(self, value): + self.db = value + @property + def _uid(self): + return self.uid + @_uid.setter + def _uid(self, value): + self.uid = value + @property + def _login(self): + return self.login + @_login.setter + def _login(self, value): + self.login = value + @property + def _password(self): + return self.password + @_password.setter + def _password(self, value): + self.password = value + + def send(self, service_name, method, *args): + """ + .. deprecated:: 8.0 + Use ``openerp.netsvc.dispatch_rpc()`` instead. + """ + return openerp.netsvc.dispatch_rpc(service_name, method, args) + + def proxy(self, service): + """ + .. deprecated:: 8.0 + Use ``openerp.netsvc.dispatch_rpc()`` instead. + """ + return Service(self, service) + + def assert_valid(self, force=False): + """ + .. deprecated:: 8.0 + Use ``check_security()`` instead. + + Ensures this session is valid (logged into the openerp server) + """ + if self.uid and not force: + return + # TODO use authenticate instead of login + self.uid = self.proxy("common").login(self.db, self.login, self.password) + if not self.uid: + raise AuthenticationError("Authentication failure") + + def ensure_valid(self): + """ + .. deprecated:: 8.0 + Use ``check_security()`` instead. + """ + if self.uid: + try: + self.assert_valid(True) + except Exception: + self.uid = None + + def execute(self, model, func, *l, **d): + """ + .. deprecated:: 8.0 + Use the resistry and cursor in ``openerp.addons.web.http.request`` instead. + """ + model = self.model(model) + r = getattr(model, func)(*l, **d) + return r + + def exec_workflow(self, model, id, signal): + """ + .. deprecated:: 8.0 + Use the resistry and cursor in ``openerp.addons.web.http.request`` instead. + """ + self.assert_valid() + r = self.proxy('object').exec_workflow(self.db, self.uid, self.password, model, signal, id) + return r + + def model(self, model): + """ + .. deprecated:: 8.0 + Use the resistry and cursor in ``openerp.addons.web.http.request`` instead. + + Get an RPC proxy for the object ``model``, bound to this session. + + :param model: an OpenERP model name + :type model: str + :rtype: a model object + """ + if not self.db: + raise SessionExpiredException("Session expired") + + return Model(self, model) + +def session_gc(session_store): + if random.random() < 0.001: + # we keep session one week + last_week = time.time() - 60*60*24*7 + for fname in os.listdir(session_store.path): + path = os.path.join(session_store.path, fname) + try: + if os.path.getmtime(path) < last_week: + os.unlink(path) + except OSError: + pass + +#---------------------------------------------------------- +# WSGI Application +#---------------------------------------------------------- +# Add potentially missing (older ubuntu) font mime types +mimetypes.add_type('application/font-woff', '.woff') +mimetypes.add_type('application/vnd.ms-fontobject', '.eot') +mimetypes.add_type('application/x-font-ttf', '.ttf') + +class DisableCacheMiddleware(object): + def __init__(self, app): + self.app = app + def __call__(self, environ, start_response): + def start_wrapped(status, headers): + referer = environ.get('HTTP_REFERER', '') + parsed = urlparse.urlparse(referer) + debug = parsed.query.count('debug') >= 1 + + new_headers = [] + unwanted_keys = ['Last-Modified'] + if debug: + new_headers = [('Cache-Control', 'no-cache')] + unwanted_keys += ['Expires', 'Etag', 'Cache-Control'] + + for k, v in headers: + if k not in unwanted_keys: + new_headers.append((k, v)) + + start_response(status, new_headers) + return self.app(environ, start_wrapped) + +def session_path(): + try: + import pwd + username = pwd.getpwuid(os.geteuid()).pw_name + except ImportError: + try: + username = getpass.getuser() + except Exception: + username = "unknown" + path = os.path.join(tempfile.gettempdir(), "oe-sessions-" + username) + try: + os.mkdir(path, 0700) + except OSError as exc: + if exc.errno == errno.EEXIST: + # directory exists: ensure it has the correct permissions + # this will fail if the directory is not owned by the current user + os.chmod(path, 0700) + else: + raise + return path + +class Root(object): + """Root WSGI application for the OpenERP Web Client. + """ + def __init__(self): + self.addons = {} + self.statics = {} + + self.no_db_router = None + + self.load_addons() + + # Setup http sessions + path = session_path() + self.session_store = werkzeug.contrib.sessions.FilesystemSessionStore(path, session_class=OpenERPSession) + _logger.debug('HTTP sessions stored in: %s', path) + + + def __call__(self, environ, start_response): + """ Handle a WSGI request + """ + return self.dispatch(environ, start_response) + + def dispatch(self, environ, start_response): + """ + Performs the actual WSGI dispatching for the application. + """ + try: + httprequest = werkzeug.wrappers.Request(environ) + httprequest.parameter_storage_class = werkzeug.datastructures.ImmutableDict + httprequest.app = self + + session_gc(self.session_store) + + sid = httprequest.args.get('session_id') + explicit_session = True + if not sid: + sid = httprequest.headers.get("X-Openerp-Session-Id") + if not sid: + sid = httprequest.cookies.get('session_id') + explicit_session = False + if sid is None: + httprequest.session = self.session_store.new() + else: + httprequest.session = self.session_store.get(sid) + + self._find_db(httprequest) + + if not "lang" in httprequest.session.context: + lang = httprequest.accept_languages.best or "en_US" + lang = babel.core.LOCALE_ALIASES.get(lang, lang).replace('-', '_') + httprequest.session.context["lang"] = lang + + request = self._build_request(httprequest) + db = request.db + + if db: + openerp.modules.registry.RegistryManager.check_registry_signaling(db) + + with set_request(request): + self.find_handler() + result = request.dispatch() + + if db: + openerp.modules.registry.RegistryManager.signal_caches_change(db) + + if isinstance(result, basestring): + headers=[('Content-Type', 'text/html; charset=utf-8'), ('Content-Length', len(result))] + response = werkzeug.wrappers.Response(result, headers=headers) + else: + response = result + + if httprequest.session.should_save: + self.session_store.save(httprequest.session) + if not explicit_session and hasattr(response, 'set_cookie'): + response.set_cookie('session_id', httprequest.session.sid, max_age=90 * 24 * 60 * 60) + + return response(environ, start_response) + except werkzeug.exceptions.HTTPException, e: + return e(environ, start_response) + + def _find_db(self, httprequest): + db = db_monodb(httprequest) + if db != httprequest.session.db: + httprequest.session.logout() + httprequest.session.db = db + + def _build_request(self, httprequest): + if httprequest.args.get('jsonp'): + return JsonRequest(httprequest) + + if httprequest.mimetype == "application/json": + return JsonRequest(httprequest) + else: + return HttpRequest(httprequest) + + def load_addons(self): + """ Load all addons from addons patch containg static files and + controllers and configure them. """ + + for addons_path in openerp.modules.module.ad_paths: + for module in sorted(os.listdir(str(addons_path))): + if module not in addons_module: + manifest_path = os.path.join(addons_path, module, '__openerp__.py') + path_static = os.path.join(addons_path, module, 'static') + if os.path.isfile(manifest_path) and os.path.isdir(path_static): + manifest = ast.literal_eval(open(manifest_path).read()) + manifest['addons_path'] = addons_path + _logger.debug("Loading %s", module) + if 'openerp.addons' in sys.modules: + m = __import__('openerp.addons.' + module) + else: + m = __import__(module) + addons_module[module] = m + addons_manifest[module] = manifest + self.statics['/%s/static' % module] = path_static + + app = werkzeug.wsgi.SharedDataMiddleware(self.dispatch, self.statics) + self.dispatch = DisableCacheMiddleware(app) + + def _build_router(self, db): + _logger.info("Generating routing configuration for database %s" % db) + routing_map = routing.Map(strict_slashes=False) + + def gen(modules, nodb_only): + for module in modules: + for v in controllers_per_module[module]: + cls = v[1] + + subclasses = cls.__subclasses__() + subclasses = [c for c in subclasses if c.__module__.startswith('openerp.addons.') and + c.__module__.split(".")[2] in modules] + if subclasses: + name = "%s (extended by %s)" % (cls.__name__, ', '.join(sub.__name__ for sub in subclasses)) + cls = type(name, tuple(reversed(subclasses)), {}) + + o = cls() + members = inspect.getmembers(o) + for mk, mv in members: + if inspect.ismethod(mv) and getattr(mv, 'exposed', False) and \ + nodb_only == (getattr(mv, "auth", "none") == "none"): + for url in mv.routes: + if getattr(mv, "combine", False): + url = o._cp_path.rstrip('/') + '/' + url.lstrip('/') + if url.endswith("/") and len(url) > 1: + url = url[: -1] + routing_map.add(routing.Rule(url, endpoint=mv)) + + modules_set = set(controllers_per_module.keys()) - set(['', 'web']) + # building all none methods + gen(['', "web"] + sorted(modules_set), True) + if not db: + return routing_map + + registry = openerp.modules.registry.RegistryManager.get(db) + with registry.cursor() as cr: + m = registry.get('ir.module.module') + ids = m.search(cr, openerp.SUPERUSER_ID, [('state', '=', 'installed'), ('name', '!=', 'web')]) + installed = set(x['name'] for x in m.read(cr, 1, ids, ['name'])) + modules_set = modules_set & installed + + # building all other methods + gen(['', "web"] + sorted(modules_set), False) + + return routing_map + + def get_db_router(self, db): + if db is None: + router = self.no_db_router + else: + router = getattr(openerp.modules.registry.RegistryManager.get(db), "werkzeug_http_router", None) + if not router: + router = self._build_router(db) + if db is None: + self.no_db_router = router + else: + openerp.modules.registry.RegistryManager.get(db).werkzeug_http_router = router + return router + + def find_handler(self): + """ + Tries to discover the controller handling the request for the path specified in the request. + """ + path = request.httprequest.path + urls = self.get_db_router(request.db).bind("") + func, arguments = urls.match(path) + arguments = dict([(k, v) for k, v in arguments.items() if not k.startswith("_ignored_")]) + + @service_model.check + def checked_call(dbname, *a, **kw): + return func(*a, **kw) + + def nfunc(*args, **kwargs): + kwargs.update(arguments) + if getattr(func, '_first_arg_is_req', False): + args = (request,) + args + + if request.db: + return checked_call(request.db, *args, **kwargs) + return func(*args, **kwargs) + + request.func = nfunc + request.auth_method = getattr(func, "auth", "user") + request.func_request_type = func.exposed + +def db_list(force=False, httprequest=None): + httprequest = httprequest or request.httprequest + dbs = openerp.netsvc.dispatch_rpc("db", "list", [force]) + h = httprequest.environ['HTTP_HOST'].split(':')[0] + d = h.split('.')[0] + r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d) + dbs = [i for i in dbs if re.match(r, i)] + return dbs + +def db_monodb(httprequest=None): + """ + Magic function to find the current database. + + Implementation details: + + * Magic + * More magic + + Returns ``None`` if the magic is not magic enough. + """ + httprequest = httprequest or request.httprequest + db = None + redirect = None + + dbs = db_list(True, httprequest) + + # try the db already in the session + db_session = httprequest.session.db + if db_session in dbs: + return db_session + + # if dbfilters was specified when launching the server and there is + # only one possible db, we take that one + if openerp.tools.config['dbfilter'] != ".*" and len(dbs) == 1: + return dbs[0] + return None + +class CommonController(Controller): + + @route('/jsonrpc', type='json', auth="none") + def jsonrpc(self, service, method, args): + """ Method used by client APIs to contact OpenERP. """ + return openerp.netsvc.dispatch_rpc(service, method, args) + + @route('/gen_session_id', type='json', auth="none") + def gen_session_id(self): + nsession = root.session_store.new() + return nsession.sid + +root = None + +def wsgi_postload(): + global root + root = Root() + openerp.wsgi.register_wsgi_handler(root) + +# vim:et:ts=4:sw=4: diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py index 390ac77b2ed..983de2d532c 100644 --- a/openerp/modules/loading.py +++ b/openerp/modules/loading.py @@ -166,11 +166,15 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules= # upgrading the module information modobj.write(cr, SUPERUSER_ID, [module_id], modobj.get_values_from_terp(package.data)) _load_data(cr, module_name, idref, mode, kind='data') - if hasattr(package, 'demo') or (package.dbdemo and package.state != 'installed'): + has_demo = hasattr(package, 'demo') or (package.dbdemo and package.state != 'installed') + if has_demo: status['progress'] = (index + 0.75) / len(graph) _load_data(cr, module_name, idref, mode, kind='demo') cr.execute('update ir_module_module set demo=%s where id=%s', (True, module_id)) + migrations.migrate_module(package, 'post') + + if has_demo: # launch tests only in demo mode, as most tests will depend # on demo data. Other tests can be added into the regular # 'data' section, but should probably not alter the data, @@ -186,8 +190,6 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules= processed_modules.append(package.name) - migrations.migrate_module(package, 'post') - ver = adapt_version(package.data['version']) # Set new modules and dependencies modobj.write(cr, SUPERUSER_ID, [module_id], {'state': 'installed', 'latest_version': ver}) diff --git a/openerp/modules/registry.py b/openerp/modules/registry.py index 9d599ba3aac..d58f4b3186b 100644 --- a/openerp/modules/registry.py +++ b/openerp/modules/registry.py @@ -305,18 +305,16 @@ class RegistryManager(object): r, c = cr.fetchone() # Check if the model registry must be reloaded (e.g. after the # database has been updated by another process). - if registry.base_registry_signaling_sequence != r: + if registry.base_registry_signaling_sequence > 1 and registry.base_registry_signaling_sequence != r: changed = True _logger.info("Reloading the model registry after database signaling.") registry = cls.new(db_name) - registry.base_registry_signaling_sequence = r # Check if the model caches must be invalidated (e.g. after a write # occured on another process). Don't clear right after a registry # has been reload. - elif registry.base_cache_signaling_sequence != c: + elif registry.base_cache_signaling_sequence > 1 and registry.base_cache_signaling_sequence != c: changed = True _logger.info("Invalidating all model caches after database signaling.") - registry.base_cache_signaling_sequence = c registry.clear_caches() registry.reset_any_cache_cleared() # One possible reason caches have been invalidated is the @@ -326,6 +324,8 @@ class RegistryManager(object): for column in model._columns.values(): if hasattr(column, 'digits_change'): column.digits_change(cr) + registry.base_registry_signaling_sequence = r + registry.base_cache_signaling_sequence = c finally: cr.close() return changed diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 52426af751f..fb85dcb003e 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -117,8 +117,7 @@ class _column(object): self.groups = False # CSV list of ext IDs of groups that can access this field self.deprecated = False # Optional deprecation warning for a in args: - if args[a]: - setattr(self, a, args[a]) + setattr(self, a, args[a]) def restart(self): pass @@ -208,27 +207,29 @@ class reference(_column): return model.name_get(cr, uid, [int(res_id)], context=context)[0][1] return tools.ustr(value) +# takes a string (encoded in utf8) and returns a string (encoded in utf8) +def _symbol_set_char(self, symb): + + #TODO: + # * we need to remove the "symb==False" from the next line BUT + # for now too many things rely on this broken behavior + # * the symb==None test should be common to all data types + if symb is None or symb == False: + return None + + # we need to convert the string to a unicode object to be able + # to evaluate its length (and possibly truncate it) reliably + u_symb = tools.ustr(symb) + return u_symb[:self.size].encode('utf8') + class char(_column): _type = 'char' def __init__(self, string="unknown", size=None, **args): _column.__init__(self, string=string, size=size or None, **args) - self._symbol_set = (self._symbol_c, self._symbol_set_char) - - # takes a string (encoded in utf8) and returns a string (encoded in utf8) - def _symbol_set_char(self, symb): - #TODO: - # * we need to remove the "symb==False" from the next line BUT - # for now too many things rely on this broken behavior - # * the symb==None test should be common to all data types - if symb is None or symb == False: - return None - - # we need to convert the string to a unicode object to be able - # to evaluate its length (and possibly truncate it) reliably - u_symb = tools.ustr(symb) - - return u_symb[:self.size].encode('utf8') + # self._symbol_set_char defined to keep the backward compatibility + self._symbol_f = self._symbol_set_char = lambda x: _symbol_set_char(self, x) + self._symbol_set = (self._symbol_c, self._symbol_f) class text(_column): @@ -1150,6 +1151,11 @@ class function(_column): self._symbol_f = integer._symbol_f self._symbol_set = integer._symbol_set + if type == 'char': + self._symbol_c = char._symbol_c + self._symbol_f = lambda x: _symbol_set_char(self, x) + self._symbol_set = (self._symbol_c, self._symbol_f) + def digits_change(self, cr): if self._type == 'float': if self.digits_compute: diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index b77a10869a4..0ebfa4e1862 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1010,8 +1010,10 @@ class BaseModel(object): raise except_orm('Error', ('Invalid function definition %s in object %s !\nYou must use the definition: store={object:(fnct, fields, priority, time length)}.' % (store_field, self._name))) self.pool._store_function.setdefault(object, []) - self.pool._store_function[object].append((self._name, store_field, fnct, tuple(fields2) if fields2 else None, order, length)) - self.pool._store_function[object].sort(lambda x, y: cmp(x[4], y[4])) + t = (self._name, store_field, fnct, tuple(fields2) if fields2 else None, order, length) + if not t in self.pool._store_function[object]: + self.pool._store_function[object].append((self._name, store_field, fnct, tuple(fields2) if fields2 else None, order, length)) + self.pool._store_function[object].sort(lambda x, y: cmp(x[4], y[4])) for (key, _, msg) in self._sql_constraints: self.pool._sql_error[self._table+'_'+key] = msg @@ -2461,8 +2463,12 @@ class BaseModel(object): """ Record the creation of a constraint for this model, to make it possible to delete it later when the module is uninstalled. Type can be either - 'f' or 'u' depending on the constraing being a foreign key or not. + 'f' or 'u' depending on the constraint being a foreign key or not. """ + if not self._module: + # no need to save constraints for custom models as they're not part + # of any module + return assert type in ('f', 'u') cr.execute(""" SELECT 1 FROM ir_model_constraint, ir_module_module @@ -4122,9 +4128,9 @@ class BaseModel(object): return browse_null() def _store_get_values(self, cr, uid, ids, fields, context): - """Returns an ordered list of fields.functions to call due to + """Returns an ordered list of fields.function to call due to an update operation on ``fields`` of records with ``ids``, - obtained by calling the 'store' functions of these fields, + obtained by calling the 'store' triggers of these fields, as setup by their 'store' attribute. :return: [(priority, model_name, [record_ids,], [function_fields,])] @@ -4133,42 +4139,46 @@ class BaseModel(object): stored_functions = self.pool._store_function.get(self._name, []) # use indexed names for the details of the stored_functions: - model_name_, func_field_to_compute_, id_mapping_fnct_, trigger_fields_, priority_ = range(5) + model_name_, func_field_to_compute_, target_ids_func_, trigger_fields_, priority_ = range(5) - # only keep functions that should be triggered for the ``fields`` + # only keep store triggers that should be triggered for the ``fields`` # being written to. - to_compute = [f for f in stored_functions \ + triggers_to_compute = [f for f in stored_functions \ if ((not f[trigger_fields_]) or set(fields).intersection(f[trigger_fields_]))] - mapping = {} - for function in to_compute: - # use admin user for accessing objects having rules defined on store fields - target_ids = [id for id in function[id_mapping_fnct_](self, cr, SUPERUSER_ID, ids, context) if id] + to_compute_map = {} + target_id_results = {} + for store_trigger in triggers_to_compute: + target_func_id_ = id(store_trigger[target_ids_func_]) + if not target_func_id_ in target_id_results: + # use admin user for accessing objects having rules defined on store fields + target_id_results[target_func_id_] = [i for i in store_trigger[target_ids_func_](self, cr, SUPERUSER_ID, ids, context) if i] + target_ids = target_id_results[target_func_id_] # the compound key must consider the priority and model name - key = (function[priority_], function[model_name_]) + key = (store_trigger[priority_], store_trigger[model_name_]) for target_id in target_ids: - mapping.setdefault(key, {}).setdefault(target_id,set()).add(tuple(function)) + to_compute_map.setdefault(key, {}).setdefault(target_id,set()).add(tuple(store_trigger)) - # Here mapping looks like: - # { (10, 'model_a') : { target_id1: [ (function_1_tuple, function_2_tuple) ], ... } - # (20, 'model_a') : { target_id2: [ (function_3_tuple, function_4_tuple) ], ... } - # (99, 'model_a') : { target_id1: [ (function_5_tuple, function_6_tuple) ], ... } + # Here to_compute_map looks like: + # { (10, 'model_a') : { target_id1: [ (trigger_1_tuple, trigger_2_tuple) ], ... } + # (20, 'model_a') : { target_id2: [ (trigger_3_tuple, trigger_4_tuple) ], ... } + # (99, 'model_a') : { target_id1: [ (trigger_5_tuple, trigger_6_tuple) ], ... } # } # Now we need to generate the batch function calls list # call_map = # { (10, 'model_a') : [(10, 'model_a', [record_ids,], [function_fields,])] } call_map = {} - for ((priority,model), id_map) in mapping.iteritems(): - functions_ids_maps = {} + for ((priority,model), id_map) in to_compute_map.iteritems(): + trigger_ids_maps = {} # function_ids_maps = # { (function_1_tuple, function_2_tuple) : [target_id1, target_id2, ..] } - for id, functions in id_map.iteritems(): - functions_ids_maps.setdefault(tuple(functions), []).append(id) - for functions, ids in functions_ids_maps.iteritems(): - call_map.setdefault((priority,model),[]).append((priority, model, ids, - [f[func_field_to_compute_] for f in functions])) + for target_id, triggers in id_map.iteritems(): + trigger_ids_maps.setdefault(tuple(triggers), []).append(target_id) + for triggers, target_ids in trigger_ids_maps.iteritems(): + call_map.setdefault((priority,model),[]).append((priority, model, target_ids, + [t[func_field_to_compute_] for t in triggers])) ordered_keys = call_map.keys() ordered_keys.sort() result = [] diff --git a/openerp/tests/test_mail.py b/openerp/tests/test_mail.py index e7b7ec012df..ae7f862a93e 100755 --- a/openerp/tests/test_mail.py +++ b/openerp/tests/test_mail.py @@ -149,6 +149,59 @@ class TestCleaner(unittest2.TestCase): for text in out_lst: self.assertNotIn(text, new_html, 'html_email_cleaner did not remove unwanted content') + def test_05_shorten(self): + # TEST: shorten length + test_str = '''
+ + +

Hello, Raoul + You are + pretty

+Really +
+''' + # shorten at 'H' of Hello -> should shorten after Hello, + html = html_email_clean(test_str, shorten=True, max_length=1, remove=True) + self.assertIn('Hello,', html, 'html_email_cleaner: shorten error or too short') + self.assertNotIn('Raoul', html, 'html_email_cleaner: shorten error or too long') + self.assertIn('read more', html, 'html_email_cleaner: shorten error about read more inclusion') + # shorten at 'are' -> should shorten after are + html = html_email_clean(test_str, shorten=True, max_length=17, remove=True) + self.assertIn('Hello,', html, 'html_email_cleaner: shorten error or too short') + self.assertIn('Raoul', html, 'html_email_cleaner: shorten error or too short') + self.assertIn('are', html, 'html_email_cleaner: shorten error or too short') + self.assertNotIn('pretty', html, 'html_email_cleaner: shorten error or too long') + self.assertNotIn('Really', html, 'html_email_cleaner: shorten error or too long') + self.assertIn('read more', html, 'html_email_cleaner: shorten error about read more inclusion') + + # TEST: shorten in quote + test_str = '''
Blahble + bluih blouh +
This is a quote + And this is quite a long quote, after all. +
+
''' + # shorten in the quote + html = html_email_clean(test_str, shorten=True, max_length=25, remove=True) + self.assertIn('Blahble', html, 'html_email_cleaner: shorten error or too short') + self.assertIn('bluih', html, 'html_email_cleaner: shorten error or too short') + self.assertIn('blouh', html, 'html_email_cleaner: shorten error or too short') + self.assertNotIn('quote', html, 'html_email_cleaner: shorten error or too long') + self.assertIn('read more', html, 'html_email_cleaner: shorten error about read more inclusion') + # shorten in second word + html = html_email_clean(test_str, shorten=True, max_length=9, remove=True) + self.assertIn('Blahble', html, 'html_email_cleaner: shorten error or too short') + self.assertIn('bluih', html, 'html_email_cleaner: shorten error or too short') + self.assertNotIn('blouh', html, 'html_email_cleaner: shorten error or too short') + self.assertNotIn('quote', html, 'html_email_cleaner: shorten error or too long') + self.assertIn('read more', html, 'html_email_cleaner: shorten error about read more inclusion') + # shorten waaay too large + html = html_email_clean(test_str, shorten=True, max_length=900, remove=True) + self.assertIn('Blahble', html, 'html_email_cleaner: shorten error or too short') + self.assertIn('bluih', html, 'html_email_cleaner: shorten error or too short') + self.assertIn('blouh', html, 'html_email_cleaner: shorten error or too short') + self.assertNotIn('quote', html, 'html_email_cleaner: shorten error or too long') + def test_10_email_text(self): """ html_email_clean test for text-based emails """ new_html = html_email_clean(test_mail_examples.TEXT_1, remove=True) @@ -257,6 +310,19 @@ class TestCleaner(unittest2.TestCase): 'tasks using the gantt chart and control deadlines']: self.assertIn(ext, new_html, 'html_email_cleaner wrongly take into account specific expand options') + def test_70_read_more(self): + new_html = html_email_clean(test_mail_examples.BUG1, remove=True, shorten=True, max_length=100) + for ext in test_mail_examples.BUG_1_IN: + self.assertIn(ext, new_html, 'html_email_cleaner wrongly removed valid content') + for ext in test_mail_examples.BUG_1_OUT: + self.assertNotIn(ext, new_html, 'html_email_cleaner did not removed invalid content') + + new_html = html_email_clean(test_mail_examples.BUG2, remove=True, shorten=True, max_length=250) + for ext in test_mail_examples.BUG_2_IN: + self.assertIn(ext, new_html, 'html_email_cleaner wrongly removed valid content') + for ext in test_mail_examples.BUG_2_OUT: + self.assertNotIn(ext, new_html, 'html_email_cleaner did not removed invalid content') + def test_90_misc(self): # False boolean for text must return empty string new_html = html_email_clean(False) diff --git a/openerp/tests/test_mail_examples.py b/openerp/tests/test_mail_examples.py index cafb0b9a22b..6886ce86baa 100644 --- a/openerp/tests/test_mail_examples.py +++ b/openerp/tests/test_mail_examples.py @@ -785,3 +785,322 @@ MSOFFICE_3 = """
MSOFFICE_3_IN = ['I saw your boss yesterday'] MSOFFICE_3_OUT = ['I noticed you recently downloaded OpenERP.', 'You indicated that you wish', 'Belgium: +32.81.81.37.00'] + + +# ------------------------------------------------------------ +# Test cases coming from bugs +# ------------------------------------------------------------ + +# bug: read more not apparent, strange message in read more span +BUG1 = """
Hi Migration Team,
+
+Paragraph 1, blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah.
+
+Paragraph 2, blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah.
+
+Paragraph 3, blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah blah blah blah blah blah blah 
+blah blah blah blah blah blah blah blah.
+
+Thanks.
+
+Regards,
+
+-- 
+Olivier Laurent
+Migration Manager
+OpenERP SA
+Chaussée de Namur, 40
+B-1367 Gérompont
+Tel: +32.81.81.37.00
+Web: http://www.openerp.com
""" + +BUG_1_IN = [ + 'Hi Migration Team', + 'Paragraph 1' +] +BUG_1_OUT = [ + 'Olivier Laurent', + 'Chaussée de Namur', + '81.81.37.00', + 'openerp.com', +] + + +BUG2 = """ +
+
+

+
+ -------- Original Message -------- + + + + + + + + + + + + + + + + + + + +
Subject: + Fwd: TR: OpenERP S.A. Payment Reminder
Date: Wed, 16 Oct 2013 14:11:13 +0200
From: Christine Herrmann <che@openerp.com>
To: online@openerp.com
+
+
+ +
+

+
+ -------- Message original -------- + + + + + + + + + + + + + + + + + + + + + + + +
Sujet: + TR: OpenERP S.A. Payment Reminder
Date : + Wed, 16 Oct 2013 10:34:45 -0000
De : Ida Siwatala <infos@inzoservices.com>
Répondre + + à : catchall@openerp.my.openerp.com
Pour : + Christine Herrmann (che) <che@openerp.com>
+
+
+
+
+

Bonjour,

+

+

 

+

Pourriez-vous + + me faire un retour sur ce point.

+

+

 

+

Cordialement

+

+

 

+
+
+

De : + Ida Siwatala [mailto:infos@inzoservices.com] +
+ Envoyé : vendredi 4 octobre 2013 20:03
+ À : 'Followers of + INZO-services-8-all-e-Maxime-Lisbonne-77176-Savigny-le-temple-France'
+ Objet : RE: OpenERP S.A. Payment Reminder

+
+
+

 

+

Bonsoir,

+

+

 

+

Je + + me permets de revenir vers vous par écrit , car j’ai + fait 2 appels vers votre service en exposant mon + problème, mais je n’ai pas eu de retour.

+

Cela + + fait un mois que j’ai fait la souscription de votre + produit, mais je me rends compte qu’il est pas adapté à + ma situation ( fonctionnalité manquante et surtout je + n’ai pas beaucoup de temps à passer à résoudre des + bugs).

+

C’est + + pourquoi , j’ai demandé qu’un accord soit trouvé avec + vous pour annuler le contrat (tout en vous payant le + mois d’utilisation de septembre).

+

+

 

+

Pourriez-vous + + me faire un retour sur ce point.

+

+

 

+

Cordialement,

+

+

 

+

Ida + + Siwatala

+

+

 

+

De : + che@openerp.com + [mailto:che@openerp.com] +
+ Envoyé : vendredi 4 octobre 2013 17:41
+ À : infos@inzoservices.com
+ Objet : OpenERP S.A. Payment Reminder

+

 

+
+

Dear + + INZO services,

+

Exception + + made if there was a mistake of ours, it seems that the + following amount stays unpaid. Please, take + appropriate measures in order to carry out this + payment in the next 8 days.

+

+

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Date de facturation

+
+

Description

+
+

Reference

+
+

Due Date

+
+

Amount (€)

+
+

Lit.

+
+

2013-09-24

+
+

2013/1121

+
+

Enterprise - Inzo Services + - Juillet 2013

+
+

2013-09-24

+
+

420.0

+

+

+

+

+

+

+

+
+

Amount + + due : 420.00 €

+

Would + + your payment have been carried out after this mail was + sent, please ignore this message. Do not hesitate to + contact our accounting department.

+


+ Best Regards,
+ Aurore Lesage
+ OpenERP
+ Chaussée de Namur, 40
+ B-1367 Grand Rosières
+ Tel: +32.81.81.37.00 - Fax: +32.81.73.35.01
+ E-mail : ale@openerp.com
+ Web: http://www.openerp.com

+
+
+
+ --
+ INZO services Sent by OpenERP + S.A. using OpenERP. + Access your messages and documents in + + OpenERP
+
-- 
+Christine Herrmann 
+
+OpenERP 
+Chaussée de Namur, 40 
+B-1367 Grand Rosières 
+Tel: +32.81.81.37.00 - Fax: +32.81.73.35.01 
+
+Web: http://www.openerp.com 
+
+
+
+
+
+
+ +
""" + +BUG_2_IN = [ + 'read more', + '...', +] +BUG_2_OUT = [ + 'Fwd: TR: OpenERP S.A' + 'fait un mois' +] diff --git a/openerp/tools/mail.py b/openerp/tools/mail.py index 16d7006d209..2192df235a4 100644 --- a/openerp/tools/mail.py +++ b/openerp/tools/mail.py @@ -203,17 +203,39 @@ def html_email_clean(html, remove=False, shorten=False, max_length=300, expand_o iteration += 1 new_node = _insert_new_node(node, -1, new_node_tag, text[idx:] + (cur_node.tail or ''), None, {}) - def _truncate_node(node, position, find_first_blank=True): - # truncate text - innertext = node.text[0:position] - outertext = node.text[position:] - if find_first_blank: - stop_idx = outertext.find(' ') - if stop_idx == -1: - stop_idx = len(outertext) + def _truncate_node(node, position, simplify_whitespaces=True): + """ Truncate a node text at a given position. This algorithm will shorten + at the end of the word whose ending character exceeds position. + + :param bool simplify_whitespaces: whether to try to count all successive + whitespaces as one character. This + option should not be True when trying + to keep 'pre' consistency. + """ + if node.text is None: + node.text = '' + + truncate_idx = -1 + if simplify_whitespaces: + cur_char_nbr = 0 + word = None + node_words = node.text.strip(' \t\r\n').split() + for word in node_words: + cur_char_nbr += len(word) + if cur_char_nbr >= position: + break + if word: + truncate_idx = node.text.find(word) + len(word) else: - stop_idx = 0 - node.text = innertext + outertext[0:stop_idx] + truncate_idx = position + if truncate_idx == -1 or truncate_idx > len(node.text): + truncate_idx = len(node.text) + + # compose new text bits + innertext = node.text[0:truncate_idx] + outertext = node.text[truncate_idx:] + node.text = innertext + # create ... read more node read_more_node = _create_node( expand_options.get('oe_expand_container_tag', 'span'), @@ -240,7 +262,7 @@ def html_email_clean(html, remove=False, shorten=False, max_length=300, expand_o ) read_more_node.append(read_more_link_node) # create outertext node - overtext_node = _create_node('span', outertext[stop_idx:]) + overtext_node = _create_node('span', outertext) # tag node overtext_node.set('in_overlength', '1') # add newly created nodes in dom @@ -272,17 +294,16 @@ def html_email_clean(html, remove=False, shorten=False, max_length=300, expand_o html = '
%s
' % html root = lxml.html.fromstring(html) - # remove all tails and replace them by a span element, because managing text and tails can be a pain in the ass - for node in root.getiterator(): + quote_tags = re.compile(r'(\n(>)+[^\n\r]*)') + signature = re.compile(r'([-]{2,}[\s]?[\r\n]{1,2}[\s\S]+)') + for node in root.iter(): + # remove all tails and replace them by a span element, because managing text and tails can be a pain in the ass if node.tail: tail_node = _create_node('span', node.tail) node.tail = None node.addnext(tail_node) - # form node and tag text-based quotes and signature - quote_tags = re.compile(r'(\n(>)+[^\n\r]*)') - signature = re.compile(r'([-]{2,}[\s]?[\r\n]{1,2}[^.]+)') - for node in root.getiterator(): + # form node and tag text-based quotes and signature _tag_matching_regex_in_text(quote_tags, node, 'span', {'text_quote': '1'}) _tag_matching_regex_in_text(signature, node, 'span', {'text_signature': '1'}) @@ -296,11 +317,9 @@ def html_email_clean(html, remove=False, shorten=False, max_length=300, expand_o overlength_section_id = None overlength_section_count = 0 cur_char_nbr = 0 - # for node in root.getiterator(): for node in root.iter(): - # update: add a text argument - if node.text is None: - node.text = '' + # do not take into account multiple spaces that are displayed as max 1 space in html + node_text = ' '.join((node.text and node.text.strip(' \t\r\n') or '').split()) # root: try to tag the client used to write the html if 'WordSection1' in node.get('class', '') or 'MsoNormal' in node.get('class', ''): @@ -347,22 +366,22 @@ def html_email_clean(html, remove=False, shorten=False, max_length=300, expand_o # 3/ add the truncated text in a new node, next to 'read more' node node_text = (node.text or '').strip().strip('\n').strip() if shorten and not overlength and cur_char_nbr + len(node_text) > max_length: - overlength = True - if protect_sections: - node_to_truncate = node - while node_to_truncate.getparent() is not None and \ - (node_to_truncate.getparent().get('section_inner') or node_to_truncate.getparent().get('section_closure')): + node_to_truncate = node + while node_to_truncate.getparent() is not None: + if node_to_truncate.get('in_quote'): node_to_truncate = node_to_truncate.getparent() - overlength_section_id = node_to_truncate.get('section_closure') - position = len(node_to_truncate.text) - find_first_blank = False - else: - node_to_truncate = node - position = max_length - cur_char_nbr - find_first_blank = True + elif protect_sections and (node_to_truncate.getparent().get('section_inner') or node_to_truncate.getparent().get('section_closure')): + node_to_truncate = node_to_truncate.getparent() + overlength_section_id = node_to_truncate.get('section_closure') + else: + break + + overlength = True node_to_truncate.set('truncate', '1') - node_to_truncate.set('truncate_position', str(position)) - node_to_truncate.set('truncate_blank', str(find_first_blank)) + if node_to_truncate == node: + node_to_truncate.set('truncate_position', str(max_length - cur_char_nbr)) + else: + node_to_truncate.set('truncate_position', str(len(node.text or ''))) cur_char_nbr += len(node_text) # Tree modification @@ -370,7 +389,7 @@ def html_email_clean(html, remove=False, shorten=False, max_length=300, expand_o for node in root.iter(): if node.get('truncate'): - _truncate_node(node, int(node.get('truncate_position', '0')), bool(node.get('truncate_blank', 'True'))) + _truncate_node(node, int(node.get('truncate_position', '0')), node.tag != 'pre') # Post processing # ------------------------------------------------------------ @@ -385,17 +404,20 @@ def html_email_clean(html, remove=False, shorten=False, max_length=300, expand_o to_remove.append(node) if node.get('tail_remove'): node.tail = '' + # clean node + for attribute_name in ['in_quote', 'tail_remove', 'in_overlength', 'msoffice', 'hotmail', 'truncate', 'truncate_position']: + node.attrib.pop(attribute_name, None) for node in to_remove: if remove: node.getparent().remove(node) else: if not expand_options.get('oe_expand_a_class', 'oe_mail_expand') in node.get('class', ''): # trick: read more link should be displayed even if it's in overlength - node_class = node.get('class', '') + ' ' + 'oe_mail_cleaned' + node_class = node.get('class', '') + ' oe_mail_cleaned' node.set('class', node_class) # html: \n that were tail of elements have been encapsulated into -> back to \n html = etree.tostring(root, pretty_print=False) - linebreaks = re.compile(r'([\s]*[\r\n]+[\s]*)<\/span>', re.IGNORECASE | re.DOTALL) + linebreaks = re.compile(r']*>([\s]*[\r\n]+[\s]*)<\/span>', re.IGNORECASE | re.DOTALL) html = _replace_matching_regex(linebreaks, html, '\n') return html