From 8f174e13bdb603065978419b67c32370ba1c3ea9 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Fri, 4 Apr 2014 07:07:59 +0000 Subject: [PATCH 1/9] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20140404070722-99m3lomg172fzapc bzr revid: launchpad_translations_on_behalf_of_openerp-20140404070759-302tyo6k09v8arhz --- addons/account_asset/i18n/sv.po | 30 +++++-- addons/delivery/i18n/sv.po | 54 +++++++++--- addons/hr/i18n/sv.po | 8 +- addons/hr_attendance/i18n/sv.po | 31 ++++--- addons/hr_expense/i18n/sv.po | 47 ++++++---- addons/hr_holidays/i18n/sv.po | 112 +++++++++++++++--------- addons/hr_payroll/i18n/sv.po | 60 ++++++++----- addons/mail/i18n/sv.po | 61 ++++++++----- addons/sale/i18n/sv.po | 124 ++++++++++++++++++++++++--- addons/stock/i18n/zh_TW.po | 12 +-- openerp/addons/base/i18n/ab.po | 4 +- openerp/addons/base/i18n/af.po | 4 +- openerp/addons/base/i18n/am.po | 4 +- openerp/addons/base/i18n/ar.po | 4 +- openerp/addons/base/i18n/bg.po | 4 +- openerp/addons/base/i18n/bn.po | 4 +- openerp/addons/base/i18n/bs.po | 6 +- openerp/addons/base/i18n/ca.po | 4 +- openerp/addons/base/i18n/cs.po | 4 +- openerp/addons/base/i18n/da.po | 4 +- openerp/addons/base/i18n/de.po | 4 +- openerp/addons/base/i18n/el.po | 4 +- openerp/addons/base/i18n/en_GB.po | 4 +- openerp/addons/base/i18n/es.po | 4 +- openerp/addons/base/i18n/es_AR.po | 4 +- openerp/addons/base/i18n/es_BO.po | 4 +- openerp/addons/base/i18n/es_CL.po | 4 +- openerp/addons/base/i18n/es_CR.po | 4 +- openerp/addons/base/i18n/es_DO.po | 4 +- openerp/addons/base/i18n/es_EC.po | 4 +- openerp/addons/base/i18n/es_MX.po | 7 +- openerp/addons/base/i18n/es_PE.po | 6 +- openerp/addons/base/i18n/es_VE.po | 4 +- openerp/addons/base/i18n/et.po | 6 +- openerp/addons/base/i18n/eu.po | 4 +- openerp/addons/base/i18n/fa.po | 4 +- openerp/addons/base/i18n/fa_AF.po | 4 +- openerp/addons/base/i18n/fi.po | 4 +- openerp/addons/base/i18n/fr.po | 4 +- openerp/addons/base/i18n/fr_CA.po | 6 +- openerp/addons/base/i18n/gl.po | 4 +- openerp/addons/base/i18n/gu.po | 4 +- openerp/addons/base/i18n/he.po | 4 +- openerp/addons/base/i18n/hi.po | 4 +- openerp/addons/base/i18n/hr.po | 4 +- openerp/addons/base/i18n/hu.po | 40 ++++----- openerp/addons/base/i18n/hy.po | 4 +- openerp/addons/base/i18n/id.po | 4 +- openerp/addons/base/i18n/is.po | 4 +- openerp/addons/base/i18n/it.po | 6 +- openerp/addons/base/i18n/ja.po | 4 +- openerp/addons/base/i18n/ka.po | 4 +- openerp/addons/base/i18n/kk.po | 4 +- openerp/addons/base/i18n/ko.po | 4 +- openerp/addons/base/i18n/lt.po | 4 +- openerp/addons/base/i18n/lv.po | 4 +- openerp/addons/base/i18n/mk.po | 4 +- openerp/addons/base/i18n/mn.po | 4 +- openerp/addons/base/i18n/nb.po | 4 +- openerp/addons/base/i18n/nl.po | 4 +- openerp/addons/base/i18n/nl_BE.po | 4 +- openerp/addons/base/i18n/pl.po | 4 +- openerp/addons/base/i18n/pt.po | 4 +- openerp/addons/base/i18n/pt_BR.po | 4 +- openerp/addons/base/i18n/ro.po | 4 +- openerp/addons/base/i18n/ru.po | 4 +- openerp/addons/base/i18n/sk.po | 4 +- openerp/addons/base/i18n/sl.po | 4 +- openerp/addons/base/i18n/sq.po | 4 +- openerp/addons/base/i18n/sr.po | 4 +- openerp/addons/base/i18n/sr@latin.po | 4 +- openerp/addons/base/i18n/sv.po | 4 +- openerp/addons/base/i18n/th.po | 4 +- openerp/addons/base/i18n/tlh.po | 4 +- openerp/addons/base/i18n/tr.po | 4 +- openerp/addons/base/i18n/uk.po | 4 +- openerp/addons/base/i18n/ur.po | 4 +- openerp/addons/base/i18n/vi.po | 4 +- openerp/addons/base/i18n/zh_CN.po | 4 +- openerp/addons/base/i18n/zh_HK.po | 4 +- openerp/addons/base/i18n/zh_TW.po | 4 +- 81 files changed, 546 insertions(+), 326 deletions(-) diff --git a/addons/account_asset/i18n/sv.po b/addons/account_asset/i18n/sv.po index e95872c9ff0..83e412a1d42 100644 --- a/addons/account_asset/i18n/sv.po +++ b/addons/account_asset/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-27 12:09+0000\n" +"PO-Revision-Date: 2014-04-03 22:23+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-28 06:44+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: account_asset #: view:account.asset.asset:0 @@ -440,12 +440,17 @@ msgid "" "You can manually close an asset when the depreciation is over. If the last " "line of depreciation is posted, the asset automatically goes in that status." msgstr "" +"När en inventarie har skapats, är statusen \"Utkast\".\n" +"Om inventarien är bekräftad, går status i \"Aktiv\" och avskrivningslraderna " +"kan postas i redovisningen.\n" +"Du kan stänga manuellt en inventarie när avskrivningen är över. Om den sista " +"raden i avskrivning postas, går tillgången automatiskt i denna status." #. module: account_asset #: field:account.asset.asset,state:0 #: field:asset.asset.report,state:0 msgid "Status" -msgstr "" +msgstr "Status" #. module: account_asset #: field:account.asset.asset,partner_id:0 @@ -492,7 +497,7 @@ msgstr "Beräkna" #. module: account_asset #: view:account.asset.history:0 msgid "Asset History" -msgstr "" +msgstr "Inventariehistorik" #. module: account_asset #: model:ir.model,name:account_asset.model_asset_depreciation_confirmation_wizard @@ -605,6 +610,7 @@ msgstr "Aktuellt" #, python-format msgid "You cannot delete an asset that contains posted depreciation lines." msgstr "" +"Du kan inte ta bort en inventarie som innehåller bokförda avskrivningsrader." #. module: account_asset #: view:account.asset.category:0 @@ -614,12 +620,12 @@ msgstr "Avskrivningsmetod" #. module: account_asset #: field:account.asset.depreciation.line,amount:0 msgid "Current Depreciation" -msgstr "" +msgstr "Aktuell avskrivningsgrad" #. module: account_asset #: field:account.asset.asset,name:0 msgid "Asset Name" -msgstr "" +msgstr "Inventarienamn" #. module: account_asset #: field:account.asset.category,open_asset:0 @@ -679,6 +685,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Ur denna rapport kan du få en överblick på alla avskrivningar. " +"Den\n" +" verktygsökning kan också användas för att anpassa dina " +"inventarierapporter och\n" +" så, matcha denna analys till dina behov;\n" +" \n" +" " #. module: account_asset #: field:account.asset.asset,purchase_value:0 @@ -736,7 +750,7 @@ msgstr "" #. module: account_asset #: field:account.asset.depreciation.line,sequence:0 msgid "Sequence" -msgstr "" +msgstr "Nummerserie" #. module: account_asset #: help:account.asset.category,method_period:0 diff --git a/addons/delivery/i18n/sv.po b/addons/delivery/i18n/sv.po index 9067f5ea56c..36bc1f25b67 100644 --- a/addons/delivery/i18n/sv.po +++ b/addons/delivery/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-31 16:57+0000\n" +"PO-Revision-Date: 2014-04-03 10:23+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-01 06:52+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: delivery #: report:sale.shipping:0 @@ -30,7 +30,7 @@ msgstr "Leverans per post" #. module: delivery #: view:delivery.grid.line:0 msgid " in Function of " -msgstr "" +msgstr " är en funktion av " #. module: delivery #: view:delivery.carrier:0 @@ -93,6 +93,8 @@ msgstr "Utgående Leverans" #, python-format msgid "No line matched this product or order in the chosen delivery grid." msgstr "" +"Ingen rad matchade denna produkt eller order inom det valda " +"leveranskombinationen." #. module: delivery #: model:ir.actions.act_window,name:delivery.action_picking_tree4 @@ -132,6 +134,19 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klicka för att skapa en leveransprislista för en viss " +"region.\n" +"

\n" +" Med leveransprislistan kan du beräkna kostnaden och\n" +" försäljningspriset för leveransen baserat på produkternas " +"vikt\n" +" och andra kriterier. Du kan definiera flera prislistor\n" +" för varje leveransmetod: per land eller ett område i ett " +"visst\n" +" land som definieras av ett postnummerområde.\n" +"

\n" +" " #. module: delivery #: report:sale.shipping:0 @@ -151,7 +166,7 @@ msgstr "Mängd" #. module: delivery #: view:sale.order:0 msgid "Add in Quote" -msgstr "" +msgstr "Lägg till på offert" #. module: delivery #: selection:delivery.grid.line,price_type:0 @@ -232,6 +247,8 @@ msgid "" "If you don't 'Add in Quote', the exact price will be computed when invoicing " "based on delivery order(s)." msgstr "" +"Om du inte \"Lägg i offert\", kommer det exakta priset beräknas vid " +"fakturering baserad på leveransordern." #. module: delivery #: field:delivery.carrier,partner_id:0 @@ -276,7 +293,7 @@ msgstr "Beloppsgräns för fri frakt i företagets valuta" #. module: delivery #: field:delivery.carrier,free_if_more_than:0 msgid "Free If Order Total Amount Is More Than" -msgstr "" +msgstr "Fritt vid ordertotal över" #. module: delivery #: field:delivery.grid.line,grid_id:0 @@ -432,6 +449,21 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klicka för att definiera en ny leveransmetod.\n" +"

\n" +" Varje transportör (t.ex. UPS) kan ha flera leveransmetoder " +"(t.ex.\n" +" UPS Express, UPS Standard) med en uppsättning av " +"prissättningsregler knuten\n" +" till varje metod.\n" +"

\n" +" Dessa metoder gör det möjligt att automatiskt beräkna " +"leveranspriset\n" +" enligt dina inställningar; på kundordern (baserat på\n" +" offert) eller faktura (baserat på leveransorder).\n" +"

\n" +" " #. module: delivery #: field:delivery.grid.line,max_value:0 @@ -465,7 +497,7 @@ msgstr "Fritt om det överstiger %.2f" #. module: delivery #: model:ir.model,name:delivery.model_stock_picking_in msgid "Incoming Shipments" -msgstr "" +msgstr "Inkommande leveranser" #. module: delivery #: selection:delivery.grid.line,operator:0 @@ -475,7 +507,7 @@ msgstr "<=" #. module: delivery #: help:stock.picking,weight_uom_id:0 msgid "Unit of measurement for Weight" -msgstr "" +msgstr "Viktsenhet" #. module: delivery #: report:sale.shipping:0 @@ -550,7 +582,7 @@ msgstr "Speditör" #: model:ir.actions.act_window,name:delivery.action_delivery_carrier_form #: model:ir.ui.menu,name:delivery.menu_action_delivery_carrier_form msgid "Delivery Methods" -msgstr "" +msgstr "Leveransmetoder" #. module: delivery #: code:addons/delivery/sale.py:57 @@ -577,7 +609,7 @@ msgstr "Försäljningspris" #. module: delivery #: view:stock.picking.out:0 msgid "Print Delivery Order" -msgstr "" +msgstr "Skriv ut leveransorder" #. module: delivery #: view:delivery.grid:0 @@ -589,7 +621,7 @@ msgstr "Tillstånd" #: help:stock.move,weight_uom_id:0 msgid "" "Unit of Measure (Unit of Measure) is the unit of measurement for Weight" -msgstr "" +msgstr "Enhet är måttenheten för vikt" #. module: delivery #: field:delivery.grid.line,price_type:0 diff --git a/addons/hr/i18n/sv.po b/addons/hr/i18n/sv.po index 2f08a0c9526..baa00de4231 100644 --- a/addons/hr/i18n/sv.po +++ b/addons/hr/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-04-02 13:01+0000\n" +"PO-Revision-Date: 2014-04-04 06:48+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-03 06:01+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr #: model:process.node,name:hr.process_node_openerpuser0 @@ -169,7 +169,7 @@ msgstr "Född" #: model:ir.actions.act_window,name:hr.open_view_categ_form #: model:ir.ui.menu,name:hr.menu_view_employee_category_form msgid "Employee Tags" -msgstr "Etiketter på anställda" +msgstr "Medarbetaretiketter" #. module: hr #: view:hr.job:0 diff --git a/addons/hr_attendance/i18n/sv.po b/addons/hr_attendance/i18n/sv.po index 5dd39961d5a..3d4c87f2592 100644 --- a/addons/hr_attendance/i18n/sv.po +++ b/addons/hr_attendance/i18n/sv.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:37+0000\n" -"PO-Revision-Date: 2014-03-19 07:45+0000\n" +"PO-Revision-Date: 2014-04-04 06:54+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-20 06:19+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_attendance #: model:ir.model,name:hr_attendance.model_hr_attendance_month msgid "Print Monthly Attendance Report" -msgstr "Skriv månatlig närvarorapport" +msgstr "" #. module: hr_attendance #: view:hr.attendance:0 @@ -37,7 +37,7 @@ msgstr "Senaste stämpling" #: field:hr.employee,state:0 #: model:ir.model,name:hr_attendance.model_hr_attendance msgid "Attendance" -msgstr "Närvarande" +msgstr "Närvaro" #. module: hr_attendance #. openerp-web @@ -56,14 +56,15 @@ msgstr "" #. module: hr_attendance #: help:hr.action.reason,name:0 msgid "Specifies the reason for Signing In/Signing Out." -msgstr "Ange in/utloggningsorsak" +msgstr "Ange in/utstämplingsorsak" #. module: hr_attendance #: report:report.hr.timesheet.attendance.error:0 msgid "" "(*) A positive delay means that the employee worked less than recorded." msgstr "" -"(*) A positive delay means that the employee worked less than recorded." +"(*) Ett positiv uppehåll innebär att den anställde arbetat mindre än " +"registrerat." #. module: hr_attendance #: view:hr.attendance.month:0 @@ -127,7 +128,7 @@ msgstr "Utskrift" #: field:hr.attendance,employee_id:0 #: model:ir.model,name:hr_attendance.model_hr_employee msgid "Employee" -msgstr "Anställd" +msgstr "Medarbetare" #. module: hr_attendance #: field:hr.attendance.month,month:0 @@ -179,7 +180,7 @@ msgstr "Varning" #. module: hr_attendance #: help:hr.config.settings,group_hr_attendance:0 msgid "Allocates attendance group to all users." -msgstr "" +msgstr "Tilldela närvarogrupp till alla användare." #. module: hr_attendance #: view:hr.attendance:0 @@ -220,7 +221,7 @@ msgstr "Anledning" #. module: hr_attendance #: view:hr.attendance.error:0 msgid "Print Attendance Report Error" -msgstr "Skrivut delatagarrapportfel" +msgstr "Skriv ut närvarorapportfel" #. module: hr_attendance #: model:ir.actions.act_window,help:hr_attendance.open_view_attendance @@ -251,7 +252,7 @@ msgstr "Datum" #. module: hr_attendance #: field:hr.config.settings,group_hr_attendance:0 msgid "Track attendances for all employees" -msgstr "" +msgstr "Följ upp närvaro för alla anställda" #. module: hr_attendance #: selection:hr.attendance.month,month:0 @@ -309,7 +310,7 @@ msgstr "Anställds närvaro" #. module: hr_attendance #: view:hr.action.reason:0 msgid "Define attendance reason" -msgstr "Define attendance reason" +msgstr "Defniera frånvarorsak" #. module: hr_attendance #: selection:hr.action.reason,action_type:0 @@ -367,7 +368,7 @@ msgstr "Tidrapporter" #: model:ir.actions.act_window,name:hr_attendance.open_view_attendance_reason #: model:ir.ui.menu,name:hr_attendance.menu_open_view_attendance_reason msgid "Attendance Reasons" -msgstr "Närvaro Orsaker" +msgstr "Frånvaroorsaker" #. module: hr_attendance #: selection:hr.attendance.month,month:0 @@ -398,7 +399,7 @@ msgstr "september" #. module: hr_attendance #: view:hr.action.reason:0 msgid "Attendance reasons" -msgstr "Närvaro orsaker" +msgstr "Frånvaroorsaker" #. module: hr_attendance #: model:ir.model,name:hr_attendance.model_hr_attendance_week @@ -434,6 +435,8 @@ msgid "" "You tried to %s with a date anterior to another event !\n" "Try to contact the HR Manager to correct attendances." msgstr "" +"Du försökte %s med ett datum som föregår en annan händelse!\n" +"Försök att kontakta personalansvarig för att korrigera närvaro." #. module: hr_attendance #: selection:hr.attendance.month,month:0 diff --git a/addons/hr_expense/i18n/sv.po b/addons/hr_expense/i18n/sv.po index 8e6353ba5f3..c3647221266 100644 --- a/addons/hr_expense/i18n/sv.po +++ b/addons/hr_expense/i18n/sv.po @@ -8,20 +8,20 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-31 17:01+0000\n" +"PO-Revision-Date: 2014-04-04 06:12+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-01 06:52+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_expense #: view:hr.expense.expense:0 #: model:process.node,name:hr_expense.process_node_confirmedexpenses0 msgid "Confirmed Expenses" -msgstr "Bekräftade utgifter" +msgstr "Bekräftade utlägg" #. module: hr_expense #: code:addons/hr_expense/hr_expense.py:349 @@ -181,7 +181,7 @@ msgstr "Produkter" #. module: hr_expense #: view:hr.expense.report:0 msgid "Confirm Expenses" -msgstr "Bekräfta utgifter" +msgstr "Bekräfta utlägg" #. module: hr_expense #: selection:hr.expense.report,state:0 @@ -266,7 +266,7 @@ msgstr "Totalt:" #. module: hr_expense #: model:process.transition,name:hr_expense.process_transition_refuseexpense0 msgid "Refuse expense" -msgstr "Avslagna utgifter" +msgstr "Avslagna utlägg" #. module: hr_expense #: field:hr.expense.report,price_average:0 @@ -340,7 +340,7 @@ msgstr "Följare" #: field:hr.expense.expense,employee_id:0 #: view:hr.expense.report:0 msgid "Employee" -msgstr "Anställd" +msgstr "Medarbetare" #. module: hr_expense #: view:hr.expense.expense:0 @@ -369,7 +369,7 @@ msgstr "Vissa kostnader kan faktureras kunden" #: code:addons/hr_expense/hr_expense.py:238 #, python-format msgid "The employee must have a home address." -msgstr "" +msgstr "Medarbetaren måste ha en hemadress" #. module: hr_expense #: view:board.board:0 @@ -386,7 +386,7 @@ msgstr "Skapad datum" #. module: hr_expense #: model:ir.actions.report.xml,name:hr_expense.hr_expenses msgid "HR expenses" -msgstr "Personalutgifter" +msgstr "Personalutlägg" #. module: hr_expense #: field:hr.expense.expense,id:0 @@ -447,7 +447,7 @@ msgstr "" #: code:addons/hr_expense/hr_expense.py:240 #, python-format msgid "The employee must have a payable account set on his home address." -msgstr "" +msgstr "Den anställde måste ha ett utgiftskonto anslutet till sin hemadress" #. module: hr_expense #: view:hr.expense.report:0 @@ -502,7 +502,7 @@ msgstr "Valuta" #. module: hr_expense #: field:hr.expense.expense,voucher_id:0 msgid "Employee's Receipt" -msgstr "" +msgstr "Medarbetarkvitto" #. module: hr_expense #: selection:hr.expense.expense,state:0 @@ -512,7 +512,7 @@ msgstr "Väntar på godkännande" #. module: hr_expense #: model:process.node,note:hr_expense.process_node_draftexpenses0 msgid "Employee encode all his expenses" -msgstr "Anställd koda alla hans utgifter" +msgstr "Medarbetare kodifierar alla sina utgifter" #. module: hr_expense #: view:hr.expense.expense:0 @@ -648,6 +648,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klicka för att registrera nya utgifter.\n" +"

