[MERGE] css fixes. Mostly to etherpad
authorFrédéric van der Essen <fva@openerp.com>
Thu, 27 Sep 2012 14:14:40 +0000 (16:14 +0200)
committerFrédéric van der Essen <fva@openerp.com>
Thu, 27 Sep 2012 14:14:40 +0000 (16:14 +0200)
bzr revid: fva@openerp.com-20120927141440-fyod8df0f78ncgyz

115 files changed:
addons/web/controllers/main.py
addons/web/static/lib/jquery.tipsy/tipsy.css
addons/web/static/lib/qweb/qweb2.js
addons/web/static/src/css/base.css
addons/web/static/src/css/base.sass
addons/web/static/src/js/chrome.js
addons/web/static/src/js/view_form.js
addons/web/static/src/js/view_list.js
addons/web/static/src/js/views.js
addons/web/static/src/xml/base.xml
addons/web_calendar/static/src/css/web_calendar.css
addons/web_calendar/static/src/js/calendar.js
addons/web_kanban/static/src/css/kanban.css
addons/web_kanban/static/src/css/kanban.sass
addons/web_kanban/static/src/js/kanban.js
addons/web_kanban/static/src/xml/web_kanban.xml
addons/web_tests/i18n/fr_CA.po [new file with mode: 0644]
debian/control
gunicorn.conf.py [deleted file]
openerp-server
openerp-wsgi.py [new file with mode: 0644]
openerp/__init__.py
openerp/addons/base/__openerp__.py
openerp/addons/base/base.sql
openerp/addons/base/base_demo.xml
openerp/addons/base/currency_data.xml
openerp/addons/base/i18n/ab.po
openerp/addons/base/i18n/af.po
openerp/addons/base/i18n/am.po
openerp/addons/base/i18n/ar.po
openerp/addons/base/i18n/bg.po
openerp/addons/base/i18n/bs.po
openerp/addons/base/i18n/ca.po
openerp/addons/base/i18n/cs.po
openerp/addons/base/i18n/da.po
openerp/addons/base/i18n/de.po
openerp/addons/base/i18n/el.po
openerp/addons/base/i18n/en_GB.po
openerp/addons/base/i18n/es.po
openerp/addons/base/i18n/es_AR.po
openerp/addons/base/i18n/es_CL.po
openerp/addons/base/i18n/es_CR.po
openerp/addons/base/i18n/es_EC.po
openerp/addons/base/i18n/es_MX.po
openerp/addons/base/i18n/et.po
openerp/addons/base/i18n/eu.po
openerp/addons/base/i18n/fa.po
openerp/addons/base/i18n/fa_AF.po
openerp/addons/base/i18n/fi.po
openerp/addons/base/i18n/fr.po
openerp/addons/base/i18n/gl.po
openerp/addons/base/i18n/gu.po
openerp/addons/base/i18n/he.po
openerp/addons/base/i18n/hr.po
openerp/addons/base/i18n/hu.po
openerp/addons/base/i18n/hy.po
openerp/addons/base/i18n/id.po
openerp/addons/base/i18n/is.po
openerp/addons/base/i18n/it.po
openerp/addons/base/i18n/ja.po
openerp/addons/base/i18n/ka.po
openerp/addons/base/i18n/kk.po
openerp/addons/base/i18n/ko.po
openerp/addons/base/i18n/lt.po
openerp/addons/base/i18n/lv.po
openerp/addons/base/i18n/mk.po
openerp/addons/base/i18n/mn.po
openerp/addons/base/i18n/nb.po
openerp/addons/base/i18n/nl.po
openerp/addons/base/i18n/nl_BE.po
openerp/addons/base/i18n/pl.po
openerp/addons/base/i18n/pt.po
openerp/addons/base/i18n/pt_BR.po
openerp/addons/base/i18n/ro.po
openerp/addons/base/i18n/ru.po
openerp/addons/base/i18n/sk.po
openerp/addons/base/i18n/sl.po
openerp/addons/base/i18n/sq.po
openerp/addons/base/i18n/sr.po
openerp/addons/base/i18n/sr@latin.po
openerp/addons/base/i18n/sv.po
openerp/addons/base/i18n/th.po
openerp/addons/base/i18n/tlh.po
openerp/addons/base/i18n/tr.po
openerp/addons/base/i18n/uk.po
openerp/addons/base/i18n/ur.po
openerp/addons/base/i18n/vi.po
openerp/addons/base/i18n/zh_CN.po
openerp/addons/base/i18n/zh_HK.po
openerp/addons/base/i18n/zh_TW.po
openerp/addons/base/ir/ir_cron.py
openerp/addons/base/ir/ir_ui_view.py
openerp/addons/base/module/module.py
openerp/addons/base/res/res_partner.py
openerp/addons/base/res/res_partner_demo.xml
openerp/addons/base/res/res_partner_view.xml
openerp/addons/base/res/res_security.xml
openerp/db/__init__.py [deleted file]
openerp/modules/db.py
openerp/modules/loading.py
openerp/modules/module.py
openerp/osv/fields.py
openerp/osv/orm.py
openerp/osv/osv.py
openerp/service/__init__.py
openerp/service/netrpc_server.py
openerp/service/netrpc_socket.py [new file with mode: 0644]
openerp/service/workers.py [new file with mode: 0644]
openerp/service/wsgi_server.py [new file with mode: 0644]
openerp/tiny_socket.py [deleted file]
openerp/tools/config.py
openerp/wsgi/__init__.py [deleted file]
openerp/wsgi/core.py [deleted file]
openerp/wsgi/proxied.py [deleted file]
setup.py

index b635f5a..e2e7ebb 100644 (file)
@@ -1922,7 +1922,7 @@ class Reports(View):
             report = zlib.decompress(report)
         report_mimetype = self.TYPES_MAPPING.get(
             report_struct['format'], 'octet-stream')
-        file_name = None
+        file_name = action.get('name', 'report')
         if 'name' not in action:
             reports = req.session.model('ir.actions.report.xml')
             res_id = reports.search([('report_name', '=', action['report_name']),],
index 1e32ff3..59d0fb9 100644 (file)
@@ -1,4 +1,4 @@
-.tipsy { font-size: 90%; position: absolute; padding: 5px; z-index: 100000; }
+.tipsy { font-size: 90%; position: absolute; padding: 5px; z-index: 100000; overflow: hidden;}
   .tipsy-inner { background-color: #000; color: #FFF; max-width: 500px; padding: 5px 8px 4px 8px; }
 
   /* Rounded corners */
index c9b065e..71a9628 100644 (file)
@@ -4,7 +4,7 @@
 // TODO: t-set + t-value + children node == scoped variable ?
 var QWeb2 = {
     expressions_cache: {},
-    RESERVED_WORDS: 'true,false,NaN,null,undefined,debugger,console,in,instanceof,new,function,return,this,typeof,eval,void,Math,RegExp,Array,Object,Date'.split(','),
+    RESERVED_WORDS: 'true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,this,typeof,eval,void,Math,RegExp,Array,Object,Date'.split(','),
     ACTIONS_PRECEDENCE: 'foreach,if,call,set,esc,escf,raw,rawf,js,debug,log'.split(','),
     WORD_REPLACEMENT: {
         'and': '&&',
index 16861a7..18db06c 100644 (file)
     display: none !important;
   }
 }
-
 .openerp.openerp_webclient_container {
   height: 100%;
   position: relative;
 }
 
+.text-tag .text-button {
+  height: auto !important;
+  min-height: 16px;
+}
+
 .openerp {
   padding: 0;
   margin: 0;
@@ -41,7 +45,7 @@
   text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
   /* http://www.quirksmode.org/dom/inputfile.html
    * http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image
-   */ */
+   */
 }
 .openerp :-moz-placeholder {
   color: #afafb6 !important;
@@ -53,6 +57,7 @@
 }
 .openerp a {
   text-decoration: none;
+  cursor: pointer !important;
 }
 .openerp table {
   padding: 0;
 }
 .openerp a.button:link, .openerp a.button:visited, .openerp button, .openerp input[type='submit'], .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button {
   display: inline-block;
-  border: 1px solid #ababab;
+  border: 1px solid rgba(0, 0, 0, 0.4);
   color: #4c4c4c;
   margin: 0;
   padding: 3px 12px;
   background: #dc5f59;
 }
 .openerp button.oe_highlight {
-  border: 1px solid #795151;
   background-color: #df3f3f;
   background-image: -webkit-gradient(linear, left top, left bottom, from(#df3f3f), to(#a21a1a));
   background-image: -webkit-linear-gradient(top, #df3f3f, #a21a1a);
   cursor: pointer;
 }
 .openerp .oe_dropdown_toggle {
-  color: #404040;
+  color: rgba(0, 0, 0, 0.5);
   font-weight: normal;
 }
 .openerp .oe_dropdown_hover:hover .oe_dropdown_menu, .openerp .oe_dropdown_menu.oe_opened {
   position: absolute;
   top: 26px;
   left: 0;
-  z-index: 1;
+  z-index: 3;
   margin: 0;
   padding: 0;
   border: 1px solid #afafb6;
   text-indent: -99999px;
   vertical-align: top;
   margin-top: 8px;
-  margin-left: 4px;
+  margin-left: 3px;
   border-left: 4px solid transparent;
   border-right: 4px solid transparent;
   border-top: 4px solid #404040;
 }
 .openerp .oe_topbar {
   width: 100%;
-  height: 31px;
+  height: 32px;
+  background-color: #414141;
   background-color: #646060;
   background-image: -webkit-gradient(linear, left top, left bottom, from(#646060), to(#262626));
   background-image: -webkit-linear-gradient(top, #646060, #262626);
   padding: 5px 10px 7px;
   line-height: 20px;
   height: 20px;
+  text-decoration: none;
   color: #eeeeee;
   vertical-align: top;
   text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
+  -webkit-transition: all 0.2s ease-out;
+  -moz-transition: all 0.2s ease-out;
+  -ms-transition: all 0.2s ease-out;
+  -o-transition: all 0.2s ease-out;
+  transition: all 0.2s ease-out;
 }
 .openerp .oe_topbar .oe_topbar_item:hover {
-  background: #303030;
+  background: rgba(0, 0, 0, 0.2);
+  text-shadow: black 0px 0px 3px;
   color: white;
-  -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset;
-  -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset;
-  box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset;
+  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
 }
 .openerp .oe_topbar .oe_topbar_avatar {
   width: 24px;
   -webkit-box-shadow: none;
   box-shadow: none;
 }
+.openerp .oe_menu {
+  float: left;
+  padding: 0;
+  margin: 0;
+  font-size: 13px;
+}
+.openerp .oe_menu > li {
+  list-style-type: none;
+  padding: 0;
+  margin: 0;
+  float: left;
+  display: block;
+  color: #eeeeee;
+}
+.openerp .oe_menu > li > a {
+  display: block;
+  padding: 5px 10px 7px;
+  line-height: 20px;
+  height: 20px;
+  text-decoration: none;
+  color: #eeeeee;
+  vertical-align: top;
+  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
+  -webkit-transition: all 0.2s ease-out;
+  -moz-transition: all 0.2s ease-out;
+  -ms-transition: all 0.2s ease-out;
+  -o-transition: all 0.2s ease-out;
+  transition: all 0.2s ease-out;
+}
+.openerp .oe_menu > li > a:hover {
+  background: rgba(0, 0, 0, 0.2);
+  text-shadow: black 0px 0px 3px;
+  color: white;
+  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
+}
+.openerp .oe_menu > li > .oe_active {
+  background: rgba(0, 0, 0, 0.2);
+  text-shadow: black 0px 0px 3px;
+  font-weight: bold;
+  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
+}
+.openerp .oe_user_menu {
+  float: right;
+  padding: 0;
+  margin: 0;
+}
+.openerp .oe_user_menu li {
+  list-style-type: none;
+  float: left;
+}
+.openerp .oe_user_menu .oe_dropdown_menu {
+  right: -1px;
+}
+.openerp .oe_systray > div {
+  float: left;
+  padding: 0 4px 0 4px;
+}
+.openerp .oe_systray {
+  float: right;
+}
 .openerp .oe_leftbar {
   display: none;
   width: 220px;
   color: #c81010;
   font-style: italic;
 }
-.openerp .oe_user_menu {
-  float: right;
-  padding: 0;
-  margin: 0;
-}
-.openerp .oe_user_menu li {
-  list-style-type: none;
-  float: left;
-}
-.openerp .oe_user_menu .oe_dropdown_menu {
-  right: -1px;
-}
-.openerp .oe_systray > div {
-  float: left;
-  padding: 0 4px 0 4px;
-}
-.openerp .oe_systray {
-  float: right;
-}
-.openerp .oe_menu {
-  float: left;
-  padding: 0;
-  margin: 0;
-}
-.openerp .oe_menu > li {
-  list-style-type: none;
-  padding: 0;
-  margin: 0;
-  float: left;
-}
-.openerp .oe_menu > li > a {
-  display: block;
-  padding: 5px 10px 7px;
-  line-height: 20px;
-  height: 20px;
-  color: #eeeeee;
-  vertical-align: top;
-  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
-}
-.openerp .oe_menu > li > a:hover {
-  background: #303030;
-  color: white;
-  -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset;
-  -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset;
-  box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset;
-}
-.openerp .oe_menu > li > .oe_active {
-  background: #303030;
-  font-weight: bold;
-  color: white;
-  -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset;
-  -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset;
-  box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset;
-}
 .openerp .oe_secondary_menu_section {
   font-weight: bold;
   margin-left: 8px;
   color: white;
   padding: 2px 4px;
   margin: 1px 6px 0 0;
-  border: 1px solid lightGray;
+  border: 1px solid lightgrey;
   text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
   -moz-border-radius: 4px;
   -webkit-border-radius: 4px;
   transform: scale(1.1);
 }
 .openerp .oe_secondary_submenu .oe_active {
-  border-top: 1px solid lightGray;
+  border-top: 1px solid lightgrey;
   border-bottom: 1px solid #dedede;
   text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
   -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2);
   border-right: 4px solid transparent;
   border-top: 4px solid #4c4c4c;
 }
+.openerp .oe_about {
+  background-color: white;
+  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=);
+  -moz-border-radius: 0 0 2px 2px;
+  -webkit-border-radius: 0 0 2px 2px;
+  border-radius: 0 0 2px 2px;
+}
+.openerp .oe_about a {
+  color: #7c7bad;
+}
+.openerp .oe_about a:hover {
+  text-decoration: underline;
+}
+.openerp .oe_about a:focus {
+  outline: none;
+}
+.openerp .oe_about .oe_logo {
+  margin-left: -6px;
+}
+.openerp .oe_about .oe_bottom {
+  position: absolute;
+  top: 50%;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  text-shadow: 0 1px 1px #999999;
+  background-color: #b41616;
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606));
+  background-image: -webkit-linear-gradient(top, #b41616, #600606);
+  background-image: -moz-linear-gradient(top, #b41616, #600606);
+  background-image: -ms-linear-gradient(top, #b41616, #600606);
+  background-image: -o-linear-gradient(top, #b41616, #600606);
+  background-image: linear-gradient(to bottom, #b41616, #600606);
+  color: #eeeeee;
+  padding: 0 16px;
+  -moz-border-radius: 0 0 2px 2px;
+  -webkit-border-radius: 0 0 2px 2px;
+  border-radius: 0 0 2px 2px;
+}
+.openerp .oe_about .oe_bottom a {
+  color: #eeeeee;
+}
 .openerp .oe_application {
   width: 100%;
 }
   height: 100%;
 }
 .openerp .oe_view_manager_current > .oe_view_manager_header {
-  border-top: 1px solid #cacaca;
   border-bottom: 1px solid #cacaca;
   background-color: #fcfcfc;
   background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede));
   font-size: 1px;
   letter-spacing: -1px;
   color: transparent;
+  font-weight: normal;
   -moz-box-shadow: none;
   -webkit-box-shadow: none;
   box-shadow: none;
 }
 .openerp .oe_form_nosheet > header {
   margin: -16px -16px 0 -16px;
-  padding: 8px;
+  padding: 0;
 }
 .openerp .oe_form_sheetbg {
-  padding: 8px 0;
+  padding: 16px 0;
 }
 .openerp .oe_form_sheet_width {
   min-width: 650px;
   border-bottom: 1px solid #dddddd;
 }
 .openerp .oe_application .oe_form_sheet {
-  border: 1px solid #afafb6;
-  -moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
-  -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
-  box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
+  border: 1px solid #c8c8d3;
+  -moz-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
+  -webkit-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
 }
 .openerp .oe_application .oe_form_sheet .ui-tabs {
   margin: 0 -16px;
   background-image: -o-linear-gradient(top, #fcfcfc, #dedede);
   background-image: linear-gradient(to bottom, #fcfcfc, #dedede);
 }
+.openerp .oe_form header > span {
+  margin-left: 4px;
+}
 .openerp .oe_form header ul {
   display: inline-block;
   float: right;
 .openerp .oe_form header .oe_form_button {
   margin: 3px 2px 1px;
 }
+.openerp .oe_form header .oe_tags {
+  margin: 5px 0 0 5px;
+  width: 400px;
+  padding-bottom: 0;
+}
 .openerp .oe_form div.oe_chatter {
   min-width: 650px;
   max-width: 860px;
 .openerp .oe_form .oe_subtotal_footer .oe_subtotal_footer_separator {
   width: 108px;
   border-top: 1px solid #cacaca;
+  margin-top: 4px;
+  padding-top: 4px;
   font-weight: bold;
   font-size: 18px;
 }
 }
 .openerp .oe_form .oe_form_label_help[for] span, .openerp .oe_form .oe_form_label[for] span {
   font-size: 80%;
-  color: darkGreen;
+  color: darkgreen;
   vertical-align: top;
   position: relative;
   top: -4px;
   min-width: 60px;
   color: #1f1f1f;
 }
+.openerp .oe_form textarea {
+  height: 32px;
+}
 .openerp .oe_form input[readonly], .openerp .oe_form select[readonly], .openerp .oe_form textarea[readonly], .openerp .oe_form input[disabled], .openerp .oe_form select[disabled] {
   background: #e5e5e5 !important;
   color: #666666;
   position: relative;
   overflow: hidden;
 }
+.openerp .oe_form .oe_form_field_html {
+  position: relative;
+  width: 600px;
+  margin-left: 130px;
+  margin-top: 32px;
+  margin-bottom: 32px;
+  text-align: justify;
+}
 .openerp .oe_form_editable .oe_form .oe_form_field_integer {
   width: 6em !important;
 }
 .openerp .oe_form_editable .oe_form .oe_form_field_datetime {
   width: 11.5em !important;
 }
+.openerp .oe_hidden_input_file {
+  position: relative;
+}
 .openerp .oe_hidden_input_file input.oe_form_binary_file {
   z-index: 0;
   line-height: 0;
 .openerp ul.oe_form_status li, .openerp ul.oe_form_status_clickable li {
   display: inline-block;
   list-style-type: none;
-  margin: 0 -20px 0 0;
+  margin: 0 -18px 0 0;
   padding: 0;
   background-color: #fcfcfc;
   background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede));
 }
 .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_float input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_view_integer input {
   text-align: right;
+  width: 100%;
 }
 .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_datetime > span, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_date > span {
   width: 100%;
 }
 .openerp .oe_list_content td.oe_list_field_handle {
   width: 1em;
+  padding: 0 !important;
   cursor: ns-resize;
 }
 .openerp .oe_list_content td.oe_list_field_handle .oe_list_handle {
   font-size: 1px;
   letter-spacing: -1px;
   color: transparent;
+  font-weight: normal;
+  margin-right: 7px;
 }
 .openerp .oe_list_content td.oe_list_field_handle .oe_list_handle:before {
-  font: 21px "mnmliconsRegular";
-  content: "ö";
-  color: #404040;
+  font: 18px "entypoRegular";
+  content: "}";
+  color: #e0e0e0;
 }
 .openerp .oe_list_cannot_edit .oe_list_header_handle, .openerp .oe_list_cannot_edit .oe_list_field_handle {
   display: none !important;
+  padding: 0 !important;
 }
 .openerp .oe_list_cannot_delete .oe_list_record_delete {
   display: none !important;
   width: 100%;
   background-color: white;
   border-spacing: 0;
+  color: #4c4c4c;
 }
 .openerp .oe-treeview-table th {
   padding: 10px;
-  color: #4c4c4c;
   font-weight: bold;
   background-color: #f0f0f0;
   border-bottom: 2px solid #cacaca;
 }
-.openerp .oe-treeview-table .treeview-tr, .openerp .oe-treeview-table .treeview-td {
+.openerp .oe-treeview-table td {
   cursor: pointer;
-  border-right: 1px dotted #afafb6;
-  vertical-align: top;
+  vertical-align: middle;
   text-align: left;
-  border-bottom: 1px solid #cfcccc;
-}
-.openerp .oe-treeview-table tr:hover {
-  background-color: #e0e0f8;
+  vertical-align: middle;
+  height: 20px;
+  padding-left: 4px;
+  padding-right: 4px;
+  border-right: 1px solid #e7e7e7;
 }
-.openerp .oe-treeview-table .oe-number {
+.openerp .oe-treeview-table td.oe_number {
   text-align: right !important;
 }
+.openerp .oe-treeview-table tr {
+  border-bottom: 1px solid #d6d6d6;
+}
+.openerp .oe-treeview-table tr:hover {
+  background-color: #e7e7e7;
+}
 .openerp .oe-treeview-table span {
   font-size: 90%;
   font-weight: normal;
 .openerp .oe-treeview-table .treeview-tr.oe-treeview-first span, .openerp .oe-treeview-table .treeview-td.oe-treeview-first span {
   margin-left: 16px;
 }
-.openerp .oe_trad_field.touched {
-  border: 1px solid green !important;
-}
 .openerp .oe_layout_debugging .oe_form_group {
   outline: 2px dashed green;
 }
index e3cb661..851d0c3 100644 (file)
@@ -113,17 +113,29 @@ $sheet-max-width: 860px
     @keyframes #{$name}
         @content
 
+
 // Transforms the (readable) text of an inline element into an mmlicons icon,
 // allows for actual readable text in-code (and in readers?) with iconic looks
 @mixin text-to-icon($icon-name, $color: #404040)
     font-size: 1px
     letter-spacing: -1px
     color: transparent
+    font-weight: normal 
     &:before
         font: 21px "mnmliconsRegular"
         content: $icon-name
         color: $color
 
+@mixin text-to-entypo-icon($icon-name, $color: #404040, $size: 21px)
+    font-size: 1px
+    letter-spacing: -1px
+    color: transparent
+    font-weight: normal 
+    &:before
+        font: $size "entypoRegular"
+        content: $icon-name
+        color: $color
+
 // }}}
 
 @media print
@@ -134,6 +146,11 @@ $sheet-max-width: 860px
     height: 100%
     position: relative
 
+// jQueryUI css bug fixing
+.text-tag .text-button
+    height: auto !important
+    min-height: 16px
+
 .openerp
     // Global style {{{
     padding: 0
@@ -155,6 +172,7 @@ $sheet-max-width: 860px
     // Tag reset {{{
     a
         text-decoration: none
+        cursor: pointer !important
     table
         padding: 0
         border-collapse: collapse
@@ -191,7 +209,7 @@ $sheet-max-width: 860px
     // Button style {{{
     a.button:link, a.button:visited, button, input[type='submit'], .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button
         display: inline-block
-        border: 1px solid #ababab
+        border: 1px solid rgba(0,0,0,0.4)
         color: #4c4c4c
         margin: 0
         padding: 3px 12px
@@ -362,7 +380,6 @@ $sheet-max-width: 860px
         color: white
         background: #DC5F59
     button.oe_highlight
-        border: 1px solid #795151
         @include vertical-gradient(#df3f3f, #a21a1a)
         @include box-shadow((0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset))
     button.oe_highlight:hover
@@ -538,7 +555,7 @@ $sheet-max-width: 860px
         position: relative
         cursor: pointer
     .oe_dropdown_toggle
-        color: #404040
+        color: rgba(0,0,0,0.5)
         font-weight: normal
     .oe_dropdown_hover:hover .oe_dropdown_menu, .oe_dropdown_menu.oe_opened
         display: block
@@ -547,7 +564,7 @@ $sheet-max-width: 860px
         position: absolute
         top: 26px
         left: 0
-        z-index: 1
+        z-index: 3
         margin: 0
         padding: 0
         border: 1px solid $tag-border
@@ -582,7 +599,8 @@ $sheet-max-width: 860px
         text-indent: -99999px
         vertical-align: top
         margin-top: 8px
-        margin-left: 4px
+        //margin-left set at 3px to avoid a strange overflow
+        margin-left: 3px 
         border-left: 4px solid transparent
         border-right: 4px solid transparent
         border-top: 4px solid#404040
@@ -774,23 +792,28 @@ $sheet-max-width: 860px
         .oe_topbar, .oe_leftbar
             display: none
     // }}}
-    // WebClient.topbar {{{
+    // Top Menu {{{
+    
     .oe_topbar
         width: 100%
-        height: 31px
+        height: 32px
+        background-color: #414141
         @include vertical-gradient(#646060, #262626)
         .oe_topbar_item
             display: block
             padding: 5px 10px 7px
             line-height: 20px
             height: 20px
+            text-decoration: none
             color: #eee
             vertical-align: top
             text-shadow: 0 1px 1px rgba(0,0,0,0.2)
-            &:hover
-                background: #303030
+            @include transition(all 0.2s ease-out)
+            &:hover,
+                background: rgba(0,0,0,0.2)
+                text-shadow: black 0px 0px 3px
                 color: white
-                @include box-shadow(0 1px 2px rgba(255,255,255,0.3) inset)
+                @include box-shadow(0 1px 2px rgba(0,0,0,0.4) inset)
 
         .oe_topbar_avatar
             width: 24px
@@ -820,6 +843,59 @@ $sheet-max-width: 860px
                     @include vertical-gradient(#292929, #191919)
                     @include box-shadow(none)
 
+    // oe menu is the list of the buttons on the left side of the bar.
+    // So why aren't the buttons oe_topbar_items ? This sad state of affairs
+    // is a leftover from an uncomplete refactoring when the left and top menu
+    // were merged. You are welcome to refactor and clean this up
+    .oe_menu
+        float: left
+        padding: 0
+        margin: 0
+        font-size: 13px
+        > li
+            list-style-type: none
+            padding: 0
+            margin: 0
+            float: left
+            display: block
+            color: #eeeeee
+            > a
+                display: block
+                padding: 5px 10px 7px
+                line-height: 20px
+                height: 20px
+                text-decoration: none
+                color: #eee
+                vertical-align: top
+                text-shadow: 0 1px 1px rgba(0,0,0,0.2)
+                @include transition(all 0.2s ease-out)
+                &:hover,
+                    background: rgba(0,0,0,0.2)
+                    text-shadow: black 0px 0px 3px
+                    color: white
+                    @include box-shadow(0 1px 2px rgba(0,0,0,0.4) inset)
+            > .oe_active
+                background: rgba(0,0,0,0.2)
+                text-shadow: black 0px 0px 3px
+                font-weight: bold
+                @include box-shadow(0 1px 2px rgba(0,0,0,0.4) inset)
+
+    .oe_user_menu
+        float: right
+        padding: 0
+        margin: 0
+        li
+            list-style-type: none
+            float: left
+        .oe_dropdown_menu
+            right: -1px
+
+    .oe_systray > div
+        float: left
+        padding: 0 4px 0 4px
+    .oe_systray
+        float: right
+
     // }}}
     // Webclient.leftbar {{{
     .oe_leftbar
@@ -855,51 +931,8 @@ $sheet-max-width: 860px
                 color: #c81010
                 font-style: italic
     // }}}
-    // UserMenu {{{
-    .oe_user_menu
-        float: right
-        padding: 0
-        margin: 0
-        li
-            list-style-type: none
-            float: left
-        .oe_dropdown_menu
-            right: -1px
-    // }}}
-    // Systray {{{
-    .oe_systray > div
-        float: left
-        padding: 0 4px 0 4px
-    .oe_systray
-        float: right
-    // }}}
-    // Menu {{{
-    .oe_menu
-        float: left
-        padding: 0
-        margin: 0
-        > li
-            list-style-type: none
-            padding: 0
-            margin: 0
-            float: left
-            > a
-                display: block
-                padding: 5px 10px 7px
-                line-height: 20px
-                height: 20px
-                color: #eee
-                vertical-align: top
-                text-shadow: 0 1px 1px rgba(0,0,0,0.2)
-                &:hover
-                    background: #303030
-                    color: white
-                    @include box-shadow(0 1px 2px rgba(255,255,255,0.3) inset)
-            > .oe_active
-                background: #303030
-                font-weight: bold
-                color: white
-                @include box-shadow(0 1px 2px rgba(255,255,255,0.3) inset)
+    // Webclient.leftbar items {{{
+
     .oe_secondary_menu_section
         font-weight: bold
         margin-left: 8px
@@ -978,6 +1011,34 @@ $sheet-max-width: 860px
             border-left: 4px solid transparent
             border-right: 4px solid transparent
             border-top: 4px solid #4c4c4c
+
+    // }}}
+    // About openerp {{{
+    .oe_about
+        background-color: white
+        background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=)
+        @include radius(0 0 2px 2px)
+        a
+            color: $link-color
+            &:hover
+                text-decoration: underline
+            &:focus
+                outline: none
+        .oe_logo
+            margin-left: -6px
+        .oe_bottom
+            position: absolute
+            top: 50%
+            left: 0
+            right: 0
+            bottom: 0
+            text-shadow: 0 1px 1px #999999
+            @include vertical-gradient(#b41616, #600606)
+            color: #eee
+            padding: 0 16px
+            @include radius(0 0 2px 2px)
+            a
+                color: #eee
     // }}}
     // ActionManager {{{
     .oe_application
@@ -998,7 +1059,7 @@ $sheet-max-width: 860px
     // ViewManager common {{{
     .oe_view_manager
         .oe_view_manager_body
-            height: inherit
+            height: inherit 
         .oe_view_manager_view_kanban
             height: inherit
 
@@ -1136,7 +1197,6 @@ $sheet-max-width: 860px
     .oe_view_manager_current
         height: 100%
         > .oe_view_manager_header
-            border-top: 1px solid #cacaca
             border-bottom: 1px solid #cacaca
             @include vertical-gradient(#fcfcfc, #dedede)
             @include box-shadow((0 1px 0 rgba(255,255,255,0.4), 0 0 9px rgba(0,0,0,0.1)))
@@ -1509,9 +1569,9 @@ $sheet-max-width: 860px
         margin: 16px
         > header
             margin: -16px -16px 0 -16px
-            padding: 8px
+            padding: 0
     .oe_form_sheetbg
-        padding: 8px 0
+        padding: 16px 0
     .oe_form_sheet_width
         min-width: 650px
         max-width: $sheet-max-width
@@ -1526,8 +1586,8 @@ $sheet-max-width: 860px
             background: url(/web/static/src/img/form_sheetbg.png)
             border-bottom: 1px solid #ddd
         .oe_form_sheet
-            border: 1px solid $tag-border
-            @include box-shadow(0 0 10px rgba(0,0,0,0.3))
+            border: 1px solid #c8c8d3 //$tag-border
+            @include box-shadow(0 4px 20px rgba(0,0,0,0.15))
             .ui-tabs
                 margin: 0 -16px
             .oe_notebook_page
@@ -1540,11 +1600,17 @@ $sheet-max-width: 860px
             border-bottom: 1px solid #cacaca
             padding-left: 2px
             @include vertical-gradient(#fcfcfc, #dedede)
+            > span
+                margin-left: 4px
             ul
                 display: inline-block
                 float: right
             .oe_form_button
                 margin: 3px 2px 1px
+            .oe_tags
+                margin: 5px 0 0 5px
+                width: 400px
+                padding-bottom: 0
         div.oe_chatter
             min-width: 650px
             max-width: $sheet-max-width
@@ -1574,6 +1640,8 @@ $sheet-max-width: 860px
             .oe_subtotal_footer_separator
                 width: 108px
                 border-top: 1px solid #cacaca
+                margin-top: 4px
+                padding-top: 4px
                 font-weight: bold
                 font-size: 18px
             label:after
@@ -1682,6 +1750,8 @@ $sheet-max-width: 860px
             background: white
             min-width: 60px
             color: #1f1f1f
+        textarea
+            height: 32px
         input[readonly], select[readonly], textarea[readonly], input[disabled], select[disabled]
             background: #E5E5E5 !important
             color: #666
@@ -1735,6 +1805,14 @@ $sheet-max-width: 860px
             > div
                 position: relative
                 overflow: hidden
+        .oe_form_field_html
+            position: relative
+            width: 600px
+            margin-left: 130px
+            margin-top: 32px 
+            margin-bottom: 32px
+            text-align: justify
+            
     .oe_form_editable
         .oe_form
             .oe_form_field_integer
@@ -1751,6 +1829,9 @@ $sheet-max-width: 860px
      * http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image
      */
     .oe_hidden_input_file
+        // Position: relative is used for the hidden input[type=file]
+        // Do not remove it anymore !
+        position: relative
         input.oe_form_binary_file
             z-index: 0
             line-height: 0
@@ -1812,7 +1893,8 @@ $sheet-max-width: 860px
         li 
             display: inline-block
             list-style-type: none
-            margin: 0 -20px 0 0
+            // It is probably a bad idea to modify this margin
+            margin: 0 -18px 0 0
             padding: 0
             @include vertical-gradient(#fcfcfc, #dedede)
             &:first-child .label
@@ -1946,6 +2028,7 @@ $sheet-max-width: 860px
             &.oe_form_field_float,&.oe_form_view_integer
                 input
                     text-align: right
+                    width: 100%
             &.oe_form_field_datetime,&.oe_form_field_date
                 > span
                     width: 100%
@@ -2068,13 +2151,16 @@ $sheet-max-width: 860px
             text-indent: -9001px
         td.oe_list_field_handle
             width: 1em
+            padding: 0 !important
             cursor: ns-resize
             .oe_list_handle
-                @include text-to-icon("ö")
+                @include text-to-entypo-icon("}",#E0E0E0,18px)
+                margin-right: 7px
 
     .oe_list_cannot_edit
         .oe_list_header_handle, .oe_list_field_handle
             display: none !important
+            padding: 0 !important
     .oe_list_cannot_delete
         .oe_list_record_delete
             display: none !important
@@ -2095,22 +2181,29 @@ $sheet-max-width: 860px
         width: 100%
         background-color: white
         border-spacing: 0
+        color: #4c4c4c
         th
             padding: 10px
-            color: #4c4c4c
             font-weight: bold
             background-color: #f0f0f0
             border-bottom: 2px solid #cacaca
-        .treeview-tr, .treeview-td
+
+        td
             cursor: pointer
-            border-right: 1px dotted $tag-border
-            vertical-align: top
+            vertical-align: middle
             text-align: left
-            border-bottom: 1px solid #cfcccc
-        tr:hover
-            background-color: #e0e0f8
-        .oe-number
+            vertical-align: middle
+            height: 20px
+            padding-left: 4px
+            padding-right: 4px
+            border-right: 1px solid #e7e7e7
+
+        td.oe_number
             text-align: right !important
+        tr
+            border-bottom: 1px solid #d6d6d6
+            &:hover
+                background-color: #e7e7e7
         span
             font-size: 90%
             font-weight: normal
@@ -2122,10 +2215,7 @@ $sheet-max-width: 860px
             background-image: url(/web/static/src/img/collapse.gif)
         .treeview-tr.oe-treeview-first span, .treeview-td.oe-treeview-first span
             margin-left: 16px
-    // }}}
-    // Translation {{{
-    .oe_trad_field.touched
-        border: 1px solid green !important
+
     // }}}
     // Debugging stuff {{{
     .oe_layout_debugging
index 3114aaf..e918542 100644 (file)
@@ -79,6 +79,9 @@ instance.web.Dialog = instance.web.Widget.extend({
             }
         }
         if (options) {
+            if (options.buttons) {
+                this.params_buttons = true;
+            }
             _.extend(this.dialog_options, options);
         }
     },
@@ -123,7 +126,13 @@ instance.web.Dialog = instance.web.Widget.extend({
         if (! this.dialog_inited)
             this.init_dialog();
         var o = this.get_options(options);
+        if (! this.params_buttons) {
+            this.$buttons.appendTo($("body"));
+        }
         instance.web.dialog(this.$el, o).dialog('open');
+        if (! this.params_buttons) {
+            this.$buttons.appendTo(this.$el.dialog("widget"));
+        }
         if (o.height === 'auto' && o.max_height) {
             this.$el.css({ 'max-height': o.max_height, 'overflow-y': 'auto' });
         }
@@ -133,6 +142,10 @@ instance.web.Dialog = instance.web.Widget.extend({
         this.renderElement();
         var o = this.get_options(options);
         instance.web.dialog(this.$el, o);
+        if (! this.params_buttons) {
+            this.$buttons = $('<div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" />');
+            this.$el.dialog("widget").append(this.$buttons);
+        }
         var res = this.start();
         this.dialog_inited = true;
         return res;
@@ -519,7 +532,9 @@ instance.web.Login =  instance.web.Widget.extend({
         });
         var d;
         if (self.params.db) {
-            d = self.do_login(self.params.db, self.params.login, self.params.password);
+            if (self.params.login && self.params.password) {
+                d = self.do_login(self.params.db, self.params.login, self.params.password);
+            }
         } else {
             d = self.rpc("/web/database/get_list", {}).done(self.on_db_loaded).fail(self.on_db_failed);
         }
@@ -564,7 +579,7 @@ instance.web.Login =  instance.web.Widget.extend({
      */
     do_login: function (db, login, password) {
         var self = this;
-        this.$el.removeClass('oe_login_invalid');
+        self.hide_error();
         self.$(".oe_login_pane").fadeOut("slow");
         return this.session.session_authenticate(db, login, password).pipe(function() {
             if (self.has_local_storage) {
@@ -581,12 +596,19 @@ instance.web.Login =  instance.web.Widget.extend({
                 }
             }
             self.trigger('login_successful');
-        },function () {
+        }, function () {
             self.$(".oe_login_pane").fadeIn("fast", function() {
-                self.$el.addClass("oe_login_invalid");
+                self.show_error("Invalid username or password");
             });
         });
     },
+    show_error: function(message) {
+        this.$el.addClass("oe_login_invalid");
+        this.$(".oe_login_error_message").text(message);
+    },
+    hide_error: function() {
+        this.$el.removeClass('oe_login_invalid');
+    },
 });
 instance.web.client_actions.add("login", "instance.web.Login");
 
index 5b7314a..96369d4 100644 (file)
@@ -16,6 +16,14 @@ instance.web.form = {};
  * Events:
  *     - view_content_has_changed : when the values of the fields have changed. When
  *     this event is triggered all fields should reprocess their modifiers.
+ *     - field_changed:<field_name> : when the value of a field change, an event is triggered
+ *     named "field_changed:<field_name>" with <field_name> replaced by the name of the field.
+ *     This event is not related to the on_change mechanism of OpenERP and is always called
+ *     when the value of a field is setted or changed. This event is only triggered when the
+ *     value of the field is syntactically valid, but it can be triggered when the value
+ *     is sematically invalid (ie, when a required field is false). It is possible that an event
+ *     about a precise field is never triggered even if that field exists in the view, in that
+ *     case the value of the field is assumed to be false.
  */
 instance.web.form.FieldManagerMixin = {
     /**
@@ -26,6 +34,11 @@ instance.web.form.FieldManagerMixin = {
      * Returns true when the view is in create mode.
      */
     is_create_mode: function() {},
+    /**
+     * Returns the current value of a field present in the view. See the get_value() method
+     * method in FieldInterface for further information.
+     */
+    get_field_value: function(field_name) {},
 };
 
 instance.web.views.add('form', 'instance.web.FormView');
@@ -162,8 +175,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
         this.$el.find(".oe_form_group_row,.oe_form_field,label").on('click', function (e) {
             if(self.get("actual_mode") == "view") {
                 var $button = self.options.$buttons.find(".oe_form_button_edit");
-                $button.effect('bounce', {distance: 18, times: 5}, 150)
+                $button.effect('bounce', {distance: 18, times: 5}, 150);
                 e.stopPropagation();
+                instance.web.bus.trigger('click', e);
             }
         });
 
@@ -270,9 +284,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
         if (this.$buttons) {
             this.$buttons.show();
         }
-        if (this.$pager) {
-            this.$pager.show();
-        }
         this.$el.show().css({
             opacity: '0',
             filter: 'alpha(opacity = 0)'
@@ -333,7 +344,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
 
         _(this.fields).each(function (field, f) {
             field._dirty_flag = false;
+            field._inhibit_on_change_flag = true;
             var result = field.set_value(self.datarecord[f] || false);
+            field._inhibit_on_change_flag = false;
             set_values.push(result);
         });
         return $.when.apply(null, set_values).pipe(function() {
@@ -408,7 +421,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
             this.$pager.remove();
         if (this.get("actual_mode") === "create")
             return;
-        this.$pager = $(QWeb.render("FormView.pager", {'widget':self}));
+        this.$pager = $(QWeb.render("FormView.pager", {'widget':self})).hide();
         if (this.options.$pager) {
             this.$pager.appendTo(this.options.$pager);
         } else {
@@ -421,10 +434,12 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
         this.do_update_pager();
     },
     do_update_pager: function(hide_index) {
-        var index = hide_index ? '-' : this.dataset.index + 1;
-        this.$pager.find('button').prop('disabled', this.dataset.ids.length < 2).end()
-                   .find('span.oe_pager_index').html(index).end()
-                   .find('span.oe_pager_count').html(this.dataset.ids.length);
+        this.$pager.toggle(this.dataset.ids.length > 1);
+        if (hide_index) {
+            $(".oe_form_pager_state", this.$pager).html("");
+        } else {
+            $(".oe_form_pager_state", this.$pager).html(_.str.sprintf(_t("%d / %d"), this.dataset.index + 1, this.dataset.ids.length));
+        }
     },
     parse_on_change: function (on_change, widget) {
         var self = this;
@@ -580,7 +595,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
                 if (field) {
                     var value_ = result.value[f];
                     if (field.get_value() != value_) {
+                        field._inhibit_on_change_flag = true;
                         field.set_value(value_);
+                        field._inhibit_on_change_flag = false;
                         field._dirty_flag = true;
                         if (!_.contains(processed, field.name)) {
                             this.do_onchange(field, processed);
@@ -940,6 +957,15 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
                 return self.dataset.parent_view.recursive_save();
         });
     },
+    recursive_reload: function() {
+        var self = this;
+        var pre = $.when();
+        if (self.dataset.parent_view)
+                pre = self.dataset.parent_view.recursive_reload();
+        return pre.pipe(function() {
+            return self.reload();
+        });
+    },
     is_dirty: function() {
         return _.any(this.fields, function (value_) {
             return value_._dirty_flag;
@@ -1043,6 +1069,12 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
             this.translatable_fields.push(field);
         }
         field.on('changed_value', this, function() {
+            if (field.is_syntax_valid()) {
+                this.trigger('field_changed:' + name);
+            }
+            if (field._inhibit_on_change_flag) {
+                return;
+            }
             field._dirty_flag = true;
             if (field.is_syntax_valid()) {
                 this.do_onchange(field);
@@ -1057,6 +1089,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
     is_create_mode: function() {
         return this.get("actual_mode") === "create";
     },
+    get_field_value: function(field_name) {
+        return this.fields[field_name].get_value();
+    },
 });
 
 /**
@@ -1809,7 +1844,7 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({
         return this.view.do_execute_action(
             _.extend({}, this.node.attrs, {context: context}),
             this.view.dataset, this.view.datarecord.id, function () {
-                self.view.reload();
+                self.view.recursive_reload();
             });
     },
     check_disable: function() {
@@ -1827,7 +1862,8 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({
  *     - force_readonly: boolean, When it is true, the field should always appear
  *      in read only mode, no matter what the value of the "readonly" property can be.
  * Events:
- *     - changed_value: triggered to inform the view to check on_changes
+ *     - changed_value: triggered when the value of the field has changed. This can be due
+ *      to a user interaction or a call to set_value().
  *
  */
 instance.web.form.FieldInterface = {
@@ -1939,8 +1975,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w
         this.on("change:force_readonly", this, test_effective_readonly);
         test_effective_readonly.call(this);
         this.on("change:value", this, function() {
-            if (! this._inhibit_on_change)
-                this.trigger('changed_value');
+            this.trigger('changed_value');
             this._check_css_flags();
         });
     },
@@ -1975,9 +2010,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w
         this.$el.toggleClass('oe_form_required', this.get("required"));
     },
     set_value: function(value_) {
-        this._inhibit_on_change = true;
         this.set({'value': value_});
-        this._inhibit_on_change = false;
     },
     get_value: function() {
         return this.get('value');
@@ -2614,6 +2647,7 @@ instance.web.form.CompletionFieldMixin = {
 
         var dataset = new instance.web.DataSet(this, this.field.relation, self.build_context());
         var blacklist = this.get_search_blacklist();
+        this.last_query = search_val;
 
         return this.orderer.add(dataset.name_search(
                 search_val, new instance.web.CompoundDomain(self.build_domain(), [["id", "not in", blacklist]]),
@@ -2721,6 +2755,32 @@ instance.web.form.CompletionFieldMixin = {
     },
 };
 
+instance.web.form.M2ODialog = instance.web.Dialog.extend({
+    template: "M2ODialog",
+    init: function(parent) {
+        this._super(parent, {
+            title: _.str.sprintf(_t("Add %s"), parent.string),
+            width: 312,
+        });
+    },
+    start: function() {
+        var self = this;
+        this.$buttons.html(QWeb.render("M2ODialog.buttons"));
+        this.$("input").val(this.getParent().last_query);
+        this.$buttons.find(".oe_form_m2o_qc_button").click(function(){
+            self.getParent()._quick_create(self.$("input").val());
+            self.destroy();
+        });
+        this.$buttons.find(".oe_form_m2o_sc_button").click(function(){
+            self.getParent()._search_create_popup("form", undefined, self.getParent()._create_context(self.$("input").val()));
+            self.destroy();
+        });
+        this.$buttons.find(".oe_form_m2o_cancel_button").click(function(){
+            self.destroy();
+        });
+    },
+});
+
 instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instance.web.form.CompletionFieldMixin, instance.web.form.ReinitializeFieldMixin, {
     template: "FieldMany2One",
     init: function(field_manager, node) {
@@ -2751,26 +2811,23 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
             this.render_editable();
         this.render_value();
     },
+    init_error_displayer: function() {
+        // nothing
+    },
+    hide_error_displayer: function() {
+        // doesn't work
+    },
+    show_error_displayer: function() {
+        new instance.web.form.M2ODialog(this).open();
+    },
     render_editable: function() {
         var self = this;
         this.$input = this.$el.find("input");
 
-        self.$input.tipsy({
-            title: function() {
-                return QWeb.render('Tipsy.alert', {
-                    message: "No element was selected, you should create or select one from the dropdown list."
-                });
-            },
-            trigger:'manual',
-            fade: true,
-            gravity: 's',
-            html: true,
-            opacity: 1,
-            offset: 4,
-        });
+        this.init_error_displayer();
 
         self.$input.on('focus', function() {
-            self.$input.tipsy("hide");
+            self.hide_error_displayer();
         });
 
         this.$drop_down = this.$el.find(".oe_m2o_drop_down_button");
@@ -2824,10 +2881,10 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
                 }
             }
         });
-        self.tip_def = $.Deferred();
-        self.untip_def = $.Deferred();
-        var tip_delay = 200;
-        var tip_duration = 15000;
+        self.ed_def = $.Deferred();
+        self.uned_def = $.Deferred();
+        var ed_delay = 200;
+        var ed_duration = 15000;
         var anyoneLoosesFocus = function() {
             var used = false;
             if (self.floating) {
@@ -2847,25 +2904,25 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
                 }
                 self.floating = false;
             }
-            if (used && self.get("value") === false && ! self.no_tipsy) {
-                self.tip_def.reject();
-                self.untip_def.reject();
-                self.tip_def = $.Deferred();
-                self.tip_def.then(function() {
-                    self.$input.tipsy("show");
+            if (used && self.get("value") === false && ! self.no_ed) {
+                self.ed_def.reject();
+                self.uned_def.reject();
+                self.ed_def = $.Deferred();
+                self.ed_def.then(function() {
+                    self.show_error_displayer();
                 });
                 setTimeout(function() {
-                    self.tip_def.resolve();
-                    self.untip_def.reject();
-                    self.untip_def = $.Deferred();
-                    self.untip_def.then(function() {
-                        self.$input.tipsy("hide");
+                    self.ed_def.resolve();
+                    self.uned_def.reject();
+                    self.uned_def = $.Deferred();
+                    self.uned_def.then(function() {
+                        self.hide_error_displayer();
                     });
-                    setTimeout(function() {self.untip_def.resolve();}, tip_duration);
-                }, tip_delay);
+                    setTimeout(function() {self.uned_def.resolve();}, ed_duration);
+                }, ed_delay);
             } else {
-                self.no_tipsy = false;
-                self.tip_def.reject();
+                self.no_ed = false;
+                self.ed_def.reject();
             }
         };
         var ignore_blur = false;
@@ -2950,7 +3007,9 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
         if (!this.get("effective_readonly")) {
             this.$input.val(str.split("\n")[0]);
             this.current_display = this.$input.val();
-            this.$('.oe_m2o_cm_button').css({'visibility': this.is_false() ? 'hidden' : 'visible'});
+            if(this.is_false()){
+                this.$('.oe_m2o_cm_button').css({'display':'none'});
+            }
         } else {
             var lines = _.escape(str).split("\n");
             var link = "";
@@ -3005,13 +3064,13 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
         this.$input.focus();
     },
     _quick_create: function() {
-        this.no_tipsy = true;
-        this.tip_def.reject();
+        this.no_ed = true;
+        this.ed_def.reject();
         return instance.web.form.CompletionFieldMixin._quick_create.apply(this, arguments);
     },
     _search_create_popup: function() {
-        this.no_tipsy = true;
-        this.tip_def.reject();
+        this.no_ed = true;
+        this.ed_def.reject();
         return instance.web.form.CompletionFieldMixin._search_create_popup.apply(this, arguments);
     },
 });
@@ -3288,6 +3347,7 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
             this.dataset.index = 0;
         }
         self.is_setted.resolve();
+        this.trigger_on_change();
         return self.reload_current_view();
     },
     get_value: function() {
@@ -3340,7 +3400,7 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
         }, this));
     },
     is_syntax_valid: function() {
-        if (!this.viewmanager.views[this.viewmanager.active_view])
+        if (! this.viewmanager || ! this.viewmanager.views[this.viewmanager.active_view])
             return true;
         var view = this.viewmanager.views[this.viewmanager.active_view].controller;
         switch (this.viewmanager.active_view) {
@@ -4768,7 +4828,10 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({
     get_selection: function() {
         var self = this;
         if (this.field.type == "many2one") {
-            var domain = new instance.web.CompoundDomain(['|'], self.build_domain(), [['id', '=', self.selected_value]]);
+            var domain = [];
+            if(!_.isEmpty(this.field.domain) || !_.isEmpty(this.node.attrs.domain)) {
+                domain = new instance.web.CompoundDomain(['|'], self.build_domain(), [['id', '=', self.selected_value]]);
+            }
             var ds = new instance.web.DataSetSearch(this, this.field.relation, self.build_context(), domain);
             ds.read_slice(['name'], {}).done( function (records) {
                 for(var i = 0; i < records.length; i++) {
index 0bee5ca..8fcda14 100644 (file)
@@ -399,10 +399,14 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
      */
     setup_columns: function (fields, grouped) {
         var registry = instance.web.list.columns;
+        var reorder = this.options.reorderable;
         this.columns.splice(0, this.columns.length);
         this.columns.push.apply(this.columns,
             _(this.fields_view.arch.children).map(function (field) {
                 var id = field.attrs.name;
+                if(field.attrs.widget == 'handle' && !reorder){
+                    field.attrs.reorderable = reorder || true;
+                }
                 return registry.for_(id, fields[id], field);
         }));
         if (grouped) {
@@ -411,9 +415,8 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
         }
 
         this.visible_columns = _.filter(this.columns, function (column) {
-            return column.invisible !== '1';
+            return column.invisible !== '1' && !column.reorderable;
         });
-
         this.aggregate_columns = _(this.visible_columns).invoke('to_aggregate');
     },
     /**
index 608a856..d170aac 100644 (file)
@@ -318,8 +318,8 @@ instance.web.ActionManager = instance.web.Widget.extend({
         }
         return this.ir_actions_common(action, on_close, clear_breadcrumbs);
     },
-    ir_actions_client: function (action, on_close) {
-        return this.ir_actions_common(action, on_close);
+    ir_actions_client: function (action, on_close, clear_breadcrumbs) {
+        return this.ir_actions_common(action, on_close, clear_breadcrumbs);
     },
     ir_actions_act_window_close: function (action, on_closed) {
         if (!this.dialog && on_closed) {
index 5c58c3a..15daa43 100644 (file)
@@ -61,7 +61,7 @@
 <t t-name="Login">
     <div class="oe_login">
         <div class="oe_login_bottom"> </div>
-        <div class="oe_login_error_message">Invalid username or password</div>
+        <div class="oe_login_error_message"/>
         <div class="oe_login_pane">
             <div class="oe_login_logo"><img src='/web/static/src/img/logo2.png'/></div>
             <form action="" method="post">
 <t t-name="Menu">
     <ul class="oe_menu" t-if="widget.data">
         <li t-foreach="widget.data.data.children" t-as="menu">
-            <t t-call="Menu.secondary.link"/>
+            <t t-call="Menu.link"/>
         </li>
     </ul>
 </t>
                 <t t-esc="menu.name"/>
                 <!--
                     Shall the section be still clickable ?
-                    <t t-call="Menu.secondary.link"/>
+                    <t t-call="Menu.link"/>
                 -->
             </div>
             <t t-call="Menu.secondary.submenu"/>
 <t t-name="Menu.secondary.submenu">
     <ul t-if="menu.children.length" class="oe_secondary_submenu">
         <li t-foreach="menu.children" t-as="menu">
-            <t t-call="Menu.secondary.link"/>
+            <t t-call="Menu.link"/>
             <!--<span class="oe_menu_label">8</span>-->
             <t t-call="Menu.secondary.submenu"/>
         </li>
     </ul>
 </t>
-<t t-name="Menu.secondary.link">
+<t t-name="Menu.link">
     <a t-attf-href="#menu_id=#{menu.id}&amp;action=#{menu.action ? menu.action.split(',')[1] : ''}"
         t-att-class="menu.children.length ? 'oe_menu_toggler' : 'oe_menu_leaf'"
         t-att-data-menu="menu.id"
     <t t-set="children" t-value="record[children_field]"/>
     <t t-set="class" t-value="children and children.length ? 'treeview-tr' : 'treeview-td'"/>
     <t t-set="rank" t-value="'oe-treeview-first'"/>
-    <t t-set="style" t-value="'background-position: ' + 19*(level-1) + 'px; padding-left: ' + 19*(level-1) + 'px;'"/>
+    <t t-set="style" t-value="'background-position: ' + 19*(level-1) + 'px; padding-left: ' + (4 + 19*(level-1)) + 'px;'"/>
 
     <td t-foreach="fields_view" t-as="field"
         t-if="!field.attrs.modifiers.tree_invisible"
                 <input type="checkbox" class="oe_list_record_selector"/>
             </th>
             <t t-foreach="columns" t-as="column">
-                <th t-if="!column.meta and column.invisible !== '1'" t-att-data-id="column.id"
+                <th t-if="!column.meta and column.invisible !== '1' and !column.reorderable" t-att-data-id="column.id"
                     t-attf-class="oe_list_header_#{column.widget or column.type} #{((options.sortable and column.tag !== 'button') ? 'oe_sortable' : null)}">
                     <t t-if="column.tag !== 'button'"><t t-esc="column.string"/></t>
                 </th>
     <t t-foreach="columns" t-as="column">
         <t t-set="number" t-value="column.type === 'integer' or column.type == 'float'"/>
         <t t-set="modifiers" t-value="column.modifiers_for(asData)"/>
-        <td t-if="!column.meta and column.invisible !== '1'" t-att-title="column.help"
+        <td t-if="!column.meta and column.invisible !== '1' and !column.reorderable" t-att-title="column.help"
             t-attf-class="oe_list_field_cell oe_list_field_#{column.widget or column.type} #{number ? 'oe_number' : ''} #{column.tag === 'button' ? 'oe-button' : ''} #{modifiers.readonly ? 'oe_readonly' : ''} #{modifiers.required ? 'oe_required' : ''}"
             t-att-data-field="column.id"
             ><t t-raw="render_cell(record, column)"/></td>
 <t t-name="FormView.pager">
     <div class="oe_form_pager">
         <t t-if="widget.options.pager !== false" t-call="ViewPager">
-            <span class="oe_pager_index">0</span><span class="oe_pager_separator"> / </span><span class="oe_pager_count">0</span>
+            <span class="oe_form_pager_state"></span>
         </t>
     </div>
 </t>
                 t-att-tabindex="widget.node.attrs.tabindex"
                 t-att-autofocus="widget.node.attrs.autofocus"
                 t-att-placeholder="widget.node.attrs.placeholder"
+                t-att-maxlength="widget.field.size"
             /><img class="oe_field_translate oe_input_icon" t-if="widget.field.translate" t-att-src='_s + "/web/static/src/img/icons/terp-translate.png"' width="16" height="16" border="0"/>
         </t>
     </span>
                     t-att-tabindex="widget.node.attrs.tabindex"
                     t-att-autofocus="widget.node.attrs.autofocus"
                     t-att-placeholder="widget.node.attrs.placeholder"
+                t-att-maxlength="widget.field.size"
                 />
             </div>
         </t>
             t-att-tabindex="widget.node.attrs.tabindex"
             t-att-autofocus="widget.node.attrs.autofocus"
             t-att-placeholder="! widget.get('effective_readonly') ? widget.node.attrs.placeholder : ''"
+            t-att-maxlength="widget.field.size"
         ></textarea><img class="oe_field_translate oe_input_icon"
                         t-if="widget.field.translate and !widget.get('effective_readonly')"
                         t-att-src='_s + "/web/static/src/img/icons/terp-translate.png"' width="16" height="16" border="0"
                         <t t-call="HiddenInputFile">
                             <t t-set="fileupload_id" t-value="widget.fileupload_id"/>
                             <t t-set="fileupload_style">width: 83px;</t>
-                            <button class="oe_button oe_field_button" type="button" title="Set Image">
+                            <button class="oe_button oe_field_button" type="button">
                                 <img t-att-src='_s + "/web/static/src/img/icons/STOCK_DIRECTORY.png"'/>
                                 <span>Select</span>
                             </button>
         <div class="oe_throbber_message" style="color:white"></div>
     </div>
 </t>
+<t t-name="M2ODialog">
+    <div>
+        Name: <input class="oe_form_m2o_input_name" type="text"/>
+    </div>
+</t>
+<t t-name="M2ODialog.buttons">
+    <button class="oe_form_m2o_qc_button oe_button oe_highlight">Quick Add</button>
+    <button class="oe_form_m2o_sc_button oe_button">Add All Info...</button>
+    <button class="oe_form_m2o_cancel_button oe_button">Cancel</button>
+</t>
 </templates>
index b7008a5..52ea63e 100644 (file)
@@ -1,5 +1,14 @@
+.oe_view_manager_view_calendar {
+    position: relative;
+}
 .oe_calendar_table {
+    position: absolute;
+    left: 0px;
+    right: 0px;
+    top: 0px;
     border-top: 3px solid #eee;
+    width:100%;
+    overflow: hidden;
 }
 .oe_calendar {
     background-color:#eee;
index c3a9a25..5eb966a 100644 (file)
@@ -172,8 +172,7 @@ instance.web_calendar.CalendarView = instance.web.View.extend({
 
         scheduler.init(this.$el.find('.oe_calendar')[0], null, this.mode || 'month');
 
-        // Remove hard coded style attributes from dhtmlx scheduler
-        this.$el.find(".dhx_cal_navline div").removeAttr('style');
+
 
         scheduler.detachAllEvents();
         scheduler.attachEvent('onEventAdded', this.do_create_event);
@@ -184,12 +183,19 @@ instance.web_calendar.CalendarView = instance.web.View.extend({
 
         scheduler.attachEvent('onViewChange', this.on_view_changed);
         this.refresh_scheduler();
+
+        // Remove hard coded style attributes from dhtmlx scheduler
+        this.$el.find(".dhx_cal_navline").removeAttr('style');
+        instance.web.bus.on('resize',this,function(){
+            self.$el.find(".dhx_cal_navline").removeAttr('style');
+        });
     },
     on_view_changed: function(mode, date) {
         this.$el.find('.oe_calendar').removeClass('oe_cal_day oe_cal_week oe_cal_month').addClass('oe_cal_' + mode);
         if (!date.between(this.range_start, this.range_stop)) {
             this.update_range_dates(date);
             this.do_ranged_search();
+            this.$el.find(".dhx_cal_navline div").removeAttr('style');
         }
         this.ready.resolve();
     },
index 48cf725..d865213 100644 (file)
@@ -7,14 +7,14 @@
   background: url(/web/static/src/img/form_sheetbg.png);
 }
 .openerp .oe_kanban_view .ui-sortable-placeholder {
-  border: 1px dotted black;
+  border: 1px solid rgba(0, 0, 0, 0.1);
   visibility: visible !important;
   height: 60px !important;
 }
 .openerp .oe_kanban_view .ui-sortable-helper {
-  -moz-box-shadow: 0 1px 20px rgba(0, 0, 0, 0.9);
-  -webkit-box-shadow: 0 1px 20px rgba(0, 0, 0, 0.9);
-  -box-shadow: 0 1px 20px rgba(0, 0, 0, 0.9);
+  -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.3);
+  -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.3);
+  -box-shadow: 0 1px 10px rgba(0, 0, 0, 0.3);
   -moz-transform: rotate(3deg);
   -webkit-transform: rotate(3deg);
   -o-transform: rotate(3deg);
   white-space: nowrap;
   display: none;
   position: relative;
-  top: 5px;
+  opacity: 0.75;
+  top: 20px;
 }
 .openerp .oe_kanban_view .oe_kanban_add, .openerp .oe_kanban_view .oe_kanban_header .oe_dropdown_toggle {
   margin-left: 4px;
   position: relative;
   top: -8px;
 }
+.openerp .oe_kanban_view .oe_kanban_card, .openerp .oe_kanban_view .oe_dropdown_toggle {
+  cursor: pointer;
+  display: inline-block;
+}
 .openerp .oe_kanban_view .oe_kanban_add {
   float: right;
 }
   padding: 10px;
 }
 .openerp .oe_kanban_view .oe_kanban_quick_create input {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   outline: none;
-  border: none;
-  -moz-box-shadow: none;
-  -webkit-box-shadow: none;
-  -box-shadow: none;
+  border: 1px solid transparent;
   display: block;
-  margin: 0 0 8px 0;
+  margin-bottom: 8px;
   font-size: 13px;
   width: 100%;
+  -moz-box-shadow: none;
+  -webkit-box-shadow: none;
+  -box-shadow: none;
+}
+.openerp .oe_kanban_view .oe_kanban_quick_create input:focus {
+  border: 1px solid #a6a6fe;
+  -moz-box-shadow: 0px 0px 7px rgba(0, 133, 255, 0.3) inset;
+  -webkit-box-shadow: 0px 0px 7px rgba(0, 133, 255, 0.3) inset;
+  -box-shadow: 0px 0px 7px rgba(0, 133, 255, 0.3) inset;
 }
 .openerp .oe_kanban_view .oe_kanban_vignette {
   padding: 8px;
 }
 .openerp .oe_kanban_view .oe_kanban_details .oe_tag {
   display: inline-block;
-  margin: 0 0 2px 0;
+  margin: 0 2px 2px 0;
 }
 .openerp .oe_kanban_view .oe_kanban_record {
   position: relative;
   display: block;
-  min-height: 50px;
+  min-height: 20px;
   margin: 0;
   -moz-border-radius: 4px;
   -webkit-border-radius: 4px;
   position: relative;
   display: block;
   background: white;
-  border: 1px solid #d8d8d8;
-  border-bottom-color: #b9b9b9;
+  border: 1px solid rgba(0, 0, 0, 0.16);
+  border-bottom-color: rgba(0, 0, 0, 0.3);
   padding: 8px;
   display: block;
   -moz-border-radius: 4px;
 }
 .openerp .oe_kanban_view .oe_kanban_color_0 {
   background-color: white;
+  color: #5a5a5a;
 }
 .openerp .oe_kanban_view .oe_kanban_color_1 {
   background-color: #cccccc;
+  color: #424242;
 }
 .openerp .oe_kanban_view .oe_kanban_color_2 {
   background-color: #ffc7c7;
+  color: #7a3737;
 }
 .openerp .oe_kanban_view .oe_kanban_color_3 {
   background-color: #fff1c7;
+  color: #756832;
 }
 .openerp .oe_kanban_view .oe_kanban_color_4 {
   background-color: #e3ffc7;
+  color: #5d6937;
 }
 .openerp .oe_kanban_view .oe_kanban_color_5 {
   background-color: #c7ffd5;
+  color: #1a7759;
 }
 .openerp .oe_kanban_view .oe_kanban_color_6 {
   background-color: #c7ffff;
+  color: #1a5d83;
 }
 .openerp .oe_kanban_view .oe_kanban_color_7 {
   background-color: #c7d5ff;
+  color: #3b3e75;
 }
 .openerp .oe_kanban_view .oe_kanban_color_8 {
   background-color: #e3c7ff;
+  color: #4c3668;
 }
 .openerp .oe_kanban_view .oe_kanban_color_9 {
   background-color: #ffc7f1;
+  color: #6d2c70;
 }
 
 .openerp .oe_form .oe_kanban_view .oe_kanban_column, .openerp .oe_form .oe_kanban_view .oe_kanban_group_header {
index 95a63db..8063d9d 100644 (file)
     -webkit-box-shadow: $bsval
     -box-shadow: $bsval
 
+@mixin box-sizing($sizing: border-box)
+    -webkit-box-sizing: $sizing
+    -moz-box-sizing: $sizing
+    box-sizing: $sizing
+
 @mixin transform($transform)
     -moz-transform: $transform
     -webkit-transform: $transform
     &.oe_kanban_grouped .oe_kanban_dummy_cell
         background: url(/web/static/src/img/form_sheetbg.png)
     .ui-sortable-placeholder
-        border: 1px dotted black
+        border: 1px solid rgba(0,0,0,0.1)
         visibility: visible !important
         height: 60px !important
     .ui-sortable-helper
-        @include box-shadow(0 1px 20px rgba(0, 0, 0, 0.9))
+        @include box-shadow(0 1px 10px rgba(0, 0, 0, 0.3))
         @include transform(rotate(3deg))
     .oe_kanban_left
         float: left
         white-space: nowrap
         display: none
         position: relative
-        top: 5px
+        opacity: 0.75
+        top: 20px
     // }}}
     // KanbanQuickCreate {{{
     .oe_kanban_add, .oe_kanban_header .oe_dropdown_toggle
         cursor: pointer
         position: relative
         top: -8px
+    .oe_kanban_card, .oe_dropdown_toggle
+        cursor: pointer
+        display: inline-block
     .oe_kanban_add
         float: right
 
         width: 200px
         padding: 10px
     .oe_kanban_quick_create input
+        @include box-sizing(border-box)
         outline: none
-        border: none
-        @include box-shadow(none)
+        border: 1px solid transparent
         display: block
-        margin: 0 0 8px 0
+        margin-bottom: 8px
         font-size: 13px
         width: 100%
+        @include box-shadow(none)
+        &:focus
+            border: 1px solid #A6A6FE
+            @include box-shadow(0px 0px 7px rgba(0, 133, 255, 0.3) inset)
     // }}}
     // KanbanRecords {{{
     .oe_kanban_vignette
             margin: 0 0 4px 0
         .oe_tag
             display: inline-block
-            margin: 0 0 2px 0
+            margin: 0 2px 2px 0
     .oe_kanban_record
         position: relative
         display: block
-        min-height: 50px
+        min-height: 20px
         margin: 0
         @include radius(4px)
         &:last-child
         position: relative
         display: block
         background: white
-        border: 1px solid #d8d8d8
-        border-bottom-color: #b9b9b9
+        border: 1px solid rgba(0,0,0,0.16)
+        border-bottom-color: rgba(0,0,0,0.3)
         padding: 8px
         display: block
         @include radius(4px)
     // KanbanColors {{{
     .oe_kanban_color_0
         background-color: #FFFFFF
-
+        color: #5a5a5a
     .oe_kanban_color_1
         background-color: #CCCCCC
-
+        color: #424242
     .oe_kanban_color_2
         background-color: #FFC7C7
-
+        color: #7a3737
     .oe_kanban_color_3
         background-color: #FFF1C7
-
+        color: #756832
     .oe_kanban_color_4
         background-color: #E3FFC7
-
+        color: #5d6937
     .oe_kanban_color_5
         background-color: #C7FFD5
-
+        color: #1a7759
     .oe_kanban_color_6
         background-color: #C7FFFF
-
+        color: #1a5d83
     .oe_kanban_color_7
         background-color: #C7D5FF
-
+        color: #3b3e75
     .oe_kanban_color_8
         background-color: #E3C7FF
-
+        color: #4c3668
     .oe_kanban_color_9
         background-color: #FFC7F1
+        color: #6d2c70
 
 .openerp .oe_form .oe_kanban_view
     .oe_kanban_column, .oe_kanban_group_header
index e63f341..bd36dcb 100644 (file)
@@ -71,6 +71,7 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
         this.fields_keys = _.keys(this.fields_view.fields);
         this.add_qweb_template();
         this.has_been_loaded.resolve();
+        this._super.apply(this, arguments);
         return $.when();
     },
     _is_quick_create_enabled: function() {
@@ -85,6 +86,9 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
             return false;
         return this._super(action);
     },
+    /*  add_qweb_template
+    *   select the nodes into the xml and send to extract_aggregates the nodes with TagName="field"
+    */
     add_qweb_template: function() {
         for (var i=0, ii=this.fields_view.arch.children.length; i < ii; i++) {
             var child = this.fields_view.arch.children[i];
@@ -97,6 +101,9 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
             }
         }
     },
+    /*  extract_aggregates
+    *   extract the agggregates from the nodes (TagName="field")
+    */
     extract_aggregates: function(node) {
         for (var j = 0, jj = this.group_operators.length; j < jj;  j++) {
             if (node.attrs[this.group_operators[j]]) {
@@ -121,9 +128,15 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
         }
         switch (node.tag) {
             case 'field':
-                node.tag = QWeb.prefix;
-                node.attrs[QWeb.prefix + '-esc'] = 'record.' + node.attrs['name'] + '.value';
-                this.extract_aggregates(node);
+                if(this.fields_view.fields[ node.attrs['name'] ].type == 'many2many'){
+                    node.tag =  'div';
+                    node.attrs['class'] = 'oe_form_field oe_tags';
+                    node.attrs['model'] = this.fields_view.fields[node.attrs['name']].relation;
+                    node.attrs['t-att-data'] = 'record.' + node.attrs['name'] + '.raw_value';
+                }else {
+                    node.tag = QWeb.prefix;
+                    node.attrs[QWeb.prefix + '-esc'] = 'record.' + node.attrs['name'] + '.value';
+                }
                 break;
             case 'button':
             case 'a':
@@ -350,6 +363,7 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
         } else {
             this.$el.find('.oe_kanban_draghandle').removeClass('oe_kanban_draghandle');
         }
+        instance.web_kanban.KanbanView.postprocessing_widget_many2many_tags(self);
     },
     on_record_moved : function(record, old_group, old_index, new_group, new_index) {
         var self = this;
@@ -434,6 +448,42 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
     }
 });
 
+/* 
+*  widget for list of tags/categories
+*  make the rpc request for all ids/model and insert value inside .oe_tags fields
+*/
+instance.web_kanban.KanbanView.postprocessing_widget_many2many_tags = function(self){
+    var model_list_id={};
+
+    // select all widget for the kanban view or the widget inside the record
+    self.$el.find(".oe_form_field.oe_tags").each(function(){
+         var model = $(this).attr("model");
+        if(model.length){
+            var data = $(this).attr("data");
+            var list = data.split(",");
+
+            //select all id (per model)
+            if(!model_list_id[model]) model_list_id[model]=[];
+            for(var t=0;t<list.length;t++) if(list[t]!="") model_list_id[model].push( list[t] );
+        }
+    });
+    // rpc and insert
+    for(var model in model_list_id){
+        if(model_list_id[model].length>0){
+            var block = self.$el.find(".oe_form_field.oe_tags[model='" + model + "']");
+            var dataset = new instance.web.DataSetSearch(self, model, self.session.context);
+            dataset.name_get(_.uniq( model_list_id[model] )).then(
+                function(result) {
+                    for(var t=0;t<result.length;t++){
+                        block.filter(function(){ return this.getAttribute("data").match(new RegExp('(^|,)'+result[t][0]+'(,|$)')); })
+                            .append('<span class="oe_tag" data-list_id="' + result[t][0] +'"">'+result[t][1]+'</span>');
+                    }
+                }
+            );
+        }
+    }
+}
+
 function get_class(name) {
     return new instance.web.Registry({'tmp' : name}).get_object("tmp");
 }
@@ -506,7 +556,9 @@ instance.web_kanban.KanbanGroup = instance.web.Widget.extend({
         });
 
         this.$el.find('.oe_kanban_add').click(function () {
-            if (self.quick) { return; }
+            if (self.quick) {
+                return self.quick.trigger('close');
+            }
             var ctx = {};
             ctx['default_' + self.view.group_by] = self.value;
             self.quick = new (get_class(self.view.quick_create_class))(this, self.dataset, ctx, true)
@@ -762,7 +814,7 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({
             }
         });
 
-        if (this.$el.find('.oe_kanban_global_click').length) {
+        if (this.$el.find('.oe_kanban_global_click,.oe_kanban_global_click_edit').length) {
             this.$el.on('click', function(ev) {
                 if (!ev.isTrigger && !$(ev.target).data('events')) {
                     var trigger = true;
@@ -803,8 +855,15 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({
             });
         }
     },
+    /* actions when user click on the block with a specific class
+     *  open on normal view : oe_kanban_global_click
+     *  open on form/edit view : oe_kanban_global_click_edit
+     */
     on_card_clicked: function(ev) {
-        this.view.open_record(this.id);
+        if(this.$el.find('.oe_kanban_global_click_edit').size()>0)
+            this.do_action_edit();
+        else
+            this.do_action_open();
     },
     setup_color_picker: function() {
         var self = this;
@@ -859,6 +918,7 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({
                 self.$el.data('widget', self);
                 self.bind_events();
                 self.group.compute_cards_auto_height();
+                instance.web_kanban.KanbanView.postprocessing_widget_many2many_tags(self);
             } else {
                 self.destroy();
             }
@@ -959,7 +1019,8 @@ instance.web_kanban.QuickCreate = instance.web.Widget.extend({
         $(".oe_kanban_quick_create_add", this.$el).click(function () {
             self.quick_add();
         });
-        $(".oe_kanban_quick_create_close", this.$el).click(function () {
+        $(".oe_kanban_quick_create_close", this.$el).click(function (ev) {
+            ev.preventDefault();
             self.trigger('close');
         });
         self.$input.keyup(function(e) {
@@ -977,7 +1038,7 @@ instance.web_kanban.QuickCreate = instance.web.Widget.extend({
     quick_add: function () {
         var self = this;
         this._dataset.call(
-            'name_create', [self.$input.val(), new instance.web.CompoundContext(
+            'name_create', [self.$input.val() || false, new instance.web.CompoundContext(
                     this._dataset.get_context(), this._context)])
             .pipe(function(record) {
                 self.$input.val("");
index 3537e96..817fcd9 100644 (file)
@@ -86,7 +86,7 @@
     <t t-if="widget._buttons">
         <div class="oe_kanban_quick_create_buttons">
             <button class="oe_kanban_quick_create_add">Add</button>
-            or <a class="oe_kanban_quick_create_close">Cancel</a>
+            or <a href="#" class="oe_kanban_quick_create_close">Cancel</a>
         </div>
     </t>
 </div>
diff --git a/addons/web_tests/i18n/fr_CA.po b/addons/web_tests/i18n/fr_CA.po
new file mode 100644 (file)
index 0000000..1247eb6
--- /dev/null
@@ -0,0 +1,20 @@
+# French (Canada) translation for openerp-web
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-07-02 09:06+0200\n"
+"PO-Revision-Date: 2012-09-19 12:09+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: French (Canada) <fr_CA@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:49+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
+
+
index f5d425c..7a1bfb6 100644 (file)
@@ -24,6 +24,7 @@ Depends:
  python-lxml,
  python-mako,
  python-openid,
+ python-psutil,
  python-psycopg2,
  python-pybabel,
  python-pychart,
diff --git a/gunicorn.conf.py b/gunicorn.conf.py
deleted file mode 100644 (file)
index 0f1d93a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# Gunicorn sample configuration file.
-# See http://gunicorn.org/configure.html for more details.
-#
-# To run the OpenERP server via Gunicorn, change the appropriate
-# settings below, in order to provide the parameters that
-# would normally be passed in the command-line,
-# (at least `bind` and `conf['addons_path']`), then execute:
-#   $ gunicorn openerp:wsgi.core.application -c gunicorn.conf.py
-# or if you want to run it behind a reverse proxy, add the line
-#   import openerp.wsgi.proxied
-# in this file and execute:
-#   $ gunicorn openerp:wsgi.proxied.application -c gunicorn.conf.py
-
-import openerp
-
-# Standard OpenERP XML-RPC port is 8069
-bind = '127.0.0.1:8069'
-
-pidfile = '.gunicorn.pid'
-
-# Gunicorn recommends 2-4 x number_of_cpu_cores, but
-# you'll want to vary this a bit to find the best for your
-# particular work load.
-workers = 4
-
-# Some application-wide initialization is needed.
-on_starting = openerp.wsgi.core.on_starting
-when_ready = openerp.wsgi.core.when_ready
-pre_request = openerp.wsgi.core.pre_request
-post_request = openerp.wsgi.core.post_request
-
-# openerp request-response cycle can be quite long for
-# big reports for example
-timeout = 240
-
-max_requests = 2000
-
-# Equivalent of --load command-line option
-openerp.conf.server_wide_modules = ['web']
-
-# internal TODO: use openerp.conf.xxx when available
-conf = openerp.tools.config
-
-# Path to the OpenERP Addons repository (comma-separated for
-# multiple locations)
-conf['addons_path'] = '/home/openerp/addons/trunk,/home/openerp/web/trunk/addons'
-
-# Optional database config if not using local socket
-#conf['db_name'] = 'mycompany'
-#conf['db_host'] = 'localhost'
-#conf['db_user'] = 'foo'
-#conf['db_port'] = 5432
-#conf['db_password'] = 'secret'
-
-# OpenERP Log Level
-# DEBUG=10, DEBUG_RPC=8, DEBUG_RPC_ANSWER=6, DEBUG_SQL=5, INFO=20,
-# WARNING=30, ERROR=40, CRITICAL=50
-# conf['log_level'] = 20
-
-# If --static-http-enable is used, path for the static web directory
-#conf['static_http_document_root'] = '/var/www'
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index 5d717c8..9025e2d 100755 (executable)
@@ -91,7 +91,7 @@ def setup_pid_file():
 def preload_registry(dbname):
     """ Preload a registry, and start the cron."""
     try:
-        db, registry = openerp.pooler.get_db_and_pool(dbname, update_module=config['init'] or config['update'], pooljobs=False)
+        db, registry = openerp.pooler.get_db_and_pool(dbname, update_module=openerp.tools.config['init'] or openerp.tools.config['update'], pooljobs=False)
 
         # jobs will start to be processed later, when openerp.cron.start_master_thread() is called by openerp.service.start_services()
         registry.schedule_cron_jobs()
@@ -110,7 +110,6 @@ def run_test_file(dbname, test_file):
     except Exception:
         _logger.exception('Failed to initialize database `%s` and run test file `%s`.', dbname, test_file)
 
-
 def export_translation():
     config = openerp.tools.config
     dbname = config['db_name']
@@ -205,6 +204,7 @@ def quit_on_signals():
     except KeyboardInterrupt:
         pass
 
+    config = openerp.tools.config
     if config['pidfile']:
         os.unlink(config['pidfile'])
 
@@ -217,8 +217,7 @@ def configure_babel_localedata_path():
         import babel
         babel.localedata._dirname = os.path.join(os.path.dirname(sys.executable), 'localedata')
 
-if __name__ == "__main__":
-
+def main():
     os.environ["TZ"] = "UTC"
 
     check_root_user()
@@ -247,20 +246,13 @@ if __name__ == "__main__":
         sys.exit(0)
 
     if not config["stop_after_init"]:
+        setup_pid_file()
         # Some module register themselves when they are loaded so we need the
         # services to be running before loading any registry.
-        openerp.service.start_services()
-
-    for m in openerp.conf.server_wide_modules:
-        try:
-            openerp.modules.module.load_openerp_module(m)
-        except Exception:
-            msg = ''
-            if m == 'web':
-                msg = """
-The `web` module is provided by the addons found in the `openerp-web` project.
-Maybe you forgot to add those addons in your addons_path configuration."""
-            _logger.exception('Failed to load server-wide module `%s`.%s', m, msg)
+        if config['workers']:
+            openerp.service.start_services_workers()
+        else:
+            openerp.service.start_services()
 
     if config['db_name']:
         for dbname in config['db_name'].split(','):
@@ -269,8 +261,10 @@ Maybe you forgot to add those addons in your addons_path configuration."""
     if config["stop_after_init"]:
         sys.exit(0)
 
-    setup_pid_file()
     _logger.info('OpenERP server is running, waiting for connections...')
     quit_on_signals()
 
+if __name__ == "__main__":
+    main()
+
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp-wsgi.py b/openerp-wsgi.py
new file mode 100644 (file)
index 0000000..9ae18ff
--- /dev/null
@@ -0,0 +1,54 @@
+#!/usr/bin/python
+# WSGI Handler sample configuration file.
+#
+# Change the appropriate settings below, in order to provide the parameters
+# that would normally be passed in the command-line.
+# (at least conf['addons_path'])
+#
+# For generic wsgi handlers a global application is defined.
+# For uwsgi this should work:
+#   $ uwsgi_python --http :9090 --pythonpath . --wsgi-file openerp-wsgi.py
+#
+# For gunicorn additional globals need to be defined in the Gunicorn section.
+# Then the following command should run:
+#   $ gunicorn openerp:service.wsgi_server.application -c openerp-wsgi.py
+
+import openerp
+
+#----------------------------------------------------------
+# Common
+#----------------------------------------------------------
+openerp.multi_process = True # Nah!
+
+# Equivalent of --load command-line option
+openerp.conf.server_wide_modules = ['web']
+conf = openerp.tools.config
+
+# Path to the OpenERP Addons repository (comma-separated for
+# multiple locations)
+
+conf['addons_path'] = '../../addons/trunk,../../web/trunk/addons'
+
+# Optional database config if not using local socket
+#conf['db_name'] = 'mycompany'
+#conf['db_host'] = 'localhost'
+#conf['db_user'] = 'foo'
+#conf['db_port'] = 5432
+#conf['db_password'] = 'secret'
+
+#----------------------------------------------------------
+# Generic WSGI handlers application
+#----------------------------------------------------------
+application = openerp.service.wsgi_server.application
+
+#----------------------------------------------------------
+# Gunicorn
+#----------------------------------------------------------
+# Standard OpenERP XML-RPC port is 8069
+bind = '127.0.0.1:8069'
+pidfile = '.gunicorn.pid'
+workers = 4
+timeout = 240
+max_requests = 2000
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index 5827b74..3a8f5f8 100644 (file)
@@ -38,11 +38,19 @@ import run_tests
 import service
 import sql_db
 import test
-import tiny_socket
 import tools
 import wizard
 import workflow
-import wsgi
+# backward compatilbility
+# TODO: This is for the web addons, can be removed later.
+wsgi = service
+wsgi.register_wsgi_handler = wsgi.wsgi_server.register_wsgi_handler
+# Is the server running in multi-process mode (e.g. behind Gunicorn).
+# If this is True, the processes have to communicate some events,
+# e.g. database update or cache invalidation. Each process has also
+# its own copy of the data structure and we don't need to care about
+# locks between threads.
+multi_process = False
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
 
index 590d3b1..a5265ba 100644 (file)
@@ -98,7 +98,6 @@ The kernel of OpenERP, needed for all installation.
     ],
     'installable': True,
     'auto_install': True,
-    'certificate': '0076807797149',
     'css': ['static/src/css/modules.css'],
 }
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index 441fe53..c490df3 100644 (file)
@@ -294,7 +294,6 @@ CREATE TABLE ir_module_module (
     shortdesc character varying(256),
     complexity character varying(32),
     category_id integer REFERENCES ir_module_category ON DELETE SET NULL,
-    certificate character varying(64),
     description text,
     application boolean default False,
     demo boolean default False,
index 064b1f4..ce675eb 100644 (file)
             <field name="company_id" ref="main_company"/>
             <field name="groups_id" eval="[(6,0,[ref('base.group_user')])]"/>
         </record>
+
+        <!-- new rate for demo transactions in multi currency -->
+        <record id="rateUSDbis" model="res.currency.rate">
+            <field name="rate">1.5289</field>
+            <field name="currency_id" ref="USD"/>
+            <field eval="time.strftime('%Y-06-06')" name="name"/>
+        </record>
     </data>
 </openerp>
index 11a8340..0009b6a 100644 (file)
@@ -8,6 +8,7 @@
             <field name="symbol">$</field>
             <field name="rounding">0.01</field>
             <field name="accuracy">4</field>
+            <field name="position">before</field>
             <field name="company_id" ref="main_company"/>
         </record>
         <record id="rateUSD" model="res.currency.rate">
index 7edfde7..ac04962 100644 (file)
@@ -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: 2012-09-05 04:37+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:35+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
index d2c6ebb..608d495 100644 (file)
@@ -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: 2012-09-05 04:38+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:35+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -794,7 +794,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3701,7 +3701,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5480,7 +5480,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -11014,7 +11014,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11134,7 +11134,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index e618a02..2569824 100644 (file)
@@ -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: 2012-09-05 04:38+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:35+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -775,7 +775,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3682,7 +3682,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5461,7 +5461,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10995,7 +10995,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11115,7 +11115,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 9ea225b..7c09854 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:38+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:35+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -798,7 +798,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3769,7 +3769,7 @@ msgstr "GPL-2 أو إصدار أحدث"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5573,7 +5573,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "رمز الولاية (ثلاثة حروف).\n"
 
 #. module: base
@@ -11138,7 +11138,7 @@ msgstr "المتواليات"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11261,7 +11261,7 @@ msgstr "مرشح الفرز"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "السيدة"
 
 #. module: base
index ca934b4..d44cade 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:39+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:36+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -799,7 +799,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3753,8 +3753,8 @@ msgstr "GPL версия 2 или по-нова"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -5554,7 +5554,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Кодът на държавата в три букви.\n"
 
 #. module: base
@@ -11117,7 +11117,7 @@ msgstr "Последователност"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11237,7 +11237,7 @@ msgstr "Филтър"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Г-жа"
 
 #. module: base
index a4522c3..b5fc1a1 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:38+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:36+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -783,7 +783,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3690,7 +3690,7 @@ msgstr "GPL-2 ili novija verzija"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5469,7 +5469,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -11003,7 +11003,7 @@ msgstr "Sekvence"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11123,7 +11123,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index a4d102d..afd47ad 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:39+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:36+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -807,7 +807,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3805,7 +3805,7 @@ msgstr "GPL-2 o versió posterior"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "Sr."
 
 #. module: base
@@ -5641,7 +5641,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "El codi de la província de 3 caràcters.\n"
 
 #. module: base
@@ -11259,7 +11259,7 @@ msgstr "Seqüències"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Sra."
 
 #. module: base
@@ -11385,7 +11385,7 @@ msgstr "Filtre"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Sra."
 
 #. module: base
index 5fce16d..22250c3 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:39+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:36+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 "X-Poedit-Language: Czech\n"
 
 #. module: base
@@ -805,7 +805,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3835,8 +3835,8 @@ msgstr "GPL-2 nebo pozdější verze"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -5650,7 +5650,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Kód státu ve třech znacích.\n"
 
 #. module: base
@@ -11276,7 +11276,7 @@ msgstr "Posloupnosti"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Paní"
 
 #. module: base
@@ -11398,7 +11398,7 @@ msgstr "Filtr"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Pan"
 
 #. module: base
index 879d4a7..601a032 100644 (file)
@@ -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: 2012-09-05 04:39+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:36+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -775,7 +775,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3682,7 +3682,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5461,7 +5461,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10995,7 +10995,7 @@ msgstr "Sekvenser"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11115,7 +11115,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 8c5989a..f60a6ef 100644 (file)
@@ -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: 2012-09-05 04:40+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:37+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -869,7 +869,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr "Manuell: manuell gestartet"
 
@@ -4345,7 +4345,7 @@ msgstr "GPL-2 oder höher"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "Hr."
 
 #. module: base
@@ -6486,7 +6486,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Der 3 stellige Staatencode\n"
 
 #. module: base
@@ -7492,7 +7492,7 @@ msgstr "Arbeitstage"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_multi_company
 msgid "Multi-Company"
-msgstr ""
+msgstr "Mehrfach-Unternehmen"
 
 #. module: base
 #: field:ir.actions.report.xml,report_rml_content:0
@@ -8331,6 +8331,21 @@ msgid ""
 "Secondly, price differences between actual purchase price and fixed product "
 "standard price are booked on a separate account"
 msgstr ""
+"\n"
+"Dieses Modul unterstützt die Angelsächsische Buchungsmethodik durch Änderung "
+"der Buchungslogik bei Lagerbewegungen.\n"
+"============================================================================="
+"=========================\n"
+"\n"
+"Der Unterschied zwischen Angelsächsischer und der \"Rheinischen\" (auch "
+"kontinentale genannt) Buchungsmethoden liegt im Bewertungsansatz. "
+"Angelsächsisch werden die Kosten im Moment des Verkaufs, Kontinental werden "
+"die Kosten bis zum Versand herangezogen. Dieses Modul fügt diese "
+"Funktionalität durch Hinzufügen eines Interimskontos ein, in dem der Wert "
+"der ausgelieferten Ware gegengebucht wird, wenn die Rechnung erstellt wird "
+"und der Gegenwert auf das Debtoren- bzw. Kreditorenkonto wertgestellt wird.\n"
+"Zweitens werden Preisunterschiede zwischen aktuellen Einkaufspreis und dem "
+"vorgegebenen Einstandspreis auf einem separaten Konto verbucht."
 
 #. module: base
 #: field:res.partner,title:0
@@ -8689,6 +8704,95 @@ msgid ""
 "from Gate A\n"
 "    "
 msgstr ""
+"\n"
+"Dieses Modul ergänzt das Lager-Verwaltungs-Modul durch Umsetzung Push- und "
+"Pull-Warenflüsse.\n"
+"============================================================================="
+"=====\n"
+"\n"
+"Typischerweise kann dies verwendet werden für:\n"
+"* Verwaltung von Produkt-Fertigungs-Flüssen\n"
+"* Verwaltung von Standard-Lagerorten je Produkt\n"
+"* Waren-Routing innerhalb der Lager an betriebliche Erfordernisse anpassen, "
+"wie z. B.\n"
+"  - Qualitätskontrollen\n"
+"  - \"After Sales\" Dienstleistungen\n"
+"  - Retouren an Lieferanten\n"
+"\n"
+"* Unterstützen von Vermietungsverwaltung, durch Erzeugen von automatischen "
+"Retouren für Mietobjekte\n"
+"\n"
+"Nach der Installation dieses Moduls erscheint ein zusätzlicher Reiter im "
+"Produkt-Formular, in dem Sie Push-/Pull-Flüsse festlegen können. Die "
+"Demodaten des Produktes CPU1 zeigen dies:\n"
+"\n"
+"Push-Flüsse\n"
+"----------\n"
+"Push-Flüsse sind sinnvoll, wenn der Warenzugang immer eine entsprechende "
+"Warenbewegung \n"
+"an einen anderen Ort, ggf. mit Zeitverzögerung, zur Folge haben soll. Die "
+"ursprüngliche\n"
+"Lagerverwaltung sieht bereits Push-Flüsse per Lagerort vor, diese können "
+"jedoch nicht per\n"
+"Produkt detailliert werden.\n"
+"\n"
+"Ein Push-Fluss wird durch die Festlegung der Verkettung der Lagerorte und "
+"der jeweiligen \n"
+"Parameter. Sobald eine vorgegebene Anzahl Produkte am Quellort bewegt "
+"wurden,  wird eine \n"
+"verkettete Bewegung gemäß der Fluss-Parameter (Zielort, Verzögerung, "
+"Bewegungsart, \n"
+"Berichtsinhalt, ...) vorgesehen. Die neue Lagerbewegung kann, je nach "
+"Angaben, automatisch\n"
+"geschehen oder aber manuell bestätigt und angestossen werden.\n"
+"\n"
+"Pull-Flüsse\n"
+"----------\n"
+"Pull-Flüsse sind ein wenig anders als Push-Flüsse, in dem sie nicht so sehr "
+"in Bezug stehen \n"
+"zu Lagerbewegungen, sondern vielmehr aus Bedarfen abgeleitet werden.\n"
+"Was \"bezogen\" wird erzeugt einen Bedarf, nicht notwendigerweise ein "
+"Produkt.\n"
+"Ein klassisches Beispiel für einen Pull-Fluss ist ein Unternehmen mit "
+"Verkaufsfilialen (Outlets).\n"
+"Das Mutterhaus ist für die Belieferung der Filialen zuständig.\n"
+"\n"
+"[Kunde]  <-  A [Filiale A]  <-  B [Holding]  <~  C [Lieferant]\n"
+"\n"
+"Wenn ein Beschaffungsauftrag in der Filiale A (z. B. durch einen "
+"Verkauf/Auftrag) eintrifft, wird\n"
+"daraus ein weiterer Beschaffungsauftrag erstellt, welcher an \"Holding B\" "
+"eine Anforderung\n"
+"bewirkt (Bezugsanforderung). Hier wird lediglich ein Lagertransfer von der "
+"Holding B nach \n"
+"Filiale A angestossen.\n"
+"Wenn die Bedarfsanforderung der Filiale in der Holding bearbeitet wird und, "
+"sollte der\n"
+"Bestand in der Holding ausverkauft sein, so kann daraus ein "
+"Beschaffungsauftrag an den\n"
+"Lieferanten C erstellt werden (Pull/Bezug).\n"
+"Im Ergebnis wird der Bezug des Kunden in der Filiale Bedarfsanforderungen "
+"bis hin zum \n"
+"Lieferanten bewirken.\n"
+"\n"
+"Technisch erlaubt ein Pull-Fluss eine andere Behandlung von Beschaffungen in "
+"Abhängigkeit\n"
+"nicht nur des betrachteten Produktes selbst, sondern auch vom Ort an dem der "
+"Bedarf\n"
+"auftritt bzw. dessen Ziel.\n"
+"\n"
+"Anwendungsfall:\n"
+"--------\n"
+"\n"
+"Sie können die Demonstrationsdaten folgendemassen verwenden:\n"
+"CPU1: Eine CPU1 im Shop 1 verkaufen und die Terminierung laufen lassen\n"
+"- Lager: Lieferschein, Shop 1: Wareneingang\n"
+"CPU3:\n"
+"- Bei Erhalt des Produktes wird dies der Qualitätskontrolle zugeführt, "
+"danach im Regal 2 abgelegt.\n"
+"- Bei Lieferung an den Kunden: Warenentnahmeschein -> Packliste -> "
+"Lieferschein von Tor A\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,description:base.module_marketing
@@ -8880,6 +8984,21 @@ msgid ""
 "invoice and send propositions for membership renewal.\n"
 "    "
 msgstr ""
+"\n"
+"Dieses Modul ermöglicht die Mitglieder-Verwaltung.\n"
+"==============================================\n"
+"\n"
+"Es werden verschiedene Arten von Mitgliedern unterstützt:\n"
+"* Beitragsfreie Mitglieder\n"
+"* Gruppenmitglieder (z. B. Teilnehmer-Gruppen zur Mitgliedschaft aller "
+"Gruppenmitglieder)\n"
+"* Beitragspflichtige Mitglieder\n"
+"* Sonderpreise für bestimmte Mitglieder\n"
+"\n"
+"Integriert wird dieses Modul in das Verkaufsmodul und die Buchhaltung und "
+"erlaubt automatische\n"
+"Rechnungsstellung und das Versenden von Mitgliedschaftsverlängerungen.\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,description:base.module_hr_attendance
@@ -8892,6 +9011,13 @@ msgid ""
 "actions(Sign in/Sign out) performed by them.\n"
 "       "
 msgstr ""
+"\n"
+"Dieses Modul verwaltet die Anwesenheitszeiten von Mitarbeitern.\n"
+"=========================================================\n"
+"\n"
+"Führt Konten über die Anwesenheiten der Mitarbeiter aus Basis von Aktionen \n"
+"(An- und Abmeldung) durch diese.\n"
+"       "
 
 #. module: base
 #: field:ir.module.module,maintainer:0
@@ -8961,6 +9087,21 @@ msgid ""
 "    * Number Padding\n"
 "    "
 msgstr ""
+"\n"
+"Dieses Modul verwaltet intern verwendete Folgen-/Sequenznummern für Einträge "
+"der Buchhaltung.\n"
+"============================================================================="
+"======\n"
+"\n"
+"Ermöglich Ihnen die Einstellung der geführten Buchungssequenzen.\n"
+"\n"
+"Sie können dabei folgende Einstellungen vornehmen:\n"
+"    * Präfix\n"
+"    * Postfix (Anhang)\n"
+"    * Nächste Zahl\n"
+"    * Inkrement / Erhöhungswert\n"
+"    * Ziffernanzahl / führende Nullen\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.to
@@ -9309,7 +9450,7 @@ msgstr "Dominika"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_module_record
 msgid "Record and Create Modules"
-msgstr ""
+msgstr "Module Aufzeichnen und Erzeugen"
 
 #. module: base
 #: model:ir.model,name:base.model_partner_sms_send
@@ -9353,6 +9494,45 @@ msgid ""
 "                Administration / Users / Users\n"
 "                for example, you maybe will do it for the user 'admin'.\n"
 msgstr ""
+"\n"
+"Dieses Modul dient der Verwaltung von Urlaub und Urlaubsanträgen.\n"
+"=========================================================\n"
+"\n"
+"Setzt eine Pinwand für die Personalverwaltung um, welches folgen Inhalt "
+"hat:\n"
+"    * Abwesenheiten / Urlaub\n"
+"\n"
+"Nehmen Sie zur Kenntnis:\n"
+"    - Eine Synchronisation mit internen Terminkalendern (Kundenverwaltung) "
+"ist möglich: Um automatisch\n"
+"      ein Ereignis anzulegen, wenn ein Urlaubsantrag genehmigt wird, müssen "
+"Sie den Urlaubsstatus mit\n"
+"      mit einer Ereigniskategorie verknüpfen. Diese Information und Ihre "
+"Farbwahl treffen Sie in:\n"
+"      Personal->Konfiguration->Abwesenheiten->Abwesenheitsarten\n"
+"    - Ein Mitarbeiter kann eine Anfrage nach mehr freien Tagen, abhängig von "
+"der Abwesenheitsart, stellen.\n"
+"      Die Gesamtzahl der Abwesenheitstage wird entsprechend erhöht, wenn der "
+"Antrag gewährt wird.\n"
+"    - Es gibt zwei Wege die Abwesenheiten eines Mitarbeiters zu drucken:\n"
+"      * Mitarbeiter können nach Abteilungen ausgewählt werden, bei Auswahl "
+"im Menü:\n"
+"        Personal->Berichtswesen->Urlaubstage->Urlaube nach Abteilung\n"
+"      * Mitarbeiterspezifisch kann eine Übersicht zur Urlaubsnahme und "
+"Abwesenheiten erstellt werden:\n"
+"        Personal->Personal->Mitarbeiter\n"
+"        dort wählen Sie die Mitarbeiter aus, die Sie interessieren. "
+"Anschließend wählen Sie den \n"
+"        Bericht \"Mitarbieter Urlaub\"\n"
+"    - Der Assistent \"Mitarbieter Urlaub\" erlaubt Ihnen die Auswahl der "
+"Urlaube nach Status \"bestätigt\" \n"
+"      oder \"bestätigt und genehmigt\". Dieser Status muss durch einen "
+"Mitarbeiter der Zuständigkeitsgruppe\n"
+"      Peronalverwaltung vorgenommen werden. Diese Einstellungen nehmen Sie "
+"im Menü:\n"
+"          Einstellungen -> Benutzer -> Benutzer (Zugriffsrechte)\n"
+"        vor. Als Benutzer \"admin\" können Sie diese Eintragungen "
+"beispielsweise auf jeden Fall vornehmen.\n"
 
 #. module: base
 #: field:ir.actions.report.xml,report_xsl:0
@@ -9372,7 +9552,7 @@ msgstr "Erweiterte Lieferketten"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_pad
 msgid "Collaborative Pads"
-msgstr ""
+msgstr "Plattform für Zusammenarbeit"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_anglo_saxon
@@ -9786,6 +9966,30 @@ msgid ""
 "created\n"
 "        CALENDAR_NAME: Name of calendar to access\n"
 msgstr ""
+"\n"
+"Dieses Modul fügt die Funktionalität eines CalDAV-System hinzu.\n"
+"========================================================\n"
+"\n"
+"  - WebDAV-Server liefert den Zugang zu Kalendern\n"
+"  - Synchronisation von Kalendern mittels WebDAV\n"
+"  - Ereignis-Kategorien und Aufgaben-Attribute des Kalenders anpassen\n"
+"  - Liefert iCal -import und -export-Funktionalität\n"
+"\n"
+"Um auf Kalender mittels CalDAV-Anwendungen zuzugreifen, tragen Sie folgende "
+"Adresse ein:\n"
+"    http://HOST:PORT/webdav/DATENBANK/calendars/users/BENUTZER/c\n"
+"\n"
+"Für den Zugriff auf den OpenERP-Kalender mittels WebCal von entferntem Ort, "
+"benutzen Sie eine URL wie:\n"
+"    http://HOST:PORT/webdav/DATENBANK/Calendars/KALENDER_NAME.ics\n"
+"\n"
+"Wobei \n"
+"- HOST Die Adresse des Servers auf dem WebDAV läuft\n"
+"- PORT: TCP-Port des OpenERP-Server, Standardmässig 8069\n"
+"- DATENBANK: Name der Datenbank, in der der OpenERP-Kalender erstellt ist "
+"(und die gerade \n"
+"  von OpenERP im Einsatz ist!)\n"
+"- KALENDER_NAME Name des zu verwendenden Kalenders\n"
 
 #. module: base
 #: field:ir.model.fields,selectable:0
@@ -9821,6 +10025,15 @@ msgid ""
 "mail into mail.message with attachments.\n"
 "      "
 msgstr ""
+"\n"
+"Dieses Modul stellt ein Outlook-Plugin zur Verfügung.\n"
+"=============================================\n"
+"\n"
+"Das Outlook-Plugin erlaubt Ihnen die Auswahl eines Objektes, dem Sie Ihre\n"
+"E-Mail oder Anhänge hinzufügen möchten. Sie können einen Partner, eine\n"
+"Aufgabe ein Projekt, eine Kostenstelle/Kostenart oder ein anderes Objekt \n"
+"auswählen, dem Sie Mail oder Anhänge hinzufügen möchten.\n"
+"      "
 
 #. module: base
 #: view:ir.attachment:0
@@ -12558,7 +12771,7 @@ msgstr "Sequenzen"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Frau"
 
 #. module: base
@@ -12683,7 +12896,7 @@ msgstr "Filter"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Frau"
 
 #. module: base
index 888dd37..32caf4f 100644 (file)
@@ -12,8 +12,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:40+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:37+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 "X-Poedit-Country: GREECE\n"
 "X-Poedit-Language: Greek\n"
 "X-Poedit-SourceCharset: utf-8\n"
@@ -795,7 +795,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3776,7 +3776,7 @@ msgstr "GPL-2 ή μεταγενέστερη έκδοση"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5589,7 +5589,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Ο κωδικός κατάστασης με 3 χαρακτήρες\n"
 
 #. module: base
@@ -11159,7 +11159,7 @@ msgstr "Ιεραρχήσεις"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11281,7 +11281,7 @@ msgstr "Φίλτρο"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Κα/Δς"
 
 #. module: base
index c435e12..1d2ab6f 100644 (file)
@@ -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: 2012-09-05 04:45+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:42+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -862,7 +862,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Manual: Launched manually.\n"
@@ -4355,8 +4355,8 @@ msgstr "GPL-2 or later version"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -5024,7 +5024,7 @@ msgstr "`code` must be unique."
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr_expense
 msgid "Expenses Management"
-msgstr ""
+msgstr "Expenses Management"
 
 #. module: base
 #: view:workflow.activity:0
@@ -5035,7 +5035,7 @@ msgstr "Incoming Transitions"
 #. module: base
 #: field:ir.values,value_unpickle:0
 msgid "Default value or action reference"
-msgstr ""
+msgstr "Default value or action reference"
 
 #. module: base
 #: model:res.country,name:base.sr
@@ -5045,7 +5045,7 @@ msgstr "Suriname"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_timesheet
 msgid "Bill Time on Tasks"
-msgstr ""
+msgstr "Bill Time on Tasks"
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_marketing
@@ -5062,7 +5062,7 @@ msgstr "Bank account"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_l10n_gr
 msgid "Greece - Accounting"
-msgstr ""
+msgstr "Greece - Accounting"
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -6310,8 +6310,8 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
-msgstr "The state code in max. three chars."
+msgid "The state code in three chars.\n"
+msgstr "The state code in three chars.\n"
 
 #. module: base
 #: model:res.country,name:base.sj
@@ -11913,8 +11913,8 @@ msgstr "Sequences"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
-msgstr "Miss"
+msgid "Mss"
+msgstr "Mss"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_ui_view
@@ -12038,8 +12038,8 @@ msgstr "Filter"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
-msgstr "Mrs."
+msgid "Ms."
+msgstr "Ms."
 
 #. module: base
 #: view:base.module.import:0
index 853e7c3..c556dbc 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:43+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:41+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -853,7 +853,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Manual: Se lanza manualmente.\n"
@@ -4029,7 +4029,7 @@ msgstr "GPL-2 o versión posterior"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "Sr."
 
 #. module: base
@@ -5868,7 +5868,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "El código de la provincia de 3 caracteres.\n"
 
 #. module: base
@@ -11486,7 +11486,7 @@ msgstr "Secuencias"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Sra."
 
 #. module: base
@@ -11613,7 +11613,7 @@ msgstr "Filtro"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Sra."
 
 #. module: base
index cd7ff89..b7aad76 100644 (file)
@@ -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: 2012-09-05 04:45+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:42+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
index 188fedf..50a7f8e 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:45+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:42+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -835,7 +835,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3843,7 +3843,7 @@ msgstr "GPL-2 o versión posterior"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "Sr."
 
 #. module: base
@@ -5682,7 +5682,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "El código de la provincia de 3 caracteres.\n"
 
 #. module: base
@@ -11300,7 +11300,7 @@ msgstr "Secuencias"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Sra."
 
 #. module: base
@@ -11427,7 +11427,7 @@ msgstr "Filtro"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Sra."
 
 #. module: base
index 59784f6..c2e8afd 100644 (file)
@@ -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: 2012-09-05 04:45+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:43+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 "Language: \n"
 
 #. module: base
@@ -879,7 +879,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Manual: Lanzado manualmente.\n"
@@ -4442,7 +4442,7 @@ msgstr "GPL-2 o versión posterior"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "Sr."
 
 #. module: base
@@ -6736,7 +6736,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "El código de la provincia de 3 caracteres.\n"
 
 #. module: base
@@ -13818,7 +13818,7 @@ msgstr "Secuencias"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Sra."
 
 #. module: base
@@ -13945,7 +13945,7 @@ msgstr "Filtro"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Sra."
 
 #. module: base
index 1f654b9..60f34c3 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:46+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:43+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -847,7 +847,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Manual: Se lanza manualmente.\n"
@@ -1229,6 +1229,23 @@ msgid ""
 "At the end of the month, the planning manager can also check if the encoded "
 "timesheets are respecting the planned time on each analytic account.\n"
 msgstr ""
+"Realizar un seguimiento de su planificación\n"
+"Este módulo le ayuda a gestionar sus planificaciones.\n"
+"===============================================\n"
+"\n"
+"Este módulo es la base de la contabilidad analítica y está totalmente "
+"integrado con\n"
+"* Hojas de servicio\n"
+"* Gestión de ausencias\n"
+"* Gestión de proyectos\n"
+"\n"
+"Así, cada director de departamento puede saber si alguien en su equipo aún "
+"tiene tiempo asignado para una planificación determinada (teniendo en cuenta "
+"las hojas de validación) o si todavía necesita codificar tareas.\n"
+"\n"
+"Al final del mes, el encargado de la planificación también puede comprobar "
+"si la tabla de tiempos codificados están respetando los plazos previstos en "
+"cada cuenta analítica.\n"
 
 #. module: base
 #: selection:ir.property,type:0
@@ -1496,6 +1513,26 @@ msgid ""
 "database,\n"
 "      but in the servers rootpad like /server/bin/filestore.\n"
 msgstr ""
+"\n"
+"Este es un sistema de gestión documental completo.\n"
+"==============================================\n"
+"\n"
+"    * Autenticación de usuarios\n"
+"    * Indexación de documentos: -.. Pptx y docx no son compatibles con la "
+"plataforma Windows.\n"
+"    * El tablero de documentos que incluye:\n"
+"        * Nuevos archivos (lista)\n"
+"        * Los archivos por tipo de recurso (gráfico)\n"
+"        * Los archivos por empresa (gráfico)\n"
+"        * Tamaño de archivos por mes (gráfico)\n"
+"\n"
+"ATENCIÓN:\n"
+"    - Al instalar este módulo en una compañía en funcionamiento que que "
+"tienen ya PDF almacenados en la base de datos, \n"
+"      los pierde todos.\n"
+"    - Después de instalar este módulo los PDF ya no se almacenan en la base "
+"de datos,\n"
+"      si no en los servidores rootpad como / server / bin / filestore.\n"
 
 #. module: base
 #: view:res.lang:0
@@ -1564,6 +1601,15 @@ msgid ""
 "Web.\n"
 "    "
 msgstr ""
+"\n"
+"Este es el módulo test que permite mostrar etiquetas HTML en vistas de "
+"formulario en XML.\n"
+"============================================================================="
+"\n"
+"\n"
+"Crea una vista de formulario ejemplo utilizando etiquetas HTML. Esto es "
+"visible solo en el cliente Web.\n"
+"    "
 
 #. module: base
 #: model:ir.module.category,description:base.module_category_purchase_management
@@ -1776,6 +1822,24 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Este módulo agrega herramientas para compartir genéricas a su base de datos "
+"de OpenERP.\n"
+"========================================================================\n"
+"\n"
+"Específicamente agrega un botón 'compartir' disponible en el cliente Web "
+"para\n"
+"compartir cualquier tipo de datos OpenERP con colegas, clientes, amigos, "
+"etc.\n"
+"\n"
+"El sistema funciona creando nuevos usuarios y grupos sobre la marcha, y\n"
+"combinando los derechos de acceso adecuados y reglas para asegurar que los\n"
+"usuarios compartidos sólo tienen acceso a los datos compartidos con ellos.\n"
+"\n"
+"Esto es muy útil para el trabajo colaborativo, compartir conocimientos,\n"
+"sincronización con otras empresas, etc\n"
+"\n"
+"    "
 
 #. module: base
 #: field:res.currency,accuracy:0
@@ -1856,6 +1920,49 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Validación de IVA para números IVA de las empresas\n"
+"========================================\n"
+"\n"
+"Después de instalar este módulo, los valores ingresados en el campo IVA de "
+"Empresas\n"
+"serán validados para todos los países soportados. El país se infiere del "
+"código\n"
+"de país de 2 letras que es prefijo del número IVA, por ejemplo "
+"\"BE0477472701\"\n"
+"se validará usando las reglas belgas.\n"
+"\n"
+"Hay dos niveles diferentes de validación de números IVA:\n"
+"\n"
+" * Por defecto, se ejecuta una validación simple fuera de línea usando las "
+"reglas de\n"
+"   validación conocidas para el país, usualmente un simple control de "
+"dígitos. Esto es \n"
+"   rápido y está siempre disponible, pero permite números que quizá no "
+"están\n"
+"   verdaderamente asignados, o que ya no son válidos.\n"
+" * Cuando la opción \"Verificación VAT VIES\" está  activada (en la "
+"configuración de la\n"
+"   compañía del usuario), los números IVA se enviarán a la base de datos en "
+"línea\n"
+"   VIES de la UE, que verificará realmente si el número es válido y está "
+"asignado\n"
+"   actualmente a una empresa de la UE. Esto es un poco mas lento que la "
+"validación\n"
+"   simple fuera de línea, requiere una conexión a Internet, y podría no "
+"estar disponible\n"
+"   todo el tiempo. Si el servicio no está disponible o no es compatible con "
+"el país\n"
+"   requerido (por ejemplo, para países no comunitarios), se ejecutará en su "
+"lugar una\n"
+"   validación simple.\n"
+"\n"
+"Los países soportados actualmente son los países de la UE, y algunos países "
+"no\n"
+"comunitarios como Chile, Colombia, México, Noruega o Rusia. Para países no\n"
+"soportados, solo se validará el código de país.\n"
+"\n"
+"    "
 
 #. module: base
 #: view:ir.sequence:0
@@ -4019,8 +4126,8 @@ msgstr "GPL-2 o versión posterior"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -5872,7 +5979,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "El código de la provincia de 3 caracteres.\n"
 
 #. module: base
@@ -11535,8 +11642,8 @@ msgstr "Secuencias"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
-msgstr "Miss"
+msgid "Mss"
+msgstr "Mss"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_ui_view
@@ -11662,7 +11769,7 @@ msgstr "Filtro"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Sra."
 
 #. module: base
index cc9d519..57fa84a 100644 (file)
@@ -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: 2012-09-08 04:54+0000\n"
-"X-Generator: Launchpad (build 15914)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:43+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
index 201786b..57ffc20 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:39+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:37+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -788,7 +788,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3713,7 +3713,7 @@ msgstr "GPL-2 või hilisem versioon"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5499,7 +5499,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Maakonna kolmekohaline kood.\n"
 
 #. module: base
@@ -11043,7 +11043,7 @@ msgstr "Jadad"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11163,7 +11163,7 @@ msgstr "Filter"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index a1a9b71..277c9ff 100644 (file)
@@ -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: 2012-09-05 04:38+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:36+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -775,7 +775,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3682,7 +3682,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5461,7 +5461,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10995,7 +10995,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11115,7 +11115,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 27f15b9..5eaefa2 100644 (file)
@@ -9,8 +9,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:42+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:39+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 "X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
 "X-Poedit-Language: Persian\n"
 
@@ -786,7 +786,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3715,7 +3715,7 @@ msgstr "مجوز GPL-2 یا نگارش بالاتر"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5502,7 +5502,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "کد استان در ۳ نویسه‌ای.\n"
 
 #. module: base
@@ -11048,7 +11048,7 @@ msgstr "دنباله‌ها"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11168,7 +11168,7 @@ msgstr "پالایه"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index a7c3b27..7052258 100644 (file)
@@ -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: 2012-09-05 04:46+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:43+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -775,7 +775,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3682,7 +3682,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5461,7 +5461,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10995,7 +10995,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11115,7 +11115,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index c991f97..8872be9 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:39+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:37+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -805,7 +805,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3799,7 +3799,7 @@ msgstr "GPL-2 tai myöhäisempi versio"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5630,7 +5630,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Osavaltion koodi kolmella kirjaimella.\n"
 
 #. module: base
@@ -11278,7 +11278,7 @@ msgstr "Jaksot"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11404,8 +11404,8 @@ msgstr "Suodin"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
-msgstr "Mrs."
+msgid "Ms."
+msgstr "Ms."
 
 #. module: base
 #: view:base.module.import:0
index bf3cb22..a34898b 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:40+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:37+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -879,7 +879,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Manuel : lancé manuellement.\n"
@@ -4422,7 +4422,7 @@ msgstr "GPL-2 ou version supérieure"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "M."
 
 #. module: base
@@ -6659,7 +6659,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Le code état en trois caractères.\n"
 
 #. module: base
@@ -13001,8 +13001,8 @@ msgstr "Séquences"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
-msgstr "Mlle"
+msgid "Mss"
+msgstr "Mme"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_ui_view
@@ -13129,8 +13129,8 @@ msgstr "Filtre"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
-msgstr "Mme"
+msgid "Ms."
+msgstr "Mlle"
 
 #. module: base
 #: view:base.module.import:0
index ec3b210..42b2e06 100644 (file)
@@ -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: 2012-09-05 04:40+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:37+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -808,7 +808,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3805,8 +3805,8 @@ msgstr "GPL-2 ou versión posterior"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -5635,7 +5635,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "O código de estado en tres caracteres.\n"
 
 #. module: base
@@ -11245,8 +11245,8 @@ msgstr "Secuencias"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
-msgstr "Miss"
+msgid "Mss"
+msgstr "MSS"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_ui_view
@@ -11372,7 +11372,7 @@ msgstr "Filtro"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Ms"
 
 #. module: base
index 7a54b30..11b6b06 100644 (file)
@@ -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: 2012-09-05 04:40+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:38+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
index 86ee396..03864ff 100644 (file)
@@ -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: 2012-09-05 04:40+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:38+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -785,7 +785,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3702,7 +3702,7 @@ msgstr "גרסא GPL-2 או מאוחרת יותר."
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5487,7 +5487,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "ביטוי הקוד בשלוש תוים.\n"
 
 #. module: base
@@ -11030,7 +11030,7 @@ msgstr "רציפות"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11150,7 +11150,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index a8cbd46..78d5591 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:43+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:40+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 "Language: hr\n"
 
 #. module: base
@@ -840,7 +840,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3835,7 +3835,7 @@ msgstr "GPL-2 ili novija verzija"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "g."
 
 #. module: base
@@ -5646,7 +5646,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Troznamenkasta šifra države/pokrajine/županije.\n"
 
 #. module: base
@@ -11218,7 +11218,7 @@ msgstr "Sekvence"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "gđica"
 
 #. module: base
@@ -11344,7 +11344,7 @@ msgstr "Filter"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "gđa."
 
 #. module: base
index 8e9a7bc..85823b7 100644 (file)
@@ -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: 2012-09-05 04:41+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:38+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -804,7 +804,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -1821,7 +1821,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr_evaluation
 msgid "Employee Appraisals"
-msgstr ""
+msgstr "Munkavállaló értékelése"
 
 #. module: base
 #: selection:ir.actions.server,state:0
@@ -3141,7 +3141,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr_contract
 msgid "Employee Contracts"
-msgstr ""
+msgstr "Munkavállalói szerződések"
 
 #. module: base
 #: model:ir.module.module,description:base.module_wiki_faq
@@ -3792,7 +3792,7 @@ msgstr "GPL-2 vagy korábbi verzió"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "Úr"
 
 #. module: base
@@ -5625,7 +5625,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Az állam kódja három karakterben.\n"
 
 #. module: base
@@ -6487,7 +6487,7 @@ msgstr "Automatikus frissítést ad a nézethez."
 #. module: base
 #: help:res.partner,employee:0
 msgid "Check this box if the partner is an Employee."
-msgstr "Jelölje be, ha a partner egy alkalmazott."
+msgstr "Jelölje be, ha a partner egy alkalmazott"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_crm_profiling
@@ -11243,8 +11243,8 @@ msgstr "Sorszámok"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
-msgstr "Miss"
+msgid "Mss"
+msgstr "Mss"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_ui_view
@@ -11372,8 +11372,8 @@ msgstr "Szűrő"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
-msgstr "Mrs."
+msgid "Ms."
+msgstr "Ms."
 
 #. module: base
 #: view:base.module.import:0
@@ -15321,7 +15321,7 @@ msgstr "Wrong ID for the browse record, got %r, expected an integer."
 #: field:res.partner.address,function:0
 #: selection:workflow.activity,kind:0
 msgid "Function"
-msgstr "Függvény"
+msgstr "Beosztás"
 
 #. module: base
 #: view:res.widget:0
index 35b84ba..14dce61 100644 (file)
@@ -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: 2012-09-05 04:38+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:35+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -775,7 +775,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3682,7 +3682,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5461,7 +5461,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10995,7 +10995,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11115,7 +11115,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 6907213..c72c52b 100644 (file)
@@ -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: 2012-09-05 04:41+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:38+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -779,7 +779,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3686,7 +3686,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5465,7 +5465,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10999,7 +10999,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11119,7 +11119,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index d402068..e136665 100644 (file)
@@ -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: 2012-09-05 04:41+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:38+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -793,7 +793,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Handvirkt: Keyrt handvirkt\n"
@@ -3716,7 +3716,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5495,7 +5495,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -11033,7 +11033,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11153,7 +11153,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 78b5b4e..e2e252f 100644 (file)
@@ -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: 2012-09-05 04:41+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:38+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -847,7 +847,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Manuale: Esegui manualmente\n"
@@ -3855,8 +3855,8 @@ msgstr "GPL-2 o successiva"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -5690,7 +5690,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Il codice dello stato in 3 caratteri\n"
 
 #. module: base
@@ -11312,8 +11312,8 @@ msgstr "Sequenze"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
-msgstr "Miss"
+msgid "Mss"
+msgstr "Mss"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_ui_view
@@ -11439,7 +11439,7 @@ msgstr "Filtro"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Sig.ra"
 
 #. module: base
index f67e49e..4ef99b6 100644 (file)
@@ -8,14 +8,14 @@ msgstr ""
 "Project-Id-Version: openobject-server\n"
 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
 "POT-Creation-Date: 2012-02-08 00:44+0000\n"
-"PO-Revision-Date: 2012-08-20 15:37+0000\n"
-"Last-Translator: OpenERP Administrators <Unknown>\n"
+"PO-Revision-Date: 2012-09-20 05:23+0000\n"
+"Last-Translator: Akira Hiyama <Unknown>\n"
 "Language-Team: Japanese <ja@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:41+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-21 04:41+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -193,7 +193,7 @@ msgstr "販売分析の配布"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_process
 msgid "Process"
-msgstr "プロセス"
+msgstr "処理"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_analytic_journal_billing_rate
@@ -17384,7 +17384,7 @@ msgstr ""
 " ・ 各アクションが手動の検証を必要とする場合は、手動で実際のキャンペーンを開始することもできます。\n"
 " ・ 最後にキャンペーンを実際に起動し、キャンペーンの全てが完全に自動的に行われるよう統計値を監視します。\n"
 "\n"
-"キャンペーンの実行中にも、ちろんパラメータ、入力セグメント、ワークフローなどの微調整を続ける事ができます。\n"
+"キャンペーンの実行中にも、もちろんパラメータ、入力セグメント、ワークフローなどの微調整を続ける事ができます。\n"
 "\n"
 "注記:デモデータが必要なら、marketing_campaign_crm_demoモジュールをインストールできます。それはCRMリードに依存するため、CR"
 "Mアプリケーションもインストールすることになります。\n"
index 3a13c7a..d8eddbd 100644 (file)
@@ -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: 2012-09-05 04:40+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:37+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
index dd48dce..30d6d02 100644 (file)
@@ -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: 2012-09-05 04:41+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:38+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -775,7 +775,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3682,7 +3682,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5461,7 +5461,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10995,7 +10995,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11115,7 +11115,7 @@ msgstr "Сүзгі"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "миссис"
 
 #. module: base
index 9d0f527..bb02ef1 100644 (file)
@@ -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: 2012-09-05 04:41+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:39+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -784,7 +784,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3729,7 +3729,7 @@ msgstr "GPL-2 또는 이후 버젼"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5518,7 +5518,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "3문자의 상태 코드\n"
 
 #. module: base
@@ -11056,7 +11056,7 @@ msgstr "시퀀스"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11176,7 +11176,7 @@ msgstr "필터"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index c4795e2..1c0589a 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:42+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:39+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -778,7 +778,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3694,7 +3694,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5483,7 +5483,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Savivaldybės kodas iš trijų simbolių.\n"
 
 #. module: base
@@ -11029,7 +11029,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11149,7 +11149,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Ponia"
 
 #. module: base
index cfc772f..e02fdd7 100644 (file)
@@ -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: 2012-09-05 04:42+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:39+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
index d8c9f71..e7b89f8 100644 (file)
@@ -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: 2012-09-05 04:42+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:39+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -786,7 +786,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3693,7 +3693,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5472,7 +5472,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -11006,7 +11006,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11126,7 +11126,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 6da5ca4..4dbca25 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:42+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:39+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -860,7 +860,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Гараар: Гараар ажилуулна.\n"
@@ -4217,8 +4217,8 @@ msgstr "GPL-2 болон дараагийн хувилбар"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -6338,7 +6338,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Мужийн код гурван тэмдэгтээр.\n"
 
 #. module: base
@@ -13104,7 +13104,7 @@ msgstr "Дараалал"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Хатагтай"
 
 #. module: base
@@ -13230,7 +13230,7 @@ msgstr "Шүүлт"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Хатагтай."
 
 #. module: base
index d2d44b0..677dbb1 100644 (file)
@@ -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: 2012-09-05 04:42+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:39+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -807,7 +807,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3746,8 +3746,8 @@ msgstr "GPL-2 eller senere versjon"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -5545,7 +5545,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Koden til staten med tre karakterer.\n"
 
 #. module: base
@@ -11093,7 +11093,7 @@ msgstr "Sekvenser"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11213,7 +11213,7 @@ msgstr "Filter"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index eaef41b..f4b5886 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:39+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:36+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -97,7 +97,7 @@ msgstr "Code (bijv: nl__NL)"
 #: field:workflow.transition,wkf_id:0
 #: field:workflow.workitem,wkf_id:0
 msgid "Workflow"
-msgstr "Werkschema"
+msgstr "Workflow"
 
 #. module: base
 #: selection:ir.sequence,implementation:0
@@ -363,6 +363,13 @@ msgid ""
 "  - tree_but_open\n"
 "For defaults, an optional condition"
 msgstr ""
+"Voor acties, een van deze mogelijke acties:\n"
+"  - client_action_multi\n"
+"  - client_print_multi\n"
+"  - client_action_relate\n"
+"  - tree_but_open\n"
+"Voor standaard waarden:\n"
+"  - een optionele conditie"
 
 #. module: base
 #: sql_constraint:res.lang:0
@@ -572,7 +579,7 @@ msgstr ""
 #. module: base
 #: view:ir.values:0
 msgid "Action Binding"
-msgstr ""
+msgstr "Actie koppeling"
 
 #. module: base
 #: model:res.country,name:base.gf
@@ -836,7 +843,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Handmatig: Start handmatig.\n"
@@ -2811,7 +2818,7 @@ msgstr "Overgeërfd"
 #. module: base
 #: field:ir.model.fields,serialization_field_id:0
 msgid "Serialization Field"
-msgstr ""
+msgstr "Reeks veld"
 
 #. module: base
 #: model:ir.module.category,description:base.module_category_report_designer
@@ -2873,7 +2880,7 @@ msgstr "Fout!"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_l10n_fr_rib
 msgid "French RIB Bank Details"
-msgstr ""
+msgstr "Franse RIB bank details"
 
 #. module: base
 #: view:res.lang:0
@@ -2954,7 +2961,7 @@ msgstr "Bangladesh"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_retro_planning
 msgid "Project Retro-planning"
-msgstr ""
+msgstr "Project Retro-planning"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_stock_planning
@@ -3005,7 +3012,7 @@ msgstr ""
 #. module: base
 #: field:ir.actions.client,params_store:0
 msgid "Params storage"
-msgstr ""
+msgstr "Parameters opslag"
 
 #. module: base
 #: code:addons/base/module/module.py:409
@@ -3036,6 +3043,10 @@ msgid ""
 "since it's the same which has been renamed.\n"
 "    "
 msgstr ""
+"\n"
+"Met deze module kunt u relaties segmenten/indelen op basis van vragen.\n"
+"===========================================================\n"
+"    "
 
 #. module: base
 #: code:addons/report_sxw.py:434
@@ -3160,7 +3171,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_wiki_quality_manual
 msgid "Wiki: Quality Manual"
-msgstr ""
+msgstr "Wiki: Kwaliteit handleiding"
 
 #. module: base
 #: selection:ir.actions.act_window.view,view_mode:0
@@ -3274,7 +3285,7 @@ msgstr "OpenERP web-diagram weergave"
 #. module: base
 #: model:res.groups,name:base.group_hr_user
 msgid "HR Officer"
-msgstr ""
+msgstr "HR Officer"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr_contract
@@ -3633,7 +3644,7 @@ msgstr "Mayotte"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_crm_todo
 msgid "Tasks on CRM"
-msgstr ""
+msgstr "Relatiebeheer taken"
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_generic_modules_accounting
@@ -3940,7 +3951,7 @@ msgstr "GPL-2 of latere versie"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "Hr."
 
 #. module: base
@@ -4219,6 +4230,9 @@ msgid ""
 "its dependencies are satisfied. If the module has no dependency, it is "
 "always installed."
 msgstr ""
+"Een auto-installatie module wordt automatisch geïnstalleerd door het systeem "
+"als aan alle afhankelijkheden zijn voldaan. Als de module geen "
+"afhankelijkheden heeft, wordt de module altijd geïnstalleerd."
 
 #. module: base
 #: model:ir.actions.act_window,name:base.res_lang_act_window
@@ -4605,6 +4619,20 @@ msgid ""
 "above. Specify the interval information and partner to be invoice.\n"
 "    "
 msgstr ""
+"\n"
+"Maak herhalende documenten (abonnementen).\n"
+"=======================================\n"
+"\n"
+"Met deze module kunt u een nieuw document maken en een abonnement hieraan "
+"koppelen.\n"
+"\n"
+"U kunt bijvoorbeeld een factuur automatisch periodiek laten aanmaken. Dit "
+"doet u door:\n"
+"* Maak een document type gebaseerd op het object factuur\n"
+"* Maak een abonnement aan waarvan de bron het document is, zoals aangemaakt "
+"bij stap 1.\n"
+"* Specificeer het interval en de klant voor de factuur\n"
+"    "
 
 #. module: base
 #: field:ir.actions.server,srcmodel_id:0
@@ -4826,7 +4854,7 @@ msgstr "BTW nummer validatie"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_crm_partner_assign
 msgid "Partners Geo-Localization"
-msgstr ""
+msgstr "Partners Geo-Localisatie"
 
 #. module: base
 #: model:res.country,name:base.ke
@@ -5334,6 +5362,13 @@ msgid ""
 "    those assets. And it allows to create Move's of the depreciation lines.\n"
 "    "
 msgstr ""
+"Financieel beheer van uw activa.\n"
+"=========================\n"
+"Met deze module beheert u, uw activa van uw bedrijf of van een individu. U "
+"beheert uw afschrijvingen van \n"
+"deze activa. Deze afschrijvingen worden als journaalposten verwerkt in uw "
+"financiële administratie.\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.bv
@@ -5640,6 +5675,31 @@ msgid ""
 "Budgets per Budgets.\n"
 "\n"
 msgstr ""
+"\n"
+"Deze module geeft accountants de mogelijkheid om kostenplaats- en "
+"overlappende budgetten te beheren.\n"
+"============================================================================="
+"==========\n"
+"\n"
+"Wanneer de hoofdbudgetten en onderliggende budgetten zijn gedefinieerd (in "
+"financieel/budgetten)\n"
+"kunnen de projectmanagers de geplande bedragen invoeren per kostenplaats.\n"
+"\n"
+"De accountant heeft de mogelijkheid om alle gebudgetteerde bedragen te zien "
+"van ieder\n"
+"budget en hoofdbudget, zodat het totale gebudgetteerde bedrag niet groter of "
+"lager \n"
+"is dan wat was gebudgetteerd. deze informatie kan ook als grafiek worden "
+"bekeken.\n"
+"\n"
+"Er zijn drie rapportages beschikbaar:\n"
+"1. Deze is beschikbaar bij de lijst van budgetten. Het geeft de spreiding "
+"van deze budgetten weer over de kostenplaatsen per hoofdbudget.\n"
+"2. Dit is een totaal van het eerste rapport. het geeft alleen de spreiding "
+"weer voor de geselecteerde budgetten van de kostenplaatsen.\n"
+"3. Dit rapport is beschikbaar bij de kostenplaats. Het geeft de spreiding "
+"weer van de geselecteerde kostenplaats van het hoofdbudget, per budget.\n"
+"\n"
 
 #. module: base
 #: help:res.lang,iso_code:0
@@ -5803,7 +5863,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "De provinciecode in drie karakters.\n"
 
 #. module: base
@@ -5968,6 +6028,8 @@ msgid ""
 "How many times the method is called,\n"
 "a negative number indicates no limit."
 msgstr ""
+"Hoeveel keer deze regel wordt aangeroepen,\n"
+"een negatieve waarde geeft aan dat er geen limiet is."
 
 #. module: base
 #: field:res.partner.bank.type.field,bank_type_id:0
@@ -6025,7 +6087,7 @@ msgstr "Vul aub de sleutelcode in die staat in uw contract document:"
 #: view:workflow.activity:0
 #: field:workflow.activity,flow_start:0
 msgid "Flow Start"
-msgstr "Begin werkschema"
+msgstr "Begin workflow"
 
 #. module: base
 #: model:ir.model,name:base.model_res_partner_title
@@ -6453,6 +6515,11 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Met deze module kunt u aangeven welk factureerproduct moet worden gebruikt "
+"als een werknemer uren boekt op het contract/kostenplaats.\n"
+"\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_audittrail
@@ -6601,7 +6668,7 @@ msgstr "Ongelezen"
 #. module: base
 #: field:res.users,id:0
 msgid "ID"
-msgstr ""
+msgstr "ID"
 
 #. module: base
 #: field:ir.cron,doall:0
@@ -6676,7 +6743,7 @@ msgstr "Vink aan als de relatie een werknemer is."
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_crm_profiling
 msgid "Customer Profiling"
-msgstr ""
+msgstr "Klant profiling"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_issue
@@ -6712,6 +6779,8 @@ msgid ""
 "Please check that all your lines have %d columns.Stopped around line %d "
 "having %d columns."
 msgstr ""
+"Controleer of al uw regels %d kolommen hebben. Gestopt bij regel %d met %d "
+"kolommen."
 
 #. module: base
 #: field:base.language.export,advice:0
@@ -6853,6 +6922,7 @@ msgstr "Controle"
 #: help:ir.values,company_id:0
 msgid "If set, action binding only applies for this company"
 msgstr ""
+"Indien aangevinkt is deze regel alleen van toepassing voor dit bedrijf."
 
 #. module: base
 #: model:res.country,name:base.lc
@@ -6866,6 +6936,9 @@ msgid ""
 "password, otherwise leave empty. After a change of password, the user has to "
 "login again."
 msgstr ""
+"Specificeer een waarde alleen wanneer u een gebruiker aanmaakt of als u het "
+"wachtwoord van de gebruiker wijzigt. Laat anders de waarde leeg. Na het "
+"wijzigen van het wachtwoord, dient de gebruiker opnieuw in te loggen."
 
 #. module: base
 #: view:publisher_warranty.contract:0
@@ -6915,7 +6988,7 @@ msgstr "Bewerken"
 #. module: base
 #: field:ir.actions.client,params:0
 msgid "Supplementary arguments"
-msgstr ""
+msgstr "Aanvullende argumenten"
 
 #. module: base
 #: field:res.users,view:0
@@ -7067,6 +7140,8 @@ msgid ""
 "Action bound to this entry - helper field for binding an action, will "
 "automatically set the correct reference"
 msgstr ""
+"Actie gekoppeld aan deze regel. Hulp veld voor het koppelen van een actie. "
+"De referentie wordt automatisch correct ingevuld."
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_project_long_term
@@ -7384,7 +7459,7 @@ msgstr "Lezen"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_association
 msgid "Associations Management"
-msgstr ""
+msgstr "Verenigingenbeheer"
 
 #. module: base
 #: help:ir.model,modules:0
@@ -7425,7 +7500,7 @@ msgstr ""
 #. module: base
 #: view:workflow.workitem:0
 msgid "Workflow Workitems"
-msgstr "Werkschema taken"
+msgstr "Workflow taken"
 
 #. module: base
 #: model:res.country,name:base.vc
@@ -7543,7 +7618,7 @@ msgstr "Myanmar (Birma)"
 #. module: base
 #: help:ir.model.fields,modules:0
 msgid "List of modules in which the field is defined"
-msgstr ""
+msgstr "Lijst van modules waarin het veld wordt gebruikt."
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -7666,6 +7741,13 @@ msgid ""
 "all the tasks will change accordingly.\n"
 "    "
 msgstr ""
+"\n"
+"Verander de data op basis van een verandering in de einddatum.\n"
+"===================================================\n"
+"\n"
+"Indien de einddatun van een project is gewijzigd, dan worden de deadline "
+"datum en de startdatum van alle taken ook gewijzgd.\n"
+"    "
 
 #. module: base
 #: help:res.users,view:0
@@ -7710,7 +7792,7 @@ msgstr "Dutch / Nederlands"
 #. module: base
 #: selection:res.company,paper_format:0
 msgid "US Letter"
-msgstr ""
+msgstr "US Letter"
 
 #. module: base
 #: model:ir.module.module,description:base.module_stock_location
@@ -7813,6 +7895,12 @@ msgid ""
 "Contains the installer for marketing-related modules.\n"
 "    "
 msgstr ""
+"\n"
+"Menu voor marketing.\n"
+"==================\n"
+"\n"
+"Bevat de installer voor marketing gerelateerde modules.\n"
+"    "
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_knowledge_management
@@ -7996,6 +8084,9 @@ msgid ""
 "the same values as those available in the condition field, e.g. `Hello [[ "
 "object.partner_id.name ]]`"
 msgstr ""
+"Het e-mail onderwerp kan expressies bevatten welke worden gekenmerkt door "
+"rechte haken. De velden zijn gebaseerd op dezelfde waarden zoals beschikbaar "
+"in de conditievelden. Bijv.:  `Hallo [[ object.partner_id.name ]]`"
 
 #. module: base
 #: model:ir.module.module,description:base.module_account_sequence
@@ -8027,11 +8118,14 @@ msgid ""
 "serialization field, instead of having its own database column. This cannot "
 "be changed after creation."
 msgstr ""
+"Indien aangevinkt wordt dit veld opgeslagen in vrije ruimte van het reeks "
+"veld in plaats dat het veld een eigen database kolom heeft. Dit kan achteraf "
+"niet worden veranderd!"
 
 #. module: base
 #: view:res.partner.bank:0
 msgid "Bank accounts belonging to one of your companies"
-msgstr ""
+msgstr "Bankrekening welke behoort aan één van uw bedrijven."
 
 #. module: base
 #: help:res.users,action_id:0
@@ -8058,6 +8152,8 @@ msgid ""
 "The field on the current object that links to the target object record (must "
 "be a many2one, or an integer field with the record ID)"
 msgstr ""
+"Het veld van het huidige object wat is gekoppeld aan het doel object record "
+"(moet een many2one, of een integer veld zijn met het record ID)"
 
 #. module: base
 #: code:addons/base/module/module.py:423
@@ -8194,6 +8290,8 @@ msgid ""
 "You cannot have multiple records with the same external ID in the same "
 "module!"
 msgstr ""
+"Het is niet toegestaan om meerdere records te hebben met dezelfde externe ID "
+"in hetzelfde model."
 
 #. module: base
 #: selection:ir.property,type:0
@@ -8287,6 +8385,9 @@ msgid ""
 "Model to which this entry applies - helper field for setting a model, will "
 "automatically set the correct model name"
 msgstr ""
+"Model waarover deze regel gaat. Deze zoekwaarde helpt u bij het instellen "
+"van het juiste modelnaam. Na de keuze wordt de modelnaam automatisch voor u "
+"ingevuld."
 
 #. module: base
 #: view:res.lang:0
@@ -8419,7 +8520,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_anglo_saxon
 msgid "Anglo-Saxon Accounting"
-msgstr ""
+msgstr "Angelsaksische boekhouding"
 
 #. module: base
 #: model:res.country,name:base.np
@@ -8470,7 +8571,7 @@ msgstr ""
 #: model:ir.ui.menu,name:base.menu_values_form_action
 #: view:ir.values:0
 msgid "Action Bindings"
-msgstr ""
+msgstr "Actie koppeling"
 
 #. module: base
 #: view:ir.sequence:0
@@ -8850,7 +8951,7 @@ msgstr "Herhaling"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_planning
 msgid "Resources Planing"
-msgstr ""
+msgstr "Resource planing"
 
 #. module: base
 #: field:ir.module.module,complexity:0
@@ -8860,7 +8961,7 @@ msgstr "Complexiteit"
 #. module: base
 #: selection:ir.actions.act_window,target:0
 msgid "Inline"
-msgstr ""
+msgstr "Inline"
 
 #. module: base
 #: model:res.partner.bank.type.field,name:base.bank_normal_field_bic
@@ -8967,7 +9068,7 @@ msgstr "Reparatie management"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_asset
 msgid "Assets Management"
-msgstr ""
+msgstr "Beheer van activa"
 
 #. module: base
 #: view:ir.model.access:0
@@ -9358,7 +9459,7 @@ msgstr "Referentiegids"
 #. module: base
 #: view:ir.values:0
 msgid "Default Value Scope"
-msgstr ""
+msgstr "Bereik standaard waarde"
 
 #. module: base
 #: view:ir.ui.view:0
@@ -9468,7 +9569,7 @@ msgstr "Aanmaakdatum"
 #. module: base
 #: help:ir.actions.server,trigger_name:0
 msgid "The workflow signal to trigger"
-msgstr ""
+msgstr "Het workflow signaal om te triggeren"
 
 #. module: base
 #: model:ir.module.module,description:base.module_mrp
@@ -9517,7 +9618,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,description:base.module_google_base_account
 msgid "The module adds google user in res user"
-msgstr ""
+msgstr "De module voegt een Google gebruiker toe aan het gebruikers bestand"
 
 #. module: base
 #: selection:base.language.install,state:0
@@ -9554,7 +9655,7 @@ msgstr "Algerije"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_plugin
 msgid "CRM Plugins"
-msgstr ""
+msgstr "Relatiebeheer plugins"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_model_model
@@ -9657,7 +9758,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_mrp_jit
 msgid "Just In Time Scheduling"
-msgstr ""
+msgstr "Just In Time Planning"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_bank_statement_extensions
@@ -10047,7 +10148,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_synchro
 msgid "Multi-DB Synchronization"
-msgstr ""
+msgstr "Meerdere databases synchronisatie"
 
 #. module: base
 #: selection:ir.module.module,complexity:0
@@ -10088,6 +10189,9 @@ msgid ""
 "Todo list for CRM leads and opportunities.\n"
 "    "
 msgstr ""
+"\n"
+"TODO lijst voor relatiebeheer leads en prospects.\n"
+"    "
 
 #. module: base
 #: field:ir.actions.act_window.view,view_id:0
@@ -10100,7 +10204,7 @@ msgstr "Weergave"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_wiki_sale_faq
 msgid "Wiki: Sale FAQ"
-msgstr ""
+msgstr "Wiki: Verkoop FAQ"
 
 #. module: base
 #: selection:ir.module.module,state:0
@@ -10266,6 +10370,20 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Deze module geeft u de mogelijkheid om het standaard factuurtarief te "
+"definiëren per kostenplaats.\n"
+"============================================================================="
+"====\n"
+"\n"
+"Dit wordt vaak gebruikt wanneer een werknemer zijn urenstaat invult. De "
+"waarden worden dan automatisch ingevuld, maar de mogelijkheid om deze aan te "
+"passen blijft bestaan.\n"
+"\n"
+"Indien geen gegevens zijn ingevoerd voor de rekening, wordt de standaard "
+"waarde van de kostenplaats gebruikt.\n"
+"\n"
+"    "
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_fundrising
@@ -10316,7 +10434,7 @@ msgstr "res.log"
 #: view:workflow.activity:0
 #: field:workflow.activity,flow_stop:0
 msgid "Flow Stop"
-msgstr "Einde werkschema"
+msgstr "Einde workflow"
 
 #. module: base
 #: selection:ir.cron,interval_type:0
@@ -10344,7 +10462,7 @@ msgstr "Fout !"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_marketing_campaign_crm_demo
 msgid "Marketing Campaign - Demo"
-msgstr ""
+msgstr "Marketing Campagne - Demo gegevens"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_fetchmail_hr_recruitment
@@ -10376,7 +10494,7 @@ msgstr "Deze methode bestaat niet meer"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_import_google
 msgid "Google Import"
-msgstr ""
+msgstr "Google Import"
 
 #. module: base
 #: model:res.partner.category,name:base.res_partner_category_12
@@ -10594,7 +10712,7 @@ msgstr ""
 "Maak een claim van een uitgaande levering.\n"
 "===================================\n"
 "\n"
-"Voegt claim link toe aan een uitgaande order.\n"
+"Voegt claim link toe aan een uitgaande levering.\n"
 
 #. module: base
 #: view:ir.model:0
@@ -10632,6 +10750,7 @@ msgstr "%A - Volledige naam van de dag."
 #: help:ir.values,user_id:0
 msgid "If set, action binding only applies for this user."
 msgstr ""
+"Indien aangevinkt is deze regel alleen van toepassing voor deze gebruiker."
 
 #. module: base
 #: model:res.country,name:base.gw
@@ -10699,6 +10818,8 @@ msgstr "Voltooid"
 msgid ""
 "Specify if missed occurrences should be executed when the server restarts."
 msgstr ""
+"Specificeert of gemiste acties, opnieuw moeten worden gestart als de server "
+"herstart."
 
 #. module: base
 #: model:res.partner.title,name:base.res_partner_title_miss
@@ -11367,7 +11488,7 @@ msgstr "Alles stoppen"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_analytic_user_function
 msgid "Jobs on Contracts"
-msgstr ""
+msgstr "Werknemerfunctie per contract/kostenplaats"
 
 #. module: base
 #: model:ir.module.module,description:base.module_import_sugarcrm
@@ -11472,7 +11593,7 @@ msgstr "Contract bevestiging fout"
 #. module: base
 #: field:ir.values,key2:0
 msgid "Qualifier"
-msgstr ""
+msgstr "Kwalificatie"
 
 #. module: base
 #: field:res.country.state,name:0
@@ -11528,7 +11649,7 @@ msgstr "Reeksen"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Mej."
 
 #. module: base
@@ -11655,7 +11776,7 @@ msgstr "Filter"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Mw."
 
 #. module: base
@@ -11717,7 +11838,7 @@ msgstr "ir.wizard.screen"
 #. module: base
 #: model:ir.model,name:base.model_workflow
 msgid "workflow"
-msgstr "Werkschema"
+msgstr "workflow"
 
 #. module: base
 #: code:addons/base/ir/ir_model.py:255
@@ -11949,7 +12070,7 @@ msgstr "Tunesië"
 #. module: base
 #: view:ir.actions.todo:0
 msgid "Wizards to be Launched"
-msgstr ""
+msgstr "Wizards welke worden gestart"
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_manufacturing
@@ -12083,7 +12204,7 @@ msgstr ""
 #. module: base
 #: field:res.groups,trans_implied_ids:0
 msgid "Transitively inherits"
-msgstr ""
+msgstr "Transitieve overerving"
 
 #. module: base
 #: field:ir.default,ref_table:0
@@ -12293,7 +12414,7 @@ msgstr "Guatemala - Boekhouding"
 #. module: base
 #: help:ir.cron,args:0
 msgid "Arguments to be passed to the method, e.g. (uid,)."
-msgstr ""
+msgstr "Argumenten welke worden doorgegeven aan de methodes, bijv. (uid)."
 
 #. module: base
 #: model:res.partner.category,name:base.res_partner_category_5
@@ -12704,7 +12825,7 @@ msgstr "ir.actions.client"
 #. module: base
 #: help:ir.values,value:0
 msgid "Default value (pickled) or reference to an action"
-msgstr ""
+msgstr "Standaardwaarde of verwijzing naar een actie"
 
 #. module: base
 #: sql_constraint:res.groups:0
@@ -12763,7 +12884,7 @@ msgstr ""
 #. module: base
 #: view:ir.rule:0
 msgid "Rule definition (domain filter)"
-msgstr ""
+msgstr "Regel definitie (domein filter)"
 
 #. module: base
 #: model:ir.model,name:base.model_workflow_instance
@@ -12862,7 +12983,7 @@ msgstr "Low Level-objecten"
 #. module: base
 #: help:ir.values,model:0
 msgid "Model to which this entry applies"
-msgstr ""
+msgstr "Model waarover deze regel gaat."
 
 #. module: base
 #: field:res.country,address_format:0
@@ -13012,6 +13133,9 @@ msgid ""
 "        OpenERP Web kanban view.\n"
 "        "
 msgstr ""
+"\n"
+"        OpenERP Web kanban weergave.\n"
+"        "
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_project_management_time_tracking
@@ -13209,6 +13333,9 @@ msgid ""
 "Python code to be executed if condition is met.\n"
 "It is a Python block that can use the same values as for the condition field"
 msgstr ""
+"Python code welke wordt gestart als aan de conditie is voldaan.\n"
+"Het is een Python block dat dezelfde waardes kan gebruiken als voor een "
+"conditie veld."
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_partner_supplier_form
@@ -13352,7 +13479,7 @@ msgstr "Stel bankrekeningen in"
 #. module: base
 #: field:ir.actions.client,tag:0
 msgid "Client action tag"
-msgstr ""
+msgstr "Client actie tag"
 
 #. module: base
 #: code:addons/base/res/res_lang.py:189
@@ -13363,7 +13490,7 @@ msgstr "U kunt geen taal verwijderen die gebruikers voorkeurstaal is !"
 #. module: base
 #: field:ir.values,model_id:0
 msgid "Model (change only)"
-msgstr ""
+msgstr "Model"
 
 #. module: base
 #: model:ir.module.module,description:base.module_marketing_campaign_crm_demo
@@ -13432,6 +13559,8 @@ msgid ""
 "The object that should receive the workflow signal (must have an associated "
 "workflow)"
 msgstr ""
+"et object dat het workflow signaal moet ontvangen (moet een verbonden "
+"workflow heben)"
 
 #. module: base
 #: model:ir.module.category,description:base.module_category_account_voucher
@@ -13690,6 +13819,18 @@ msgid ""
 "supplier in the routing of the assembly operation.\n"
 "    "
 msgstr ""
+"\n"
+"Deze module maakt het mogelijk een tussentijdse verzamelproces mogelijk voor "
+"de ontvangst van grondstoffen aan productieorders.\n"
+"============================================================================="
+"================\n"
+"\n"
+"Dit kunt u bijvoorbeeld gebruiken indien u productie uitbesteed aan uw "
+"leverancier/onderaannemer.\n"
+"Zet in dit geval bij de grondstof de optie \"Automatisch verzamelen\" uit en "
+"zet de locatie van de leverancier\n"
+"in de routing van de assemblage verwerking.\n"
+"    "
 
 #. module: base
 #: view:ir.actions.server:0
@@ -13703,6 +13844,9 @@ msgid ""
 "are available. To add a new language, you can use the 'Load an Official "
 "Translation' wizard available from the 'Administration' menu."
 msgstr ""
+"De standaard taal welke wordt gebruikt in de user interface, wanneer "
+"vertalingen aanwezig zijn. Om een nieuwe taal toe te voegen kunt u de \"Laad "
+"een officiële vertaling\" gebruiken vanuit het instellingen menu."
 
 #. module: base
 #: model:ir.module.module,description:base.module_l10n_es
@@ -13999,6 +14143,8 @@ msgid ""
 "This cron task is currently being executed and may not be modified, please "
 "try again in a few minutes"
 msgstr ""
+"Deze planner taak wordt op dit moment uitgevoerd en kan zodoende niet worden "
+"aangepast. Probeert u het over enkele minuten opnieuw."
 
 #. module: base
 #: model:ir.module.module,description:base.module_product_expiry
@@ -14378,6 +14524,8 @@ msgstr "TLS (STARTTLS)"
 #: help:ir.actions.act_window,usage:0
 msgid "Used to filter menu and home actions from the user form."
 msgstr ""
+"Wordt gebruikt om het menu en home acties te filteren van het "
+"gebruikersbestand."
 
 #. module: base
 #: model:res.country,name:base.sa
@@ -14394,7 +14542,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_fetchmail_crm_claim
 msgid "eMail Gateway for CRM Claim"
-msgstr "E-mail gateway voor CRM Claims"
+msgstr "E-mail Gateway voor CRM Claims"
 
 #. module: base
 #: help:res.partner,supplier:0
@@ -14498,7 +14646,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,description:base.module_auth_openid
 msgid "Allow users to login through OpenID."
-msgstr ""
+msgstr "Geeft gebruikers de mogelijkheid om in te loggen met OpenID."
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_payment
@@ -14605,6 +14753,8 @@ msgstr "En"
 msgid ""
 "Database identifier of the record to which this applies. 0 = for all records"
 msgstr ""
+"Database identifier van het record waar dit toe behoort. 0 = voor alle "
+"records"
 
 #. module: base
 #: field:ir.model.fields,relation:0
@@ -14687,7 +14837,7 @@ msgstr "Onderliggend veld"
 #. module: base
 #: view:ir.rule:0
 msgid "Detailed algorithm:"
-msgstr ""
+msgstr "Gedetailleerde algoritme:"
 
 #. module: base
 #: field:ir.actions.act_window,usage:0
@@ -14856,6 +15006,10 @@ msgid ""
 "        This module provides the core of the OpenERP web client.\n"
 "        "
 msgstr ""
+"\n"
+"        OpenERP Web core module.\n"
+"        deze module bevat de core functionaliteiten van de web cliënt.\n"
+"        "
 
 #. module: base
 #: sql_constraint:res.country:0
@@ -15061,7 +15215,7 @@ msgstr ""
 #: code:addons/orm.py:791
 #, python-format
 msgid "Serialization field `%s` not found for sparse field `%s`!"
-msgstr ""
+msgstr "Reeks veld '%s' niet gevonden voor sparse veld '%s'!"
 
 #. module: base
 #: model:res.country,name:base.jm
@@ -15335,11 +15489,14 @@ msgid ""
 "        OpenERP Web test suite.\n"
 "        "
 msgstr ""
+"\n"
+"        OpenERP Web test suite.\n"
+"        "
 
 #. module: base
 #: view:ir.values:0
 msgid "Action Bindings/Defaults"
-msgstr ""
+msgstr "Acties/Standaard waarden"
 
 #. module: base
 #: view:ir.rule:0
@@ -15713,7 +15870,7 @@ msgstr "Maanden"
 #. module: base
 #: view:workflow.instance:0
 msgid "Workflow Instances"
-msgstr "Exemplaren werkschema"
+msgstr "Workflow instanties"
 
 #. module: base
 #: code:addons/base/res/res_partner.py:284
@@ -15805,6 +15962,8 @@ msgid ""
 "This field is computed automatically based on bank accounts defined, having "
 "the display on footer checkbox set."
 msgstr ""
+"Dit veld wordt automatisch berekend, gebaseerd op de gedefinieerde "
+"bankrekeningen, indien het veld voor het weergeven in de voet is aangevinkt."
 
 #. module: base
 #: model:ir.module.module,description:base.module_mrp_subproduct
index 7affdca..0a39583 100644 (file)
@@ -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: 2012-09-05 04:45+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:42+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -790,7 +790,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3697,7 +3697,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5476,7 +5476,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -11010,7 +11010,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11130,7 +11130,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 1ddbdd2..52e1c93 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:42+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:39+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -797,7 +797,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3778,7 +3778,7 @@ msgstr "GPL-2 lub wersja późniejsza"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5599,7 +5599,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Trzyliterowy kod regionu\n"
 
 #. module: base
@@ -11196,7 +11196,7 @@ msgstr "Numeracje"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11318,7 +11318,7 @@ msgstr "Filtr"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Pani"
 
 #. module: base
index 5029fad..14363c3 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:43+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:40+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
index 2fe5ba9..342d975 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-12 04:36+0000\n"
-"X-Generator: Launchpad (build 15930)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:42+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -73,17 +73,17 @@ msgid ""
 msgstr ""
 "\n"
 "Módulo de gerenciamento de projetos acompanha projetos multinível, tarefas, "
-"tabalhos \n"
-"realizados em taredas, etc.\n"
+"trabalhos \n"
+"realizados em tarefas, etc.\n"
 "============================================================================="
 "=========\n"
 "\n"
-"Viabiliza o planejamento, ordenamento de tarefasm etc.\n"
+"Viabiliza o planejamento, ordenamento de tarefas etc.\n"
 "\n"
 "Painel para membros de projetos incluindo:\n"
 "--------------------------------------------\n"
 "    * Lista das minhas tarefas\n"
-"    * Lista das minhas tarefas delagadas\n"
+"    * Lista das minhas tarefas delegadas\n"
 "    * Grafico dos Meus projetos: Planejadas vs Horas Totais\n"
 "    * Grafico das minhas horas restantes por projeto\n"
 "    "
index 78b16dd..8576dce 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:43+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:40+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -460,7 +460,7 @@ msgstr "Obiect Sursa"
 #. module: base
 #: model:res.partner.bank.type,format_layout:base.bank_normal
 msgid "%(bank_name)s: %(acc_number)s"
-msgstr "%(nume_banca)s: %(numar_de_cont)s"
+msgstr "%(bank_name)s: %(acc_number)s"
 
 #. module: base
 #: view:ir.actions.todo:0
@@ -877,7 +877,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Manual: Lansat manual.\n"
@@ -4414,7 +4414,7 @@ msgstr "GPL-2 sau o versiune mai noua"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "Dl."
 
 #. module: base
@@ -6695,7 +6695,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Codul statului, din trei caractere.\n"
 
 #. module: base
@@ -13750,7 +13750,7 @@ msgstr "Secvente"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "D-ra"
 
 #. module: base
@@ -13878,7 +13878,7 @@ msgstr "Filtru"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Dna."
 
 #. module: base
index bf2bd97..82e7869 100644 (file)
@@ -7,14 +7,14 @@ msgstr ""
 "Project-Id-Version: OpenERP Server 5.0.4\n"
 "Report-Msgid-Bugs-To: support@openerp.com\n"
 "POT-Creation-Date: 2012-02-08 00:44+0000\n"
-"PO-Revision-Date: 2012-09-10 14:37+0000\n"
+"PO-Revision-Date: 2012-09-24 14:20+0000\n"
 "Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-11 04:50+0000\n"
-"X-Generator: Launchpad (build 15924)\n"
+"X-Launchpad-Export-Date: 2012-09-25 04:44+0000\n"
+"X-Generator: Launchpad (build 16019)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -34,7 +34,7 @@ msgstr "DateTime"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_mailgate
 msgid "Tasks-Mail Integration"
-msgstr ""
+msgstr "Интеграция задач - почты"
 
 #. module: base
 #: code:addons/fields.py:582
@@ -162,11 +162,11 @@ msgid ""
 "This module allows you to create retro planning for managing your events.\n"
 msgstr ""
 "\n"
-"Организация и управление событиями.\n"
+"Организация и управление мероприятиями.\n"
 "======================================\n"
 "\n"
 "Этот модуль позволяет вам создавать ретро планирование для управления вашими "
-"событиями.\n"
+"мероприятиями.\n"
 
 #. module: base
 #: help:ir.model.fields,domain:0
@@ -368,6 +368,12 @@ msgid ""
 "  - tree_but_open\n"
 "For defaults, an optional condition"
 msgstr ""
+"Для действий, одна из возможных вставок действия: \n"
+"  - client_action_multi\n"
+"  - client_print_multi\n"
+"  - client_action_relate\n"
+"  - tree_but_open\n"
+"Для действий по умолчанию, необязательное условие"
 
 #. module: base
 #: sql_constraint:res.lang:0
@@ -382,6 +388,11 @@ msgid ""
 "        complex data from other software\n"
 "    "
 msgstr ""
+"\n"
+"        Этот модуль предоставляет класс import_framework для помощи в "
+"импорте \n"
+"        сложных данных из другого программного обеспечения\n"
+"    "
 
 #. module: base
 #: field:ir.actions.wizard,wiz_name:0
@@ -391,7 +402,7 @@ msgstr "Название мастера"
 #. module: base
 #: model:res.groups,name:base.group_partner_manager
 msgid "Partner Manager"
-msgstr ""
+msgstr "Менеджер контрагента"
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_customer_relationship_management
@@ -422,7 +433,7 @@ msgstr "Кредитный лимит"
 #. module: base
 #: model:ir.module.module,description:base.module_web_graph
 msgid "Openerp web graph view"
-msgstr ""
+msgstr "Вид веб-графика Openerp"
 
 #. module: base
 #: field:ir.model.data,date_update:0
@@ -432,7 +443,7 @@ msgstr "Дата изменения"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_action_rule
 msgid "Automated Action Rules"
-msgstr ""
+msgstr "Автоматические правила действий"
 
 #. module: base
 #: view:ir.attachment:0
@@ -447,7 +458,7 @@ msgstr "Объект-источник"
 #. module: base
 #: model:res.partner.bank.type,format_layout:base.bank_normal
 msgid "%(bank_name)s: %(acc_number)s"
-msgstr ""
+msgstr "%(bank_name)s: %(acc_number)s"
 
 #. module: base
 #: view:ir.actions.todo:0
@@ -477,6 +488,8 @@ msgid ""
 "Invalid date/time format directive specified. Please refer to the list of "
 "allowed directives, displayed when you edit a language."
 msgstr ""
+"Указан неверный формат даты/времени. Пожалуйста, смотрите список разрешенных "
+"форматов, отображаемых при редактировании языка."
 
 #. module: base
 #: code:addons/orm.py:3895
@@ -491,7 +504,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_pad_project
 msgid "Specifications on PADs"
-msgstr ""
+msgstr "Спецификации планшетов"
 
 #. module: base
 #: help:ir.filters,user_id:0
@@ -515,6 +528,10 @@ msgid ""
 "and reference view. The result is returned as an ordered list of pairs "
 "(view_id,view_mode)."
 msgstr ""
+"Это функциональное поле подсчитывает упорядоченный список видов, который "
+"должен быть разрешён при при показе результата действия, режим объединённого "
+"вида, виды и справочный вид. Результат возвращается как упорядоченный список "
+"пар (view_id,view_mode)."
 
 #. module: base
 #: model:res.country,name:base.tv
@@ -565,7 +582,7 @@ msgstr ""
 #. module: base
 #: view:ir.values:0
 msgid "Action Binding"
-msgstr ""
+msgstr "Привязка действия"
 
 #. module: base
 #: model:res.country,name:base.gf
@@ -594,7 +611,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_sale_layout
 msgid "Sales Orders Print Layout"
-msgstr ""
+msgstr "Шаблон печати заказов на продажу"
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -640,6 +657,28 @@ msgid ""
 "    Accounting/Reporting/Generic Reporting/Partners/Follow-ups Sent\n"
 "\n"
 msgstr ""
+"\n"
+"Модуль для автоматизации отсылки писем по неоплаченным счетам, с "
+"многоуровневыми напоминаниями.\n"
+"==========================================================================\n"
+"\n"
+"Вы можете определить ваши многоуровневые напоминания через меню:\n"
+"    Бухгалтерия/Настройка/Разное/Напоминания\n"
+"\n"
+"После определения, вы можете автоматически печатать напоминания каждый день "
+"через простое нажатие по меню:\n"
+"    Бухгалтерия/Периодическая обработка/Учёт/Отправить напоминания\n"
+"\n"
+"Это создаст PDF-файл со всеми письмами соответственно\n"
+"различным уровням определённого напоминания. Вы можете определить различные "
+"политики\n"
+"для различных компаний. Вы также можете отправить письмо покупателю.\n"
+"\n"
+"Учтите, что если вы хотите проверить уровень напоминания для данного "
+"партнёра/проводки счёта, вы можете сделать это из меню:\n"
+"    Бухгалтерия/Отчётность/Общая отчётность/Партнёры/Отправленные "
+"напоминания\n"
+"\n"
 
 #. module: base
 #: field:res.country,name:0
@@ -830,9 +869,13 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
+"Ручной: вызывается вручную.\n"
+"Автоматический: выполняется каждый раз при реконфигурации системы.\n"
+"Одноразовый ручной вызов: после вызова вручную, устанавливается "
+"автоматически в \"Сделано\"."
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -878,7 +921,7 @@ msgstr "Албанский / Shqip"
 #. module: base
 #: model:ir.ui.menu,name:base.menu_crm_config_opportunity
 msgid "Opportunities"
-msgstr "Сделки"
+msgstr "Предложения"
 
 #. module: base
 #: model:ir.model,name:base.model_base_language_export
@@ -902,7 +945,7 @@ msgstr "Тип отчета: pdf, html, raw, sxw, odt, html2html, mako2html, ...
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_document_webdav
 msgid "Shared Repositories (WebDAV)"
-msgstr "Общий репозиторий (WebDAV)"
+msgstr "Репозитории совместного доступа (WebDAV)"
 
 #. module: base
 #: model:ir.module.module,description:base.module_import_google
@@ -910,7 +953,8 @@ msgid ""
 "The module adds google contact in partner address and add google calendar "
 "events details in Meeting"
 msgstr ""
-"Этот модуль добавляет контакт Google в партнеров и календарь Google в Встречи"
+"Этот модуль добавляет контакт Google в партнеров и добавляет описание из "
+"мероприятие в Google календаре во Встречи"
 
 #. module: base
 #: view:res.users:0
@@ -1017,7 +1061,7 @@ msgstr "Ниуэ"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_membership
 msgid "Membership Management"
-msgstr ""
+msgstr "Управление членством"
 
 #. module: base
 #: selection:ir.module.module,license:0
@@ -1203,6 +1247,22 @@ msgid ""
 "At the end of the month, the planning manager can also check if the encoded "
 "timesheets are respecting the planned time on each analytic account.\n"
 msgstr ""
+"Отслеживание вашего планирования\n"
+"Этот модуль помогает вам управлять вашим планированием.\n"
+"===============================================\n"
+"\n"
+"Этот модуль основан на аналитическом учёте и тотально интегрирован с\n"
+"* вводом данных табелей\n"
+"* управлением выходными\n"
+"* управлением проектом\n"
+"\n"
+"Таким образом, каждый руководитель подразделения может знать что кто-то в "
+"его команде имеет не распределённое время для данного планирования (взятое с "
+"учётом утвержденных отпусков) или остаётся нужда ввода данных по задачам.\n"
+"\n"
+"В конце месяца, руководитель планирования может также проверить что "
+"введённые данные табелей соответствуют плановому времени по каждому "
+"аналитическому счёту.\n"
 
 #. module: base
 #: selection:ir.property,type:0
@@ -1471,6 +1531,26 @@ msgid ""
 "database,\n"
 "      but in the servers rootpad like /server/bin/filestore.\n"
 msgstr ""
+"\n"
+"Это полная система управления документами.\n"
+"==============================================\n"
+"\n"
+"    * Авторизация пользователя\n"
+"    * Индексация документа: - файлы .pptx и .docx не поддержаны в платформе "
+"Windows.\n"
+"    * Панель для документов, включающая:\n"
+"        * новые файлы (список)\n"
+"        * файлы по типу ресурса (график)\n"
+"        * файлы по партнёру (график)\n"
+"        * размер файлов по месяцу (график)\n"
+"\n"
+"ВНИМАНИЕ:\n"
+"    - когда вы устанавливаете этот модуль в действующей компании уже имеющей "
+"PDF-файлы сохранённые в базе данных,\n"
+"      вы потеряете все их.\n"
+"    - после установки этого модуля PDF-ы далее сохраняются не в базе "
+"данных,\n"
+"      а в каталоге сервера типа /server/bin/filestore.\n"
 
 #. module: base
 #: view:res.lang:0
@@ -1484,6 +1564,9 @@ msgid ""
 "        OpenERP Web gantt chart view.\n"
 "        "
 msgstr ""
+"\n"
+"        OpenERP веб вид диаграммы Ганта.\n"
+"        "
 
 #. module: base
 #: report:ir.module.reference.graph:0
@@ -1536,6 +1619,15 @@ msgid ""
 "Web.\n"
 "    "
 msgstr ""
+"\n"
+"Это тестовый модуль, который показывает поддержку HTML тегов в обычном виде "
+"XML формы.\n"
+"============================================================================="
+"\n"
+"\n"
+"Создаёт пример вида формы используя HTML теги. Это видно только в OpenERP "
+"веб.\n"
+"    "
 
 #. module: base
 #: model:ir.module.category,description:base.module_category_purchase_management
@@ -1630,6 +1722,19 @@ msgid ""
 "    - You can define new types of events in\n"
 "        Association / Configuration / Types of Events\n"
 msgstr ""
+"\n"
+"Организация и управление мероприятиями.\n"
+"======================================\n"
+"\n"
+"Этот модуль позволяет вам\n"
+"    * управлять вашими мероприятиями и их регистрацией\n"
+"    * использовать e-mail-ы для автоматического подтверждения и отправки "
+"подтверждений любой регистрации на мероприятие\n"
+"    * ...\n"
+"\n"
+"Учтите, что:\n"
+"    - вы можете определить новые типы мероприятий в\n"
+"        Организация/Настройка/Типы мероприятий\n"
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_tools
@@ -1733,6 +1838,26 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль добавляет общий инструмент совместного доступа для текущей базы "
+"данных OpenERP.\n"
+"========================================================================\n"
+"\n"
+"Он добавляет кнопку 'Совместный доступ', которая доступна в веб-клиенте для\n"
+"совместного использования данных OpenERP любого сорта с сотрудниками, "
+"покупателями, друзьями и т.д.\n"
+"\n"
+"Система будет работать при создании новых пользователей и групп на лету, и "
+"при\n"
+"комбинировании подходящих прав доступа и ir.rules для убеждения в том, что\n"
+"допущенные пользователи имеют доступ только к данным, которые используются "
+"совместно с ними.\n"
+"\n"
+"Это особенно полезно для работы в сотрудничестве, совместного использования "
+"знаний,\n"
+"синхронизации с другими компаниями, и т.п.\n"
+"\n"
+"    "
 
 #. module: base
 #: field:res.currency,accuracy:0
@@ -1812,6 +1937,41 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Проверка НДС контрагентов по номерам НДС\n"
+"========================================\n"
+"\n"
+"После установки этого модуля, значения введённые в поле НДС партнёров будут\n"
+"проверены для всех поддерживаемых стран. Страна определяется по \n"
+"2-буквенному коду страны предшествующему номеру НДС, напр. ``BE0477472701``\n"
+"будет проверен используя Бельгийские правила.\n"
+"\n"
+"Имеется два различных уровня для подтверждения номера НДС:\n"
+"\n"
+" * По умолчанию, простая оффлайновая проверка производится с использованием "
+"известных правил\n"
+"   подтверждения для страны, обычно простой проверкой цифр. Она проста и \n"
+"   всегда доступна,но допускает номера, которые представлены возможно не "
+"верно,\n"
+"   или более того не допустимы.\n"
+" * Когда параметр \\\"Проверка НДС VIES\\\" разрешён (в настройке "
+"пользовательской\n"
+"   компании), номера НДС будут отправлены на онлайновую VIES\n"
+"   базу данных ЕС, которая тщательно проверит, что номер допустим и\n"
+"   назначен компании ЕС. Это несколько более медленно, чем простая\n"
+"   офлайновая проверка, требует интернет соединения, и может быть "
+"недоступна\n"
+"   постоянно. Если услуга не доступна или не поддерживает\n"
+"   запрошенную страну (напр. не страну ЕС), вместо этого будет выполнена "
+"простая\n"
+"   проверка.\n"
+"\n"
+"Поддерживаемые страны сейчас включают страны ЕС, и некоторые не ЕС страны,\n"
+"такие как Чили, Колумбия, Мексика, Норвегия или Россия. Для не "
+"поддерживаемых стран,\n"
+"будет подтверждён только код страны.\n"
+"\n"
+"    "
 
 #. module: base
 #: view:ir.sequence:0
@@ -1849,6 +2009,18 @@ msgid ""
 "The managers can obtain an easy view of best ideas from all the users.\n"
 "Once installed, check the menu 'Ideas' in the 'Tools' main menu."
 msgstr ""
+"\n"
+"Этот модуль позволяет вашему пользователю легко и эффективно участвовать в "
+"инновациях на предприятии.\n"
+"============================================================================="
+"===============\n"
+"\n"
+"Он позволяет каждому выразить идеи относительно различных предметов.\n"
+"Далее, другие пользователи могут комментировать эти идеи и голосовать за "
+"конкретные идеи.\n"
+"Каждая идея имеет оценку основанную на различных согласованиях.\n"
+"Руководители могут получить простой вид лучших идей от всех пользователей.\n"
+"После установки, проверьте меню 'Идеи' в главном меню 'Инструменты'."
 
 #. module: base
 #: model:ir.model,name:base.model_ir_rule
@@ -1863,7 +2035,7 @@ msgstr "Дней"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_rpc
 msgid "OpenERP Web web"
-msgstr ""
+msgstr "OpenERP Веб веб"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_html_view
@@ -1888,7 +2060,7 @@ msgstr "Имя метода, который будет вызван когда 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr_evaluation
 msgid "Employee Appraisals"
-msgstr ""
+msgstr "Оценки сотрудника"
 
 #. module: base
 #: selection:ir.actions.server,state:0
@@ -1905,7 +2077,7 @@ msgstr " (копия)"
 #. module: base
 #: field:res.company,rml_footer1:0
 msgid "General Information Footer"
-msgstr ""
+msgstr "Общая информация - нижний колонтитул"
 
 #. module: base
 #: view:res.lang:0
@@ -1927,7 +2099,7 @@ msgstr "Родитель слева"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_mrp
 msgid "Create Tasks on SO"
-msgstr ""
+msgstr "Создание задач по заказу на продажу"
 
 #. module: base
 #: field:ir.attachment,res_model:0
@@ -2118,7 +2290,7 @@ msgstr "В виде дерева"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_analytic_multicurrency
 msgid "Multi-Currency in Analytic"
-msgstr ""
+msgstr "Мультивалютность в аналитике"
 
 #. module: base
 #: view:base.language.export:0
@@ -2202,6 +2374,33 @@ msgid ""
 "Some statistics by journals are provided.\n"
 "    "
 msgstr ""
+"\n"
+"Модули журнала продаж позволяют вам распределять ваши продажи и поставки "
+"(комплектовочные списки) между различными журналами.\n"
+"============================================================================="
+"===========================================\n"
+"\n"
+"Этот модуль весьма полезен для больших компаний, которые\n"
+"работают через подразделения.\n"
+"\n"
+"Вы можете использовать журнал для различных целей, несколько примеров:\n"
+"    * изоляции продаж различных подразделений\n"
+"    * журналы для поставок автотранспортом или по почте\n"
+"\n"
+"Журналы имеют ответственного и несколько различных состояний:\n"
+"    * черновик, открыт, отмена, сделано.\n"
+"\n"
+"Могут быть произведены пакетные операции по различным журналам для\n"
+"одновременного утверждения всех продаж, для подтверждения или выставления "
+"счёта на упаковку, ...\n"
+"\n"
+"Также поддерживаются пакетные методы выставления счетов, которые могут быть "
+"настроены по партнёрам и заказам продаж, примеры:\n"
+"    * ежедневное выставление счетов,\n"
+"    * ежемесячное выставление счетов, ...\n"
+"\n"
+"Предусмотрена некоторая статистика по журналам.\n"
+"    "
 
 #. module: base
 #: field:res.company,logo:0
@@ -2237,6 +2436,21 @@ msgid ""
 "re-invoice your customer's expenses if your work by project.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль нацелен на управление расходами сотрудника.\n"
+"===============================================\n"
+"\n"
+"Реализован весь рабочий процесс:\n"
+"    * черновой расход\n"
+"    * подтверждение отчёта сотрудником\n"
+"    * утверждение непосредственным руководителем\n"
+"    * утверждение бухгалтером и создание счёта\n"
+"    * оплата счёта сотруднику\n"
+"\n"
+"Этот модуль использует также аналитический учёт и совместим с\n"
+"модулем счёта по табелю, так что вы сможете автоматически\n"
+"перевыставлять счёт расходов вашим клиентам, если вы работаете по проекту.\n"
+"    "
 
 #. module: base
 #: field:ir.values,action_id:0
@@ -2362,6 +2576,19 @@ msgid ""
 "system to store and search in your CV base.\n"
 "    "
 msgstr ""
+"\n"
+"Управляет рабочими местами и процессом найма.\n"
+"==================================================\n"
+"\n"
+"Он интегрирован с модулем опроса для позволения вам определить интервью для "
+"различных работ.\n"
+"\n"
+"Этот модуль интегрирован с почтовым шлюзом для автоматического отслуживания "
+"e-mail\n"
+"отправленных на jobs@YOURCOMPANY.com. Он также интегрирован с системой "
+"управления\n"
+"документами для сохранения и поиска в вашей базе резюме (CV).\n"
+"    "
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_res_widget_wizard
@@ -2417,7 +2644,7 @@ msgid ""
 "`object.order_line`."
 msgstr ""
 "Введите поле/выражение, которое возвращает список. Например, выберите счёт в "
-"Object, и Вы сможете получить все позиции в счёте на оплату. Выражение = "
+"Object, и Вы сможете получить все позиции в заказе продаж. Выражение = "
 "`object.order_line`."
 
 #. module: base
@@ -2439,6 +2666,19 @@ msgid ""
 "and categorize your interventions with a channel and a priority level.\n"
 "    "
 msgstr ""
+"\n"
+"\\n\n"
+"Управление помощью.\\n\n"
+"====================\\n\n"
+"\n"
+"Подобно записи и обработке претензий, помощь и поддержка являются хорошими "
+"инструментами\n"
+"для отслеживания ваших вмешательств. Это меню приспособлено для голосового "
+"общения,\n"
+"что не обязательно относится к претензии. Выберите покупателя, добавьте "
+"примечания\n"
+"и категоризируйте ваши вмешательства с каналом и уровнем приоритета.\n"
+"    "
 
 #. module: base
 #: sql_constraint:ir.ui.view_sc:0
@@ -2459,6 +2699,16 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Модуль для управления ресурсами.\n"
+"===============================\n"
+"\n"
+"Ресурс представляет что-то, что может быть запланировано\n"
+"(разработчик по задаче или рабочий центр по производственным заказам).\n"
+"Этот модуль управляет календарём ресурса связанным с каждым ресурсом.\n"
+"Он также управляет отсутствиями каждого ресурса.\n"
+"\n"
+"    "
 
 #. module: base
 #: view:ir.rule:0
@@ -2499,6 +2749,11 @@ msgid ""
 "\n"
 "Configure servers and trigger synchronization with its database objects.\n"
 msgstr ""
+"\n"
+"Синхронизация со всеми объектами.\n"
+"=================================\n"
+"\n"
+"Настройте серверы и запуск синхронизации с объектами базы данных.\n"
 
 #. module: base
 #: model:res.country,name:base.mg
@@ -2552,6 +2807,13 @@ msgid ""
 "orders.\n"
 "    "
 msgstr ""
+"\n"
+"Основной модуль для управления разнесением аналитики и заказами продаж.\n"
+"=================================================================\n"
+"\n"
+"Использование этого модуля позволит вам связать аналитические счета с "
+"заказами продаж.\n"
+"    "
 
 #. module: base
 #: field:ir.actions.url,target:0
@@ -2561,7 +2823,7 @@ msgstr "Цель действия"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_calendar
 msgid "Calendar Layer"
-msgstr ""
+msgstr "Макет календаря"
 
 #. module: base
 #: model:ir.actions.report.xml,name:base.report_ir_model_overview
@@ -2638,7 +2900,7 @@ msgstr "Действие сервера"
 #. module: base
 #: help:ir.actions.client,params:0
 msgid "Arguments sent to the client along withthe view tag"
-msgstr ""
+msgstr "Аргументы, отправленные клиенту вместе с тегом вида"
 
 #. module: base
 #: model:ir.module.module,description:base.module_project_gtd
@@ -2669,6 +2931,29 @@ msgid ""
 "performing those tasks.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль реализует все концепции методологии дела-в-порядке\n"
+"============================================================================="
+"======\n"
+"\n"
+"Этот модуль реализует простой персональный список дел основанный на задачах. "
+"Он  добавляет в\n"
+"приложение проекта редактируемый список задач упрощённый до минимума\n"
+"требуемых полей.\n"
+"\n"
+"Список дел основан на методологии GTD. Это широко используемая методология\n"
+"использована для улучшения управления личным временем.\n"
+"\n"
+"Дела в порядке (Getting Things Done - обычно сокращаемое как GTD) - способ "
+"управления\n"
+"делом созданный Давидом Алленом, и описанный в книге под тем же названием.\n"
+"\n"
+"GTD опирается на принцип, что личность нуждается в переносе задач из памяти\n"
+"во внешние записи. Этот путь мышления освобождает от воспоминания о "
+"работах,\n"
+"которые должны быть сделаны, и можно сосредоточиться на действительном\n"
+"выполнении этих задач.\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.tt
@@ -2743,7 +3028,7 @@ msgstr "Унаследованный"
 #. module: base
 #: field:ir.model.fields,serialization_field_id:0
 msgid "Serialization Field"
-msgstr ""
+msgstr "Serialization Field"
 
 #. module: base
 #: model:ir.module.category,description:base.module_category_report_designer
@@ -2805,7 +3090,7 @@ msgstr "Ошибка !"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_l10n_fr_rib
 msgid "French RIB Bank Details"
-msgstr ""
+msgstr "Банковские подробности французского RIB"
 
 #. module: base
 #: view:res.lang:0
@@ -2840,6 +3125,10 @@ msgid ""
 "==================================================\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль добавляет планшет во все канбан виды проекта\n"
+"==================================================\n"
+"    "
 
 #. module: base
 #: model:ir.actions.act_window,help:base.action_country
@@ -2885,12 +3174,12 @@ msgstr "Бангладеш"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_retro_planning
 msgid "Project Retro-planning"
-msgstr ""
+msgstr "Ретро планирование проекта"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_stock_planning
 msgid "Master Procurement Schedule"
-msgstr ""
+msgstr "Главное планирование снабжения"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_module_category
@@ -2915,6 +3204,13 @@ msgid ""
 "\n"
 "The decimal precision is configured per company.\n"
 msgstr ""
+"\n"
+"Настройте нужную вам точность цены для различных видов использования: "
+"бухгалтерия, продажи, закупки, и т.д.\n"
+"============================================================================="
+"=========================\n"
+"\n"
+"Десятичная точность настроена по компании.\n"
 
 #. module: base
 #: model:ir.module.module,description:base.module_l10n_pl
@@ -2932,11 +3228,22 @@ msgid ""
 "że wszystkie towary są w obrocie hurtowym.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль обслуживает в OpenERP план счетов и налогов для Польши.\n"
+"============================================================================="
+"=====\n"
+"\n"
+"To jest moduł do tworzenia wzorcowego planu kont i podstawowych ustawień do "
+"podatków\n"
+"VAT 0%, 7% i 22%. Moduł ustawia też konta do kupna i sprzedaży towarów "
+"zakładając,\n"
+"że wszystkie towary są w obrocie hurtowym.\n"
+"    "
 
 #. module: base
 #: field:ir.actions.client,params_store:0
 msgid "Params storage"
-msgstr ""
+msgstr "Хранилище параметров"
 
 #. module: base
 #: code:addons/base/module/module.py:409
@@ -2967,6 +3274,20 @@ msgid ""
 "since it's the same which has been renamed.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет пользователям выполнять сегментацию партнёров.\n"
+"=================================================================\n"
+"\n"
+"Он использует критерии профилей из прежнего модуля сегментации и улучшает "
+"их. Благодаря новой концепции опросника. Теперь вы можете перегруппировывать "
+"вопросы в опроснике и использовать их непосредственно по партнёру.\n"
+"\n"
+"Он также объединен с прежним инструментом сегментации CRM и SRM, вследствие "
+"их частичного перекрытия.\n"
+"\n"
+"    * Примечание: этот модуль не совместим с модулем сегментации, поскольку "
+"он тот же самый что и переименованный.\n"
+"    "
 
 #. module: base
 #: code:addons/report_sxw.py:434
@@ -3178,7 +3499,7 @@ msgstr ""
 #. module: base
 #: model:res.groups,name:base.group_survey_user
 msgid "Survey / User"
-msgstr ""
+msgstr "Опрос/пользователь"
 
 #. module: base
 #: view:ir.module.module:0
@@ -3199,12 +3520,12 @@ msgstr "Файл значка для Web (наведение)"
 #. module: base
 #: model:ir.module.module,description:base.module_web_diagram
 msgid "Openerp web Diagram view"
-msgstr ""
+msgstr "Вид веб диаграммы Openerp"
 
 #. module: base
 #: model:res.groups,name:base.group_hr_user
 msgid "HR Officer"
-msgstr ""
+msgstr "Сотрудник СП"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr_contract
@@ -3222,6 +3543,13 @@ msgid ""
 "for Wiki FAQ.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль предусматривает шаблон Wiki ЧаВо.\n"
+"=========================================\n"
+"\n"
+"Он предусматривает демо данные, для создания Wiki группы и Wiki страниц\n"
+"для Wiki ЧаВо.\n"
+"    "
 
 #. module: base
 #: view:ir.actions.server:0
@@ -3351,7 +3679,7 @@ msgstr "Соответствие полей"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_dashboard
 msgid "web Dashboard"
-msgstr ""
+msgstr "Веб панель"
 
 #. module: base
 #: model:ir.module.module,description:base.module_sale
@@ -3395,6 +3723,44 @@ msgid ""
 "    * Graph of Sales by Product's Category in last 90 days\n"
 "    "
 msgstr ""
+"\n"
+"Основной модуль для управления предложениями цен и заказами на продажу.\n"
+"======================================================\n"
+"\n"
+"Рабочий процесс с шагами подтверждения:\n"
+"-------------------------------\n"
+"    * предложение цен -> заказ продаж -> выставление счёта\n"
+"\n"
+"Способы выставления счёта:\n"
+"------------------\n"
+"    * счёт по заказу (до или после перевозки)\n"
+"    * счёт по доставке\n"
+"    * счёт по табелям\n"
+"    * авансовый счёт\n"
+"\n"
+"Предпочтения партнёров:\n"
+"---------------------\n"
+"    * перевозка\n"
+"    * выставление счёта\n"
+"    * инкотерм\n"
+"\n"
+"Остатки ТМЦ и цены\n"
+"--------------------------\n"
+"\n"
+"Способы доставки:\n"
+"-----------------\n"
+"    * всё сразу\n"
+"    * партиями\n"
+"    * стоимость доставки\n"
+"\n"
+"Панель руководителя продаж, которая включает:\n"
+"------------------------------------------\n"
+"    * заявки\n"
+"    * продажи по месяцу\n"
+"    * график продаж по продавцу за последние 90 дней\n"
+"    * график покупок по покупателю за последние 90 дней\n"
+"    * график продаж по категории ТМЦ за последние 90 дней\n"
+"    "
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -3474,6 +3840,20 @@ msgid ""
 "module 'share'.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль определяет 'порталы' для подстройки доступа к базам данных "
+"OpenERP\n"
+"внешних пользователей.\n"
+"\n"
+"Портал определяет подстроечное меню пользователя и прав доступа для группы "
+"пользователей\n"
+"(она связана с этим порталом).  Он также связывает группы пользователей с\n"
+"пользователями портала (добавление группы в портал автоматически добавляет "
+"её в пользователей\n"
+"портала и т.д.).  Эта возможность очень удобна при использовании в "
+"комбинации с\n"
+"модулем 'Совместного доступа'.\n"
+"    "
 
 #. module: base
 #: selection:res.request,priority:0
@@ -3531,7 +3911,7 @@ msgstr "Формат разделителя"
 #. module: base
 #: constraint:res.partner.bank:0
 msgid "The RIB and/or IBAN is not valid"
-msgstr ""
+msgstr "RIB и/или IBAN не верен"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_report_webkit
@@ -3584,6 +3964,16 @@ msgid ""
 "* a basic mechanism to easily plug various automated payment.\n"
 "    "
 msgstr ""
+"\n"
+"Модуль управления оплатой по счётам.\n"
+"=================================\n"
+"\n"
+"Этот модуль предоставляет:\n"
+"----------------------\n"
+"* более эффективный путь для управления оплатой счёта.\n"
+"* основной механизм для легкого подключения различных автоматизированных "
+"платежей.\n"
+"    "
 
 #. module: base
 #: view:ir.rule:0
@@ -3610,6 +4000,23 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль предоставляет некоторые возможности для улучшения  макета "
+"счетов.\n"
+"=========================================================================\n"
+"\n"
+"Он даёт вам возможность:\n"
+"--------------------------------\n"
+"    * упорядочения всех позиций счёта\n"
+"    * добавки заголовков, строк комментариев, строк подитога\n"
+"    * черчения горизонтальных линий и помещения разрывов страниц\n"
+"\n"
+"Более того, есть параметр, который позволяет вам печатать все выбранные "
+"счета с заданным специальным сообщением внизу их. Эта возможность может быть "
+"очень полезна для печати ваших счетов с новогодними пожеланиями, особыми "
+"точными условиями.\n"
+"\n"
+"    "
 
 #. module: base
 #: constraint:res.partner:0
@@ -3665,6 +4072,9 @@ msgid ""
 "        OpenERP Web chat module.\n"
 "        "
 msgstr ""
+"\n"
+"        Модуль веб чата OpenERP.\n"
+"        "
 
 #. module: base
 #: field:res.partner.address,title:0
@@ -3730,7 +4140,7 @@ msgstr ""
 #. module: base
 #: selection:ir.sequence,implementation:0
 msgid "Standard"
-msgstr ""
+msgstr "Стандарт"
 
 #. module: base
 #: model:ir.model,name:base.model_maintenance_contract
@@ -3759,6 +4169,8 @@ msgid ""
 "Invalid value for reference field \"%s.%s\" (last part must be a non-zero "
 "integer): \"%s\""
 msgstr ""
+"Неверное значение для поля ссылки \"%s.%s\" (последняя часть должна быть не "
+"нулевым целым): \"%s\""
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_human_resources
@@ -3803,6 +4215,14 @@ msgid ""
 "templates to target objects.\n"
 "    "
 msgstr ""
+"\n"
+"    * Многоязычная поддержка для планов счетов, налогов, кодов налога , "
+"журналов, бухгалтерских шаблонов,\n"
+"        аналитических планов счетов и аналитических журналов.\n"
+"    * Изменения мастера установки\n"
+"        - Скопируйте переводы для планов счетов, налога, кода налога и "
+"отчётной позиции из шаблонов в целевые объекты.\n"
+"    "
 
 #. module: base
 #: view:ir.actions.todo:0
@@ -3847,6 +4267,9 @@ msgid ""
 "        OpenERP Web mobile.\n"
 "        "
 msgstr ""
+"\n"
+"        Мобильная OpenERP веб.\n"
+"        "
 
 #. module: base
 #: view:res.lang:0
@@ -3865,7 +4288,7 @@ msgstr "GPL версии 2 или более поздней"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "Г-н"
 
 #. module: base
@@ -3977,7 +4400,7 @@ msgstr "Категории"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_mobile
 msgid "OpenERP Web mobile"
-msgstr ""
+msgstr "Мобильная OpenERP веб."
 
 #. module: base
 #: view:base.language.import:0
@@ -4004,6 +4427,18 @@ msgid ""
 "user rights to Demo user.\n"
 "    "
 msgstr ""
+"\n"
+"Права бухгалтерского доступа.\n"
+"=========================\n"
+"\n"
+"Этот модуль даёт пользователю администратору доступ ко всем бухгалтерским "
+"возможностям\n"
+"типа записей журналов и планов счетов.\\n\n"
+"\n"
+"Он назначает права доступа руководителя и пользователя администратору, и "
+"только\n"
+"права пользователя демо пользователю.\n"
+"    "
 
 #. module: base
 #: selection:ir.module.module,state:0
@@ -4029,12 +4464,12 @@ msgstr "Лихтенштейн"
 #. module: base
 #: model:ir.module.module,description:base.module_web_rpc
 msgid "Openerp web web"
-msgstr ""
+msgstr "OpenERP Веб веб"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_issue_sheet
 msgid "Timesheet on Issues"
-msgstr ""
+msgstr "Табель по проблемам"
 
 #. module: base
 #: model:res.partner.title,name:base.res_partner_title_ltd
@@ -4055,6 +4490,16 @@ msgid ""
 "    * Cheque Register\n"
 "    "
 msgstr ""
+"\n"
+"Модуль счёта ваучера включает все основные требования записей ваучера для "
+"банка, наличных, продаж, закупки, расхода, контра и т.п.\n"
+"============================================================================="
+"=======================================================\n"
+"\n"
+"    * Запись ваучера\n"
+"    * Расписка ваучера\n"
+"    * Регистр чека\n"
+"    "
 
 #. module: base
 #: field:res.partner,ean13:0
@@ -4121,6 +4566,37 @@ msgid ""
 "\n"
 "\n"
 msgstr ""
+"\n"
+"Это улучшение мульти-валютной поддержки OpenERP в аналитическом учёте, общем "
+"для мульти-компании.\n"
+"\n"
+"Этот модуль основан на работе сделанной во всех c2c_multicost* доступных на "
+"стабильной версии v5.0 и\n"
+"позволяет вам разделять счёт аналитики между компаниями (даже если валюта "
+"различается в каждой из них).\n"
+"\n"
+"Что здесь было сделано:\n"
+"\n"
+"  * приспособлен владелец позиции аналитики (= для компании, которая владеет "
+"общим учётом связанным с позицией аналитики)\\n\n"
+"  * добавлена мульти-валютность по позициям аналитики (подобно финансовому "
+"учёту)\n"
+"  * коррекция всех индикаторов \\\"затраты\\\" в счёт аналитики для их "
+"основы на подходящей валюте (компании владельца)\n"
+"  * по умолчанию, ничего не меняется для представления одиночной компании.\n"
+"\n"
+"В результате, теперь мы можем реально разделять один и тот же счёт аналитики "
+"между компаниями, которые не имеют одну и ту же \n"
+"валюту. Такие настройки становятся правильными, наслаждайтесь!\n"
+"\n"
+"- Компания A : EUR\n"
+"- Компания B : CHF\n"
+"\n"
+"- Счёт аналитики A : USD, принадлежит компании A\n"
+"    - Счёт аналитики B : CHF, принадлежит компании A\n"
+"    - Счёт аналитики C : EUR, принадлежит компании B\n"
+"\n"
+"\n"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_l10n_it
@@ -4169,6 +4645,15 @@ msgid ""
 "automatically new claims based on incoming emails.\n"
 "    "
 msgstr ""
+"\n"
+"Эти модули позволяют вам отследить претензии и жалобы ваших "
+"покупателей/поставщиков.\n"
+"============================================================================="
+"===\n"
+"\n"
+"Они полностью интегрированы со шлюзом e-mail, так что вы можете создать\n"
+"автоматически новые претензии основанные на приходящих e-mail.\n"
+"    "
 
 #. module: base
 #: selection:workflow.activity,join_mode:0
@@ -4251,6 +4736,24 @@ msgid ""
 "anonymization process to recover your previous data.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет вам анонимизировать базу данных.\n"
+"===============================================\n"
+"\n"
+"Этот модуль позволяет вам для данной базы данных секретно хранить ваши "
+"данные.\n"
+"Этот процесс полезен, если вы хотите использовать процесс переноса и "
+"защитить\n"
+"секретные данные, ваши собственные или вашего покупателя. Принцип в том, что "
+"вы запускаете\n"
+"инструмент анонимизации, который скрывает ваши секретные данные (они "
+"замещаются\n"
+"символами ‘XXX’). Затем вы можете отправить анонимизированную базу данных в "
+"команду\n"
+"переноса. После обратного получения вашей перенесённой базы данных, вы "
+"восстанавливаете её и\n"
+"реверсируете процесс анонимизации для восстановления ваших прежних данных.\n"
+"    "
 
 #. module: base
 #: help:publisher_warranty.contract,name:0
@@ -4259,6 +4762,8 @@ msgid ""
 "Your OpenERP Publisher's Warranty Contract unique key, also called serial "
 "number."
 msgstr ""
+"Ваш уникальный ключ договора гарантии издателя OpenERP, называемый также "
+"серийным номером."
 
 #. module: base
 #: model:ir.module.module,description:base.module_base_setup
@@ -4273,6 +4778,14 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль помогает настроить систему при установке новой базы данных.\n"
+"============================================================================="
+"===\n"
+"\n"
+"Показывает вам список приложений для установки.\n"
+"\n"
+"    "
 
 #. module: base
 #: field:ir.actions.report.xml,report_sxw_content:0
@@ -4313,6 +4826,20 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Модуль закупки для создания заказа закупки для приобретения товаров у "
+"поставщика.\n"
+"============================================================================="
+"============\n"
+"\n"
+"Создаётся счёт поставщика для отдельного заказа закупки.\n"
+"\n"
+"Панель для управления закупкой включающая:\n"
+"    * текущие заказы закупки\n"
+"    * черновые заказы закупки\n"
+"    * график для количества и суммы по месяцу\n"
+"\n"
+"    "
 
 #. module: base
 #: view:ir.model.fields:0
@@ -4357,6 +4884,9 @@ msgid ""
 "When no specific mail server is requested for a mail, the highest priority "
 "one is used. Default priority is 10 (smaller number = higher priority)"
 msgstr ""
+"Когда для почты не запрошен конкретный почтовый сервер, используется тот у "
+"которого высший приоритет. Приоритет по умолчанию - 10 (меньше номер = выше "
+"приоритет)"
 
 #. module: base
 #: model:ir.module.module,description:base.module_crm_partner_assign
@@ -4375,6 +4905,20 @@ msgid ""
 "You can also use the geolocalization without using the GPS coordinates.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль используемый OpenERP SA для перенаправления покупателей к своим "
+"партнёрам, основан на гео-позиционировании.\n"
+"============================================================================="
+"=========================\\n\n"
+"\n"
+"Вы можете гео-позиционировать ваши предложения используя этот модуль.\n"
+"\n"
+"Используйте гео-позиционирование когда делаете предложения партнёрам.\n"
+"Определите координаты GPS согласно адреса партнёра.\n"
+"Может быть назначен наиболее подходящий партнёр.\n"
+"Вы также можете использовать гео-позиционирование без использования "
+"координат GPS.\n"
+"    "
 
 #. module: base
 #: help:ir.actions.act_window,help:0
@@ -4434,7 +4978,7 @@ msgstr "Суринам"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_timesheet
 msgid "Bill Time on Tasks"
-msgstr ""
+msgstr "Подсчёт времени по задачам"
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_marketing
@@ -4471,7 +5015,7 @@ msgstr "Персонализированая архитектура"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_gantt
 msgid "web Gantt"
-msgstr ""
+msgstr "веб Гант"
 
 #. module: base
 #: field:ir.module.module,license:0
@@ -4481,7 +5025,7 @@ msgstr "Лицензия"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_graph
 msgid "web Graph"
-msgstr ""
+msgstr "веб график"
 
 #. module: base
 #: field:ir.attachment,url:0
@@ -4528,6 +5072,18 @@ msgid ""
 "above. Specify the interval information and partner to be invoice.\n"
 "    "
 msgstr ""
+"\n"
+"Создание повторяющихся документов.\n"
+"===========================\n"
+"\n"
+"Этот модуль позволяет создавать новые документы и добавлять подписки на эти "
+"документы.\n"
+"\n"
+"Например, для периодического автоматического создания счёта:\n"
+"    * Определите тип документа основанный на объекте счёта\n"
+"    * Определите подписку, где исходный документ - выше определённый "
+"документ. Укажите интервал и партнёра для выставления счёта.\n"
+"    "
 
 #. module: base
 #: field:ir.actions.server,srcmodel_id:0
@@ -4696,6 +5252,9 @@ msgid ""
 "the same values as those available in the condition field, e.g. `Dear [[ "
 "object.partner_id.name ]]`"
 msgstr ""
+"Содержимое e-mail, может включать выражения заключённые в двойные квадратные "
+"скобки, основанные на тех же самых значениях, какие доступны в поле условия, "
+"например, `Многоуважаемый [[ object.partner_id.name ]]`"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_workflow_form
@@ -4716,11 +5275,21 @@ msgid ""
 "modules like share, lunch, pad, idea, survey and subscription.\n"
 "    "
 msgstr ""
+"\n"
+"Установщик скрытых дополнений типа 2-го завтрака, опроса, идеи, совместного "
+"использования и т.п.\n"
+"===============================================================\n"
+"\n"
+"Делает настройку скрытых дополнений доступной, из которой вы можете "
+"установить\n"
+"модули типа совместного использования, второго завтрака, идеи, опроса и "
+"подписки.\n"
+"    "
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_specific_industry_applications
 msgid "Specific Industry Applications"
-msgstr ""
+msgstr "Приложения для определенной индустрии"
 
 #. module: base
 #: model:res.partner.category,name:base.res_partner_category_retailers0
@@ -4730,7 +5299,7 @@ msgstr "Розничные продавцы"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_uservoice
 msgid "Receive User Feedback"
-msgstr ""
+msgstr "Получение отклика пользователя"
 
 #. module: base
 #: model:res.country,name:base.ls
@@ -4740,7 +5309,7 @@ msgstr "Лесото"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_vat
 msgid "VAT Number Validation"
-msgstr ""
+msgstr "Подтверждение номера НДС"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_crm_partner_assign
@@ -4761,7 +5330,7 @@ msgstr "Перевод терминов"
 #. module: base
 #: view:res.partner.event:0
 msgid "Event"
-msgstr "Событие"
+msgstr "Мероприятие"
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_custom_reports
@@ -4822,6 +5391,31 @@ msgid ""
 "Also implements IETF RFC 5785 for services discovery on a http server,\n"
 "which needs explicit configuration in openerp-server.conf, too.\n"
 msgstr ""
+"\n"
+"С этим модулем активируется WebDAV сервер для документов.\n"
+"===============================================================\n"
+"\n"
+"Вы можете использовать любой совместимый браузер для удалённого просмотра "
+"вложений OpenObject.\n"
+"\n"
+"После установки, сервер WebDAV может управляться через раздел [webdav] в "
+"настройках сервера.\n"
+"Параметр настройки сервера:\n"
+"\n"
+"    [webdav]\n"
+"    ; enable = True ; обслуживать webdav через http(s) серверы\n"
+"    ; vdir = webdav ; каталог, который будет обслуживаться webdav, по\n"
+"    ; умолчанию это значение означает, что этот webdav будет\n"
+"    ; на \\\"http://localhost:8069/webdav/\n"
+"    ; verbose = True ; включает подробные сообщения webdav\n"
+"    ; debug = True ; включает отладочные сообщения webdav\n"
+"    ; Поскольку сообщения маршрутизируются в журналирование python-а с\n"
+"    ; уровнями \\\"debug\\\" и \\\"debug_rpc\\\" соответственно, вы можете "
+"оставить\n"
+"    ; эти параметры включёнными\n"
+"\n"
+"Также реализован IETF RFC 5785 для открытия сервисов на сервере http,\n"
+"которым нужна также определённая настройка в openerp-server.conf.\n"
 
 #. module: base
 #: model:res.country,name:base.sm
@@ -4844,9 +5438,22 @@ msgid ""
 "of the survey\n"
 "    "
 msgstr ""
-
-#. module: base
-#: model:res.country,name:base.bm
+"\n"
+"Этот модуль используется для опроса.\n"
+"==================================\n"
+"\n"
+"Он зависит от ответов или обзоров некоторых вопросов различных "
+"пользователей.\n"
+"Опрос может иметь много страниц. Каждая страница может содержать много "
+"вопросов и каждый вопрос может иметь много ответов.\n"
+"Различные пользователи могут дать различные ответы на вопрос и согласно "
+"этому сделан опрос.\n"
+"Партнёрам также отправляют письма с именем пользователя и паролем для "
+"приглашения опроса\n"
+"    "
+
+#. module: base
+#: model:res.country,name:base.bm
 msgid "Bermuda"
 msgstr "Бермуды"
 
@@ -4946,7 +5553,7 @@ msgstr "Веб-чат"
 #. module: base
 #: field:res.company,rml_footer2:0
 msgid "Bank Accounts Footer"
-msgstr ""
+msgstr "Нижний колонтитул банковских счетов"
 
 #. module: base
 #: model:res.country,name:base.mu
@@ -5013,6 +5620,14 @@ msgid ""
 "This new object will regroup and will allow you to easily keep track and "
 "order all your purchase orders.\n"
 msgstr ""
+"\n"
+"Этот модуль позволяет вам управлять вашими требованиями закупки.\n"
+"===========================================================\n"
+"\n"
+"Когда создан заказ закупки, вы получаете предложение для сохранения "
+"связанного требования.\n"
+"Этот новый объект перегруппирует и позволит вам легко отследить и "
+"упорядочить все ваши заказы закупок.\n"
 
 #. module: base
 #: model:res.country,name:base.hu
@@ -5104,6 +5719,16 @@ msgid ""
 "It adds sales name and sales Reference on production order.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль предусматривает возможность одновременной установки "
+"пользователем модулей производства и продаж.\n"
+"============================================================================="
+"=======\n"
+"\n"
+"Он обычно используется когда вы хотите отслеживать заказы\n"
+"производства созданные из заказа продаж.\n"
+"Он добавляет название продаж и ссылку на заказ продаж в заказ производства.\n"
+"    "
 
 #. module: base
 #: selection:res.request,state:0
@@ -5143,6 +5768,15 @@ msgid ""
 "revenue\n"
 "reports, etc."
 msgstr ""
+"Создавайте ваши счета из затрат, записей табеля...\n"
+"Модуль для создания счетов основанных на затратах (трудовые ресурсы, "
+"расходы...).\n"
+"============================================================================"
+"\n"
+"\n"
+"Вы можете определить прайс-листы в счёте аналитики, сделав некоторые "
+"теоретические отчёты о\n"
+"поступлениях и т.д."
 
 #. module: base
 #: field:ir.ui.menu,parent_id:0
@@ -5237,6 +5871,11 @@ msgid ""
 "    those assets. And it allows to create Move's of the depreciation lines.\n"
 "    "
 msgstr ""
+"Финансовое и бухгалтерское управление активами.\n"
+"    Этот модуль обслуживает активы компании или индивидуала. Он позволит "
+"отследить уценки происходящие по\n"
+"    этим активам. И он позволяет создать проводки по позициям уценки.\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.bv
@@ -5470,6 +6109,30 @@ msgid ""
 "        * Graph : Products to send in delay (date < = today)\n"
 "    "
 msgstr ""
+"\n"
+"Модуль управления инвентаризацией OpenERP может обслуживать несколько "
+"складов, множественные и структурированные расположения запасов.\n"
+"============================================================================="
+"=========================\n"
+"\n"
+"Благодаря управлению двойной записью, управление инвентаризацией мощное и "
+"гибкое:\n"
+"    * История перемещений и планирование,\n"
+"    * Различные способы инвентаризации (FIFO, LIFO, ...)\n"
+"    * Оценка запаса (стандартная или средняя цена, ...)\n"
+"    * Ясное представление с различиями инвентаризации\n"
+"    * Правила автоматического переупорядочивания (уровень запаса, JIT, ...)\n"
+"    * Поддержан штрих-код\n"
+"    * Быстрое обнаружение ошибок через систему двойной записи\n"
+"    * Отслеживаемость (восходящая/нисходящая, партии производства, серийный "
+"номер, ...)\n"
+"    * Панель для склада, которая включает:\n"
+"        * Проблемы снабжения\n"
+"        * Список входящих продуктов\n"
+"        * Список исходящих продуктов\n"
+"        * График: Задержка получения продуктов (дата < = сегодня)\n"
+"        * График : Задержка отправки продуктов (дата < = сегодня)\n"
+"    "
 
 #. module: base
 #: model:ir.model,name:base.model_ir_module_module
@@ -5544,6 +6207,29 @@ msgid ""
 "Budgets per Budgets.\n"
 "\n"
 msgstr ""
+"\n"
+"Этот модуль позволяет бухгалтерам управлять аналитическими и перекрёстными "
+"бюджетами.\n"
+"==========================================================================\n"
+"\n"
+"Как только главные бюджеты и бюджеты определены (в Бухгалтерия/Бюджеты/),\n"
+"руководители проекта могут установить плановую сумму по каждому счёту "
+"аналитики.\n"
+"\n"
+"Бухгалтер имеет возможность видеть общую плановую сумму для каждого\n"
+"бюджета и главного бюджета для убеждения в том, что плановый итог не\n"
+"больше/меньше чем он запланирован для этого бюджета/главного бюджета. "
+"Каждый\n"
+"список может также быть переключён в его графический вид.\n"
+"\n"
+"Доступны три отчёта:\n"
+"    1. Первый доступен из списка бюджетов. Он даёт развёртку для этих "
+"бюджетов счетов аналитики по главным бюджетам.\n"
+"    2. Второй - обобщение предыдущего,он даёт развёртку счетов аналитики "
+"только для выбранных бюджетов.\n"
+"    3. Последний доступен из плана счетов аналитики. Он даёт развёртку "
+"главных бюджетов по бюджетам для выбранных счетов аналитики.\n"
+"\n"
 
 #. module: base
 #: help:res.lang,iso_code:0
@@ -5654,6 +6340,82 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"    Модуль для импорта банковских выписок CODA.\n"
+"\n"
+"    Поддержаны простые файлы CODA в формате V2 Бельгийских банковских "
+"счетов.\n"
+"    - Поддержка CODA v1.\n"
+"    - Поддержка CODA v2.2.\n"
+"    - Поддержка иностранной валюты.\n"
+"    - Поддержка для всех типов записей данных (0, 1, 2, 3, 4, 8, 9).\n"
+"    - Разбор и журналирование всех кодов операций и соединений "
+"структурированного формата.\n"
+"    - Автоматическое назначение финансового журнала через параметры "
+"настройки CODA.\n"
+"    - Поддержка многих журналов по номеру банковского счёта.\n"
+"    - Поддержка многих выписок из различных банковских счетов в одном файле "
+"CODA.\n"
+"    - Поддержка 'только разбора' банковских счетов CODA (определённых как "
+"тип='инфо' в записях настройки банковского счёта CODA).\n"
+"    - Многоязычный разбор CODA, данные настройки разбора предусмотренные для "
+"EN, NL, FR.\n"
+"\n"
+"    Машиночитаемые файлы CODA разобраны и сохранены в человеко читаемом "
+"формате в банковских выписках CODA.\n"
+"    Также созданы банковские выписки содержащие под-набор информации CODA "
+"(только эти строки операции,\n"
+"    которые требуются для создания записей финансового учёта).\n"
+"    Банковская выписка CODA - объект 'только-чтения', следовательно "
+"остающееся надёжное представление исходного файла CODA,\n"
+"    тогда как банковская выписка получит изменение, как требуется учётом "
+"деловых процессов.\n"
+"\n"
+"    Банковские счета CODA настроенные как тип 'инфо' создадут только "
+"банковские выписки CODA.\n"
+"\n"
+"    Удаление одного объекта в обработке CODA приводит к удалению связанных "
+"объектов.\n"
+"    Удаление файла CODA содержащего многие банковские выписки также удалит "
+"эти связанные\n"
+"    выписки.\n"
+"\n"
+"    В обработке CODA реализована следующая логика сверки:\n"
+"    1) Номер банковского счёта компании выписки CODA сравнивается с полем "
+"номера банковского счёта\n"
+"       записей настройки банковского счёта CODA компании (в следствии чего "
+"банковские счета определённые в записях настройки с типом='инфо' "
+"игнорируются).\n"
+"       Если это случай операции 'внутреннего переноса' созданный с "
+"использованием поля 'Счёт внутреннего переноса' мастера импорта файла CODA.\n"
+"    2) В качестве второго шага  'Структурированной связи' сравнивается поле "
+"строки операции CODA с\n"
+"       полем ссылки входящих и исходящих счетов (поддержан: бельгийский тип "
+"структурированной связи).\n"
+"    3) Когда предыдущий шаг не нашёл совпадения, дубликат операции находится "
+"через\n"
+"       номер банковского счёта настроенного по записям покупателя и "
+"поставщика в OpenERP.\n"
+"    4) В случае неуспеха предыдущих шагов, операция создаётся при "
+"использовании поля 'Умалчиваемого счёта\n"
+"       для не распознанного перемещения' мастера импорта файла CODA в "
+"порядке разрешения будущей ручной обработки.\n"
+"\n"
+"    Вместо ручной подстройки созданных банковских выписок, вы можете также "
+"ре-импортировать CODA\n"
+"    после обновления базы данных OpenERP по информации, которая была "
+"пропущена, позволяющей автоматическую сверку.\n"
+"\n"
+"    Замечание по поддержке CODA V1:\n"
+"    В некоторых случаях код операции, категория операции или код "
+"структурированной связи получены из нового или более ясного описания в CODA "
+"V2.\n"
+"    Описание предусмотренное таблицами настройки CODA основано на "
+"спецификациях CODA V2.2.\n"
+"    Если требуется, вы можете вручную подстроить описания через меню "
+"настройки CODA.\n"
+"\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.et
@@ -5702,10 +6464,47 @@ msgid ""
 "of distribution models.\n"
 "        "
 msgstr ""
+"\n"
+"Этот модуль позволяет использовать несколько аналитических планов согласно "
+"общему журналу.\n"
+"============================================================================="
+"======\n"
+"\n"
+"Здесь создаются несколько позиций аналитики, когда счёт или проводки\n"
+"подтверждены.\n"
+"\n"
+"Например, вы можете определить следующую аналитическую структуру:\n"
+"  Проекты\n"
+"      Проект 1\n"
+"          Подпроект 1.1\n"
+"          Подпроект 1.2\n"
+"\n"
+"      Проект 2\n"
+"  Продавец\n"
+"      Эрик\n"
+"      Фабиен\n"
+"\n"
+"Здесь есть два плана счетов: проекты и продавец. Позиция счёта должна\n"
+"делать аналитические записи в 2 плана: Подпроект 1.1 и\n"
+"Фабиен. Сумма также должна быть разбита. Следующий пример - для\n"
+"счёта который затрагивает два подпроекта и назначен одному продавцу:\n"
+"\n"
+"План1:\n"
+"    Подпроект 1.1 : 50%\n"
+"    Подпроект 1.2 : 50%\n"
+"План2:\n"
+"    Эрик: 100%\n"
+"\n"
+"Как только эта строка счёта будет подтверждена, она создаст 3 строки "
+"аналитики,\n"
+"для одной проводки по счёту.\n"
+"Аналитический план проверит минимум и максимум процента во время создания\n"
+"моделей разнесения.\n"
+"        "
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Код области из трёх букв.\n"
 
 #. module: base
@@ -5721,7 +6520,7 @@ msgstr "Тест"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_kanban
 msgid "Base Kanban"
-msgstr ""
+msgstr "База канбан"
 
 #. module: base
 #: view:ir.actions.act_window:0
@@ -5757,6 +6556,15 @@ msgid ""
 "You can also view the report of account analytic summary\n"
 "user-wise as well as month wise.\n"
 msgstr ""
+"\n"
+"Это модуль для изменения вида счёта аналитики для показа важных данных "
+"руководителю проекта сервисных компаний.\n"
+"============================================================================="
+"======================================\n"
+"\n"
+"Добавляет меню для показа относящейся к каждому руководителю информации.\n"
+"Вы также можете видеть суммарный отчёт по счёту аналитики\n"
+"как по пользователю, так и по месяцу.\n"
 
 #. module: base
 #: model:ir.model,name:base.model_base_language_install
@@ -5828,7 +6636,7 @@ msgstr "Настоящее имя пользователя, использует
 #: model:ir.ui.menu,name:base.menu_values_form_defaults
 #: view:ir.values:0
 msgid "User-defined Defaults"
-msgstr ""
+msgstr "Значения по умолчанию, определённые пользователем"
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_usability
@@ -5845,7 +6653,7 @@ msgstr "Значение домена"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_module_quality
 msgid "Analyse Module Quality"
-msgstr ""
+msgstr "Анализ качества модуля"
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -5974,6 +6782,19 @@ msgid ""
 "    * Integrated with Holiday Management\n"
 "    "
 msgstr ""
+"\n"
+"Общая система выплат.\n"
+"=======================\n"
+"\n"
+"    * Подробности о сотруднике\n"
+"    * Договора сотрудника\n"
+"    * Договор на основе паспорта\n"
+"    * Присутствия/вычеты\n"
+"    * Позволяет настроить основную/премиальную/чистую зарплату\n"
+"    * Расчётный листок сотрудника\n"
+"    * Регистр ежемесячной выплаты\n"
+"    * Интегрирован с управлением выходными\n"
+"    "
 
 #. module: base
 #: selection:ir.cron,interval_type:0
@@ -6007,7 +6828,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_diagram
 msgid "OpenERP Web Diagram"
-msgstr ""
+msgstr "Веб диаграммы Openerp"
 
 #. module: base
 #: view:res.partner.bank:0
@@ -6046,11 +6867,19 @@ msgid ""
 "The user can also publish notes.\n"
 "    "
 msgstr ""
+"\n"
+"Позволяет пользователю создать свой вариант панели.\n"
+"========================================\n"
+"\n"
+"Этот модуль также создаёт административную панель.\n"
+"\n"
+"Пользователь может также публиковать примечания.\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_scrum
 msgid "Methodology: SCRUM"
-msgstr ""
+msgstr "Методология: SCRUM"
 
 #. module: base
 #: view:ir.attachment:0
@@ -6135,6 +6964,37 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Общая подсистема электронной почты с хранением сообщений и очередей.\n"
+"==========================================================\n"
+"\n"
+"Эта подсистема e-mail не предназначена для использования как автономное\n"
+"приложение, но предусматривает унифицированное представление e-mail, "
+"которое\n"
+"могут использовать все другие приложения.\n"
+"\n"
+"Основными возможностями являются:\n"
+"\n"
+"    * Связь с глобальными серверами исходящей почты настроенными в \n"
+"      меню администрирования для доставки исходящей почты\n"
+"    * Предусматривает API для отправки сообщений и их архивирования,\n"
+"      сгруппированных по переговорам\n"
+"    * Любой документ OpenERP может действовать как тема общения, "
+"предусматривающая\n"
+"      включения необходимой поддержки для обработки входящих писем\n"
+"      (см. класс ``mail.thread`` для подробностей). \n"
+"    * Включает механизм очерёдности с автоматически настраиваемой\n"
+"      обработкой на основе планировщика\n"
+"    * Включает общий помощник составления e-mail, который может обратиться\n"
+"      в помощника массовой рассылки и способен интерпретировать\n"
+"      простые *выражения подстановки*, которые будут замещены\n"
+"      динамическими данными, при отправлении каждого письма.\n"
+"      Этот общий помощник легко расширить для предоставления расширенных\n"
+"      возможностей (см., например, ``email_template``, который добавляет e-"
+"mail \n"
+"      шаблоны к этому помощнику)\n"
+"\n"
+"    "
 
 #. module: base
 #: view:res.lang:0
@@ -6170,6 +7030,25 @@ msgid ""
 "an other object.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет вам управлять вашими контактами\n"
+"==============================================\n"
+"\n"
+"Он позволяет вам определить:\n"
+"    * контакты не связанные с партнёром,\n"
+"    * контакты работающие по нескольким адресам (возможно для разных "
+"партнёров),\n"
+"    * контакты с возможностью различных функций для каждого из их рабочих "
+"адресов\n"
+"\n"
+"Он также добавляет новые пункты меню расположенного в\n"
+"    Закупки/Адресная книга/Контакты\n"
+"    Продажи/Адресная книга/Контакты\n"
+"\n"
+"Примите во внимание, что этот модуль преобразует существующие адреса в "
+"\"адреса + контакты\". Это значит, что некоторые поля адресов будут опущены "
+"(типа названия контакта) так, как они определены в другом объекте.\n"
+"    "
 
 #. module: base
 #: model:ir.actions.act_window,name:base.act_res_partner_event
@@ -6178,7 +7057,7 @@ msgstr ""
 #: field:res.partner.event,name:0
 #: model:res.widget,title:base.events_widget
 msgid "Events"
-msgstr "События"
+msgstr "Мероприятия"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_actions_url
@@ -6197,6 +7076,8 @@ msgid ""
 "- Action: an action attached to one slot of the given model\n"
 "- Default: a default value for a model field"
 msgstr ""
+"- Действие: действие прикреплённое к одному слоту данной модели\n"
+"- Умолчание: значение по умолчанию для поля модели"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_partner_addess_tree
@@ -6228,7 +7109,7 @@ msgstr "vsep"
 #. module: base
 #: model:res.widget,title:base.openerp_favorites_twitter_widget
 msgid "OpenERP Tweets"
-msgstr ""
+msgstr "Твиты OpenERP"
 
 #. module: base
 #: code:addons/base/module/module.py:392
@@ -6305,6 +7186,8 @@ msgid ""
 "An arbitrary string, interpreted by the client according to its own needs "
 "and wishes. There is no central tag repository across clients."
 msgstr ""
+"Произвольная строка интерпретируемая клиентом соответственно его собсвенным "
+"нуждам и желаниям. Нет централизованного хранилища тегов по клиентам."
 
 #. module: base
 #: sql_constraint:ir.rule:0
@@ -6329,6 +7212,14 @@ msgid ""
 "using the\n"
 "FTP client.\n"
 msgstr ""
+"\n"
+"Это поддержка интерфейса FTP к системе управления документами.\n"
+"================================================================\n"
+"\n"
+"С этим модулем у вас будет возможность доступа к документам не только через "
+"OpenERP,\n"
+"но вы сможете также подключиться к ним через файловую систему, используя\n"
+"FTP клиент.\n"
 
 #. module: base
 #: field:ir.model.fields,size:0
@@ -6354,11 +7245,26 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет вам определить какова функция по умолчанию "
+"определённого пользователя на данной учётной записи.\n"
+"============================================================================="
+"=======================\n"
+"\n"
+"Это очень полезно, когда пользователь вводит данные своего табеля: значения "
+"извлечены и поля авто-заполнены. Но возможность смены этих значений остаётся "
+"доступной.\n"
+"\n"
+"Очевидно, что если нет записанных данных для текущей учётной записи, "
+"значение по умолчанию дано как обычные данные работника, так что этот модуль "
+"отлично совместим со старыми настройками.\n"
+"\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_audittrail
 msgid "Audit Trail"
-msgstr ""
+msgstr "Проведение аудита"
 
 #. module: base
 #: model:res.country,name:base.sd
@@ -6371,7 +7277,7 @@ msgstr "Судан"
 #: field:res.currency.rate,currency_rate_type_id:0
 #: view:res.currency.rate.type:0
 msgid "Currency Rate Type"
-msgstr ""
+msgstr "Тип курса валюты"
 
 #. module: base
 #: model:res.country,name:base.fm
@@ -6412,12 +7318,12 @@ msgstr "Израиль"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_l10n_syscohada
 msgid "OHADA - Accounting"
-msgstr ""
+msgstr "OHADA - Бухгалтерия"
 
 #. module: base
 #: help:res.bank,bic:0
 msgid "Sometimes called BIC or Swift."
-msgstr ""
+msgstr "Иногда называемый БИК или Swift."
 
 #. module: base
 #: model:ir.module.module,description:base.module_l10n_mx
@@ -6575,7 +7481,7 @@ msgstr "Отметьте, если контрагент является сот
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_crm_profiling
 msgid "Customer Profiling"
-msgstr ""
+msgstr "Профилирование покупателя"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_issue
@@ -6611,6 +7517,8 @@ msgid ""
 "Please check that all your lines have %d columns.Stopped around line %d "
 "having %d columns."
 msgstr ""
+"Проверьте, пожалуйста, что все ваши строки имеют %d колонок. Остановлено на "
+"строке %d имеющей %d колонок."
 
 #. module: base
 #: field:base.language.export,advice:0
@@ -6656,7 +7564,7 @@ msgstr ""
 #. module: base
 #: selection:res.currency,position:0
 msgid "After Amount"
-msgstr ""
+msgstr "Сумма после налогов"
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -6704,7 +7612,7 @@ msgstr "Исходный термин"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr_timesheet_sheet
 msgid "Timesheets Validation"
-msgstr ""
+msgstr "Подтверждение табелей"
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_main_pm
@@ -6750,7 +7658,7 @@ msgstr "Аудит"
 #. module: base
 #: help:ir.values,company_id:0
 msgid "If set, action binding only applies for this company"
-msgstr ""
+msgstr "Если задано, действие применяется только для этой компании"
 
 #. module: base
 #: model:res.country,name:base.lc
@@ -6816,7 +7724,7 @@ msgstr "Изменить"
 #. module: base
 #: field:ir.actions.client,params:0
 msgid "Supplementary arguments"
-msgstr ""
+msgstr "Дополнительные аргументы"
 
 #. module: base
 #: field:res.users,view:0
@@ -6878,6 +7786,15 @@ msgid ""
 "that have no counterpart in the general financial accounts.\n"
 "    "
 msgstr ""
+"\n"
+"Модуль для определения объекта аналитического учёта.\n"
+"===============================================\n"
+"\n"
+"В OpenERP счета аналитики связаны с общим учётом, но трактуются\n"
+"полностью независимо. Так вы можете ввести различные аналитические "
+"операции,\n"
+"которые не отражаются в общих финансовых счетах.\n"
+"    "
 
 #. module: base
 #: field:res.users,signature:0
@@ -6968,6 +7885,8 @@ msgid ""
 "Action bound to this entry - helper field for binding an action, will "
 "automatically set the correct reference"
 msgstr ""
+"Действие связанное с этой записью - вспомогательное поле для привязки "
+"действия, автоматически установит правильную ссылку"
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_project_long_term
@@ -7074,6 +7993,17 @@ msgid ""
 "    * HR Jobs\n"
 "    "
 msgstr ""
+"\n"
+"\\n\n"
+"Модуль для управления трудовыми ресурсами.\n"
+"=====================================\n"
+"\n"
+"Вы можете управлять:\n"
+"    * Сотрудниками и иерархией: вы можете определить вашего сотрудника как "
+"пользователя и показать подчиненность\n"
+"    * ТР подразделения\n"
+"    * ТР должности\n"
+"    "
 
 #. module: base
 #: view:res.widget.wizard:0
@@ -7088,7 +8018,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_report_intrastat
 msgid "Intrastat Reporting"
-msgstr ""
+msgstr "Отчётность Intrastat"
 
 #. module: base
 #: code:addons/base/res/res_users.py:222
@@ -7165,7 +8095,7 @@ msgstr "Созданные меню"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_analytic_default
 msgid "Account Analytic Defaults"
-msgstr ""
+msgstr "Аналитический учёт - по умолчанию"
 
 #. module: base
 #: model:ir.module.module,description:base.module_hr_contract
@@ -7181,6 +8111,16 @@ msgid ""
 "You can assign several contracts per employee.\n"
 "    "
 msgstr ""
+"\n"
+"Добавляет всю информацию в форму сотрудника для управления договорами.\n"
+"=============================================================\n"
+"\n"
+"    * Семейное положение,\n"
+"    * Номер соцзащиты,\n"
+"    * Место рождения, дата рождения, ...\n"
+"\n"
+"Вы можете указать различные договора по одному сотруднику.\n"
+"    "
 
 #. module: base
 #: selection:ir.ui.view,type:0
@@ -7205,6 +8145,21 @@ msgid ""
 "crm modules.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль добавляет сокращение по одному или нескольким  предложениям в "
+"CRM.\n"
+"===========================================================================\n"
+"\n"
+"Это сокращение позволяет вам создать заказ продаж основанный на выбранном "
+"вопросе.\n"
+"Если открыты различные вопросы (список), он создаёт один заказ продажи по\n"
+"вопросу.\n"
+"Затем, вопрос закрывается и связывается с созданным заказом продаж.\n"
+"\n"
+"Мы предлагаем вам установить этот модуль, если вы установили модули продажи "
+"и\n"
+"CRM.\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.bi
@@ -7230,6 +8185,8 @@ msgstr "Испанский (MX) / Español (MX)"
 #, python-format
 msgid "Please verify your publisher warranty serial number and validity."
 msgstr ""
+"Проверьте, пожалуйста, ваш серийный номер гарантии издателя и его "
+"действительность."
 
 #. module: base
 #: view:res.log:0
@@ -7320,6 +8277,15 @@ msgid ""
 "\n"
 "     "
 msgstr ""
+"\n"
+"Позволяет вам добавить способы доставки в заказы продаж и комплектование.\n"
+"==============================================================\n"
+"\n"
+"Вы можете определить для цен вашу собственную перевозку и сетки доставки.\n"
+"При создании счетов из комплектования, OpenERP способен добавить и "
+"подсчитать стоимость перевозки.\n"
+"\n"
+"     "
 
 #. module: base
 #: view:workflow.workitem:0
@@ -7360,6 +8326,23 @@ msgid ""
 "Secondly, price differences between actual purchase price and fixed product "
 "standard price are booked on a separate account"
 msgstr ""
+"\n"
+"Этот модуль поддерживает англо-саксонскую бухгалтерскую методологию путём "
+"смены бухгалтерской логики складских операций.\n"
+"============================================================================="
+"========================================\n"
+"\n"
+"Различие бухгалтерий между англо-саксонскими странами\n"
+"и рейнскими, или также называемыми континентальными странами, заключается в "
+"моменте взятия цены поставленных товаров против цены продаж.\n"
+"Англо-саксонская бухгалтерия берёт цену когда создан счёт продаж, "
+"континентальная бухгалтерия будет брать цену в момент доставки товаров.\n"
+"Этот модуль добавит данную функциональность, используя промежуточный счёт "
+"для сохранения значения поставленных товаров, и запишет дубликат\n"
+"этого промежуточного счёта, когда создан счёт для переноса этой суммы на "
+"дебетовый или кредитовый счёт.\n"
+"Во вторых, разница цены между ценой действительной закупки и фиксированной "
+"стандартной ценой продукта заносится на отдельный счёт"
 
 #. module: base
 #: field:res.partner,title:0
@@ -7406,6 +8389,12 @@ msgid ""
 "Invite OpenERP user feedback, powered by uservoice.\n"
 "    "
 msgstr ""
+"\n"
+"Добавляет кнопку \"Отзыв\" в заголовок.\n"
+"==============================\n"
+"\n"
+"Предлагает отзыв пользователя OpenERP, через uservoice.\n"
+"    "
 
 #. module: base
 #: field:res.company,rml_header2:0
@@ -7473,11 +8462,18 @@ msgid ""
 "that exceeds minimum amount set by configuration wizard.\n"
 "    "
 msgstr ""
+"\n"
+"Двойное подтверждение для закупок превысивших минимум суммы.\n"
+"=========================================================\n"
+"\n"
+"Этот модуль изменяет процесс закупки в порядке подтверждения закупок,\n"
+"которые превышают минимум суммы заданный мастером настройки.\n"
+"    "
 
 #. module: base
 #: field:res.currency,rounding:0
 msgid "Rounding Factor"
-msgstr ""
+msgstr "Коэффициент округления"
 
 #. module: base
 #: model:res.country,name:base.ca
@@ -7496,6 +8492,9 @@ msgid ""
 "Allow you to define your own currency rate types, like 'Average' or 'Year to "
 "Date'. Leave empty if you simply want to use the normal 'spot' rate type"
 msgstr ""
+"Позволяет вам определить ваши собственные курсы валют, типа 'Средний' или "
+"'Год до даты'. Оставьте пустым, если вы просто хотите использовать обычный "
+"тип курса 'текущий'"
 
 #. module: base
 #: selection:ir.module.module.dependency,state:0
@@ -7557,6 +8556,13 @@ msgid ""
 "all the tasks will change accordingly.\n"
 "    "
 msgstr ""
+"\n"
+"Изменяет даты соответственно смене конечной даты в проекте.\n"
+"======================================================\n"
+"\n"
+"Если конечная дата проекта изменена, то дата конечного срока и дата начала "
+"будут соответственно изменены для всех задач.\n"
+"    "
 
 #. module: base
 #: help:res.users,view:0
@@ -7693,6 +8699,93 @@ msgid ""
 "from Gate A\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль дополняет приложение склада эффективной реализацией нисходящих и "
+"восходящих потоков инвентаризации.\n"
+"============================================================================="
+"===============================\n"
+"\n"
+"Обычно он используется для:\n"
+"    * Управления цепочками изготовления товаров\n"
+"    * Управления местами хранения по умолчанию для товара\n"
+"    * Определения маршрутов внутри вашего склада согласно деловым "
+"потребностям, таким как:\n"
+"       - Контроль качества\n"
+"       - После продажные услуги\n"
+"       - Возвраты поставщику\n"
+"\n"
+"    * Помогает управлять арендой, создавая автоматические перемещения "
+"возврата для арендованных товаров\n"
+"\n"
+"После установки этого модуля появляется новая вкладка в форме товара, где вы "
+"можете добавить\n"
+"спецификации нисходящего и восходящего потока. \n"
+"Демонстрационные данные товара ЦП1:\n"
+"\n"
+"Нисходящие потоки\n"
+"----------\n"
+"Нисходящие потоки применимы, когда прибытие определённых товаров в данное "
+"место хранения должно всегда\n"
+"сопровождаться соответствующим перемещением в другое место хранения, не "
+"обязательно после определённой задержки.\n"
+"Исходное приложение склада уже поддерживает такие  спецификации нисходящего "
+"потока по\n"
+"самим местам хранения, но это не может быть уточнено по товару.\n"
+"\n"
+"Спецификация нисходящего потока указывает какие места хранения связаны друг "
+"с другом и с\n"
+"какими параметрами. Как только данное количество товаров перемещено в "
+"исходное место хранения,\n"
+"связанное перемещение предусмотрено автоматически для набора параметров по "
+"спецификации потока\n"
+"(место хранения назначения, задержка, тип перемещения, журнал и т.д.) Новое "
+"перемещение может быть\n"
+"произведено автоматически, или требует ручное подтверждение в зависимости от "
+"параметров.\n"
+"\n"
+"Восходящие потоки\n"
+"----------\n"
+"Восходящие потоки несколько отличны от нисходящих потоков, в том, что они "
+"относятся не к\n"
+"обработке перемещений товара, а скорее к обработке заказов снабжения.\n"
+"Подниматься вверх будет потребность, а не товар.\n"
+"Классический пример восходящего потока, когда вы имеете сетевую торговую "
+"компанию с головной компанией,\n"
+"которая ответственна за поставщиков торговой сети.\n"
+"\n"
+"  [ Покупатель ] <- A - [ Точка торговли ]  <- B -  [ Владелец ] <~ C ~ [ "
+"Поставщик ]\n"
+"\n"
+"Когда новый заказ снабжения (A, приходящий, например, из подтверждения "
+"заказа продажи) поступает \n"
+"в точку торговли, он преобразуется в другое снабжение (B, через восходящий "
+"поток типа 'перемещение')\n"
+"запрошенный из владельца. Когда обработан заказ снабжения B компанией "
+"владельцем и,\n"
+"если товара нет на складе, он может быть преобразован в заказ закупки (C)  "
+"от поставщика\n"
+"(восходящий поток типа закупки). Результат в том, что заказ снабжения, "
+"потребность, проталкивается\n"
+"на всем пути между покупателем и поставщиком.\n"
+"\n"
+"Технически, нисходящие потоки позволяют обработать заказы снабжения "
+"различно, не только в зависимости от\n"
+"рассматриваемого товара, но также в зависимости от того, какое место "
+"хранения нуждается в этом\n"
+"товаре (т.е. конечное место хранения этого заказа снабжения).\n"
+"\n"
+"Пример использования\n"
+"--------\n"
+"\n"
+"Вы можете использовать следующие демонстрационные данные:\n"
+"  ЦП1: продажа ЦП1 из магазина 1 и запуск планировщика\n"
+"     - Склад: заказ доставки, магазин 1: получение\n"
+"  ЦП3:\n"
+"     - При получении товара, он попадает в место контроля качества, затем "
+"сохраняется на полке 2.\n"
+"     - При доставке покупателю: Комплектовочный список -> Упаковка -> Заказ "
+"доставки из выхода A\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,description:base.module_marketing
@@ -7704,6 +8797,12 @@ msgid ""
 "Contains the installer for marketing-related modules.\n"
 "    "
 msgstr ""
+"\n"
+"Меню для маркетинга.\n"
+"===================\n"
+"\n"
+"Содержит установщик для модулей относящихся к маркетингу.\n"
+"    "
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_knowledge_management
@@ -7751,6 +8850,30 @@ msgid ""
 "task is completed.\n"
 "\n"
 msgstr ""
+"\n"
+"Автоматически создаёт задачи проекта из позиций снабжения\n"
+"==========================================================\n"
+"\n"
+"Этот модуль автоматически создаст новую задачу для каждой позиции заказа\n"
+"снабжения (например, для позиций заказа продажи), если соответствующий "
+"товар\n"
+"удовлетворяет следующим характеристикам:\n"
+"\n"
+"  * Тип = услуга\n"
+"  * Способ снабжения (осуществление заказа) = MTO (изготовить на заказ)\n"
+"  * Способ поставки/снабжения = произвести\n"
+"\n"
+"Если проект определён в форме продукта (во вкладке\n"
+"снабжения), то будет создана новая задача в этом конкретном проекте.\n"
+"Иначе, новая задача не будет принадлежать ни одному проекту, и может\n"
+"быть добавлена вручную к проекту позже.\n"
+"\n"
+"Когда задача проекта выполнена или отменена, процесс соответствующей\n"
+"позиции снабжения соответственно обновляется. Например, если снабжение\n"
+"соответствует позиции заказа продажи, позиция заказа продажи будет "
+"считаться\n"
+"доставленной, когда задача выполнена.\n"
+"\n"
 
 #. module: base
 #: code:addons/base/res/res_config.py:348
@@ -7771,11 +8894,14 @@ msgid ""
 "    Module for the Check writing and check printing  \n"
 "    "
 msgstr ""
+"\n"
+"    Модуль для проверки записи и проверки печати  \n"
+"    "
 
 #. module: base
 #: model:res.partner.bank.type,name:base.bank_normal
 msgid "Normal Bank Account"
-msgstr ""
+msgstr "Обычный банковский счёт"
 
 #. module: base
 #: view:ir.actions.wizard:0
@@ -7805,6 +8931,26 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль может автоматически создать задачи проекта основанные на "
+"входящих письмах\n"
+"===========================================================================\n"
+"\n"
+"Позволяет создавать задачи основанные на новых письмах приходящих на данный "
+"почтовый ящик,\n"
+"подобно тому как приложение CRM делает для кандидатов/предложений.\n"
+"Имеется две общих альтернативы для настройки почтового ящика:\n"
+"\n"
+" * Установить модуль ``fetchmail`` и настроить новый почтовый ящик, затем "
+"выбрать\n"
+"   ``Задачи проекта`` в качестве цели для входящих писем.\n"
+" * Настроить вручную на вашем почтовом сервере основанном не скрипте "
+"'почтовый шлюз'\n"
+"   предусмотренном в модуле ``mail`` - и подключить к модели "
+"`project.task`.\n"
+"\n"
+"\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,description:base.module_membership
@@ -7824,6 +8970,21 @@ msgid ""
 "invoice and send propositions for membership renewal.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет вам управлять всеми операциями для управления "
+"участием.\n"
+"=========================================================================\n"
+"\n"
+"Он поддерживает различные виды участников:\n"
+"* Свободный участник\n"
+"* Связанный участник (например: группа подписки в членстве для всех "
+"дополнений)\n"
+"* Платное участие,\n"
+"* Особые цены участия, ...\n"
+"\n"
+"Он интегрирован с продажами и учетом для обеспечения автоматического\n"
+"выставления счетов и отправки предложения для возобновления участия.\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,description:base.module_hr_attendance
@@ -7836,6 +8997,13 @@ msgid ""
 "actions(Sign in/Sign out) performed by them.\n"
 "       "
 msgstr ""
+"\n"
+"Этот модуль предназначен для управления посещаемости работников.\n"
+"==================================================\n"
+"\n"
+"Поддерживает учёт посещаемости работников на основе\n"
+"действий (приход/уход) выполненных ими.\n"
+"       "
 
 #. module: base
 #: field:ir.module.module,maintainer:0
@@ -7884,6 +9052,9 @@ msgid ""
 "the same values as those available in the condition field, e.g. `Hello [[ "
 "object.partner_id.name ]]`"
 msgstr ""
+"Тема эл.письма может содержать выражение заключённое в двойные квадратные "
+"скобки основанное на тех же самых значениях, которые применимы в поле "
+"условия, например, `Здравствуйте [[ object.partner_id.name ]]`"
 
 #. module: base
 #: model:ir.module.module,description:base.module_account_sequence
@@ -7902,6 +9073,19 @@ msgid ""
 "    * Number Padding\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль поддерживает внутреннюю нумерацию бухгалтерских записей.\n"
+"======================================================================\n"
+"\n"
+"Позволяет вам настроить нумерацию бухгалтерских записей.\n"
+"\n"
+"Вы можете подстроить следующие атрибуты нумерации:\n"
+"    * Префикс\n"
+"    * Суффикс\n"
+"    * Следующий номер\n"
+"    * Приращение номера\n"
+"    * Наполнение номера\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.to
@@ -7936,7 +9120,7 @@ msgstr ""
 #. module: base
 #: selection:ir.module.module,complexity:0
 msgid "Easy"
-msgstr ""
+msgstr "Легко"
 
 #. module: base
 #: view:ir.values:0
@@ -7949,6 +9133,8 @@ msgid ""
 "The field on the current object that links to the target object record (must "
 "be a many2one, or an integer field with the record ID)"
 msgstr ""
+"Поле текущего объекта, которое связывается с записью целевого объекта (может "
+"быть многие-в-одно, или поле целого с ID записи)"
 
 #. module: base
 #: code:addons/base/module/module.py:423
@@ -7971,6 +9157,7 @@ msgid ""
 "Determines where the currency symbol should be placed after or before the "
 "amount."
 msgstr ""
+"Определяет где должен быть помещён символ валюты: до или после суммы."
 
 #. module: base
 #: model:ir.model,name:base.model_base_update_translations
@@ -8017,7 +9204,7 @@ msgstr "Соединённые Штаты Америки"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_crm_fundraising
 msgid "Fundraising"
-msgstr ""
+msgstr "Сбор средств"
 
 #. module: base
 #: view:ir.module.module:0
@@ -8034,7 +9221,7 @@ msgstr "Общение"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_analytic
 msgid "Analytic Accounting"
-msgstr ""
+msgstr "Аналитический учет"
 
 #. module: base
 #: view:ir.actions.report.xml:0
@@ -8084,6 +9271,8 @@ msgid ""
 "You cannot have multiple records with the same external ID in the same "
 "module!"
 msgstr ""
+"Нельзя иметь несколько записей с одним и тем же внешним ID в одном и том же "
+"модуле!"
 
 #. module: base
 #: selection:ir.property,type:0
@@ -8104,11 +9293,17 @@ msgid ""
 "\n"
 "    *  Share meeting with other calendar clients like sunbird\n"
 msgstr ""
+"\n"
+"Возможности Caldav во встрече.\n"
+"===========================\n"
+"\n"
+"    *  Совместное использование встречи с другими клиентами календаря типа "
+"Sunbird\n"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_iban
 msgid "IBAN Bank Accounts"
-msgstr ""
+msgstr "Банковские счета IBAN"
 
 #. module: base
 #: field:res.company,user_ids:0
@@ -8123,7 +9318,7 @@ msgstr "Изображение веб-иконки"
 #. module: base
 #: field:ir.actions.server,wkf_model_id:0
 msgid "Target Object"
-msgstr ""
+msgstr "Целевой объект"
 
 #. module: base
 #: selection:ir.model.fields,select_level:0
@@ -8177,6 +9372,8 @@ msgid ""
 "Model to which this entry applies - helper field for setting a model, will "
 "automatically set the correct model name"
 msgstr ""
+"Модель к которой применима эта запись - вспомогательное поле для задания "
+"модели, установит автоматически точное имя модели"
 
 #. module: base
 #: view:res.lang:0
@@ -8204,6 +9401,8 @@ msgid ""
 "The priority of the job, as an integer: 0 means higher priority, 10 means "
 "lower priority."
 msgstr ""
+"Приоритет работы как целое: 0 означает высший приоритет, 10 означает низший "
+"приоритет."
 
 #. module: base
 #: model:ir.model,name:base.model_workflow_transition
@@ -8218,12 +9417,12 @@ msgstr "%a - Краткое название дня недели."
 #. module: base
 #: view:ir.ui.menu:0
 msgid "Submenus"
-msgstr ""
+msgstr "Подменю"
 
 #. module: base
 #: model:res.groups,name:base.group_extended
 msgid "Extended View"
-msgstr ""
+msgstr "Расширенный вид"
 
 #. module: base
 #: model:res.country,name:base.pf
@@ -8238,7 +9437,7 @@ msgstr "Доминика"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_module_record
 msgid "Record and Create Modules"
-msgstr ""
+msgstr "Запись и создание модулей"
 
 #. module: base
 #: model:ir.model,name:base.model_partner_sms_send
@@ -8282,6 +9481,40 @@ msgid ""
 "                Administration / Users / Users\n"
 "                for example, you maybe will do it for the user 'admin'.\n"
 msgstr ""
+"\n"
+"Этот модуль позволяет вам управлять отпусками и запросами отпусков.\n"
+"=============================================================\n"
+"\n"
+"Реализует панель для управления трудовыми ресурсами, которая включает:\n"
+"    * Отпуска\n"
+"\n"
+"Учтите, что:\n"
+"    - Возможна синхронизация с внутренней повесткой дня (используя модуль "
+"CRM): в порядке автоматического создания вопроса, когда запрос отпуска "
+"принят, вы должны связать состояние отпуска с разделом вопроса. Вы можете "
+"установить эту информацию и ваши цветовые предпочтения в\n"
+"                Трудовые ресурсы/Настройка/Праздники/Тип отпуска\n"
+"    - Работник может сделать запрос больших выходных, сделав новое "
+"распределение увеличивающее их сумму из доступного типа отпуска (если запрос "
+"принят).\n"
+"    - Имеется два пути для печати отпусков работника:\n"
+"        * Первый позволит выбрать работников по подразделению и вызывается "
+"нажатием пункта меню, расположенного в\n"
+"                Трудовые ресурсы/Отчётность/Праздники/Отпуска по "
+"подразделению\n"
+"        * Второй позволит вам выбрать отчёт отпусков для конкретных "
+"работников. Перейдите к списку\n"
+"                Трудовые ресурсы/Трудовые ресурсы/Работники\n"
+"                затем выберите тех, которые нужны, нажмите значок печати и "
+"выберите параметр\n"
+"                'Отпуск работника'\n"
+"    - Мастер позволяет вам выбрать, печатать утвержденных и подтвержденных "
+"отпусков или только подтвержденных. Эти состояния могут быть заданы в форме "
+"пользователя из группы 'ТР'. Вы можете задать это во вкладке защиты из "
+"данных пользователя в\n"
+"                Администрирование/Пользователи/Пользователи\n"
+"                например, вы, может быть, сделаете это для пользователя "
+"'admin'.\n"
 
 #. module: base
 #: field:ir.actions.report.xml,report_xsl:0
@@ -8291,22 +9524,22 @@ msgstr "Директория XSL"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_invoice_layout
 msgid "Invoice Layouts"
-msgstr ""
+msgstr "Макеты счёта"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_stock_location
 msgid "Advanced Routes"
-msgstr ""
+msgstr "Расширенная маршрутизация"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_pad
 msgid "Collaborative Pads"
-msgstr ""
+msgstr "Совместные планшеты"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_anglo_saxon
 msgid "Anglo-Saxon Accounting"
-msgstr ""
+msgstr "Англо-саксонской учет"
 
 #. module: base
 #: model:res.country,name:base.np
@@ -8316,17 +9549,17 @@ msgstr "Непал"
 #. module: base
 #: help:res.groups,implied_ids:0
 msgid "Users of this group automatically inherit those groups"
-msgstr ""
+msgstr "Пользователи этой группы автоматически наследуют эти группы"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr_attendance
 msgid "Attendances"
-msgstr ""
+msgstr "Посещаемость"
 
 #. module: base
 #: field:ir.module.category,visible:0
 msgid "Visible"
-msgstr ""
+msgstr "Видимый"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_ui_view_custom
@@ -8351,13 +9584,20 @@ msgid ""
 "for Wiki Quality Manual.\n"
 "    "
 msgstr ""
+"\n"
+"Шаблон руководства по качеству.\n"
+"========================\n"
+"\n"
+"Он предусматривает демо-данные, включая Wiki группу и Wiki страницу\n"
+"для Wiki руководства по качеству.\n"
+"    "
 
 #. module: base
 #: model:ir.actions.act_window,name:base.act_values_form_action
 #: model:ir.ui.menu,name:base.menu_values_form_action
 #: view:ir.values:0
 msgid "Action Bindings"
-msgstr ""
+msgstr "Привязка действий"
 
 #. module: base
 #: view:ir.sequence:0
@@ -8381,7 +9621,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account
 msgid "eInvoicing"
-msgstr ""
+msgstr "Эл. выставление счетов"
 
 #. module: base
 #: model:ir.module.module,description:base.module_association
@@ -8394,12 +9634,19 @@ msgid ""
 "memberships, membership products (schemes), etc.\n"
 "    "
 msgstr ""
+"\n"
+"Это модуль для настройки модулей относящихся к объединению.\n"
+"==============================================================\n"
+"\n"
+"Он устанавливает профиль для объединений для обслуживания событий, "
+"регистраций, членства, продуктов членства (проекты) и т.п.\n"
+"    "
 
 #. module: base
 #: code:addons/orm.py:2693
 #, python-format
 msgid "The value \"%s\" for the field \"%s.%s\" is not in the selection"
-msgstr ""
+msgstr "Значения \"%s\" для поля \"%s.%s\" нет в выборке"
 
 #. module: base
 #: view:ir.actions.configuration.wizard:0
@@ -8430,7 +9677,7 @@ msgstr "Словенский / slovenščina"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_wiki
 msgid "Wiki"
-msgstr ""
+msgstr "Wiki"
 
 #. module: base
 #: model:ir.module.module,description:base.module_l10n_de
@@ -8453,7 +9700,7 @@ msgstr "Перезагрузить из вложения"
 #. module: base
 #: view:ir.module.module:0
 msgid "Hide technical modules"
-msgstr ""
+msgstr "Скрыть технические модули"
 
 #. module: base
 #: model:ir.module.module,description:base.module_procurement
@@ -8475,6 +9722,24 @@ msgid ""
 "depending on the product's configuration.\n"
 "    "
 msgstr ""
+"\n"
+"Это модуль для вычисления снабжения.\n"
+"==============================================\n"
+"\n"
+"В процессе MRP, заказы снабжения создаются для вызова заказов\n"
+"производства, заказов закупки, распределений запаса и т.д. Заказы снабжения\n"
+"создаются системой автоматически пока нет проблем, пользователь\n"
+"не будет уведомлен в случае проблем. Система вызовет некоторые проблемы\n"
+"снабжения для информирования пользователя о блокирующих проблемах, которые "
+"нуждаются\n"
+"в ручном разрешении (типа отсутствующей структуры или отсутствующего "
+"поставщика).\n"
+"\n"
+"Заказ снабжения запланирует предложение автоматического снабжения\n"
+"для товара, который нужно пополнить. Снабжение запустит задачу,\n"
+"либо форму заказа закупки для поставщика или заказ производства в\n"
+"зависимости от настройки продукта.\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.mx
@@ -8485,7 +9750,7 @@ msgstr "Мексика"
 #: code:addons/base/ir/ir_mail_server.py:414
 #, python-format
 msgid "Missing SMTP Server"
-msgstr ""
+msgstr "Отсутствие SMTP сервера"
 
 #. module: base
 #: field:ir.attachment,name:0
@@ -8506,7 +9771,7 @@ msgstr "Обновление / Установка модуля"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_email_template
 msgid "E-Mail Templates"
-msgstr ""
+msgstr "E-Mail Шаблоны"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_actions_configuration_wizard
@@ -8574,6 +9839,61 @@ msgid ""
 "\n"
 "                    "
 msgstr ""
+"\n"
+"Этот модуль добавляет новый движок отчёта основанный на библиотеке WebKit "
+"(wkhtmltopdf) для поддержки очётов разработанных в HTML + CSS.\n"
+"============================================================================="
+"========================================\n"
+"\n"
+"Структура модуля и некоторый код заимствованы из модуля отчёта OpenOffice.\n"
+"\n"
+"Модуль позволяет:\n"
+"\n"
+"    - Определять HTML отчёт\n"
+"    - Поддерживать множество заголовков\n"
+"    - Много логотипов\n"
+"    - Поддержку мульти-компаний\n"
+"    - Поддержку HTML и CSS-3 (в переделх действующей версии WebKIT)\n"
+"    - Поддержку JavaScript\n"
+"    - Отладчик сырого HTML\n"
+"    - Возможности книжной печати\n"
+"    - Определение полей\n"
+"    - Определение размера бумаги\n"
+"\n"
+"... и многое другое\n"
+"\n"
+"Многие заголовки и логотипы могут быть определены по компании.\n"
+"Стиль CSS, тело заголовка и колонтитулы определяются по компании.\n"
+"\n"
+"Для примера отчёта смотрите также модуль webkit_report_sample и это видео:\n"
+"    http://files.me.com/nbessi/06n92k.mov\n"
+"\n"
+"Требования и установка\n"
+"-----------------------------\n"
+"Этот модуль требует библиотеку ``wkthtmltopdf`` для перевода документов HTML "
+"в\n"
+"PDF. Необходима версия 0.9.9 или новее, и может быть найдена на "
+"http://code.google.com/p/wkhtmltopdf/\n"
+"для Linux, Mac OS X (i386) и Windows (32битной).\n"
+"\n"
+"После установки библиотеки на серверном ПК OpenERP, вам нужно задать\n"
+"путь к исполнительному файлу ``wkthtmltopdf`` по каждой компании.\n"
+"\n"
+"Если вы встретили проблемы пропуска колонтитулов в Linux, убедитесь, что\n"
+"установили \"статическую\" версию библиотеки. По умолчанию ``wkhtmltopdf`` "
+"в\n"
+"Ubuntu имеет эту известную проблему.\n"
+"\n"
+"\n"
+"СДЕЛАТЬ\n"
+"----\n"
+"\n"
+" * Поддержку активации деактивации JavaScript\n"
+" * Поддержку разобранного по листам и книжного формата\n"
+" * Возврат Zip для отдельных PDF\n"
+" * WYSIWYG веб-клиент\n"
+"\n"
+"                    "
 
 #. module: base
 #: model:ir.module.module,description:base.module_l10n_gt
@@ -8668,6 +9988,32 @@ msgid ""
 "created\n"
 "        CALENDAR_NAME: Name of calendar to access\n"
 msgstr ""
+"\n"
+"Этот модуль содержит основную функциональность для системы Caldav.\n"
+"===========================================================\n"
+"\n"
+"  - Webdav сервер, который предусматривает удалённый доступ к календарю\n"
+"  - Синхронизация календаря используя WebDAV\n"
+"  - Подстройка события календаря и атрибута дела к любой модели OpenERP\n"
+"  - Предусматривает функциональность импорта/экспорта iCal\n"
+"\n"
+"Для доступа к календарям используя клиенты CalDAV, адресуйте их на:\n"
+"    "
+"http://НАЗВАНИЕ_ХОСТА:ПОРТ/webdav/НАЗВАНИЕ_БД/calendars/users/ИМЯ_ПОЛЬЗОВАТЕЛ"
+"Я/c\n"
+"\n"
+"Для доступа к календарю OpenERP используя WebCal для удалённого сайта "
+"используйте URL типа:\n"
+"    "
+"http://НАЗВАНИЕ_ХОСТА:ПОРТ/webdav/НАЗВАНИЕ_БД/Calendars/НАЗВАНИЕ_КАЛЕНДАРЯ.ic"
+"s\n"
+"\n"
+"    Где,\n"
+"        НАЗВАНИЕ_ХОСТА: хост на котором работает OpenERP сервер (с Webdav)\n"
+"        ПОРТ: порт накотором работает OpenERP сервер (по умолчанию: 8069)\n"
+"        НАЗВАНИЕ_БД: название базы данных в которой создан календарь "
+"OpenERP\n"
+"        НАЗВАНИЕ_КАЛЕНДАРЯ: название календаря для доступа\n"
 
 #. module: base
 #: field:ir.model.fields,selectable:0
@@ -8678,12 +10024,12 @@ msgstr "Выделяемый"
 #: code:addons/base/ir/ir_mail_server.py:199
 #, python-format
 msgid "Everything seems properly set up!"
-msgstr ""
+msgstr "Кажется, все настроено правильно!"
 
 #. module: base
 #: field:res.users,date:0
 msgid "Latest Connection"
-msgstr ""
+msgstr "Последнее подключение"
 
 #. module: base
 #: view:res.request.link:0
@@ -8703,6 +10049,15 @@ msgid ""
 "mail into mail.message with attachments.\n"
 "      "
 msgstr ""
+"\n"
+"Этот модуль предоставляет плагин Outlook.\n"
+"=========================================\n"
+"Плагин Outlook позволяет вам выбрать объект, который вы хотите добавить\n"
+"к вашему e-mail и его вложениям из MS Outlook. Вы можете выбрать партнёра, "
+"задачу,\n"
+"проект, счёт аналитики, или любой другой объект и архивировать выбранное\n"
+"письмо с вложениями в mail.message.\n"
+"      "
 
 #. module: base
 #: view:ir.attachment:0
@@ -8719,6 +10074,10 @@ msgid ""
 "use the same timezone that is otherwise used to pick and render date and "
 "time values: your computer's timezone."
 msgstr ""
+"Часовой пояс пользователя, используется для вывода правильных значений даты "
+"и времени в печатаемых отчётах. Важно задать значение этого поля. Вы должны "
+"использовать тот же самый часовой пояс, иначе выбираются и действуют "
+"значения даты и времени: часовой пояс вашего компьютера."
 
 #. module: base
 #: help:res.country,name:0
@@ -8733,17 +10092,17 @@ msgstr "Повтор"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_planning
 msgid "Resources Planing"
-msgstr ""
+msgstr "Планирование ресурсов"
 
 #. module: base
 #: field:ir.module.module,complexity:0
 msgid "Complexity"
-msgstr ""
+msgstr "Сложность"
 
 #. module: base
 #: selection:ir.actions.act_window,target:0
 msgid "Inline"
-msgstr ""
+msgstr "Встроенное"
 
 #. module: base
 #: model:res.partner.bank.type.field,name:base.bank_normal_field_bic
@@ -8771,6 +10130,16 @@ msgid ""
 "* Date\n"
 "    "
 msgstr ""
+"Устанавливает значения по умолчанию для ваших аналитических счетов\n"
+"Позволяет автоматический выбор аналитических счетов на основе критериев:\n"
+"=====================================================================\n"
+"\n"
+"* Товар\n"
+"* Партнёр\n"
+"* Пользователь\n"
+"* Компания\n"
+"* Дата\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.ae
@@ -8805,7 +10174,7 @@ msgstr ""
 #. module: base
 #: view:ir.values:0
 msgid "Action Reference"
-msgstr ""
+msgstr "Ссылка на действие"
 
 #. module: base
 #: model:res.country,name:base.re
@@ -8831,16 +10200,22 @@ msgid ""
 "Keep track of Wiki groups, pages, and history.\n"
 "    "
 msgstr ""
+"\n"
+"Основной модуль для управления документами (Wiki).\n"
+"==========================================\n"
+"\n"
+"Отслеживает группы, страницы и историю Wiki.\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_mrp_repair
 msgid "Repairs Management"
-msgstr ""
+msgstr "Управление ремонтами"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_asset
 msgid "Assets Management"
-msgstr ""
+msgstr "Управление активами"
 
 #. module: base
 #: view:ir.model.access:0
@@ -9102,6 +10477,265 @@ msgid ""
 "product, warehouse and company because results\n"
 "   can be unpredictable. The same applies to Forecasts lines.\n"
 msgstr ""
+"\n"
+"МПС позволяет создать план снабжения вручную вместо обычного MRP "
+"планирования, которое автоматически основано на правилах минимума запаса\n"
+"============================================================================="
+"============================================================\n"
+"\n"
+"Краткий словарь\n"
+"--------------\n"
+"- Период запаса - границы времени (между датой начала и конечной датой) для "
+"планирования ваших продаж и прогнозов запаса\n"
+"- Прогноз продаж - количество товаров, которое вы планируете продать в "
+"течении соответствующего периода запаса.\n"
+"- Планирование запаса - количество продуктов планируемое вами для заказа или "
+"производства для относящегося периода запаса.\n"
+"\n"
+"Во избежание путаницы с терминами используемыми в модуле ``sale_forecast``, "
+"(\"Прогноз продаж\" и  \"Планирование\" являющихся суммами) мы используем "
+"термины \"Прогноз запаса и продаж\" и \"Планирование запаса\" для "
+"подчёркивания, что мы используем количественные значения.\n"
+"\n"
+"Для начала\n"
+"--------------\n"
+"Использование этого модуля производится в три шага:\n"
+"\n"
+" * Создание периодов запаса через меню Склад>Настройки>Периоды запаса "
+"(обязательный шаг)\n"
+" * Создание прогнозов продажи заполняет их прогнозами количеств, через меню "
+"Продажи>Прогноз продаж. (Необязательный шаг, но полезный для будущего "
+"планирования)\n"
+" * Создание действительного плана МПС, проверка баланса и запуск снабжений "
+"как требуется. Действительное снабжение - завершающий шаг для периода "
+"запаса.\n"
+"\n"
+"Настройки периода запаса\n"
+"--------------------------\n"
+"У вас есть два пункта меню для периодов в \"Склад > Настройки > Периоды "
+"запаса\". Это:\n"
+"\n"
+" * \"Создать периоды запаса\" - могущий автоматически создать дневной, "
+"недельный и месячный периоды.\n"
+" * \"Периоды запаса\" - позволяющий создать любой тип периодов, сменить даты "
+"и сменить состояние периода.\n"
+"\n"
+"Создание периодов - первый шаг. Вы можете создать свои периоды используя "
+"кнопку \"Создать\" в \"Периоды запаса\", но рекомендуется использовать "
+"автоматический ассистент \"Создать периоды запаса\".\n"
+"\n"
+"Замечания:\n"
+"\n"
+" - Эти периоды (Периоды запаса) полностью отличны от финансовых и других "
+"периодов в системе.\n"
+" - Периоды не назначены компаниям (когда вы используете мульти-компании). "
+"Модуль полагает, что вы используете одинаковые периоды для всех компаний. "
+"Если вы хотите использовать различные периоды для различных компаний, "
+"определите их как хотите (они могут перекрываться). Позже по тексту будут "
+"указания как использовать такие периоды.\n"
+" - Когда периоды созданы автоматически, их начальные и конечные даты "
+"начинаются в 00:00:00 часов и заканчиваются в 23:59:00 часов. Когда вы "
+"создаёте дневные периоды, их начальной датой будет 31.01.2010 00:00:00 и "
+"конечной датой будет 31.01.2010 23:59:00. Это работает только в "
+"автоматическом создании периодов. Когда вы создаёте периоды вручную, вам "
+"нужно позаботиться о часах, поскольку у вас будут неправильные значения из "
+"продаж или запаса.\n"
+" - Если вы используете перекрывающиеся периоды для одного и того же "
+"продукта, склад и компания могут быть не предсказуемыми.\n"
+" - Если текущая дата не принадлежит ни одному периоду или у вас есть "
+"промежутки между периодами, результаты могут быть не предсказуемыми.\n"
+"\n"
+"Настройки прогнозов продаж\n"
+"-----------------------------\n"
+"У вас есть несколько меню для прогноза продаж в \"Продажи > Прогнозы "
+"продаж\":\n"
+"\n"
+" - \"Создать прогнозы продаж\" - может автоматически создать строки прогноза "
+"согласно вашим нуждам\n"
+" - \"Прогнозы продаж\" - для управления прогнозами продаж\n"
+"\n"
+"Меню \"Создать прогнозы продаж\" создаёт прогнозы для продуктов из выбранной "
+"категории, для выбранного периода и для выбранного склада.\n"
+"Также возможно копировать предыдущий прогноз.\n"
+"\n"
+"Замечания:\n"
+"\n"
+" - Этот инструмент не дублирует строки, если у вас есть запись для того же "
+"продукта, периода, склада, созданная или подтверждённая тем же самым "
+"пользователем. Если вы хотите создать другой прогноз, когда имеются "
+"относящиеся строки, вы должны сделать это вручную, как описано ниже.\n"
+" - Иначе, когда созданные строки кем-либо подтверждены, вы можете "
+"использовать этот инструмент для создания другой строки для того же периода, "
+"продукта и склада.\n"
+" - Когда вы выбираете \"Копировать последний прогноз\", созданная строка "
+"принимает количество и другие настройки из вашего (подтверждённого вами или "
+"созданного вами, но ещё не подтверждённого) прогноза для последнего периода "
+"перед периодом созданного прогноза.\n"
+"\n"
+"Вручную на форме \"Прогноз продаж\" вы можете ввести количество прогноза в "
+"\"Количество товара\".\n"
+"Дальнейший подсчёт может работать для черновых прогнозов. Но подтверждение "
+"может предохранить ваши данные от любых случайных изменений.\n"
+"Вы можете нажать кнопку \"Подтвердить\", но это не обязательно.\n"
+"\n"
+"Вместо прогноза количества вы можете ввести сумму прогноза продаж через поле "
+"\"Сумма продукта\".\n"
+"Система подсчитает количество из суммы соответственно цене продажи "
+"продукта.\n"
+"\n"
+"Все значения на форме выражены в выбранной для формы единице измерения.\n"
+"Вы можете выбрать единицу измерения из категории по умолчанию или из "
+"вторичной категории.\n"
+"Когда вы смените единицу измерения, прогноз количества продукта будет "
+"пересчитан соответственно новой е.и.\n"
+"\n"
+"Для выработки вашего прогноза продажи вы можете использовать \"Историю "
+"продаж\" продукта.\n"
+"Вы можете ввести параметры сверху и слева этой таблицы и система подсчитает "
+"количества продажи согласно этим параметрам.\n"
+"Так вы можете получить результаты для заданной команды продаж или периода.\n"
+"\n"
+"\n"
+"МПС или планирование снабжения\n"
+"---------------------------\n"
+"Планирование МПС заключающееся в строках планирования запаса, используется "
+"для анализа и возможности ведения снабжения\n"
+"товарами для каждого относящегося периода запаса и склада.\n"
+"Меню расположено в \"Склад > Планировщики > Планирование основного "
+"снабжения\":\n"
+"\n"
+" - \"Создать строки планирования запаса\" - мастер для помощи "
+"автоматического создания нескольких строк планирования\n"
+" - \"Главное планирование снабжения\" - управление вашими строками "
+"планирования\n"
+"\n"
+"Подобно пути прогноза продаж для обслуживания определения вашего "
+"планирования продаж, МПС позволяет вам планировать ваши снабжения "
+"(Закупка/Производство).\n"
+"Вы можете быстро заполнить МПС с мастером \"Создать строки планирования "
+"запаса\", и затем перейти к их просмотру через меню \"Планирование основного "
+"снабжения\".\n"
+"\n"
+"Мастер \"Создать строки планирования запаса\" позволяет вам быстро создать "
+"все строки МПС для заданной категории продукта, заданного периода и склада.\n"
+"Когда вы включаете параметр мастера \"Все товары с прогнозом\", система "
+"создаёт строки для всех товаров имеющих прогноз продаж для выбранного\n"
+"периода и склада (в этом случае будет игнорирована выбранная категория).\n"
+"\n"
+"Внутри меню \"Планирование основного снабжения\" вы будете обычно менять "
+"количества \"Плановый уход\" и \"Плановый приход\" и просматривать "
+"результирующее значение \"Моделирование запаса\"\n"
+"для решения о необходимом вам снабжении большим количеством продуктов для "
+"заданного периода.\n"
+"\"Плановый уход\" будет изначально основан на \"Прогнозе склада\", который "
+"является суммой всех уже запланированных исходящих перемещений запаса для "
+"периода и склада.\n"
+"Конечно вы можете изменить это значение для предусмотрения ваших собственных "
+"количеств. Это не необходимо для имения любого прогноза.\n"
+"Количество \"Планового прихода\" используется для подсчёта поля "
+"\"Поступающий остаток\", который является количеством для снабжения для "
+"достижения \"Моделирования запаса\" в конце периода.\n"
+"Вы можете сравнить количество \"Моделирования запаса\" для видимых в форме "
+"ввода правил минимума запаса.\n"
+"И вы можете планировать отличные количества, чем в правилах минимума запаса. "
+"Подсчёты делаются автоматически по умолчанию для всего склада,\n"
+"если вы хотите видеть значения для места хранения запаса подсчитанного "
+"склада, вы можете отметить \"Только место хранения запаса\".\n"
+"\n"
+"Когда вы удовлетворены \"Плановым уходом\", \"Плановым приходом\" и концом "
+"периода \"Моделирования запаса\",\n"
+"вы можете нажать на \"Снабжение остатка прихода\" для создания снабжения "
+"количества \"Остатка прихода\".\n"
+"Вы можете решить поступит снабжение в запас или на входящее место хранения "
+"склада.\n"
+"\n"
+"Если вам не нужны производство или закупка товара, а только перенос "
+"подсчитанного количества из другого склада,\n"
+"вы можете нажать \"Снабжение из другого склада\" (вместо \"Снабжение "
+"входящего остатка\") и система\n"
+"создаст соответствующий комплектовочный список (перемещения запаса).\n"
+"Вы можете выбрать взятие товаров из запаса или из выходного места хранения "
+"исходного склада.\n"
+"Место хранения назначения (запас или вход) в складе назначения будет принято "
+"как для случая снабжения.\n"
+"\n"
+"Для просмотра изменения количеств из \"Подтвержденный приход\", "
+"\"Подтверждённый уход\", \"Прежде подтверждённый приход\", \"Прежде плановый "
+"уход\"\n"
+"и \"Моделирование запаса\" вы можете нажать \"Подсчитать планирование\".\n"
+"\n"
+"Все значения в форме ввода выражены в единицах измерения выбранной формы.\n"
+"Вы можете выбрать одну из единиц измерения из категории по умолчанию или из "
+"вторичной категории.\n"
+"Когда вы сменяете единицу измерения, изменяемые количества будут пересчитаны "
+"согласно новой е.и. Остальное будет обновлено после нажатия \"Подсчитать "
+"планирование\".\n"
+"\n"
+"Подсчёт количеств моделирования запаса\n"
+"------------------------------------------\n"
+"Значение моделирования запаса - ожидаемое количество запаса в конце "
+"периода.\n"
+"Подсчёт всегда начинается с реального имеющегося запаса на начало текущего "
+"периода, затем\n"
+"добавляются или вычитаются подсчитанные количества.\n"
+"Когда вы находитесь в том же периоде (текущий период - тот же самый как и "
+"подсчитываемый), моделирование запаса подсчитывается как:\n"
+"\n"
+"Моделирование запаса =\n"
+"\tзапас на начало текущего периода\n"
+"\t- плановый уход\n"
+"\t+ плановый приход\n"
+"\n"
+"Когда вы подсчитываете период следующий за текущим:\n"
+"\n"
+"Моделирование запаса =\n"
+"\tзапас на начало текущего периода\n"
+"\t- плановый уход текущего периода\n"
+"\t+ подтверждённый приход планового периода (включая уже поступившее)\n"
+"\t- плановый уход подсчитанного периода\n"
+"\t+ плановый приход подсчитанного периода.\n"
+"\n"
+"Как вы видите, период подсчёта берется тем же самым способом, как и в "
+"предыдущем случае, но подсчёт в текущем\n"
+"периоде несколько отличается. Сначала вы должны учесть, что система "
+"принимает только подтверждённые перемещения для\n"
+"текущего периода. Это означает, что вы должны завершить планирование и "
+"снабжение текущего периода прежде\n"
+"перехода к следующему.\n"
+"\n"
+"Когда вы планируете для будущих периодов:\n"
+"\n"
+"Моделирование запаса =\n"
+"\tзапас на начало текущего периода\n"
+"\t- сумма планового ухода периодов перед подсчитанным\n"
+"\t+ сумма подтверждённого прихода в периодах перед подсчитанным (включая уже "
+"полученное)\n"
+"\t- плановый уход подсчитанного периода\n"
+"\t+ плановый приход подсчитанного периода.\n"
+"\n"
+"Здесь \"Периоды до подсчитанного\" означают все периоды начиная с текущего "
+"до периода должного подсчитаться.\n"
+"\n"
+"Замечания:\n"
+"\n"
+" - Помните о проведении планирования каждого периода в хронологическом "
+"порядке,иначе нумерация не будет отображать\n"
+"   действительность\n"
+" - Если вы запланировали будущие периоды и нашли, что реальный "
+"подтверждённый уход больше планового ухода в некоторых периодах прежде,\n"
+"   вы можете повторить планирование и сделать другое снабжение. Вы должны "
+"сделать это в той же строке планирования.\n"
+"   Если вы создаёте другую строку планирования все предложения могут быть не "
+"верны.\n"
+" - Когда вы хотите работать с различными периодами для некоторых продуктов, "
+"определите два вида периодов (например, недельный и месячный) и используйте\n"
+"   их для различных продуктов. Пример: если вы всегда используете недельные "
+"периоды для товара A, и месячные периоды для товара B,\n"
+"   все подсчёты будут работать правильно. Вы также можете использовать "
+"различные виды периодов для одного и того же товара с другого склада\n"
+"   или компании. Но вы не можете использовать перекрывающиеся периоды для "
+"одного и того же продукта, склада и компании, поскольку результаты\n"
+"   могут быть непредсказуемыми. Это же применимо к строкам прогнозов.\n"
 
 #. module: base
 #: model:res.country,name:base.mp
@@ -9111,7 +10745,7 @@ msgstr "Северные Марианские острова"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_claim_from_delivery
 msgid "Claim on Deliveries"
-msgstr ""
+msgstr "Претензия по поставкам"
 
 #. module: base
 #: model:res.country,name:base.sb
@@ -9162,6 +10796,17 @@ msgid ""
 "    * Generates Relationship Graph\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль создаёт техническое описание выбранных модулей в "
+"реструктурированном текстовом формате (RST).\n"
+"============================================================================="
+"====================\n"
+"\n"
+"    * Он использует Sphinx (http://sphinx.pocoo.org) представление RST\n"
+"    * Он создаёт архив (суффикс файла .tgz) содержащий индекс файла и один "
+"файл на модуль\n"
+"    * Создаёт график взаимосвязей\n"
+"    "
 
 #. module: base
 #: field:res.log,create_date:0
@@ -9177,7 +10822,7 @@ msgstr "Переводы"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_gtd
 msgid "Todo Lists"
-msgstr ""
+msgstr "Списки дел"
 
 #. module: base
 #: view:ir.actions.report.xml:0
@@ -9192,6 +10837,9 @@ msgid ""
 "instead.If SSL is needed, an upgrade to Python 2.6 on the server-side should "
 "do the trick."
 msgstr ""
+"Ваш сервер OpenERP не поддерживает SMTP-через-SSL. Вы можете использовать "
+"STARTTLS вместо него. Если SSL необходим, должно помочь обновление до Python "
+"2.6 на стороне сервера."
 
 #. module: base
 #: model:res.country,name:base.ua
@@ -9208,7 +10856,7 @@ msgstr "Сайт"
 #. module: base
 #: selection:ir.mail_server,smtp_encryption:0
 msgid "None"
-msgstr ""
+msgstr "Ничего"
 
 #. module: base
 #: view:ir.module.category:0
@@ -9228,7 +10876,7 @@ msgstr "Описание"
 #. module: base
 #: view:ir.values:0
 msgid "Default Value Scope"
-msgstr ""
+msgstr "Область значения по умолчанию"
 
 #. module: base
 #: view:ir.ui.view:0
@@ -9292,6 +10940,29 @@ msgid ""
 "* Maximal difference between timesheet and attendances\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль помогает вам легко ввести данные и подтвердить табель и "
+"посещаемость в одном и том же виде.\n"
+"============================================================================="
+"======================\n"
+"\n"
+"Верхняя часть вида - для посещаемости и отслеживает события (приход/уход).\n"
+"Нижняя часть - для табеля.\n"
+"\n"
+"Другие вкладки содержат виды статистики для помощи вам в анализе вашего\n"
+"времени и времени вашей команды:\n"
+"* Затраченное время по дню (с посещаемостью)\n"
+"* Затраченное время по проекту\n"
+"\n"
+"Этот модуль также реализует полный процесс подтверждения табеля:\n"
+"* Черновую запись\n"
+"* Подтверждение в конце периода работником\n"
+"* Подтверждение руководителем проекта\n"
+"\n"
+"Подтверждение в компании может быть настроено по:\n"
+"* Размеру периода (день, неделя, месяц, год)\\n\n"
+"* Максимальной разнице между табелем и посещаемостью\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.bn
@@ -9307,6 +10978,8 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"    "
 
 #. module: base
 #: view:ir.actions.act_window:0
@@ -9336,7 +11009,7 @@ msgstr "Дата создания"
 #. module: base
 #: help:ir.actions.server,trigger_name:0
 msgid "The workflow signal to trigger"
-msgstr ""
+msgstr "Сигнал рабочего процесса, для вызова"
 
 #. module: base
 #: model:ir.module.module,description:base.module_mrp
@@ -9381,11 +11054,50 @@ msgid ""
 "    * Graph of stock value variation\n"
 "    "
 msgstr ""
+"\n"
+"Это основной модуль для управления процессом производства в OpenERP.\n"
+"=======================================================================\n"
+"\n"
+"Возможности:\n"
+"---------\n"
+"    * Сделать в запас/сделать на заказ (по строке)\n"
+"    * Многоуровневые ВМ, нет ограничения\n"
+"    * Многоуровневая маршрутизация, нет ограничения\n"
+"    * Маршрутизация и рабочий центр интегрированы с аналитическим учётом\n"
+"    * Периодический подсчёт планировщика/модуль точно-в-срок\n"
+"    * Множественные ТП, множественные склады\n"
+"    * Различные политики переупорядочения\n"
+"    * Метод стоимости по продукту: стандартная цена, средняя цена\n"
+"    * Простой анализ затруднений или потребностей\n"
+"    * Весьма гибок\n"
+"    * Позволяет просмотреть ведомость материалов в полной структуре, которая "
+"включает подчинённые и фиктивные ВМ\n"
+"\n"
+"Он поддерживает полную интеграцию и планирование запасаемых товаров,\n"
+"потребляемых услуг. Услуги полностью интегрированы с опорой\n"
+"на программное обеспечение. Например, вы можете установить суб-договорную "
+"услугу\n"
+"в ВМ для автоматической закупки по заказу сборки вашего производства.\n"
+"\n"
+"Отчёты предусмотренные этим модулем:\n"
+"--------------------------------\n"
+"    * Структура и компоненты ведомости материалов\n"
+"    * Прогноз загрузки по рабочим центрам\n"
+"    * Печать производственного заказа\n"
+"    * Прогнозы запаса\n"
+"\n"
+"Панель предусмотренная этим модулем:\n"
+"----------------------------------\n"
+"    * Список следующих производственных заказов\n"
+"    * Список проблем снабжений\n"
+"    * График загрузки рабочего центра\n"
+"    * График изменения значения запаса\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,description:base.module_google_base_account
 msgid "The module adds google user in res user"
-msgstr ""
+msgstr "Модуль добавляет пользователя Google в обычного пользователя"
 
 #. module: base
 #: selection:base.language.install,state:0
@@ -9422,25 +11134,25 @@ msgstr "Алжир"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_plugin
 msgid "CRM Plugins"
-msgstr ""
+msgstr "Плагины CRM"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_model_model
 #: model:ir.model,name:base.model_ir_model
 #: model:ir.ui.menu,name:base.ir_model_model_menu
 msgid "Models"
-msgstr ""
+msgstr "Модели"
 
 #. module: base
 #: code:addons/base/ir/ir_cron.py:292
 #, python-format
 msgid "Record cannot be modified right now"
-msgstr ""
+msgstr "Запись не может быть изменена прямо сейчас"
 
 #. module: base
 #: selection:ir.actions.todo,type:0
 msgid "Launch Manually"
-msgstr ""
+msgstr "Запуск вручную"
 
 #. module: base
 #: model:res.country,name:base.be
@@ -9450,12 +11162,12 @@ msgstr "Бельгия"
 #. module: base
 #: view:res.company:0
 msgid "Preview Header"
-msgstr ""
+msgstr "Предварительный просмотр заголовка"
 
 #. module: base
 #: field:res.company,paper_format:0
 msgid "Paper Format"
-msgstr ""
+msgstr "Формат листа"
 
 #. module: base
 #: field:base.language.export,lang:0
@@ -9485,7 +11197,7 @@ msgstr "Компании"
 #. module: base
 #: help:res.currency,symbol:0
 msgid "Currency sign, to be used when printing amounts."
-msgstr ""
+msgstr "Знак валюты, который будет использоваться при печати сумм."
 
 #. module: base
 #: view:res.lang:0
@@ -9499,6 +11211,8 @@ msgid ""
 "Your server does not seem to support SSL, you may want to try STARTTLS "
 "instead"
 msgstr ""
+"Ваш сервер, кажется, не поддерживает SSL, вместо него вы можете попробовать "
+"STARTTLS"
 
 #. module: base
 #: model:ir.model,name:base.model_res_widget
@@ -9519,16 +11233,20 @@ msgid ""
 "=====================================================\n"
 "\n"
 msgstr ""
+"\n"
+"Общий интерфейс для плагина.\n"
+"=====================================================\n"
+"\n"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_mrp_jit
 msgid "Just In Time Scheduling"
-msgstr ""
+msgstr "Своевременное планирование"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_bank_statement_extensions
 msgid "Bank Statement extensions to support e-banking"
-msgstr ""
+msgstr "Расширения банковской выписки для поддержки электронного банкинга"
 
 #. module: base
 #: view:ir.actions.server:0
@@ -9607,11 +11325,22 @@ msgid ""
 "fund status.\n"
 "    "
 msgstr ""
+"\n"
+"Сбор средств.\n"
+"============\n"
+"\n"
+"Когда вы хотите поддержать вашу организацию или кампанию, вы можете "
+"отследить\n"
+"все ваши действия по сбору денег. Меню открывает список поиска,\n"
+"Где вы можете найти описания средств, e-mail, историю и вероятность\n"
+"успеха. Различные кнопки действия позволяют вам легко изменить различный\n"
+"статус средств.\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_sale_margin
 msgid "Margins in Sales Orders"
-msgstr ""
+msgstr "Прибыль в заказах продаж"
 
 #. module: base
 #: model:res.partner.category,name:base.res_partner_category_9
@@ -9622,7 +11351,7 @@ msgstr "Поставщик компонентов"
 #: model:ir.module.category,name:base.module_category_purchase_management
 #: model:ir.module.module,shortdesc:base.module_purchase
 msgid "Purchase Management"
-msgstr ""
+msgstr "Управление закупками"
 
 #. module: base
 #: field:ir.module.module,published_version:0
@@ -9680,11 +11409,17 @@ msgid ""
 "This module is the base module for other multi-company modules.\n"
 "    "
 msgstr ""
+"\n"
+"Это модуль для управления окружением мульти-компаний.\n"
+"=======================================================\n"
+"\n"
+"Это основной модуль для других модулей мульти-компаний.\n"
+"    "
 
 #. module: base
 #: sql_constraint:res.currency:0
 msgid "The currency code must be unique per company!"
-msgstr ""
+msgstr "Код валюты должен быть уникальным в компании!"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_property
@@ -9727,6 +11462,42 @@ msgid ""
 "mail. \n"
 "    "
 msgstr ""
+"\n"
+"Берет входящую эл.почту  с серверов POP / IMAP\n"
+"=============================================\n"
+"\n"
+"Введите параметры ваших учётных записей POP/IMAP, и любые входящие\n"
+"e-mail-ы на этих адресах будут автоматически загружены в вашу систему\n"
+"OpenERP. Поддерживаются все POP3/IMAP-совместимые серверы, включая те,\n"
+"которые требуют защищённое соединение SSL/TLS.\n"
+"\n"
+"Это может быть использовано для простого создания основанных на e-mail "
+"процессах для многих\n"
+"позволяющих e-mail документов OpenERP, таких как:\n"
+"\n"
+" * CRM кандидаты/предложения\n"
+" * CRM претензии\n"
+" * Претензии по проекту\n"
+" * Задачи проекта\n"
+" * Набор работников (кандидаты)\n"
+" * и т.п.\n"
+"\n"
+"Просто установите соответствующее приложение, и вы сможете назначать любой "
+"из\n"
+"этих типов документов (предложения, претензии по проекту и т.д.) вашим "
+"входящим\n"
+"адресам e-mail. Новые e-mail-ы будут автоматически плодить новые документы\n"
+"избранного типа; итак это снимок для создания интеграции почтового ящика в\n"
+"OpenERP. Даже лучше: эти документы напрямую действуют как мини\n"
+"разговоры синхронизированные посредством e-mail. Вы можете ответить из\n"
+"OpenERP, и ответы будут автоматически собраны, когда\n"
+"они вернутся, и прикреплены к тому же самому документу *разговора*.\n"
+"\n"
+"Для более специфических потребностей, вы также можете назначить определённые "
+"пользователем действия\n"
+"(технически: действия сервера) запускаемые каждой входящей\n"
+"почтой. \n"
+"    "
 
 #. module: base
 #: help:ir.actions.server,email:0
@@ -9735,6 +11506,9 @@ msgid ""
 "same values as for the condition field.\n"
 "Example: object.invoice_address_id.email, or 'me@example.com'"
 msgstr ""
+"Выражение, которое возвращает адрес e-mail для отправки. Может быть основано "
+"на тех же самых значениях, как и для поля условия.\n"
+"Пример: object.invoice_address_id.email, или 'me@example.com'"
 
 #. module: base
 #: model:ir.module.module,description:base.module_web_hello
@@ -9743,6 +11517,9 @@ msgid ""
 "        OpenERP Web example module.\n"
 "        "
 msgstr ""
+"\n"
+"        Модуль примера веб OpenERP.\n"
+"        "
 
 #. module: base
 #: model:res.country,name:base.gy
@@ -9752,7 +11529,7 @@ msgstr "Гуана"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_product_expiry
 msgid "Products Expiry Date"
-msgstr ""
+msgstr "Срок годности товара"
 
 #. module: base
 #: model:ir.module.module,description:base.module_account
@@ -9786,6 +11563,34 @@ msgid ""
 "module named account_voucher.\n"
 "    "
 msgstr ""
+"\n"
+"Бухгалтерия и управление финансами.\n"
+"====================================\n"
+"\n"
+"Финансовый и бухгалтерский модуль, который покрывает:\n"
+"--------------------------------------------\n"
+"Общий учет\n"
+"Стоимостной/аналитический учёт\n"
+"Бухгалтерия третьей стороны\n"
+"Управление налогами\n"
+"Бюджеты\n"
+"Счета покупателям и от поставщиков\n"
+"Банковские выписки\n"
+"Обработка сверки по партнёрам\n"
+"\n"
+"Создаёт панель для бухгалтеров, которая включает:\n"
+"--------------------------------------------------\n"
+"* Список счетов заказчикам для одобрения\n"
+"* Анализ компании\n"
+"* График задолженностей\n"
+"* График казны\n"
+"\n"
+"Процессы типа поддержки главной книги сделаны через определённые финансовые "
+"журналы (проводки или\n"
+"группирование производятся через журнал) для конкретного отчётного год. Для "
+"обработки ваучеров имеется\n"
+"модуль названный account_voucher.\n"
+"    "
 
 #. module: base
 #: help:ir.actions.act_window,view_type:0
@@ -9858,6 +11663,12 @@ msgid ""
 "- SSL/TLS: SMTP sessions are encrypted with SSL/TLS through a dedicated port "
 "(default: 465)"
 msgstr ""
+"Выбор схемы шифрования соединения:\n"
+"- Отсутствует: сеансы SMTP с простым текстом.\n"
+"- TLS (STARTTLS): шифрование TLS запрошено при начале сеанса SMTP "
+"(рекомендуется)\n"
+"- SSL/TLS: сеансы SMTP зашифрованы с SSL/TLS через выделенный порт (по "
+"умолчанию: 465)"
 
 #. module: base
 #: view:ir.model:0
@@ -9876,21 +11687,29 @@ msgid ""
 "modules like base_report_designer and base_report_creator.\n"
 "    "
 msgstr ""
+"\n"
+"Установщик для скрытой отчётности.\n"
+"==============================\n"
+"\n"
+"Делает доступной настройку скрытой отчётности из которой вы можете "
+"установить\n"
+"модули типа base_report_designer и base_report_creator.\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_synchro
 msgid "Multi-DB Synchronization"
-msgstr ""
+msgstr "Мульти-БД синхронизация"
 
 #. module: base
 #: selection:ir.module.module,complexity:0
 msgid "Expert"
-msgstr ""
+msgstr "Эксперт"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr_holidays
 msgid "Leaves Management"
-msgstr ""
+msgstr "Управление отпусками"
 
 #. module: base
 #: view:ir.actions.todo:0
@@ -9921,6 +11740,9 @@ msgid ""
 "Todo list for CRM leads and opportunities.\n"
 "    "
 msgstr ""
+"\n"
+"Список дел для кандидатов и предложений в CRM.\\n\n"
+"    "
 
 #. module: base
 #: field:ir.actions.act_window.view,view_id:0
@@ -9933,7 +11755,7 @@ msgstr "Вид"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_wiki_sale_faq
 msgid "Wiki: Sale FAQ"
-msgstr ""
+msgstr "Wiki: ЧаВо продаж"
 
 #. module: base
 #: selection:ir.module.module,state:0
@@ -9961,7 +11783,7 @@ msgstr "Базовый"
 #: field:ir.model.data,model:0
 #: field:ir.values,model:0
 msgid "Model Name"
-msgstr ""
+msgstr "Название модели"
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -9979,6 +11801,13 @@ msgid ""
 "outlook, Sunbird, ical, ...\n"
 "    "
 msgstr ""
+"\n"
+"Позволяет синхронизировать календари с другими приложениями.\n"
+"=========================================================\n"
+"\n"
+"Позволит синхронизировать ваши календари OpenERP с вашим телефоном, Outlook, "
+"Sunbird, Ical, ...\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.lr
@@ -10042,6 +11871,7 @@ msgstr "Монако"
 #: view:base.module.import:0
 msgid "Please be patient, this operation may take a few minutes..."
 msgstr ""
+"Пожалуйста, будьте терпеливы , эта операция может занять несколько минут ..."
 
 #. module: base
 #: selection:ir.cron,interval_type:0
@@ -10051,7 +11881,7 @@ msgstr "Минут"
 #. module: base
 #: view:res.currency:0
 msgid "Display"
-msgstr ""
+msgstr "Отображение"
 
 #. module: base
 #: selection:ir.translation,type:0
@@ -10069,17 +11899,17 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_google_map
 msgid "Google Maps on Customers"
-msgstr ""
+msgstr "Google карты по заказчикам"
 
 #. module: base
 #: model:ir.actions.report.xml,name:base.preview_report
 msgid "Preview Report"
-msgstr ""
+msgstr "Предпросмотр отчета"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_purchase_analytic_plans
 msgid "Purchase Analytic Plans"
-msgstr ""
+msgstr "План счетов аналитики закупок"
 
 #. module: base
 #: model:ir.module.module,description:base.module_analytic_journal_billing_rate
@@ -10100,6 +11930,21 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет вам определить, какова норма выставления счёта для "
+"конкретного журнала по данному счёту.\n"
+"============================================================================="
+"=================================\n"
+"\n"
+"Используется главным образом когда пользователь вводит данные своего табеля: "
+"значения воспринимаются и поля авто-заполняются. Но остаётся возможность "
+"смены этих значений.\n"
+"\n"
+"Очевидно, если нет записанных данных для текущего счёта, дано умалчиваемое "
+"значение по данным счёта как обычное, так что этот модуль отлично совместим "
+"со старыми настройками.\n"
+"\n"
+"    "
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_fundrising
@@ -10161,7 +12006,7 @@ msgstr "Недели"
 #: code:addons/base/res/res_company.py:157
 #, python-format
 msgid "VAT: "
-msgstr ""
+msgstr "НДС: "
 
 #. module: base
 #: model:res.country,name:base.af
@@ -10178,17 +12023,17 @@ msgstr "Ошибка !"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_marketing_campaign_crm_demo
 msgid "Marketing Campaign - Demo"
-msgstr ""
+msgstr "Маркетинговая кампания - Демонстрация"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_fetchmail_hr_recruitment
 msgid "eMail Gateway for Applicants"
-msgstr ""
+msgstr "Шлюз e-mail для претендентов"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_coda
 msgid "Belgium - Import bank CODA statements"
-msgstr ""
+msgstr "Бельгия - Импорт банковских выписок CODA"
 
 #. module: base
 #: field:ir.cron,interval_type:0
@@ -10210,7 +12055,7 @@ msgstr "Данный метод более не существует"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_import_google
 msgid "Google Import"
-msgstr ""
+msgstr "Google импорт"
 
 #. module: base
 #: model:res.partner.category,name:base.res_partner_category_12
@@ -10230,7 +12075,7 @@ msgstr "Дата создания"
 #. module: base
 #: view:ir.module.module:0
 msgid "Keywords"
-msgstr ""
+msgstr "Ключевые слова"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_l10n_cn
@@ -10256,12 +12101,12 @@ msgstr ""
 #. module: base
 #: help:ir.model.data,res_id:0
 msgid "ID of the target record in the database"
-msgstr ""
+msgstr "ID целевой записи в базе данных"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_analytic_analysis
 msgid "Contracts Management"
-msgstr ""
+msgstr "Управление контрактами"
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -10286,7 +12131,7 @@ msgstr "Список задач"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_product_visible_discount
 msgid "Prices Visible Discounts"
-msgstr ""
+msgstr "Видимые скидки цен"
 
 #. module: base
 #: field:ir.attachment,datas:0
@@ -10317,6 +12162,21 @@ msgid ""
 "account numbers\n"
 "    "
 msgstr ""
+"\n"
+"Модуль, который расширяет объект позиции стандартной банковской выписки для "
+"улучшения поддержки эл. банкинга.\n"
+"\n"
+"Добавляет\n"
+"- дата валюты\n"
+"- пакетные оплаты\n"
+"- отслеживаемость изменений позиций в банковской выписке\n"
+"- виды позиции банковской выписки\n"
+"- отчёт балансов банковских выписок\n"
+"- улучшения производительности для цифрового импорта банковской выписки "
+"(через контекстный флаг 'ebanking_import')\n"
+"- расширен поиск названия по res.partner.bank для обеспечения поиска по "
+"банку и номерам счетов\n"
+"    "
 
 #. module: base
 #: code:addons/orm.py:1895
@@ -10355,6 +12215,38 @@ msgid ""
 "            "
 "fields_to_search.update(view_root.xpath(\"//field[@select=1]/@name"
 msgstr ""
+"Недостаточно полей для создания вида календаря для %s, пропущена дата "
+"остановки или дата задержки\" % (self._name)))\n"
+"\n"
+"        return view\n"
+"\n"
+"    def _get_default_search_view(self, cr, uid, context=None):\n"
+"        \"\n"
+"        :param cr: database cursor\n"
+"        :param int user: user id\n"
+"        :param dict context: connection context\n"
+"        :returns: an lxml document of the view\n"
+"        :rtype: etree._Element\n"
+"        \"\n"
+"        form_view = self.fields_view_get(cr, uid, False, 'form', "
+"context=context)\n"
+"        tree_view = self.fields_view_get(cr, uid, False, 'tree', "
+"context=context)\n"
+"\n"
+"        # TODO it seems _all_columns could be used instead of fields_get (no "
+"need for translated fields info)\n"
+"        fields = self.fields_get(cr, uid, context=context)\n"
+"        fields_to_search = set(\n"
+"            field for field, descriptor in fields.iteritems()\n"
+"            if descriptor.get('select'))\n"
+"\n"
+"        for view in (form_view, tree_view):\n"
+"            view_root = etree.fromstring(view['arch'])\n"
+"            # Only care about select=1 in xpath below, because select=2 is "
+"covered\n"
+"            # by the custom advanced search in clients\n"
+"            "
+"fields_to_search.update(view_root.xpath(\"//field[@select=1]/@name"
 
 #. module: base
 #: constraint:res.users:0
@@ -10375,12 +12267,12 @@ msgstr "Название службы"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_import_base
 msgid "Framework for complex import"
-msgstr ""
+msgstr "Фреймворк для комплексного импорта"
 
 #. module: base
 #: view:ir.actions.todo.category:0
 msgid "Wizard Category"
-msgstr ""
+msgstr "Категория мастера"
 
 #. module: base
 #: model:ir.module.module,description:base.module_account_cancel
@@ -10393,6 +12285,14 @@ msgid ""
 "journal. If set to true it allows user to cancel entries & invoices.\n"
 "    "
 msgstr ""
+"\n"
+"Позволяет отмену бухгалтерских проводок.\n"
+"=====================================\n"
+"\n"
+"Этот модуль добавляет поле 'Разрешить отмену проводок' в вид формы журнала "
+"учета. Если оно помечено, то это позволяет пользователю отменить проводки и "
+"выставленные счета.\n"
+"    "
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_rule
@@ -10414,7 +12314,7 @@ msgstr "День года: %(doy)s"
 #: model:ir.module.category,name:base.module_category_portal
 #: model:ir.module.module,shortdesc:base.module_portal
 msgid "Portal"
-msgstr ""
+msgstr "Портал"
 
 #. module: base
 #: model:ir.module.module,description:base.module_claim_from_delivery
@@ -10425,6 +12325,11 @@ msgid ""
 "\n"
 "Adds a Claim link to the delivery order.\n"
 msgstr ""
+"\n"
+"Создание претензии из заказа доставки.\n"
+"=====================================\n"
+"\n"
+"Добавляет ссылку претензии к заказу доставки.\n"
 
 #. module: base
 #: view:ir.model:0
@@ -10449,6 +12354,9 @@ msgid ""
 "Please define BIC/Swift code on bank for bank type IBAN Account to make "
 "valid payments"
 msgstr ""
+"\n"
+"Определите, пожалуйста, код БИК/Swift по банку для банковского счёта типа "
+"IBAN для создания правильных платежей"
 
 #. module: base
 #: view:res.lang:0
@@ -10459,6 +12367,7 @@ msgstr "%A - Полное название дня недели."
 #: help:ir.values,user_id:0
 msgid "If set, action binding only applies for this user."
 msgstr ""
+"Если задан, связанное действие применяется только для этого пользователя."
 
 #. module: base
 #: model:res.country,name:base.gw
@@ -10498,11 +12407,17 @@ msgid ""
 "Provide Templates for Chart of Accounts, Taxes for Uruguay\n"
 "\n"
 msgstr ""
+"\n"
+"Общий план счетов\n"
+"=========================\n"
+"\n"
+"Предоставляется шаблон плана счетов, налогов для Уругвая\n"
+"\n"
 
 #. module: base
 #: help:res.company,bank_ids:0
 msgid "Bank accounts related to this company"
-msgstr ""
+msgstr "Банковские счета , связанные с этой компанией"
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_base_partner
@@ -10526,6 +12441,8 @@ msgstr "Сделано"
 msgid ""
 "Specify if missed occurrences should be executed when the server restarts."
 msgstr ""
+"Укажите, если пропущенные события должны быть выполнены при перезапуске "
+"сервера."
 
 #. module: base
 #: model:res.partner.title,name:base.res_partner_title_miss
@@ -10593,6 +12510,12 @@ msgid ""
 "\n"
 "Using this you can directly open Google Map from the URL widget."
 msgstr ""
+"\n"
+"Этот модуль добавляет поле карты Google в адрес партнёра.\n"
+"====================================================\n"
+"\n"
+"Используя это вы можете непосредственно открывать карту Google Map из поля "
+"URL."
 
 #. module: base
 #: field:workflow.activity,action:0
@@ -10614,6 +12537,18 @@ msgid ""
 "    http://files.me.com/nbessi/06n92k.mov\n"
 "                    "
 msgstr ""
+"\n"
+"Примеры для движка Webkit отчёта (report_webkit module).\n"
+"========================================================\n"
+"\n"
+"В этот модуль включён пример отчёта выставления счёта, так же как и мастер "
+"для\n"
+"добавления записей Webkit отчёта по любому документу в системе.\n"
+"\n"
+"Вы можете создать кнопки печати вызвав мастер. Для дополнительных "
+"подробностей смотрите:\n"
+"    http://files.me.com/nbessi/06n92k.mov\\n\n"
+"                    "
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -10694,11 +12629,21 @@ msgid ""
 "    * Product Attributes\n"
 "    "
 msgstr ""
+"\n"
+"Модуль добавляющий изготовителей и свойства в форму ввода товара.\n"
+"====================================================================\n"
+"\n"
+"Теперь вы можете определить следующее для товара:\n"
+"    * Изготовитель\n"
+"    * Название изготовителя товара\n"
+"    * Код изготовителя товара\n"
+"    * Свойства товара\n"
+"    "
 
 #. module: base
 #: model:ir.model,name:base.model_ir_actions_todo_category
 msgid "Configuration Wizard Category"
-msgstr ""
+msgstr "Категория мастера настройки"
 
 #. module: base
 #: view:base.module.update:0
@@ -10735,11 +12680,20 @@ msgid ""
 "accounts with a single statement.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль устанавливает основу для банковских счетов IBAN (международных "
+"номеров банковских счетов) и проверяет их правильность.\n"
+"============================================================================="
+"========================================\n"
+"\n"
+"Возможность извлечь правильно представленные локальные счета из счетов IBAN "
+"одним действием.\n"
+"    "
 
 #. module: base
 #: model:ir.model,name:base.model_ir_mail_server
 msgid "ir.mail_server"
-msgstr ""
+msgstr "ir.mail_server"
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -10754,6 +12708,11 @@ msgid ""
 "the bounds of global ones. The first group rules restrict further than "
 "global rules, but any additional group rule will add more permissions"
 msgstr ""
+"Глобальные правила (не групповые) являются ограничениями и не могут быть "
+"пропущены. Локальные групповые правила предоставляют дополнительные "
+"разрешения, но ограничены в пределах глобальных. Правила первой группы "
+"ограничивают дальше, чем глобальные правила, но любое дополнительное "
+"групповое правило добавит больше разрешений"
 
 #. module: base
 #: field:res.currency.rate,rate:0
@@ -10784,7 +12743,7 @@ msgstr "Область"
 #. module: base
 #: model:ir.ui.menu,name:base.next_id_5
 msgid "Sequences & Identifiers"
-msgstr ""
+msgstr "Нумерация и идентификаторы"
 
 #. module: base
 #: model:ir.module.module,description:base.module_l10n_th
@@ -10805,7 +12764,7 @@ msgstr "Сент-Киттс и Невис Ангилья"
 #. module: base
 #: model:ir.module.category,name:base.module_category_point_of_sale
 msgid "Point of Sales"
-msgstr ""
+msgstr "Кассовый терминал"
 
 #. module: base
 #: model:ir.module.module,description:base.module_hr_payroll_account
@@ -10819,6 +12778,14 @@ msgid ""
 "    * Company Contribution Management\n"
 "    "
 msgstr ""
+"\n"
+"Общая система выплат интегрированная с бухгалтерией.\n"
+"===================================================\n"
+"\n"
+"    * Запись данных зарплаты\n"
+"    * Запись данных выплаты\n"
+"    * Управление удержанием компании\n"
+"    "
 
 #. module: base
 #: code:addons/base/res/res_currency.py:190
@@ -10850,6 +12817,20 @@ msgid ""
 "    * Allow to refund former sales.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль предусматривает быструю и лёгкую обработку продаж.\n"
+"===================================================\n"
+"\n"
+"Основные возможности :\n"
+"---------------\n"
+"    * Быстрый ввод данных продаж.\n"
+"    * Возможность выбора одного способа оплаты (быстрый путь) или разбиение "
+"платежа между несколькими способами оплаты.\n"
+"    * Подсчёт суммы денег для возврата.\n"
+"    * Автоматическое создание и подтверждение списка комплектования.\n"
+"    * Позволяет пользователю автоматически создать счёт.\n"
+"    * Позволяет вернуть прежние продажи.\n"
+"    "
 
 #. module: base
 #: model:ir.actions.act_window,help:base.action_ui_view_custom
@@ -10866,6 +12847,8 @@ msgid ""
 "Checked if this is an OpenERP Publisher's Warranty contract (versus older "
 "contract types"
 msgstr ""
+"Отмечено, если это договор гарантии издателя OpenERP (а не старые типы "
+"договоров"
 
 #. module: base
 #: field:ir.model.fields,model:0
@@ -10905,6 +12888,9 @@ msgid ""
 "Helps you manage your human resources by encoding your employees structure, "
 "generating work sheets, tracking attendance and more."
 msgstr ""
+"Помогает вам в управлении персоналом путём описания структуры подчинения, "
+"созданием рабочих графиков, отслеживанием времени присутствия на рабочем "
+"месте и т.д."
 
 #. module: base
 #: help:ir.model.fields,model_id:0
@@ -10927,6 +12913,14 @@ msgid ""
 "for Wiki Sale FAQ.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль предусматривает шаблон Wiki ЧаВо продаж.\n"
+"===============================================\n"
+"\n"
+"Он предусматривает демо данные, включая создание Wiki группы и Wiki "
+"страницы\n"
+"для Wiki ЧаВо продаж.\n"
+"    "
 
 #. module: base
 #: view:ir.sequence.type:0
@@ -10949,6 +12943,19 @@ msgid ""
 "trigger an automatic reminder email.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет реализовать правила действия для любого объекта.\n"
+"============================================================\n"
+"\n"
+"Использование автоматизированных действий для запуска действий для различных "
+"экранов.\n"
+"\n"
+"Пример: возможность созданная конкретным пользователем может быть "
+"автоматически назначена определённой\n"
+"команде продаж, или предложение, которое остаётся в состоянии ожидания "
+"спустя 14 дней может\n"
+"запустить автоматическое e-mail напоминание.\n"
+"    "
 
 #. module: base
 #: model:ir.actions.act_window,name:base.res_request-act
@@ -10990,6 +12997,14 @@ msgid ""
 "The wizard to launch the report has several options to help you get the data "
 "you need.\n"
 msgstr ""
+"\n"
+"Добавляет меню отчётности в товары, которое подсчитывает продажи, закупки, "
+"маржи и другие интересные показатели основанные на счетах.\n"
+"============================================================================="
+"================================================\n"
+"\n"
+"Мастер для запуска отчёта имеет различные параметры, чтобы помочь вам "
+"получить нужные вам данные.\n"
 
 #. module: base
 #: model:res.country,name:base.al
@@ -11002,6 +13017,9 @@ msgid ""
 "Level of difficulty of module. Easy: intuitive and easy to use for everyone. "
 "Normal: easy to use for business experts. Expert: requires technical skills."
 msgstr ""
+"Уровень сложности модуля. Простой: интуитивен и лёгок в использовании для "
+"всех. Обычный: лёгок в использовании деловыми экспертами. Эксперт: требует "
+"технической квалификации."
 
 #. module: base
 #: code:addons/base/res/res_lang.py:191
@@ -11058,6 +13076,12 @@ msgid ""
 "Price and Cost Price.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль добавляет 'Маржу' в заказ продаж.\n"
+"=============================================\n"
+"\n"
+"Показывает прибыль как разницу между ценой единицы и себестоимостью.\n"
+"    "
 
 #. module: base
 #: model:ir.actions.act_window,help:base.action_res_bank_form
@@ -11104,7 +13128,7 @@ msgstr "Действие со стороны пользователя"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_event_project
 msgid "Retro-Planning on Events"
-msgstr ""
+msgstr "Ретро-планирование по событиям"
 
 #. module: base
 #: code:addons/custom.py:555
@@ -11124,7 +13148,7 @@ msgstr "Хотите стереть Id`ы ? "
 #. module: base
 #: view:res.partner.bank:0
 msgid "Information About the Bank"
-msgstr ""
+msgstr "Информация о банке"
 
 #. module: base
 #: help:ir.actions.server,condition:0
@@ -11142,12 +13166,24 @@ msgid ""
 " - uid: current user id\n"
 " - context: current context"
 msgstr ""
+"Условие, которое проверяется перед выполнением действия, и предотвращает "
+"выполнение, если оно не подтверждено.\n"
+"Пример: object.list_price > 5000\n"
+"Это выражение Python-а, которое может использовать следующие значения:\n"
+" - self: ORM модель записи по которой запускается действие\n"
+" - object или obj: просмотр записи по которой запускается действие\n"
+" - pool: пул модели ORM (т.е. self.pool)\n"
+" - time: модуль времени Python\n"
+" - cr: указатель базы данных\n"
+" - uid: ID текущего пользователя\n"
+" - context: текущий контекст"
 
 #. module: base
 #: view:ir.rule:0
 msgid ""
 "2. Group-specific rules are combined together with a logical OR operator"
 msgstr ""
+"2. Особые групповые правила соединяются вместе логическим оператором OR (ИЛИ)"
 
 #. module: base
 #: model:res.partner.category,name:base.res_partner_category_woodsuppliers0
@@ -11177,7 +13213,7 @@ msgstr "Остановить все"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_analytic_user_function
 msgid "Jobs on Contracts"
-msgstr ""
+msgstr "Работы по договорам"
 
 #. module: base
 #: model:ir.module.module,description:base.module_import_sugarcrm
@@ -11187,6 +13223,10 @@ msgid ""
 "            \"Contacts\", \"Employees\", Meetings, Phonecalls, Emails, and "
 "Project, Project Tasks Data into OpenERP Module."
 msgstr ""
+"Это модуль импорта из SugarCRM \"Кандидатов\", \"Предложений\", "
+"\"Пользователей\", \"Учётных записей\", \n"
+"            \"Контактов\", \"Работников\", встреч, телефонных звонков, e-"
+"mail, и проекта, данных задач проекта в модуль OpenERP."
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_publisher_warranty_contract_add_wizard
@@ -11231,6 +13271,8 @@ msgid ""
 "Lets you install addons geared towards sharing knowledge with and between "
 "your employees."
 msgstr ""
+"Позволяет устанавливать дополнения, предназначенные для обмена знаниями "
+"между вашими сотрудниками."
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -11240,7 +13282,7 @@ msgstr "Арабский / الْعَرَبيّة"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_hello
 msgid "Hello"
-msgstr ""
+msgstr "Привет"
 
 #. module: base
 #: view:ir.actions.configuration.wizard:0
@@ -11255,7 +13297,7 @@ msgstr "Комментарий"
 #. module: base
 #: model:res.groups,name:base.group_hr_manager
 msgid "HR Manager"
-msgstr ""
+msgstr "Менеджер по персоналу"
 
 #. module: base
 #: view:ir.filters:0
@@ -11269,7 +13311,7 @@ msgstr "Ограничение"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_marketing_campaign
 msgid "Marketing Campaigns"
-msgstr ""
+msgstr "Маркетинговые кампании"
 
 #. module: base
 #: code:addons/base/publisher_warranty/publisher_warranty.py:144
@@ -11280,7 +13322,7 @@ msgstr "Ошибка проверки контракта"
 #. module: base
 #: field:ir.values,key2:0
 msgid "Qualifier"
-msgstr ""
+msgstr "Определитель"
 
 #. module: base
 #: field:res.country.state,name:0
@@ -11290,7 +13332,7 @@ msgstr "Название области"
 #. module: base
 #: view:res.lang:0
 msgid "Update Languague Terms"
-msgstr ""
+msgstr "Обновить языковые термины"
 
 #. module: base
 #: field:workflow.activity,join_mode:0
@@ -11305,7 +13347,7 @@ msgstr "Часовой пояс"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_wiki_faq
 msgid "Wiki: Internal FAQ"
-msgstr ""
+msgstr "Wiki: Внутренние ЧаВо"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_actions_report_xml
@@ -11326,6 +13368,15 @@ msgid ""
 "handle an issue.\n"
 "                "
 msgstr ""
+"\n"
+"Этот модуль добавляет поддержку табеля для управления проблемами/ошибками в "
+"проекте.\n"
+"============================================================================="
+"====\n"
+"\n"
+"Могут быть поддержаны рабочие журналы для выражения числа часов затраченных "
+"пользователями на решение проблемы.\n"
+"                "
 
 #. module: base
 #: model:ir.actions.act_window,name:base.ir_sequence_form
@@ -11336,7 +13387,7 @@ msgstr "Нумерация"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Г-жа"
 
 #. module: base
@@ -11405,7 +13456,7 @@ msgstr "Нормальный"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_purchase_double_validation
 msgid "Double Validation on Purchases"
-msgstr ""
+msgstr "Двойное подтверждение по закупкам"
 
 #. module: base
 #: field:res.bank,street2:0
@@ -11462,7 +13513,7 @@ msgstr "Фильтр"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Г-жа"
 
 #. module: base
@@ -11472,6 +13523,9 @@ msgid ""
 "importing a new module you can install it by clicking on the button "
 "\"Install\" from the form view."
 msgstr ""
+"Этот мастер помогает вам импортировать новый модуль в вашу систему OpenERP. "
+"После импорта нового модуля вы можете его установить нажав кнопку "
+"\"Установить\" в виде формы."
 
 #. module: base
 #: model:res.country,name:base.ch
@@ -11505,6 +13559,15 @@ msgid ""
 "picking and invoice. The message is triggered by the form's onchange event.\n"
 "    "
 msgstr ""
+"\n"
+"Модуль для запуска предупреждений в объектах OpenERP.\n"
+"==============================================\n"
+"\n"
+"Предупреждающие сообщения могут быть показаны для объектов типа заказа "
+"продаж, заказа снабжения,\n"
+"комплектования и выставления счёта. Сообщение запускается событием изменения "
+"в форме.\n"
+"    "
 
 #. module: base
 #: code:addons/osv.py:150
@@ -11537,7 +13600,7 @@ msgstr "Сомали"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_mrp_operations
 msgid "Manufacturing Operations"
-msgstr ""
+msgstr "Производственные операции"
 
 #. module: base
 #: selection:publisher_warranty.contract,state:0
@@ -11565,11 +13628,19 @@ msgid ""
 "it to all the users.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль предоставляет функцию посылки сообщений в рамках проекта.\n"
+"=========================================================================\n"
+"\n"
+"Пользователь может посылать индивидуальные сообщения другому пользователю. "
+"Он может даже посылать\n"
+"широковещательные сообщения всем пользователям.\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr
 msgid "Employee Directory"
-msgstr ""
+msgstr "Каталог работника"
 
 #. module: base
 #: view:ir.cron:0
@@ -11603,6 +13674,12 @@ msgid ""
 "This module gives the details of the goods traded between the countries of "
 "European Union "
 msgstr ""
+"\n"
+"Модуль, который добавляет отчёты intrastat.\n"
+"=====================================\n"
+"\n"
+"Этот модуль даёт подробности торговли товарами между странами Европейского "
+"союза "
 
 #. module: base
 #: model:ir.module.module,description:base.module_stock_invoice_directly
@@ -11615,6 +13692,14 @@ msgid ""
 "the invoicing wizard if the delivery is to be invoiced.\n"
 "    "
 msgstr ""
+"\n"
+"Мастер выставления счёта на доставку.\n"
+"============================\n"
+"\n"
+"Когда вы отправляете или получаете товары, этот модуль автоматически "
+"вызывает\n"
+"мастер выставления счёта, если доставка с выставлением счёта.\n"
+"    "
 
 #. module: base
 #: code:addons/orm.py:1388
@@ -11636,12 +13721,12 @@ msgstr "Правильный штрих-код"
 #. module: base
 #: selection:res.company,paper_format:0
 msgid "A4"
-msgstr ""
+msgstr "А4"
 
 #. module: base
 #: field:publisher_warranty.contract,check_support:0
 msgid "Support Level 1"
-msgstr ""
+msgstr "Поддержка уровня 1"
 
 #. module: base
 #: field:res.partner,customer:0
@@ -11677,6 +13762,23 @@ msgid ""
 "lines: Unit price=225, Discount=0,00, Net price=225\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет вам подсчитать скидки по позициям заказа продажи и "
+"позициям счёта по прайс-листу партнёра.\n"
+"============================================================================="
+"==================================\n"
+"\n"
+"В конце в форму прайс-листа добавлен новый флажок названный \"Видимая "
+"скидка\".\n"
+"\n"
+"Пример:\n"
+"    Для продукта ПК1 и партнёра \"Asustek\": если цена по списку=450, а "
+"подсчитанная цена с использованием прайс-листа Asustek - 225\n"
+"    Если флажок установлен, мы будем иметь по позиции заказа продажи: Цена "
+"единицы=450, Скидка=50,00, Чистая цена=225\n"
+"    Если флажок не установлен, мы будем иметь по заказу продажи и позициям "
+"счёта: Цена единицы=225, Скидка=0,00, Чистая цена=225\n"
+"    "
 
 #. module: base
 #: field:ir.module.module,shortdesc:0
@@ -11746,7 +13848,7 @@ msgstr "Тунис"
 #. module: base
 #: view:ir.actions.todo:0
 msgid "Wizards to be Launched"
-msgstr ""
+msgstr "Мастера для запуска"
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_manufacturing
@@ -11762,7 +13864,7 @@ msgstr "Коморские Острова"
 #. module: base
 #: view:res.request:0
 msgid "Draft and Active"
-msgstr ""
+msgstr "Черновой и активный"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_server_action
@@ -11774,7 +13876,7 @@ msgstr "Действия сервера"
 #. module: base
 #: field:res.partner.bank.type,format_layout:0
 msgid "Format Layout"
-msgstr ""
+msgstr "Макет формата"
 
 #. module: base
 #: field:ir.model.fields,selection:0
@@ -11789,7 +13891,7 @@ msgstr "Родитель справа"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_auth_openid
 msgid "OpenID Authentification"
-msgstr ""
+msgstr "Авторизация OpenID"
 
 #. module: base
 #: model:ir.module.module,description:base.module_plugin_thunderbird
@@ -11805,6 +13907,16 @@ msgid ""
 "HR Applicant and Project Issue from selected mails.\n"
 "      "
 msgstr ""
+"\n"
+"Этот модуль требуется для правильной работы плагина Thuderbird.\n"
+"====================================================================\n"
+"\n"
+"Плагин позволяет вам архивировать e-mail и её вложения в выбранные\n"
+"объекты OpenERP. Вы можете выбрать партнёра, задачу, проект, счёт\n"
+"аналитики или иной объект и прикрепить выбранное письмо как .eml файл во\n"
+"вложение выбранной записи. Вы можете создать документы для кандидатов CRM,\n"
+"кандидата ТР и претензии проекта из выбранных писем.\n"
+"      "
 
 #. module: base
 #: view:res.lang:0
@@ -11819,12 +13931,12 @@ msgstr "Копировать объект"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_mail
 msgid "Emails Management"
-msgstr ""
+msgstr "Управление эл.почтой"
 
 #. module: base
 #: field:ir.actions.server,trigger_name:0
 msgid "Trigger Signal"
-msgstr ""
+msgstr "Сигнал запуска"
 
 #. module: base
 #: code:addons/base/res/res_users.py:119
@@ -11851,6 +13963,18 @@ msgid ""
 "    * Repair quotation report\n"
 "    * Notes for the technician and for the final customer\n"
 msgstr ""
+"\n"
+"Цель в наличии завершённого модуля для управления всеми ремонтами товаров. "
+"Этим модулем покрыты следующие темы:\n"
+"============================================================================="
+"==============================================\n"
+"\n"
+"    * Добавление/удаление товаров в ремонт\n"
+"    * Влияние на запасы\n"
+"    * Выставление счетов (товары и/или услуги)\n"
+"    * Понятие гарантии\n"
+"    * Отчёт заявки гарантии\n"
+"    * Замечания для технического и для конечного покупателя\n"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_country_state
@@ -11876,11 +14000,18 @@ msgid ""
 "document and Wiki based Hidden.\n"
 "    "
 msgstr ""
+"\n"
+"Установщик для основанного на знаниях скрытия.\n"
+"====================================\n"
+"\n"
+"Делает доступной настройки приложения знаний, откуда вы можете установить\n"
+"документ и основанное на Wiki скрытие.\n"
+"    "
 
 #. module: base
 #: field:res.groups,trans_implied_ids:0
 msgid "Transitively inherits"
-msgstr ""
+msgstr "Переходящие наследования"
 
 #. module: base
 #: field:ir.default,ref_table:0
@@ -11891,7 +14022,7 @@ msgstr "Ссылка на таблицу"
 #: code:addons/base/ir/ir_mail_server.py:443
 #, python-format
 msgid "Mail delivery failed"
-msgstr ""
+msgstr "Доставка почты не удалось"
 
 #. module: base
 #: field:ir.actions.act_window,res_model:0
@@ -11931,7 +14062,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_analytic_plans
 msgid "Multiple Analytic Plans"
-msgstr ""
+msgstr "Несколько аналитических планов счетов"
 
 #. module: base
 #: model:ir.module.module,description:base.module_project_timesheet
@@ -11947,6 +14078,16 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Синхронизация записей работ по проекту и записей табеля.\n"
+"====================================================================\n"
+"\n"
+"Этот модуль позволяет вам перенос записей по задачам определённым для "
+"управления проектом в\n"
+"записи строк табеля для конкретной даты и для конкретного пользователя с "
+"эффектом создания, изменения и удаления любыми способами.\n"
+"\n"
+"    "
 
 #. module: base
 #: view:ir.sequence:0
@@ -11961,7 +14102,7 @@ msgstr "Планировщик"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_tools
 msgid "Base Tools"
-msgstr ""
+msgstr "Основные инструменты"
 
 #. module: base
 #: help:res.country,address_format:0
@@ -11980,6 +14121,19 @@ msgid ""
 "            \n"
 "%(country_code)s: the code of the country"
 msgstr ""
+"Вы можете установить здесь обычный формат используемый для адресов "
+"принадлежащих этой стране.\n"
+"\n"
+"Вы можете использовать строковый шаблон в стиле Python со всем полем адреса "
+"(например, используйте '%(street)s' для показа поля 'street') плюс\n"
+"            \n"
+"%(state_name)s: название штата/области\n"
+"            \n"
+"%(state_code)s: код штата/области\n"
+"            \n"
+"%(country_name)s: название страны\n"
+"            \n"
+"%(country_code)s: код страны"
 
 #. module: base
 #: model:ir.module.module,description:base.module_pad
@@ -11993,6 +14147,14 @@ msgid ""
 "(by default, http://ietherpad.com/).\n"
 "    "
 msgstr ""
+"\n"
+"Добавляет расширенную поддержку веб-планшета EtherPad в веб-клиент.\n"
+"===================================================================\n"
+"\n"
+"Позволяет компании решить какая копия EtherPad должна быть использована для "
+"связи с новым блокнотом\n"
+"(по умолчанию, http://ietherpad.com/).\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_l10n_uk
@@ -12028,6 +14190,32 @@ msgid ""
 "    * http://controlchaos.com\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль реализует все концепции определённые методологией управления "
+"проектом Scrum для ИТ компаний.\n"
+"============================================================================="
+"============================\n"
+"\n"
+"    * Проект со спринтами, владелец продукта, мастер Scrum\n"
+"    * Спринты с обзорами, дневные встречи, обратные связи\n"
+"    * Задолженность проекта\n"
+"    * Задолженность спринта\n"
+"\n"
+"Это добавляет некоторые концепции в модуль управления проектом:\n"
+"    * Средне-срочную, долго-срочную дорожную карту\n"
+"    * Клиентские/функциональные запросы в сравнении с техническими\n"
+"\n"
+"Он также создаёт новую отчётность:\n"
+"    * диаграмму прожига\n"
+"\n"
+"Проекты и задачи Scrum наследуются из реальных проектов и\n"
+"задач, так что вы можете продолжить работу по обычным задачам, которые будут "
+"также\n"
+"включать задачи из проектов Scrum.\n"
+"\n"
+"Дополнительная информация по методологии на:\n"
+"    * http://controlchaos.com\n"
+"    "
 
 #. module: base
 #: code:addons/base/ir/ir_model.py:371
@@ -12090,7 +14278,7 @@ msgstr ""
 #. module: base
 #: help:ir.cron,args:0
 msgid "Arguments to be passed to the method, e.g. (uid,)."
-msgstr ""
+msgstr "Аргументы, передаваемые методу, напр. (uid,)."
 
 #. module: base
 #: model:res.partner.category,name:base.res_partner_category_5
@@ -12163,6 +14351,20 @@ msgid ""
 "in the form of pdf file. Implements a dashboard for My Current Evaluations\n"
 "         "
 msgstr ""
+"\n"
+"Возможность создания оценки работников.\n"
+"=======================================\n"
+"\n"
+"Может быть создана оценка по подчинённым работникам,\n"
+"как младшим, так и их руководителям. Оценка делается по плану\n"
+"по которому могут быть созданы различные опросы и может быть определено, "
+"какой\n"
+"уровень подчинения работника заполняется и каковы финальное собеседование и "
+"оценка\n"
+"сделанная руководителем. Каждая оценка заполненная работниками может быть "
+"просмотрена\n"
+"в форме файла pdf. Реализована панель для моих текущих оценок\n"
+"         "
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -12224,7 +14426,7 @@ msgstr "Неверные критерии поиска"
 #. module: base
 #: view:ir.mail_server:0
 msgid "Connection Information"
-msgstr ""
+msgstr "Сведения о соединении"
 
 #. module: base
 #: view:ir.attachment:0
@@ -12256,6 +14458,8 @@ msgid ""
 "External Key/Identifier that can be used for data integration with third-"
 "party systems"
 msgstr ""
+"Внешний ключ/идентификатор который может быть использован для интеграции "
+"данных с системами третьих сторон"
 
 #. module: base
 #: model:ir.module.module,description:base.module_mrp_operations
@@ -12290,6 +14494,39 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль добавляет в строки операций заказа производства состояние, дату "
+"начала, дату завершения (во вкладке \"Рабочие центры\").\n"
+"============================================================================="
+"================================\\n\n"
+"\n"
+"Состояния: черновик, подтвердить, сделан, отмена\n"
+"При завершении/подтверждении, отмене производственных заказов устанавливает "
+"все строки состояния в соответствующее состояние\n"
+"\n"
+"Создаёт меню:\n"
+"    Производство > Производство > Наряды\n"
+"\n"
+"Которое является видом строк по \"Рабочим центрам\" в заказе производства.\n"
+"\n"
+"Добавляет в вид формы заказа производства кнопки под вкладкой рабочего "
+"центра:\n"
+"    * начать (устанавливает состояние для подтверждения), устанавливает дату "
+"начала\n"
+"    * сделан (устанавливает состояние в сделан), устанавливает дату "
+"завершения\n"
+"    * установить в черновик (устанавливает состояние в черновик)\n"
+"    * отмена устанавливает состояние в отмена\n"
+"\n"
+"Когда заказ производства становится \"готовым для изготовления\", операции "
+"должны\n"
+"стать 'подтверждёнными'. Когда заказ производства сделан, все операции\n"
+"должны стать сделанными.\n"
+"\n"
+"Поле задержки - задержка (конечная дата - начальная дата).\n"
+"Так что мы можем сравнить теоретическую задержку и реальную задержку.\n"
+"\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,description:base.module_auction
@@ -12313,6 +14550,24 @@ msgid ""
 "    * Objects By Day (graph)\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль управляет записями артистов, предметами аукциона, покупателями и "
+"продавцами.\n"
+"============================================================================="
+"====\n"
+"\n"
+"Он полностью управляет аукционом так, как обслуживает ставки,\n"
+"отслеживает проданные предметы вместе с оплаченными\n"
+"и не оплаченными объектами, включая доставку предметов.\n"
+"\n"
+"Панель для аукциона включает:\n"
+"    * последние объекты (список)\n"
+"    * последние депозиты (список)\n"
+"    * статистики объектов (список)\n"
+"    * итоговые результаты (график)\\n\n"
+"    * мин./рез./макс. (график)\n"
+"    * объекты по дню (график)\n"
+"    "
 
 #. module: base
 #: model:ir.module.module,description:base.module_base_crypt
@@ -12349,6 +14604,41 @@ msgid ""
 "\n"
 "                    "
 msgstr ""
+"\n"
+"Заменяет простые текстовые пароли в базе данных на защищённые хэши\n"
+"===============================================================\n"
+"Для существующей базы пользователей, удаление простых текстовых\n"
+"паролей осуществляется немедленно, когда вы устанавите base_crypt.\n"
+"\n"
+"Все пароли будут заменены на защищённые, изменённые, шифрованные\n"
+"хэши, предотвращающие чтение кем-либо оригинального пароля в\n"
+"базе данных.\n"
+"\n"
+"После установки этого модуля невозможно восстановление\n"
+"забытого пароля, есть только одно решение для этой ситуации -\n"
+"администратор может задать новый пароль.\n"
+"\n"
+"Предупреждение защиты\n"
+"++++++++++++++++\n"
+"Установка этого модуля не означает, что вы можете игнорировать другие "
+"настройки защиты,\n"
+"поскольку пароль остаётся не зашифрованным при передаче по сети, если вы\n"
+"не используете защищённый протокол, такой как XML-RPCS или HTTPS.\n"
+"Это также не защищает основу содержимого базы данных, которая может\n"
+"содержать критические данные. Соответствующие средства защиты необходимо "
+"осуществить\n"
+"системному администратору во всех областях, таких как: защита резервирования "
+"базы\n"
+"данных, системных файлов, удалённого доступа к системе, физического доступа "
+"к серверу, и т.д.\n"
+"\n"
+"Взаимодействие с аутентификацией LDAP\n"
+"+++++++++++++++++++++++++++++++++++\n"
+"Этот модуль сейчас не совместим с модулем ``user_ldap`` и\n"
+"будет полностью лишать возможности LDAP аутентификации, если установлен "
+"одновременно.\n"
+"\n"
+"                    "
 
 #. module: base
 #: field:ir.actions.act_window,view_id:0
@@ -12358,12 +14648,12 @@ msgstr "Ссылка на вид"
 #. module: base
 #: model:ir.module.category,description:base.module_category_sales_management
 msgid "Helps you handle your quotations, sale orders and invoicing."
-msgstr ""
+msgstr "Помогает вам обрабатывать ваши предложения, заказы продаж и счета."
 
 #. module: base
 #: field:res.groups,implied_ids:0
 msgid "Inherits"
-msgstr ""
+msgstr "Наследует"
 
 #. module: base
 #: selection:ir.translation,type:0
@@ -12373,7 +14663,7 @@ msgstr "Выбор"
 #. module: base
 #: field:ir.module.module,icon:0
 msgid "Icon URL"
-msgstr ""
+msgstr "URL иконки"
 
 #. module: base
 #: field:ir.actions.act_window,type:0
@@ -12408,6 +14698,16 @@ msgid ""
 "Chad, Togo.\n"
 "    "
 msgstr ""
+"Этот модуль реализует план счетов для области OHADA.\n"
+"    Он позволяет любой компании или объединению управлять финансовым "
+"учётом.\n"
+"    Страны, которые используют OHADA следующие:\n"
+"    Бенин, Буркина Фасо, Камерун, Центрально Африканская Республика, Коморы, "
+"Конго,\n"
+"    Берег Слоновой Кости, Габон, Гвинея, Гвинея Биссау,\n"
+"    Экваториальная Гвинея, Мали, Нигер, Демократическая Республика Конго, "
+"Сенегал, Чад, Того.\n"
+"    "
 
 #. module: base
 #: view:base.language.import:0
@@ -12449,7 +14749,7 @@ msgstr "Коста-Рика"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_module_doc_rst
 msgid "Generate Docs of Modules"
-msgstr ""
+msgstr "Документирование модулей"
 
 #. module: base
 #: model:res.company,overdue_msg:base.main_company
@@ -12461,11 +14761,16 @@ msgid ""
 "queries regarding your account, please contact us.\n"
 "Thank you in advance.\n"
 msgstr ""
+"Наши записи показывают, что следующие платежи по прежнему не оплачены.\n"
+"Если они уже были оплачены, пожалуйста проигнорируйте это сообщение. \n"
+"Тем не менее, если у Вас есть какие-либо вопросы, касающиеся вашего счета, \n"
+"пожалуйста, свяжитесь с нами.\n"
+"Спасибо заранее.\n"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_users_ldap
 msgid "Authentication via LDAP"
-msgstr ""
+msgstr "Авторизация с помощью LDAP"
 
 #. module: base
 #: view:workflow.activity:0
@@ -12488,12 +14793,12 @@ msgstr "Валюты"
 #: model:ir.model,name:base.model_ir_actions_client
 #: selection:ir.ui.menu,action:0
 msgid "ir.actions.client"
-msgstr ""
+msgstr "ir.actions.client"
 
 #. module: base
 #: help:ir.values,value:0
 msgid "Default value (pickled) or reference to an action"
-msgstr ""
+msgstr "Значение по умолчанию или ссылка на действие"
 
 #. module: base
 #: sql_constraint:res.groups:0
@@ -12511,6 +14816,13 @@ msgid ""
 "you can modify in OpenOffice. Once you have modified it you can\n"
 "upload the report using the same wizard.\n"
 msgstr ""
+"\n"
+"Этот модуль используется совместно с OpenERP плагином OpenOffice.\n"
+"=========================================================\n"
+"\n"
+"Этот модуль добавляет мастер для импорта/экспорта .sxw отчёта, который\n"
+"вы можете изменить в OpenOffice. После того как вы измените его, вы можете\n"
+"выгрузить отчёт используя тот же самый мастер.\n"
 
 #. module: base
 #: view:ir.sequence:0
@@ -12548,11 +14860,23 @@ msgid ""
 "If you need to manage your meetings, you should install the CRM module.\n"
 "    "
 msgstr ""
+"\n"
+"Это полнофункциональная календарная система.\n"
+"========================================\n"
+"\n"
+"Она поддерживает:\n"
+"    - Календарь событий\n"
+"    - Тревоги (создание запросов)\n"
+"    - Повторные события\n"
+"    - Приглашения людям\n"
+"\n"
+"Если вам нужно управлять вашими встречами, вы должны установить модуль CRM.\n"
+"    "
 
 #. module: base
 #: view:ir.rule:0
 msgid "Rule definition (domain filter)"
-msgstr ""
+msgstr "Определение правила (фильтр ограничений)"
 
 #. module: base
 #: model:ir.model,name:base.model_workflow_instance
@@ -12600,12 +14924,12 @@ msgstr "Инфо-панели"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_procurement
 msgid "Procurements"
-msgstr ""
+msgstr "Снабжение"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_hr_payroll_account
 msgid "Payroll Accounting"
-msgstr ""
+msgstr "Учёт заработной платы"
 
 #. module: base
 #: help:ir.attachment,type:0
@@ -12615,12 +14939,12 @@ msgstr "Двоичный файл или внешний URL"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_sale_order_dates
 msgid "Dates on Sales Order"
-msgstr ""
+msgstr "Даты по заказу продаж"
 
 #. module: base
 #: view:ir.attachment:0
 msgid "Creation Month"
-msgstr ""
+msgstr "Месяц создания"
 
 #. module: base
 #: model:res.country,name:base.nl
@@ -12642,6 +14966,19 @@ msgid ""
 "technical OpenERP documentation at http://doc.openerp.com\n"
 "    "
 msgstr ""
+"\n"
+"Предоставляет общую платформу , которую могут использовать другие "
+"приложения\n"
+"==============================================================\n"
+"\n"
+"ОЭД(EDI) - обмен электронными документами\n"
+"OpenERP определяет общий формат ОЭД для обмена деловыми\n"
+"документами между различными системами и предусматривает общие\n"
+"механизмы для их импорта и экспорта.\n"
+"\n"
+"Более подробно о формате ОЭД OpenERP можно найти в\n"
+"технической документацииl OpenERP на http://doc.openerp.com\n"
+"    "
 
 #. module: base
 #: model:ir.ui.menu,name:base.next_id_4
@@ -12651,12 +14988,12 @@ msgstr "Объекты нижнего уровня"
 #. module: base
 #: help:ir.values,model:0
 msgid "Model to which this entry applies"
-msgstr ""
+msgstr "Модель, к которой применяется эта запись"
 
 #. module: base
 #: field:res.country,address_format:0
 msgid "Address Format"
-msgstr ""
+msgstr "Формат адреса"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_values
@@ -12666,7 +15003,7 @@ msgstr "Значения"
 #. module: base
 #: model:res.groups,name:base.group_no_one
 msgid "Technical Features"
-msgstr ""
+msgstr "Технические характеристики"
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -12680,18 +15017,20 @@ msgid ""
 "Here is what we got instead:\n"
 " %s"
 msgstr ""
+"Вот, что мы получили вместо:\n"
+" %s"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_model_data
 #: view:ir.model.data:0
 #: model:ir.ui.menu,name:base.ir_model_data_menu
 msgid "External Identifiers"
-msgstr ""
+msgstr "Внешние идентификаторы"
 
 #. module: base
 #: model:res.groups,name:base.group_sale_salesman
 msgid "User - Own Leads Only"
-msgstr ""
+msgstr "Только кандидаты принадлежащие пользователю"
 
 #. module: base
 #: model:res.country,name:base.cd
@@ -12735,7 +15074,7 @@ msgstr "Количество звонков"
 #: code:addons/base/res/res_bank.py:189
 #, python-format
 msgid "BANK"
-msgstr ""
+msgstr "БАНК"
 
 #. module: base
 #: view:base.module.upgrade:0
@@ -12774,7 +15113,7 @@ msgstr ""
 #. module: base
 #: view:res.config:0
 msgid "Apply"
-msgstr ""
+msgstr "Применить"
 
 #. module: base
 #: field:res.request,trigger_date:0
@@ -12798,11 +15137,14 @@ msgid ""
 "        OpenERP Web kanban view.\n"
 "        "
 msgstr ""
+"\n"
+"        OpenERP веб канбан вид.\n"
+"        "
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_project_management_time_tracking
 msgid "Time Tracking"
-msgstr ""
+msgstr "Учет времени"
 
 #. module: base
 #: view:res.partner.category:0
@@ -12821,6 +15163,8 @@ msgid ""
 "Helps you manage your inventory and main stock operations: delivery orders, "
 "receptions, etc."
 msgstr ""
+"Помогает управлять инвентаризацией и основными складскими операциями : "
+"заказами доставки, получениями и т.д."
 
 #. module: base
 #: model:ir.model,name:base.model_base_module_update
@@ -12925,6 +15269,101 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Добавляет поддержку авторизации через LDAP сервер.\n"
+"===============================================\n"
+"Этот модуль позволяет пользователям входить с их именем пользователя и "
+"паролём LDAP,\n"
+"и автоматически создаст на лету пользователей для OpenERP.\n"
+"\n"
+"**Примечание**: этот модуль работает только на серверах имеющих "
+"установленный модуль\n"
+"``ldap`` Python-а.\n"
+"\n"
+"Настройка\n"
+"+++++++++++++\n"
+"После установки этого модуля, вам нужно настроить параметры\n"
+"LDAP во вкладке настройки подробностей компании.\n"
+"Различные компании могут иметь отличающиеся серверы LDAP, поскольку\n"
+"они имеют уникальные имена пользователей (имена пользователей в\n"
+"OpenERP нужны уникальные, даже для многих компаний).\n"
+"\n"
+"Анонимная связь LDAP также поддерживается (для тех серверов LDAP,\n"
+"которые это разрешают), при простейшем сохранении пустыми пользователя и "
+"пароля LDAP\n"
+"в настройках LDAP. Это делает **не** позволительной\n"
+"анонимную аутентификацию для пользователей, это только для учётной записи "
+"мастера\n"
+"LDAP, которая используется для проверки существовал ли пользователь перед\n"
+"попыткой его аутентификации.\n"
+"\n"
+"Защита соединения с STARTTLS доступна для серверов LDAP\n"
+"поддерживающих её, при разрешении параметра TLS в настройках\n"
+"LDAP.\n"
+"\n"
+"Для дальнейших установки параметров настройки LDAP, обратитесь к странице\n"
+"руководства ldap.conf: manpage:`ldap.conf(5)`.\n"
+"\n"
+"Соображения защиты\n"
+"+++++++++++++++++++++++\n"
+"Пароли пользователей LDAP никогда не сохраняются в базе данных OpenERP,\n"
+"LDAP сервер запрашивается всякий раз, когда пользователю нужно быть\n"
+"авторизованным. Не происходит дублирования паролей, и\n"
+"пароли обслуживаются только в одном месте.\n"
+"\n"
+"OpenERP не обслуживает изменение паролей в LDAP, так что\n"
+"любые изменения пароля должны быть проведены другими средствами\n"
+"непосредственно в каталоге LDAP (для пользователей LDAP).\n"
+"\n"
+"Возможно также иметь локальных пользователей OpenERP в\n"
+"базе данных наряду с LDAP-авторизованными пользователями (учётная запись\n"
+"администратора - очевидный пример).\n"
+"\n"
+"Вот как это работает:\n"
+"\n"
+"  * Система сначала пытается аутентифицировать пользователей через\n"
+"    локальную базу данных OpenERP;\n"
+"  * если эта аутентификация не проходит (например из-за того, что\n"
+"    у пользователя нет локального пароля), система пытается\n"
+"    авторизоваться через LDAP;\n"
+"\n"
+"Поскольку пользователи LDAP имеют по умолчанию пустые пароли в локальной\n"
+"базе данных OpenERP (что означает нет доступа), первый шаг\n"
+"всегда проваливается и запрашивается сервер LDAP для выполнения\n"
+"авторизации.\n"
+"\n"
+"Разрешение STARTTLS предполагает, что запрос авторизации к\n"
+"серверу LDAP зашифрован.\n"
+"\n"
+"Шаблон пользователя\n"
+"+++++++++++++\n"
+"В настройках LDAP в форме компании, возможно\n"
+"выбрать *Шаблон пользователя*. Если задан, этот пользователь будет "
+"использован как\n"
+"шаблон для создания локальных пользователей несмотря на то, что кто-то "
+"авторизуется\n"
+"первое время через LDAP.\n"
+"Это позволяет сделать предустановку групп по умолчанию и меню\n"
+"для новых пользователей.\n"
+"\n"
+"**Внимание**: если вы задаёте пароль для шаблона пользователя,\n"
+"этот пароль будет назначен как локальный пароль для каждого нового\n"
+"пользователя LDAP, эффективнее задание *мастер пароля* для этих\n"
+"пользователей (до его ручного изменения). Обычно вам это не нужно.\n"
+"Один простой путь для задания шаблона пользователя - единожды войти как\n"
+"допустимый пользователь LDAP, позволить OpenERP создать пустого локального "
+"пользователя с\n"
+"тем же именем (и пустым паролём), затем переименовать этого нового "
+"пользователя\n"
+"на пользователя, который не существует в LDAP, и задать его\n"
+"группы по вашему желанию.\n"
+"\n"
+"Взаимодействие с шифрацией базы\n"
+"+++++++++++++++++++++++++++\n"
+"Модуль base_crypt не совместим с этим модулем, и\n"
+"отключит аутентификацию LDAP, если установлен одновременно.\n"
+"\n"
+"    "
 
 #. module: base
 #: field:res.request.history,body:0
@@ -12935,7 +15374,7 @@ msgstr "Содержимое"
 #: code:addons/base/ir/ir_mail_server.py:199
 #, python-format
 msgid "Connection test succeeded!"
-msgstr ""
+msgstr "Проверка соединения удалось!"
 
 #. module: base
 #: view:partner.massmail.wizard:0
@@ -12979,11 +15418,13 @@ msgid ""
 "Please define at least one SMTP server, or provide the SMTP parameters "
 "explicitly."
 msgstr ""
+"Определите, пожалуйста, хотя бы один SMTP сервер, или точно предоставьте "
+"параметры SMTP."
 
 #. module: base
 #: view:ir.attachment:0
 msgid "Filter on my documents"
-msgstr ""
+msgstr "Фильтр по моим документам"
 
 #. module: base
 #: help:ir.actions.server,code:0
@@ -12991,6 +15432,9 @@ msgid ""
 "Python code to be executed if condition is met.\n"
 "It is a Python block that can use the same values as for the condition field"
 msgstr ""
+"Код Python-а для исполнения, если выполнено условие.\n"
+"Это блок Python-а, который может использовать те же самые значения, как и "
+"для поля условия"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_partner_supplier_form
@@ -13022,7 +15466,7 @@ msgstr "Габон"
 #. module: base
 #: model:res.groups,name:base.group_multi_company
 msgid "Multi Companies"
-msgstr ""
+msgstr "Мульти-компании"
 
 #. module: base
 #: view:ir.model:0
@@ -13041,7 +15485,7 @@ msgstr "Гренландия"
 #. module: base
 #: model:res.groups,name:base.group_sale_salesman_all_leads
 msgid "User - All Leads"
-msgstr ""
+msgstr "Пользователь - все кандидаты"
 
 #. module: base
 #: field:res.partner.bank,acc_number:0
@@ -13054,6 +15498,8 @@ msgid ""
 "Example: GLOBAL_RULE_1 AND GLOBAL_RULE_2 AND ( (GROUP_A_RULE_1 OR "
 "GROUP_A_RULE_2) OR (GROUP_B_RULE_1 OR GROUP_B_RULE_2) )"
 msgstr ""
+"Пример: GLOBAL_RULE_1 AND GLOBAL_RULE_2 AND ( (GROUP_A_RULE_1 OR "
+"GROUP_A_RULE_2) OR (GROUP_B_RULE_1 OR GROUP_B_RULE_2) )"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_l10n_th
@@ -13090,6 +15536,25 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет вовремя вычислять заказы снабжения.\n"
+"==================================================================\n"
+"\n"
+"Если вы установили этот модуль, вам больше не понадобится регулярное "
+"выполнение\n"
+"планировщика снабжения (но у вас остаётся необходимость запуска планировщика "
+"\n"
+"минимума заказа, или, например, установить его ежедневный запуск.)\n"
+"Все заказы снабжения будут обработаны немедленно, что может в некоторых\n"
+"случаях вызвать небольшое влияние на производительность.\n"
+"\n"
+"Это может также увеличить размер вашего запаса, поскольку продукты "
+"запасаются как только\n"
+"возможно и диапазон времени планировщика никак не принимается во внимание.\n"
+"В этом случае, вы никак не можете использовать приоритеты по различным "
+"комплектованиям.\n"
+"\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.cy
@@ -13106,7 +15571,7 @@ msgstr "Тема"
 #. module: base
 #: selection:res.currency,position:0
 msgid "Before Amount"
-msgstr ""
+msgstr "Предварительный итог"
 
 #. module: base
 #: field:res.request,act_from:0
@@ -13127,12 +15592,12 @@ msgstr "Потребители"
 #. module: base
 #: view:res.company:0
 msgid "Set Bank Accounts"
-msgstr ""
+msgstr "Задать банковские счета"
 
 #. module: base
 #: field:ir.actions.client,tag:0
 msgid "Client action tag"
-msgstr ""
+msgstr "Тег действия клиента"
 
 #. module: base
 #: code:addons/base/res/res_lang.py:189
@@ -13144,7 +15609,7 @@ msgstr ""
 #. module: base
 #: field:ir.values,model_id:0
 msgid "Model (change only)"
-msgstr ""
+msgstr "Модель (только смена)"
 
 #. module: base
 #: model:ir.module.module,description:base.module_marketing_campaign_crm_demo
@@ -13157,12 +15622,19 @@ msgid ""
 "marketing_campaign.\n"
 "    "
 msgstr ""
+"\n"
+"Демо данные для модуля marketing_campaign.\n"
+"============================================\n"
+"\n"
+"Создаёт демо данные типа возможностей, кампаний и сегментов для модуля "
+"marketing_campaign.\n"
+"    "
 
 #. module: base
 #: selection:ir.actions.act_window.view,view_mode:0
 #: selection:ir.ui.view,type:0
 msgid "Kanban"
-msgstr ""
+msgstr "Kanban"
 
 #. module: base
 #: code:addons/base/ir/ir_model.py:251
@@ -13177,12 +15649,12 @@ msgstr ""
 #. module: base
 #: view:ir.filters:0
 msgid "Current User"
-msgstr ""
+msgstr "Текущий пользователь"
 
 #. module: base
 #: field:res.company,company_registry:0
 msgid "Company Registry"
-msgstr ""
+msgstr "Регистрация компании"
 
 #. module: base
 #: view:ir.actions.report.xml:0
@@ -13194,7 +15666,7 @@ msgstr "Прочее"
 #: view:ir.mail_server:0
 #: model:ir.ui.menu,name:base.menu_mail_servers
 msgid "Outgoing Mail Servers"
-msgstr ""
+msgstr "Сервера отправки почты"
 
 #. module: base
 #: model:res.country,name:base.cn
@@ -13207,6 +15679,8 @@ msgid ""
 "The object that should receive the workflow signal (must have an associated "
 "workflow)"
 msgstr ""
+"Объект, который должен получить сигнал рабочего процесса (должен иметь "
+"связанный рабочий процесс)"
 
 #. module: base
 #: model:ir.module.category,description:base.module_category_account_voucher
@@ -13214,6 +15688,8 @@ msgid ""
 "Allows you to create your invoices and track the payments. It is an easier "
 "version of the accounting module for managers who are not accountants."
 msgstr ""
+"Позволяет Вам выставлять счета и отслеживать платежи. Это упрощенная версия "
+"бухгалтерского модуля для менеджеров, не являющихся бухгалтерами."
 
 #. module: base
 #: model:res.country,name:base.eh
@@ -13223,7 +15699,7 @@ msgstr "Западная Сахара"
 #. module: base
 #: model:ir.module.category,name:base.module_category_account_voucher
 msgid "Invoicing & Payments"
-msgstr ""
+msgstr "Выставление счетов и платежи"
 
 #. module: base
 #: model:ir.actions.act_window,help:base.action_res_company_form
@@ -13426,11 +15902,28 @@ msgid ""
 "using it, otherwise it may crash.\n"
 "    "
 msgstr ""
+"\n"
+"Назначение этого модуля - проверка качества других модулей.\n"
+"================================================================\n"
+"\n"
+"Он определяет мастер по списку модулей в OpenERP, который позволяет вам\n"
+"оценить их по различным критериям, таким как: соответствие стандартам\n"
+"кодирования OpenERP, эффективной скорости...\n"
+"\n"
+"Этот модуль предусматривает также общий фреймворк для определения вашего "
+"собственного теста качества.\n"
+"Для дальнейшей информации, программисты могут заглянуть в "
+"base_module_quality\\README.txt\n"
+"\n"
+"ВНИМАНИЕ: этот модуль не может работать как ZIP-файл, вы должны распаковать "
+"его перед\n"
+"использованием, иначе он может потерпеть крах.\n"
+"    "
 
 #. module: base
 #: field:res.partner.bank,bank_name:0
 msgid "Bank Name"
-msgstr ""
+msgstr "Название банка"
 
 #. module: base
 #: model:res.country,name:base.ki
@@ -13463,6 +15956,20 @@ msgid ""
 "supplier in the routing of the assembly operation.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль промежуточного процесса комплектования для обеспечения сырьем "
+"производственных заказов.\n"
+"============================================================================="
+"====================\n"
+"\n"
+"Один пример использования этого модуля - управление производством сделанным "
+"вашими\n"
+"поставщиками (суб-договорными). Для выполнения этого, задайте собираемый "
+"товар,\n"
+"который является суб-договорным для \"Нет авто-комплектования\" и помещён в "
+"место хранения\n"
+"поставщика в маршрутизации операции сборки.\n"
+"    "
 
 #. module: base
 #: view:ir.actions.server:0
@@ -13476,6 +15983,9 @@ msgid ""
 "are available. To add a new language, you can use the 'Load an Official "
 "Translation' wizard available from the 'Administration' menu."
 msgstr ""
+"Язык по умолчанию используемый для графического интерфейса пользователя, "
+"когда доступны переводы. Для добавления нового языка вы можете использовать "
+"мастер 'Загрузить официальный перевод' доступный из меню 'Администрирование'."
 
 #. module: base
 #: model:ir.module.module,description:base.module_l10n_es
@@ -13509,7 +16019,7 @@ msgstr "Файл .CSV"
 #: code:addons/base/res/res_company.py:154
 #, python-format
 msgid "Phone: "
-msgstr ""
+msgstr "Телефон: "
 
 #. module: base
 #: field:res.company,account_no:0
@@ -13544,11 +16054,19 @@ msgid ""
 "plans.\n"
 "    "
 msgstr ""
+"\n"
+"Основной модуль для управления разнесением аналитики и заказами закупки.\n"
+"====================================================================\n"
+"\n"
+"Позволяет пользователю поддерживать различные аналитические планы. Позволяет "
+"вам разбить\n"
+"позицию заказа закупки на несколько счетов и аналитических планов.\n"
+"    "
 
 #. module: base
 #: field:res.company,vat:0
 msgid "Tax ID"
-msgstr ""
+msgstr "ID налога"
 
 #. module: base
 #: field:ir.model.fields,field_description:0
@@ -13660,6 +16178,26 @@ msgid ""
 "state are scheduled with taking the phase's start date\n"
 "    "
 msgstr ""
+"\n"
+"Модуль управления долгосрочным проектом, который отслеживает планирование, "
+"планировщики, назначение ресурсов.\n"
+"============================================================================="
+"==============\n"
+"\n"
+"Возможности\n"
+"--------\n"
+"    * Управление большим проектом.\n"
+"    * Определение различных этапов проекта.\n"
+"    * Подсчёт планирования этапа: подсчёт даты начала и конечной даты этапов "
+"данного проекта, которые в состоянии черновик, открыто и ожидание.\n"
+"      Если не задан проект, то будут приняты все этапы: черновик, открыто и "
+"ожидание.\n"
+"    * Подсчёт планирования задачи - работает также как кнопка планировщика "
+"по этапу проекта. Он принимает проект в качестве аргумента и подсчитывает "
+"задачи на всех этапах: черновик, открыто и ожидание.\n"
+"    * Планирование задач: все задачи, которые в состоянии: черновик, "
+"ожидание и открыто, запланированы с принятием начальной даты этапа\n"
+"    "
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_workflow_activity_form
@@ -13672,7 +16210,7 @@ msgstr "Действия"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_product
 msgid "Products & Pricelists"
-msgstr ""
+msgstr "Товары и прайс-листы"
 
 #. module: base
 #: field:ir.actions.act_window,auto_refresh:0
@@ -13698,7 +16236,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_stock_no_autopicking
 msgid "Picking Before Manufacturing"
-msgstr ""
+msgstr "Комплектование перед изготовлением"
 
 #. module: base
 #: model:res.country,name:base.wf
@@ -13718,12 +16256,12 @@ msgstr "Греция"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_calendar
 msgid "web calendar"
-msgstr ""
+msgstr "веб-календарь"
 
 #. module: base
 #: field:ir.model.data,name:0
 msgid "External Identifier"
-msgstr ""
+msgstr "Внешний идентификатор"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.grant_menu_access
@@ -13740,7 +16278,7 @@ msgstr "Правила не поддерживаются для объектов
 #: model:ir.module.module,shortdesc:base.module_event
 #: model:ir.ui.menu,name:base.menu_event_main
 msgid "Events Organisation"
-msgstr "Организация событий"
+msgstr "Организация мероприятий"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.ir_sequence_actions
@@ -13754,7 +16292,7 @@ msgstr "Действия"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_delivery
 msgid "Delivery Costs"
-msgstr ""
+msgstr "Стоимость доставки"
 
 #. module: base
 #: code:addons/base/ir/ir_cron.py:293
@@ -13763,6 +16301,8 @@ msgid ""
 "This cron task is currently being executed and may not be modified, please "
 "try again in a few minutes"
 msgstr ""
+"Эта задача планировщика (cron) сейчас исполняется и не может быть изменена, "
+"попытайтесь, пожалуйста, снова через несколько минут"
 
 #. module: base
 #: model:ir.module.module,description:base.module_product_expiry
@@ -13779,6 +16319,17 @@ msgid ""
 "\n"
 "Used, for example, in food industries."
 msgstr ""
+"\n"
+"Отслеживает различные даты по товарам и партиям производства.\n"
+"======================================================\n"
+"\n"
+"Могут быть отслежены следующие даты:\n"
+"    - конец жизни\n"
+"    - срок годности\n"
+"    - дата удаления\n"
+"    - дата предупреждения\n"
+"\n"
+"Используется, например, в пищевой промышленности."
 
 #. module: base
 #: field:ir.exports.line,export_id:0
@@ -13808,6 +16359,9 @@ msgid ""
 "        OpenERP Web process view.\n"
 "        "
 msgstr ""
+"\n"
+"        Вид веб процесса OpenERP.\n"
+"        "
 
 #. module: base
 #: model:ir.module.module,description:base.module_account_chart
@@ -13818,6 +16372,11 @@ msgid ""
 "\n"
 "Deactivates minimal chart of accounts.\n"
 msgstr ""
+"\n"
+"Удаление минимального плана счетов.\n"
+"=============================\n"
+"\n"
+"Деактивирует минимальный план счетов.\n"
 
 #. module: base
 #: code:addons/base/ir/ir_actions.py:653
@@ -13855,7 +16414,7 @@ msgstr "Ошибка"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_base_crypt
 msgid "DB Password Encryption"
-msgstr ""
+msgstr "Шифрование пароля БД"
 
 #. module: base
 #: help:workflow.transition,act_to:0
@@ -13865,7 +16424,7 @@ msgstr "Целевое действие."
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_check_writing
 msgid "Check writing"
-msgstr ""
+msgstr "Проверьте написание"
 
 #. module: base
 #: model:ir.module.module,description:base.module_sale_layout
@@ -13881,6 +16440,16 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль предоставляет возможности улучшения макета заказа продаж.\n"
+"=======================================================================\n"
+"\n"
+"Он даёт вам возможность\n"
+"    * упорядочить все позиции заказа продаж\n"
+"    * добавить заголовки, строки комментариев, строки подитогов\n"
+"    * чертить горизонтальные линии и помещать разрывы страниц\n"
+"\n"
+"    "
 
 #. module: base
 #: view:base.module.update:0
@@ -13897,7 +16466,7 @@ msgstr "Техническое руководство"
 #. module: base
 #: view:res.company:0
 msgid "Address Information"
-msgstr ""
+msgstr "Адресная информация"
 
 #. module: base
 #: model:res.country,name:base.tz
@@ -13922,7 +16491,7 @@ msgstr "Остров Рождества"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web_livechat
 msgid "Live Chat Support"
-msgstr ""
+msgstr "Техподдержка в режиме живого общения"
 
 #. module: base
 #: view:ir.actions.server:0
@@ -13941,11 +16510,14 @@ msgid ""
 "        OpenERP Web dashboard view.\n"
 "        "
 msgstr ""
+"\n"
+"        Вид веб панели OpenERP.\n"
+"        "
 
 #. module: base
 #: view:res.partner:0
 msgid "Supplier Partners"
-msgstr ""
+msgstr "Партнёры-поставщики"
 
 #. module: base
 #: view:res.config.installer:0
@@ -13984,7 +16556,7 @@ msgstr "Проверка штрих-кода"
 #. module: base
 #: view:res.partner:0
 msgid "Customer Partners"
-msgstr ""
+msgstr "Партнеры-заказчики"
 
 #. module: base
 #: sql_constraint:res.users:0
@@ -14020,6 +16592,16 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль показывает основные процессы существующие в выбранных модулях и "
+"их последовательность.\n"
+"============================================================================="
+"=========================\n"
+"\n"
+"Примечание: это применимо к модулям содержащим modulename_process_xml\n"
+"например: product/process/product_process_xml\n"
+"\n"
+"    "
 
 #. module: base
 #: field:res.users,menu_tips:0
@@ -14049,7 +16631,7 @@ msgstr "Внутренние верхний/нижний колонтитулы"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_crm
 msgid "CRM"
-msgstr ""
+msgstr "CRM"
 
 #. module: base
 #: code:addons/base/module/wizard/base_export_language.py:59
@@ -14074,7 +16656,7 @@ msgstr "_Экспорт"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_followup
 msgid "Followup Management"
-msgstr ""
+msgstr "Управление напоминаниями"
 
 #. module: base
 #: model:ir.module.module,description:base.module_l10n_fr
@@ -14119,12 +16701,14 @@ msgstr ""
 #. module: base
 #: selection:ir.mail_server,smtp_encryption:0
 msgid "TLS (STARTTLS)"
-msgstr ""
+msgstr "TLS (STARTTLS)"
 
 #. module: base
 #: help:ir.actions.act_window,usage:0
 msgid "Used to filter menu and home actions from the user form."
 msgstr ""
+"Используется для фильтрации действий меню и домашней страницы из формы "
+"пользователя."
 
 #. module: base
 #: model:res.country,name:base.sa
@@ -14135,11 +16719,13 @@ msgstr "Саудовская Аравия"
 #: help:res.company,rml_header1:0
 msgid "Appears by default on the top right corner of your printed documents."
 msgstr ""
+"Используется для фильтрации действий меню и домашней страницы из формы "
+"пользователя."
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_fetchmail_crm_claim
 msgid "eMail Gateway for CRM Claim"
-msgstr ""
+msgstr "Шлюз e-mail для CRM претензии"
 
 #. module: base
 #: help:res.partner,supplier:0
@@ -14148,8 +16734,7 @@ msgid ""
 "people will not see it when encoding a purchase order."
 msgstr ""
 "Установите флажок, если контрагент является поставщиком. Если он не "
-"установлен, контрагента не будет видно при выборке, составлении заказ на "
-"покупку."
+"установлен, контрагента не будет видно при  составлении заказа закупки."
 
 #. module: base
 #: field:ir.actions.server,trigger_obj_id:0
@@ -14160,7 +16745,7 @@ msgstr "Связанное поле"
 #. module: base
 #: view:res.partner.event:0
 msgid "Event Logs"
-msgstr "Логи событий"
+msgstr "Логи мероприятия"
 
 #. module: base
 #: code:addons/base/module/wizard/base_module_configuration.py:38
@@ -14206,6 +16791,9 @@ msgid ""
 "later is slower than the former but forbids any gap in the sequence (while "
 "they are possible in the former)."
 msgstr ""
+"Предложены две реализации нумерации объектов: стандартная и без промежутка. "
+"Последняя более медленна, чем первая, но не позволяет любые промежутки в "
+"нумерации (в то время как они возможны в первой)."
 
 #. module: base
 #: model:res.country,name:base.gn
@@ -14240,12 +16828,12 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,description:base.module_auth_openid
 msgid "Allow users to login through OpenID."
-msgstr ""
+msgstr "Разрешить пользователям авторизоваться через OpenID."
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_payment
 msgid "Suppliers Payment Management"
-msgstr ""
+msgstr "Управление оплатами поставщикам"
 
 #. module: base
 #: model:res.country,name:base.sv
@@ -14283,11 +16871,22 @@ msgid ""
 "After installing the module, it adds a menu to define a custom report in\n"
 "the Administration / Customization / Reporting menu.\n"
 msgstr ""
+"\n"
+"Этот модуль позволяет вам создать любой статистический отчёт по различным "
+"объектам.\n"
+"=========================================================================\n"
+"\n"
+"Это конструктор SQL запроса и просмотрщик\n"
+"для конечных пользователей.\n"
+"\n"
+"После установки модуля, он добавляет меню для определения пользовательского "
+"отчёта в\n"
+"меню Администрирование/Подстройка/Отчётность.\n"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_report_designer
 msgid "Report Designer"
-msgstr ""
+msgstr "Дизайнер отчетов"
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_address_book
@@ -14317,6 +16916,9 @@ msgid ""
 "        OpenERP Web calendar view.\n"
 "        "
 msgstr ""
+"\n"
+"        Вид веб календаря OpenERP.\n"
+"        "
 
 #. module: base
 #: model:ir.ui.menu,name:base.menu_crm_config_lead
@@ -14344,6 +16946,8 @@ msgstr "И"
 msgid ""
 "Database identifier of the record to which this applies. 0 = for all records"
 msgstr ""
+"Идентификатор записи базы данных к которому это относится. 0 = для всех "
+"записей"
 
 #. module: base
 #: field:ir.model.fields,relation:0
@@ -14353,7 +16957,7 @@ msgstr "Отношение объекта"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_account_voucher
 msgid "eInvoicing & Payments"
-msgstr ""
+msgstr "Эл. счета и платежи"
 
 #. module: base
 #: view:ir.rule:0
@@ -14401,7 +17005,7 @@ msgstr "Объект ресурса"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_crm_helpdesk
 msgid "Helpdesk"
-msgstr ""
+msgstr "Техподдержка"
 
 #. module: base
 #: model:ir.actions.act_window,help:base.grant_menu_access
@@ -14425,7 +17029,7 @@ msgstr "Подчиненной поле"
 #. module: base
 #: view:ir.rule:0
 msgid "Detailed algorithm:"
-msgstr ""
+msgstr "Подробный алгоритм:"
 
 #. module: base
 #: field:ir.actions.act_window,usage:0
@@ -14446,7 +17050,7 @@ msgstr "workflow.workitem"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_profile_tools
 msgid "Miscellaneous Tools"
-msgstr ""
+msgstr "Разные инструменты"
 
 #. module: base
 #: model:ir.module.category,description:base.module_category_tools
@@ -14454,6 +17058,8 @@ msgid ""
 "Lets you install various interesting but non-essential tools like Survey, "
 "Lunch and Ideas box."
 msgstr ""
+"Позволяет установить интересные, но не обязательные инструменты: Обзор, Ланч "
+"и Коробка идей."
 
 #. module: base
 #: selection:ir.module.module,state:0
@@ -14484,6 +17090,26 @@ msgid ""
 "Print product labels with barcode.\n"
 "    "
 msgstr ""
+"\n"
+"Это основной модуль для управления товарами и прайс-листами в OpenERP.\n"
+"========================================================================\n"
+"\n"
+"Товары поддерживают варианты, различные методы ценообразования, информацию\n"
+"поставщиков, изготовление в запас/по заказу, различные единицы измерения,\n"
+"комплектование и свойства.\n"
+"\n"
+"Прайс-листы поддерживают:\n"
+"    * Многоуровневую скидку (по товару, категории, количествам)\n"
+"    * Подсчёт цены основанный на различных критериях:\n"
+"        * другой прайс-лист,\n"
+"        * себестоимость,\n"
+"        * список цен,\n"
+"        * цена поставщика...\n"
+"\n"
+"Предпочтения прайс-листов по товару и/или партнёрам.\n"
+"\n"
+"Печать меток товара со штрих-кодом.\n"
+"    "
 
 #. module: base
 #: report:ir.module.reference.graph:0
@@ -14504,7 +17130,7 @@ msgstr "Вы не можете удалить поле '%s' !"
 #. module: base
 #: view:res.users:0
 msgid "Allowed Companies"
-msgstr ""
+msgstr "Допустимые компании"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_l10n_de
@@ -14514,7 +17140,7 @@ msgstr ""
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_auction
 msgid "Auction Houses"
-msgstr ""
+msgstr "Аукционные дома"
 
 #. module: base
 #: field:ir.ui.menu,web_icon:0
@@ -14530,7 +17156,7 @@ msgstr "Выполнить запланированные обновления"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_sale_journal
 msgid "Invoicing Journals"
-msgstr ""
+msgstr "Журналы выставления счетов"
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -14577,6 +17203,13 @@ msgid ""
 "Add \"Support\" button in header from where you can access OpenERP Support.\n"
 "    "
 msgstr ""
+"\n"
+"Обеспечивает поддержку живого чата для тех, укого есть договор поддержки.\n"
+"===================================================================\n"
+"\n"
+"Добавляет кнопку \"Поддержка\" button в заголовке формы доступа к поддержке "
+"OpenERP.\n"
+"    "
 
 #. module: base
 #: model:ir.model,name:base.model_base_module_configuration
@@ -14591,6 +17224,10 @@ msgid ""
 "        This module provides the core of the OpenERP web client.\n"
 "        "
 msgstr ""
+"\n"
+"        Модуль ядра веб OpenERP.\n"
+"        Этот модуль предоставляет ядро веб-клиента OpenERP.\n"
+"        "
 
 #. module: base
 #: sql_constraint:res.country:0
@@ -14628,7 +17265,7 @@ msgstr "Аруба"
 #: code:addons/base/module/wizard/base_module_import.py:60
 #, python-format
 msgid "File is not a zip file!"
-msgstr ""
+msgstr "Файл не является zip архивом !"
 
 #. module: base
 #: model:res.country,name:base.ar
@@ -14648,6 +17285,16 @@ msgid ""
 "and decide on their status as they evolve.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль предоставляет управление проблемами/ошибками в проекте.\n"
+"=======================================================\n"
+"\n"
+"OpenERP позволяет вам управлять проблемами, которые вы можете встретить в "
+"проекте\n"
+"типа ошибок в системе, жалоб клиента или поломок материала.\n"
+"Вид списка позволяет руководителю быстро проверить проблемы, поручить их\n"
+"и определить их состояние развития.\n"
+"    "
 
 #. module: base
 #: field:res.groups,full_name:0
@@ -14662,7 +17309,7 @@ msgstr "Бахрейн"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_web
 msgid "web"
-msgstr ""
+msgstr "веб"
 
 #. module: base
 #: field:res.bank,fax:0
@@ -14736,7 +17383,7 @@ msgstr "Компания"
 #. module: base
 #: model:ir.module.category,name:base.module_category_report_designer
 msgid "Advanced Reporting"
-msgstr ""
+msgstr "Расширенные отчеты"
 
 #. module: base
 #: selection:ir.actions.act_window,target:0
@@ -14777,7 +17424,7 @@ msgstr "Запустить"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_caldav
 msgid "Share Calendar using CalDAV"
-msgstr ""
+msgstr "Открыть доступ к календарю через Caldav"
 
 #. module: base
 #: field:ir.actions.act_window,limit:0
@@ -14796,7 +17443,7 @@ msgstr ""
 #: code:addons/orm.py:791
 #, python-format
 msgid "Serialization field `%s` not found for sparse field `%s`!"
-msgstr ""
+msgstr "Поле последовательности `%s` не найдено для поля распределения `%s`!"
 
 #. module: base
 #: model:res.country,name:base.jm
@@ -14807,7 +17454,7 @@ msgstr "Ямайка"
 #: field:res.partner,color:0
 #: field:res.partner.address,color:0
 msgid "Color Index"
-msgstr ""
+msgstr "Цветовая палитра"
 
 #. module: base
 #: model:ir.actions.act_window,help:base.action_partner_category_form
@@ -14837,12 +17484,12 @@ msgstr "Внимание"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_edi
 msgid "Electronic Data Interchange (EDI)"
-msgstr ""
+msgstr "Обмен электронными данными (ОЭД)"
 
 #. module: base
 #: model:ir.module.category,name:base.module_category_tools
 msgid "Extra Tools"
-msgstr ""
+msgstr "Доп. инструменты"
 
 #. module: base
 #: model:res.country,name:base.vg
@@ -14906,6 +17553,48 @@ msgid ""
 "\n"
 "    "
 msgstr ""
+"\n"
+"Шаблоны e-mail (упрощённая версия оригинальной Power Email от Openlabs)\n"
+"============================================================================="
+"\n"
+"\n"
+"Позволяет вам разработать полные шаблоны e-mail связанные с любым документом "
+"OpenERP (заказами\n"
+"продаж, счетами и т.д.), включая отправителя, получателя, тему, тело (HTML "
+"и\n"
+"текст). Вы также можете автоматически прикрепить файлы к вашим шаблонам, или "
+"распечатать и\n"
+"прикрепить отчёт.\n"
+"\n"
+"Для продвинутого использования, шаблоны могут включать динамические атрибуты "
+"документа\n"
+"связанными с ним. Например, вы можете использовать название страны "
+"партнёра,\n"
+"когда ему пишите, также предусматривая сохранение умолчаний в случае если "
+"атрибут\n"
+"не определён. Каждый шаблон содержит встроенный ассистент для помощи по\n"
+"включению этих динамических значений.\n"
+"\n"
+"Если вы разрешите возможность, ассистент составления появится также на "
+"боковой панели\n"
+"документов OpenERP для которых применим шаблон (например, счетов).\n"
+"Это служит быстрым способом для отправки новой почты основанной на шаблоне, "
+"после\n"
+"просмотра и изменения содержимого при необходимости.\n"
+"Этот ассистент составления будет также включён в систему массовой рассылки, "
+"при вызове\n"
+"сразу для многих документов.\n"
+"\n"
+"Эти шаблоны e-mail являются также сердцем системы кампании маркетинга\n"
+"(см. приложение ``marketing_campaign``), если вам нужно автоматизировать "
+"большие\n"
+"кампании по любому документу OpenERP.\n"
+"\n"
+"Техническое замечание: была взята только система шаблонизации оригинальной "
+"Power Email\n"
+"от Openlabs\n"
+"\n"
+"    "
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -14915,7 +17604,7 @@ msgstr "Чешский / Čeština"
 #. module: base
 #: model:ir.module.category,name:base.module_category_generic_modules
 msgid "Generic Modules"
-msgstr ""
+msgstr "Общие модули"
 
 #. module: base
 #: model:ir.actions.act_window,help:base.action_partner_supplier_form
@@ -14954,11 +17643,25 @@ msgid ""
 "to set up a management by affair.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль реализует табельную систему.\n"
+"==========================================\n"
+"\n"
+"Каждый работник может ввести и отследить время затраченное на различные "
+"проекты.\n"
+"Проект - счёт аналитики и затраченное на проект время создаёт стоимости на\n"
+"счету аналитики.\n"
+"\n"
+"Предусмотрены подборки отчётности по времени и отслеживание работника.\n"
+"\n"
+"Он полностью интегрирован с модулем учёта стоимости. Это позволяет\n"
+"настроить управление по делу.\n"
+"    "
 
 #. module: base
 #: help:ir.mail_server,smtp_port:0
 msgid "SMTP Port. Usually 465 for SSL, and 25 or 587 for other cases."
-msgstr ""
+msgstr "Порт SMTP. Обычно 465 для SSL, и 25 или 587 для других случаев."
 
 #. module: base
 #: view:ir.sequence:0
@@ -15026,6 +17729,39 @@ msgid ""
 "    * Opportunities by Stage (graph)\n"
 "    * Planned Revenue by Stage and User (graph)\n"
 msgstr ""
+"\n"
+"Это общее управление взаимоотношениями с покупателями (CRM) в OpenERP.\n"
+"=====================================================\\n\n"
+"\n"
+"Эта система позволяет группировать людей для разумного и эффективного "
+"управления\n"
+"кандидатами, предложениями, встречами, телефонными звонками и т.п.\n"
+"Она управляет ключевыми задачами, такими как общение, идентификация, "
+"приоретизация,\n"
+"назначение, разрешение проблем и уведомление.\n"
+"\n"
+"OpenERP полагает, что все дела успешно отслеживаются по пользователям, "
+"покупателям и\n"
+"поставщикам. Она может автоматически отсылать напоминания, обострять запрос, "
+"запускать\n"
+"конкретные методы и другие действия основанные на правилах вашего "
+"предприятия.\n"
+"\n"
+"Главная задумка этой системы в том, что пользователи не вынуждены делать что-"
+"то\n"
+"особенное. Они могут только отправить e-mail отслеживателю запроса. OpenERP "
+"поблагодарит\n"
+"их за сообщение, автоматически направив его соответствующему начальнику, и "
+"убедится в том,\n"
+" что вся будущая переписка отправится в правильное место.\n"
+"\n"
+"Модуль CRM имеет почтовый шлюз для синхронизации интерфейса\n"
+"сообщений и OpenERP.\n"
+"\n"
+"Создаёт панель для CRM, которая включает:\n"
+"    * Предложения по категориям (график)\n"
+"    * Предложения по этапу (график)\n"
+"    * Плановый доход по этапу и пользователю (график)\n"
 
 #. module: base
 #: model:ir.module.category,description:base.module_category_accounting_and_finance
@@ -15033,11 +17769,13 @@ msgid ""
 "Helps you handle your accounting needs, if you are not an accountant, we "
 "suggest you to install only the Invoicing."
 msgstr ""
+"Помогает вам обрабатывать потребности вашего учета, если вы не бухгалтер, мы "
+"рекомендуем вам установить только выставление счетов."
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_plugin_thunderbird
 msgid "Thunderbird Plug-In"
-msgstr ""
+msgstr "Дополнение для Thunderbird"
 
 #. module: base
 #: model:ir.model,name:base.model_res_country
@@ -15055,7 +17793,7 @@ msgstr "Страна"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_project_messages
 msgid "In-Project Messaging System"
-msgstr ""
+msgstr "Внутри-проектная система сообщений"
 
 #. module: base
 #: model:res.country,name:base.pn
@@ -15069,11 +17807,14 @@ msgid ""
 "        OpenERP Web test suite.\n"
 "        "
 msgstr ""
+"\n"
+"        Набор тестов OpenERP веб.\n"
+"        "
 
 #. module: base
 #: view:ir.values:0
 msgid "Action Bindings/Defaults"
-msgstr ""
+msgstr "Привязка действий/умолчаний"
 
 #. module: base
 #: view:ir.rule:0
@@ -15088,7 +17829,7 @@ msgstr ""
 #: view:res.partner:0
 #: view:res.partner.address:0
 msgid "Change Color"
-msgstr ""
+msgstr "Изменить цвет"
 
 #. module: base
 #: model:res.partner.category,name:base.res_partner_category_15
@@ -15126,7 +17867,7 @@ msgstr ""
 #. module: base
 #: field:ir.module.module,auto_install:0
 msgid "Automatic Installation"
-msgstr ""
+msgstr "Автоматическая установка"
 
 #. module: base
 #: model:res.country,name:base.jp
@@ -15178,6 +17919,33 @@ msgid ""
 "Leads.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль автоматизации нахождения кандидатов через маркетинговые кампании "
+"(кампании фактически могут быть определены по любому ресурсу, не только по "
+"кандидатам CRM).\n"
+"============================================================================="
+"============================================================\n"
+"\n"
+"Кампании являются динамическими и много-канальными. Процесс следующий:\n"
+"    * Разработка маркетинговых кампаний типа рабочих процессов, включая "
+"шаблоны e-mail для отправки, отчёты для печати и отправка по e-mail, "
+"действия подстройки и т.п.\n"
+"    * Определение входных сегментов, которые выберут элементы для кампании "
+"(например, кандидаты из определённых стран и т.п.)\n"
+"    * Запуск вашей кампании в режиме имитации для проверки в реальном "
+"времени или ускоренном, и её точная настройка\n"
+"    * Вы можете также запустить реальную кампанию в ручном режиме, когда "
+"каждое действие требует ручное подтверждение\n"
+"    * В итоге, запустите кампанию по настоящему и наблюдайте статистику как "
+"кампания делает всё полностью автоматически.\n"
+"\n"
+"Пока кампания выполняется, вы конечно можете продолжить подстройку "
+"параметров, входных сегментов, рабочего процесса и т.п.\n"
+"\n"
+"Учтите: если вам нужны демо данные, вы можете установить модуль "
+"маркетинговой кампании crm_demo, но это приведет к установке приложения "
+"CRM.\n"
+"    "
 
 #. module: base
 #: selection:ir.actions.act_window.view,view_mode:0
@@ -15229,7 +17997,7 @@ msgstr "Локализация"
 #. module: base
 #: field:ir.sequence,implementation:0
 msgid "Implementation"
-msgstr ""
+msgstr "Реализация"
 
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_l10n_ve
@@ -15256,7 +18024,7 @@ msgstr "Условие"
 #. module: base
 #: help:res.currency,rate:0
 msgid "The rate of the currency to the currency of rate 1."
-msgstr ""
+msgstr "Курс валюты к валюте с курсом 1."
 
 #. module: base
 #: field:ir.ui.view,name:0
@@ -15266,12 +18034,12 @@ msgstr "Название вида"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_document_ftp
 msgid "Shared Repositories (FTP)"
-msgstr ""
+msgstr "Совместный репозиторий (FTP)"
 
 #. module: base
 #: model:ir.model,name:base.model_res_groups
 msgid "Access Groups"
-msgstr ""
+msgstr "Группы доступа"
 
 #. module: base
 #: selection:base.language.install,lang:0
@@ -15345,7 +18113,7 @@ msgstr "Банковские счета"
 #: field:ir.model,modules:0
 #: field:ir.model.fields,modules:0
 msgid "In modules"
-msgstr ""
+msgstr "В модулях"
 
 #. module: base
 #: model:res.country,name:base.sl
@@ -15366,7 +18134,7 @@ msgstr "Острова Тёркс и Кайкос"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_fetchmail_project_issue
 msgid "eMail Gateway for Project Issues"
-msgstr ""
+msgstr "Шлюз e-mail для проблем проекта"
 
 #. module: base
 #: field:res.partner.bank,partner_id:0
@@ -15390,6 +18158,8 @@ msgid ""
 "Helps you manage your manufacturing processes and generate reports on those "
 "processes."
 msgstr ""
+"Помагает вам управлять процессами производства и создавать отчеты об этих "
+"процессах."
 
 #. module: base
 #: help:ir.sequence,number_increment:0
@@ -15419,6 +18189,8 @@ msgid ""
 "Manage relations with prospects and customers using leads, opportunities, "
 "requests or issues."
 msgstr ""
+"Управляет отношениями между перспективами и покупателями используя "
+"кандидатов, предложения, запросы или проблемы."
 
 #. module: base
 #: selection:res.partner.address,type:0
@@ -15434,7 +18206,7 @@ msgstr "Корпорация"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_purchase_requisition
 msgid "Purchase Requisitions"
-msgstr ""
+msgstr "Запросы на закупку"
 
 #. module: base
 #: selection:ir.cron,interval_type:0
@@ -15455,7 +18227,7 @@ msgstr "Контрагенты: "
 #. module: base
 #: field:res.partner.bank,name:0
 msgid "Bank Account"
-msgstr ""
+msgstr "Банковский счет"
 
 #. module: base
 #: model:res.country,name:base.kp
@@ -15476,7 +18248,7 @@ msgstr "Контекст"
 #. module: base
 #: model:ir.module.module,shortdesc:base.module_sale_mrp
 msgid "Sales and MRP Management"
-msgstr ""
+msgstr "Управление продажами и планированием производственных ресурсов (MRP)"
 
 #. module: base
 #: model:ir.actions.act_window,name:base.action_partner_sms_send
@@ -15509,6 +18281,13 @@ msgid ""
 "are accessible if installed.\n"
 "    "
 msgstr ""
+"\n"
+"Общая основа для модулей инструментов.\n"
+"==============================\n"
+"\n"
+"Создаёт пункт меню для инструментов откуда доступны инструменты типа опрос, "
+"2-й завтрак, идея, и т.п., если установлены.\n"
+"    "
 
 #. module: base
 #: field:ir.exports,name:0
@@ -15557,6 +18336,20 @@ msgid ""
 "    A + B + C -> D + E\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет вам производить несколько продуктов по одному заказу "
+"производства.\n"
+"============================================================================="
+"\n"
+"\n"
+"Вы можете настроить суб-продукты в спецификации материала.\n"
+"\n"
+"Без этого модуля:\n"
+"    А + Б + В -> Г\n"
+"\n"
+"с этим модулем:\n"
+"    А + Б + В -> Г + Д\n"
+"    "
 
 #. module: base
 #: model:res.country,name:base.lk
@@ -15589,6 +18382,30 @@ msgid ""
 "module.\n"
 "    "
 msgstr ""
+"\n"
+"Этот модуль позволяет вам создавать новые модули без разработки.\n"
+"======================================================================\n"
+"\n"
+"Он записывает все операции над объектами в течении сессии записи и\n"
+"производит .ZIP модуль. Итак вы можете создать свой собственный модуль прямо "
+"из\n"
+"клиента OpenERP.\n"
+"\n"
+"Эта версия работает для создания и изменения существующих записей. Он "
+"перевычисляет\n"
+"зависимости и связи для всех типов виджетов (многие-к-одному, многие-ко-"
+"многим, ...).\n"
+"Он также поддерживает техпроцессы и данные демо/обновления.\n"
+"\n"
+"Это должно помочь вам легко создать используемые и публикуемые модули\n"
+"для пользовательских настроек и демо/тестовых данных.\n"
+"\n"
+"Как его использовать:\n"
+"Запустите Администрирование/Подстройка/Создание модуля/Экспорт подстроек как "
+"мастер модуля.\n"
+"Выберите критерии даты и времени записи и объекты для записи и запишите "
+"модуль.\n"
+"    "
 
 #. module: base
 #: selection:base.language.install,lang:0
index 859d0b7..b119359 100644 (file)
@@ -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: 2012-09-05 04:43+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:40+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -792,7 +792,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3760,7 +3760,7 @@ msgstr "GPL-2 alebo novšia verzia"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "pán"
 
 #. module: base
@@ -5574,7 +5574,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Kód štátu na 3 znaky.\n"
 
 #. module: base
@@ -11163,7 +11163,7 @@ msgstr "Postupnosti"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "slečna"
 
 #. module: base
@@ -11290,7 +11290,7 @@ msgstr "Filter"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "pani"
 
 #. module: base
index c023197..3abc219 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:43+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:41+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -801,7 +801,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3789,7 +3789,7 @@ msgstr "GPL-2 ali naslednja verzija"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "G."
 
 #. module: base
@@ -5617,7 +5617,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Koda zvezne države v treh znakih.\n"
 
 #. module: base
@@ -11220,7 +11220,7 @@ msgstr "Zaporedja"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Gospodična"
 
 #. module: base
@@ -11348,7 +11348,7 @@ msgstr "Filter"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Ga."
 
 #. module: base
index ef5b069..c73b4e6 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:38+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:35+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -774,7 +774,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3681,7 +3681,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5460,7 +5460,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10994,7 +10994,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11114,7 +11114,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 83903f6..2c32b7f 100644 (file)
@@ -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: 2012-09-05 04:43+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:40+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -795,7 +795,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3758,8 +3758,8 @@ msgstr "GPL-2  ili novija verzija"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -5561,7 +5561,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Šifra države u ti karaktera.\n"
 
 #. module: base
@@ -11139,8 +11139,8 @@ msgstr "Sekvence"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
-msgstr "Miss"
+msgid "Mss"
+msgstr "Mss"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_ui_view
@@ -11259,8 +11259,8 @@ msgstr "Filter"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
-msgstr "Mrs."
+msgid "Ms."
+msgstr "Ms."
 
 #. module: base
 #: view:base.module.import:0
index 28f5c4f..98d8623 100644 (file)
@@ -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: 2012-09-05 04:46+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:43+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
index 45b5248..5c6ffb0 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:44+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:41+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -842,7 +842,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "Manuell: Starta manuellt.\n"
@@ -4000,8 +4000,8 @@ msgstr "GPL-2 eller senare version"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -5862,7 +5862,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Landskod, tre tecken\n"
 
 #. module: base
@@ -11651,7 +11651,7 @@ msgstr "Nummerserier"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Fru"
 
 #. module: base
@@ -11775,7 +11775,7 @@ msgstr "Filtrera"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Frk."
 
 #. module: base
index c8fdfff..455fe80 100644 (file)
@@ -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: 2012-09-05 04:44+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:41+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -775,7 +775,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3682,7 +3682,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5461,7 +5461,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10995,7 +10995,7 @@ msgstr "ลำดับ"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11115,7 +11115,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 83e7147..78e31df 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:44+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:41+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -774,7 +774,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3681,7 +3681,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5460,7 +5460,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10994,7 +10994,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11114,7 +11114,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 9bf11b5..c51ba45 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:44+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:41+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -806,7 +806,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3824,8 +3824,8 @@ msgstr "GPL-2 veya sonraki sürümü"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
-msgstr "Mr."
+msgid "M."
+msgstr "M."
 
 #. module: base
 #: code:addons/base/module/module.py:519
@@ -5662,7 +5662,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Üç karakterden oluşan eyalet kodu.\n"
 
 #. module: base
@@ -11280,7 +11280,7 @@ msgstr "Silsileler"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr "Bayan"
 
 #. module: base
@@ -11404,7 +11404,7 @@ msgstr "Süzgeç"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "Bayan"
 
 #. module: base
index 6295883..7925018 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:44+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:41+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -796,7 +796,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3717,7 +3717,7 @@ msgstr "GPL-2 або пізніша версія"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5507,7 +5507,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "Код області довжиною в три букви.\n"
 
 #. module: base
@@ -11046,7 +11046,7 @@ msgstr "Послідовності"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11166,7 +11166,7 @@ msgstr "Фільтр"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 1e07783..5163f59 100644 (file)
@@ -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: 2012-09-05 04:44+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:42+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -775,7 +775,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3682,7 +3682,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5461,7 +5461,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10995,7 +10995,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11115,7 +11115,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 782faa4..26fce52 100644 (file)
@@ -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: 2012-09-05 04:44+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:42+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -799,7 +799,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3709,7 +3709,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5490,7 +5490,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -11028,7 +11028,7 @@ msgstr "Sequences"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11150,7 +11150,7 @@ msgstr "Bộ lọc"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 680504f..a8f2da0 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:46+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:43+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -821,7 +821,7 @@ msgstr "OpenERP的翻译在Launchpad.net网站上进行,OpenERP项目本身也
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 "手动:手动执行\n"
@@ -4083,7 +4083,7 @@ msgstr "GPL-2 或更新版本"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr "先生"
 
 #. module: base
@@ -5993,7 +5993,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "三个字符的省/州代码\n"
 
 #. module: base
@@ -11847,8 +11847,8 @@ msgstr "序列"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
-msgstr "Miss"
+msgid "Mss"
+msgstr "Mss"
 
 #. module: base
 #: model:ir.model,name:base.model_ir_ui_view
@@ -11967,7 +11967,7 @@ msgstr "过滤"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "女士"
 
 #. module: base
index e0941a8..46f538a 100644 (file)
@@ -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: 2012-09-05 04:44+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:42+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -775,7 +775,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3682,7 +3682,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5461,7 +5461,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr ""
 
 #. module: base
@@ -10995,7 +10995,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11115,7 +11115,7 @@ msgstr ""
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr ""
 
 #. module: base
index 5935d13..9f7c2ba 100644 (file)
@@ -13,8 +13,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-05 04:45+0000\n"
-"X-Generator: Launchpad (build 15901)\n"
+"X-Launchpad-Export-Date: 2012-09-20 04:42+0000\n"
+"X-Generator: Launchpad (build 15985)\n"
 
 #. module: base
 #: model:res.country,name:base.sh
@@ -779,7 +779,7 @@ msgstr ""
 msgid ""
 "Manual: Launched manually.\n"
 "Automatic: Runs whenever the system is reconfigured.\n"
-"Launch Manually Once: after having been launched manually, it sets "
+"Launch Manually Once: after hacing been launched manually, it sets "
 "automatically to Done."
 msgstr ""
 
@@ -3687,7 +3687,7 @@ msgstr "GPL-2 或更新版本"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_sir
-msgid "Mr."
+msgid "M."
 msgstr ""
 
 #. module: base
@@ -5470,7 +5470,7 @@ msgstr ""
 
 #. module: base
 #: help:res.country.state,code:0
-msgid "The state code in max. three chars."
+msgid "The state code in three chars.\n"
 msgstr "三個字元之省或州代碼\n"
 
 #. module: base
@@ -11013,7 +11013,7 @@ msgstr "序列"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_miss
-msgid "Miss"
+msgid "Mss"
 msgstr ""
 
 #. module: base
@@ -11133,7 +11133,7 @@ msgstr "過濾器"
 
 #. module: base
 #: model:res.partner.title,shortcut:base.res_partner_title_madam
-msgid "Mrs."
+msgid "Ms."
 msgstr "女士"
 
 #. module: base
index 3c437c9..dbc8927 100644 (file)
@@ -266,6 +266,105 @@ class ir_cron(osv.osv):
             cr.commit()
             cr.close()
 
+    def _process_job(self, cr, job):
+        """ Run a given job taking care of the repetition.
+
+        The cursor has a lock on the job (aquired by _acquire_job()).
+
+        :param job: job to be run (as a dictionary).
+        """
+        try:
+            now = datetime.now() 
+            nextcall = datetime.strptime(job['nextcall'], DEFAULT_SERVER_DATETIME_FORMAT)
+            numbercall = job['numbercall']
+
+            ok = False
+            while nextcall < now and numbercall:
+                if numbercall > 0:
+                    numbercall -= 1
+                if not ok or job['doall']:
+                    self._callback(cr, job['user_id'], job['model'], job['function'], job['args'], job['id'])
+                if numbercall:
+                    nextcall += _intervalTypes[job['interval_type']](job['interval_number'])
+                ok = True
+            addsql = ''
+            if not numbercall:
+                addsql = ', active=False'
+            cr.execute("UPDATE ir_cron SET nextcall=%s, numbercall=%s"+addsql+" WHERE id=%s",
+                       (nextcall.strftime(DEFAULT_SERVER_DATETIME_FORMAT), numbercall, job['id']))
+
+        finally:
+            cr.commit()
+            cr.close()
+
+    @classmethod
+    def _acquire_job(cls, db_name):
+        # TODO remove 'check' argument from addons/base_action_rule/base_action_rule.py
+        """ Try to process one cron job.
+
+        This selects in database all the jobs that should be processed. It then
+        tries to lock each of them and, if it succeeds, run the cron job (if it
+        doesn't succeed, it means the job was already locked to be taken care
+        of by another thread) and return.
+
+        If a job was processed, returns True, otherwise returns False.
+        """
+        db = openerp.sql_db.db_connect(db_name)
+        cr = db.cursor()
+        try:
+            # Careful to compare timestamps with 'UTC' - everything is UTC as of v6.1.
+            cr.execute("""SELECT * FROM ir_cron
+                          WHERE numbercall != 0
+                              AND active AND nextcall <= (now() at time zone 'UTC')
+                          ORDER BY priority""")
+            for job in cr.dictfetchall():
+                task_cr = db.cursor()
+                try:
+                    # Try to grab an exclusive lock on the job row from within the task transaction
+                    acquired_lock = False
+                    task_cr.execute("""SELECT *
+                                       FROM ir_cron
+                                       WHERE id=%s
+                                       FOR UPDATE NOWAIT""",
+                                   (job['id'],), log_exceptions=False)
+                    acquired_lock = True
+                except psycopg2.OperationalError, e:
+                    if e.pgcode == '55P03':
+                        # Class 55: Object not in prerequisite state; 55P03: lock_not_available
+                        _logger.debug('Another process/thread is already busy executing job `%s`, skipping it.', job['name'])
+                        continue
+                    else:
+                        # Unexpected OperationalError
+                        raise
+                finally:
+                    if not acquired_lock:
+                        # we're exiting due to an exception while acquiring the lot
+                        task_cr.close()
+
+                # Got the lock on the job row, run its code
+                _logger.debug('Starting job `%s`.', job['name'])
+                openerp.modules.registry.RegistryManager.check_registry_signaling(db_name)
+                registry = openerp.pooler.get_pool(db_name)
+                registry[cls._name]._process_job(task_cr, job)
+                openerp.modules.registry.RegistryManager.signal_caches_change(db_name)
+                return True
+
+        except psycopg2.ProgrammingError, e:
+            if e.pgcode == '42P01':
+                # Class 42 — Syntax Error or Access Rule Violation; 42P01: undefined_table
+                # The table ir_cron does not exist; this is probably not an OpenERP database.
+                _logger.warning('Tried to poll an undefined table on database %s.', db_name)
+            else:
+                raise
+        except Exception, ex:
+            _logger.warning('Exception in cron:', exc_info=True)
+
+        finally:
+            cr.commit()
+            cr.close()
+
+        return False
+
     def update_running_cron(self, cr):
         """ Schedule as soon as possible a wake-up for this database. """
         # Verify whether the server is already started and thus whether we need to commit
index bad2c3d..9208297 100644 (file)
@@ -192,7 +192,6 @@ class view(osv.osv):
     def write(self, cr, uid, ids, vals, context=None):
         if not isinstance(ids, (list, tuple)):
             ids = [ids]
-        result = super(view, self).write(cr, uid, ids, vals, context)
 
         # drop the corresponding view customizations (used for dashboards for example), otherwise
         # not all users would see the updated views
@@ -200,7 +199,7 @@ class view(osv.osv):
         if custom_view_ids:
             self.pool.get('ir.ui.view.custom').unlink(cr, uid, custom_view_ids)
 
-        return result
+        return super(view, self).write(cr, uid, ids, vals, context)
 
     def graph_get(self, cr, uid, id, model, node_obj, conn_obj, src_node, des_node, label, scale, context=None):
         nodes=[]
index 617a31d..7621d59 100644 (file)
@@ -237,7 +237,6 @@ class module(osv.osv):
         'menus_by_module': fields.function(_get_views, string='Menus', type='text', multi="meta", store=True),
         'reports_by_module': fields.function(_get_views, string='Reports', type='text', multi="meta", store=True),
         'views_by_module': fields.function(_get_views, string='Views', type='text', multi="meta", store=True),
-        'certificate' : fields.char('Quality Certificate', size=64, readonly=True),
         'application': fields.boolean('Application', readonly=True),
         'icon': fields.char('Icon URL', size=128),
         'icon_image': fields.function(_get_icon_image, string='Icon', type="binary"),
@@ -253,12 +252,9 @@ class module(osv.osv):
 
     def _name_uniq_msg(self, cr, uid, ids, context=None):
         return _('The name of the module must be unique !')
-    def _certificate_uniq_msg(self, cr, uid, ids, context=None):
-        return _('The certificate ID of the module must be unique !')
 
     _sql_constraints = [
         ('name_uniq', 'UNIQUE (name)',_name_uniq_msg ),
-        ('certificate_uniq', 'UNIQUE (certificate)',_certificate_uniq_msg )
     ]
 
     def unlink(self, cr, uid, ids, context=None):
@@ -511,7 +507,6 @@ class module(osv.osv):
             'contributors': ', '.join(terp.get('contributors', [])) or False,
             'website': terp.get('website', ''),
             'license': terp.get('license', 'AGPL-3'),
-            'certificate': terp.get('certificate') or False,
             'sequence': terp.get('sequence', 100),
             'application': terp.get('application', False),
             'auto_install': terp.get('auto_install', False),
@@ -677,14 +672,6 @@ class module(osv.osv):
             if not mod.description:
                 _logger.warning('module %s: description is empty !', mod.name)
 
-            if not mod.certificate or not mod.certificate.isdigit():
-                _logger.info('module %s: no quality certificate', mod.name)
-            else:
-                val = long(mod.certificate[2:]) % 97 == 29
-                if not val:
-                    _logger.critical('module %s: invalid quality certificate: %s', mod.name, mod.certificate)
-                    raise osv.except_osv(_('Error'), _('Module %s: Invalid Quality Certificate') % (mod.name,))
-
 class module_dependency(osv.osv):
     _name = "ir.module.module.dependency"
     _description = "Module dependency"
index 008e804..fe749c6 100644 (file)
@@ -199,7 +199,10 @@ class res_partner(osv.osv, format_address):
         'bank_ids': fields.one2many('res.partner.bank', 'partner_id', 'Banks'),
         'website': fields.char('Website', size=64, help="Website of Partner or Company"),
         'comment': fields.text('Notes'),
-        'address': fields.one2many('res.partner.address', 'partner_id', 'Contacts'),   # should be removed in version 7, but kept until then for backward compatibility
+        'address': fields.one2many('res.partner.address', 'partner_id', 'Addresses',
+                deprecated="The address information is now directly stored on each Partner record. "\
+                           "Multiple contacts with their own address can be added via the child_ids relationship. "\
+                           "This field will be removed as of OpenERP 7.1."),
         'category_id': fields.many2many('res.partner.category', id1='partner_id', id2='category_id', string='Tags'),
         'credit_limit': fields.float(string='Credit Limit'),
         'ean13': fields.char('EAN13', size=13),
@@ -218,7 +221,8 @@ class res_partner(osv.osv, format_address):
         'city': fields.char('City', size=128),
         'state_id': fields.many2one("res.country.state", 'State'),
         'country_id': fields.many2one('res.country', 'Country'),
-        'country': fields.related('country_id', type='many2one', relation='res.country', string='Country'),   # for backward compatibility
+        'country': fields.related('country_id', type='many2one', relation='res.country', string='Country',
+                                  deprecated="This field will be removed as of OpenERP 7.1, use country_id instead"),
         'email': fields.char('Email', size=240),
         'phone': fields.char('Phone', size=64),
         'fax': fields.char('Fax', size=64),
index eed6748..06a660d 100644 (file)
 
        <record id="res_partner_17" model="res.partner">
             <field name="name">Nebula Business</field>
-            <field eval="0" name="supplier"/>
+            <field eval="1" name="supplier"/>
             <field eval="1" name="customer"/>
             <field name="is_company">1</field>
             <field name="city">Rosario</field>
index 906232c..85fb8bd 100644 (file)
                             </field>
                         </page>
                         <page string="Internal Notes">
-                            <field name="comment" placeholder="Internal notes about this customer..."/>
+                            <field name="comment" placeholder="Put an internal note..."/>
                         </page>
-                        <page string="Sales &amp; Purchases" attrs="{'invisible': [('customer', '=', False), ('supplier', '=', False)]}">
+                        <page string="Sales &amp; Purchases">
                             <group>
                                 <group>
                                     <field name="user_id"/>
index c7d2a77..acec903 100644 (file)
@@ -12,9 +12,6 @@
         <record model="ir.ui.menu" id="menu_base_config">
             <field eval="[(6,0,[ref('group_system'), ref('group_partner_manager')])]" name="groups_id"/>
         </record>
-        <record model="ir.ui.menu" id="menu_base_partner">
-            <field eval="[(6,0,[ref('group_partner_manager')])]" name="groups_id"/>
-        </record>
 
         <!-- Record Rule For Company -->
         <record id="res_company_rule" model="ir.rule">
diff --git a/openerp/db/__init__.py b/openerp/db/__init__.py
deleted file mode 100644 (file)
index 5eb06af..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2011 OpenERP s.a. (<http://openerp.com>).
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU Affero General Public License as
-#    published by the Free Software Foundation, either version 3 of the
-#    License, or (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU Affero General Public License for more details.
-#
-#    You should have received a copy of the GNU Affero General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-""" Lower-level database access.
-
-This module provides access to the underlying database without going
-through the ORM. The goal is to gather sql_db.py and other various db
-code.
-
-"""
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index 1bf7b52..6318bd9 100644 (file)
@@ -74,12 +74,12 @@ def initialize(cr):
 
         cr.execute('INSERT INTO ir_module_module \
                 (author, website, name, shortdesc, description, \
-                    category_id, auto_install, state, certificate, web, license, application, icon, sequence, summary) \
-                VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING id', (
+                    category_id, auto_install, state, web, license, application, icon, sequence, summary) \
+                VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING id', (
             info['author'],
             info['website'], i, info['name'],
             info['description'], category_id,
-            info['auto_install'], state, info['certificate'],
+            info['auto_install'], state,
             info['web'],
             info['license'],
             info['application'], info['icon'],
index 86e69fa..57fb92a 100644 (file)
@@ -61,7 +61,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
        :param graph: graph of module nodes to load
        :param status: status dictionary for keeping track of progress
        :param perform_checks: whether module descriptors should be checked for validity (prints warnings
-                              for same cases, and even raise osv_except if certificate is invalid)
+                              for same cases)
        :param skip_modules: optional list of module names (packages) which have previously been loaded and can be skipped
        :return: list of modules that were installed or updated
     """
index 540a23c..6ec9e86 100644 (file)
@@ -331,7 +331,6 @@ def load_information_from_description_file(module):
                 'author': '',
                 'auto_install': False,
                 'category': 'Uncategorized',
-                'certificate': None,
                 'depends': [],
                 'description': '',
                 'icon': get_module_icon(module),
index 037d2a9..82fb2e9 100644 (file)
@@ -1552,24 +1552,16 @@ def field_to_dict(model, cr, user, field, context=None):
         res['fnct_search'] = field._fnct_search and field._fnct_search.func_name or False
         res['fnct_inv'] = field._fnct_inv and field._fnct_inv.func_name or False
         res['fnct_inv_arg'] = field._fnct_inv_arg or False
-        res['func_obj'] = field._obj or False
     if isinstance(field, many2many):
         (table, col1, col2) = field._sql_names(model)
-        res['related_columns'] = [col1, col2]
-        res['third_table'] = table
-    for arg in ('string', 'readonly', 'states', 'size', 'required', 'group_operator',
-            'change_default', 'translate', 'help', 'select', 'selectable', 'groups'):
-        if getattr(field, arg):
-            res[arg] = getattr(field, arg)
-    for arg in ('digits', 'invisible', 'filters'):
+        res['m2m_join_columns'] = [col1, col2]
+        res['m2m_join_table'] = table
+    for arg in ('string', 'readonly', 'states', 'size', 'group_operator', 'required',
+            'change_default', 'translate', 'help', 'select', 'selectable', 'groups',
+            'deprecated', 'digits', 'invisible', 'filters'):
         if getattr(field, arg, None):
             res[arg] = getattr(field, arg)
 
-    if field.string:
-        res['string'] = field.string
-    if field.help:
-        res['help'] = field.help
-
     if hasattr(field, 'selection'):
         if isinstance(field.selection, (tuple, list)):
             res['selection'] = field.selection
index 48689c3..f324ed6 100644 (file)
@@ -3045,11 +3045,11 @@ class BaseModel(object):
                                 cr.commit()
                                 if f._type == 'text':
                                     # FIXME: for fields.text columns we should try creating GIN indexes instead (seems most suitable for an ERP context)
-                                    msg = "Table '%s': Adding (b-tree) index for text column '%s'."\
+                                    msg = "Table '%s': Adding (b-tree) index for %s column '%s'."\
                                         "This is probably useless (does not work for fulltext search) and prevents INSERTs of long texts"\
                                         " because there is a length limit for indexable btree values!\n"\
                                         "Use a search view instead if you simply want to make the field searchable."
-                                    _schema.warning(msg, self._table, k, f._type)
+                                    _schema.warning(msg, self._table, f._type, k)
                             if res2 and not f.select:
                                 cr.execute('DROP INDEX "%s_%s_index"' % (self._table, k))
                                 cr.commit()
@@ -3792,6 +3792,12 @@ class BaseModel(object):
         for res_id in ids:
             getattr(wf_service, trigger)(uid, self._name, res_id, cr)
 
+    def _workflow_signal(self, cr, uid, ids, signal, context=None):
+        """Send given workflow signal""" 
+        wf_service = netsvc.LocalService("workflow")
+        for res_id in ids:
+            wf_service.trg_validate(uid, self._name, res_id, signal, cr)
+
     def unlink(self, cr, uid, ids, context=None):
         """
         Delete records with given ids
index 877e804..94f179c 100644 (file)
@@ -184,16 +184,18 @@ class object_proxy(object):
             cr.close()
         return res
 
-    def exec_workflow_cr(self, cr, uid, obj, method, *args):
-        wf_service = netsvc.LocalService("workflow")
-        return wf_service.trg_validate(uid, obj, args[0], method, cr)
+    def exec_workflow_cr(self, cr, uid, obj, signal, *args):
+        object = pooler.get_pool(cr.dbname).get(obj)
+        if not object:
+            raise except_osv('Object Error', 'Object %s doesn\'t exist' % str(obj))
+        return object._workflow_signal(cr, uid, [args[0]], signal)
 
     @check
-    def exec_workflow(self, db, uid, obj, method, *args):
+    def exec_workflow(self, db, uid, obj, signal, *args):
         cr = pooler.get_db(db).cursor()
         try:
             try:
-                res = self.exec_workflow_cr(cr, uid, obj, method, *args)
+                res = self.exec_workflow_cr(cr, uid, obj, signal, *args)
                 cr.commit()
             except Exception:
                 cr.rollback()
index 511d62c..ef0fd75 100644 (file)
@@ -33,7 +33,8 @@ import openerp.modules
 import openerp.netsvc
 import openerp.osv
 import openerp.tools
-import openerp.wsgi
+import openerp.service.wsgi_server
+import openerp.service.workers
 
 #.apidoc title: RPC Services
 
@@ -48,22 +49,38 @@ import openerp.wsgi
 
 _logger = logging.getLogger(__name__)
 
-# TODO block until the server is really up, accepting connections
-# TODO be idemptotent (as long as stop_service was not called).
-def start_services():
-    """ Start all services.
-
-    Services include the different servers and cron threads.
-
-    """
+def load_server_wide_modules():
+    for m in openerp.conf.server_wide_modules:
+        try:
+            openerp.modules.module.load_openerp_module(m)
+        except Exception:
+            msg = ''
+            if m == 'web':
+                msg = """
+The `web` module is provided by the addons found in the `openerp-web` project.
+Maybe you forgot to add those addons in your addons_path configuration."""
+            _logger.exception('Failed to load server-wide module `%s`.%s', m, msg)
+
+start_internal_done = False
+
+def start_internal():
+    global start_internal_done
+    if start_internal_done:
+        return
+    openerp.netsvc.init_logger()
+    openerp.modules.loading.open_openerp_namespace()
     # Instantiate local services (this is a legacy design).
     openerp.osv.osv.start_object_proxy()
     # Export (for RPC) services.
     web_services.start_web_services()
+    load_server_wide_modules()
+    start_internal_done = True
+
+def start_services():
+    """ Start all services including http, netrpc and cron """
+    start_internal()
 
     # Initialize the HTTP stack.
-    #http_server.init_servers()
-    #http_server.init_static_http()
     netrpc_server.init_servers()
 
     # Start the main cron thread.
@@ -73,8 +90,7 @@ def start_services():
     openerp.netsvc.Server.startAll()
 
     # Start the WSGI server.
-    openerp.wsgi.core.start_server()
-
+    openerp.service.wsgi_server.start_server()
 
 def stop_services():
     """ Stop all services. """
@@ -82,7 +98,7 @@ def stop_services():
     openerp.cron.cancel_all()
 
     openerp.netsvc.Server.quitAll()
-    openerp.wsgi.core.stop_server()
+    openerp.service.wsgi_server.stop_server()
     config = openerp.tools.config
     _logger.info("Initiating shutdown")
     _logger.info("Hit CTRL-C again or send a second signal to force the shutdown.")
@@ -101,6 +117,11 @@ def stop_services():
 
     openerp.modules.registry.RegistryManager.delete_all()
 
+def start_services_workers():
+    openerp.multi_process = True # Nah!
+
+    openerp.service.workers.Multicorn(openerp.service.wsgi_server.application).run()
+
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
 
index fcbfaf0..cc78d06 100644 (file)
@@ -32,8 +32,8 @@ import sys
 import threading
 import traceback
 import openerp
+import openerp.service.netrpc_socket
 import openerp.netsvc as netsvc
-import openerp.tiny_socket as tiny_socket
 import openerp.tools as tools
 
 _logger = logging.getLogger(__name__)
@@ -52,7 +52,7 @@ class TinySocketClientThread(threading.Thread):
     def run(self):
         self.running = True
         try:
-            ts = tiny_socket.mysocket(self.sock)
+            ts = openerp.server.netrpc_socket.mysocket(self.sock)
         except Exception:
             self.threads.remove(self)
             self.running = False
diff --git a/openerp/service/netrpc_socket.py b/openerp/service/netrpc_socket.py
new file mode 100644 (file)
index 0000000..c49c8f7
--- /dev/null
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#    
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.     
+#
+##############################################################################
+
+import socket
+import cPickle
+import cStringIO
+
+import openerp.netsvc as netsvc
+
+# Pickle protocol version 2 is optimized compared to default (version 0)
+PICKLE_PROTOCOL = 2
+
+class Myexception(Exception):
+    """
+    custom exception object store
+    * faultcode
+    * faulestring
+    * args
+    """
+    
+    def __init__(self, faultCode, faultString):
+        self.faultCode = faultCode
+        self.faultString = faultString
+        self.args = (faultCode, faultString)
+
+class mysocket:
+
+    def __init__(self, sock=None):
+        if sock is None:
+            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        else:
+            self.sock = sock
+        # self.sock.settimeout(120)
+        # prepare this socket for long operations: it may block for infinite
+        # time, but should exit as soon as the net is down
+        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+        
+    def connect(self, host, port=False):
+        if not port:
+            protocol, buf = host.split('//')
+            host, port = buf.split(':')
+        self.sock.connect((host, int(port)))
+        
+    def disconnect(self):
+        netsvc.close_socket(self.sock)
+        
+    def mysend(self, msg, exception=False, traceback=None):
+        msg = cPickle.dumps([msg, traceback], PICKLE_PROTOCOL)
+        self.sock.sendall('%8d%d%s' % (len(msg), bool(exception), msg))
+            
+    def myreceive(self):
+        buf=''
+        while len(buf) < 9:
+            chunk = self.sock.recv(9 - len(buf))
+            if not chunk:
+                raise socket.timeout
+            buf += chunk
+        size = int(buf[:8])
+        if buf[8] != "0":
+            exception = buf[8]
+        else:
+            exception = False
+        msg = ''
+        while len(msg) < size:
+            chunk = self.sock.recv(size-len(msg))
+            if not chunk:
+                raise socket.timeout
+            msg = msg + chunk
+        msgio = cStringIO.StringIO(msg)
+        unpickler = cPickle.Unpickler(msgio)
+        unpickler.find_global = None
+        res = unpickler.load()
+
+        if isinstance(res[0],Exception):
+            if exception:
+                raise Myexception(str(res[0]), str(res[1]))
+            raise res[0]
+        else:
+            return res[0]
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/service/workers.py b/openerp/service/workers.py
new file mode 100644 (file)
index 0000000..eae1b28
--- /dev/null
@@ -0,0 +1,371 @@
+#-----------------------------------------------------------
+# Multicorn, multiprocessing inspired by gunicorn
+# TODO rename class: Multicorn -> Arbiter ?
+#-----------------------------------------------------------
+import errno
+try:
+    import fcntl
+except ImportError:
+    fcntl = None
+import psutil
+import random
+import resource
+import select
+import socket
+import time
+import logging
+import os
+import signal
+import sys
+
+import werkzeug.serving
+
+import openerp
+import openerp.tools.config as config
+
+_logger = logging.getLogger(__name__)
+
+class Multicorn(object):
+    """ Multiprocessing inspired by (g)unicorn.
+    Multicorn currently uses accept(2) as dispatching method between workers
+    but we plan to replace it by a more intelligent dispatcher to will parse
+    the first HTTP request line.
+    """
+    def __init__(self, app):
+        # config
+        self.address = (config['xmlrpc_interface'] or '0.0.0.0', config['xmlrpc_port'])
+        self.population = config['workers']
+        self.timeout = config['limit_time_real']
+        self.limit_request = config['limit_request']
+        # working vars
+        self.beat = 4
+        self.app = app
+        self.pid = os.getpid()
+        self.socket = None
+        self.workers_http = {}
+        self.workers_cron = {}
+        self.workers = {}
+        self.generation = 0
+        self.queue = []
+
+    def pipe_new(self):
+        pipe = os.pipe()
+        for fd in pipe:
+            # non_blocking
+            flags = fcntl.fcntl(fd, fcntl.F_GETFL) | os.O_NONBLOCK
+            fcntl.fcntl(fd, fcntl.F_SETFL, flags)
+            # close_on_exec
+            flags = fcntl.fcntl(fd, fcntl.F_GETFD) | fcntl.FD_CLOEXEC
+            fcntl.fcntl(fd, fcntl.F_SETFD, flags)
+        return pipe
+
+    def pipe_ping(self, pipe):
+        try:
+            os.write(pipe[1], '.')
+        except IOError, e:
+            if e.errno not in [errno.EAGAIN, errno.EINTR]:
+                raise
+
+    def signal_handler(self, sig, frame):
+        if len(self.queue) < 5 or sig == signal.SIGCHLD:
+            self.queue.append(sig)
+            self.pipe_ping(self.pipe)
+        else:
+            _logger.warn("Dropping signal: %s", sig)
+
+    def worker_spawn(self, klass, workers_registry):
+        self.generation += 1
+        worker = klass(self)
+        pid = os.fork()
+        if pid != 0:
+            worker.pid = pid
+            self.workers[pid] = worker
+            workers_registry[pid] = worker
+            return worker
+        else:
+            worker.run()
+            sys.exit(0)
+
+    def worker_pop(self, pid):
+        if pid in self.workers:
+            _logger.debug("Worker (%s) unregistered",pid)
+            try:
+                self.workers_http.pop(pid,None)
+                self.workers_cron.pop(pid,None)
+                u = self.workers.pop(pid)
+                u.close()
+            except OSError:
+                return
+
+    def worker_kill(self, pid, sig):
+        try:
+            os.kill(pid, sig)
+        except OSError, e:
+            if e.errno == errno.ESRCH:
+                self.worker_pop(pid)
+
+    def process_signals(self):
+        while len(self.queue):
+            sig = self.queue.pop(0)
+            if sig in [signal.SIGINT,signal.SIGTERM]:
+                raise KeyboardInterrupt
+
+    def process_zombie(self):
+        # reap dead workers
+        while 1:
+            try:
+                wpid, status = os.waitpid(-1, os.WNOHANG)
+                if not wpid:
+                    break
+                if (status >> 8) == 3:
+                    msg = "Critial worker error (%s)"
+                    _logger.critical(msg, wpid)
+                    raise Exception(msg % wpid)
+                self.worker_pop(wpid)
+            except OSError, e:
+                if e.errno == errno.ECHILD:
+                    break
+                raise
+
+    def process_timeout(self):
+        now = time.time()
+        for (pid, worker) in self.workers.items():
+            if now - worker.watchdog_time >= worker.watchdog_timeout:
+                _logger.error("Worker (%s) timeout", pid)
+                self.worker_kill(pid, signal.SIGKILL)
+
+    def process_spawn(self):
+        while len(self.workers_http) < self.population:
+            self.worker_spawn(WorkerHTTP, self.workers_http)
+        while len(self.workers_cron) < 1: # config option ?
+            self.worker_spawn(WorkerCron, self.workers_cron)
+
+    def sleep(self):
+        try:
+            # map of fd -> worker
+            fds = dict([(w.watchdog_pipe[0],w) for k,w in self.workers.items()])
+            fd_in = fds.keys() + [self.pipe[0]]
+            # check for ping or internal wakeups
+            ready = select.select(fd_in, [], [], self.beat)
+            # update worker watchdogs
+            for fd in ready[0]:
+                if fd in fds:
+                    fds[fd].watchdog_time = time.time()
+                try:
+                    # empty pipe
+                    while os.read(fd, 1):
+                        pass
+                except OSError, e:
+                    if e.errno not in [errno.EAGAIN]:
+                        raise
+        except select.error, e:
+            if e[0] not in [errno.EINTR]:
+                raise
+
+    def start(self):
+        # wakeup pipe, python doesnt throw EINTR when a syscall is interrupted
+        # by a signal simulating a pseudo SA_RESTART. We write to a pipe in the
+        # signal handler to overcome this behaviour
+        self.pipe = self.pipe_new()
+        # set signal
+        signal.signal(signal.SIGINT, self.signal_handler)
+        signal.signal(signal.SIGTERM, self.signal_handler)
+        signal.signal(signal.SIGCHLD, self.signal_handler)
+        # listen to socket
+        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+        self.socket.setblocking(0)
+        self.socket.bind(self.address)
+        self.socket.listen(8)
+
+    def stop(self, graceful=True):
+        if graceful:
+            _logger.info("Stopping gracefully")
+            limit = time.time() + self.timeout
+            for pid in self.workers.keys():
+                self.worker_kill(pid, signal.SIGTERM)
+            while self.workers and time.time() < limit:
+                self.process_zombie()
+                time.sleep(0.1)
+        else:
+            _logger.info("Stopping forcefully")
+        for pid in self.workers.keys():
+            self.worker_kill(pid, signal.SIGTERM)
+        self.socket.close()
+        import __main__
+        __main__.quit_signals_received = 1
+
+    def run(self):
+        self.start()
+        _logger.debug("Multiprocess starting")
+        while 1:
+            try:
+                #_logger.debug("Multiprocess beat (%s)",time.time())
+                self.process_signals()
+                self.process_zombie()
+                self.process_timeout()
+                self.process_spawn()
+                self.sleep()
+            except KeyboardInterrupt:
+                _logger.debug("Multiprocess clean stop")
+                self.stop()
+                break
+            except Exception,e:
+                _logger.exception(e)
+                self.stop(False)
+                sys.exit(-1)
+
+class Worker(object):
+    """ Workers """
+    def __init__(self, multi):
+        self.multi = multi
+        self.watchdog_time = time.time()
+        self.watchdog_pipe = multi.pipe_new()
+        self.watchdog_timeout = multi.timeout
+        self.ppid = os.getpid()
+        self.pid = None
+        self.alive = True
+        # should we rename into lifetime ?
+        self.request_max = multi.limit_request
+        self.request_count = 0
+
+    def close(self):
+        os.close(self.watchdog_pipe[0])
+        os.close(self.watchdog_pipe[1])
+
+    def signal_handler(self, sig, frame):
+        self.alive = False
+
+    def sleep(self):
+        try:
+            ret = select.select([self.multi.socket], [], [], self.multi.beat)
+        except select.error, e:
+            if e[0] not in [errno.EINTR]:
+                raise
+
+    def process_limit(self):
+        # If our parent changed sucide
+        if self.ppid != os.getppid():
+            _logger.info("Worker (%s) Parent changed", self.pid)
+            self.alive = False
+        # check for lifetime
+        if self.request_count >= self.request_max:
+            _logger.info("Worker (%d) max request (%s) reached.", self.pid, self.request_count)
+            self.alive = False
+        # Reset the worker if it consumes too much memory (e.g. caused by a memory leak).
+        rss, vms = psutil.Process(os.getpid()).get_memory_info()
+        if vms > config['limit_memory_soft']:
+            _logger.info('Virtual memory consumption too high, rebooting the worker.')
+            self.alive = False # Commit suicide after the request.
+
+        # VMS and RLIMIT_AS are the same thing: virtual memory, a.k.a. address space
+        soft, hard = resource.getrlimit(resource.RLIMIT_AS)
+        resource.setrlimit(resource.RLIMIT_AS, (config['limit_memory_hard'], hard))
+
+        # SIGXCPU (exceeded CPU time) signal handler will raise an exception.
+        r = resource.getrusage(resource.RUSAGE_SELF)
+        cpu_time = r.ru_utime + r.ru_stime
+        def time_expired(n, stack):
+            _logger.info('CPU time limit exceeded.')
+            raise Exception('CPU time limit exceeded.')
+        signal.signal(signal.SIGXCPU, time_expired)
+        soft, hard = resource.getrlimit(resource.RLIMIT_CPU)
+        resource.setrlimit(resource.RLIMIT_CPU, (cpu_time + config['limit_time_cpu'], hard))
+
+    def process_work(self):
+        pass
+
+    def start(self):
+        self.pid = os.getpid()
+        _logger.info("Worker %s (%s) alive", self.__class__.__name__, self.pid)
+        # Reseed the random number generator
+        random.seed()
+        # Prevent fd inherientence close_on_exec
+        flags = fcntl.fcntl(self.multi.socket, fcntl.F_GETFD) | fcntl.FD_CLOEXEC
+        fcntl.fcntl(self.multi.socket, fcntl.F_SETFD, flags)
+        # reset blocking status
+        self.multi.socket.setblocking(0)
+        signal.signal(signal.SIGINT, self.signal_handler)
+        signal.signal(signal.SIGTERM, signal.SIG_DFL)
+        signal.signal(signal.SIGCHLD, signal.SIG_DFL)
+
+    def stop(self):
+        pass
+
+    def run(self):
+        try:
+            self.start()
+            while self.alive:
+                self.process_limit()
+                self.multi.pipe_ping(self.watchdog_pipe)
+                self.sleep()
+                self.process_work()
+            _logger.info("Worker (%s) exiting...",self.pid)
+            self.stop()
+        except Exception,e:
+            _logger.exception("Worker (%s) Exception occured, exiting..."%self.pid)
+            # should we use 3 to abort everything ?
+            sys.exit(1)
+
+class WorkerHTTP(Worker):
+    """ HTTP Request workers """
+    def process_request(self, client, addr):
+        client.setblocking(1)
+        client.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+        # Prevent fd inherientence close_on_exec
+        flags = fcntl.fcntl(client, fcntl.F_GETFD) | fcntl.FD_CLOEXEC
+        fcntl.fcntl(client, fcntl.F_SETFD, flags)
+        # do request using WorkerBaseWSGIServer monkey patched with socket
+        self.server.socket = client
+        self.server.process_request(client,addr)
+        self.request_count += 1
+
+    def process_work(self):
+        try:
+            client, addr = self.multi.socket.accept()
+            self.process_request(client, addr)
+        except socket.error, e:
+            if e[0] not in (errno.EAGAIN, errno.ECONNABORTED):
+                raise
+
+    def start(self):
+        Worker.start(self)
+        self.server = WorkerBaseWSGIServer(self.multi.app)
+
+class WorkerBaseWSGIServer(werkzeug.serving.BaseWSGIServer):
+    """ werkzeug WSGI Server patched to allow using an external listen socket
+    """
+    def __init__(self, app):
+        werkzeug.serving.BaseWSGIServer.__init__(self, "1", "1", app)
+    def server_bind(self):
+        # we dont bind beause we use the listen socket of Multicorn#socket
+        # instead we close the socket
+        if self.socket:
+            self.socket.close()
+    def server_activate(self):
+        # dont listen as we use Multicorn#socket
+        pass
+
+class WorkerCron(Worker):
+    """ Cron workers """
+    def sleep(self):
+        time.sleep(60)
+
+    def process_work(self):
+        if config['db_name']:
+            db_names = config['db_name'].split(',')
+        else:
+            db_names = openerp.netsvc.ExportService._services['db'].exp_list(True)
+        for db_name in db_names:
+            while True:
+                # TODO Each job should be considered as one request in multiprocessing
+                acquired = openerp.addons.base.ir.ir_cron.ir_cron._acquire_job(db_name)
+                if not acquired:
+                    break
+        self.request_count += 1
+
+    def start(self):
+        Worker.start(self)
+        openerp.service.start_internal()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py
new file mode 100644 (file)
index 0000000..a73617d
--- /dev/null
@@ -0,0 +1,446 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2011-2012 OpenERP s.a. (<http://openerp.com>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+"""
+
+WSGI stack, common code.
+
+"""
+
+import httplib
+import urllib
+import xmlrpclib
+import StringIO
+
+import errno
+import logging
+import os
+import signal
+import sys
+import threading
+import traceback
+
+import werkzeug.serving
+import werkzeug.contrib.fixers
+
+import openerp
+import openerp.modules
+import openerp.tools.config as config
+import websrv_lib
+
+_logger = logging.getLogger(__name__)
+
+# XML-RPC fault codes. Some care must be taken when changing these: the
+# constants are also defined client-side and must remain in sync.
+# User code must use the exceptions defined in ``openerp.exceptions`` (not
+# create directly ``xmlrpclib.Fault`` objects).
+RPC_FAULT_CODE_CLIENT_ERROR = 1 # indistinguishable from app. error.
+RPC_FAULT_CODE_APPLICATION_ERROR = 1
+RPC_FAULT_CODE_WARNING = 2
+RPC_FAULT_CODE_ACCESS_DENIED = 3
+RPC_FAULT_CODE_ACCESS_ERROR = 4
+
+# The new (6.1) versioned RPC paths.
+XML_RPC_PATH = '/openerp/xmlrpc'
+XML_RPC_PATH_1 = '/openerp/xmlrpc/1'
+JSON_RPC_PATH = '/openerp/jsonrpc'
+JSON_RPC_PATH_1 = '/openerp/jsonrpc/1'
+
+def xmlrpc_return(start_response, service, method, params, legacy_exceptions=False):
+    """
+    Helper to call a service's method with some params, using a wsgi-supplied
+    ``start_response`` callback.
+
+    This is the place to look at to see the mapping between core exceptions
+    and XML-RPC fault codes.
+    """
+    # Map OpenERP core exceptions to XML-RPC fault codes. Specific exceptions
+    # defined in ``openerp.exceptions`` are mapped to specific fault codes;
+    # all the other exceptions are mapped to the generic
+    # RPC_FAULT_CODE_APPLICATION_ERROR value.
+    # This also mimics SimpleXMLRPCDispatcher._marshaled_dispatch() for
+    # exception handling.
+    try:
+        result = openerp.netsvc.dispatch_rpc(service, method, params)
+        response = xmlrpclib.dumps((result,), methodresponse=1, allow_none=False, encoding=None)
+    except Exception, e:
+        if legacy_exceptions:
+            response = xmlrpc_handle_exception_legacy(e)
+        else:
+            response = xmlrpc_handle_exception(e)
+    start_response("200 OK", [('Content-Type','text/xml'), ('Content-Length', str(len(response)))])
+    return [response]
+
+def xmlrpc_handle_exception(e):
+    if isinstance(e, openerp.osv.osv.except_osv): # legacy
+        fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, openerp.tools.ustr(e.value))
+        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+    elif isinstance(e, openerp.exceptions.Warning):
+        fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e))
+        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+    elif isinstance (e, openerp.exceptions.AccessError):
+        fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_ERROR, str(e))
+        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+    elif isinstance(e, openerp.exceptions.AccessDenied):
+        fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_DENIED, str(e))
+        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+    elif isinstance(e, openerp.exceptions.DeferredException):
+        info = e.traceback
+        # Which one is the best ?
+        formatted_info = "".join(traceback.format_exception(*info))
+        #formatted_info = openerp.tools.exception_to_unicode(e) + '\n' + info
+        fault = xmlrpclib.Fault(RPC_FAULT_CODE_APPLICATION_ERROR, formatted_info)
+        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+    else:
+        if hasattr(e, 'message') and e.message == 'AccessDenied': # legacy
+            fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_DENIED, str(e))
+            response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+        else:
+            info = sys.exc_info()
+            # Which one is the best ?
+            formatted_info = "".join(traceback.format_exception(*info))
+            #formatted_info = openerp.tools.exception_to_unicode(e) + '\n' + info
+            fault = xmlrpclib.Fault(RPC_FAULT_CODE_APPLICATION_ERROR, formatted_info)
+            response = xmlrpclib.dumps(fault, allow_none=None, encoding=None)
+    return response
+
+def xmlrpc_handle_exception_legacy(e):
+    if isinstance(e, openerp.osv.osv.except_osv):
+        fault = xmlrpclib.Fault('warning -- ' + e.name + '\n\n' + e.value, '')
+        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+    elif isinstance(e, openerp.exceptions.Warning):
+        fault = xmlrpclib.Fault('warning -- Warning\n\n' + str(e), '')
+        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+    elif isinstance(e, openerp.exceptions.AccessError):
+        fault = xmlrpclib.Fault('warning -- AccessError\n\n' + str(e), '')
+        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+    elif isinstance(e, openerp.exceptions.AccessDenied):
+        fault = xmlrpclib.Fault('AccessDenied', str(e))
+        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+    elif isinstance(e, openerp.exceptions.DeferredException):
+        info = e.traceback
+        formatted_info = "".join(traceback.format_exception(*info))
+        fault = xmlrpclib.Fault(openerp.tools.ustr(e.message), formatted_info)
+        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
+    else:
+        info = sys.exc_info()
+        formatted_info = "".join(traceback.format_exception(*info))
+        fault = xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
+        response = xmlrpclib.dumps(fault, allow_none=None, encoding=None)
+    return response
+
+def wsgi_xmlrpc_1(environ, start_response):
+    """ The main OpenERP WSGI handler."""
+    if environ['REQUEST_METHOD'] == 'POST' and environ['PATH_INFO'].startswith(XML_RPC_PATH_1):
+        length = int(environ['CONTENT_LENGTH'])
+        data = environ['wsgi.input'].read(length)
+
+        params, method = xmlrpclib.loads(data)
+
+        path = environ['PATH_INFO'][len(XML_RPC_PATH_1):]
+        if path.startswith('/'): path = path[1:]
+        if path.endswith('/'): path = path[:-1]
+        path = path.split('/')
+
+        # All routes are hard-coded.
+
+        # No need for a db segment.
+        if len(path) == 1:
+            service = path[0]
+
+            if service == 'common':
+                if method in ('server_version',):
+                    service = 'db'
+            return xmlrpc_return(start_response, service, method, params)
+
+        # A db segment must be given.
+        elif len(path) == 2:
+            service, db_name = path
+            params = (db_name,) + params
+
+            return xmlrpc_return(start_response, service, method, params)
+
+        # A db segment and a model segment must be given.
+        elif len(path) == 3 and path[0] == 'model':
+            service, db_name, model_name = path
+            params = (db_name,) + params[:2] + (model_name,) + params[2:]
+            service = 'object'
+            return xmlrpc_return(start_response, service, method, params)
+
+        # The body has been read, need to raise an exception (not return None).
+        fault = xmlrpclib.Fault(RPC_FAULT_CODE_CLIENT_ERROR, '')
+        response = xmlrpclib.dumps(fault, allow_none=None, encoding=None)
+        start_response("200 OK", [('Content-Type','text/xml'), ('Content-Length', str(len(response)))])
+        return [response]
+
+def wsgi_xmlrpc(environ, start_response):
+    """ WSGI handler to return the versions."""
+    if environ['REQUEST_METHOD'] == 'POST' and environ['PATH_INFO'].startswith(XML_RPC_PATH):
+        length = int(environ['CONTENT_LENGTH'])
+        data = environ['wsgi.input'].read(length)
+
+        params, method = xmlrpclib.loads(data)
+
+        path = environ['PATH_INFO'][len(XML_RPC_PATH):]
+        if path.startswith('/'): path = path[1:]
+        if path.endswith('/'): path = path[:-1]
+        path = path.split('/')
+
+        # All routes are hard-coded.
+
+        if len(path) == 1 and path[0] == '' and method in ('version',):
+            return xmlrpc_return(start_response, 'common', method, ())
+
+        # The body has been read, need to raise an exception (not return None).
+        fault = xmlrpclib.Fault(RPC_FAULT_CODE_CLIENT_ERROR, '')
+        response = xmlrpclib.dumps(fault, allow_none=None, encoding=None)
+        start_response("200 OK", [('Content-Type','text/xml'), ('Content-Length', str(len(response)))])
+        return [response]
+
+def wsgi_xmlrpc_legacy(environ, start_response):
+    if environ['REQUEST_METHOD'] == 'POST' and environ['PATH_INFO'].startswith('/xmlrpc/'):
+        length = int(environ['CONTENT_LENGTH'])
+        data = environ['wsgi.input'].read(length)
+        path = environ['PATH_INFO'][len('/xmlrpc/'):] # expected to be one of db, object, ...
+
+        params, method = xmlrpclib.loads(data)
+        return xmlrpc_return(start_response, path, method, params, True)
+
+def wsgi_webdav(environ, start_response):
+    pi = environ['PATH_INFO']
+    if environ['REQUEST_METHOD'] == 'OPTIONS' and pi in ['*','/']:
+        return return_options(environ, start_response)
+    elif pi.startswith('/webdav'):
+        http_dir = websrv_lib.find_http_service(pi)
+        if http_dir:
+            path = pi[len(http_dir.path):]
+            if path.startswith('/'):
+                environ['PATH_INFO'] = path
+            else:
+                environ['PATH_INFO'] = '/' + path
+            return http_to_wsgi(http_dir)(environ, start_response)
+
+def return_options(environ, start_response):
+    # Microsoft specific header, see
+    # http://www.ibm.com/developerworks/rational/library/2089.html
+    if 'Microsoft' in environ.get('User-Agent', ''):
+        options = [('MS-Author-Via', 'DAV')]
+    else:
+        options = []
+    options += [('DAV', '1 2'), ('Allow', 'GET HEAD PROPFIND OPTIONS REPORT')]
+    start_response("200 OK", [('Content-Length', str(0))] + options)
+    return []
+
+def http_to_wsgi(http_dir):
+    """
+    Turn a BaseHTTPRequestHandler into a WSGI entry point.
+
+    Actually the argument is not a bare BaseHTTPRequestHandler but is wrapped
+    (as a class, so it needs to be instanciated) in a HTTPDir.
+
+    This code is adapted from wbsrv_lib.MultiHTTPHandler._handle_one_foreign().
+    It is a temporary solution: the HTTP sub-handlers (in particular the
+    document_webdav addon) have to be WSGIfied.
+    """
+    def wsgi_handler(environ, start_response):
+
+        headers = {}
+        for key, value in environ.items():
+            if key.startswith('HTTP_'):
+                key = key[5:].replace('_', '-').title()
+                headers[key] = value
+            if key == 'CONTENT_LENGTH':
+                key = key.replace('_', '-').title()
+                headers[key] = value
+        if environ.get('Content-Type'):
+            headers['Content-Type'] = environ['Content-Type']
+
+        path = urllib.quote(environ.get('PATH_INFO', ''))
+        if environ.get('QUERY_STRING'):
+            path += '?' + environ['QUERY_STRING']
+
+        request_version = 'HTTP/1.1' # TODO
+        request_line = "%s %s %s\n" % (environ['REQUEST_METHOD'], path, request_version)
+
+        class Dummy(object):
+            pass
+
+        # Let's pretend we have a server to hand to the handler.
+        server = Dummy()
+        server.server_name = environ['SERVER_NAME']
+        server.server_port = int(environ['SERVER_PORT'])
+
+        # Initialize the underlying handler and associated auth. provider.
+        con = openerp.service.websrv_lib.noconnection(environ['wsgi.input'])
+        handler = http_dir.instanciate_handler(con, environ['REMOTE_ADDR'], server)
+
+        # Populate the handler as if it is called by a regular HTTP server
+        # and the request is already parsed.
+        handler.wfile = StringIO.StringIO()
+        handler.rfile = environ['wsgi.input']
+        handler.headers = headers
+        handler.command = environ['REQUEST_METHOD']
+        handler.path = path
+        handler.request_version = request_version
+        handler.close_connection = 1
+        handler.raw_requestline = request_line
+        handler.requestline = request_line
+
+        # Handle authentication if there is an auth. provider associated to
+        # the handler.
+        if hasattr(handler, 'auth_provider'):
+            try:
+                handler.auth_provider.checkRequest(handler, path)
+            except websrv_lib.AuthRequiredExc, ae:
+                # Darwin 9.x.x webdav clients will report "HTTP/1.0" to us, while they support (and need) the
+                # authorisation features of HTTP/1.1 
+                if request_version != 'HTTP/1.1' and ('Darwin/9.' not in handler.headers.get('User-Agent', '')):
+                    start_response("403 Forbidden", [])
+                    return []
+                start_response("401 Authorization required", [
+                    ('WWW-Authenticate', '%s realm="%s"' % (ae.atype,ae.realm)),
+                    # ('Connection', 'keep-alive'),
+                    ('Content-Type', 'text/html'),
+                    ('Content-Length', 4), # len(self.auth_required_msg)
+                    ])
+                return ['Blah'] # self.auth_required_msg
+            except websrv_lib.AuthRejectedExc,e:
+                start_response("403 %s" % (e.args[0],), [])
+                return []
+
+        method_name = 'do_' + handler.command
+
+        # Support the OPTIONS method even when not provided directly by the
+        # handler. TODO I would prefer to remove it and fix the handler if
+        # needed.
+        if not hasattr(handler, method_name):
+            if handler.command == 'OPTIONS':
+                return return_options(environ, start_response)
+            start_response("501 Unsupported method (%r)" % handler.command, [])
+            return []
+
+        # Finally, call the handler's method.
+        try:
+            method = getattr(handler, method_name)
+            method()
+            # The DAV handler buffers its output and provides a _flush()
+            # method.
+            getattr(handler, '_flush', lambda: None)()
+            response = parse_http_response(handler.wfile.getvalue())
+            response_headers = response.getheaders()
+            body = response.read()
+            start_response(str(response.status) + ' ' + response.reason, response_headers)
+            return [body]
+        except (websrv_lib.AuthRejectedExc, websrv_lib.AuthRequiredExc):
+            raise
+        except Exception, e:
+            start_response("500 Internal error", [])
+            return []
+
+    return wsgi_handler
+
+def parse_http_response(s):
+    """ Turn a HTTP response string into a httplib.HTTPResponse object."""
+    class DummySocket(StringIO.StringIO):
+        """
+        This is used to provide a StringIO to httplib.HTTPResponse
+        which, instead of taking a file object, expects a socket and
+        uses its makefile() method.
+        """
+        def makefile(self, *args, **kw):
+            return self
+    response = httplib.HTTPResponse(DummySocket(s))
+    response.begin()
+    return response
+
+# WSGI handlers registered through the register_wsgi_handler() function below.
+module_handlers = []
+
+def register_wsgi_handler(handler):
+    """ Register a WSGI handler.
+
+    Handlers are tried in the order they are added. We might provide a way to
+    register a handler for specific routes later.
+    """
+    module_handlers.append(handler)
+
+def application_unproxied(environ, start_response):
+    """ WSGI entry point."""
+    openerp.service.start_internal()
+
+    # Try all handlers until one returns some result (i.e. not None).
+    wsgi_handlers = [wsgi_xmlrpc_1, wsgi_xmlrpc, wsgi_xmlrpc_legacy, wsgi_webdav]
+    wsgi_handlers += module_handlers
+    for handler in wsgi_handlers:
+        result = handler(environ, start_response)
+        if result is None:
+            continue
+        return result
+
+
+    # We never returned from the loop.
+    response = 'No handler found.\n'
+    start_response('404 Not Found', [('Content-Type', 'text/plain'), ('Content-Length', str(len(response)))])
+    return [response]
+
+def application(environ, start_response):
+    if config['proxy_mode'] and 'HTTP_X_FORWARDED_HOST' in environ:
+        return werkzeug.contrib.fixers.ProxyFix(application_unproxied)(environ, start_response)
+    else:
+        return application_unproxied(environ, start_response)
+
+# The WSGI server, started by start_server(), stopped by stop_server().
+httpd = None
+
+def serve():
+    """ Serve HTTP requests via werkzeug development server.
+
+    If werkzeug can not be imported, we fall back to wsgiref's simple_server.
+
+    Calling this function is blocking, you might want to call it in its own
+    thread.
+    """
+
+    global httpd
+
+    # TODO Change the xmlrpc_* options to http_*
+    interface = config['xmlrpc_interface'] or '0.0.0.0'
+    port = config['xmlrpc_port']
+    httpd = werkzeug.serving.make_server(interface, port, application, threaded=True)
+    _logger.info('HTTP service (werkzeug) running on %s:%s', interface, port)
+    httpd.serve_forever()
+
+def start_server():
+    """ Call serve() in its own thread.
+
+    The WSGI server can be shutdown with stop_server() below.
+    """
+    threading.Thread(target=serve).start()
+
+def stop_server():
+    """ Initiate the shutdown of the WSGI server.
+
+    The server is supposed to have been started by start_server() above.
+    """
+    if httpd:
+        httpd.shutdown()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/tiny_socket.py b/openerp/tiny_socket.py
deleted file mode 100644 (file)
index b5f5bbc..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#    
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU Affero General Public License as
-#    published by the Free Software Foundation, either version 3 of the
-#    License, or (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU Affero General Public License for more details.
-#
-#    You should have received a copy of the GNU Affero General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.     
-#
-##############################################################################
-
-import socket
-import cPickle
-import cStringIO
-
-import netsvc
-
-#.apidoc title: Net-RPC classes
-
-# Pickle protocol version 2 is optimized compared to default (version 0)
-PICKLE_PROTOCOL = 2
-
-
-class Myexception(Exception):
-    """
-    custom exception object store
-    * faultcode
-    * faulestring
-    * args
-    """
-    
-    def __init__(self, faultCode, faultString):
-        self.faultCode = faultCode
-        self.faultString = faultString
-        self.args = (faultCode, faultString)
-
-class mysocket:
-
-    def __init__(self, sock=None):
-        if sock is None:
-            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        else:
-            self.sock = sock
-        # self.sock.settimeout(120)
-        # prepare this socket for long operations: it may block for infinite
-        # time, but should exit as soon as the net is down
-        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
-        
-    def connect(self, host, port=False):
-        if not port:
-            protocol, buf = host.split('//')
-            host, port = buf.split(':')
-        self.sock.connect((host, int(port)))
-        
-    def disconnect(self):
-        netsvc.close_socket(self.sock)
-        
-    def mysend(self, msg, exception=False, traceback=None):
-        msg = cPickle.dumps([msg, traceback], PICKLE_PROTOCOL)
-        self.sock.sendall('%8d%d%s' % (len(msg), bool(exception), msg))
-            
-    def myreceive(self):
-        buf=''
-        while len(buf) < 9:
-            chunk = self.sock.recv(9 - len(buf))
-            if not chunk:
-                raise socket.timeout
-            buf += chunk
-        size = int(buf[:8])
-        if buf[8] != "0":
-            exception = buf[8]
-        else:
-            exception = False
-        msg = ''
-        while len(msg) < size:
-            chunk = self.sock.recv(size-len(msg))
-            if not chunk:
-                raise socket.timeout
-            msg = msg + chunk
-        msgio = cStringIO.StringIO(msg)
-        unpickler = cPickle.Unpickler(msgio)
-        unpickler.find_global = None
-        res = unpickler.load()
-
-        if isinstance(res[0],Exception):
-            if exception:
-                raise Myexception(str(res[0]), str(res[1]))
-            raise res[0]
-        else:
-            return res[0]
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index ce157c5..18b4422 100644 (file)
@@ -253,8 +253,6 @@ class configmanager(object):
 
         # Advanced options
         group = optparse.OptionGroup(parser, "Advanced options")
-        group.add_option("--cache-timeout", dest="cache_timeout", my_default=100000,
-                          help="set the timeout for the cache system", type="int")
         group.add_option('--debug', dest='debug_mode', action='store_true', my_default=False, help='enable debug mode')
         group.add_option("--stop-after-init", action="store_true", dest="stop_after_init", my_default=False,
                           help="stop the server after its initialization")
@@ -272,23 +270,30 @@ class configmanager(object):
         group.add_option("--max-cron-threads", dest="max_cron_threads", my_default=4,
                          help="Maximum number of threads processing concurrently cron jobs.",
                          type="int")
+        group.add_option("--unaccent", dest="unaccent", my_default=False, action="store_true",
+                         help="Use the unaccent function provided by the database when available.")
+        parser.add_option_group(group)
+
+        group = optparse.OptionGroup(parser, "Multiprocessing options")
         # TODO sensible default for the three following limits.
-        group.add_option("--virtual-memory-limit", dest="virtual_memory_limit", my_default=768 * 1024 * 1024,
-                         help="Maximum allowed virtual memory per Gunicorn process. "
-                         "When the limit is reached, any memory allocation will fail.",
+        group.add_option("--workers", dest="workers", my_default=0,
+                         help="Specify the number of workers, 0 disable prefork mode.",
                          type="int")
-        group.add_option("--virtual-memory-reset", dest="virtual_memory_reset", my_default=640 * 1024 * 1024,
-                         help="Maximum allowed virtual memory per Gunicorn process. "
-                         "When the limit is reached, the worker will be reset after "
-                         "the current request.",
+        group.add_option("--limit-memory-soft", dest="limit_memory_soft", my_default=640 * 1024 * 1024,
+                         help="Maximum allowed virtual memory per worker, when reached the worker be reset after the current request.",
                          type="int")
-        group.add_option("--cpu-time-limit", dest="cpu_time_limit", my_default=60,
-                         help="Maximum allowed CPU time per Gunicorn process. "
-                         "When the limit is reached, an exception is raised.",
+        group.add_option("--limit-memory-hard", dest="limit_memory_hard", my_default=768 * 1024 * 1024,
+                         help="Maximum allowed virtual memory per worker, when reached, any memory allocation will fail.",
+                         type="int")
+        group.add_option("--limit-time-cpu", dest="limit_time_cpu", my_default=60,
+                         help="Maximum allowed CPU time per request.",
+                         type="int")
+        group.add_option("--limit-time-real", dest="limit_time_real", my_default=60,
+                         help="Maximum allowed Real time per request. ",
+                         type="int")
+        group.add_option("--limit-request", dest="limit_request", my_default=8192,
+                         help="Maximum number of request to be processed per worker.",
                          type="int")
-        group.add_option("--unaccent", dest="unaccent", my_default=False, action="store_true",
-                         help="Use the unaccent function provided by the database when available.")
-
         parser.add_option_group(group)
 
         # Copy all optparse options (i.e. MyOption) into self.options.
@@ -369,7 +374,7 @@ class configmanager(object):
 
         # if defined dont take the configfile value even if the defined value is None
         keys = ['xmlrpc_interface', 'xmlrpc_port', 'db_name', 'db_user', 'db_password', 'db_host',
-                'db_port', 'db_template', 'logfile', 'pidfile', 'smtp_port', 'cache_timeout',
+                'db_port', 'db_template', 'logfile', 'pidfile', 'smtp_port',
                 'email_from', 'smtp_server', 'smtp_user', 'smtp_password',
                 'netrpc_interface', 'netrpc_port', 'db_maxconn', 'import_partial', 'addons_path',
                 'netrpc', 'xmlrpc', 'syslog', 'without_demo', 'timezone',
@@ -393,8 +398,8 @@ class configmanager(object):
             'stop_after_init', 'logrotate', 'without_demo', 'netrpc', 'xmlrpc', 'syslog',
             'list_db', 'xmlrpcs', 'proxy_mode',
             'test_file', 'test_enable', 'test_commit', 'test_report_directory',
-            'osv_memory_count_limit', 'osv_memory_age_limit', 'max_cron_threads',
-            'virtual_memory_limit', 'virtual_memory_reset', 'cpu_time_limit', 'unaccent',
+            'osv_memory_count_limit', 'osv_memory_age_limit', 'max_cron_threads', 'unaccent',
+            'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request'
         ]
 
         for arg in keys:
diff --git a/openerp/wsgi/__init__.py b/openerp/wsgi/__init__.py
deleted file mode 100644 (file)
index a536ee5..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2012-2012 OpenERP s.a. (<http://openerp.com>).
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU Affero General Public License as
-#    published by the Free Software Foundation, either version 3 of the
-#    License, or (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU Affero General Public License for more details.
-#
-#    You should have received a copy of the GNU Affero General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-""" WSGI stack
-
-This module offers a WSGI interface to/from OpenERP.
-
-"""
-
-from . import core
-
-# TODO: This is for the web addons, can be removed later.
-register_wsgi_handler = core.register_wsgi_handler
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/wsgi/core.py b/openerp/wsgi/core.py
deleted file mode 100644 (file)
index 0aff717..0000000
+++ /dev/null
@@ -1,543 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2011-2012 OpenERP s.a. (<http://openerp.com>).
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU Affero General Public License as
-#    published by the Free Software Foundation, either version 3 of the
-#    License, or (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU Affero General Public License for more details.
-#
-#    You should have received a copy of the GNU Affero General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-"""
-
-WSGI stack, common code.
-
-"""
-
-import httplib
-import urllib
-import xmlrpclib
-import StringIO
-
-import errno
-import logging
-import os
-import signal
-import sys
-import threading
-import traceback
-
-import openerp
-import openerp.modules
-import openerp.tools.config as config
-from ..service import websrv_lib
-
-_logger = logging.getLogger(__name__)
-
-# XML-RPC fault codes. Some care must be taken when changing these: the
-# constants are also defined client-side and must remain in sync.
-# User code must use the exceptions defined in ``openerp.exceptions`` (not
-# create directly ``xmlrpclib.Fault`` objects).
-RPC_FAULT_CODE_CLIENT_ERROR = 1 # indistinguishable from app. error.
-RPC_FAULT_CODE_APPLICATION_ERROR = 1
-RPC_FAULT_CODE_WARNING = 2
-RPC_FAULT_CODE_ACCESS_DENIED = 3
-RPC_FAULT_CODE_ACCESS_ERROR = 4
-
-# The new (6.1) versioned RPC paths.
-XML_RPC_PATH = '/openerp/xmlrpc'
-XML_RPC_PATH_1 = '/openerp/xmlrpc/1'
-JSON_RPC_PATH = '/openerp/jsonrpc'
-JSON_RPC_PATH_1 = '/openerp/jsonrpc/1'
-
-def xmlrpc_return(start_response, service, method, params, legacy_exceptions=False):
-    """
-    Helper to call a service's method with some params, using a wsgi-supplied
-    ``start_response`` callback.
-
-    This is the place to look at to see the mapping between core exceptions
-    and XML-RPC fault codes.
-    """
-    # Map OpenERP core exceptions to XML-RPC fault codes. Specific exceptions
-    # defined in ``openerp.exceptions`` are mapped to specific fault codes;
-    # all the other exceptions are mapped to the generic
-    # RPC_FAULT_CODE_APPLICATION_ERROR value.
-    # This also mimics SimpleXMLRPCDispatcher._marshaled_dispatch() for
-    # exception handling.
-    try:
-        result = openerp.netsvc.dispatch_rpc(service, method, params)
-        response = xmlrpclib.dumps((result,), methodresponse=1, allow_none=False, encoding=None)
-    except Exception, e:
-        if legacy_exceptions:
-            response = xmlrpc_handle_exception_legacy(e)
-        else:
-            response = xmlrpc_handle_exception(e)
-    start_response("200 OK", [('Content-Type','text/xml'), ('Content-Length', str(len(response)))])
-    return [response]
-
-def xmlrpc_handle_exception(e):
-    if isinstance(e, openerp.osv.osv.except_osv): # legacy
-        fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, openerp.tools.ustr(e.value))
-        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-    elif isinstance(e, openerp.exceptions.Warning):
-        fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e))
-        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-    elif isinstance (e, openerp.exceptions.AccessError):
-        fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_ERROR, str(e))
-        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-    elif isinstance(e, openerp.exceptions.AccessDenied):
-        fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_DENIED, str(e))
-        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-    elif isinstance(e, openerp.exceptions.DeferredException):
-        info = e.traceback
-        # Which one is the best ?
-        formatted_info = "".join(traceback.format_exception(*info))
-        #formatted_info = openerp.tools.exception_to_unicode(e) + '\n' + info
-        fault = xmlrpclib.Fault(RPC_FAULT_CODE_APPLICATION_ERROR, formatted_info)
-        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-    else:
-        if hasattr(e, 'message') and e.message == 'AccessDenied': # legacy
-            fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_DENIED, str(e))
-            response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-        else:
-            info = sys.exc_info()
-            # Which one is the best ?
-            formatted_info = "".join(traceback.format_exception(*info))
-            #formatted_info = openerp.tools.exception_to_unicode(e) + '\n' + info
-            fault = xmlrpclib.Fault(RPC_FAULT_CODE_APPLICATION_ERROR, formatted_info)
-            response = xmlrpclib.dumps(fault, allow_none=None, encoding=None)
-    return response
-
-def xmlrpc_handle_exception_legacy(e):
-    if isinstance(e, openerp.osv.osv.except_osv):
-        fault = xmlrpclib.Fault('warning -- ' + e.name + '\n\n' + e.value, '')
-        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-    elif isinstance(e, openerp.exceptions.Warning):
-        fault = xmlrpclib.Fault('warning -- Warning\n\n' + str(e), '')
-        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-    elif isinstance(e, openerp.exceptions.AccessError):
-        fault = xmlrpclib.Fault('warning -- AccessError\n\n' + str(e), '')
-        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-    elif isinstance(e, openerp.exceptions.AccessDenied):
-        fault = xmlrpclib.Fault('AccessDenied', str(e))
-        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-    elif isinstance(e, openerp.exceptions.DeferredException):
-        info = e.traceback
-        formatted_info = "".join(traceback.format_exception(*info))
-        fault = xmlrpclib.Fault(openerp.tools.ustr(e.message), formatted_info)
-        response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
-    else:
-        info = sys.exc_info()
-        formatted_info = "".join(traceback.format_exception(*info))
-        fault = xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
-        response = xmlrpclib.dumps(fault, allow_none=None, encoding=None)
-    return response
-
-def wsgi_xmlrpc_1(environ, start_response):
-    """ The main OpenERP WSGI handler."""
-    if environ['REQUEST_METHOD'] == 'POST' and environ['PATH_INFO'].startswith(XML_RPC_PATH_1):
-        length = int(environ['CONTENT_LENGTH'])
-        data = environ['wsgi.input'].read(length)
-
-        params, method = xmlrpclib.loads(data)
-
-        path = environ['PATH_INFO'][len(XML_RPC_PATH_1):]
-        if path.startswith('/'): path = path[1:]
-        if path.endswith('/'): path = path[:-1]
-        path = path.split('/')
-
-        # All routes are hard-coded.
-
-        # No need for a db segment.
-        if len(path) == 1:
-            service = path[0]
-
-            if service == 'common':
-                if method in ('server_version',):
-                    service = 'db'
-            return xmlrpc_return(start_response, service, method, params)
-
-        # A db segment must be given.
-        elif len(path) == 2:
-            service, db_name = path
-            params = (db_name,) + params
-
-            return xmlrpc_return(start_response, service, method, params)
-
-        # A db segment and a model segment must be given.
-        elif len(path) == 3 and path[0] == 'model':
-            service, db_name, model_name = path
-            params = (db_name,) + params[:2] + (model_name,) + params[2:]
-            service = 'object'
-            return xmlrpc_return(start_response, service, method, params)
-
-        # The body has been read, need to raise an exception (not return None).
-        fault = xmlrpclib.Fault(RPC_FAULT_CODE_CLIENT_ERROR, '')
-        response = xmlrpclib.dumps(fault, allow_none=None, encoding=None)
-        start_response("200 OK", [('Content-Type','text/xml'), ('Content-Length', str(len(response)))])
-        return [response]
-
-def wsgi_xmlrpc(environ, start_response):
-    """ WSGI handler to return the versions."""
-    if environ['REQUEST_METHOD'] == 'POST' and environ['PATH_INFO'].startswith(XML_RPC_PATH):
-        length = int(environ['CONTENT_LENGTH'])
-        data = environ['wsgi.input'].read(length)
-
-        params, method = xmlrpclib.loads(data)
-
-        path = environ['PATH_INFO'][len(XML_RPC_PATH):]
-        if path.startswith('/'): path = path[1:]
-        if path.endswith('/'): path = path[:-1]
-        path = path.split('/')
-
-        # All routes are hard-coded.
-
-        if len(path) == 1 and path[0] == '' and method in ('version',):
-            return xmlrpc_return(start_response, 'common', method, ())
-
-        # The body has been read, need to raise an exception (not return None).
-        fault = xmlrpclib.Fault(RPC_FAULT_CODE_CLIENT_ERROR, '')
-        response = xmlrpclib.dumps(fault, allow_none=None, encoding=None)
-        start_response("200 OK", [('Content-Type','text/xml'), ('Content-Length', str(len(response)))])
-        return [response]
-
-def wsgi_xmlrpc_legacy(environ, start_response):
-    if environ['REQUEST_METHOD'] == 'POST' and environ['PATH_INFO'].startswith('/xmlrpc/'):
-        length = int(environ['CONTENT_LENGTH'])
-        data = environ['wsgi.input'].read(length)
-        path = environ['PATH_INFO'][len('/xmlrpc/'):] # expected to be one of db, object, ...
-
-        params, method = xmlrpclib.loads(data)
-        return xmlrpc_return(start_response, path, method, params, True)
-
-def wsgi_jsonrpc(environ, start_response):
-    pass
-
-def wsgi_webdav(environ, start_response):
-    pi = environ['PATH_INFO']
-    if environ['REQUEST_METHOD'] == 'OPTIONS' and pi in ['*','/']:
-        return return_options(environ, start_response)
-    elif pi.startswith('/webdav'):
-        http_dir = websrv_lib.find_http_service(pi)
-        if http_dir:
-            path = pi[len(http_dir.path):]
-            if path.startswith('/'):
-                environ['PATH_INFO'] = path
-            else:
-                environ['PATH_INFO'] = '/' + path
-            return http_to_wsgi(http_dir)(environ, start_response)
-
-def return_options(environ, start_response):
-    # Microsoft specific header, see
-    # http://www.ibm.com/developerworks/rational/library/2089.html
-    if 'Microsoft' in environ.get('User-Agent', ''):
-        options = [('MS-Author-Via', 'DAV')]
-    else:
-        options = []
-    options += [('DAV', '1 2'), ('Allow', 'GET HEAD PROPFIND OPTIONS REPORT')]
-    start_response("200 OK", [('Content-Length', str(0))] + options)
-    return []
-
-def http_to_wsgi(http_dir):
-    """
-    Turn a BaseHTTPRequestHandler into a WSGI entry point.
-
-    Actually the argument is not a bare BaseHTTPRequestHandler but is wrapped
-    (as a class, so it needs to be instanciated) in a HTTPDir.
-
-    This code is adapted from wbsrv_lib.MultiHTTPHandler._handle_one_foreign().
-    It is a temporary solution: the HTTP sub-handlers (in particular the
-    document_webdav addon) have to be WSGIfied.
-    """
-    def wsgi_handler(environ, start_response):
-
-        headers = {}
-        for key, value in environ.items():
-            if key.startswith('HTTP_'):
-                key = key[5:].replace('_', '-').title()
-                headers[key] = value
-            if key == 'CONTENT_LENGTH':
-                key = key.replace('_', '-').title()
-                headers[key] = value
-        if environ.get('Content-Type'):
-            headers['Content-Type'] = environ['Content-Type']
-
-        path = urllib.quote(environ.get('PATH_INFO', ''))
-        if environ.get('QUERY_STRING'):
-            path += '?' + environ['QUERY_STRING']
-
-        request_version = 'HTTP/1.1' # TODO
-        request_line = "%s %s %s\n" % (environ['REQUEST_METHOD'], path, request_version)
-
-        class Dummy(object):
-            pass
-
-        # Let's pretend we have a server to hand to the handler.
-        server = Dummy()
-        server.server_name = environ['SERVER_NAME']
-        server.server_port = int(environ['SERVER_PORT'])
-
-        # Initialize the underlying handler and associated auth. provider.
-        con = openerp.service.websrv_lib.noconnection(environ['wsgi.input'])
-        handler = http_dir.instanciate_handler(con, environ['REMOTE_ADDR'], server)
-
-        # Populate the handler as if it is called by a regular HTTP server
-        # and the request is already parsed.
-        handler.wfile = StringIO.StringIO()
-        handler.rfile = environ['wsgi.input']
-        handler.headers = headers
-        handler.command = environ['REQUEST_METHOD']
-        handler.path = path
-        handler.request_version = request_version
-        handler.close_connection = 1
-        handler.raw_requestline = request_line
-        handler.requestline = request_line
-
-        # Handle authentication if there is an auth. provider associated to
-        # the handler.
-        if hasattr(handler, 'auth_provider'):
-            try:
-                handler.auth_provider.checkRequest(handler, path)
-            except websrv_lib.AuthRequiredExc, ae:
-                # Darwin 9.x.x webdav clients will report "HTTP/1.0" to us, while they support (and need) the
-                # authorisation features of HTTP/1.1 
-                if request_version != 'HTTP/1.1' and ('Darwin/9.' not in handler.headers.get('User-Agent', '')):
-                    start_response("403 Forbidden", [])
-                    return []
-                start_response("401 Authorization required", [
-                    ('WWW-Authenticate', '%s realm="%s"' % (ae.atype,ae.realm)),
-                    # ('Connection', 'keep-alive'),
-                    ('Content-Type', 'text/html'),
-                    ('Content-Length', 4), # len(self.auth_required_msg)
-                    ])
-                return ['Blah'] # self.auth_required_msg
-            except websrv_lib.AuthRejectedExc,e:
-                start_response("403 %s" % (e.args[0],), [])
-                return []
-
-        method_name = 'do_' + handler.command
-
-        # Support the OPTIONS method even when not provided directly by the
-        # handler. TODO I would prefer to remove it and fix the handler if
-        # needed.
-        if not hasattr(handler, method_name):
-            if handler.command == 'OPTIONS':
-                return return_options(environ, start_response)
-            start_response("501 Unsupported method (%r)" % handler.command, [])
-            return []
-
-        # Finally, call the handler's method.
-        try:
-            method = getattr(handler, method_name)
-            method()
-            # The DAV handler buffers its output and provides a _flush()
-            # method.
-            getattr(handler, '_flush', lambda: None)()
-            response = parse_http_response(handler.wfile.getvalue())
-            response_headers = response.getheaders()
-            body = response.read()
-            start_response(str(response.status) + ' ' + response.reason, response_headers)
-            return [body]
-        except (websrv_lib.AuthRejectedExc, websrv_lib.AuthRequiredExc):
-            raise
-        except Exception, e:
-            start_response("500 Internal error", [])
-            return []
-
-    return wsgi_handler
-
-def parse_http_response(s):
-    """ Turn a HTTP response string into a httplib.HTTPResponse object."""
-    class DummySocket(StringIO.StringIO):
-        """
-        This is used to provide a StringIO to httplib.HTTPResponse
-        which, instead of taking a file object, expects a socket and
-        uses its makefile() method.
-        """
-        def makefile(self, *args, **kw):
-            return self
-    response = httplib.HTTPResponse(DummySocket(s))
-    response.begin()
-    return response
-
-# WSGI handlers registered through the register_wsgi_handler() function below.
-module_handlers = []
-
-def register_wsgi_handler(handler):
-    """ Register a WSGI handler.
-
-    Handlers are tried in the order they are added. We might provide a way to
-    register a handler for specific routes later.
-    """
-    module_handlers.append(handler)
-
-def application(environ, start_response):
-    """ WSGI entry point."""
-
-    # Try all handlers until one returns some result (i.e. not None).
-    wsgi_handlers = [
-        wsgi_xmlrpc_1,
-        wsgi_xmlrpc,
-        wsgi_jsonrpc,
-        wsgi_xmlrpc_legacy,
-        wsgi_webdav
-        ] + module_handlers
-    for handler in wsgi_handlers:
-        result = handler(environ, start_response)
-        if result is None:
-            continue
-        return result
-
-    # We never returned from the loop.
-    response = 'No handler found.\n'
-    start_response('404 Not Found', [('Content-Type', 'text/plain'), ('Content-Length', str(len(response)))])
-    return [response]
-
-# The WSGI server, started by start_server(), stopped by stop_server().
-httpd = None
-
-def serve():
-    """ Serve HTTP requests via werkzeug development server.
-
-    If werkzeug can not be imported, we fall back to wsgiref's simple_server.
-
-    Calling this function is blocking, you might want to call it in its own
-    thread.
-    """
-
-    global httpd
-
-    # TODO Change the xmlrpc_* options to http_*
-    interface = config['xmlrpc_interface'] or '0.0.0.0'
-    port = config['xmlrpc_port']
-    try:
-        import werkzeug.serving
-        if config['proxy_mode']:
-            from werkzeug.contrib.fixers import ProxyFix
-            app = ProxyFix(application)
-            suffix = ' (in proxy mode)'
-        else:
-            app = application
-            suffix = ''
-        httpd = werkzeug.serving.make_server(interface, port, app, threaded=True)
-        _logger.info('HTTP service (werkzeug) running on %s:%s%s', interface, port, suffix)
-    except ImportError:
-        import wsgiref.simple_server
-        _logger.warning('Werkzeug module unavailable, falling back to wsgiref.')
-        if config['proxy_mode']:
-            _logger.warning('Werkzeug module unavailable, not using proxy mode.')
-        httpd = wsgiref.simple_server.make_server(interface, port, application)
-        _logger.info('HTTP service (wsgiref) running on %s:%s', interface, port)
-
-    httpd.serve_forever()
-
-def start_server():
-    """ Call serve() in its own thread.
-
-    The WSGI server can be shutdown with stop_server() below.
-    """
-    threading.Thread(target=serve).start()
-
-def stop_server():
-    """ Initiate the shutdown of the WSGI server.
-
-    The server is supposed to have been started by start_server() above.
-    """
-    if httpd:
-        httpd.shutdown()
-
-# Master process id, can be used for signaling.
-arbiter_pid = None
-
-# Application setup before we can spawn any worker process.
-# This is suitable for e.g. gunicorn's on_starting hook.
-def on_starting(server):
-    global arbiter_pid
-    arbiter_pid = os.getpid() # TODO check if this is true even after replacing the executable
-    #openerp.tools.cache = kill_workers_cache
-    openerp.netsvc.init_logger()
-    openerp.osv.osv.start_object_proxy()
-    openerp.service.web_services.start_web_services()
-    openerp.modules.module.initialize_sys_path()
-    openerp.modules.loading.open_openerp_namespace()
-    for m in openerp.conf.server_wide_modules:
-        try:
-            openerp.modules.module.load_openerp_module(m)
-        except Exception:
-            msg = ''
-            if m == 'web':
-                msg = """
-The `web` module is provided by the addons found in the `openerp-web` project.
-Maybe you forgot to add those addons in your addons_path configuration."""
-            _logger.exception('Failed to load server-wide module `%s`.%s', m, msg)
-
-# Install our own signal handler on the master process.
-def when_ready(server):
-    # Hijack gunicorn's SIGWINCH handling; we can choose another one.
-    signal.signal(signal.SIGWINCH, make_winch_handler(server))
-
-# Install limits on virtual memory and CPU time consumption.
-def pre_request(worker, req):
-    import os
-    import psutil
-    import resource
-    import signal
-    # VMS and RLIMIT_AS are the same thing: virtual memory, a.k.a. address space
-    rss, vms = psutil.Process(os.getpid()).get_memory_info()
-    soft, hard = resource.getrlimit(resource.RLIMIT_AS)
-    resource.setrlimit(resource.RLIMIT_AS, (config['virtual_memory_limit'], hard))
-
-    r = resource.getrusage(resource.RUSAGE_SELF)
-    cpu_time = r.ru_utime + r.ru_stime
-    signal.signal(signal.SIGXCPU, time_expired)
-    soft, hard = resource.getrlimit(resource.RLIMIT_CPU)
-    resource.setrlimit(resource.RLIMIT_CPU, (cpu_time + config['cpu_time_limit'], hard))
-
-# Reset the worker if it consumes too much memory (e.g. caused by a memory leak).
-def post_request(worker, req, environ):
-    import os
-    import psutil
-    rss, vms = psutil.Process(os.getpid()).get_memory_info()
-    if vms > config['virtual_memory_reset']:
-        _logger.info('Virtual memory consumption '
-            'too high, rebooting the worker.')
-        worker.alive = False # Commit suicide after the request.
-
-# Our signal handler will signal a SGIQUIT to all workers.
-def make_winch_handler(server):
-    def handle_winch(sig, fram):
-        server.kill_workers(signal.SIGQUIT) # This is gunicorn specific.
-    return handle_winch
-
-# SIGXCPU (exceeded CPU time) signal handler will raise an exception.
-def time_expired(n, stack):
-    _logger.info('CPU time limit exceeded.')
-    raise Exception('CPU time limit exceeded.') # TODO one of openerp.exception
-
-# Kill gracefuly the workers (e.g. because we want to clear their cache).
-# This is done by signaling a SIGWINCH to the master process, so it can be
-# called by the workers themselves.
-def kill_workers():
-    try:
-        os.kill(arbiter_pid, signal.SIGWINCH)
-    except OSError, e:
-        if e.errno == errno.ESRCH: # no such pid
-            return
-        raise
-
-class kill_workers_cache(openerp.tools.ormcache):
-    def clear(self, dbname, *args, **kwargs):
-        kill_workers()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/wsgi/proxied.py b/openerp/wsgi/proxied.py
deleted file mode 100644 (file)
index 658f6f2..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-#    OpenERP, Open Source Management Solution
-#    Copyright (C) 2012 OpenERP s.a. (<http://openerp.com>).
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU Affero General Public License as
-#    published by the Free Software Foundation, either version 3 of the
-#    License, or (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU Affero General Public License for more details.
-#
-#    You should have received a copy of the GNU Affero General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-"""
-
-WSGI entry point with Proxy mode (from Werkzeug).
-
-"""
-
-from werkzeug.contrib.fixers import ProxyFix
-
-from . import core
-
-application = ProxyFix(core.application)
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index a26b74e..18d3410 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -97,6 +97,7 @@ setuptools.setup(
           'gdata',
           'lxml < 3',
           'mako',
+          'psutil',
           'psycopg2',
           'pydot',
           'python-dateutil < 2',