\n" +" OpenERP kommer att se till att hela processen följs; " +"bekostnad\n" +" Bladet är validerat av chef (s), har arbetstagaren " +"ersättning\n" +" utlägg sina utlägg, vissa utlägg måste återfaktureras\n" +" kunder.\n" +"

\n" +" " #. module: hr_expense #: view:hr.expense.expense:0 @@ -677,7 +688,7 @@ msgstr "" #. module: hr_expense #: model:product.template,name:hr_expense.car_travel_product_template msgid "Car Travel Expenses" -msgstr "Utgifter resor med bil" +msgstr "Bilutlägg" #. module: hr_expense #: view:hr.expense.expense:0 @@ -692,12 +703,12 @@ msgstr "" #. module: hr_expense #: model:process.node,note:hr_expense.process_node_confirmedexpenses0 msgid "The employee validates his expense sheet" -msgstr "Den anställde bekräftar sin kostnadsblankett" +msgstr "Medarbetaren granskar sin utläggsansökan" #. module: hr_expense #: view:hr.expense.expense:0 msgid "Expenses to Invoice" -msgstr "Utgifter att fakturera" +msgstr "Utlägg att fakturera" #. module: hr_expense #: model:process.node,name:hr_expense.process_node_supplierinvoice0 @@ -718,7 +729,7 @@ msgstr "" #. module: hr_expense #: view:hr.expense.report:0 msgid "Approved Expenses" -msgstr "Godkända utgifter" +msgstr "Godkända utlägg" #. module: hr_expense #: report:hr.expense:0 @@ -883,7 +894,7 @@ msgstr "Ref." #. module: hr_expense #: field:hr.expense.report,employee_id:0 msgid "Employee's Name" -msgstr "Anställds namn" +msgstr "Medarbetarens namn" #. module: hr_expense #: view:hr.expense.report:0 @@ -964,7 +975,7 @@ msgstr "Utlägg godkänt" #: model:ir.ui.menu,name:hr_expense.next_id_49 #: model:product.category,name:hr_expense.cat_expense msgid "Expenses" -msgstr "Utgifter" +msgstr "Utlägg" #. module: hr_expense #: help:product.product,hr_expense_ok:0 diff --git a/addons/hr_holidays/i18n/sv.po b/addons/hr_holidays/i18n/sv.po index 3bf5378ef53..6bbc5a77e5b 100644 --- a/addons/hr_holidays/i18n/sv.po +++ b/addons/hr_holidays/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-31 17:00+0000\n" +"PO-Revision-Date: 2014-04-03 07:21+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-01 06:52+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -39,6 +39,8 @@ msgid "" "You cannot modify a leave request that has been approved. Contact a human " "resource manager." msgstr "" +"Du kan inte ändra ett redan godkänt frånvaroönskemål. Kontakta " +"personalansvarig." #. module: hr_holidays #: help:hr.holidays.status,remaining_leaves:0 @@ -75,7 +77,7 @@ msgstr "Avdelning" #: model:ir.actions.act_window,name:hr_holidays.request_approve_allocation #: model:ir.ui.menu,name:hr_holidays.menu_request_approve_allocation msgid "Allocation Requests to Approve" -msgstr "" +msgstr "Frånvaroönskemål att godkänna" #. module: hr_holidays #: help:hr.holidays,category_id:0 @@ -112,12 +114,12 @@ msgstr "" #. module: hr_holidays #: model:mail.message.subtype,description:hr_holidays.mt_holidays_refused msgid "Request refused" -msgstr "" +msgstr "Önskemål tillbakavisat" #. module: hr_holidays #: field:hr.holidays,number_of_days_temp:0 msgid "Allocation" -msgstr "Allokering" +msgstr "Tilldelning" #. module: hr_holidays #: xsl:holidays.summary:0 @@ -132,7 +134,7 @@ msgstr "Ljus cyan" #. module: hr_holidays #: constraint:hr.holidays:0 msgid "You can not have 2 leaves that overlaps on same day!" -msgstr "" +msgstr "Du kan inte ha två ledigheter som överlappar samma dag!" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -233,7 +235,7 @@ msgstr "Granskning" #. module: hr_holidays #: help:hr.holidays,message_unread:0 msgid "If checked new messages require your attention." -msgstr "" +msgstr "Om ikryssad nya meddelanden som kräver din uppmärksamhet" #. module: hr_holidays #: field:hr.holidays.status,color_name:0 @@ -263,6 +265,8 @@ msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." msgstr "" +"Lagrar pladder-sammanfattning (antal meddelanden, ...). Denna sammanfattning " +"presenteras i html-format för att kunna sättas in i kanban vyer." #. module: hr_holidays #: code:addons/hr_holidays/hr_holidays.py:249 @@ -283,12 +287,12 @@ msgstr "Magenta" #. module: hr_holidays #: model:ir.actions.act_window,name:hr_holidays.act_hr_leave_request_to_meeting msgid "Leave Meetings" -msgstr "" +msgstr "Frånvaromöten" #. module: hr_holidays #: model:hr.holidays.status,name:hr_holidays.holiday_status_cl msgid "Legal Leaves 2013" -msgstr "" +msgstr "Lagstadgad ledighet 2013" #. module: hr_holidays #: selection:hr.holidays.summary.dept,holiday_type:0 @@ -322,7 +326,7 @@ msgstr "Summa" #: view:hr.holidays.status:0 #: model:ir.actions.act_window,name:hr_holidays.open_view_holiday_status msgid "Leave Types" -msgstr "" +msgstr "Frånvarotyper" #. module: hr_holidays #: field:hr.holidays.status,remaining_leaves:0 @@ -332,7 +336,7 @@ msgstr "Återstående ledighet" #. module: hr_holidays #: field:hr.holidays,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Följare" #. module: hr_holidays #: model:ir.model,name:hr_holidays.model_hr_holidays_remaining_leaves_user @@ -395,6 +399,10 @@ msgid "" " \n" "The status is 'Approved', when holiday request is approved by manager." msgstr "" +"Statusen är satt till \"att skicka in\", när en semesterbegäran skapas.\n" +"Statusen är \"godkännd\", när semesterbegäran bekräftas av användaren.\n" +"Statusen \"Avvisad\", när semestern begäran avslås av chef.\n" +"Statusen \"Godkänd\", när semestern ansökan godkänns av chef." #. module: hr_holidays #: view:hr.holidays:0 @@ -417,10 +425,10 @@ msgstr "" "Funktionen bakom fältet 'Kvarvarande Semester' kan endast användas när det " "bara finns en ledighetstyp med alternativet 'Tillåt att överskrida gränsen' " "ej är markerad. (%s hittades). Annars är uppdateringen tvetydig eftersom vi " -"inte kan besluta om vilken ledighetstyp uppdateringen måste göras för.\n" -"Du kanske föredrar att använda de vanliga menyerna 'Ledighetsbegäran' och " +"inte kan besluta om vilken ledighetstyp uppdateringen måste göras för. \n" +"Du kanske föredrar att använda de klassiska menyer 'Ledighetsbegäran' och " "'Tilldela Ledighet' som ligger i 'Personal \\ Frånvaro' för att hantera " -"semesterdagar för de anställda, om konfigurationen inte tillåter att använda " +"semesterdagar för de anställda om konfigurationen inte tillåter att använda " "detta fält." #. module: hr_holidays @@ -436,7 +444,7 @@ msgstr "Väntar på godkännande" #. module: hr_holidays #: field:hr.holidays,category_id:0 msgid "Employee Tag" -msgstr "" +msgstr "Anställds etikett" #. module: hr_holidays #: field:hr.holidays.summary.employee,emp:0 @@ -460,6 +468,13 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Du kan tilldela återstående lagstadgad ledighetför varje " +"anställd, OpenERP\n" +" kommer automatiskt att skapa och validera " +"ledighetsförfrågningar.\n" +"

\n" +" " #. module: hr_holidays #: help:hr.holidays.status,categ_id:0 @@ -472,7 +487,7 @@ msgstr "" #: code:addons/hr_holidays/wizard/hr_holidays_summary_department.py:44 #, python-format msgid "You have to select at least one Department. And try again." -msgstr "" +msgstr "Åtminstonde en avdelning måste vara vald, försök igen." #. module: hr_holidays #: field:hr.holidays,parent_id:0 @@ -492,7 +507,7 @@ msgstr "Månad" #. module: hr_holidays #: field:hr.holidays,message_unread:0 msgid "Unread Messages" -msgstr "" +msgstr "Olästa meddelanden" #. module: hr_holidays #: view:hr.holidays:0 @@ -524,7 +539,7 @@ msgstr "" #: view:hr.holidays.summary.dept:0 #: view:hr.holidays.summary.employee:0 msgid "or" -msgstr "" +msgstr "eller" #. module: hr_holidays #: model:ir.actions.act_window,help:hr_holidays.open_ask_holidays @@ -539,6 +554,16 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klicka för att skapa en ny ledighetsbegäran.\n" +"

\n" +" När du har spelat in din ledighetsförfrågan, skickas det\n" +" till en chef för validering. Se till att ställa rätt " +"frånvarotyp\n" +" typ (återhämtning, helgdagar, sjukdom) och den exakta\n" +" antal öppna dagar relaterade till din frånvaro.\n" +"

\n" +" " #. module: hr_holidays #: view:hr.holidays:0 @@ -565,7 +590,7 @@ msgstr "" #. module: hr_holidays #: view:hr.holidays:0 msgid "Reset to New" -msgstr "" +msgstr "Återställ till ny" #. module: hr_holidays #: sql_constraint:hr.holidays:0 @@ -580,7 +605,7 @@ msgstr "Ljus Coral" #. module: hr_holidays #: field:hr.employee,leave_date_to:0 msgid "To Date" -msgstr "" +msgstr "Till datum" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -595,7 +620,7 @@ msgstr "Tilldela ledighet för personal" #. module: hr_holidays #: model:ir.ui.menu,name:hr_holidays.menu_open_view_holiday_status msgid "Leaves Types" -msgstr "" +msgstr "Frånvarotyp" #. module: hr_holidays #: field:hr.holidays,meeting_id:0 @@ -613,7 +638,7 @@ msgstr "" #: view:hr.holidays:0 #: field:hr.holidays,state:0 msgid "Status" -msgstr "" +msgstr "Status" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -638,7 +663,7 @@ msgstr "Ledigheten redan förbrukad" #. module: hr_holidays #: field:hr.holidays,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Är en följare" #. module: hr_holidays #: field:hr.holidays,user_id:0 @@ -661,7 +686,7 @@ msgstr "" #. module: hr_holidays #: view:hr.holidays:0 msgid "Add a reason..." -msgstr "" +msgstr "Lägg till orsak..." #. module: hr_holidays #: field:hr.holidays,manager_id:0 @@ -671,7 +696,7 @@ msgstr "Första godkännande" #. module: hr_holidays #: field:hr.holidays,message_summary:0 msgid "Summary" -msgstr "" +msgstr "Sammandrag" #. module: hr_holidays #: model:hr.holidays.status,name:hr_holidays.holiday_status_unpaid @@ -692,7 +717,7 @@ msgstr "Ledighetssummering" #. module: hr_holidays #: view:hr.holidays:0 msgid "Submit to Manager" -msgstr "" +msgstr "Skicka till chef" #. module: hr_holidays #: view:hr.employee:0 @@ -775,7 +800,7 @@ msgstr "" #: view:hr.holidays:0 #: selection:hr.holidays,type:0 msgid "Allocation Request" -msgstr "Ledighetstilldelning" +msgstr "Ledighetsönskemål" #. module: hr_holidays #: help:hr.holidays,holiday_type:0 @@ -799,7 +824,7 @@ msgstr "Applicera Dubbel validering" #: view:hr.employee:0 #: view:hr.holidays:0 msgid "days" -msgstr "" +msgstr "dagar" #. module: hr_holidays #: view:hr.holidays.summary.dept:0 @@ -827,7 +852,7 @@ msgstr "Avdelning(ar)" #. module: hr_holidays #: selection:hr.holidays,state:0 msgid "To Submit" -msgstr "" +msgstr "Att skicka" #. module: hr_holidays #: code:addons/hr_holidays/hr_holidays.py:354 @@ -853,7 +878,7 @@ msgstr "Återstående Semester" #. module: hr_holidays #: selection:hr.holidays,holiday_type:0 msgid "By Employee Tag" -msgstr "" +msgstr "Per anställdsetikett" #. module: hr_holidays #: selection:hr.employee,current_leave_state:0 @@ -865,7 +890,7 @@ msgstr "Nekad" #. module: hr_holidays #: field:hr.holidays.status,categ_id:0 msgid "Meeting Type" -msgstr "" +msgstr "Mötestyp" #. module: hr_holidays #: field:hr.holidays.remaining.leaves.user,no_of_leaves:0 @@ -875,7 +900,7 @@ msgstr "Återstående ledighet" #. module: hr_holidays #: view:hr.holidays:0 msgid "Allocated Days" -msgstr "" +msgstr "Dagar med frånvaro" #. module: hr_holidays #: view:hr.holidays:0 @@ -924,13 +949,13 @@ msgstr "Läge" #: selection:hr.holidays.summary.dept,holiday_type:0 #: selection:hr.holidays.summary.employee,holiday_type:0 msgid "Both Approved and Confirmed" -msgstr "" +msgstr "Både godkända och bekräftade" #. module: hr_holidays #: code:addons/hr_holidays/hr_holidays.py:451 #, python-format msgid "Request approved, waiting second validation." -msgstr "" +msgstr "Förfrågan godkänd, väntar sekundär validering." #. module: hr_holidays #: view:hr.holidays:0 @@ -940,7 +965,7 @@ msgstr "Godkänn" #. module: hr_holidays #: help:hr.holidays,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "Meddelande- och kommunikationshistorik" #. module: hr_holidays #: code:addons/hr_holidays/hr_holidays.py:260 @@ -948,7 +973,7 @@ msgstr "" #: sql_constraint:hr.holidays:0 #, python-format msgid "The start date must be anterior to the end date." -msgstr "" +msgstr "Startdatum måste föregå slutdatum." #. module: hr_holidays #: xsl:holidays.summary:0 @@ -967,7 +992,7 @@ msgstr "" #: model:ir.actions.act_window,name:hr_holidays.open_allocation_holidays #: model:ir.ui.menu,name:hr_holidays.menu_open_allocation_holidays msgid "Allocation Requests" -msgstr "Ledighetstilldening" +msgstr "Ledighetsönskemål" #. module: hr_holidays #: xsl:holidays.summary:0 @@ -981,6 +1006,9 @@ msgid "" "to create allocation/leave request. Total based on all the leave types " "without overriding limit." msgstr "" +"Totalt antal lagstadgad ledighet för den anställde, ändra detta värde för " +"att skapa frånvaro / ledighetsbegäran. Totalt baserat på alla frånvarotyper " +"utan tvingande gräns." #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -990,7 +1018,7 @@ msgstr "Ljusrosa" #. module: hr_holidays #: xsl:holidays.summary:0 msgid "leaves." -msgstr "" +msgstr "Frånvaro" #. module: hr_holidays #: view:hr.holidays:0 @@ -1010,7 +1038,7 @@ msgstr "År" #. module: hr_holidays #: view:hr.holidays:0 msgid "Duration" -msgstr "" +msgstr "Varaktighet" #. module: hr_holidays #: view:hr.holidays:0 @@ -1022,7 +1050,7 @@ msgstr "Att godkänna" #. module: hr_holidays #: model:mail.message.subtype,description:hr_holidays.mt_holidays_approved msgid "Request approved" -msgstr "" +msgstr "Önskemål accepterat" #. module: hr_holidays #: field:hr.holidays,notes:0 @@ -1032,4 +1060,4 @@ msgstr "Anledningar" #. module: hr_holidays #: field:hr.holidays.summary.employee,holiday_type:0 msgid "Select Leave Type" -msgstr "" +msgstr "Välj frånvarotyp" diff --git a/addons/hr_payroll/i18n/sv.po b/addons/hr_payroll/i18n/sv.po index cc19058ecf4..2b10ef92876 100644 --- a/addons/hr_payroll/i18n/sv.po +++ b/addons/hr_payroll/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-03-31 16:55+0000\n" +"PO-Revision-Date: 2014-04-03 07:50+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-01 06:52+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: hr_payroll #: field:hr.payslip.line,condition_select:0 @@ -102,7 +102,7 @@ msgstr "Överordnad" #: field:hr.salary.rule,company_id:0 #: field:hr.salary.rule.category,company_id:0 msgid "Company" -msgstr "Företag" +msgstr "Bolag" #. module: hr_payroll #: view:hr.payslip:0 @@ -234,7 +234,7 @@ msgstr "Övrig information" #. module: hr_payroll #: field:hr.config.settings,module_hr_payroll_account:0 msgid "Link your payroll to accounting system" -msgstr "" +msgstr "Länka lönesystemet till bokföringen" #. module: hr_payroll #: help:hr.payslip.line,amount_select:0 @@ -313,7 +313,7 @@ msgstr "Totalt Arbetsdagar" #. module: hr_payroll #: constraint:hr.payroll.structure:0 msgid "Error ! You cannot create a recursive Salary Structure." -msgstr "" +msgstr "Fel! Du kan inte skapa rekursiva ersättningsstrukturer." #. module: hr_payroll #: help:hr.payslip.line,code:0 @@ -354,6 +354,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klicka för att lägga till ett nytt medarbetarregister.\n" +"

\n" +" Ett medarbetarregister är en tredje part inblandad i " +"ersättningssystemet\n" +" för de anställda. Det kan vara Skattemyndighet, " +"Försäkringskassan, Arbetsförmedlingen, pensionsstöd, löntagarorganisation " +"eller vilken den organisation/kassa som tillför eller drar pengar på " +"lönebeskeden.\n" +"

\n" +" " #. module: hr_payroll #: help:hr.payslip.line,condition_range_max:0 @@ -446,7 +457,7 @@ msgstr "%s (kopia)" #. module: hr_payroll #: help:hr.config.settings,module_hr_payroll_account:0 msgid "Create journal entries from payslips" -msgstr "" +msgstr "Skapa journalverifikat från lönebesked." #. module: hr_payroll #: field:hr.payslip,paid:0 @@ -456,7 +467,7 @@ msgstr "Tillverkade betalningsorder? " #. module: hr_payroll #: report:contribution.register.lines:0 msgid "PaySlip Lines by Contribution Register" -msgstr "Lönespecifikationsrader från Bidrags Register" +msgstr "Lönespecifikationsrader från medarbetarregistret" #. module: hr_payroll #: view:hr.payslip:0 @@ -494,7 +505,7 @@ msgstr "Återbetalning: " #. module: hr_payroll #: model:ir.model,name:hr_payroll.model_payslip_lines_contribution_register msgid "PaySlip Lines by Contribution Registers" -msgstr "Lönespecifikationsrader genom Bidrags Register" +msgstr "Lönespecifikationsrader via medarbetarregistret" #. module: hr_payroll #: view:hr.payslip:0 @@ -630,7 +641,7 @@ msgstr "Lönespecifikation Computation Detaljer" #: help:hr.payslip.line,appears_on_payslip:0 #: help:hr.salary.rule,appears_on_payslip:0 msgid "Used to display the salary rule on payslip." -msgstr "" +msgstr "Används för att visa löneregler på lönebeskedet." #. module: hr_payroll #: model:ir.model,name:hr_payroll.model_hr_payslip_input @@ -647,7 +658,7 @@ msgstr "Lön Rule Kategorier" #. module: hr_payroll #: view:hr.payslip:0 msgid "Cancel Payslip" -msgstr "" +msgstr "Avbryt lönebesked" #. module: hr_payroll #: help:hr.payslip.input,contract_id:0 @@ -664,7 +675,7 @@ msgstr "Beräkning" #: code:addons/hr_payroll/hr_payroll.py:899 #, python-format msgid "Wrong range condition defined for salary rule %s (%s)." -msgstr "" +msgstr "Fel omfångsvillkor definierat för löneregeln %s (%s)." #. module: hr_payroll #: help:hr.payslip.input,amount:0 @@ -694,7 +705,7 @@ msgstr "Kategori" #. module: hr_payroll #: view:hr.salary.rule:0 msgid "Company Contribution" -msgstr "" +msgstr "Bolagets bidrag" #. module: hr_payroll #: help:hr.payslip.run,credit_note:0 @@ -709,7 +720,7 @@ msgstr "" #: code:addons/hr_payroll/hr_payroll.py:876 #, python-format msgid "Wrong percentage base or quantity defined for salary rule %s (%s)." -msgstr "" +msgstr "Fel procentbas eller kvantitet definierad för löneregeln %s (%s)." #. module: hr_payroll #: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_structure_list_form @@ -767,7 +778,7 @@ msgstr "Procent (%)" #: code:addons/hr_payroll/hr_payroll.py:871 #, python-format msgid "Wrong quantity defined for salary rule %s (%s)." -msgstr "" +msgstr "Fel kvantitet definierad för löneregeln %s (%s)." #. module: hr_payroll #: view:hr.payslip:0 @@ -852,7 +863,7 @@ msgstr "Avtal" #: code:addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py:52 #, python-format msgid "You must select employee(s) to generate payslip(s)." -msgstr "" +msgstr "Du måste välja anställda för att skapa lönebesked" #. module: hr_payroll #: report:paylip.details:0 @@ -1026,7 +1037,7 @@ msgstr "hr.config.settings" #: field:hr.salary.rule,register_id:0 #: model:ir.model,name:hr_payroll.model_hr_contribution_register msgid "Contribution Register" -msgstr "Bidrags Register" +msgstr "Medarbetarregister" #. module: hr_payroll #: view:payslip.lines.contribution.register:0 @@ -1081,7 +1092,7 @@ msgstr "Totala grundlönen" #: model:ir.actions.act_window,name:hr_payroll.action_contribution_register_form #: model:ir.ui.menu,name:hr_payroll.menu_action_hr_contribution_register_form msgid "Contribution Registers" -msgstr "Bidrags Register" +msgstr "Medarbetarregister" #. module: hr_payroll #: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_reporting @@ -1093,13 +1104,14 @@ msgstr "Lön" #. module: hr_payroll #: model:ir.actions.report.xml,name:hr_payroll.contribution_register msgid "PaySlip Lines By Conribution Register" -msgstr "Lönespecifikationsrader från Bidragsregistret" +msgstr "Lönespecifikationsrader från medarbetarergistret" #. module: hr_payroll #: code:addons/hr_payroll/hr_payroll.py:370 #, python-format msgid "You cannot delete a payslip which is not draft or cancelled!" msgstr "" +"Du kan inte radera ett lönebesked som inte är i \"Utkast\" eller \"Avbruten\"" #. module: hr_payroll #: report:paylip.details:0 @@ -1171,6 +1183,10 @@ msgid "" "* If the payslip is confirmed then status is set to 'Done'. \n" "* When user cancel payslip the status is 'Rejected'." msgstr "" +"* När lönebesked skapas statusen är \"Utkast\".\n" +"* Om lönebesked är under kontroll, är statusen \"Väntar\".\n" +"* Om lönebesked bekräftas då status är inställd på \"Klar\".\n" +"* När användaren avbryter lönespecifikation statusen är \"Avvisad\"." #. module: hr_payroll #: help:hr.payslip.line,condition_range:0 @@ -1197,7 +1213,7 @@ msgstr "Lönespecifikation indata" #. module: hr_payroll #: view:hr.payslip:0 msgid "Other Inputs" -msgstr "" +msgstr "Övriga indata" #. module: hr_payroll #: model:ir.actions.act_window,name:hr_payroll.action_hr_salary_rule_category_tree_view @@ -1209,7 +1225,7 @@ msgstr "Lön Regel Kategorier Hierarki" #: code:addons/hr_payroll/hr_payroll.py:882 #, python-format msgid "Wrong python code defined for salary rule %s (%s)." -msgstr "" +msgstr "Fel i python-koden definierat för löneregeln %s (%s)." #. module: hr_payroll #: report:contribution.register.lines:0 @@ -1240,7 +1256,7 @@ msgstr "Den kod som kan användas i lön reglerna" #: code:addons/hr_payroll/hr_payroll.py:905 #, python-format msgid "Wrong python condition defined for salary rule %s (%s)." -msgstr "" +msgstr "Fel i python-villkoret definierat för löneregeln %s (%s)." #. module: hr_payroll #: view:hr.payslip.run:0 diff --git a/addons/mail/i18n/sv.po b/addons/mail/i18n/sv.po index a5add364ac0..71301cbf59f 100644 --- a/addons/mail/i18n/sv.po +++ b/addons/mail/i18n/sv.po @@ -9,14 +9,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-04-03 05:29+0000\n" +"PO-Revision-Date: 2014-04-03 10:13+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Svenska \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-03 06:02+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: mail #: view:mail.followers:0 @@ -368,6 +368,8 @@ msgid "" "Message type: email for email message, notification for system message, " "comment for other messages such as user replies" msgstr "" +"Meddelandetyp: e-post för e-postmeddelande, avisering för systemmeddelande, " +"kommentar är andra meddelanden som till exempel användarsvar" #. module: mail #: help:mail.message.subtype,relation_field:0 @@ -391,7 +393,7 @@ msgstr "Svar till" #: code:addons/mail/wizard/invite.py:37 #, python-format msgid "
You have been invited to follow %s.
" -msgstr "" +msgstr "
Du har blivit inbjuden att följa %s.
" #. module: mail #. openerp-web @@ -492,6 +494,8 @@ msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." msgstr "" +"Lagrar pladder-sammanfattning (antal meddelanden, ...). Denna sammanfattning " +"presenteras i html-format för att kunna sättas in i kanban vyer." #. module: mail #: help:mail.alias,alias_model_id:0 @@ -705,6 +709,9 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Liten bild som representerar gruppen. Det är storleksändras automatiskt till " +"64x64px, men med bevarat bildförhållande. Använd det här fältet när helst en " +"liten bild krävs." #. module: mail #: view:mail.compose.message:0 @@ -745,7 +752,7 @@ msgstr "läs mer" #: code:addons/mail/wizard/invite.py:40 #, python-format msgid "
You have been invited to follow a new document.
" -msgstr "" +msgstr "
Du har blivit inbjuden att följa ett nytt dokument.
" #. module: mail #: field:mail.compose.message,parent_id:0 @@ -757,6 +764,7 @@ msgstr "Överliggande meddelande" #: selection:res.partner,notification_email_send:0 msgid "All Messages (discussions, emails, followed system notifications)" msgstr "" +"Alla meddelanden (diskussioner, e-post, prenumeration på systemaviseringar)" #. module: mail #. openerp-web @@ -826,12 +834,14 @@ msgid "" "You may not create a user. To create new users, you should use the " "\"Settings > Users\" menu." msgstr "" +"Du kan inte skapa en användare. För att skapa nya användare används " +"\"Inställningar > Användare\"-menyn" #. module: mail #: help:mail.followers,res_model:0 #: help:mail.wizard.invite,res_model:0 msgid "Model of the followed resource" -msgstr "" +msgstr "Modell för den prenumererade resursen" #. module: mail #. openerp-web @@ -870,7 +880,7 @@ msgstr "Kontakt" msgid "" "Only the invited followers can read the\n" " discussions on this group." -msgstr "" +msgstr "Endast inbjudna följare kan läsa denna grupps diskussioner" #. module: mail #: model:ir.model,name:mail.model_ir_ui_menu @@ -894,6 +904,7 @@ msgid "" "The following partners chosen as recipients for the email have no email " "address linked :" msgstr "" +"Följande företag är valda mottagare för e-post som saknar länkad adress:" #. module: mail #: help:mail.alias,alias_defaults:0 @@ -901,11 +912,13 @@ msgid "" "A Python dictionary that will be evaluated to provide default values when " "creating new records for this alias." msgstr "" +"Ett Python-dictionary som används för standardvärden när nya poster skapas " +"för detta alias." #. module: mail #: model:ir.model,name:mail.model_mail_message_subtype msgid "Message subtypes" -msgstr "" +msgstr "Undertyper till meddelande" #. module: mail #. openerp-web @@ -970,6 +983,8 @@ msgstr "Skicka nu" msgid "" "Unable to send email, please configure the sender's email address or alias." msgstr "" +"Kunde inte skicka e-post, vänligen konfigurera avsändarens e-postadress " +"eller alias." #. module: mail #: help:res.users,alias_id:0 @@ -987,7 +1002,7 @@ msgstr "Foto" #: help:mail.compose.message,vote_user_ids:0 #: help:mail.message,vote_user_ids:0 msgid "Users that voted for this message" -msgstr "" +msgstr "Användare som röstat på detta meddelande" #. module: mail #: help:mail.group,alias_id:0 @@ -1077,6 +1092,7 @@ msgstr "Gruppera" #: help:mail.message,starred:0 msgid "Current user has a starred notification linked to this message" msgstr "" +"Aktuell användare har en blockerad avisering länkad till detta meddelande" #. module: mail #: field:mail.group,public:0 @@ -1229,7 +1245,7 @@ msgstr "Ta emot meddelanden per e-post" #. module: mail #: model:mail.group,name:mail.group_best_sales_practices msgid "Best Sales Practices" -msgstr "" +msgstr "Marknadsföringspraxis" #. module: mail #: selection:mail.group,public:0 @@ -1442,7 +1458,7 @@ msgstr "Kopia" #. module: mail #: help:mail.notification,starred:0 msgid "Starred message that goes into the todo mailbox" -msgstr "" +msgstr "Blockerade meddelanden som sorteras in i att-göra-boxen" #. module: mail #: view:mail.group:0 @@ -1517,11 +1533,12 @@ msgstr "Registreringsmånad" msgid "" "Partners that have a notification pushing this message in their mailboxes" msgstr "" +"Företag som har en aviseringsknuff av detta meddelande till sina e-postlådor" #. module: mail #: view:mail.message:0 msgid "Show already read messages" -msgstr "" +msgstr "Visa lästa meddelanden" #. module: mail #: view:mail.message:0 @@ -1560,6 +1577,8 @@ msgid "" "This group is visible by non members. Invisible groups can add " "members through the invite button." msgstr "" +"Denna grupp är synlig för icke medlemmar. Osynliga grupper kan lägga till " +"medlemmar via den \"osynliga\" knappen." #. module: mail #: model:mail.group,name:mail.group_board @@ -1569,7 +1588,7 @@ msgstr "Styrelsemöten" #. module: mail #: field:mail.alias,alias_model_id:0 msgid "Aliased Model" -msgstr "" +msgstr "Aliasobjekt" #. module: mail #: help:mail.compose.message,message_id:0 @@ -1609,7 +1628,7 @@ msgstr "Utgående e-postserver" #: code:addons/mail/mail_message.py:930 #, python-format msgid "Partners email addresses not found" -msgstr "" +msgstr "Företagets e-postadress saknas" #. module: mail #: view:mail.mail:0 @@ -1620,7 +1639,7 @@ msgstr "Skickat" #. module: mail #: field:mail.mail,body_html:0 msgid "Rich-text Contents" -msgstr "" +msgstr "Utsmyckat innehåll" #. module: mail #: help:mail.compose.message,to_read:0 @@ -1667,6 +1686,9 @@ msgid "" "installed\n" " the portal module." msgstr "" +"Denna grupp är synlig för alla,\n" +" även dina kunder i de fall du " +"installerat portalmodulen." #. module: mail #. openerp-web @@ -1680,7 +1702,7 @@ msgstr "Backa till Att göra" #: code:addons/mail/static/src/xml/mail.xml:154 #, python-format msgid "Attach a note that will not be sent to the followers" -msgstr "" +msgstr "Bilägg en notering som inte kommer skickas till prenumeranterna" #. module: mail #. openerp-web @@ -1839,7 +1861,7 @@ msgstr "Alias domän" #: code:addons/mail/update.py:93 #, python-format msgid "Error during communication with the publisher warranty server." -msgstr "" +msgstr "Fel vid kommunikation med servern för 'utgivarens underhållsavtal'." #. module: mail #: selection:mail.group,public:0 @@ -1888,7 +1910,7 @@ msgstr "Inledande meddelande i tråd." #. module: mail #: model:mail.group,name:mail.group_hr_policies msgid "HR Policies" -msgstr "" +msgstr "Personalpolicies" #. module: mail #. openerp-web @@ -1935,6 +1957,3 @@ msgstr "Litet fotografi" #: help:mail.mail,reply_to:0 msgid "Preferred response address for the message" msgstr "Föredragen svarsadress för meddelandet" - -#~ msgid "Invitation to follow %s" -#~ msgstr "Invitation to follow %s" diff --git a/addons/sale/i18n/sv.po b/addons/sale/i18n/sv.po index 8863ff16091..1848dec5270 100644 --- a/addons/sale/i18n/sv.po +++ b/addons/sale/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:36+0000\n" -"PO-Revision-Date: 2014-04-03 05:30+0000\n" +"PO-Revision-Date: 2014-04-03 10:44+0000\n" "Last-Translator: Anders Wallenquist \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-04-03 06:02+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: sale #: model:ir.model,name:sale.model_account_config_settings @@ -65,7 +65,7 @@ msgstr "Felaktiga data" #: code:addons/sale/wizard/sale_make_invoice_advance.py:102 #, python-format msgid "The value of Advance Amount must be positive." -msgstr "" +msgstr "Värdet på förskotterat belopp måste vara positivt." #. module: sale #: help:sale.config.settings,group_discount_per_so_line:0 @@ -97,6 +97,10 @@ msgid "" "The 'Waiting Schedule' status is set when the invoice is confirmed " " but waiting for the scheduler to run on the order date." msgstr "" +"Ger status för offert eller kundorder. Status Undantag ställs in automatiskt " +"när faktura- (Faktura i undantag) eller plockningsprocessen (Levarans i " +"undantag). Status 'Planerad väntan' \"ställs in när fakturan är bekräftad, " +"men väntar på planeringsscheduleringskörningen på orderdagen." #. module: sale #: view:sale.report:0 @@ -291,7 +295,7 @@ msgstr "Namn på försäljningsställe" #: code:addons/sale/sale.py:598 #, python-format msgid "You cannot confirm a sales order which has no line." -msgstr "" +msgstr "Du kan inte bekräfta en kundorder som saknar rader." #. module: sale #: model:ir.actions.act_window,help:sale.action_order_line_tree2 @@ -307,6 +311,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Här är en lista på varje fakturerbar kundorderrad. Du kan\n" +" göra partiella faktureringar via kundorderrader. Denna " +"listan är onödig \n" +" i de fall du valt att fakturera med leveransorder som " +"underlag eller du alltid\n" +" fakturerar kundordern i sin helhet.\n" +" \n" +" " #. module: sale #: view:sale.order:0 @@ -724,6 +737,14 @@ msgid "" " \n" "* The 'Cancelled' status is set when a user cancel the sales order related." msgstr "" +"* Status \"Utkast\" ställs in när den relaterade kundorder i utkast status.\n" +"* Status \"Bekräftat\" ställs in när den relaterade " +"försäljningsorderläggningen .\n" +"* Status \"Undantag\" ställs in när den relaterade kundorder in som " +"undantag.\n" +"* Status \"Klar\" ställs in när försäljningsorderraden har plockats.\n" +"* Status \"Inställd\" ställs in när en användare avbryter kundorder " +"relaterade." #. module: sale #: code:addons/sale/wizard/sale_make_invoice_advance.py:92 @@ -1565,6 +1586,91 @@ msgid "" "\n" " " msgstr "" +"\n" +"

\n" +"\n" +"

Hej ${object.partner_id.name},

\n" +" \n" +"

Här kommer din ${object.state in ('draft', 'sent') and 'offert' or " +"'orderbekräftelse'} från ${object.company_id.name}:

\n" +"\n" +"

\n" +"   UPPGIFTER
\n" +"   Ordernummer: ${object.name}
\n" +"   Ordertotal: ${object.amount_total} " +"${object.pricelist_id.currency_id.name}
\n" +"   Orderdatum: ${object.date_order}
\n" +" % if object.origin:\n" +"   Orderreferens: ${object.origin}
\n" +" % endif\n" +" % if object.client_order_ref:\n" +"   Er referens: ${object.client_order_ref}
\n" +" % endif\n" +" % if object.user_id:\n" +"   Din kontaktperson: ${object.user_id.name}\n" +" % endif\n" +"

\n" +"\n" +" % if object.paypal_url:\n" +"
\n" +"

Det är även möjligt att betala direkt via Paypal:

\n" +" \n" +" \n" +" \n" +" % endif\n" +"\n" +"
\n" +"

Vid eventuella frågot, tveka inte att kontakta oss.

\n" +"

Tack för att ni väljer ${object.company_id.name or 'oss'}!

\n" +"
\n" +"
\n" +"
\n" +"

\n" +" ${object.company_id.name}

\n" +"
\n" +"
\n" +" \n" +" % if object.company_id.street:\n" +" ${object.company_id.street}
\n" +" % endif\n" +" % if object.company_id.street2:\n" +" ${object.company_id.street2}
\n" +" % endif\n" +" % if object.company_id.city or object.company_id.zip:\n" +" ${object.company_id.zip} ${object.company_id.city}
\n" +" % endif\n" +" % if object.company_id.country_id:\n" +" ${object.company_id.state_id and ('%s, ' % " +"object.company_id.state_id.name) or ''} ${object.company_id.country_id.name " +"or ''}
\n" +" % endif\n" +"
\n" +" % if object.company_id.phone:\n" +"
\n" +" Phone:  ${object.company_id.phone}\n" +"
\n" +" % endif\n" +" % if object.company_id.website:\n" +"
\n" +" Web : ${object.company_id.website}\n" +"
\n" +" %endif\n" +"

\n" +"
\n" +"
\n" +" " #. module: sale #: view:sale.order.line:0 @@ -2282,11 +2388,3 @@ msgstr "Plockad" #: field:sale.report,year:0 msgid "Year" msgstr "År" - -#~ msgid "" -#~ "In order to delete a confirmed sales order, you must cancel it before!" -#~ msgstr "" -#~ "In order to delete a confirmed sales order, you must cancel it before!" - -#~ msgid "No Customer Defined!" -#~ msgstr "Kund saknas!" diff --git a/addons/stock/i18n/zh_TW.po b/addons/stock/i18n/zh_TW.po index a4cdb73814d..51050def38b 100644 --- a/addons/stock/i18n/zh_TW.po +++ b/addons/stock/i18n/zh_TW.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2014-02-06 15:56+0000\n" -"PO-Revision-Date: 2014-03-30 12:01+0000\n" +"PO-Revision-Date: 2014-04-03 11:14+0000\n" "Last-Translator: Andy Cheng \n" "Language-Team: Chinese (Traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-31 06:40+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: stock #: field:stock.inventory.line.split,line_exist_ids:0 @@ -4360,7 +4360,7 @@ msgstr "入庫產品" #. module: stock #: view:product.product:0 msgid "update" -msgstr "" +msgstr "更新" #. module: stock #: view:stock.change.product.qty:0 @@ -4379,7 +4379,7 @@ msgstr "" #: view:stock.return.picking:0 #: view:stock.split.into:0 msgid "or" -msgstr "" +msgstr "或" #. module: stock #: selection:stock.picking,invoice_state:0 @@ -4399,7 +4399,7 @@ msgstr "資訊" #: code:addons/stock/stock.py:1213 #, python-format msgid "You cannot remove the picking which is in %s state!" -msgstr "" +msgstr "您不能移除 %s 狀態的提貨單" #. module: stock #: help:res.partner,property_stock_customer:0 diff --git a/openerp/addons/base/i18n/ab.po b/openerp/addons/base/i18n/ab.po index f3ab57c8078..ba58f36d5d1 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-08 06:09+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:47+0000\n" +"X-Generator: Launchpad (build 16976)\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 bfa9c43edd6..3014e1b0fe4 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: 2014-01-11 06:26+0000\n" -"X-Generator: Launchpad (build 16890)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:47+0000\n" +"X-Generator: Launchpad (build 16976)\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 e4bbf993586..347a0aee8a0 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: 2014-01-19 05:58+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:48+0000\n" +"X-Generator: Launchpad (build 16976)\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 efa03372573..8959e8d5167 100644 --- a/openerp/addons/base/i18n/ar.po +++ b/openerp/addons/base/i18n/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-08 06:09+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:48+0000\n" +"X-Generator: Launchpad (build 16976)\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 abcfa36dce1..4c2bfb23d55 100644 --- a/openerp/addons/base/i18n/bg.po +++ b/openerp/addons/base/i18n/bg.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-08 06:10+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:49+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/bn.po b/openerp/addons/base/i18n/bn.po index 8048ec219a1..b32a1099d08 100644 --- a/openerp/addons/base/i18n/bn.po +++ b/openerp/addons/base/i18n/bn.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: 2014-01-16 06:03+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:49+0000\n" +"X-Generator: Launchpad (build 16976)\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 0223635ee89..03fc2baf6af 100644 --- a/openerp/addons/base/i18n/bs.po +++ b/openerp/addons/base/i18n/bs.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2013-10-25 21:35+0000\n" -"Last-Translator: Bosko Stojakovic \n" +"Last-Translator: Boško Stojaković \n" "Language-Team: Bosnian \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-26 06:24+0000\n" -"X-Generator: Launchpad (build 16810)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:49+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ca.po b/openerp/addons/base/i18n/ca.po index b083939b88d..08aa7ff7c1b 100644 --- a/openerp/addons/base/i18n/ca.po +++ b/openerp/addons/base/i18n/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-08 06:10+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:50+0000\n" +"X-Generator: Launchpad (build 16976)\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 1de34103c72..ee177307785 100644 --- a/openerp/addons/base/i18n/cs.po +++ b/openerp/addons/base/i18n/cs.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: 2014-03-08 06:53+0000\n" -"X-Generator: Launchpad (build 16948)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:50+0000\n" +"X-Generator: Launchpad (build 16976)\n" "X-Language: cs_CZ\n" "X-Source-Language: en\n" diff --git a/openerp/addons/base/i18n/da.po b/openerp/addons/base/i18n/da.po index a6b9257fe30..c53ed207f77 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-08 06:10+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:50+0000\n" +"X-Generator: Launchpad (build 16976)\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 0f1d9fb1448..75509253e98 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: 2014-02-03 05:55+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:52+0000\n" +"X-Generator: Launchpad (build 16976)\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 1d0d44913dc..7f21ca27f04 100644 --- a/openerp/addons/base/i18n/el.po +++ b/openerp/addons/base/i18n/el.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-08 06:11+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/en_GB.po b/openerp/addons/base/i18n/en_GB.po index a484df07700..9a542d5b49c 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-31 05:47+0000\n" -"X-Generator: Launchpad (build 16820)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:03+0000\n" +"X-Generator: Launchpad (build 16976)\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 41190b960e1..c30d913bc6e 100644 --- a/openerp/addons/base/i18n/es.po +++ b/openerp/addons/base/i18n/es.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: 2014-01-04 06:18+0000\n" -"X-Generator: Launchpad (build 16877)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:59+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: help:ir.actions.act_window,res_id:0 diff --git a/openerp/addons/base/i18n/es_AR.po b/openerp/addons/base/i18n/es_AR.po index b7b436aa1ea..c2481140984 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-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:02+0000\n" +"X-Generator: Launchpad (build 16976)\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 da9875971d6..6fed8dd8daa 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-08 06:17+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:04+0000\n" +"X-Generator: Launchpad (build 16976)\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 7fa6da27fe9..57aa90de6cb 100644 --- a/openerp/addons/base/i18n/es_CL.po +++ b/openerp/addons/base/i18n/es_CL.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-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:03+0000\n" +"X-Generator: Launchpad (build 16976)\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 49e7ed3757b..34cca753860 100644 --- a/openerp/addons/base/i18n/es_CR.po +++ b/openerp/addons/base/i18n/es_CR.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-08 06:17+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:05+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_DO.po b/openerp/addons/base/i18n/es_DO.po index e8410f4474a..7e9abea2dd9 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-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:03+0000\n" +"X-Generator: Launchpad (build 16976)\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 635a2937665..f22b8fe915b 100644 --- a/openerp/addons/base/i18n/es_EC.po +++ b/openerp/addons/base/i18n/es_EC.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-08 06:17+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:06+0000\n" +"X-Generator: Launchpad (build 16976)\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 993a6924a3f..eee4e3ed746 100644 --- a/openerp/addons/base/i18n/es_MX.po +++ b/openerp/addons/base/i18n/es_MX.po @@ -9,14 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2013-07-26 23:36+0000\n" -"Last-Translator: Federico Manuel Echeverri Choux - ( Vauxoo ) " -"\n" +"Last-Translator: Federico Manuel Echeverri Choux \n" "Language-Team: Spanish (Mexico) \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-08 06:17+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:06+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/es_PE.po b/openerp/addons/base/i18n/es_PE.po index 8bb9e5a91c3..fba0940742c 100644 --- a/openerp/addons/base/i18n/es_PE.po +++ b/openerp/addons/base/i18n/es_PE.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2013-12-09 16:08+0000\n" -"Last-Translator: Pepe B. @TelFast Peru Partner \n" +"Last-Translator: Pepe B. @TelFast Perú \n" "Language-Team: Spanish (Peru) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-12-11 06:27+0000\n" -"X-Generator: Launchpad (build 16869)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:06+0000\n" +"X-Generator: Launchpad (build 16976)\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 9ae70ae9c12..e697ac64074 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-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:02+0000\n" +"X-Generator: Launchpad (build 16976)\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 4f88f067db2..41c768d2648 100644 --- a/openerp/addons/base/i18n/et.po +++ b/openerp/addons/base/i18n/et.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2013-10-08 18:24+0000\n" -"Last-Translator: Rait Helmrosin \n" +"Last-Translator: Rait \n" "Language-Team: Estonian \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-09 05:48+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:51+0000\n" +"X-Generator: Launchpad (build 16976)\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 a5423fbb437..ab8ae66fc47 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-08 06:10+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:49+0000\n" +"X-Generator: Launchpad (build 16976)\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 fdbebaa55a8..1490a2fd95f 100644 --- a/openerp/addons/base/i18n/fa.po +++ b/openerp/addons/base/i18n/fa.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-08 06:13+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:57+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/fa_AF.po b/openerp/addons/base/i18n/fa_AF.po index 2a3d77a8b18..d3ce5fcfed8 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-08 06:18+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\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 9cd36c2b7b3..06913c1c5a1 100644 --- a/openerp/addons/base/i18n/fi.po +++ b/openerp/addons/base/i18n/fi.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: 2014-03-01 05:51+0000\n" -"X-Generator: Launchpad (build 16948)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:51+0000\n" +"X-Generator: Launchpad (build 16976)\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 06bcdcfc70b..b83844eb5f6 100644 --- a/openerp/addons/base/i18n/fr.po +++ b/openerp/addons/base/i18n/fr.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: 2014-03-27 08:12+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:52+0000\n" +"X-Generator: Launchpad (build 16976)\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 49a5fc8820b..0cac409f7a1 100644 --- a/openerp/addons/base/i18n/fr_CA.po +++ b/openerp/addons/base/i18n/fr_CA.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2014-03-19 20:37+0000\n" -"Last-Translator: Philippe Latouche - Savoir-faire Linux \n" +"Last-Translator: Philippe Latouche \n" "Language-Team: French (Canada) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-20 06:19+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:04+0000\n" +"X-Generator: Launchpad (build 16976)\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 3ca2bf41ca0..6242959f6d7 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-11-16 06:24+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\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 d000b1ba293..9319ff98c2a 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-08 06:11+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\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 eb302e64b53..1e045cbe540 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: 2014-01-02 05:45+0000\n" -"X-Generator: Launchpad (build 16877)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\n" "Language: he\n" #. module: base diff --git a/openerp/addons/base/i18n/hi.po b/openerp/addons/base/i18n/hi.po index ed7a065d9e2..c025913d659 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-08 06:12+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:53+0000\n" +"X-Generator: Launchpad (build 16976)\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 aeda7907a8f..2491143651b 100644 --- a/openerp/addons/base/i18n/hr.po +++ b/openerp/addons/base/i18n/hr.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-11-17 05:44+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:58+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/hu.po b/openerp/addons/base/i18n/hu.po index b26b1fc044a..b87bd83d522 100644 --- a/openerp/addons/base/i18n/hu.po +++ b/openerp/addons/base/i18n/hu.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-08 06:12+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:54+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing @@ -6329,18 +6329,18 @@ msgid "" msgstr "" "\n" "Ez a modul hozzáad állapotot, start_dátumot, stop_dátumot a gyártási " -"megrendelés végrehalytási soraihoz (a 'Gyártási megrendelések' fülön).\n" +"megrendelés végrehajtási soraihoz (a 'Gyártási megrendelések' fülön).\n" "=============================================================================" "===================================\n" "\n" -"Állapot: terv, leigazolt, elvégzett, érévnytelenített\n" -"Ha elvégzett/visszaigazolt, érévnytelenített a gyártási rendelés akkor " +"Állapot: terv, leigazolt, elvégzett, érvénytelenített\n" +"Ha elvégzett/visszaigazolt, érvénytelenített a gyártási rendelés akkor " "megfelelő állapot sorokat\n" "be kell állítani az állapothoz.\n" "\n" "Menük létrehozás:\n" "-------------\n" -" **Gyátás** > **Gyártás** > **Gyártási megrendelések**\n" +" **Gyártás** > **Gyártás** > **Gyártási megrendelések**\n" "\n" "Megtalálható a 'Gyártási megrendelések' soraiban a gyártási " "megrendeléseknél.\n" @@ -6351,8 +6351,8 @@ msgstr "" " * start (állítsa be a visszaigazolt állapotot), állítsa be az " "indulási_dátumot\n" " * stop (állítsa be az elvégzett állapotot), állítsa be a stop_dátumot\n" -" * Tervezettr állít (állítsa be a tervezett állapotot)\n" -" * érévnytelenít (állítsa be az érvénytelenít állapotot)\n" +" * Tervezetet állít (állítsa be a tervezett állapotot)\n" +" * érvénytelenít (állítsa be az érvénytelenít állapotot)\n" "\n" "Ha egy gyártási rendelés 'elvégezhetővé' válik, akkor 'visszaigazoltnak' " "kell lennie.\n" @@ -6397,7 +6397,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 @@ -9358,7 +9358,7 @@ msgid "" msgstr "" "\n" "Hosszú távú projekt szervezés modul mely nyomon követi a tervezést, " -"ütemtervet, erőforrás kiosztás.\n" +"ütemtervet, erőforrás kiosztást.\n" "=============================================================================" "==============\n" "\n" @@ -9372,7 +9372,7 @@ msgstr "" " feladat megadva akkor az összesre terv, nyitott és folyamatban állapot " "lesz választva.\n" " * Ügy ütemterv számítás: Ez ugyanúgy működik mint az ütemezés gomb a \n" -" project.phase project.fázis-on. Ez alapul veszi a projectet és " +" projekt.projekt fázis.fázis-on. Ez alapul veszi a projektet és " "kiszámítja az összes nyitott,\n" " tervet és elintézetlen ügyeket.\n" " * Ütemezett ügyek: Minden ügy, mely terv, elintézetlen és nyitott " @@ -11437,7 +11437,7 @@ msgstr "" "\n" "Beállítás:\n" "--------------\n" -"A madul telepítése után konfigurálni kell az LDAP paramétereket a vállalat " +"A modul telepítése után konfigurálni kell az LDAP paramétereket a vállalat " "részletei\n" "beállítás fülön. Különböző vállalatoknak különböző LDAP szerverei vannak,\n" "amíg egyedi felhasználó nevei vannak (a felhasználó neveknek az OpenERP-ben\n" @@ -11533,7 +11533,7 @@ msgstr "Réunion (Francia)" msgid "" "New column name must still start with x_ , because it is a custom field!" msgstr "" -"Az új oszlopnévnek még mindig x_-sal kell kezdődnie, mert ez egy egyéni mező!" +"Az új oszlopnévnek még mindig x_-al kell kezdődnie, mert ez egy egyéni mező!" #. module: base #: model:ir.module.module,shortdesc:base.module_mrp_repair @@ -12429,8 +12429,8 @@ msgid "" " " msgstr "" "\n" -"Ez a modul kiegészíti a Raktárház alkalmazást, hatásosan beágyazva a Belökés " -"& Kihúzás raktár folyamatokat.\n" +"Ez a modul kiegészíti a Raktárépület alkalmazást, hatásosan beágyazva a " +"Belökés & Kihúzás raktár folyamatokat.\n" "=============================================================================" "===============================\n" "\n" @@ -12844,7 +12844,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 @@ -14008,7 +14008,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 @@ -14099,7 +14099,7 @@ msgstr "Normál" #. module: base #: model:ir.module.module,shortdesc:base.module_purchase_double_validation msgid "Double Validation on Purchases" -msgstr "A vásárlásokra kétszeres jóváhagyás" +msgstr "Kkétszeres jóváhagyás a beszerzésekre" #. module: base #: field:res.bank,street2:0 @@ -18559,8 +18559,8 @@ msgstr "" "Az Elválasztó formátumnak olyannak kell lennie [,n] ahol 0 < n :egység " "számjegytől indul. A -1 fogja jelezni az elválasztás végét. Pl. a [3,2,-1] " "fogja jelölni a 106500-nál, hogy 1,06,500 lehessen; az [1,2,-1] fogja " -"lehetővé tenni, hogy a szám 106,50,0 legyen. Ebben az esetben mindig a ',' " -"az ezres elválasztó." +"lehetővé tenni, hogy a szám 106,50,0 legyen;[3] fogja jelölni mint 106,500. " +"Ebben az esetben mindig a ',' az ezres elválasztó." #. module: base #: field:ir.module.module,auto_install:0 diff --git a/openerp/addons/base/i18n/hy.po b/openerp/addons/base/i18n/hy.po index a96eabcf7a7..fdc7f61cdcb 100644 --- a/openerp/addons/base/i18n/hy.po +++ b/openerp/addons/base/i18n/hy.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-08 06:09+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:48+0000\n" +"X-Generator: Launchpad (build 16976)\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 7d8cc6a4f14..e906a03f03f 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: 2014-03-11 06:08+0000\n" -"X-Generator: Launchpad (build 16948)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:54+0000\n" +"X-Generator: Launchpad (build 16976)\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 824538b219d..b466386bf6d 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-08 06:12+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:54+0000\n" +"X-Generator: Launchpad (build 16976)\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 47f95f75c39..090b0c6c16a 100644 --- a/openerp/addons/base/i18n/it.po +++ b/openerp/addons/base/i18n/it.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:35+0000\n" "PO-Revision-Date: 2013-01-19 09:34+0000\n" -"Last-Translator: Davide Corio \n" +"Last-Translator: Davide Corio @ LS \n" "Language-Team: Italian \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-08 06:12+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:54+0000\n" +"X-Generator: Launchpad (build 16976)\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 288297863a1..624110f0d5e 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: 2014-03-07 07:22+0000\n" -"X-Generator: Launchpad (build 16948)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:55+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/ka.po b/openerp/addons/base/i18n/ka.po index 4c83165c302..12f724f8fc2 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-08 06:11+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:52+0000\n" +"X-Generator: Launchpad (build 16976)\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 c615c2fca92..f893af8ac41 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-08 06:12+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:55+0000\n" +"X-Generator: Launchpad (build 16976)\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 dd7f1b00510..6b6b7957605 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-08 06:13+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:55+0000\n" +"X-Generator: Launchpad (build 16976)\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 07ee4ad23a7..7069722d47d 100644 --- a/openerp/addons/base/i18n/lt.po +++ b/openerp/addons/base/i18n/lt.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-08 06:13+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:56+0000\n" +"X-Generator: Launchpad (build 16976)\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 396435687cb..65ecd2e72be 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-12-08 05:45+0000\n" -"X-Generator: Launchpad (build 16869)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:56+0000\n" +"X-Generator: Launchpad (build 16976)\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 dafa062e849..31d0c02d729 100644 --- a/openerp/addons/base/i18n/mk.po +++ b/openerp/addons/base/i18n/mk.po @@ -16,8 +16,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-08 06:13+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:56+0000\n" +"X-Generator: Launchpad (build 16976)\n" "Language: mk\n" #. module: base diff --git a/openerp/addons/base/i18n/mn.po b/openerp/addons/base/i18n/mn.po index 2e114731dc8..4a1b14f5d5d 100644 --- a/openerp/addons/base/i18n/mn.po +++ b/openerp/addons/base/i18n/mn.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: 2014-02-09 06:50+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:56+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing diff --git a/openerp/addons/base/i18n/nb.po b/openerp/addons/base/i18n/nb.po index 1c6cd39af30..fe0ceb8fb9c 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-08 06:13+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:57+0000\n" +"X-Generator: Launchpad (build 16976)\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 b3e5afffd5c..a68358a9799 100644 --- a/openerp/addons/base/i18n/nl.po +++ b/openerp/addons/base/i18n/nl.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: 2014-03-14 06:58+0000\n" -"X-Generator: Launchpad (build 16963)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:51+0000\n" +"X-Generator: Launchpad (build 16976)\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 6dc8f15506f..bd154c4e340 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-08 06:17+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:04+0000\n" +"X-Generator: Launchpad (build 16976)\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 eeca9b28a53..28d26b4bac4 100644 --- a/openerp/addons/base/i18n/pl.po +++ b/openerp/addons/base/i18n/pl.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-11-17 05:44+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:57+0000\n" +"X-Generator: Launchpad (build 16976)\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 76afbde170b..7f1f2e9764f 100644 --- a/openerp/addons/base/i18n/pt.po +++ b/openerp/addons/base/i18n/pt.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: 2014-03-21 06:51+0000\n" -"X-Generator: Launchpad (build 16967)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:57+0000\n" +"X-Generator: Launchpad (build 16976)\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 9649e050f0a..277788aeb64 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-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:02+0000\n" +"X-Generator: Launchpad (build 16976)\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 5eb162874eb..a68c6c5ae5f 100644 --- a/openerp/addons/base/i18n/ro.po +++ b/openerp/addons/base/i18n/ro.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: 2014-02-23 07:44+0000\n" -"X-Generator: Launchpad (build 16926)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:58+0000\n" +"X-Generator: Launchpad (build 16976)\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 de07ddc1135..a2547c4bba0 100644 --- a/openerp/addons/base/i18n/ru.po +++ b/openerp/addons/base/i18n/ru.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-12-23 05:47+0000\n" -"X-Generator: Launchpad (build 16872)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:58+0000\n" +"X-Generator: Launchpad (build 16976)\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 931bd362f9c..ae674fbafa0 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: 2014-01-06 05:04+0000\n" -"X-Generator: Launchpad (build 16877)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:59+0000\n" +"X-Generator: Launchpad (build 16976)\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 61771677c61..06f3ce60f19 100644 --- a/openerp/addons/base/i18n/sl.po +++ b/openerp/addons/base/i18n/sl.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-08 06:14+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:59+0000\n" +"X-Generator: Launchpad (build 16976)\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 83131c5fc2e..db8099cca7e 100644 --- a/openerp/addons/base/i18n/sq.po +++ b/openerp/addons/base/i18n/sq.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-08 06:09+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:48+0000\n" +"X-Generator: Launchpad (build 16976)\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 ada202d9d5c..a6257f16089 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-08 06:14+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:58+0000\n" +"X-Generator: Launchpad (build 16976)\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 e5ef8917437..d0195138102 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-08 06:18+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:07+0000\n" +"X-Generator: Launchpad (build 16976)\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 693da2b8573..08be224f6a1 100644 --- a/openerp/addons/base/i18n/sv.po +++ b/openerp/addons/base/i18n/sv.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-11-02 06:23+0000\n" -"X-Generator: Launchpad (build 16820)\n" +"X-Launchpad-Export-Date: 2014-04-04 06:59+0000\n" +"X-Generator: Launchpad (build 16976)\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 bda5cd25c3e..ac4eaaf9574 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: 2014-02-06 06:23+0000\n" -"X-Generator: Launchpad (build 16916)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:00+0000\n" +"X-Generator: Launchpad (build 16976)\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 cbe11af13b9..4648ba2476c 100644 --- a/openerp/addons/base/i18n/tlh.po +++ b/openerp/addons/base/i18n/tlh.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-08 06:15+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:00+0000\n" +"X-Generator: Launchpad (build 16976)\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 7ce54b2dee2..df8d3d15374 100644 --- a/openerp/addons/base/i18n/tr.po +++ b/openerp/addons/base/i18n/tr.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-08 06:15+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:00+0000\n" +"X-Generator: Launchpad (build 16976)\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 345604b4398..f180ead7cda 100644 --- a/openerp/addons/base/i18n/uk.po +++ b/openerp/addons/base/i18n/uk.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-08 06:15+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:00+0000\n" +"X-Generator: Launchpad (build 16976)\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 4ecaa9081b0..3d3756ebfb0 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-08 06:15+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:01+0000\n" +"X-Generator: Launchpad (build 16976)\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 5b26bb5eb0f..c08fb723378 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-08 06:15+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:01+0000\n" +"X-Generator: Launchpad (build 16976)\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 409a866bb55..082b665b9c7 100644 --- a/openerp/addons/base/i18n/zh_CN.po +++ b/openerp/addons/base/i18n/zh_CN.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-11-27 05:39+0000\n" -"X-Generator: Launchpad (build 16845)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:05+0000\n" +"X-Generator: Launchpad (build 16976)\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 0d411f962b9..df3c6a70e63 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-08 06:16+0000\n" -"X-Generator: Launchpad (build 16799)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:01+0000\n" +"X-Generator: Launchpad (build 16976)\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 2a8b1bac99e..fa5e47ab6a1 100644 --- a/openerp/addons/base/i18n/zh_TW.po +++ b/openerp/addons/base/i18n/zh_TW.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-12-02 05:51+0000\n" -"X-Generator: Launchpad (build 16856)\n" +"X-Launchpad-Export-Date: 2014-04-04 07:05+0000\n" +"X-Generator: Launchpad (build 16976)\n" #. module: base #: model:ir.module.module,description:base.module_account_check_writing From 96beccc05ae24c36865bc4ef1639a073f17bf9c7 Mon Sep 17 00:00:00 2001 From: "Foram Katharotiya (OpenERP)" Date: Fri, 4 Apr 2014 11:24:09 +0200 Subject: [PATCH 2/9] [IMP] bring back the tests - backported from little after v7.0 in the trunk lp bug: https://launchpad.net/bugs/1182515 fixed bzr revid: ls@numerigraphe.com-20140404092409-q1c2cwg5m2fav7tn --- addons/stock/__openerp__.py | 9 +- addons/stock/security/stock_security.xml | 2 +- addons/stock/stock_demo.yml | 128 ++++---- addons/stock/test/opening_stock.yml | 92 ++++-- addons/stock/test/shipment.yml | 356 ++++++++++++----------- addons/stock/test/stock_report.yml | 35 ++- addons/stock/test/stock_users.yml | 30 ++ 7 files changed, 372 insertions(+), 280 deletions(-) create mode 100644 addons/stock/test/stock_users.yml diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py index b3d7e30f1ce..dd2a996f6dd 100644 --- a/addons/stock/__openerp__.py +++ b/addons/stock/__openerp__.py @@ -59,7 +59,6 @@ Dashboard / Reports for Warehouse Management will include: 'sequence': 16, 'demo': [ 'stock_demo.xml', -# 'stock_demo.yml', ], 'data': [ 'security/stock_security.xml', @@ -91,9 +90,11 @@ Dashboard / Reports for Warehouse Management will include: 'res_config_view.xml', ], 'test': [ -# 'test/opening_stock.yml', -# 'test/shipment.yml', -# 'test/stock_report.yml', + 'test/stock_users.yml', + 'stock_demo.yml', + 'test/opening_stock.yml', + 'test/shipment.yml', + 'test/stock_report.yml', ], 'installable': True, 'application': True, diff --git a/addons/stock/security/stock_security.xml b/addons/stock/security/stock_security.xml index 10ae6a16d59..e51f20c67c9 100644 --- a/addons/stock/security/stock_security.xml +++ b/addons/stock/security/stock_security.xml @@ -10,7 +10,7 @@ Manager - + diff --git a/addons/stock/stock_demo.yml b/addons/stock/stock_demo.yml index 99565f0c08c..d925ba4dc8e 100644 --- a/addons/stock/stock_demo.yml +++ b/addons/stock/stock_demo.yml @@ -1,99 +1,107 @@ - - !record {model: stock.location, id: location_refrigerator}: - name: Refrigerator + Only stock manager can create location,warehouse and product, so let's check data with giving the access rights of manager +- + !context + uid: 'res_users_stock_manager' +- + !record {model: stock.location, id: location_monitor}: + name: chicago shop usage: internal - - !record {model: stock.location, id: location_delivery_counter}: - name: Delivery Counter + !record {model: stock.location, id: stock_location_output}: + name: Output usage: internal - - !record {model: stock.location, id: location_refrigerator_small}: - name: Small Refrigerator + !record {model: stock.location, id: location_monitor_small}: + name: Small chicago shop usage: internal - location_id: location_refrigerator + location_id: location_monitor - !record {model: stock.location, id: location_opening}: name: opening usage: inventory - - !record {model: stock.location, id: location_convenience_shop}: - name: Convenient Store + !record {model: stock.location, id: stock_location_3}: + name: IT Suppliers usage: supplier - - !record {model: stock.warehouse, id: warehouse_icecream}: - name: Ice Cream Shop - lot_input_id: location_refrigerator - lot_stock_id: location_refrigerator - lot_output_id: location_delivery_counter + !record {model: stock.warehouse, id: stock_warehouse_shop0}: + name: Chicago Warehouse + lot_input_id: location_monitor + lot_stock_id: location_monitor + lot_output_id: stock_location_output - - !record {model: product.product, id: product_icecream}: - default_code: 001 - name: Ice Cream - type: product - categ_id: product.product_category_1 - list_price: 100.0 - standard_price: 70.0 - uom_id: product.product_uom_kgm - uom_po_id: product.product_uom_kgm - procure_method: make_to_stock + !record {model: product.product, id: product_product_6}: + default_code: LCD15 + name: 15” LCD Monitor + type: consu + categ_id: product.product_category_8 + list_price: 1200.0 + standard_price: 800.0 + uom_id: product.product_uom_unit + uom_po_id: product.product_uom_unit property_stock_inventory: location_opening valuation: real_time cost_method: average - property_stock_account_input: account.o_expense - property_stock_account_output: account.o_income - description: Ice cream can be mass-produced and thus is widely available in developed parts of the world. Ice cream can be purchased in large cartons (vats and squrounds) from supermarkets and grocery stores, in smaller quantities from ice cream shops, convenience stores, and milk bars, and in individual servings from small carts or vans at public events. - + property_stock_account_input: account.conf_o_income + property_stock_account_output: account.a_expense - - !record {model: stock.production.lot, id: lot_icecream_0}: - name: Lot0 for Ice cream - product_id: product_icecream + Stock user can handled production lot,inventory and picking, so let's check data with giving the access rights of user - - !record {model: stock.production.lot, id: lot_icecream_1}: - name: Lot1 for Ice cream - product_id: product_icecream + !context + uid: 'res_users_stock_user' - - !record {model: stock.inventory, id: stock_inventory_icecream}: - name: Inventory for icecream + !record {model: stock.production.lot, id: lot_monitor_0}: + name: Lot0 for LCD Monitor + product_id: product_product_6 - - !record {model: stock.inventory.line, id: stock_inventory_line_icecream_lot0}: - product_id: product_icecream - product_uom: product.product_uom_kgm - inventory_id: stock_inventory_icecream + !record {model: stock.production.lot, id: lot_monitor_1}: + name: Lot1 for LCD Monitor + product_id: product_product_6 +- + !record {model: stock.inventory, id: stock_inventory_0}: + name: Starting Inventory + state: draft +- + !record {model: stock.inventory.line, id: stock_inventory_line_3}: + product_id: product_product_6 + product_uom: product.product_uom_unit + inventory_id: stock_inventory_0 product_qty: 50.0 - prod_lot_id: lot_icecream_0 - location_id: location_refrigerator + prod_lot_id: lot_monitor_0 + location_id: location_monitor - - !record {model: stock.inventory.line, id: stock_inventory_line_icecream_lot1}: - product_id: product_icecream - product_uom: product.product_uom_kgm - inventory_id: stock_inventory_icecream + !record {model: stock.inventory.line, id: stock_inventory_line_monitor}: + product_id: product_product_6 + product_uom: product.product_uom_unit + inventory_id: stock_inventory_0 product_qty: 40.0 - prod_lot_id: lot_icecream_1 - location_id: location_refrigerator + prod_lot_id: lot_monitor_1 + location_id: location_monitor - !record {model: stock.picking, id: outgoing_shipment}: type: out - location_dest_id: location_delivery_counter + location_dest_id: stock_location_output - - !record {model: stock.move, id: outgoing_shipment_icecream}: + !record {model: stock.move, id: outgoing_shipment_monitor}: picking_id: outgoing_shipment - product_id: product_icecream - product_uom: product.product_uom_kgm + product_id: product_product_6 + product_uom: product.product_uom_unit product_qty: 130.0 - location_id: location_refrigerator - location_dest_id: location_delivery_counter + location_id: location_monitor + location_dest_id: stock_location_output - !record {model: stock.picking, id: incomming_shipment}: type: in invoice_state: 2binvoiced partner_id: base.res_partner_address_9 - location_dest_id: location_refrigerator + location_dest_id: location_monitor - - !record {model: stock.move, id: incomming_shipment_icecream}: + !record {model: stock.move, id: incomming_shipment_monitor}: picking_id: incomming_shipment - product_id: product_icecream - product_uom: product.product_uom_kgm + product_id: product_product_6 + product_uom: product.product_uom_unit product_qty: 50.0 - location_id: location_convenience_shop - location_dest_id: location_refrigerator + location_id: stock_location_3 + location_dest_id: location_monitor diff --git a/addons/stock/test/opening_stock.yml b/addons/stock/test/opening_stock.yml index 2e3eaeadc74..9efcfd3af99 100644 --- a/addons/stock/test/opening_stock.yml +++ b/addons/stock/test/opening_stock.yml @@ -1,67 +1,87 @@ - - I update the price of the Ice-cream. + Only stock manager can change the price and update stock of products, so let's check data with giving the access rights of manager +- + !context + uid: 'res_users_stock_manager' +- + I update the price of the 15” LCD Monitor. - !python {model: stock.change.standard.price}: | - context.update({'active_model':'product.product', 'active_id': ref('product_icecream'), 'active_ids':[ref('product_icecream')]}) + context.update({'active_model':'product.product', 'active_id': ref('product_product_6'), 'active_ids':[ref('product_product_6')]}) - !record {model: stock.change.standard.price, id: change_price}: - new_price: 120 + new_price: 1500 - !python {model: stock.change.standard.price}: | self.change_price(cr, uid, [ref('change_price')], context=context) - - I check price of Ice-cream after update price. + I check price of 15” LCD Monitor after update price. - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) - assert product.standard_price == 120, "Price is not updated." + product = self.browse(cr, uid, ref('product_product_6'), context=context) + assert product.standard_price == 1500, "Price is not updated." - - I update the current stock of the Ice-cream with 10 kgm in Small Refrigerator in lot0. + I update the current stock of the 15” LCD Monitor with 10 unit in stock location shop1 in lot0. - !record {model: stock.change.product.qty, id: change_qty}: - location_id: location_refrigerator_small + location_id: location_monitor_small new_quantity: 10 - product_id: product_icecream - prodlot_id: lot_icecream_1 + product_id: product_product_6 + prodlot_id: lot_monitor_1 - !python {model: stock.change.product.qty}: | self.change_product_qty(cr, uid, [ref('change_qty')], context=context) - - I check available stock of Ice-cream after update stock. + I check available stock of 15” LCD Monitor after update stock. - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) + product = self.browse(cr, uid, ref('product_product_6'), context=context) assert product.qty_available == 10, "Stock is not updated." +- + Stock user can merge inventory, so let's check data with giving the access rights of user. +- + !context + uid: 'res_users_stock_user' - I merge inventory. - !python {model: stock.inventory.merge }: | - context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_icecream'), 'active_ids': [ref('stock_inventory_icecream')]}) + context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_0'), 'active_ids': [ref('stock_inventory_0')]}) - !record {model: stock.inventory.merge, id: merge_inventory}: - !python {model: stock.inventory.merge }: | self.do_merge(cr, uid, [ref('merge_inventory')], context=context) +- + Only stock manager cancelled inventory, so let's check data with giving the access rights of manager +- + !context + uid: 'res_users_stock_manager' - I cancel inventory. - !python {model: stock.inventory}: | - self.action_cancel_inventory(cr, uid, [ref('stock_inventory_icecream')]) + self.action_cancel_inventory(cr, uid, [ref('stock_inventory_0')]) +- + stock user can reset inventory, so let's check data with giving the access rights of user +- + !context + uid: 'res_users_stock_user' - I reset to draft inventory. - !python {model: stock.inventory}: | - self.action_cancel_draft(cr, uid, [ref('stock_inventory_icecream')]) + self.action_cancel_draft(cr, uid, [ref('stock_inventory_0')]) - - I confirm physical inventory of Ice-cream which are came in different lots. + I confirm physical inventory of 15” LCD Monitor which are came in different lots. - !python {model: stock.inventory}: | - self.action_confirm(cr, uid, [ref('stock_inventory_icecream')], context=context) + self.action_confirm(cr, uid, [ref('stock_inventory_0')], context=context) - I check move details after confirmed physical inventory. - !python {model: stock.inventory}: | - inventory = self.browse(cr, uid, ref('stock_inventory_icecream'), context=context) + inventory = self.browse(cr, uid, ref('stock_inventory_0'), context=context) assert len(inventory.move_ids) == len(inventory.inventory_line_id), "moves are not correspond." for move_line in inventory.move_ids: for line in inventory.inventory_line_id: @@ -77,15 +97,15 @@ I split inventory line. - !python {model: stock.inventory.line.split}: | - context.update({'active_model': 'stock.inventory.line', 'active_id': ref('stock_inventory_line_icecream_lot0'), 'active_ids': [ref('stock_inventory_line_icecream_lot0')]}) + context.update({'active_model': 'stock.inventory.line', 'active_id': ref('stock_inventory_line_3'), 'active_ids': [ref('stock_inventory_line_3')]}) - !record {model: stock.inventory.line.split, id: split_inventory_lot0}: use_exist: True line_exist_ids: - quantity: 6 - prodlot_id: lot_icecream_0 + prodlot_id: lot_monitor_0 - quantity: 4 - prodlot_id: lot_icecream_0 + prodlot_id: lot_monitor_0 - !python {model: stock.inventory.line.split }: | self.split_lot(cr, uid, [ref('split_inventory_lot0')], context=context) @@ -93,39 +113,49 @@ I fill inventory line. - !python {model: stock.fill.inventory}: | - context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_icecream'), 'active_ids': [ref('stock_inventory_icecream')]}) + context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_0'), 'active_ids': [ref('stock_inventory_0')]}) - !record {model: stock.fill.inventory, id: fill_inventory}: - location_id: location_refrigerator + location_id: location_monitor recursive: True - !python {model: stock.fill.inventory }: | self.fill_inventory(cr, uid, [ref('fill_inventory')], context=context) - - Now I check vitual stock of Ice-cream after confirmed physical inventory. + Now I check vitual stock of 15” LCD Monitor after confirmed physical inventory. - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) + product = self.browse(cr, uid, ref('product_product_6'), context=context) assert product.virtual_available == 100, "Vitual stock is not updated." - - I close physical inventory of Ice-cream. + Only stock manager can close physical inventory, so let's check data with giving the access rights of manager +- + !context + uid: 'res_users_stock_manager' +- + I close physical inventory of 15” LCD Monitor. - !python {model: stock.inventory}: | - self.action_done(cr, uid, [ref('stock_inventory_icecream')], context=context) + self.action_done(cr, uid, [ref('stock_inventory_0')], context=context) - - I check closed move and real stock of Ice-cream after closed physical inventory. + Stock user can check closed move and real stock, so let's check data with giving the access rights of user +- + !context + uid: 'res_users_stock_user' +- + I check closed move and real stock of 15” LCD Monitor after closed physical inventory. - !python {model: stock.inventory}: | - inventory = self.browse(cr, uid, ref('stock_inventory_icecream'), context=context) + inventory = self.browse(cr, uid, ref('stock_inventory_0'), context=context) assert inventory.state == 'done', "inventory is not closed." for move_line in inventory.move_ids: assert move_line.state == 'done', "Move is not closed." - product = self.pool.get('product.product').browse(cr, uid, ref('product_icecream'), context=context) + product = self.pool.get('product.product').browse(cr, uid, ref('product_product_6'), context=context) product.qty_available == 100, "Real stock is not updated." - I check stock in lot. - !python {model: stock.production.lot}: | - lot = self.browse(cr, uid, ref('lot_icecream_0'), context=context) + lot = self.browse(cr, uid, ref('lot_monitor_0'), context=context) assert lot.stock_available == 50, "Stock in lot is not correspond." diff --git a/addons/stock/test/shipment.yml b/addons/stock/test/shipment.yml index b30feccdacf..5f2f4686621 100644 --- a/addons/stock/test/shipment.yml +++ b/addons/stock/test/shipment.yml @@ -1,9 +1,14 @@ - - I confirm outgoing shipment of 130 kgm Ice-cream. + Stock manager can only test whole process related to Shipment, so let's check data with stock manager. +- + !context + uid: 'res_users_stock_manager' +- + I confirm outgoing shipment of 130 Unit 15” LCD Monitor. - !workflow {model: stock.picking, action: button_confirm, ref: outgoing_shipment} - - I check shipment details after confirmed. + I check shipment details after confirmation. - !python {model: stock.picking}: | shipment = self.browse(cr, uid, ref("outgoing_shipment")) @@ -12,121 +17,25 @@ assert move_line.state == "confirmed", "Move should be confirmed." - - Now I check vitual stock of Ice-cream after confirmed outgoing shipment. + Now, I check virtual stock of 15” LCD Monitor after confirming outgoing shipment. - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) - product.virtual_available == -30, "Vitual stock is not updated." + product = self.browse(cr, uid, ref('product_product_6'), context=context) + assert product.virtual_available == -30, "Virtual stock is not updated." - - I confirm incomming shipment of 50 kgm Ice-cream. + I confirm incoming shipment of 50 Unit 15” LCD Monitor. - !workflow {model: stock.picking, action: button_confirm, ref: incomming_shipment} - - I receive 40kgm Ice-cream so I make backorder of incomming shipment for 40 kgm. -- - !python {model: stock.partial.picking}: | - context.update({'active_model': 'stock.picking', 'active_id': ref('incomming_shipment'), 'active_ids': [ref('incomming_shipment')]}) -- - !record {model: stock.partial.picking, id: partial_incomming}: - move_ids: - - quantity: 40 - product_id: product_icecream - product_uom: product.product_uom_kgm - move_id: incomming_shipment_icecream - location_id: location_convenience_shop - location_dest_id: location_refrigerator -- - !python {model: stock.partial.picking }: | - self.do_partial(cr, uid, [ref('partial_incomming')], context=context) -- - I check backorder shipment after received partial shipment. + I split incoming shipment into lots. each lot contain 10 Unit 15” LCD Monitor. - !python {model: stock.picking}: | shipment = self.browse(cr, uid, ref("incomming_shipment")) - backorder = shipment.backorder_id - assert backorder, "Backorder should be created after partial shipment." - assert backorder.state == 'done', "Backorder should be close after received." - for move_line in backorder.move_lines: - assert move_line.product_qty == 40, "Qty in backorder does not correspond." - assert move_line.state == 'done', "Move line of backorder should be closed." -- - I receive another 10kgm Ice-cream. -- - !record {model: stock.partial.picking, id: partial_incomming}: - move_ids: - - quantity: 10 - product_id: product_icecream - product_uom: product.product_uom_kgm - move_id: incomming_shipment_icecream - location_id: location_convenience_shop - location_dest_id: location_refrigerator -- - !python {model: stock.partial.picking }: | - self.do_partial(cr, uid, [ref('partial_incomming')], context=context) - -- - I check incomming shipment after received. -- - !python {model: stock.picking}: | - shipment = self.browse(cr, uid, ref("incomming_shipment")) - assert shipment.state == 'done', "shipment should be close after received." - for move_line in shipment.move_lines: - assert move_line.product_qty == 10, "Qty does not correspond." - assert move_line.product_id.virtual_available == 20, "Virtual stock does not correspond." - assert move_line.state == 'done', "Move line should be closed." - -- - I return last incomming shipment for 10 kgm Ice-cream. -- - !record {model: stock.return.picking, id: return_incomming}: - invoice_state: none -- - !python {model: stock.return.picking }: | - # this work without giving the id of the picking to return, magically, thanks to the context - self.create_returns(cr, uid, [ref('return_incomming')], context=context) -- - I cancel incomming shipment after return it. -- - !python {model: stock.picking}: | - # the cancel is not on the return, but on the incomming shipment (which now has a quantity of 10, thanks to the - # backorder). This situation is a little weird as we returned a move that we finally cancelled... As result, only - # 30Kg from the original 50Kg will be counted in the stock (50 - 10 (cancelled quantity) - 10 (returned quantity)) - self.action_cancel(cr, uid, [ref("incomming_shipment")], context=context) -- - I make invoice of backorder of incomming shipment. -- - !python {model: stock.invoice.onshipping}: | - shipment = self.pool.get('stock.picking').browse(cr, uid, ref("incomming_shipment")) - context.update({'active_model': 'stock.picking', 'active_id': shipment.backorder_id.id, 'active_ids': [shipment.backorder_id.id]}) -- - !record {model: stock.invoice.onshipping, id: invoice_incomming}: - group: False -- - !python {model: stock.invoice.onshipping }: | - self.create_invoice(cr, uid, [ref('invoice_incomming')], context=context) -- - I check invoice state of backorder of incomming shipment. -- - !python {model: stock.picking}: | - shipment = self.browse(cr, uid, ref("incomming_shipment")) - assert shipment.backorder_id.invoice_state == 'invoiced', 'Invoice state is not upadted.' -- - I check available stock after received incomming shipping. -- - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) - assert product.qty_available == 140, "Stock does not correspond." - assert product.virtual_available == 0, "Vitual stock does not correspond." -- - I split incomming shipment into lots. each lot contain 10 kgm Ice-cream. -- - !python {model: stock.picking}: | - shipment = self.browse(cr, uid, ref("incomming_shipment")) - move_ids = [x.id for x in shipment.backorder_id.move_lines] + move_ids = [x.id for x in shipment.move_lines] context.update({'active_model': 'stock.move', 'active_id': move_ids[0], 'active_ids': move_ids}) - - !record {model: stock.move.split, id: split_lot_incomming}: + !record {model: stock.move.split, id: split_lot_incoming}: line_ids: - name: incoming_lot0 quantity: 10 @@ -136,23 +45,123 @@ quantity: 10 - name: incoming_lot3 quantity: 10 - - !python {model: stock.move.split }: | - self.split_lot(cr, uid, [ref('split_lot_incomming')], context=context) + self.split_lot(cr, uid, [ref('split_lot_incoming')], context=context) - - I check move lines after spliting + I check move lines after splitting. - !python {model: stock.move}: | - lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incomming'), context=context) + mm = self.browse(cr, uid, ref("incomming_shipment_monitor")) + lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incoming'), context=context) lot_ids = self.pool.get('stock.production.lot').search(cr, uid, [('name','in',[x.name for x in lot.line_ids])]) - assert len(lot_ids) == 4, 'lots of incomming shipment are not correspond.' - move_ids = self.search(cr, uid, [('location_dest_id','=',ref('location_refrigerator')),('prodlot_id','in',lot_ids)]) - assert len(move_ids) == 4, 'move lines are not correspond per prodcution lot after splited.' + assert len(lot_ids) == 4, 'lots of incoming shipment are not correspond.' + move_ids = self.search(cr, uid, [('location_dest_id','=',ref('location_monitor')),('prodlot_id','in',lot_ids)]) + assert len(move_ids) == 4, 'move lines are not correspond per production lot after splitting.' for move in self.browse(cr, uid, move_ids, context=context): assert move.prodlot_id.name in ['incoming_lot0', 'incoming_lot1', 'incoming_lot2', 'incoming_lot3'], "lot does not correspond." assert move.product_qty == 10, "qty does not correspond per production lot." - context.update({'active_model':'stock.move', 'active_id':move_ids[0],'active_ids': move_ids}) +- + I receive 40 units of 15” LCD Monitor. +- + !python {model: stock.partial.picking}: | + context.update({'active_model': 'stock.picking', 'active_id': ref('incomming_shipment'), 'active_ids': [ref('incomming_shipment')]}) +- + !python {model: stock.partial.picking}: | + partial = [] + for move in self.pool.get('stock.picking').browse(cr, uid, ref("incomming_shipment")).move_lines: + if move.prodlot_id: + partial.append((0, 0, { + 'quantity': move.product_qty, + 'product_id': move.product_id.id, + 'product_uom': move.product_uom.id, + 'move_id': move.id, + 'location_id': move.location_id.id, + 'location_dest_id': move.location_dest_id.id, + 'prodlot_id': move.prodlot_id.id, + 'cost': move.product_id.standard_price + })) + partial_id = self.create(cr, uid, {'move_ids': partial}, context=context) + self.do_partial(cr, uid, [partial_id], context=context) +- + I check backorder shipment after receiving partial shipment. +- + !python {model: stock.picking}: | + shipment = self.browse(cr, uid, ref("incomming_shipment")) + backorder = shipment.backorder_id + assert backorder, "Backorder should be created after partial shipment." + assert backorder.state == 'done', "Backorder should be closed after received." + qty = 0 + for move_line in backorder.move_lines: + assert move_line.state == 'done', "Move line of backorder should be closed." + qty += move_line.product_qty + assert qty == 40, "Qty in backorder does not correspond." +- + I receive another 10 units of 15” LCD Monitor. +- + !record {model: stock.partial.picking, id: partial_incoming}: + move_ids: + - quantity: 10 + product_id: product_product_6 + product_uom: product.product_uom_unit + move_id: incomming_shipment_monitor + location_id: stock_location_3 + location_dest_id: location_monitor +- + !python {model: stock.partial.picking }: | + self.do_partial(cr, uid, [ref('partial_incoming')], context=context) +- + I check incoming shipment after receiving it. +- + !python {model: stock.picking}: | + shipment = self.browse(cr, uid, ref("incomming_shipment")) + assert shipment.state == 'done', "shipment should be closed after receiving." + for move_line in shipment.move_lines: + assert move_line.product_qty == 10, "Qty does not correspond." + assert move_line.product_id.virtual_available == 20, "Virtual stock does not correspond." + assert move_line.state == 'done', "Move line should be closed." +- + I return last incoming shipment for 10 Unit 15” LCD Monitor. +- + !record {model: stock.return.picking, id: return_incoming}: + invoice_state: none +- + !python {model: stock.return.picking }: | + # this work without giving the id of the picking to return, magically, thanks to the context + self.create_returns(cr, uid, [ref('return_incoming')], context=context) +- + I cancel incoming shipment after returning it. +- + !python {model: stock.picking}: | + # the cancel is not on the return, but on the incoming shipment (which now has a quantity of 10, thanks to the + # backorder). This situation is a little weird as we returned a move that we finally cancelled... As result, only + # 30Unit from the original 50Unit will be counted in the stock (50 - 10 (cancelled quantity) - 10 (returned quantity)) + self.action_cancel(cr, uid, [ref("incomming_shipment")], context=context) +- + I make invoice of backorder of incoming shipment. +- + !python {model: stock.invoice.onshipping}: | + shipment = self.pool.get('stock.picking').browse(cr, uid, ref("incomming_shipment")) + context.update({'active_model': 'stock.picking', 'active_id': shipment.backorder_id.id, 'active_ids': [shipment.backorder_id.id]}) +- + !record {model: stock.invoice.onshipping, id: invoice_incoming}: + group: False +- + !python {model: stock.invoice.onshipping }: | + self.create_invoice(cr, uid, [ref('invoice_incoming')], context=context) +- + I check invoice status of backorder of incoming shipment. +- + !python {model: stock.picking}: | + shipment = self.browse(cr, uid, ref("incomming_shipment")) + assert shipment.backorder_id.invoice_state == 'invoiced', 'Invoice state is not updated.' +- + I check available stock after receiving incoming shipping. +- + !python {model: product.product}: | + product = self.browse(cr, uid, ref('product_product_6'), context=context) + assert product.qty_available == 140, "Stock does not correspond." + assert product.virtual_available == 0, "Virtual stock does not correspond." - I check the stock valuation account entries. - @@ -161,91 +170,90 @@ account_move_ids = self.search(cr, uid, [('ref','=',incomming_shipment.name)]) assert len(account_move_ids), "account move should be created." account_move = self.browse(cr, uid, account_move_ids[0], context=context) - assert len(account_move.line_id) == len(incomming_shipment.move_lines) + 1, 'accuont entries are not correspond.' + assert len(account_move.line_id) == len(incomming_shipment.move_lines) + 1, 'Accounting entries does not correspond.' for account_move_line in account_move.line_id: for stock_move in incomming_shipment.move_lines: if account_move_line.account_id.id == stock_move.product_id.property_stock_account_input.id: - assert account_move_line.credit == 800.0, "Credit amount does not correspond." + assert account_move_line.credit == 14000.0, "Credit amount does not correspond." assert account_move_line.debit == 0.0, "Debit amount does not correspond." else: assert account_move_line.credit == 0.0, "Credit amount does not correspond." - assert account_move_line.debit == 800.0, "Debit amount does not correspond." -- - I consume 1 kgm ice-cream from each incoming lots into internal production. -- - !record {model: stock.move.consume, id: consume_lot_incomming}: - product_qty: 1 - location_id: location_refrigerator -- - !python {model: stock.move.consume}: | - self.do_move_consume(cr, uid, [ref('consume_lot_incomming')], context=context) -- - I scrap 10 gm ice-cream from each incoming lots into scrap location. -- - !record {model: stock.move.scrap, id: scrap_lot_incomming}: - product_qty: 0.010 -- - !python {model: stock.move.scrap}: | - self.move_scrap(cr, uid, [ref('scrap_lot_incomming')], context=context) -- - I check stock in scrap location and refrigerator location. -- - !python {model: stock.location}: | - ctx = {'product_id': ref('product_icecream')} - refrigerator_location = self.pool.get('stock.location').browse(cr, uid, ref('location_refrigerator'), context=ctx) - assert refrigerator_location.stock_real == 135.96, 'stock does not correspond in refrigerator location.' - scrapped_location = self.browse(cr, uid, ref('stock_location_scrapped'), context=ctx) - assert scrapped_location.stock_real == 0.010*4, 'scraped stock does not correspond in scrap location.' - -- - I check availabile stock after consumed and scraped. -- - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) - assert product.qty_available == 135.96, "Stock does not correspond." - assert round(product.virtual_available, 2) == -4.04, "Vitual stock does not correspond." + assert account_move_line.debit == 14000.0, "Debit amount does not correspond." - I trace all incoming lots. - !python {model: stock.production.lot }: | - lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incomming'), context=context) + lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incoming'), context=context) lot_ids = self.search(cr, uid, [('name', 'in', [x.name for x in lot.line_ids])]) self.action_traceability(cr, uid, lot_ids, context=context) - - I check outgoing shipment after stock availablity in refrigerator. + I check outgoing shipment after stock availability in Chicago shop. - !python {model: stock.picking}: | shipment = self.browse(cr, uid, ref("outgoing_shipment"), context=context) - self.pool.get('stock.move').action_assign(cr, uid, [x.id for x in shipment.move_lines]) #TOFIX: assignment of move lines should be call before testing assigment otherwise picking never gone in assign state - #TOFIX: shipment should be assigned if stock available - #assert shipment.state == "assigned", "Shipment should be assigned." - #for move_line in shipment.move_lines: - # assert move_line.state == "assigned", "Move should be assigned." + self.pool.get('stock.move').action_assign(cr, uid, [x.id for x in shipment.move_lines]) + assert shipment.state == "assigned", "Shipment should be assigned." + for move_line in shipment.move_lines: + assert move_line.state == "assigned", "Move should be assigned." self.force_assign(cr, uid, [shipment.id]) + context.update({'active_model':'stock.move', 'active_id':shipment.move_lines[0].id,'active_ids': [shipment.move_lines[0].id]}) - - I deliver 5kgm Ice-cream to customer so I make partial deliver + I scrap 4 units of 15” LCD Monitor into scrap location. +- + !record {model: stock.move.scrap, id: scrap_monitor1}: + product_qty: 4 +- + !python {model: stock.move.scrap}: | + self.move_scrap(cr, uid, [ref('scrap_monitor1')], context=context) +- + I consume 4 units of 15” LCD Monitor. +- + !record {model: stock.move.consume, id: consume_monitor1}: + product_qty: 4 + location_id: location_monitor +- + !python {model: stock.move.consume}: | + self.do_move_consume(cr, uid, [ref('consume_monitor1')], context=context) +- + I check stock in scrap location and stock location. +- + !python {model: stock.location}: | + ctx = {'product_id': ref('product_product_6')} + monitor_location = self.pool.get('stock.location').browse(cr, uid, ref('location_monitor'), context=ctx) + assert monitor_location.stock_real == 132.0, 'stock does not correspond in stock location shop0.' + scrapped_location = self.browse(cr, uid, ref('stock_location_scrapped'), context=ctx) + assert scrapped_location.stock_real == 4, 'scraped stock does not correspond in scrap location.' +- + I check available stock after consumed and scraped move. +- + !python {model: product.product}: | + product = self.browse(cr, uid, ref('product_product_6'), context=context) + assert product.qty_available == 132.0, "Stock does not correspond." + assert round(product.virtual_available, 2) == -4.00, "Virtual stock does not correspond." +- + I deliver 5 Unit 15” LCD Monitor to customer partially. - !python {model: stock.partial.move}: | - context.update({'active_model': 'stock.move', 'active_id': ref('outgoing_shipment_icecream'), 'active_ids': [ref('outgoing_shipment_icecream')]}) + context.update({'active_model': 'stock.move', 'active_id': ref('outgoing_shipment_monitor'), 'active_ids': [ref('outgoing_shipment_monitor')]}) - - !record {model: stock.partial.move, id: partial_outgoing_icecream}: + !record {model: stock.partial.move, id: partial_outgoing_monitor}: move_ids: - quantity: 5 - product_id: product_icecream - product_uom: product.product_uom_kgm - move_id: outgoing_shipment_icecream - location_id: location_refrigerator - location_dest_id: location_delivery_counter + product_id: product_product_6 + product_uom: product.product_uom_unit + move_id: outgoing_shipment_monitor + location_id: location_monitor + location_dest_id: stock_location_output - !python {model: stock.partial.move }: | - self.do_partial(cr, uid, [ref('partial_outgoing_icecream')], context=context) + self.do_partial(cr, uid, [ref('partial_outgoing_monitor')], context=context) - - I packing outgoing shipment into box per 10kgm with unique tracking lot. + I pack outgoing shipment into box of 10 Unit with unique tracking lot. - !python {model: stock.move}: | stock_split = self.pool.get('stock.split.into') - move = self.browse(cr, uid, ref('outgoing_shipment_icecream'), context=context) + move = self.browse(cr, uid, ref('outgoing_shipment_monitor'), context=context) context.update({'active_model': 'stock.move', 'active_id': move.id, 'active_ids': [move.id]}) total_qty = move.product_qty split_qty = 10 @@ -254,7 +262,7 @@ stock_split.split(cr, uid, [split_id], context=context) total_qty -= split_qty - - I deliver outgoing shipment. + I deliver the outgoing shipment. - !python {model: stock.partial.picking}: | context.update({'active_model': 'stock.picking', 'active_id': ref('outgoing_shipment'), 'active_ids': [ref('outgoing_shipment')]}) @@ -266,7 +274,7 @@ self.do_partial(cr, uid, [ref('partial_outgoing')], context=context) - - I check outgoing shipment after deliver. + I check outgoing shipment after delivery. - !python {model: stock.picking}: | shipment = self.browse(cr, uid, ref("outgoing_shipment"), context=context) @@ -274,9 +282,9 @@ for move_line in shipment.move_lines: assert move_line.state == "done", "Move should be closed." - - I check availaible stock after deliver. + I check available stock after delivery. - !python {model: product.product}: | - product = self.browse(cr, uid, ref('product_icecream'), context=context) - assert round(product.qty_available, 2) == 5.96, "Stock does not correspond." - assert round(product.virtual_available, 2) == -4.04, "Vitual stock does not correspond." + product = self.browse(cr, uid, ref('product_product_6'), context=context) + assert round(product.qty_available, 2) == 6, "Stock does not correspond." + assert round(product.virtual_available, 2) == -4.00, "Virtual stock does not correspond." diff --git a/addons/stock/test/stock_report.yml b/addons/stock/test/stock_report.yml index 5c5932446eb..21ed6046805 100644 --- a/addons/stock/test/stock_report.yml +++ b/addons/stock/test/stock_report.yml @@ -1,41 +1,56 @@ +- + Stock user can print all reports related to stock, so let's check data with giving the access rights of user. +- + !context + uid: 'res_users_stock_user' - I print a stock overview report of location. - !python {model: stock.location}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.lot.stock.overview').create(cr, uid, [ref('location_refrigerator')], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('location_monitor')], 'lot.stock.overview', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-overview'+format), 'wb+').write(data) - I print a Stock Overview report of location with child location. - !python {model: stock.location}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.lot.stock.overview_all').create(cr, uid, [ref('location_refrigerator')], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('location_monitor')], 'lot.stock.overview_all', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-overviewall'+format), 'wb+').write(data) - I print a Stock Inventory report. - !python {model: stock.inventory}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.stock.inventory.move').create(cr, uid, [ref('stock_inventory_icecream')], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('stock_inventory_0')], 'stock.inventory.move', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-stock_inventory_move.'+format), 'wb+').write(data) - I print a outgoing shipment report. - !python {model: stock.picking}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.stock.picking.list').create(cr, uid, [ref('outgoing_shipment')], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('outgoing_shipment')], 'stock.picking.list', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-picking_list'+format), 'wb+').write(data) - I print stock Report. - !python {model: product.product}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.stock.product.history').create(cr, uid, [ref('product_icecream')], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref('product_product_6')], 'stock.product.history', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-product_stock_report.'+format), 'wb+').write(data) diff --git a/addons/stock/test/stock_users.yml b/addons/stock/test/stock_users.yml new file mode 100644 index 00000000000..d0c09dc745d --- /dev/null +++ b/addons/stock/test/stock_users.yml @@ -0,0 +1,30 @@ +- + Create a user as 'Stock Manager' +- + !record {model: res.users, id: res_users_stock_manager}: + company_id: base.main_company + name: Stock Manager + login: sam + password: sam + email: stockmanager@yourcompany.com +- + I added groups for Stock Manager. +- + !record {model: res.users, id: res_users_stock_manager}: + groups_id: + - stock.group_stock_manager +- + Create a user as 'Stock User' +- + !record {model: res.users, id: res_users_stock_user}: + company_id: base.main_company + name: Stock User + login: sau + password: sau + email: stockuser@yourcompany.com +- + I added groups for Stock User. +- + !record {model: res.users, id: res_users_stock_user}: + groups_id: + - stock.group_stock_user From 90ddb9f8975d9d99fadd864538f6e9f285d63b79 Mon Sep 17 00:00:00 2001 From: Lionel Sausin Date: Fri, 4 Apr 2014 11:52:02 +0200 Subject: [PATCH 3/9] [FIX] revert to v7 report API bzr revid: ls@numerigraphe.com-20140404095202-wwegxz9qp00o8yuw --- addons/stock/test/stock_report.yml | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/addons/stock/test/stock_report.yml b/addons/stock/test/stock_report.yml index 21ed6046805..effbf2affe2 100644 --- a/addons/stock/test/stock_report.yml +++ b/addons/stock/test/stock_report.yml @@ -7,50 +7,40 @@ I print a stock overview report of location. - !python {model: stock.location}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('location_monitor')], 'lot.stock.overview', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.lot.stock.overview').create(cr, uid, [ref('location_monitor')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-overview'+format), 'wb+').write(data) - I print a Stock Overview report of location with child location. - !python {model: stock.location}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('location_monitor')], 'lot.stock.overview_all', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.lot.stock.overview_all').create(cr, uid, [ref('location_monitor')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-overviewall'+format), 'wb+').write(data) - I print a Stock Inventory report. - !python {model: stock.inventory}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('stock_inventory_0')], 'stock.inventory.move', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.stock.inventory.move').create(cr, uid, [ref('stock_inventory_0')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-stock_inventory_move.'+format), 'wb+').write(data) - I print a outgoing shipment report. - !python {model: stock.picking}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('outgoing_shipment')], 'stock.picking.list', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.stock.picking.list').create(cr, uid, [ref('outgoing_shipment')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-picking_list'+format), 'wb+').write(data) - I print stock Report. - !python {model: product.product}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref('product_product_6')], 'stock.product.history', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.stock.product.history').create(cr, uid, [ref('product_product_6')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'stock-product_stock_report.'+format), 'wb+').write(data) From bae4c6ce408c3cd9cb7491b94e20a0082eb60f40 Mon Sep 17 00:00:00 2001 From: "Foram Katharotiya (OpenERP)" Date: Fri, 4 Apr 2014 14:30:03 +0200 Subject: [PATCH 4/9] [IMP] bring back the tests for MRP - backported from little after v7.0 in the trunk lp bug: https://launchpad.net/bugs/1182515 fixed bzr revid: ls@numerigraphe.com-20140404123003-cdt5zz1vmupbgd1j --- addons/mrp/__openerp__.py | 9 ++++----- addons/mrp/security/ir.model.access.csv | 1 + addons/mrp/security/mrp_security.xml | 1 + addons/mrp/test/cancel_order.yml | 5 +++++ addons/mrp/test/mrp_users.yml | 20 ++++++++++++++++++++ addons/mrp/test/order_demo.yml | 5 +++++ addons/mrp/test/order_process.yml | 5 +++++ 7 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 addons/mrp/test/mrp_users.yml diff --git a/addons/mrp/__openerp__.py b/addons/mrp/__openerp__.py index d33fa4d2622..3157eee57bc 100644 --- a/addons/mrp/__openerp__.py +++ b/addons/mrp/__openerp__.py @@ -74,13 +74,12 @@ Dashboard / Reports for MRP will include: 'res_config_view.xml', ], 'demo': ['mrp_demo.xml'], - #TODO: This yml tests are needed to be completely reviewed again because the product wood panel is removed in product demo as it does not suit for new demo context of computer and consultant company - # so the ymls are too complex to change at this stage 'test': [ 'test/bom_with_service_type_product.yml', -# 'test/order_demo.yml', -# 'test/order_process.yml', -# 'test/cancel_order.yml', + 'test/mrp_users.yml', + 'test/order_demo.yml', + 'test/order_process.yml', + 'test/cancel_order.yml', ], 'installable': True, 'application': True, diff --git a/addons/mrp/security/ir.model.access.csv b/addons/mrp/security/ir.model.access.csv index 7a94b1a660c..2d0a478c33d 100644 --- a/addons/mrp/security/ir.model.access.csv +++ b/addons/mrp/security/ir.model.access.csv @@ -1,4 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_account_analytic_line_user,account.analytic.line,account.model_account_analytic_line,group_mrp_user,1,1,1,0 access_mrp_workcenter,mrp.workcenter,model_mrp_workcenter,mrp.group_mrp_user,1,0,0,0 access_mrp_routing,mrp.routing,model_mrp_routing,mrp.group_mrp_user,1,0,0,0 access_mrp_routing_workcenter,mrp.routing.workcenter,model_mrp_routing_workcenter,mrp.group_mrp_user,1,0,0,0 diff --git a/addons/mrp/security/mrp_security.xml b/addons/mrp/security/mrp_security.xml index 35aae42b53d..9e5dc919720 100644 --- a/addons/mrp/security/mrp_security.xml +++ b/addons/mrp/security/mrp_security.xml @@ -4,6 +4,7 @@ User + diff --git a/addons/mrp/test/cancel_order.yml b/addons/mrp/test/cancel_order.yml index 9e197156b15..2f721b6c653 100644 --- a/addons/mrp/test/cancel_order.yml +++ b/addons/mrp/test/cancel_order.yml @@ -1,3 +1,8 @@ +- + MRP user can cancelled Production Order, so let's check data with giving the access rights of user. +- + !context + uid: 'res_users_mrp_user' - I first confirm order for PC Assemble SC349. - diff --git a/addons/mrp/test/mrp_users.yml b/addons/mrp/test/mrp_users.yml new file mode 100644 index 00000000000..d18cc51e8e6 --- /dev/null +++ b/addons/mrp/test/mrp_users.yml @@ -0,0 +1,20 @@ +- + Create a user as 'MRP Manager' +- + !record {model: res.users, id: res_users_mrp_manager}: + company_id: base.main_company + name: MRP Manager + login: mam + password: mam + groups_id: + - mrp.group_mrp_manager +- + Create a user as 'MRP User' +- + !record {model: res.users, id: res_users_mrp_user}: + company_id: base.main_company + name: MRP User + login: mau + password: mau + groups_id: + - mrp.group_mrp_user diff --git a/addons/mrp/test/order_demo.yml b/addons/mrp/test/order_demo.yml index ee21fee96df..0e4914390fb 100644 --- a/addons/mrp/test/order_demo.yml +++ b/addons/mrp/test/order_demo.yml @@ -1,3 +1,8 @@ +- + MRP user can create Production Order, so let's check data with giving the access rights of user. +- + !context + uid: 'res_users_mrp_user' - I create Production Order of PC Assemble SC349 to produce 5.0 Unit. - diff --git a/addons/mrp/test/order_process.yml b/addons/mrp/test/order_process.yml index e672517c5a0..32eee92bac0 100644 --- a/addons/mrp/test/order_process.yml +++ b/addons/mrp/test/order_process.yml @@ -1,3 +1,8 @@ +- + MRP user can doing all process related to Production Order, so let's check data with giving the access rights of user. +- + !context + uid: 'res_users_mrp_user' - I compute the production order. - From af64d6cc970c1ac64868e05839e4461ea174ab1f Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Fri, 4 Apr 2014 14:36:55 +0200 Subject: [PATCH 5/9] [FIX] changes made at merge time into the trunk - remove offending test bzr revid: ls@numerigraphe.com-20140404123655-9ihrychuho6n6qt2 --- addons/mrp/test/mrp_users.yml | 13 +++++++- addons/mrp/test/order_process.yml | 52 ++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/addons/mrp/test/mrp_users.yml b/addons/mrp/test/mrp_users.yml index d18cc51e8e6..05c4889cf28 100644 --- a/addons/mrp/test/mrp_users.yml +++ b/addons/mrp/test/mrp_users.yml @@ -6,8 +6,14 @@ name: MRP Manager login: mam password: mam + email: mrp_manager@yourcompany.com +- + I added groups for MRP Manager. +- + !record {model: res.users, id: res_users_mrp_manager}: groups_id: - mrp.group_mrp_manager + - account.group_account_user - Create a user as 'MRP User' - @@ -16,5 +22,10 @@ name: MRP User login: mau password: mau + email: mrp_user@yourcompany.com +- + I added groups for MRP User. +- + !record {model: res.users, id: res_users_mrp_user}: groups_id: - - mrp.group_mrp_user + - mrp.group_mrp_user \ No newline at end of file diff --git a/addons/mrp/test/order_process.yml b/addons/mrp/test/order_process.yml index 32eee92bac0..c4050208570 100644 --- a/addons/mrp/test/order_process.yml +++ b/addons/mrp/test/order_process.yml @@ -1,5 +1,5 @@ - - MRP user can doing all process related to Production Order, so let's check data with giving the access rights of user. + MRP user can doing all process related to Production Order, so let's check data with giving the access rights of user. - !context uid: 'res_users_mrp_user' @@ -19,7 +19,7 @@ Now I check workcenter lines. - !python {model: mrp.production}: | - from tools import float_compare + from openerp.tools import float_compare def assert_equals(value1, value2, msg, float_compare=float_compare): assert float_compare(value1, value2, precision_digits=2) == 0, msg order = self.browse(cr, uid, ref("mrp_production_test1"), context=context) @@ -28,6 +28,7 @@ I confirm the Production Order. - !workflow {model: mrp.production, action: button_confirm, ref: mrp_production_test1} + - I check details of Produce Move of Production Order to trace Final Product. - @@ -63,6 +64,16 @@ assert move_line.product_uos.id == order_line.product_uos.id, "UOS is not correspond in 'To consume line'." assert move_line.location_id.id == routing_loc or order.location_src_id.id, "Source location is not correspond in 'To consume line'." assert move_line.location_dest_id.id == source_location_id, "Destination Location is not correspond in 'To consume line'." +- + I consume raw materials and put one material in scrap location due to waste it. +- + !python {model: mrp.production}: | + scrap_location_ids = self.pool.get('stock.location').search(cr, uid, [('scrap_location','=',True)]) + scrap_location_id = scrap_location_ids[0] + order = self.browse(cr, uid, ref("mrp_production_test1")) + for move in order.move_lines: + if move.product_id.id == ref("product.product_product_6"): + move.action_scrap(5.0, scrap_location_id) - I check details of an Internal Shipment after confirmed production order to bring components in Raw Materials Location. - @@ -99,6 +110,11 @@ procurement_ids = procurement.search(cr, uid, [('move_id','=',move_line.id)]) assert procurement_ids, "Procurement should be created for shipment line of raw materials." shipment_procurement = procurement.browse(cr, uid, procurement_ids[0], context=context) + # procurement state should be `confirmed` at this stage, except if mrp_jit is installed, in which + # case it could already be in `running` or `exception` state (not enough stock) + expected_states = ('confirmed', 'running', 'exception') + assert shipment_procurement.state in expected_states, 'Procurement state is `%s` for %s, expected one of %s' % \ + (shipment_procurement.state, shipment_procurement.product_id.name, expected_states) assert shipment_procurement.date_planned == date_planned, "Planned date is not correspond in procurement." assert shipment_procurement.product_id.id == order_line.product_id.id, "Product is not correspond in procurement." assert shipment_procurement.product_qty == order_line.product_qty, "Qty is not correspond in procurement." @@ -155,17 +171,7 @@ order = self.browse(cr, uid, ref("mrp_production_test1")) assert order.state == 'in_production', 'Production order should be in production State.' - - I consume raw materials and put one material in scrap location due to waste it. -- - !python {model: mrp.production}: | - scrap_location_ids = self.pool.get('stock.location').search(cr, uid, [('scrap_location','=',True)]) - scrap_location_id = scrap_location_ids[0] - order = self.browse(cr, uid, ref("mrp_production_test1")) - for move in order.move_lines: move.action_consume(move.product_qty) - if move.product_id.id == ref("product.product_product_6"): - move.action_scrap(5.0, scrap_location_id) -- I produce product. - !python {model: mrp.product.produce}: | @@ -183,7 +189,10 @@ order = self.browse(cr, uid, ref("mrp_production_test1")) assert order.state == 'done', "Production order should be closed." - - I check Total Costs at End of Production. + I check Total Costs at End of Production as a manager. +- + !context + uid: 'res_users_mrp_manager' - !python {model: mrp.production}: | order = self.browse(cr, uid, ref("mrp_production_test1")) @@ -217,19 +226,26 @@ assert line.product_uom_id.id == wc.product_id.uom_id.id, "UOM is not correspond." - I print a "BOM Structure". +- + !context + uid: 'res_users_mrp_user' - !python {model: mrp.production}: | - import netsvc, tools, os + import os + import openerp.report + from openerp import tools order = self.browse(cr, uid, ref("mrp_production_test1")) - (data, format) = netsvc.LocalService('report.bom.structure').create(cr, uid, [order.bom_id.id], {}, {}) + data, format = openerp.report.render_report(cr, uid, [order.bom_id.id], 'bom.structure', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp-bom_structure_report.'+format), 'wb+').write(data) - I print "Production Order". - !python {model: mrp.production}: | - import netsvc, tools, os - (data, format) = netsvc.LocalService('report.mrp.production.order').create(cr, uid, [ref("mrp_production_test1")], {}, {}) + import os + import openerp.report + from openerp import tools + data, format = openerp.report.render_report(cr, uid, [ref("mrp_production_test1")], 'mrp.production.order', {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp-production_order_report.'+format), 'wb+').write(data) - @@ -239,6 +255,6 @@ ctx = context.copy() ctx.update({'model': 'mrp.workcenter','active_ids': [ref('mrp_workcenter_0'),ref('mrp_workcenter_1')]}) data_dict = {'time_unit': 'day', 'measure_unit': 'hours'} - from tools import test_reports + from openerp.tools import test_reports test_reports.try_report_action(cr, uid, 'action_mrp_workcenter_load_wizard',wiz_data=data_dict, context=ctx, our_module='mrp') From a386aea7d3790f15337fc4a55ea14f635bd4ab5e Mon Sep 17 00:00:00 2001 From: Lionel Sausin Date: Fri, 4 Apr 2014 14:40:36 +0200 Subject: [PATCH 6/9] [FIX] revert to v7 report API bzr revid: ls@numerigraphe.com-20140404124036-1vt0fkakfllj1qax --- addons/mrp/test/order_process.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/addons/mrp/test/order_process.yml b/addons/mrp/test/order_process.yml index c4050208570..bbafe5b6b27 100644 --- a/addons/mrp/test/order_process.yml +++ b/addons/mrp/test/order_process.yml @@ -231,21 +231,17 @@ uid: 'res_users_mrp_user' - !python {model: mrp.production}: | - import os - import openerp.report - from openerp import tools + import netsvc, tools, os order = self.browse(cr, uid, ref("mrp_production_test1")) - data, format = openerp.report.render_report(cr, uid, [order.bom_id.id], 'bom.structure', {}, {}) + (data, format) = netsvc.LocalService('report.bom.structure').create(cr, uid, [order.bom_id.id], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp-bom_structure_report.'+format), 'wb+').write(data) - I print "Production Order". - !python {model: mrp.production}: | - import os - import openerp.report - from openerp import tools - data, format = openerp.report.render_report(cr, uid, [ref("mrp_production_test1")], 'mrp.production.order', {}, {}) + import netsvc, tools, os + (data, format) = netsvc.LocalService('report.mrp.production.order').create(cr, uid, [ref("mrp_production_test1")], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp-production_order_report.'+format), 'wb+').write(data) - @@ -255,6 +251,6 @@ ctx = context.copy() ctx.update({'model': 'mrp.workcenter','active_ids': [ref('mrp_workcenter_0'),ref('mrp_workcenter_1')]}) data_dict = {'time_unit': 'day', 'measure_unit': 'hours'} - from openerp.tools import test_reports + from tools import test_reports test_reports.try_report_action(cr, uid, 'action_mrp_workcenter_load_wizard',wiz_data=data_dict, context=ctx, our_module='mrp') From 1adc0b785a2e1d6020ecc084eb443096eddf58a9 Mon Sep 17 00:00:00 2001 From: "Foram Katharotiya (OpenERP)" Date: Fri, 4 Apr 2014 14:45:18 +0200 Subject: [PATCH 7/9] [IMP] bring back the tests for mrp_operations - backported from little after v7.0 in the trunk lp bug: https://launchpad.net/bugs/1182515 fixed bzr revid: ls@numerigraphe.com-20140404124518-jv77xw4z0ouoaqlz --- addons/mrp_operations/__openerp__.py | 2 +- .../test/workcenter_operations.yml | 24 ++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/addons/mrp_operations/__openerp__.py b/addons/mrp_operations/__openerp__.py index 7fedb426edd..12d86e0b532 100644 --- a/addons/mrp_operations/__openerp__.py +++ b/addons/mrp_operations/__openerp__.py @@ -70,7 +70,7 @@ So, that we can compare the theoretic delay and real delay. 'mrp_operations_demo.yml' ], 'test': [ -# 'test/workcenter_operations.yml', + 'test/workcenter_operations.yml', ], 'installable': True, 'auto_install': False, diff --git a/addons/mrp_operations/test/workcenter_operations.yml b/addons/mrp_operations/test/workcenter_operations.yml index c1449657967..f402e1cddd4 100644 --- a/addons/mrp_operations/test/workcenter_operations.yml +++ b/addons/mrp_operations/test/workcenter_operations.yml @@ -1,6 +1,24 @@ +- + Create a user as 'MRP User' +- + !record {model: res.users, id: res_mrp_operation_user}: + company_id: base.main_company + name: MRP User + login: maou + password: maou + email: mrp_operation_user@yourcompany.com +- + I added groups for MRP User. +- + !record {model: res.users, id: res_mrp_operation_user}: + groups_id: + - mrp.group_mrp_user - In order to test mrp_operations with OpenERP, I refer created production order of PC Assemble SC349 - with routing - Manual Component's Assembly to test complete production process with respect of workcenter. + with routing - Manual Component's Assembly to test complete production process with respect of workcenter with giving access rights of MRP User. +- + !context + uid: 'res_mrp_operation_user' - I compute the production order. - @@ -106,7 +124,7 @@ I print a Barcode Report of Operation line. - !python {model: mrp_operations.operation.code}: | - import netsvc, tools, os + from openerp import netsvc, tools (data, format) = netsvc.LocalService('report.mrp.code.barcode').create(cr, uid, [ref('mrp_operations.mrp_op_1'),ref('mrp_operations.mrp_op_2'),ref('mrp_operations.mrp_op_3'),ref('mrp_operations.mrp_op_4'),ref('mrp_operations.mrp_op_5')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-barcode_report.'+format), 'wb+').write(data) @@ -115,7 +133,7 @@ I print Workcenter's Barcode Report. - !python {model: mrp.workcenter}: | - import netsvc, tools, os + from openerp import netsvc, tools (data, format) = netsvc.LocalService('report.mrp.wc.barcode').create(cr, uid, [ref('mrp.mrp_workcenter_0'),ref('mrp.mrp_workcenter_1')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-workcenter_barcode_report.'+format), 'wb+').write(data) From bcf36e6deb06a3ae9a5ee4adb3f3b7d148308bef Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 4 Apr 2014 16:15:59 +0200 Subject: [PATCH 8/9] [IMP] expression: new helper for generating unaccent aware sql queries. Adapt _auto_join tests to use it. bzr revid: chs@openerp.com-20140404141559-d2sn68lruik9hz81 --- openerp/addons/base/tests/test_expression.py | 32 +++++++++++++++---- openerp/osv/expression.py | 33 ++++++++++---------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/openerp/addons/base/tests/test_expression.py b/openerp/addons/base/tests/test_expression.py index 9c0cd01cb5a..a89ae193f5c 100644 --- a/openerp/addons/base/tests/test_expression.py +++ b/openerp/addons/base/tests/test_expression.py @@ -1,4 +1,6 @@ import unittest2 + +from openerp.osv.expression import get_unaccent_wrapper from openerp.osv.orm import BaseModel import openerp.tests.common as common @@ -123,6 +125,7 @@ class test_expression(common.TransactionCase): def test_20_auto_join(self): registry, cr, uid = self.registry, self.cr, self.uid + unaccent = get_unaccent_wrapper(cr) # Get models partner_obj = registry('res.partner') @@ -179,8 +182,11 @@ class test_expression(common.TransactionCase): sql_query = self.query_list[0].get_sql() self.assertIn('res_partner_bank', sql_query[0], "_auto_join off: ('bank_ids.name', 'like', '..') first query incorrect main table") - self.assertIn('"res_partner_bank"."name" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_partner_bank"."name"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join off: ('bank_ids.name', 'like', '..') first query incorrect where condition") + self.assertEqual(set(['%' + name_test + '%']), set(sql_query[2]), "_auto_join off: ('bank_ids.name', 'like', '..') first query incorrect parameter") sql_query = self.query_list[2].get_sql() @@ -216,8 +222,11 @@ class test_expression(common.TransactionCase): "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect main table") self.assertIn('"res_partner_bank" as "res_partner__bank_ids"', sql_query[0], "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect join") - self.assertIn('"res_partner__bank_ids"."name" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_partner__bank_ids"."name"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect where condition") + self.assertIn('"res_partner"."id"="res_partner__bank_ids"."partner_id"', sql_query[1], "_auto_join on: ('bank_ids.name', 'like', '..') query incorrect join condition") self.assertEqual(set(['%' + name_test + '%']), set(sql_query[2]), @@ -295,8 +304,11 @@ class test_expression(common.TransactionCase): sql_query = self.query_list[0].get_sql() self.assertIn('"res_country"', sql_query[0], "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect main table") - self.assertIn('"res_country"."code" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_country"."code"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect where condition") + self.assertEqual(['%' + name_test + '%'], sql_query[2], "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect parameter") sql_query = self.query_list[1].get_sql() @@ -326,8 +338,11 @@ class test_expression(common.TransactionCase): "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect main table") self.assertIn('"res_country" as "res_country_state__country_id"', sql_query[0], "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect join") - self.assertIn('"res_country_state__country_id"."code" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_country_state__country_id"."code"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect where condition") + self.assertIn('"res_country_state"."country_id"="res_country_state__country_id"."id"', sql_query[1], "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect join condition") self.assertEqual(['%' + name_test + '%'], sql_query[2], @@ -357,8 +372,11 @@ class test_expression(common.TransactionCase): "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join") self.assertIn('"res_country" as "res_partner__state_id__country_id"', sql_query[0], "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join") - self.assertIn('"res_partner__state_id__country_id"."code" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_partner__state_id__country_id"."code"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect where condition") + self.assertIn('"res_partner"."state_id"="res_partner__state_id"."id"', sql_query[1], "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join condition") self.assertIn('"res_partner__state_id"."country_id"="res_partner__state_id__country_id"."id"', sql_query[1], @@ -384,7 +402,9 @@ class test_expression(common.TransactionCase): "_auto_join on one2many with domains incorrect result") # Test produced queries that domains effectively present sql_query = self.query_list[0].get_sql() - self.assertIn('"res_partner__child_ids__bank_ids"."acc_number" like %s', sql_query[1], + + expected = "%s like %s" % (unaccent('"res_partner__child_ids__bank_ids"."acc_number"'), unaccent('%s')) + self.assertIn(expected, sql_query[1], "_auto_join on one2many with domains incorrect result") # TDE TODO: check first domain has a correct table name self.assertIn('"res_partner__child_ids"."name" = %s', sql_query[1], diff --git a/openerp/osv/expression.py b/openerp/osv/expression.py index 93e28dcccb3..da49ae12850 100644 --- a/openerp/osv/expression.py +++ b/openerp/osv/expression.py @@ -430,6 +430,10 @@ def select_distinct_from_where_not_null(cr, select_field, from_table): cr.execute('SELECT distinct("%s") FROM "%s" where "%s" is not null' % (select_field, from_table, select_field)) return [r[0] for r in cr.fetchall()] +def get_unaccent_wrapper(cr): + if openerp.modules.registry.RegistryManager.get(cr.dbname).has_unaccent: + return lambda x: "unaccent(%s)" % (x,) + return lambda x: x # -------------------------------------------------- # ExtendedLeaf class for managing leafs and contexts @@ -631,7 +635,7 @@ class expression(object): :attr list expression: the domain expression, that will be normalized and prepared """ - self.has_unaccent = openerp.modules.registry.RegistryManager.get(cr.dbname).has_unaccent + self._unaccent = get_unaccent_wrapper(cr) self.joins = [] self.root_model = table @@ -1020,7 +1024,6 @@ class expression(object): push(create_substitution_leaf(leaf, (left, operator, right), working_model)) elif field.translate and right: - field = left need_wildcard = operator in ('like', 'ilike', 'not like', 'not ilike') sql_operator = {'=like': 'like', '=ilike': 'ilike'}.get(operator, operator) if need_wildcard: @@ -1032,16 +1035,13 @@ class expression(object): sql_operator = sql_operator[4:] if sql_operator[:3] == 'not' else '=' inselect_operator = 'not inselect' - trans_left = 'value' - left = '"%s"' % (left,) - instr = '%s' + unaccent = self._unaccent if sql_operator.endswith('like') else lambda x: x - if self.has_unaccent and sql_operator.endswith('like'): - assert isinstance(right, basestring) - trans_left = 'unaccent(value)' - left = 'unaccent(%s)' % (left,) - instr = 'unaccent(%s)' - elif sql_operator == 'in': + trans_left = unaccent('value') + quote_left = unaccent(_quote(left)) + instr = unaccent('%s') + + if sql_operator == 'in': # params will be flatten by to_sql() => expand the placeholders instr = '(%s)' % ', '.join(['%s'] * len(right)) @@ -1057,10 +1057,10 @@ class expression(object): WHERE {left} {operator} {right} ) """.format(trans_left=trans_left, operator=sql_operator, - right=instr, table=working_model._table, left=left) + right=instr, table=working_model._table, left=quote_left) params = ( - working_model._name + ',' + field, + working_model._name + ',' + left, context.get('lang') or 'en_US', 'model', right, @@ -1184,10 +1184,9 @@ class expression(object): if left in model._columns: format = need_wildcard and '%s' or model._columns[left]._symbol_set[0] - if self.has_unaccent and sql_operator.endswith('like'): - query = '(unaccent(%s."%s") %s unaccent(%s))' % (table_alias, left, sql_operator, format) - else: - query = '(%s."%s" %s %s)' % (table_alias, left, sql_operator, format) + unaccent = self._unaccent if sql_operator.endswith('like') else lambda x: x + column = '%s.%s' % (table_alias, _quote(left)) + query = '(%s %s %s)' % (unaccent(column), sql_operator, unaccent(format)) elif left in MAGIC_COLUMNS: query = "(%s.\"%s\" %s %%s)" % (table_alias, left, sql_operator) params = right From 53d8055cd8ad38e0fd135ae58afb713b7c16f48f Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 4 Apr 2014 16:16:11 +0200 Subject: [PATCH 9/9] [FIX] res.partner: name_search: respect unaccent flag bzr revid: chs@openerp.com-20140404141611-qi1yagltvkd9q8ji --- openerp/addons/base/res/res_partner.py | 36 +++++++++++++++----------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 5d97311c01d..d43028d68ef 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -29,6 +29,7 @@ import openerp from openerp import SUPERUSER_ID from openerp import pooler, tools from openerp.osv import osv, fields +from openerp.osv.expression import get_unaccent_wrapper from openerp.tools.translate import _ from openerp.tools.yaml_import import is_comment @@ -610,27 +611,32 @@ class res_partner(osv.osv, format_address): if operator in ('=ilike', '=like'): operator = operator[1:] + unaccent = get_unaccent_wrapper(cr) + # TODO: simplify this in trunk with `display_name`, once it is stored # Perf note: a CTE expression (WITH ...) seems to have an even higher cost # than this query with duplicated CASE expressions. The bulk of # the cost is the ORDER BY, and it is inevitable if we want # relevant results for the next step, otherwise we'd return # a random selection of `limit` results. - query = ('''SELECT res_partner.id FROM res_partner - LEFT JOIN res_partner company - ON res_partner.parent_id = company.id''' - + where_str + ''' (res_partner.email ''' + operator + ''' %s OR - CASE - WHEN company.id IS NULL OR res_partner.is_company - THEN res_partner.name - ELSE company.name || ', ' || res_partner.name - END ''' + operator + ''' %s) - ORDER BY - CASE - WHEN company.id IS NULL OR res_partner.is_company - THEN res_partner.name - ELSE company.name || ', ' || res_partner.name - END''') + + display_name = """CASE WHEN company.id IS NULL OR res_partner.is_company + THEN {partner_name} + ELSE {company_name} || ', ' || {partner_name} + END""".format(partner_name=unaccent('res_partner.name'), + company_name=unaccent('company.name')) + + query = """SELECT res_partner.id + FROM res_partner + LEFT JOIN res_partner company + ON res_partner.parent_id = company.id + {where} ({email} {operator} {percent} + OR {display_name} {operator} {percent}) + ORDER BY {display_name} + """.format(where=where_str, operator=operator, + email=unaccent('res_partner.email'), + percent=unaccent('%s'), + display_name=display_name) where_clause_params += [search_name, search_name] if limit: